* [PATCH 01/15] gnu: chez-scheme: Add search-path and fix i686 build. @ 2016-10-16 15:31 Federico Beffa 2016-10-16 18:25 ` Ricardo Wurmus 0 siblings, 1 reply; 6+ messages in thread From: Federico Beffa @ 2016-10-16 15:31 UTC (permalink / raw) To: Guix-devel [-- Attachment #1: Type: text/plain, Size: 1 bytes --] [-- Attachment #2: 0001-gnu-chez-scheme-Add-search-path-and-Fix-i686-build.patch --] [-- Type: text/x-patch, Size: 18198 bytes --] From e03430859c864c3b868994143fe729f0558297ab Mon Sep 17 00:00:00 2001 From: Federico Beffa <beffa@fbengineering.ch> Date: Sat, 15 Oct 2016 21:23:31 +0200 Subject: [PATCH 01/15] gnu: chez-scheme: Add search-path and Fix i686 build. * gnu/packages/scheme.scm (chez-scheme, nanopass, stex): Move variables ... * gnu/packages/chez.scm (chez-scheme, nanopass, stex): ... here, to a new file. (chez-scheme)[arguments]: Add 'configure-flags', generalize 'configure' phase and simplify 'install-doc' phase. [native-search-path]: Add it. * gnu/local.mk (GNU_SYSTEM_MODULES): Add new file. --- gnu/local.mk | 1 + gnu/packages/chez.scm | 196 ++++++++++++++++++++++++++++++++++++++++++++++++ gnu/packages/scheme.scm | 154 ------------------------------------- 3 files changed, 197 insertions(+), 154 deletions(-) create mode 100644 gnu/packages/chez.scm diff --git a/gnu/local.mk b/gnu/local.mk index 521ba2d..9de9b1b 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -68,6 +68,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/cdrom.scm \ %D%/packages/certs.scm \ %D%/packages/check.scm \ + %D%/packages/chez.scm \ %D%/packages/ci.scm \ %D%/packages/cmake.scm \ %D%/packages/code.scm \ diff --git a/gnu/packages/chez.scm b/gnu/packages/chez.scm new file mode 100644 index 0000000..9009865 --- /dev/null +++ b/gnu/packages/chez.scm @@ -0,0 +1,196 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages chez) + #:use-module (gnu packages) + #:use-module ((guix licenses) + #:select (gpl2+ lgpl2.0+ lgpl2.1+ asl2.0 bsd-3 expat)) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix utils) + #:use-module (guix build-system gnu) + #:use-module (gnu packages compression) + #:use-module (gnu packages ncurses) + #:use-module (gnu packages ghostscript) + #:use-module (gnu packages netpbm) + #:use-module (gnu packages tex) + #:use-module (gnu packages compression) + #:use-module (gnu packages image) + #:use-module (gnu packages xorg) + #:use-module (ice-9 match)) + +(define nanopass + (let ((version "1.9")) + (origin + (method url-fetch) + (uri (string-append + "https://github.com/nanopass/nanopass-framework-scheme/archive" + "/v" version ".tar.gz")) + (sha256 (base32 "11pwyy4jiwhcl2am3a4ciczacjbjkyvdizqzdglb3l1hj2gj6nv2")) + (file-name (string-append "nanopass-" version ".tar.gz"))))) + +(define stex + (let ((version "1.2.1")) + (origin + (method url-fetch) + (uri (string-append + "https://github.com/dybvig/stex/archive" + "/v" version ".tar.gz")) + (sha256 (base32 "03pl3f668h24dn51vccr1sj5lsba9zq3j37bnxjvdadcdaj4qy5z")) + (file-name (string-append "stex-" version ".tar.gz"))))) + +(define-public chez-scheme + (package + (name "chez-scheme") + (version "9.4") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/cisco/ChezScheme/archive/" + "v" version ".tar.gz")) + (sha256 + (base32 "0lprmpsjg2plc6ykgkz482zyvhkzv6gd0vnar71ph21h6zknyklz")) + (file-name (string-append "chez-scheme-" version ".tar.gz")))) + (build-system gnu-build-system) + (inputs + `(("ncurses" ,ncurses) + ("libx11" ,libx11) + ("xorg-rgb" ,xorg-rgb) + ("nanopass" ,nanopass) + ("zlib" ,zlib) + ("stex" ,stex))) + (native-inputs + `(("texlive" ,texlive) + ("ghostscript" ,ghostscript-gs) + ("netpbm" ,netpbm))) + (native-search-paths + (list (search-path-specification + (variable "CHEZSCHEMELIBDIRS") + (files (list (string-append "lib/csv" version "-site")))))) + (outputs '("out" "doc")) + (arguments + `(#:modules ((guix build gnu-build-system) + (guix build utils) + (ice-9 match)) + #:test-target "test" + #:configure-flags + (list ,(match (or (%current-target-system) (%current-system)) + ("x86_64-linux" '(list "--machine=ta6le")) + ("i686-linux" '(list "--machine=ti3le")) + ;; FIXME: Some people succeeded in cross-compiling to + ;; ARM. https://github.com/cisco/ChezScheme/issues/13 + (_ + '()))) + #:phases + (modify-phases %standard-phases + ;; Adapt the custom 'configure' script. + (replace 'configure + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (nanopass (assoc-ref inputs "nanopass")) + (stex (assoc-ref inputs "stex")) + (zlib (assoc-ref inputs "zlib")) + (unpack (assoc-ref %standard-phases 'unpack)) + (patch-source-shebangs + (assoc-ref %standard-phases 'patch-source-shebangs))) + (map (match-lambda + ((src orig-name new-name) + (with-directory-excursion "." + (apply unpack (list #:source src)) + (apply patch-source-shebangs (list #:source src))) + (delete-file-recursively new-name) + (system* "mv" orig-name new-name))) + `((,nanopass "nanopass-framework-scheme-1.9" "nanopass") + (,stex "stex-1.2.1" "stex"))) + ;; The Makefile wants to download and compile "zlib". We patch + ;; it to use the one from our 'zlib' package. + (substitute* "configure" + (("rmdir zlib .*$") "echo \"using system zlib\"\n")) + (substitute* (find-files "./c" "Mf-[a-zA-Z0-9.]+") + (("\\$\\{Kernel\\}: \\$\\{kernelobj\\} \\.\\./zlib/libz\\.a") + "${Kernel}: ${kernelobj}") + (("ld ([-a-zA-Z0-9_${} ]+) \\.\\./zlib/libz\\.a" all args) + (string-append "ld " args " " zlib "/lib/libz.a")) + (("\\(cd \\.\\./zlib; ([-a-zA-Z0-9=./ ]+))") + (which "true"))) + (substitute* (find-files "mats" "Mf-.*") + (("^[[:space:]]+(cc ) *") "\tgcc ")) + (substitute* + (find-files "." (string-append + "(" + "Mf-[a-zA-Z0-9.]+" + "|Makefile[a-zA-Z0-9.]*" + "|checkin" + "|stex\\.stex" + "|newrelease" + "|workarea" + ;;"|[a-zA-Z0-9.]+\\.ms" ; guile can't read + ")")) + (("/bin/rm") (which "rm")) + (("/bin/ln") (which "ln")) + (("/bin/cp") (which "cp"))) + (substitute* "makefiles/installsh" + (("/bin/true") (which "true"))) + (substitute* "stex/Makefile" + (("PREFIX=/usr") (string-append "PREFIX=" out))) + (zero? (system* "./configure" "--threads" + (string-append "--installprefix=" out)))))) + ;; Installation of the documentation requires a running "chez". + (add-after 'install 'install-doc + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((bin (string-append (assoc-ref outputs "out") "/bin")) + (doc (string-append (assoc-ref outputs "doc") + "/share/doc/" ,name "-" ,version))) + (setenv "HOME" (getcwd)) + (setenv "PATH" (string-append (getenv "PATH") ":" bin)) + (with-directory-excursion "stex" + (system* "make" (string-append "BIN=" bin))) + (system* "make" "docs") + (with-directory-excursion "csug" + (substitute* "Makefile" + (("/tmp/csug9") doc)) + (system* "make" "install") + (install-file "csug.pdf" doc)) + (with-directory-excursion "release_notes" + (install-file "release_notes.pdf" doc)) + #t))) + ;; The binary file name is called "scheme" as the one from MIT/GNU + ;; Scheme. We add a symlink to use in case both are installed. + (add-after 'install 'install-symlink + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (lib (string-append out "/lib")) + (name "chez-scheme")) + (symlink (string-append bin "/scheme") + (string-append bin "/" name)) + (map (lambda (file) + (symlink file (string-append (dirname file) + "/" name ".boot"))) + (find-files lib "scheme.boot")) + #t)))))) + ;; According to the documentation MIPS is not supported. + (supported-systems (delete "mips64el-linux" %supported-systems)) + (home-page "http://www.scheme.com") + (synopsis "R6RS Scheme compiler and run-time") + (description + "Chez Scheme is a compiler and run-time system for the language of the +Revised^6 Report on Scheme (R6RS), with numerous extensions. The compiler +generates native code for each target processor, with support for x86, x86_64, +and 32-bit PowerPC architectures.") + (license asl2.0))) diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm index 9597473..41a7bf5 100644 --- a/gnu/packages/scheme.scm +++ b/gnu/packages/scheme.scm @@ -591,160 +591,6 @@ an isolated heap allowing multiple VMs to run simultaneously in different OS threads.") (license bsd-3))) -(define nanopass - (let ((version "1.9")) - (origin - (method url-fetch) - (uri (string-append - "https://github.com/nanopass/nanopass-framework-scheme/archive" - "/v" version ".tar.gz")) - (sha256 (base32 "11pwyy4jiwhcl2am3a4ciczacjbjkyvdizqzdglb3l1hj2gj6nv2")) - (file-name (string-append "nanopass-" version ".tar.gz"))))) - -(define stex - (let ((version "1.2.1")) - (origin - (method url-fetch) - (uri (string-append - "https://github.com/dybvig/stex/archive" - "/v" version ".tar.gz")) - (sha256 (base32 "03pl3f668h24dn51vccr1sj5lsba9zq3j37bnxjvdadcdaj4qy5z")) - (file-name (string-append "stex-" version ".tar.gz"))))) - -(define-public chez-scheme - (package - (name "chez-scheme") - (version "9.4") - (source - (origin - (method url-fetch) - (uri (string-append "https://github.com/cisco/ChezScheme/archive/" - "v" version ".tar.gz")) - (sha256 - (base32 "0lprmpsjg2plc6ykgkz482zyvhkzv6gd0vnar71ph21h6zknyklz")) - (file-name (string-append "chez-scheme-" version ".tar.gz")))) - (build-system gnu-build-system) - (inputs - `(("ncurses" ,ncurses) - ("libx11" ,libx11) - ("xorg-rgb" ,xorg-rgb) - ("nanopass" ,nanopass) - ("zlib" ,zlib) - ("stex" ,stex))) - (native-inputs - `(("texlive" ,texlive) - ("ghostscript" ,ghostscript-gs) - ("netpbm" ,netpbm))) - (outputs '("out" "doc")) - (arguments - `(#:modules ((guix build gnu-build-system) - (guix build utils) - (ice-9 match)) - #:test-target "test" - #:phases - (modify-phases %standard-phases - ;; Adapt the custom 'configure' script. - (replace 'configure - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (nanopass (assoc-ref inputs "nanopass")) - (stex (assoc-ref inputs "stex")) - (zlib (assoc-ref inputs "zlib")) - (unpack (assoc-ref %standard-phases 'unpack)) - (patch-source-shebangs - (assoc-ref %standard-phases 'patch-source-shebangs))) - (map (match-lambda - ((src orig-name new-name) - (with-directory-excursion "." - (apply unpack (list #:source src)) - (apply patch-source-shebangs (list #:source src))) - (delete-file-recursively new-name) - (system* "mv" orig-name new-name))) - `((,nanopass "nanopass-framework-scheme-1.9" "nanopass") - (,stex "stex-1.2.1" "stex"))) - ;; The Makefile wants to download and compile "zlib". We patch - ;; it to use the one from our 'zlib' package. - (substitute* "configure" - (("rmdir zlib .*$") "echo \"using system zlib\"\n")) - (substitute* (find-files "./c" "Mf-[a-zA-Z0-9.]+") - (("\\$\\{Kernel\\}: \\$\\{kernelobj\\} \\.\\./zlib/libz\\.a") - "${Kernel}: ${kernelobj}") - (("ld -melf_x86_64 -r -X -o \\$\\{Kernel\\} \\$\\{kernelobj\\} \\.\\./zlib/libz\\.a") - (string-append "ld -melf_x86_64 -r -X -o ${Kernel} ${kernelobj} " - zlib "/lib/libz.a")) - (("\\(cd \\.\\./zlib; CFLAGS=-m64 \\./configure --64)") - (which "true")) - (("(cd \\.\\./zlib; make)") - (which "true"))) - (substitute* (find-files "mats" "Mf-.*") - (("^[[:space:]]+(cc ) *") "\tgcc ")) - (substitute* - (find-files "." (string-append - "(" - "Mf-[a-zA-Z0-9.]+" - "|Makefile[a-zA-Z0-9.]*" - "|checkin" - "|stex\\.stex" - "|newrelease" - "|workarea" - ;;"|[a-zA-Z0-9.]+\\.ms" ; guile can't read - ")")) - (("/bin/rm") (which "rm")) - (("/bin/ln") (which "ln")) - (("/bin/cp") (which "cp"))) - (substitute* "makefiles/installsh" - (("/bin/true") (which "true"))) - (substitute* "stex/Makefile" - (("PREFIX=/usr") (string-append "PREFIX=" out))) - (zero? (system* "./configure" "--threads" - (string-append "--installprefix=" out)))))) - ;; Installation of the documentation requires a running "chez". - (add-after 'install 'install-doc - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((bin (string-append (assoc-ref outputs "out") "/bin")) - (doc (string-append (assoc-ref outputs "doc") - "/share/doc/" ,name "-" ,version))) - (setenv "HOME" (getcwd)) - (setenv "PATH" (string-append (getenv "PATH") ":" bin)) - (with-directory-excursion "stex" - (system* "make" (string-append "BIN=" bin))) - (system* "make" "docs") - (with-directory-excursion "csug" - (substitute* "Makefile" - (("/tmp/csug9") doc) - (("^m = a6le") - "m := $(shell echo '(machine-type)' | scheme -q)")) - (system* "make" "install") - (install-file "csug.pdf" doc)) - (with-directory-excursion "release_notes" - (install-file "release_notes.pdf" doc)) - #t))) - ;; The binary file name is called "scheme" as the one from MIT/GNU - ;; Scheme. We add a symlink to use in case both are installed. - (add-after 'install 'install-symlink - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (bin (string-append out "/bin")) - (lib (string-append out "/lib")) - (name "chez-scheme")) - (symlink (string-append bin "/scheme") - (string-append bin "/" name)) - (map (lambda (file) - (symlink file (string-append (dirname file) - "/" name ".boot"))) - (find-files lib "scheme.boot")) - #t)))))) - ;; According to the documentation MIPS and ARM are not supported. - (supported-systems '("x86_64-linux" "i686-linux")) - (home-page "http://www.scheme.com") - (synopsis "R6RS Scheme compiler and run-time") - (description - "Chez Scheme is a compiler and run-time system for the language of the -Revised^6 Report on Scheme (R6RS), with numerous extensions. The compiler -generates native code for each target processor, with support for x86, x86_64, -and 32-bit PowerPC architectures.") - (license asl2.0))) - (define-public scmutils (let () (define (system-suffix) -- 2.7.4 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 01/15] gnu: chez-scheme: Add search-path and fix i686 build. 2016-10-16 15:31 [PATCH 01/15] gnu: chez-scheme: Add search-path and fix i686 build Federico Beffa @ 2016-10-16 18:25 ` Ricardo Wurmus 2016-10-17 7:15 ` Federico Beffa 0 siblings, 1 reply; 6+ messages in thread From: Ricardo Wurmus @ 2016-10-16 18:25 UTC (permalink / raw) To: Federico Beffa; +Cc: Guix-devel Hi Federico, it’s a bit unfortunate to mix moving of packages between modules with a fix and a feature addition (search paths). I think the move to a new module is not necessary. Could you separate these different changes into different patches, please? ~~ Ricardo ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 01/15] gnu: chez-scheme: Add search-path and fix i686 build. 2016-10-16 18:25 ` Ricardo Wurmus @ 2016-10-17 7:15 ` Federico Beffa 2016-10-17 13:34 ` Ludovic Courtès 0 siblings, 1 reply; 6+ messages in thread From: Federico Beffa @ 2016-10-17 7:15 UTC (permalink / raw) To: Ricardo Wurmus; +Cc: Guix-devel [-- Attachment #1: Type: text/plain, Size: 596 bytes --] On Sun, Oct 16, 2016 at 8:25 PM, Ricardo Wurmus <rekado@elephly.net> wrote: > Hi Federico, > > it’s a bit unfortunate to mix moving of packages between modules with a > fix and a feature addition (search paths). I think the move to a new > module is not necessary. I moved Chez Scheme to a new module because I'm adding several libraries for it and, from my point of view, it makes sense to have them all in one place. More libraries will follow. > Could you separate these different changes into different patches, > please? I've split them. Thanks for the review. Fede [-- Attachment #2: 0001-gnu-chez-scheme-Add-search-path.patch --] [-- Type: text/x-patch, Size: 905 bytes --] From c25b941dc4a0b5d04a871edb590a728b6075b081 Mon Sep 17 00:00:00 2001 From: Federico Beffa <beffa@fbengineering.ch> Date: Mon, 17 Oct 2016 08:52:48 +0200 Subject: [PATCH 01/17] gnu: chez-scheme: Add search-path. * gnu/packages/scheme.scm (chez-scheme): Do it. --- gnu/packages/scheme.scm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm index 9597473..c461efb 100644 --- a/gnu/packages/scheme.scm +++ b/gnu/packages/scheme.scm @@ -635,6 +635,10 @@ threads.") `(("texlive" ,texlive) ("ghostscript" ,ghostscript-gs) ("netpbm" ,netpbm))) + (native-search-paths + (list (search-path-specification + (variable "CHEZSCHEMELIBDIRS") + (files (list (string-append "lib/csv" version "-site")))))) (outputs '("out" "doc")) (arguments `(#:modules ((guix build gnu-build-system) -- 2.7.4 [-- Attachment #3: 0002-gnu-chez-scheme-Fix-i686-build.patch --] [-- Type: text/x-patch, Size: 2741 bytes --] From 7875840eb0f0d0d844da40735faabd10b791f0dd Mon Sep 17 00:00:00 2001 From: Federico Beffa <beffa@fbengineering.ch> Date: Mon, 17 Oct 2016 09:01:11 +0200 Subject: [PATCH 02/17] gnu: chez-scheme: Fix i686 build. * gnu/packages/scheme.scm (chez-scheme): Add 'configure-flags', generalize 'configure' phase and simplify 'install-doc' phase. --- gnu/packages/scheme.scm | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm index c461efb..10368b2 100644 --- a/gnu/packages/scheme.scm +++ b/gnu/packages/scheme.scm @@ -645,6 +645,14 @@ threads.") (guix build utils) (ice-9 match)) #:test-target "test" + #:configure-flags + (list ,(match (or (%current-target-system) (%current-system)) + ("x86_64-linux" '(list "--machine=ta6le")) + ("i686-linux" '(list "--machine=ti3le")) + ;; FIXME: Some people succeeded in cross-compiling to + ;; ARM. https://github.com/cisco/ChezScheme/issues/13 + (_ + '()))) #:phases (modify-phases %standard-phases ;; Adapt the custom 'configure' script. @@ -673,12 +681,9 @@ threads.") (substitute* (find-files "./c" "Mf-[a-zA-Z0-9.]+") (("\\$\\{Kernel\\}: \\$\\{kernelobj\\} \\.\\./zlib/libz\\.a") "${Kernel}: ${kernelobj}") - (("ld -melf_x86_64 -r -X -o \\$\\{Kernel\\} \\$\\{kernelobj\\} \\.\\./zlib/libz\\.a") - (string-append "ld -melf_x86_64 -r -X -o ${Kernel} ${kernelobj} " - zlib "/lib/libz.a")) - (("\\(cd \\.\\./zlib; CFLAGS=-m64 \\./configure --64)") - (which "true")) - (("(cd \\.\\./zlib; make)") + (("ld ([-a-zA-Z0-9_${} ]+) \\.\\./zlib/libz\\.a" all args) + (string-append "ld " args " " zlib "/lib/libz.a")) + (("\\(cd \\.\\./zlib; ([-a-zA-Z0-9=./ ]+))") (which "true"))) (substitute* (find-files "mats" "Mf-.*") (("^[[:space:]]+(cc ) *") "\tgcc ")) @@ -715,9 +720,7 @@ threads.") (system* "make" "docs") (with-directory-excursion "csug" (substitute* "Makefile" - (("/tmp/csug9") doc) - (("^m = a6le") - "m := $(shell echo '(machine-type)' | scheme -q)")) + (("/tmp/csug9") doc)) (system* "make" "install") (install-file "csug.pdf" doc)) (with-directory-excursion "release_notes" -- 2.7.4 [-- Attachment #4: 0003-gnu-chez-scheme-Move-to-new-module.patch --] [-- Type: text/x-patch, Size: 18323 bytes --] From 0f2766f86058762443645583b491fb9097a510a3 Mon Sep 17 00:00:00 2001 From: Federico Beffa <beffa@fbengineering.ch> Date: Mon, 17 Oct 2016 09:05:39 +0200 Subject: [PATCH 03/17] gnu: chez-scheme: Move to new module. * gnu/packages/scheme.scm (chez-scheme, nanopass, stex): Move variables ... * gnu/packages/chez.scm (chez-scheme, nanopass, stex): ... here. New module. * gnu/local.mk (GNU_SYSTEM_MODULES): Add new file. --- gnu/local.mk | 1 + gnu/packages/chez.scm | 196 ++++++++++++++++++++++++++++++++++++++++++++++++ gnu/packages/scheme.scm | 161 --------------------------------------- 3 files changed, 197 insertions(+), 161 deletions(-) create mode 100644 gnu/packages/chez.scm diff --git a/gnu/local.mk b/gnu/local.mk index 521ba2d..9de9b1b 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -68,6 +68,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/cdrom.scm \ %D%/packages/certs.scm \ %D%/packages/check.scm \ + %D%/packages/chez.scm \ %D%/packages/ci.scm \ %D%/packages/cmake.scm \ %D%/packages/code.scm \ diff --git a/gnu/packages/chez.scm b/gnu/packages/chez.scm new file mode 100644 index 0000000..6b694b8 --- /dev/null +++ b/gnu/packages/chez.scm @@ -0,0 +1,196 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages chez) + #:use-module (gnu packages) + #:use-module ((guix licenses) + #:select (gpl2+ lgpl2.0+ lgpl2.1+ asl2.0 bsd-3 expat)) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix utils) + #:use-module (guix build-system gnu) + #:use-module (gnu packages compression) + #:use-module (gnu packages ncurses) + #:use-module (gnu packages ghostscript) + #:use-module (gnu packages netpbm) + #:use-module (gnu packages tex) + #:use-module (gnu packages compression) + #:use-module (gnu packages image) + #:use-module (gnu packages xorg) + #:use-module (ice-9 match)) + +(define nanopass + (let ((version "1.9")) + (origin + (method url-fetch) + (uri (string-append + "https://github.com/nanopass/nanopass-framework-scheme/archive" + "/v" version ".tar.gz")) + (sha256 (base32 "11pwyy4jiwhcl2am3a4ciczacjbjkyvdizqzdglb3l1hj2gj6nv2")) + (file-name (string-append "nanopass-" version ".tar.gz"))))) + +(define stex + (let ((version "1.2.1")) + (origin + (method url-fetch) + (uri (string-append + "https://github.com/dybvig/stex/archive" + "/v" version ".tar.gz")) + (sha256 (base32 "03pl3f668h24dn51vccr1sj5lsba9zq3j37bnxjvdadcdaj4qy5z")) + (file-name (string-append "stex-" version ".tar.gz"))))) + +(define-public chez-scheme + (package + (name "chez-scheme") + (version "9.4") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/cisco/ChezScheme/archive/" + "v" version ".tar.gz")) + (sha256 + (base32 "0lprmpsjg2plc6ykgkz482zyvhkzv6gd0vnar71ph21h6zknyklz")) + (file-name (string-append "chez-scheme-" version ".tar.gz")))) + (build-system gnu-build-system) + (inputs + `(("ncurses" ,ncurses) + ("libx11" ,libx11) + ("xorg-rgb" ,xorg-rgb) + ("nanopass" ,nanopass) + ("zlib" ,zlib) + ("stex" ,stex))) + (native-inputs + `(("texlive" ,texlive) + ("ghostscript" ,ghostscript-gs) + ("netpbm" ,netpbm))) + (native-search-paths + (list (search-path-specification + (variable "CHEZSCHEMELIBDIRS") + (files (list (string-append "lib/csv" version "-site")))))) + (outputs '("out" "doc")) + (arguments + `(#:modules ((guix build gnu-build-system) + (guix build utils) + (ice-9 match)) + #:test-target "test" + #:configure-flags + (list ,(match (or (%current-target-system) (%current-system)) + ("x86_64-linux" '(list "--machine=ta6le")) + ("i686-linux" '(list "--machine=ti3le")) + ;; FIXME: Some people succeeded in cross-compiling to + ;; ARM. https://github.com/cisco/ChezScheme/issues/13 + (_ + '()))) + #:phases + (modify-phases %standard-phases + ;; Adapt the custom 'configure' script. + (replace 'configure + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (nanopass (assoc-ref inputs "nanopass")) + (stex (assoc-ref inputs "stex")) + (zlib (assoc-ref inputs "zlib")) + (unpack (assoc-ref %standard-phases 'unpack)) + (patch-source-shebangs + (assoc-ref %standard-phases 'patch-source-shebangs))) + (map (match-lambda + ((src orig-name new-name) + (with-directory-excursion "." + (apply unpack (list #:source src)) + (apply patch-source-shebangs (list #:source src))) + (delete-file-recursively new-name) + (system* "mv" orig-name new-name))) + `((,nanopass "nanopass-framework-scheme-1.9" "nanopass") + (,stex "stex-1.2.1" "stex"))) + ;; The Makefile wants to download and compile "zlib". We patch + ;; it to use the one from our 'zlib' package. + (substitute* "configure" + (("rmdir zlib .*$") "echo \"using system zlib\"\n")) + (substitute* (find-files "./c" "Mf-[a-zA-Z0-9.]+") + (("\\$\\{Kernel\\}: \\$\\{kernelobj\\} \\.\\./zlib/libz\\.a") + "${Kernel}: ${kernelobj}") + (("ld ([-a-zA-Z0-9_${} ]+) \\.\\./zlib/libz\\.a" all args) + (string-append "ld " args " " zlib "/lib/libz.a")) + (("\\(cd \\.\\./zlib; ([-a-zA-Z0-9=./ ]+))") + (which "true"))) + (substitute* (find-files "mats" "Mf-.*") + (("^[[:space:]]+(cc ) *") "\tgcc ")) + (substitute* + (find-files "." (string-append + "(" + "Mf-[a-zA-Z0-9.]+" + "|Makefile[a-zA-Z0-9.]*" + "|checkin" + "|stex\\.stex" + "|newrelease" + "|workarea" + ;;"|[a-zA-Z0-9.]+\\.ms" ; guile can't read + ")")) + (("/bin/rm") (which "rm")) + (("/bin/ln") (which "ln")) + (("/bin/cp") (which "cp"))) + (substitute* "makefiles/installsh" + (("/bin/true") (which "true"))) + (substitute* "stex/Makefile" + (("PREFIX=/usr") (string-append "PREFIX=" out))) + (zero? (system* "./configure" "--threads" + (string-append "--installprefix=" out)))))) + ;; Installation of the documentation requires a running "chez". + (add-after 'install 'install-doc + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((bin (string-append (assoc-ref outputs "out") "/bin")) + (doc (string-append (assoc-ref outputs "doc") + "/share/doc/" ,name "-" ,version))) + (setenv "HOME" (getcwd)) + (setenv "PATH" (string-append (getenv "PATH") ":" bin)) + (with-directory-excursion "stex" + (system* "make" (string-append "BIN=" bin))) + (system* "make" "docs") + (with-directory-excursion "csug" + (substitute* "Makefile" + (("/tmp/csug9") doc)) + (system* "make" "install") + (install-file "csug.pdf" doc)) + (with-directory-excursion "release_notes" + (install-file "release_notes.pdf" doc)) + #t))) + ;; The binary file name is called "scheme" as the one from MIT/GNU + ;; Scheme. We add a symlink to use in case both are installed. + (add-after 'install 'install-symlink + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (lib (string-append out "/lib")) + (name "chez-scheme")) + (symlink (string-append bin "/scheme") + (string-append bin "/" name)) + (map (lambda (file) + (symlink file (string-append (dirname file) + "/" name ".boot"))) + (find-files lib "scheme.boot")) + #t)))))) + ;; According to the documentation MIPS is not supported. + (supported-systems (delete "mips64el-linux" %supported-systems)) + (home-page "http://www.scheme.com") + (synopsis "R6RS Scheme compiler and run-time") + (description + "Chez Scheme is a compiler and run-time system for the language of the +Revised^6 Report on Scheme (R6RS), with numerous extensions. The compiler +generates native code for each target processor, with support for x86, x86_64, +and 32-bit PowerPC architectures.") + (license asl2.0))) diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm index 10368b2..41a7bf5 100644 --- a/gnu/packages/scheme.scm +++ b/gnu/packages/scheme.scm @@ -591,167 +591,6 @@ an isolated heap allowing multiple VMs to run simultaneously in different OS threads.") (license bsd-3))) -(define nanopass - (let ((version "1.9")) - (origin - (method url-fetch) - (uri (string-append - "https://github.com/nanopass/nanopass-framework-scheme/archive" - "/v" version ".tar.gz")) - (sha256 (base32 "11pwyy4jiwhcl2am3a4ciczacjbjkyvdizqzdglb3l1hj2gj6nv2")) - (file-name (string-append "nanopass-" version ".tar.gz"))))) - -(define stex - (let ((version "1.2.1")) - (origin - (method url-fetch) - (uri (string-append - "https://github.com/dybvig/stex/archive" - "/v" version ".tar.gz")) - (sha256 (base32 "03pl3f668h24dn51vccr1sj5lsba9zq3j37bnxjvdadcdaj4qy5z")) - (file-name (string-append "stex-" version ".tar.gz"))))) - -(define-public chez-scheme - (package - (name "chez-scheme") - (version "9.4") - (source - (origin - (method url-fetch) - (uri (string-append "https://github.com/cisco/ChezScheme/archive/" - "v" version ".tar.gz")) - (sha256 - (base32 "0lprmpsjg2plc6ykgkz482zyvhkzv6gd0vnar71ph21h6zknyklz")) - (file-name (string-append "chez-scheme-" version ".tar.gz")))) - (build-system gnu-build-system) - (inputs - `(("ncurses" ,ncurses) - ("libx11" ,libx11) - ("xorg-rgb" ,xorg-rgb) - ("nanopass" ,nanopass) - ("zlib" ,zlib) - ("stex" ,stex))) - (native-inputs - `(("texlive" ,texlive) - ("ghostscript" ,ghostscript-gs) - ("netpbm" ,netpbm))) - (native-search-paths - (list (search-path-specification - (variable "CHEZSCHEMELIBDIRS") - (files (list (string-append "lib/csv" version "-site")))))) - (outputs '("out" "doc")) - (arguments - `(#:modules ((guix build gnu-build-system) - (guix build utils) - (ice-9 match)) - #:test-target "test" - #:configure-flags - (list ,(match (or (%current-target-system) (%current-system)) - ("x86_64-linux" '(list "--machine=ta6le")) - ("i686-linux" '(list "--machine=ti3le")) - ;; FIXME: Some people succeeded in cross-compiling to - ;; ARM. https://github.com/cisco/ChezScheme/issues/13 - (_ - '()))) - #:phases - (modify-phases %standard-phases - ;; Adapt the custom 'configure' script. - (replace 'configure - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (nanopass (assoc-ref inputs "nanopass")) - (stex (assoc-ref inputs "stex")) - (zlib (assoc-ref inputs "zlib")) - (unpack (assoc-ref %standard-phases 'unpack)) - (patch-source-shebangs - (assoc-ref %standard-phases 'patch-source-shebangs))) - (map (match-lambda - ((src orig-name new-name) - (with-directory-excursion "." - (apply unpack (list #:source src)) - (apply patch-source-shebangs (list #:source src))) - (delete-file-recursively new-name) - (system* "mv" orig-name new-name))) - `((,nanopass "nanopass-framework-scheme-1.9" "nanopass") - (,stex "stex-1.2.1" "stex"))) - ;; The Makefile wants to download and compile "zlib". We patch - ;; it to use the one from our 'zlib' package. - (substitute* "configure" - (("rmdir zlib .*$") "echo \"using system zlib\"\n")) - (substitute* (find-files "./c" "Mf-[a-zA-Z0-9.]+") - (("\\$\\{Kernel\\}: \\$\\{kernelobj\\} \\.\\./zlib/libz\\.a") - "${Kernel}: ${kernelobj}") - (("ld ([-a-zA-Z0-9_${} ]+) \\.\\./zlib/libz\\.a" all args) - (string-append "ld " args " " zlib "/lib/libz.a")) - (("\\(cd \\.\\./zlib; ([-a-zA-Z0-9=./ ]+))") - (which "true"))) - (substitute* (find-files "mats" "Mf-.*") - (("^[[:space:]]+(cc ) *") "\tgcc ")) - (substitute* - (find-files "." (string-append - "(" - "Mf-[a-zA-Z0-9.]+" - "|Makefile[a-zA-Z0-9.]*" - "|checkin" - "|stex\\.stex" - "|newrelease" - "|workarea" - ;;"|[a-zA-Z0-9.]+\\.ms" ; guile can't read - ")")) - (("/bin/rm") (which "rm")) - (("/bin/ln") (which "ln")) - (("/bin/cp") (which "cp"))) - (substitute* "makefiles/installsh" - (("/bin/true") (which "true"))) - (substitute* "stex/Makefile" - (("PREFIX=/usr") (string-append "PREFIX=" out))) - (zero? (system* "./configure" "--threads" - (string-append "--installprefix=" out)))))) - ;; Installation of the documentation requires a running "chez". - (add-after 'install 'install-doc - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((bin (string-append (assoc-ref outputs "out") "/bin")) - (doc (string-append (assoc-ref outputs "doc") - "/share/doc/" ,name "-" ,version))) - (setenv "HOME" (getcwd)) - (setenv "PATH" (string-append (getenv "PATH") ":" bin)) - (with-directory-excursion "stex" - (system* "make" (string-append "BIN=" bin))) - (system* "make" "docs") - (with-directory-excursion "csug" - (substitute* "Makefile" - (("/tmp/csug9") doc)) - (system* "make" "install") - (install-file "csug.pdf" doc)) - (with-directory-excursion "release_notes" - (install-file "release_notes.pdf" doc)) - #t))) - ;; The binary file name is called "scheme" as the one from MIT/GNU - ;; Scheme. We add a symlink to use in case both are installed. - (add-after 'install 'install-symlink - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (bin (string-append out "/bin")) - (lib (string-append out "/lib")) - (name "chez-scheme")) - (symlink (string-append bin "/scheme") - (string-append bin "/" name)) - (map (lambda (file) - (symlink file (string-append (dirname file) - "/" name ".boot"))) - (find-files lib "scheme.boot")) - #t)))))) - ;; According to the documentation MIPS and ARM are not supported. - (supported-systems '("x86_64-linux" "i686-linux")) - (home-page "http://www.scheme.com") - (synopsis "R6RS Scheme compiler and run-time") - (description - "Chez Scheme is a compiler and run-time system for the language of the -Revised^6 Report on Scheme (R6RS), with numerous extensions. The compiler -generates native code for each target processor, with support for x86, x86_64, -and 32-bit PowerPC architectures.") - (license asl2.0))) - (define-public scmutils (let () (define (system-suffix) -- 2.7.4 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 01/15] gnu: chez-scheme: Add search-path and fix i686 build. 2016-10-17 7:15 ` Federico Beffa @ 2016-10-17 13:34 ` Ludovic Courtès 2016-10-19 16:28 ` Federico Beffa 0 siblings, 1 reply; 6+ messages in thread From: Ludovic Courtès @ 2016-10-17 13:34 UTC (permalink / raw) To: Federico Beffa; +Cc: Guix-devel Hello Federico, Federico Beffa <beffa@ieee.org> skribis: > On Sun, Oct 16, 2016 at 8:25 PM, Ricardo Wurmus <rekado@elephly.net> wrote: [...] >> Could you separate these different changes into different patches, >> please? > > I've split them. Thanks for taking the time. > From c25b941dc4a0b5d04a871edb590a728b6075b081 Mon Sep 17 00:00:00 2001 > From: Federico Beffa <beffa@fbengineering.ch> > Date: Mon, 17 Oct 2016 08:52:48 +0200 > Subject: [PATCH 01/17] gnu: chez-scheme: Add search-path. > > * gnu/packages/scheme.scm (chez-scheme): Do it. Rather: … (chez-scheme)[native-search-paths]: New field. Otherwise OK! > From 7875840eb0f0d0d844da40735faabd10b791f0dd Mon Sep 17 00:00:00 2001 > From: Federico Beffa <beffa@fbengineering.ch> > Date: Mon, 17 Oct 2016 09:01:11 +0200 > Subject: [PATCH 02/17] gnu: chez-scheme: Fix i686 build. > > * gnu/packages/scheme.scm (chez-scheme): Add 'configure-flags', generalize > 'configure' phase and simplify 'install-doc' phase. These two parts are still logically unrelated; it’s best if you can split, but OK for this time. LGTM. > From 0f2766f86058762443645583b491fb9097a510a3 Mon Sep 17 00:00:00 2001 > From: Federico Beffa <beffa@fbengineering.ch> > Date: Mon, 17 Oct 2016 09:05:39 +0200 > Subject: [PATCH 03/17] gnu: chez-scheme: Move to new module. > > * gnu/packages/scheme.scm (chez-scheme, nanopass, stex): Move variables ... > * gnu/packages/chez.scm (chez-scheme, nanopass, stex): ... here. New module. > * gnu/local.mk (GNU_SYSTEM_MODULES): Add new file. OK! Thank you! Ludo’. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 01/15] gnu: chez-scheme: Add search-path and fix i686 build. 2016-10-17 13:34 ` Ludovic Courtès @ 2016-10-19 16:28 ` Federico Beffa 2016-10-19 17:32 ` Leo Famulari 0 siblings, 1 reply; 6+ messages in thread From: Federico Beffa @ 2016-10-19 16:28 UTC (permalink / raw) To: Ludovic Courtès; +Cc: Guix-devel On Mon, Oct 17, 2016 at 3:34 PM, Ludovic Courtès <ludo@gnu.org> wrote: > Hello Federico, > > Federico Beffa <beffa@ieee.org> skribis: > >> On Sun, Oct 16, 2016 at 8:25 PM, Ricardo Wurmus <rekado@elephly.net> wrote: >> From 7875840eb0f0d0d844da40735faabd10b791f0dd Mon Sep 17 00:00:00 2001 >> From: Federico Beffa <beffa@fbengineering.ch> >> Date: Mon, 17 Oct 2016 09:01:11 +0200 >> Subject: [PATCH 02/17] gnu: chez-scheme: Fix i686 build. >> >> * gnu/packages/scheme.scm (chez-scheme): Add 'configure-flags', generalize >> 'configure' phase and simplify 'install-doc' phase. This patch was meant to fix the i686 build, but it looks like it doesn't :-( The patch adds a 'configure-flags' argument specifying the machine type as instructed by Chez '-/configure --help' message. In addition, patching of the make files was generalized to recognize compiler flags for all architectures (previously it only recognized x86_64 ones). However, because I'm short on space I only checked that I didn't break the 64bit version and didn't build the 32bit one. If you are OK, I may give it one more shot. Otherwise I will leave it for somebody interested with an i686 machine. Regards, Fede P.S.: Note for ARM owners: although not advertised, It looks like peoples have successfully managed to cross-build Chez for ARM: https://github.com/cisco/ChezScheme/issues/13 I don't have an ARM machine. So, if you are interested, give it a try. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 01/15] gnu: chez-scheme: Add search-path and fix i686 build. 2016-10-19 16:28 ` Federico Beffa @ 2016-10-19 17:32 ` Leo Famulari 0 siblings, 0 replies; 6+ messages in thread From: Leo Famulari @ 2016-10-19 17:32 UTC (permalink / raw) To: Federico Beffa; +Cc: Guix-devel On Wed, Oct 19, 2016 at 06:28:45PM +0200, Federico Beffa wrote: > On Mon, Oct 17, 2016 at 3:34 PM, Ludovic Courtès <ludo@gnu.org> wrote: > > Hello Federico, > > > > Federico Beffa <beffa@ieee.org> skribis: > > > >> On Sun, Oct 16, 2016 at 8:25 PM, Ricardo Wurmus <rekado@elephly.net> wrote: > >> From 7875840eb0f0d0d844da40735faabd10b791f0dd Mon Sep 17 00:00:00 2001 > >> From: Federico Beffa <beffa@fbengineering.ch> > >> Date: Mon, 17 Oct 2016 09:01:11 +0200 > >> Subject: [PATCH 02/17] gnu: chez-scheme: Fix i686 build. > >> > >> * gnu/packages/scheme.scm (chez-scheme): Add 'configure-flags', generalize > >> 'configure' phase and simplify 'install-doc' phase. > > This patch was meant to fix the i686 build, but it looks like it doesn't :-( > > The patch adds a 'configure-flags' argument specifying the machine > type as instructed by Chez '-/configure --help' message. In addition, > patching of the make files was generalized to recognize compiler flags > for all architectures (previously it only recognized x86_64 ones). > However, because I'm short on space I only checked that I didn't break > the 64bit version and didn't build the 32bit one. Heh :) I recently dug out my LVM cheat sheet and increased my /gnu/store capacity by 20 GB. It was worth the 20 minutes of downtime! ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-10-19 17:32 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-10-16 15:31 [PATCH 01/15] gnu: chez-scheme: Add search-path and fix i686 build Federico Beffa 2016-10-16 18:25 ` Ricardo Wurmus 2016-10-17 7:15 ` Federico Beffa 2016-10-17 13:34 ` Ludovic Courtès 2016-10-19 16:28 ` Federico Beffa 2016-10-19 17:32 ` Leo Famulari
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/guix.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).