all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [bug#38606] [WIP SMLnj 0/1] Add SMLnj.
@ 2019-12-14  4:04 Brett Gilio
  2019-12-14  4:06 ` [bug#38606] [WIP SMLnj 1/1] gnu: Add smlnj Brett Gilio
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Brett Gilio @ 2019-12-14  4:04 UTC (permalink / raw)
  To: 38606

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: [WIP SMLnj 0/1] Add SMLnj. --]
[-- Type: text/x-patch, Size: 855 bytes --]

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

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [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 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.
  2021-11-09 10:03     ` Josselin Poiret via Guix-patches via
@ 2021-11-10  9:21       ` Foo Chuan Wei
  0 siblings, 0 replies; 12+ messages in thread
From: Foo Chuan Wei @ 2021-11-10  9:21 UTC (permalink / raw)
  To: Josselin Poiret; +Cc: 38606

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




^ 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
                   ` (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

end of thread, other threads:[~2021-12-12 16:38 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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 ` [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
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
2021-11-10  9:21       ` Foo Chuan Wei
2021-12-12 16:37 ` bug#38606: " Chuan Wei Foo

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.