X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/27c2917ac4e18ec0e1e9bb369d3e5e71ec4b5b61..3af44aa49c8ed3dfd335cdfa132c0c2c9476e7b4:/gnu/packages/mes.scm diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm index 9aff59ab1d..9ffbe33ab7 100644 --- a/gnu/packages/mes.scm +++ b/gnu/packages/mes.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2017,2018 Jan Nieuwenhuizen +;;; Copyright © 2017, 2018, 2019, 2020 Jan (janneke) Nieuwenhuizen ;;; Copyright © 2017, 2018 Efraim Flashner ;;; Copyright © 2018 Tobias Geerinckx-Rice ;;; @@ -21,6 +21,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) @@ -28,14 +31,17 @@ #: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,64 +64,193 @@ extensive examples, including parsers for the Javascript and C99 languages.") (home-page "https://savannah.nongnu.org/projects/nyacc") (license (list gpl3+ lgpl3+)))) -(define-public mes - (let ((triplet "i686-unknown-linux-gnu")) - (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) - ("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") - (description - "GNU Mes--Maxwell Equations of Software--brings the Reduced Binary Seed +(define-public nyacc + (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 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://gnu.org/software/mes") - (license gpl3+)))) + (home-page "https://www.gnu.org/software/mes/") + (license gpl3+))) -(define-public mescc-tools +(define-public mes + (package + (inherit mes-0.19) + (version "0.22") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/mes/" + "mes-" version ".tar.gz")) + (sha256 + (base32 + "0p1jsrrmcbc0zrvbvnjbb6iyxr0in71km293q8qj6gnar6bw09av")))) + (propagated-inputs + `(("mescc-tools" ,mescc-tools) + ("nyacc" ,nyacc))) + (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") + (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) + ("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") (version "0.5.2")) (package (name "mescc-tools") - (version (string-append version "-" revision "." (string-take commit 7))) + (version (git-version version revision commit)) (source (origin - (method url-fetch) - (uri (string-append - "https://git.savannah.nongnu.org/cgit/mescc-tools.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 - "1h6j57wyf91i42b26f8msbv6451cw3nm4nmpl1fckp9c7vi8mwkh")))) + "1nc6rnax66vmhqsjg0kgx23pihdcxmww6v325ywf59vsq1jqjvff")))) (build-system gnu-build-system) (supported-systems '("i686-linux" "x86_64-linux")) (arguments @@ -131,3 +266,58 @@ 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.6.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://git.savannah.nongnu.org/r/mescc-tools.git") + (commit (string-append "Release_" version)))) + (file-name (string-append "mescc-tools-" version "-checkout")) + (sha256 + (base32 + "1cgxcdza6ws725x84i31la7jxmlk5a3nsij5shz1zljg0i36kj99")))) + (arguments + (substitute-keyword-arguments (package-arguments mescc-tools-0.5.2) + ((#:make-flags _) + `(list (string-append "PREFIX=" (assoc-ref %outputs "out")) + "CC=gcc")))))) + +(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+))))