gnu: cvs-fast-export: Update to 1.56.
[jackhill/guix/guix.git] / gnu / packages / mes.scm
index c4cb118..750ec2e 100644 (file)
@@ -1,7 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017,2018 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2017, 2018, 2019, 2020, 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,6 +22,9 @@
 (define-module (gnu packages mes)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages bootstrap)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages cross-base)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages man)
   #:use-module (gnu packages package-management)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages texinfo)
   #:use-module (guix build-system gnu)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix licenses)
-  #:use-module (guix packages))
+  #:use-module (guix packages)
+  #:use-module (guix utils))
 
-(define-public nyacc
+(define-public nyacc-0.86
+  ;; Nyacc used for bootstrap.
   (package
     (name "nyacc")
     (version "0.86.0")
@@ -58,79 +65,332 @@ extensive examples, including parsers for the Javascript and C99 languages.")
     (home-page "https://savannah.nongnu.org/projects/nyacc")
     (license (list gpl3+ lgpl3+))))
 
+(define-public nyacc-0.99
+  (package
+    (inherit nyacc-0.86)
+    (version "0.99.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://savannah/nyacc/nyacc-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0hl5qxx19i4x1r0839sxm19ziqq65g4hy97yik81cc2yb9yvgyv3"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (substitute* (find-files "." "^Makefile\\.in$")
+                    (("^SITE_SCM_DIR =.*")
+                     "SITE_SCM_DIR = \
+@prefix@/share/guile/site/@GUILE_EFFECTIVE_VERSION@\n")
+                    (("^SITE_SCM_GO_DIR =.*")
+                     "SITE_SCM_GO_DIR = \
+@prefix@/lib/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n")
+                    (("^INFODIR =.*")
+                     "INFODIR = @prefix@/share/info\n")
+                    (("^DOCDIR =.*")
+                     "DOCDIR = @prefix@/share/doc/$(PACKAGE_TARNAME)\n"))
+                  #t))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("guile" ,guile-2.2)))))
+
+(define-public nyacc
+  (package
+    (inherit nyacc-0.99)
+    (version "1.03.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://savannah/nyacc/nyacc-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1s7kli288l4pizjaarx8m6jg7g0mgfy8rpbs9lpzg8la7wr5rvp4"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (substitute* "configure"
+                    (("GUILE_GLOBAL_SITE=\\$prefix.*")
+                     "GUILE_GLOBAL_SITE=\
+$prefix/share/guile/site/$GUILE_EFFECTIVE_VERSION\n"))
+                  #t))))
+    (inputs
+     `(("guile" ,guile-3.0)))))
+
+(define-public nyacc-1.00.2
+  (package
+    (inherit nyacc)
+    (version "1.00.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://savannah/nyacc/nyacc-"
+                                  version ".tar.gz"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (substitute* (find-files "." "^Makefile\\.in$")
+                    (("^SITE_SCM_DIR =.*")
+                     "SITE_SCM_DIR = \
+@prefix@/share/guile/site/@GUILE_EFFECTIVE_VERSION@\n")
+                    (("^SITE_SCM_GO_DIR =.*")
+                     "SITE_SCM_GO_DIR = \
+@prefix@/lib/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n")
+                    (("^INFODIR =.*")
+                     "INFODIR = @prefix@/share/info\n")
+                    (("^DOCDIR =.*")
+                     "DOCDIR = @prefix@/share/doc/$(PACKAGE_TARNAME)\n"))
+                  #t))
+              (sha256
+               (base32
+                "065ksalfllbdrzl12dz9d9dcxrv97wqxblslngsc6kajvnvlyvpk"))))
+    (inputs
+     `(("guile" ,guile-2.2)))))
+
+(define-public mes-0.19
+  ;; Mes used for bootstrap.
+  (package
+    (name "mes")
+    (version "0.19")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/mes/"
+                                  "mes-" version ".tar.gz"))
+              (sha256
+               (base32
+                "15h4yhaywdc0djpjlin2jz1kzahpqxfki0r0aav1qm9nxxmnp1l0"))))
+    (build-system gnu-build-system)
+    (supported-systems '("i686-linux" "x86_64-linux"))
+    (propagated-inputs
+     `(("mescc-tools" ,mescc-tools-0.5.2)
+       ("nyacc" ,nyacc-0.86)))
+    (native-inputs
+     `(("guile" ,guile-2.2)
+       ,@(let ((target-system (or (%current-target-system)
+                                  (%current-system))))
+           (cond
+            ((string-prefix? "x86_64-linux" target-system)
+             ;; Use cross-compiler rather than #:system "i686-linux" to get
+             ;; MesCC 64 bit .go files installed ready for use with Guile.
+             `(("i686-linux-binutils" ,(cross-binutils "i686-unknown-linux-gnu"))
+               ("i686-linux-gcc" ,(cross-gcc "i686-unknown-linux-gnu"))))
+            (else
+             '())))
+       ("graphviz" ,graphviz)
+       ("help2man" ,help2man)
+       ("perl" ,perl)                 ; build-aux/gitlog-to-changelog
+       ("texinfo" ,texinfo)))
+    (arguments
+     `(#:strip-binaries? #f))  ; binutil's strip b0rkes MesCC/M1/hex2 binaries
+    (synopsis "Scheme interpreter and C compiler for full source bootstrapping")
+    (description
+     "GNU Mes--Maxwell Equations of Software--brings the Reduced Binary Seed
+bootstrap to Guix and aims to help create full source bootstrapping for
+GNU/Linux distributions.  It consists of a mutual self-hosting Scheme
+interpreter in C and a Nyacc-based C compiler in Scheme and is compatible with
+Guile.")
+    (home-page "https://www.gnu.org/software/mes/")
+    (license gpl3+)))
+
 (define-public mes
-  (let ((triplet "i686-unknown-linux-gnu")
-        (version "0.18")
+  (package
+    (inherit mes-0.19)
+    (version "0.23")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/mes/"
+                                  "mes-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0mnryfkl0dwbr5gxp16j5s95gw7z1vm1fqa1pxabp0aiar1hw53s"))))
+    (supported-systems '("armhf-linux" "i686-linux" "x86_64-linux"))
+    (propagated-inputs
+     `(("mescc-tools" ,mescc-tools)
+       ("nyacc" ,nyacc-1.00.2)))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "C_INCLUDE_PATH")
+            (files '("include")))
+           (search-path-specification
+            (variable "LIBRARY_PATH")
+            (files '("lib")))
+           (search-path-specification
+            (variable "MES_PREFIX")
+            (separator #f)
+            (files '("")))))))
+
+(define-public mes-rb5
+  ;; This is the Reproducible-Builds summit 5's Mes, also built on Debian
+  ;; GNU/Linux and NixOS to produce the same, bit-for-bit identical result.
+  (package
+    (inherit mes)
+    (name "mes-rb5")
+    (version "0.22")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/mes/"
+                                  "mes-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0p1jsrrmcbc0zrvbvnjbb6iyxr0in71km293q8qj6gnar6bw09av"))))
+    (supported-systems '("i686-linux" "x86_64-linux"))
+    (inputs '())
+    (propagated-inputs '())
+    (native-inputs
+     `(("bash" ,bash)
+       ("coreutils" ,coreutils)
+       ("grep" ,grep)
+       ("guile" ,guile-2.2)
+       ("gzip" ,gzip)
+       ("libc" ,glibc)
+       ("locales" ,glibc-utf8-locales)
+       ("make" ,gnu-make)
+       ("mes" ,mes)
+       ("mescc-tools" ,mescc-tools)
+       ("nyacc" ,nyacc-0.99)
+       ("sed" ,sed)
+       ("tar" ,tar)))
+    (supported-systems '("i686-linux"))
+    (arguments
+     `(#:implicit-inputs? #f
+       #:strip-binaries? #f    ; binutil's strip b0rkes MesCC/M1/hex2 binaries
+       #:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (ice-9 popen)
+                  (ice-9 rdelim))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'setenv
+           (lambda _
+             (setenv "AR" "mesar")
+             (setenv "CC" "mescc")
+             (setenv "GUILD" "true")
+             (setenv "SCHEME" "mes")
+             (setenv "LC_ALL" "en_US.UTF-8")
+             #t))
+         (replace 'configure
+           (lambda _
+             (let ((out (assoc-ref %outputs "out")))
+               (invoke "sh" "configure.sh"
+                       (string-append "--prefix=" out)
+                       "--host=i686-unkown-linux-gnu"
+                       "--with-courage"))))
+         (replace 'build
+           (lambda _
+             (invoke "sh" "bootstrap.sh")))
+         (replace 'check
+           (lambda _
+             (copy-file "bin/mes-mescc" "bin/mes-mescc-0.21")
+             (system* "sed" "-i" "s/0\\.22/0\\.21/" "bin/mes-mescc-0.21")
+             (let ((sha256sum
+                    (read-delimited
+                     " "
+                     (open-pipe* OPEN_READ "sha256sum" "bin/mes-mescc-0.21"))))
+               (unless
+                   (equal?
+                    sha256sum
+                    "9e0bcb1633c58e7bc415f6ea27cee7951d6b0658e13cdc147e992b31a14625fb")
+                 (throw 'error "mes checksum failure"))
+               #t)))
+         (replace 'install
+           (lambda _
+             (invoke "sh" "install.sh"))))))))
+
+(define-public mescc-tools-0.5.2
+  ;; Mescc-tools used for bootstrap.
+  (let ((commit "bb062b0da7bf2724ca40f9002b121579898d4ef7")
         (revision "0")
-        (commit "08f04f559670d9e8f57eb03bb9b13f4d0b81cedf"))
+        (version "0.5.2"))
     (package
-      (name "mes")
-      (version (string-append version "-" revision "." (string-take commit 7)))
+      (name "mescc-tools")
+      (version (git-version version revision commit))
       (source (origin
-                (method url-fetch)
-                (uri (string-append
-                      "https://git.savannah.gnu.org/cgit/mes.git/snapshot/"
-                      name "-" commit
-                      ".tar.gz"))
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.savannah.nongnu.org/r/mescc-tools.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1b7wz9k38pfrz707pd4p8s54q903jr167q73ya7qkna89sxj3wna"))))
+                  "1nc6rnax66vmhqsjg0kgx23pihdcxmww6v325ywf59vsq1jqjvff"))))
       (build-system gnu-build-system)
       (supported-systems '("i686-linux" "x86_64-linux"))
-      (propagated-inputs
-       `(("mescc-tools" ,mescc-tools)
-         ("nyacc" ,nyacc)))
-      (native-inputs
-       `(("guile" ,guile-2.2)
-         ,@(if (not (string-prefix? "i686-linux" (or (%current-target-system)
-                                                     (%current-system))))
-               ;; Use cross-compiler rather than #:system "i686-linux" to get
-               ;; MesCC 64 bit .go files installed ready for use with Guile.
-               `(("i686-linux-binutils" ,(cross-binutils triplet))
-                 ("i686-linux-gcc" ,(cross-gcc triplet)))
-               '())
-         ("graphviz" ,graphviz)
-         ("help2man" ,help2man)
-         ("perl" ,perl)                 ; build-aux/gitlog-to-changelog
-         ("texinfo" ,texinfo)))
       (arguments
-       `(#:strip-binaries? #f))  ; binutil's strip b0rkes MesCC/M1/hex2 binaries
-      (synopsis "Scheme interpreter and C compiler for full source bootstrapping")
+       `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
+         #:test-target "test"
+         #:phases (modify-phases %standard-phases
+                    (delete 'configure))))
+      (synopsis "Tools for the full source bootstrapping process")
       (description
-       "GNU Mes--Maxwell Equations of Software--brings the Reduced
-Binary Seed bootstrap to GuixSD and aims to help create full source
-bootstrapping for GNU/Linux distributions.  It consists of a mutual
-self-hosting Scheme interpreter in C and a Nyacc-based C compiler in
-Scheme and is compatible with Guile.")
-      (home-page "https://gnu.org/software/mes")
-      (license gpl3+))))
+       "Mescc-tools is a collection of tools for use in a full source
+bootstrapping process.  It consists of the M1 macro assembler, the hex2
+linker, the blood-elf symbol table generator, the kaem shell, exec_enable and
+get_machine.")
+    (home-page "https://savannah.nongnu.org/projects/mescc-tools")
+    (license gpl3+))))
 
 (define-public mescc-tools
   (package
+    (inherit mescc-tools-0.5.2)
     (name "mescc-tools")
-    (version "0.5.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "http://git.savannah.nongnu.org/cgit/mescc-tools.git/snapshot/"
-                    name "-Release_" version
-                    ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "01x7bhmgwyf6mc2g1hcvibhps98nllacqm4f0j5l51b1mbi18pc2"))))
-    (build-system gnu-build-system)
-    (supported-systems '("i686-linux" "x86_64-linux"))
+    (version "0.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "http://git.savannah.nongnu.org/cgit/mescc-tools.git/snapshot/"
+             name "-Release_" version
+             ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1p1ijia4rm3002f5sypidl9v5gq0mlch9b0n61rpxkdsaaxjqax3"))))
+    (supported-systems '("armhf-linux" "aarch64-linux"
+                         "i686-linux" "x86_64-linux"))
     (arguments
-     `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
-       #:test-target "test"
-       #:phases (modify-phases %standard-phases
-                  (delete 'configure))))
-    (synopsis "Tools for the full source bootstrapping process")
-    (description
-     "Mescc-tools is a collection of tools for use in a full source
-bootstrapping process.  It consists of the M1 macro assembler, the hex2
-linker, the blood-elf symbol table generator, the kaem shell, exec_enable and
-get_machine.")
-    (home-page "https://savannah.nongnu.org/projects/mescc-tools")
-    (license gpl3+)))
+     (substitute-keyword-arguments (package-arguments mescc-tools-0.5.2)
+       ((#:make-flags _)
+        `(list (string-append "PREFIX=" (assoc-ref %outputs "out"))
+               "CC=gcc"))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'patch-prefix
+             (lambda _
+               (substitute* "sha256.sh"
+                 (("/usr/bin/sha256sum") (which "sha256sum")))
+               #t))))))))
+
+(define-public m2-planet
+  (let ((commit "b87ddb0051b168ea45f8d49a610dcd069263336a")
+        (revision "2"))
+    (package
+      (name "m2-planet")
+      (version (string-append "1.4.0-" revision "." (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/oriansj/m2-planet")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0yyc0fcbbxi9jqa1n76x0rwspdrwmc8g09jlmsw9c35nflrhmz8q"))))
+      (native-inputs
+       `(("mescc-tools" ,mescc-tools)))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
+         #:tests? #f
+         #:phases (modify-phases %standard-phases
+                    (delete 'bootstrap)
+                    (delete 'configure))))
+      (synopsis "The PLAtform NEutral Transpiler")
+      (description
+       "M2-Planet, the PLAtform NEutral Transpiler, when combined with
+mescc-tools, compiles a subset of the C language into working binaries with
+introspective steps in between.  It is self-hosting and for bootstrapping it
+also has an implementation in the M1 macro assembly language.  M2-Planet is
+built as Phase-5 of the full source bootstrapping process and is capable of
+building GNU Mes.")
+      (home-page "https://github.com/oriansj/m2-planet")
+      (license gpl3+))))