Created
May 20, 2021 18:28
-
-
Save fakenickels/33621a21f8963b05018d0b409bf7b5a8 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
class Erlang < Formula | |
desc "Programming language for highly scalable real-time systems" | |
homepage "https://www.erlang.org/" | |
# Download tarball from GitHub; it is served faster than the official tarball. | |
url "https://github.com/erlang/otp/archive/OTP-23.3.4.tar.gz" | |
sha256 "adc937319227774d53f941f25fa31990f5f89a530f6cb5511d5ea609f9f18ebe" | |
license "Apache-2.0" | |
head "https://github.com/erlang/otp.git" | |
livecheck do | |
url :stable | |
regex(/^OTP[._-]v?(\d+(?:\.\d+)+)$/i) | |
end | |
bottle do | |
sha256 cellar: :any, arm64_big_sur: "eb20c6f2f31a73bb7830a56f1513c8a9bb5bb209b72d555146cc3aa10fb1eb9f" | |
sha256 cellar: :any, big_sur: "841bcaff223387cc95a4687bf59a239defbe6ce1e365d3d303c30878b4b05acb" | |
sha256 cellar: :any, catalina: "c2f3a456080a1c63cc6533fd06cc99d25ba28d44338d4e801509303cb514db35" | |
sha256 cellar: :any, mojave: "fbb11e617a4031b77dbc4c2d20ff1c8e471a8f9894959e015bdf8ebc0403268e" | |
end | |
depends_on "autoconf" => :build | |
depends_on "automake" => :build | |
depends_on "libtool" => :build | |
depends_on "[email protected]" | |
depends_on "wxmac" # for GUI apps like observer | |
uses_from_macos "m4" => :build | |
resource "html" do | |
url "https://www.erlang.org/download/otp_doc_html_23.3.tar.gz" | |
mirror "https://fossies.org/linux/misc/otp_doc_html_23.3.tar.gz" | |
sha256 "03d86ac3e71bb58e27d01743a9668c7a1265b573541d4111590f0f3ec334383e" | |
end | |
def install | |
# Unset these so that building wx, kernel, compiler and | |
# other modules doesn't fail with an unintelligible error. | |
%w[LIBS FLAGS AFLAGS ZFLAGS].each { |k| ENV.delete("ERL_#{k}") } | |
# Do this if building from a checkout to generate configure | |
system "./otp_build", "autoconf" if File.exist? "otp_build" | |
args = %W[ | |
--disable-debug | |
--disable-silent-rules | |
--prefix=#{prefix} | |
--enable-dynamic-ssl-lib | |
--enable-hipe | |
--enable-sctp | |
--enable-shared-zlib | |
--enable-smp-support | |
--enable-threads | |
--enable-wx | |
--with-ssl=#{Formula["[email protected]"].opt_prefix} | |
--without-javac | |
] | |
on_macos do | |
args << "--enable-darwin-64bit" | |
args << "--enable-kernel-poll" if MacOS.version > :el_capitan | |
args << "--with-dynamic-trace=dtrace" if MacOS::CLT.installed? | |
end | |
system "./configure", *args | |
system "make" | |
system "make", "install" | |
# Build the doc chunks (manpages are also built by default) | |
system "make", "docs", "DOC_TARGETS=chunks" | |
system "make", "install-docs" | |
doc.install resource("html") | |
end | |
def caveats | |
<<~EOS | |
Man pages can be found in: | |
#{opt_lib}/erlang/man | |
Access them with `erl -man`, or add this directory to MANPATH. | |
EOS | |
end | |
test do | |
system "#{bin}/erl", "-noshell", "-eval", "crypto:start().", "-s", "init", "stop" | |
(testpath/"factorial").write <<~EOS | |
#!#{bin}/escript | |
%% -*- erlang -*- | |
%%! -smp enable -sname factorial -mnesia debug verbose | |
main([String]) -> | |
try | |
N = list_to_integer(String), | |
F = fac(N), | |
io:format("factorial ~w = ~w\n", [N,F]) | |
catch | |
_:_ -> | |
usage() | |
end; | |
main(_) -> | |
usage(). | |
usage() -> | |
io:format("usage: factorial integer\n"). | |
fac(0) -> 1; | |
fac(N) -> N * fac(N-1). | |
EOS | |
chmod 0755, "factorial" | |
assert_match "usage: factorial integer", shell_output("./factorial") | |
assert_match "factorial 42 = 1405006117752879898543142606244511569936384000000000", shell_output("./factorial 42") | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment