GNU bug report logs - #38606
[WIP SMLnj 0/1] Add SMLnj.

Previous Next

Package: guix-patches;

Reported by: Brett Gilio <brettg <at> posteo.net>

Date: Sat, 14 Dec 2019 04:06:02 UTC

Severity: normal

Done: Chuan Wei Foo <chuanwei.foo <at> hotmail.com>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 38606 in the body.
You can then email your comments to 38606 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#38606; Package guix-patches. (Sat, 14 Dec 2019 04:06:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Brett Gilio <brettg <at> posteo.net>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Sat, 14 Dec 2019 04:06:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Brett Gilio <brettg <at> posteo.net>
To: guix-patches <at> gnu.org
Subject: [WIP SMLnj 0/1] Add SMLnj.
Date: Fri, 13 Dec 2019 22:04:58 -0600
[0000-cover-letter.patch (text/x-patch, inline)]
From 74605396e2d932adb8e570702ec2d3b767b17715 Mon Sep 17 00:00:00 2001
From: Brett Gilio <brettg <at> 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





Information forwarded to guix-patches <at> gnu.org:
bug#38606; Package guix-patches. (Sat, 14 Dec 2019 04:07:02 GMT) Full text and rfc822 format available.

Message #8 received at 38606 <at> debbugs.gnu.org (full text, mbox):

From: Brett Gilio <brettg <at> posteo.net>
To: 38606 <at> debbugs.gnu.org
Subject: [WIP SMLnj 1/1] gnu: Add smlnj.
Date: Fri, 13 Dec 2019 22:06:27 -0600
[0001-gnu-Add-smlnj.patch (text/x-patch, inline)]
From 74605396e2d932adb8e570702ec2d3b767b17715 Mon Sep 17 00:00:00 2001
From: Brett Gilio <brettg <at> 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





Information forwarded to guix-patches <at> gnu.org:
bug#38606; Package guix-patches. (Thu, 16 Jan 2020 00:37:01 GMT) Full text and rfc822 format available.

Message #11 received at 38606 <at> debbugs.gnu.org (full text, mbox):

From: Brett Gilio <brettg <at> gnu.org>
To: 38606 <at> debbugs.gnu.org
Subject: [WIP v2 0/1] Add SMLNJ
Date: Wed, 15 Jan 2020 18:36:20 -0600
[v2-0000-cover-letter.patch (text/x-patch, inline)]
From 51d83f01e80f274fe30cf6cf39f5f0eff554c7a6 Mon Sep 17 00:00:00 2001
From: Brett Gilio <brettg <at> 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





Information forwarded to guix-patches <at> gnu.org:
bug#38606; Package guix-patches. (Thu, 16 Jan 2020 00:37:02 GMT) Full text and rfc822 format available.

Message #14 received at 38606 <at> debbugs.gnu.org (full text, mbox):

From: Brett Gilio <brettg <at> gnu.org>
To: 38606 <at> debbugs.gnu.org
Subject: [WIP v2 1/1] gnu: Add smlnj.
Date: Wed, 15 Jan 2020 18:36:43 -0600
[v2-0001-gnu-Add-smlnj.patch (text/x-patch, inline)]
From 51d83f01e80f274fe30cf6cf39f5f0eff554c7a6 Mon Sep 17 00:00:00 2001
From: Brett Gilio <brettg <at> 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 <at> uwaterloo.ca>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me <at> tobias.gr>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado <at> elephly.net>
-;;; Copyright © 2019 Brett Gilio <brettg <at> gnu.org>
+;;; Copyright © 2019, 2020 Brett Gilio <brettg <at> 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





Information forwarded to guix-patches <at> gnu.org:
bug#38606; Package guix-patches. (Thu, 16 Jan 2020 15:00:01 GMT) Full text and rfc822 format available.

Message #17 received at 38606 <at> debbugs.gnu.org (full text, mbox):

