* [bug#38606] [WIP SMLnj 1/1] gnu: Add smlnj.
2019-12-14 4:04 [bug#38606] [WIP SMLnj 0/1] Add SMLnj Brett Gilio
@ 2019-12-14 4:06 ` Brett Gilio
2020-01-16 0:36 ` [bug#38606] [WIP v2 0/1] Add SMLNJ Brett Gilio
` (3 subsequent siblings)
4 siblings, 0 replies; 12+ messages in thread
From: Brett Gilio @ 2019-12-14 4:06 UTC (permalink / raw)
To: 38606
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: [WIP SMLnj 1/1] gnu: Add smlnj. --]
[-- Type: text/x-patch, Size: 4747 bytes --]
From 74605396e2d932adb8e570702ec2d3b767b17715 Mon Sep 17 00:00:00 2001
From: Brett Gilio <brettg@posteo.net>
Date: Fri, 13 Dec 2019 22:02:20 -0600
Subject: [WIP SMLnj 1/1] gnu: Add smlnj.
* gnu/packages/sml.scm (smlnj): New variable.
---
gnu/packages/sml.scm | 89 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 89 insertions(+)
diff --git a/gnu/packages/sml.scm b/gnu/packages/sml.scm
index 30ee58c498..da332e2b2e 100644
--- a/gnu/packages/sml.scm
+++ b/gnu/packages/sml.scm
@@ -75,3 +75,92 @@ 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 ;; TODO: Incomplete.
+ (package
+ (name "smlnj")
+ (version "110.94")
+ (source (plain-file "" ""))
+ (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"))))
+ (description #f)
+ (synopsis #f)
+ (home-page #f)
+ (license #f)))
--
2.24.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [bug#38606] [WIP v2 0/1] Add SMLNJ
2019-12-14 4:04 [bug#38606] [WIP SMLnj 0/1] Add SMLnj Brett Gilio
2019-12-14 4:06 ` [bug#38606] [WIP SMLnj 1/1] gnu: Add smlnj Brett Gilio
@ 2020-01-16 0:36 ` Brett Gilio
2020-01-16 0:36 ` [bug#38606] [WIP v2 1/1] gnu: Add smlnj Brett Gilio
` (2 subsequent siblings)
4 siblings, 0 replies; 12+ messages in thread
From: Brett Gilio @ 2020-01-16 0:36 UTC (permalink / raw)
To: 38606
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: [WIP v2 0/1] Add SMLNJ --]
[-- Type: text/x-patch, Size: 677 bytes --]
From 51d83f01e80f274fe30cf6cf39f5f0eff554c7a6 Mon Sep 17 00:00:00 2001
From: Brett Gilio <brettg@gnu.org>
Date: Wed, 15 Jan 2020 18:34:34 -0600
Subject: [WIP v2 0/1] Add SMLNJ
This is a revision of the original SMLNJ patch with some more progress.
This package still needs a considerable amount of work before it will be
considered ready. If you have time or interest, please do not hesitate to
contribute!
SMLNJ is an important package for our Standard ML compiler stack, especially
for bootstrapping.
Brett Gilio (1):
gnu: Add smlnj.
gnu/packages/sml.scm | 158 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 156 insertions(+), 2 deletions(-)
--
2.24.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* [bug#38606] [WIP v2 1/1] gnu: Add smlnj.
2019-12-14 4:04 [bug#38606] [WIP SMLnj 0/1] Add SMLnj Brett Gilio
2019-12-14 4:06 ` [bug#38606] [WIP SMLnj 1/1] gnu: Add smlnj Brett Gilio
2020-01-16 0:36 ` [bug#38606] [WIP v2 0/1] Add SMLNJ Brett Gilio
@ 2020-01-16 0:36 ` Brett Gilio
2020-01-16 14:59 ` Brett Gilio
2021-11-07 15:00 ` [bug#38606] [WIP SMLnj 0/1] Add SMLnj Foo Chuan Wei
2021-12-12 16:37 ` bug#38606: " Chuan Wei Foo
4 siblings, 1 reply; 12+ messages in thread
From: Brett Gilio @ 2020-01-16 0:36 UTC (permalink / raw)
To: 38606
[-- Attachment #1: [WIP v2 1/1] gnu: Add smlnj. --]
[-- Type: text/x-patch, Size: 7445 bytes --]
From 51d83f01e80f274fe30cf6cf39f5f0eff554c7a6 Mon Sep 17 00:00:00 2001
From: Brett Gilio <brettg@posteo.net>
Date: Fri, 13 Dec 2019 22:02:20 -0600
Subject: [WIP v2 1/1] gnu: Add smlnj.
* gnu/packages/sml.scm (smlnj): New variable.
---
gnu/packages/sml.scm | 158 ++++++++++++++++++++++++++++++++++++++++++-
1 file 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)))
--
2.24.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [bug#38606] [WIP v2 1/1] gnu: Add smlnj.
2020-01-16 0:36 ` [bug#38606] [WIP v2 1/1] gnu: Add smlnj Brett Gilio
@ 2020-01-16 14:59 ` Brett Gilio
2021-10-29 23:33 ` [bug#38606] [WIP SMLnj 0/1] Add SMLnj Tim Lee
2021-11-10 11:07 ` [bug#38606] [WIP v2 1/1] gnu: Add smlnj Foo Chuan Wei
0 siblings, 2 replies; 12+ messages in thread
From: Brett Gilio @ 2020-01-16 14:59 UTC (permalink / raw)
To: 38606
One particularly interesting issue of this package is, after retrieving
a viable BOOTLIST file to use for compilation, we are left with this.
--8<---------------cut here---------------start------------->8---
brettg@oryx ~/Repos/smlnj [env]$ ./bin/.run/run.amd64-linux
./bin/.run/run.amd64-linux: Fatal error -- no in-core heap image found
--8<---------------cut here---------------end--------------->8---
Not quite sure how to investigate this issue. If anybody has any
insights please share, otherwise I will just contact upstream in a the
coming days.
--
Brett M. Gilio
GNU Guix, Contributor | GNU Project, Webmaster
[DFC0 C7F7 9EE6 0CA7 AE55 5E19 6722 43C4 A03F 0EEE]
<brettg@gnu.org> <brettg@posteo.net>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [bug#38606] [WIP SMLnj 0/1] Add SMLnj.
2020-01-16 14:59 ` Brett Gilio
@ 2021-10-29 23:33 ` Tim Lee
2021-11-10 11:07 ` [bug#38606] [WIP v2 1/1] gnu: Add smlnj Foo Chuan Wei
1 sibling, 0 replies; 12+ messages in thread
From: Tim Lee @ 2021-10-29 23:33 UTC (permalink / raw)
To: brettg; +Cc: 38606
Brett Gilio wrote on 2020-01-16:
> One particularly interesting issue of this package is, after retrieving
> a viable BOOTLIST file to use for compilation, we are left with this.
>
> --8<---------------cut here---------------start------------->8---
> brettg@oryx ~/Repos/smlnj [env]$ ./bin/.run/run.amd64-linux
> ./bin/.run/run.amd64-linux: Fatal error -- no in-core heap image found
> --8<---------------cut here---------------end--------------->8---
>
> Not quite sure how to investigate this issue. If anybody has any
> insights please share, otherwise I will just contact upstream in a the
> coming days.
Did you manage to get an answer from upstream? If so, what did they say?
^ permalink raw reply [flat|nested] 12+ messages in thread
* [bug#38606] [WIP v2 1/1] gnu: Add smlnj.
2020-01-16 14:59 ` Brett Gilio
2021-10-29 23:33 ` [bug#38606] [WIP SMLnj 0/1] Add SMLnj Tim Lee
@ 2021-11-10 11:07 ` Foo Chuan Wei
1 sibling, 0 replies; 12+ messages in thread
From: Foo Chuan Wei @ 2021-11-10 11:07 UTC (permalink / raw)
To: brettg; +Cc: 38606
> One particularly interesting issue of this package is, after retrieving
> a viable BOOTLIST file to use for compilation, we are left with this.
>
> --8<---------------cut here---------------start------------->8---
> brettg@oryx ~/Repos/smlnj [env]$ ./bin/.run/run.amd64-linux
> ./bin/.run/run.amd64-linux: Fatal error -- no in-core heap image found
> --8<---------------cut here---------------end--------------->8---
>
> Not quite sure how to investigate this issue. If anybody has any
> insights please share, otherwise I will just contact upstream in a the
> coming days.
For future reference:
It seems that this error can be avoided by deleting "PATH=/bin:/usr/bin"
from runtime/config/gen-posix-names.sh. In any case, /bin and /usr/bin
do not exist in Guix's build environment.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [bug#38606] [WIP SMLnj 0/1] Add SMLnj.
2019-12-14 4:04 [bug#38606] [WIP SMLnj 0/1] Add SMLnj Brett Gilio
` (2 preceding siblings ...)
2020-01-16 0:36 ` [bug#38606] [WIP v2 1/1] gnu: Add smlnj Brett Gilio
@ 2021-11-07 15:00 ` Foo Chuan Wei
2021-11-08 21:40 ` Foo Chuan Wei
2021-12-12 16:37 ` bug#38606: " Chuan Wei Foo
4 siblings, 1 reply; 12+ messages in thread
From: Foo Chuan Wei @ 2021-11-07 15:00 UTC (permalink / raw)
To: 38606; +Cc: brettg
I managed to build a working version of SML/NJ 110.99.2 (released on
2021-09-22). The patch is included below (use `git am --scissors` to
apply).
Major caveats:
* This patch only deals with x86-64. For 32-bit, some changes need to be
made:
* Download "boot.x86-unix.tgz" instead of "boot.amd64-unix.tgz".
* Patch "base/runtime/objs/mk.x86-linux" instead of
"base/runtime/objs/mk.amd64-linux".
* Invoke the install script using `-default 32` instead of `-default 64`.
* This does not install the SML/NJ library. I used the `-nolib` option
to disable the building of the library. When I try to build without
the `-nolib` option, the build always fails with this error:
----- start of snippet -----
/Users/jhr/Work/smlnj/sml-legacy/base/system/smlnj/installer.cm:29.7-29.32 Error: link-time exception in library code $smlnj/installer.cm@1570(installer/nix-install.sml)
SysErr: No such file or directory [noent]<exec.c>
/tmp/guix-build-smlnj-110.99.2.drv-0/bin/sml: Fatal error -- Uncaught exception Link with 0
raised at ../cm/compile/link.sml:357.28-357.35
FAILURE: unpacking failed
./config/install.sh: !!! Installation of libraries and programs failed.
command "./config/install.sh" "-default" "64" failed with status 1
----- end of snippet -----
I don't know what this error means.
Note that "jhr" is *not* my username. "jhr" appears to be the initials
of John H. Reppy, one of the authors of SML/NJ.
Surprisingly, when I keep the directory of the failed build (`guix
build --keep-failed smlnj`), and then build inside the build directory
by hand (i.e. `cd /tmp/guix-build-smlnj-110.99.2.drv-1 &&
./config/install.sh -default 64), all SML/NJ libraries are
successfully built. I was not able to determine why the build fails in
Guix but succeeds manually.
Credits:
* This patch is based on Brett Gilio's smlnj patches.
* I also looked at how smlnj is packaged in NixOS:
* https://github.com/NixOS/nixpkgs/blob/21.05/pkgs/development/compilers/smlnj/default.nix
* https://web.archive.org/web/20140704103009/http://lists.science.uu.nl/pipermail/nix-dev/attachments/20101215/e1beb921/attachment.obj
-- >8 --
Subject: [PATCH] gnu: Add smlnj.
* gnu/packages/sml.scm (smlnj): New variable.
---
gnu/packages/sml.scm | 187 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 186 insertions(+), 1 deletion(-)
diff --git a/gnu/packages/sml.scm b/gnu/packages/sml.scm
index b7e96f028c..7447fa1627 100644
--- a/gnu/packages/sml.scm
+++ b/gnu/packages/sml.scm
@@ -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 utils))
(define-public polyml
(package
@@ -75,3 +76,187 @@ 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.99.2")
+ (source #f) ; Sources are passed as native-inputs.
+ (build-system gnu-build-system)
+ (arguments
+ `(#:tests? #f
+ #: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 "boot.amd64-unix"
+ "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"
+ "doc"
+ "asdl"))
+ (mkdir "base")
+ ;; Same directory structure as what the config/unpack script
+ ;; would produce.
+ (rename-file "runtime" "base/runtime")
+ (rename-file "compiler" "base/compiler")
+ (rename-file "cm" "base/cm")
+ (rename-file "old-basis" "base/old-basis")
+ (rename-file "system" "base/system")))
+ (delete 'configure)
+ (replace 'patch-source-shebangs
+ (lambda _
+ (substitute* (list "config/install.sh"
+ "base/runtime/objs/mk.amd64-linux")
+ (("SHELL.*=.*/bin/sh")
+ (string-append "SHELL=" (which "sh"))))
+ #t))
+ (replace 'build
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "config/chk-global-names.sh"
+ (("CC=.*")
+ (string-append "CC=" ,(cc-for-target))))
+ (substitute* "config/_arch-n-opsys"
+ (("export PATH") "")
+ (("PATH=\"/bin:/usr/bin\"") "")
+ (("uname") (which "uname")))
+ (substitute* "base/runtime/config/gen-posix-names.sh"
+ (("PATH=/bin:/usr/bin") ""))
+ (invoke "./config/install.sh" "-default" "64" "-nolib")))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (out-lib (string-append out "/lib/"))
+ (out-bin (string-append out "/bin/")))
+ (copy-recursively "lib" out-lib)
+ (copy-recursively "bin" out-bin))
+ #t)))))
+ (native-inputs
+ `(("boot.amd64-unix"
+ ,(smlnj-file version
+ "boot.amd64-unix.tgz"
+ "0cbaz8sxp30y2a4blm0pzk9aa1g9jj65d6d7kydvn0w7m22rjjff"))
+ ("config"
+ ,(smlnj-file version
+ "config.tgz"
+ "1sq60frd66kv807bahsyxda355qq67zvvb4sr1d72cv6capv5nsg"))
+ ("cm"
+ ,(smlnj-file version
+ "cm.tgz"
+ "087yy9k9vyyvhb24rni6js7s8iqbs8vjm9kjd9s311swjd66qhjc"))
+ ("compiler"
+ ,(smlnj-file version
+ "compiler.tgz"
+ "149vrmiba0dqggr15axqqzzfmd0kx7kchlr49gii6hw5dal6vqnn"))
+ ("runtime"
+ ,(smlnj-file version
+ "runtime.tgz"
+ "0c3q7qr2i3r91sx9p3z1ar7gvyk6qsm5gcbpbyj6l67qzn192yc3"))
+ ("system"
+ ,(smlnj-file version
+ "system.tgz"
+ "0aflnqh9zi9f8vs9pjlxysxplrwl98aiaxx4n41sba4m1r30n0za"))
+ ("MLRISC"
+ ,(smlnj-file version
+ "MLRISC.tgz"
+ "1kkga7r7qnw09s8yhqbhrq8gxf6c8x0fiwsbwkr8ls6xwv48sp74"))
+ ("smlnj-lib"
+ ,(smlnj-file version
+ "smlnj-lib.tgz"
+ "14fvqgn580k3ylvfhbkwv4cw87ipggq548r7jzp8fzfn2h6wdl01"))
+ ("old-basis"
+ ,(smlnj-file version
+ "old-basis.tgz"
+ "11j7a0sxyd1kwxjvxnarab5vc3x43gl90m07wxm37fd4jbfd1fn1"))
+ ("ckit"
+ ,(smlnj-file version
+ "ckit.tgz"
+ "1fbfjb2fhr6zkcz5jhqh3888zska6vffndyqwvk6rpbcl7an8niq"))
+ ("nlffi"
+ ,(smlnj-file version
+ "nlffi.tgz"
+ "0p5z77x295xfh71481kbd5pwis52kv03vxpad4pzkpk0l6smcgmj"))
+ ("cml"
+ ,(smlnj-file version
+ "cml.tgz"
+ "13xchaamwanxhwklsgkn1rmkr044h9qsj0rbr9c7pm903yivdwcn"))
+ ("eXene"
+ ,(smlnj-file version
+ "eXene.tgz"
+ "0p4snql0a1a952h98ma9ybmp7z1q305mz859b0mxhsg3jdrzl9wb"))
+ ("ml-lpt"
+ ,(smlnj-file version
+ "ml-lpt.tgz"
+ "0m00vglg95apdpzsy6qv88izj5ai4ibylxni01an75xpnxyy5qbg"))
+ ("ml-lex"
+ ,(smlnj-file version
+ "ml-lex.tgz"
+ "1pmi5qwjcf1h5nfi7d4vvm7cf90g6dlk2mqikj0y9c464ia1l2jc"))
+ ("ml-yacc"
+ ,(smlnj-file version
+ "ml-yacc.tgz"
+ "1zla2m1rn8r8k85ps9r2mw38xkh276j7aqv9f69v55102hchx13p"))
+ ("ml-burg"
+ ,(smlnj-file version
+ "ml-burg.tgz"
+ "14cqasasa273x09phykzjgk1wl6vrkdcwrdi39hnacp443cilz7x"))
+ ("pgraph"
+ ,(smlnj-file version
+ "pgraph.tgz"
+ "183fv61xlac5kpxn5m4iqgdvc2xb1chlxy5ip4i25x589bh4b5k9"))
+ ("trace-debug-profile"
+ ,(smlnj-file version
+ "trace-debug-profile.tgz"
+ "1k0w581kr43mpjzm7778xgx1rpz45aq1h80jdr6jls5vz3k8ia18"))
+ ("heap2asm"
+ ,(smlnj-file version
+ "heap2asm.tgz"
+ "0p9s42acngxh0401wm6fqs3im3rzzw9sh448x38zhdi47h8h1m9n"))
+ ("smlnj-c"
+ ,(smlnj-file version
+ "smlnj-c.tgz"
+ "054b1nhg5yk2jj01p11k08qzq8zc9jzg4mbgkcmcqaq7axp1rnxm"))
+ ("doc"
+ ,(smlnj-file version
+ "doc.tgz"
+ "0s35zrxdj76wzdz7c1i8ij00n6lfll4vjnypsy2j17q1maw7fq8j"))
+ ("asdl"
+ ,(smlnj-file version
+ "asdl.tgz"
+ "0mad2df5pmkdsb69gflxma6m6i3gla6hdmjjnkzk76pagpr8zb0m"))))
+ (home-page "http://www.smlnj.org")
+ (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.")
+ (license license:bsd-2)))
base-commit: a0f1476e8fa20e80c71f83342b82338ddedbf7fd
--
2.25.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [bug#38606] [WIP SMLnj 0/1] Add SMLnj.
2021-11-07 15:00 ` [bug#38606] [WIP SMLnj 0/1] Add SMLnj Foo Chuan Wei
@ 2021-11-08 21:40 ` Foo Chuan Wei
2021-11-09 10:03 ` Josselin Poiret via Guix-patches via
0 siblings, 1 reply; 12+ messages in thread
From: Foo Chuan Wei @ 2021-11-08 21:40 UTC (permalink / raw)
To: 38606
> /Users/jhr/Work/smlnj/sml-legacy/base/system/smlnj/installer.cm:29.7-29.32 Error: link-time exception in library code $smlnj/installer.cm@1570(installer/nix-install.sml)
> SysErr: No such file or directory [noent]<exec.c>
>
>
> /tmp/guix-build-smlnj-110.99.2.drv-0/bin/sml: Fatal error -- Uncaught exception Link with 0
> raised at ../cm/compile/link.sml:357.28-357.35
>
> FAILURE: unpacking failed
> ./config/install.sh: !!! Installation of libraries and programs failed.
> command "./config/install.sh" "-default" "64" failed with status 1
The error above occurs because the build process uses nix-install.sml,
and nix-install.sml uses `OS.Process.system` (in the `unpack` function).
`OS.Process.system` relies on /bin/sh, but /bin/sh is not present in the
Guix build environment. "No such file or directory" presumably refers to
the absence of /bin/sh.
Unfortunately, the fix might require some binary patching. /bin/sh is
hardcoded in sml.boot.amd64-unix/SMLNJ-BASIS/.cm/amd64-unix/basis-common.cm
(a binary file from boot.amd64-unix.tgz).
^ permalink raw reply [flat|nested] 12+ messages in thread
* [bug#38606] [WIP SMLnj 0/1] Add SMLnj.
2021-11-08 21:40 ` Foo Chuan Wei
@ 2021-11-09 10:03 ` Josselin Poiret via Guix-patches via
2021-11-10 9:21 ` Foo Chuan Wei
0 siblings, 1 reply; 12+ messages in thread
From: Josselin Poiret via Guix-patches via @ 2021-11-09 10:03 UTC (permalink / raw)
To: Foo Chuan Wei, 38606; +Cc: dev
Foo Chuan Wei <chuanwei.foo@hotmail.com> writes:
> The error above occurs because the build process uses nix-install.sml,
> and nix-install.sml uses `OS.Process.system` (in the `unpack` function).
> `OS.Process.system` relies on /bin/sh, but /bin/sh is not present in the
> Guix build environment. "No such file or directory" presumably refers to
> the absence of /bin/sh.
>
> Unfortunately, the fix might require some binary patching. /bin/sh is
> hardcoded in sml.boot.amd64-unix/SMLNJ-BASIS/.cm/amd64-unix/basis-common.cm
> (a binary file from boot.amd64-unix.tgz).
Linking [1] for our IRC discussion about this.
You proposed patching /bin/sh to /tmp/sh, and symlinking /tmp/sh
yourself, did that work?
If not, I can still write a SMLNJ binfile patcher if you feel the need
for it (literals should be pretty easy to patch, see
sml/gc/build-literals.c for their format).
Best,
Josslin Poiret
[1] https://logs.guix.gnu.org/guix/2021-11-08.log#135443
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#38606: [WIP SMLnj 0/1] Add SMLnj.
2019-12-14 4:04 [bug#38606] [WIP SMLnj 0/1] Add SMLnj Brett Gilio
` (3 preceding siblings ...)
2021-11-07 15:00 ` [bug#38606] [WIP SMLnj 0/1] Add SMLnj Foo Chuan Wei
@ 2021-12-12 16:37 ` Chuan Wei Foo
4 siblings, 0 replies; 12+ messages in thread
From: Chuan Wei Foo @ 2021-12-12 16:37 UTC (permalink / raw)
To: 38606-done@debbugs.gnu.org
[-- Attachment #1: Type: text/plain, Size: 90 bytes --]
Closing this issue.
smlnj was added in commit f0adb870ac0ea70bf6fb7a68f8782833017342cd.
[-- Attachment #2: Type: text/html, Size: 687 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread