aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/packages/sml.scm158
1 files changed, 156 insertions, 2 deletions
diff --git a/gnu/packages/sml.scm b/gnu/packages/sml.scm
index d441dcf638..af7f15512b 100644
--- a/gnu/packages/sml.scm
+++ b/gnu/packages/sml.scm
@@ -2,7 +2,7 @@
;;; Copyright © 2017 Andy Patterson <ajpatter@uwaterloo.ca>
;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
+;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -28,7 +28,8 @@
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module ((guix licenses) #:prefix license:)
- #:use-module (guix packages))
+ #:use-module (guix packages)
+ #:use-module (guix gexp))
(define-public polyml
(package
@@ -75,3 +76,156 @@ function interface, and a symbolic debugger.")
(license
(list license:lgpl2.1
license:lgpl2.1+))))
+
+(define (smlnj-file version filename hash)
+ (origin
+ (method url-fetch)
+ (uri (string-append "http://smlnj.cs.uchicago.edu/dist/working/" version "/" filename))
+ (sha256
+ (base32
+ hash))))
+
+(define-public smlnj
+ (package
+ (name "smlnj")
+ (version "110.94")
+ (source #f) ; Sources are passed as native-inputs.
+ (build-system gnu-build-system)
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ (replace 'unpack
+ (lambda* (#:key inputs #:allow-other-keys)
+ (for-each
+ (lambda (file)
+ (invoke "tar" "xvf" (assoc-ref inputs file)))
+ (list "config"
+ "cm"
+ "compiler"
+ "runtime"
+ "system"
+ "MLRISC"
+ "smlnj-lib"
+ "old-basis"
+ "ckit"
+ "nlffi"
+ "cml"
+ "eXene"
+ "ml-lpt"
+ "ml-lex"
+ "ml-yacc"
+ "ml-burg"
+ "pgraph"
+ "trace-debug-profile"
+ "heap2asm"
+ "smlnj-c"))
+ #t))
+ (delete 'configure)
+ (replace 'patch-source-shebangs
+ (lambda _ (substitute*
+ (list "config/install.sh"
+ "runtime/objs/mk.amd64-linux")
+ (("/bin/sh") (which "sh")))))
+ (replace 'build
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "config/chk-global-names.sh"
+ (("CC=.*") "CC=gcc"))
+ (substitute* "config/unpack"
+ (("# Now do it:") "exit 0"))
+ (substitute* "config/_arch-n-opsys"
+ (("uname") (which "uname")))
+ (substitute* "config/install.sh"
+ (("DEFAULT_SIZE=\"32\"")
+ "DEFAULT_SIZE=\"64\"")
+ (("BASEDIR=\\$ROOT/base")
+ "BASEDIR=$ROOT"))
+ (invoke "sh" "config/install.sh"))))))
+ (native-inputs
+ `(("cm"
+ ,(smlnj-file version
+ "cm.tgz"
+ "1x70nrk1gnxrzx16c7dyns35zkrqc0ngqyk34880ih04ccwmyxkp"))
+ ("smlnj-c"
+ ,(smlnj-file version
+ "smlnj-c.tgz"
+ "1w6yrckbn5yxi3m0hqb57lwmf7pri66yi0zs2ahvcv5bwbr4dfh1"))
+ ("config"
+ ,(smlnj-file version
+ "config.tgz"
+ "16ynwrakbcv5mp8i596aw8da09qdjkx9j0y5wxgix8aa99px4aba"))
+ ("compiler"
+ ,(smlnj-file version
+ "compiler.tgz"
+ "1fmxj017s9bg1hr4psvcxasp0hcrc00bk9f0845fr7gy8mb743a3"))
+ ("runtime"
+ ,(smlnj-file version
+ "runtime.tgz"
+ "08xq9ddp4ciqi1rwsnma0rsj7ydlbzcb9pc9m27n4krd61h8k4z9"))
+ ("system"
+ ,(smlnj-file version
+ "system.tgz"
+ "0lmi03mx9fbrdshazqmrvg1j4s6hnpyfm90rl7f8qhgy0qi8almh"))
+ ("MLRISC"
+ ,(smlnj-file version
+ "MLRISC.tgz"
+ "0y3f1ffzpqfn03a941dmjsr0zz4lz742ww1zbfnp15jbcy7mybiv"))
+ ("smlnj-lib"
+ ,(smlnj-file version
+ "smlnj-lib.tgz"
+ "1vvlgws7kb53v63hwfakvq5xbiix1pqiafk5m86qas46ayy731g7"))
+ ("old-basis"
+ ,(smlnj-file version
+ "old-basis.tgz"
+ "1kjgwnz0caymk4im9mjf88f2cym8bndnz0r84di5l4bd6pkwl8b2"))
+ ("ckit"
+ ,(smlnj-file version
+ "ckit.tgz"
+ "158973wwd4pkf6fpzwyfm9968xl7pmb2sd2zf1fb3s055gm5anz2"))
+ ("nlffi"
+ ,(smlnj-file version
+ "nlffi.tgz"
+ "13b3561b2bxpxyyy8ld359na7vimndw53nsc0fgr9li4xa3y70hl"))
+ ("cml"
+ ,(smlnj-file version
+ "cml.tgz"
+ "0q00nmsqq33vdykyz9mgsy7r437l26gnxxmfl03ls88kiq7fbq3l"))
+ ("eXene"
+ ,(smlnj-file version
+ "eXene.tgz"
+ "0phxh34psji67z30lq61b8pkwp7m45pakn6vnk592lmibikax2q0"))
+ ("ml-lpt"
+ ,(smlnj-file version
+ "ml-lpt.tgz"
+ "053784lbf57pzd80gz4x7chqyxvdn580ix6pkqwcr1vwpv980zyj"))
+ ("ml-lex"
+ ,(smlnj-file version
+ "ml-lex.tgz"
+ "052w6ck80v1jgql4m0k24hkkx9k4qwvqgxvk22hnwfh6k1avrk1i"))
+ ("ml-yacc"
+ ,(smlnj-file version
+ "ml-yacc.tgz"
+ "1vj346ffzx7vbcnzhw49cqzlmfw35hzzhvlivyakdqalqwc97h6m"))
+ ("ml-burg"
+ ,(smlnj-file version
+ "ml-burg.tgz"
+ "02qw4xkdh4h6ngj8a5yhgg4k4ph6lnhslbfh1drdz79whd389lzx"))
+ ("pgraph"
+ ,(smlnj-file version
+ "pgraph.tgz"
+ "0c4qgm46dvkix4s56hj3ii9025m3pcxj4hc2z4mcdxlw0gj0r684"))
+ ("trace-debug-profile"
+ ,(smlnj-file version
+ "trace-debug-profile.tgz"
+ "1z8ip80hgnj637ywcpzj9hfbnsci3qsdhssdbgparkzh7mk2bi4i"))
+ ("heap2asm"
+ ,(smlnj-file version
+ "heap2asm.tgz"
+ "0g0ndf4wj197igrac136lsc8wpj9686vv0kwarrbwffrrrkb1w76"))))
+ (synopsis "Standard ML of New Jersey interactive compiler")
+ (description "SML/NJ is an implementation of the Standard ML programming
+language. Standard ML has many features, including type safety, polymorphism,
+algebraic data types with pattern matching, higher-order functions, and a
+sophisticated module system. It is especially well-suited for writing
+compilers and other language processors.")
+ (home-page "http://www.smlnj.org/")
+ (license license:bsd-2)))