From: Brett Gilio <brettg <at> gnu.org>
To: 38606 <at> debbugs.gnu.org
Subject: Re: [bug#38606] [WIP v2 1/1] gnu: Add smlnj.
Date: Thu, 16 Jan 2020 08:59:45 -0600
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 <at> 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 <at> gnu.org> <brettg <at> posteo.net>




Information forwarded to guix-patches <at> gnu.org:
bug#38606; Package guix-patches. (Sat, 30 Oct 2021 10:19:01 GMT) Full text and rfc822 format available.

Message #20 received at 38606 <at> debbugs.gnu.org (full text, mbox):

From: Tim Lee <progscriptclone <at> gmail.com>
To: brettg <at> gnu.org
Cc: 38606 <at> debbugs.gnu.org
Subject: RE: [WIP SMLnj 0/1] Add SMLnj.
Date: Fri, 29 Oct 2021 23:33:43 +0000
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 <at> 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?




Information forwarded to guix-patches <at> gnu.org:
bug#38606; Package guix-patches. (Sun, 07 Nov 2021 15:01:01 GMT) Full text and rfc822 format available.

Message #23 received at 38606 <at> debbugs.gnu.org (full text, mbox):

From: Foo Chuan Wei <chuanwei.foo <at> hotmail.com>
To: 38606 <at> debbugs.gnu.org
Cc: brettg <at> gnu.org
Subject: Re: [WIP SMLnj 0/1] Add SMLnj.
Date: Sun, 7 Nov 2021 15:00:07 +0000
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 <at> 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





Information forwarded to guix-patches <at> gnu.org:
bug#38606; Package guix-patches. (Mon, 08 Nov 2021 21:42:02 GMT) Full text and rfc822 format available.

Message #26 received at 38606 <at> debbugs.gnu.org (full text, mbox):

From: Foo Chuan Wei <chuanwei.foo <at> hotmail.com>
To: 38606 <at> debbugs.gnu.org
Subject: Re: [WIP SMLnj 0/1] Add SMLnj.
Date: Mon, 8 Nov 2021 21:40:58 +0000
> /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 <at> 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).




Information forwarded to guix-patches <at> gnu.org:
bug#38606; Package guix-patches. (Tue, 09 Nov 2021 10:04:02 GMT) Full text and rfc822 format available.

Message #29 received at 38606 <at> debbugs.gnu.org (full text, mbox):

From: Josselin Poiret <dev <at> jpoiret.xyz>
To: Foo Chuan Wei <chuanwei.foo <at> hotmail.com>, 38606 <at> debbugs.gnu.org
Cc: dev <at> jpoiret.xyz
Subject: Re: [bug#38606] [WIP SMLnj 0/1] Add SMLnj.
Date: Tue, 09 Nov 2021 10:03:41 +0000
Foo Chuan Wei <chuanwei.foo <at> 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




Information forwarded to guix-patches <at> gnu.org:
bug#38606; Package guix-patches. (Wed, 10 Nov 2021 09:23:01 GMT) Full text and rfc822 format available.

Message #32 received at 38606 <at> debbugs.gnu.org (full text, mbox):

From: Foo Chuan Wei <chuanwei.foo <at> hotmail.com>
To: Josselin Poiret <dev <at> jpoiret.xyz>
Cc: 38606 <at> debbugs.gnu.org
Subject: Re: [bug#38606] [WIP SMLnj 0/1] Add SMLnj.
Date: Wed, 10 Nov 2021 09:21:46 +0000
On 2021-11-09, Josselin Poiret wrote:
> 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:
https://issues.guix.gnu.org/51745




Information forwarded to guix-patches <at> gnu.org:
bug#38606; Package guix-patches. (Wed, 10 Nov 2021 11:08:01 GMT) Full text and rfc822 format available.

Message #35 received at 38606 <at> debbugs.gnu.org (full text, mbox):

From: Foo Chuan Wei <chuanwei.foo <at> hotmail.com>
To: brettg <at> gnu.org
Cc: 38606 <at> debbugs.gnu.org
Subject: Re: [bug#38606] [WIP v2 1/1] gnu: Add smlnj.
Date: Wed, 10 Nov 2021 11:07:38 +0000
> 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 <at> 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.




Reply sent to Chuan Wei Foo <chuanwei.foo <at> hotmail.com>:
You have taken responsibility. (Sun, 12 Dec 2021 16:38:01 GMT) Full text and rfc822 format available.

Notification sent to Brett Gilio <brettg <at> posteo.net>:
bug acknowledged by developer. (Sun, 12 Dec 2021 16:38:02 GMT) Full text and rfc822 format available.

Message #40 received at 38606-done <at> debbugs.gnu.org (full text, mbox):

From: Chuan Wei Foo <chuanwei.foo <at> hotmail.com>
To: "38606-done <at> debbugs.gnu.org" <38606-done <at> debbugs.gnu.org>
Subject: Re: [bug#38606] [WIP SMLnj 0/1] Add SMLnj.
Date: Sun, 12 Dec 2021 16:37:09 +0000
[Message part 1 (text/plain, inline)]
Closing this issue.
smlnj was added in commit f0adb870ac0ea70bf6fb7a68f8782833017342cd.
[Message part 2 (text/html, inline)]

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 10 Jan 2022 12:24:03 GMT) Full text and rfc822 format available.

This bug report was last modified 2 years and 104 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.