class Smlnj < Formula desc "Standard ML of New Jersey" homepage "https://www.smlnj.org/" url "http://smlnj.cs.uchicago.edu/dist/working/110.84/config.tgz" sha256 "1810d3ca768222e120c7a3f2f93aafd652705371fc73929423c671dce3cef832" bottle do sha256 "d4441907f2dea02188487b3247e402d70b867a6bdd0e84da0cf5e8d7a0d44540" => :sierra end # Mojave doesn't support 32-bit builds, and thus smlnj fails to compile. # This will only be safe to remove when upstream support 64-bit builds. depends_on :maximum_macos => [:high_sierra, :build] resource "cm" do url "https://www.smlnj.org/dist/working/110.84/cm.tgz" sha256 "7055c60481a887f27a5135ac1f33233565b99a7c99c4aa73e023e28e629b0663" end resource "compiler" do url "https://www.smlnj.org/dist/working/110.84/compiler.tgz" sha256 "6d23aff2e75727bf6969b05a070128f187e06f60408aabf6a71e0475326fee87" end resource "runtime" do url "https://www.smlnj.org/dist/working/110.84/runtime.tgz" sha256 "5fcf4bbdeaddb247f69a333d2295f5f5c0be55b1f86ff4fbffb63f0021d84d6c" end resource "system" do url "https://www.smlnj.org/dist/working/110.84/system.tgz" sha256 "f46b1de790000a98f4aa9830325d39cb1e4867338d4db6b8a102084db1512218" end resource "bootstrap" do url "https://www.smlnj.org/dist/working/110.84/boot.x86-unix.tgz" sha256 "a29e3b0ca623da197e9c18ea64db4c2a08fe5e6add85c0d053c4ecfa653ace82" end resource "mlrisc" do url "https://www.smlnj.org/dist/working/110.84/MLRISC.tgz" sha256 "da3c5236018fa7608863c2fe1f3c57b60013df98b5a249fb3d4edc738cdfd072" end resource "lib" do url "https://www.smlnj.org/dist/working/110.84/smlnj-lib.tgz" sha256 "3356924655277416d8a491c1d601a0f567ab3d15cb17e243620e85cb28f0e9dd" end resource "ckit" do url "https://www.smlnj.org/dist/working/110.84/ckit.tgz" sha256 "7e2534e393d2372cad8ff9ddd306881db91bbbcc2b0e0538e76868c86c658c36" end resource "nlffi" do url "https://www.smlnj.org/dist/working/110.84/nlffi.tgz" sha256 "8b96a82a3d63b000b70a1b982aab9750ce9caa77f316f6a923969e86b0133f31" end resource "cml" do url "https://www.smlnj.org/dist/working/110.84/cml.tgz" sha256 "556110c746db863211ac8a97e1bf097b0e5d45dfea4b3e8194b6c389ac2b569a" end resource "exene" do url "https://www.smlnj.org/dist/working/110.84/eXene.tgz" sha256 "3fe1c6a1a334e7d7359fbcfd053066c88cb7705a90975b60fff946554aa0019c" end resource "ml-lpt" do url "https://www.smlnj.org/dist/working/110.84/ml-lpt.tgz" sha256 "2f60e1467a69fd4fb5501354244337926bc2a65225dde328f6aa3883b14fb3a5" end resource "ml-lex" do url "https://www.smlnj.org/dist/working/110.84/ml-lex.tgz" sha256 "cc7e045aa9667f1eed055db1defca0e830eed34c08f3dfdf37f698964fe04070" end resource "ml-yacc" do url "https://www.smlnj.org/dist/working/110.84/ml-yacc.tgz" sha256 "cfebaeb5f08810fcc93c49bf171834b7bf14b5f7e76d206e0afa35e18887bdb9" end resource "ml-burg" do url "https://www.smlnj.org/dist/working/110.84/ml-burg.tgz" sha256 "62ea37b13788078e3ea77d3b870da42788153c348009f827f2c0b05cfc07d918" end resource "pgraph" do url "https://www.smlnj.org/dist/working/110.84/pgraph.tgz" sha256 "aa2f14de13a540dbc370b45757156c0b03516a5b8f97b5759292841d7b7ac1cb" end resource "trace-debug-profile" do url "https://www.smlnj.org/dist/working/110.84/trace-debug-profile.tgz" sha256 "ecc54281b8654c75f8b9d4ebdf1ff67de71ef31297cf1b14115cd75645e46a5a" end resource "heap2asm" do url "https://www.smlnj.org/dist/working/110.84/heap2asm.tgz" sha256 "3d33c52b650536762d47534f07709e749cc821ce515aef2fb9a746db11433e95" end resource "c" do url "https://www.smlnj.org/dist/working/110.84/smlnj-c.tgz" sha256 "145a513becb4c98991af7eae81ae19b8fff336458f1f011eafdc283cb76deee9" end def install ENV.deparallelize ENV.m32 # does not build 64-bit # Build in place root = prefix/"SMLNJ_HOME" root.mkpath cp_r buildpath, root/"config" # Rewrite targets list (default would be too minimalistic) rm root/"config/targets" (root/"config/targets").write targets # Download and extract all the sources for the base system %w[cm compiler runtime system].each do |name| resource(name).stage { cp_r pwd, root/"base" } end # Download the remaining packages that go directly into the root %w[ bootstrap mlrisc lib ckit nlffi cml exene ml-lpt ml-lex ml-yacc ml-burg pgraph trace-debug-profile heap2asm c ].each do |name| resource(name).stage { cp_r pwd, root } end inreplace root/"base/runtime/objs/mk.x86-darwin", "/usr/bin/as", "as" # Orrrr, don't mess with our PATH. Superenv carefully sets that up. inreplace root/"base/runtime/config/gen-posix-names.sh" do |s| s.gsub! "PATH=/bin:/usr/bin", "# do not hardcode the path" s.gsub! "/usr/include", "#{MacOS.sdk_path}/usr/include" unless MacOS::CLT.installed? end # Make the configure program recognize macOS 10.13. Reported upstream: # https://smlnj-gforge.cs.uchicago.edu/tracker/index.php?func=detail&aid=187&group_id=33&atid=215 inreplace root/"config/_arch-n-opsys", "16*) OPSYS=darwin", "1*) OPSYS=darwin" cd root do system "config/install.sh" end %w[ sml heap2asm heap2exec ml-antlr ml-build ml-burg ml-lex ml-makedepend ml-nlffigen ml-ulex ml-yacc ].each { |e| bin.install_symlink root/"bin/#{e}" } end def targets <<~EOS request ml-ulex request ml-ulex-mllex-tool request ml-lex request ml-lex-lex-ext request ml-yacc request ml-yacc-grm-ext request ml-antlr request ml-lpt-lib request ml-burg request smlnj-lib request tdp-util request cml request cml-lib request mlrisc request ml-nlffigen request ml-nlffi-lib request mlrisc-tools request eXene request pgraph-util request ckit request heap2asm EOS end test do system bin/"ml-nlffigen" assert_predicate testpath/"NLFFI-Generated/nlffi-generated.cm", :exist? end end