-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
104 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
class Readline < Formula | ||
desc "Library for command-line editing" | ||
homepage "https://tiswww.case.edu/php/chet/readline/rltop.html" | ||
url "https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz" | ||
mirror "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz" | ||
version "8.2.13" | ||
sha256 "3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" | ||
license "GPL-3.0-or-later" | ||
|
||
%w[ | ||
001 bbf97f1ec40a929edab5aa81998c1e2ef435436c597754916e6a5868f273aff7 | ||
002 e06503822c62f7bc0d9f387d4c78c09e0ce56e53872011363c74786c7cd4c053 | ||
003 24f587ba46b46ed2b1868ccaf9947504feba154bb8faabd4adaea63ef7e6acb0 | ||
004 79572eeaeb82afdc6869d7ad4cba9d4f519b1218070e17fa90bbecd49bd525ac | ||
005 622ba387dae5c185afb4b9b20634804e5f6c1c6e5e87ebee7c35a8f065114c99 | ||
006 c7b45ff8c0d24d81482e6e0677e81563d13c74241f7b86c4de00d239bc81f5a1 | ||
007 5911a5b980d7900aabdbee483f86dab7056851e6400efb002776a0a4a1bab6f6 | ||
008 a177edc9d8c9f82e8c19d0630ab351f3fd1b201d655a1ddb5d51c4cee197b26a | ||
009 3d9885e692e1998523fd5c61f558cecd2aafd67a07bd3bfe1d7ad5a31777a116 | ||
010 758e2ec65a0c214cfe6161f5cde3c5af4377c67d820ea01d13de3ca165f67b4c | ||
011 e0013d907f3a9e6482cc0934de1bd82ee3c3c4fd07a9646aa9899af237544dd7 | ||
012 6c8adf8ed4a2ca629f7fd11301ed6293a6248c9da0c674f86217df715efccbd3 | ||
013 1ea434957d6ec3a7b61763f1f3552dad0ebdd6754d65888b5cd6d80db3a788a8 | ||
].each_slice(2) do |p, checksum| | ||
patch :p0 do | ||
url "https://ftp.gnu.org/gnu/readline/readline-8.2-patches/readline82-#{p}" | ||
mirror "https://ftpmirror.gnu.org/readline/readline-8.2-patches/readline82-#{p}" | ||
sha256 checksum | ||
end | ||
end | ||
|
||
# We're not using `url :stable` here because we need `url` to be a string | ||
# when we use it in the `strategy` block. | ||
livecheck do | ||
url :stable | ||
regex(/href=.*?readline[._-]v?(\d+(?:\.\d+)+)\.t/i) | ||
strategy :gnu do |page, regex| | ||
# Match versions from files | ||
versions = page.scan(regex) | ||
.flatten | ||
.uniq | ||
.map { |v| Version.new(v) } | ||
.sort | ||
next versions if versions.blank? | ||
|
||
# Assume the last-sorted version is newest | ||
newest_version = versions.last | ||
|
||
# Simply return the found versions if there isn't a patches directory | ||
# for the "newest" version | ||
patches_directory = page.match(%r{href=.*?(readline[._-]v?#{newest_version.major_minor}[._-]patches/?)["' >]}i) | ||
next versions if patches_directory.blank? | ||
|
||
# Fetch the page for the patches directory | ||
patches_page = Homebrew::Livecheck::Strategy.page_content( | ||
"https://ftp.gnu.org/gnu/readline/#{patches_directory[1]}", | ||
) | ||
next versions if patches_page[:content].blank? | ||
|
||
# Generate additional major.minor.patch versions from the patch files in | ||
# the directory and add those to the versions array | ||
patches_page[:content].scan(/href=.*?readline[._-]?v?\d+(?:\.\d+)*[._-]0*(\d+)["' >]/i).each do |match| | ||
versions << "#{newest_version.major_minor}.#{match[0]}" | ||
end | ||
|
||
versions | ||
end | ||
end | ||
|
||
bottle do | ||
root_url "https://github.com/gromgit/homebrew-core-aarch64_linux/releases/download/readline-8.2.13" | ||
sha256 cellar: :any_skip_relocation, aarch64_linux: "e99275c523d1a8b4a61303bab92aefdb1d9054f8e5b82f7a327b698e096292ce" | ||
end | ||
|
||
keg_only :shadowed_by_macos, "macOS provides BSD libedit" | ||
|
||
uses_from_macos "ncurses" | ||
|
||
def install | ||
system "./configure", "--prefix=#{prefix}", "--with-curses" | ||
# FIXME: Setting `SHLIB_LIBS` should not be needed, but, on Linux, | ||
# many dependents expect readline to link with ncurses and | ||
# are broken without it. Readline should be agnostic about | ||
# the terminfo library on Linux. | ||
system "make", "install", "SHLIB_LIBS=-lcurses" | ||
end | ||
|
||
test do | ||
(testpath/"test.c").write <<~EOS | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <readline/readline.h> | ||
int main() | ||
{ | ||
printf("%s\\n", readline("test> ")); | ||
return 0; | ||
} | ||
EOS | ||
|
||
system ENV.cc, "-L", lib, "test.c", "-L#{lib}", "-lreadline", "-o", "test" | ||
assert_equal "test> Hello, World!\nHello, World!", pipe_output("./test", "Hello, World!\n").strip | ||
end | ||
end |