[WIP SMLnj 0/1] Add SMLnj.

DoneSubmitted by Brett Gilio.
Details
5 participants
  • Brett Gilio
  • Brett Gilio
  • Foo Chuan Wei
  • Josselin Poiret
  • Tim Lee
Owner
unassigned
Severity
normal
B
B
Brett Gilio wrote on 14 Dec 2019 05:04
(address . guix-patches@gnu.org)
871rt77dsl.fsf@posteo.net
From 74605396e2d932adb8e570702ec2d3b767b17715 Mon Sep 17 00:00:00 2001
From: Brett Gilio <brettg@posteo.net>
Date: Fri, 13 Dec 2019 22:02:56 -0600
Subject: [WIP SMLnj 0/1] Add SMLnj.

Just wanted to share my progress on packaging SMLnj for Guix.
This is another one in my series of somewhat difficult and thorny to package.
SMLnj by default is 32-bit, we need to ensure that it has access to the new
64-bit functionality for it to work properly with some SML libraries.
Otherwise, this package just has some unknown behavior that I personally am
stumped on how to solve currently.

Wanting to share if anybody wants to help, and so I can keep track of my progress.

Send revisions by re-rolling n+1.

Brett Gilio (1):
gnu: Add smlnj.

gnu/packages/sml.scm | 89 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 89 insertions(+)

--
2.24.1
B
B
Brett Gilio wrote on 14 Dec 2019 05:06
[WIP SMLnj 1/1] gnu: Add smlnj.
(address . 38606@debbugs.gnu.org)
87y2vf5z5o.fsf@posteo.net
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(+)

Toggle diff (99 lines)
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
B
B
Brett Gilio wrote on 16 Jan 2020 01:36
[WIP v2 0/1] Add SMLNJ
(address . 38606@debbugs.gnu.org)
87imlcw83f.fsf@gnu.org
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
B
B
Brett Gilio wrote on 16 Jan 2020 01:36
[WIP v2 1/1] gnu: Add smlnj.
(address . 38606@debbugs.gnu.org)
87ftggw82s.fsf@gnu.org
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(-)

Toggle diff (182 lines)
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
B
B
Brett Gilio wrote on 16 Jan 2020 15:59
(address . 38606@debbugs.gnu.org)
87lfq78n1a.fsf@gnu.org
One particularly interesting issue of this package is, after retrieving
a viable BOOTLIST file to use for compilation, we are left with this.

Toggle snippet (4 lines)
brettg@oryx ~/Repos/smlnj [env]$ ./bin/.run/run.amd64-linux
./bin/.run/run.amd64-linux: Fatal error -- no in-core heap image found

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>
T
T
Tim Lee wrote on 30 Oct 2021 01:33
RE: [WIP SMLnj 0/1] Add SMLnj.
(address . brettg@gnu.org)(address . 38606@debbugs.gnu.org)
20211029233343.4cedgmubw3lscyke@localhost
Brett Gilio wrote on 2020-01-16:
Toggle quote (12 lines)
> 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?
F
F
Foo Chuan Wei wrote on 7 Nov 2021 16:00
Re: [WIP SMLnj 0/1] Add SMLnj.
(address . 38606@debbugs.gnu.org)(address . brettg@gnu.org)
PU1PR01MB21558D0068012C681046F2038D909@PU1PR01MB2155.apcprd01.prod.exchangelabs.com
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:


-- >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(-)

Toggle diff (206 lines)
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
F
F
Foo Chuan Wei wrote on 8 Nov 2021 22:40
(address . 38606@debbugs.gnu.org)
PU1PR01MB2155FB74909CF0F067FFF7EA8D919@PU1PR01MB2155.apcprd01.prod.exchangelabs.com
Toggle quote (11 lines)
> /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).
J
J
Josselin Poiret wrote on 9 Nov 2021 11:03
Re: [bug#38606] [WIP SMLnj 0/1] Add SMLnj.
(address . dev@jpoiret.xyz)
87v911fxxe.fsf@jpoiret.xyz
Foo Chuan Wei <chuanwei.foo@hotmail.com> writes:

Toggle quote (10 lines)
> 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

F
F
Foo Chuan Wei wrote on 10 Nov 2021 10:21
(name . Josselin Poiret)(address . dev@jpoiret.xyz)(address . 38606@debbugs.gnu.org)
PU1PR01MB2155C446AE68C88D9650BE4B8D939@PU1PR01MB2155.apcprd01.prod.exchangelabs.com
On 2021-11-09, Josselin Poiret wrote:
Toggle quote (3 lines)
> You proposed patching /bin/sh to /tmp/sh, and symlinking /tmp/sh
> yourself, did that work?

Yes, it did work. I managed to build smlnj (including libraries). Thank
you for helping on IRC. Here's the patch that uses the /tmp/sh method:
F
F
Foo Chuan Wei wrote on 10 Nov 2021 12:07
Re: [bug#38606] [WIP v2 1/1] gnu: Add smlnj.
(address . brettg@gnu.org)(address . 38606@debbugs.gnu.org)
PU1PR01MB2155FCFCE641861DAB6A21DE8D939@PU1PR01MB2155.apcprd01.prod.exchangelabs.com
Toggle quote (12 lines)
> 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.
C
C
Chuan Wei Foo wrote on 12 Dec 2021 17:37
Re: [bug#38606] [WIP SMLnj 0/1] Add SMLnj.
(name . 38606-done@debbugs.gnu.org)(address . 38606-done@debbugs.gnu.org)
PU1PR01MB2155EE0682477105C1EB63838D739@PU1PR01MB2155.apcprd01.prod.exchangelabs.com
Closing this issue.
smlnj was added in commit f0adb870ac0ea70bf6fb7a68f8782833017342cd.
Attachment: file
Closed
?
Your comment

This issue is archived.

To comment on this conversation send email to 38606@debbugs.gnu.org