guix: Refactor package setup.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 22 Jul 2018 06:41:48 +0000 (08:41 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 22 Jul 2018 06:41:48 +0000 (08:41 +0200)
Next to the convenient environment setup and package build from git

   guix environment -l .guix.scm
   guix build -f .guix.scm

we can now also build other included packages

    GUIX_PACKAGE_PATH=guix guix build mes@0.17
    GUIX_PACKAGE_PATH=guix guix build nyacc@0.80.42

* guix/git/mes.scm: Move from .guix.scm, make a module.
* .guix.scm: Move from guix.scm, use it.
* build-aux/manifest.scm: Update location.
* build-aux/pre-inst-env.in: Support it.
* configure: Check for guix.
* build-aux/export.make: Export GUIX.
* GNUmakefile (update-hash): New target.

.guix.scm [new file with mode: 0644]
GNUmakefile
HACKING
build-aux/export.make
build-aux/manifest.scm
build-aux/pre-inst-env.in
configure
guix.scm [deleted file]
guix/git/mes.scm [new file with mode: 0644]
module/mescc/mescc.scm

diff --git a/.guix.scm b/.guix.scm
new file mode 100644 (file)
index 0000000..7831712
--- /dev/null
+++ b/.guix.scm
@@ -0,0 +1,41 @@
+;;; .guix.scm -- Guix package definition
+
+;;; Mes --- Maxwell Equations of Software
+;;; Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;;
+;;; This file is part of Mes.
+;;;
+;;; Mes 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.
+;;;
+;;; Mes 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; GNU Guix development package.  To build and install, run:
+;;
+;;   guix package -f .guix.scm
+;;
+;; To build it, but not install it, run:
+;;
+;;   guix build -f .guix.scm
+;;
+;; To use as the basis for a development environment, run:
+;;
+;;   guix environment -l .guix.scm
+;;
+;;; Code:
+
+(set! %load-path (cons "guix" %load-path))
+(use-modules (git mes))
+
+;; Return it here so `guix build/environment/package' can consume it directly.
+mes.git
index 07377307403832037bac783de0ab10548851be9e..1d493276bc188aff9525b03d42a9296db7f0bae8 100644 (file)
@@ -174,6 +174,18 @@ $(TARBALL): ${top_builddest}.tarball-version | generate-ChangeLog
            --transform=s,^,$(TARBALL_DIR)/,S -T- -czf $@
        git checkout ChangeLog
 
+ifdef GUIX
+update-hash: $(TARBALL)
+       $(GUIX) download file://$(PWD)/$<
+       sed -i -e 's,(base32 #!mes!# "[^"]*"),(base32 #!mes!# "$(shell $(GUIX) hash $<)"),' guix/git/mes.scm
+
+else
+$(warning update-hash: no guix)
+endif
+
+release: update-hash
+       ./pre-inst-env $(GUIX) build mes@$(VERSION) --with-source=$(TARBALL)
+
 define HELP_TOP
 Usage: make [OPTION]... [TARGET]...
 
diff --git a/HACKING b/HACKING
index 9a35180a79693040284b02c551b2ce890deda446..740afaa93cacb211872121f748da4ccb0cc3fb78 100644 (file)
--- a/HACKING
+++ b/HACKING
@@ -1,11 +1,11 @@
 -*-mode:org-*-
 
 * SETUP
-    guix environment -l guix.scm     #64 bit + 32bit
+    guix environment -l .guix.scm     #64 bit + 32bit
 
 or
 
-    guix environment --system=i686-linux -l guix.scm #32 bit only
+    guix environment --system=i686-linux -l .guix.scm #32 bit only
 
 or
 
index 7504231b2ec1472fb5128ad4b3d672b7c5bf7b2e..d28aa755a5b309685ddbd29a02a7306013c822ba 100644 (file)
@@ -66,6 +66,10 @@ ifdef GUILE_TOOLS
 export GUILE_TOOLS
 endif
 
+ifdef GUIX
+export GUIX
+endif
+
 ifdef PERL
 export PERL
 endif
index d20875780a0eea4fdf50873841eeb4e754c51232..89684205f8f0819d789e7bcaddf72e4bc3d30ee0 100644 (file)
@@ -16,5 +16,5 @@
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with Mes.  If not, see <http://www.gnu.org/licenses/>.
 
-(include "../guix.scm")
+(include "../.guix.scm")
 (packages->manifest (map cadr (package-direct-inputs mes)))
index 7aab6b74b7dbaf3306e19dfa8bfc55882d3b6fd8..63715ecefe6cd78532c412316809c1120a0a67dd 100644 (file)
@@ -26,7 +26,7 @@ MES_PREFIX=mes
 export MES_PREFIX
 
 GUILE_LOAD_COMPILED_PATH="$abs_top_builddir/module${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH"
-GUILE_LOAD_PATH="$abs_top_srcdir/module${GUILE_LOAD_PATH:+:}$GUILE_LOAD_PATH"
+GUILE_LOAD_PATH="$abs_top_srcdir/module:$abs_top_srcdir/guix${GUILE_LOAD_PATH:+:}$GUILE_LOAD_PATH"
 if [ -n "$top_builddest" ]; then
     GUILE_LOAD_PATH="$abs_top_buildir/module:$GUILE_LOAD_PATH"
 fi
index def96270cec1012b1c2b0e18a609ddc28d70f91c..720cfdf07d8f6576a8ff6f9d8ab55f2b431eb46b 100755 (executable)
--- a/configure
+++ b/configure
@@ -4,7 +4,7 @@ unset LANG LC_ALL
 guile=$(command -v ${GUILE-guile})
 guix=$(command -v ${GUIX-guix})
 if [ -n "$guix" ] ; then
-    install="guix environment -l guix.scm"
+    install="guix environment -l .guix.scm"
 else
     install="sudo apt-get install guile-2.2-dev"
 fi
@@ -344,6 +344,7 @@ Some influential environment variables:
                          (cons (check-program-version program) results))
                        '()
                        (list (make-dep "guile" '(2 0) #:commands '("guile-2.2" "guile-2.0" "guile-2" "guile"))
+                             (make-dep "guix" '(0 13) #:optional? #t)
                              (make-dep "bash" '(2 0) #:optional? #t)
                              (make-dep "guile-tools" '(2 0))
                              (make-dep "mes-seed" '(0 16 1) #:optional? #t
diff --git a/guix.scm b/guix.scm
deleted file mode 100644 (file)
index 54b96a1..0000000
--- a/guix.scm
+++ /dev/null
@@ -1,198 +0,0 @@
-;;; guix.scm -- Guix package definition
-
-;;; Mes --- Maxwell Equations of Software
-;;; Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-
-;;; Also borrowing code from:
-;;; guile-sdl2 --- FFI bindings for SDL2
-;;; Copyright © 2015 David Thompson <davet@gnu.org>
-
-;;;
-;;; guix.scm: This file is part of Mes.
-;;;
-;;; Mes 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.
-;;;
-;;; Mes 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; GNU Guix development package.  To build and install, run:
-;;
-;;   guix package -f guix.scm
-;;
-;; To build it, but not install it, run:
-;;
-;;   guix build -f guix.scm
-;;
-;; To use as the basis for a development environment, run:
-;;
-;;   guix environment -l guix.scm
-;;
-;;; Code:
-
-(use-modules (srfi srfi-1)
-             (srfi srfi-26)
-             (ice-9 match)
-             (ice-9 popen)
-             (ice-9 rdelim)
-             (gnu packages)
-             (gnu packages base)
-             (gnu packages commencement)
-             (gnu packages cross-base)
-             (gnu packages gcc)
-             (gnu packages guile)
-             (gnu packages man)
-             (gnu packages mes)
-             (gnu packages package-management)
-             (gnu packages version-control)
-             (gnu packages perl)
-             (gnu packages texinfo)
-             ((guix build utils) #:select (with-directory-excursion))
-             (guix build-system gnu)
-             (guix build-system trivial)
-             (guix gexp)
-             (guix download)
-             (guix git-download)
-             (guix licenses)
-             (guix packages))
-
-(define %source-dir (dirname (current-filename)))
-
-(define git-file?
-  (let* ((pipe (with-directory-excursion %source-dir
-                 (open-pipe* OPEN_READ "git" "ls-files")))
-         (files (let loop ((lines '()))
-                  (match (read-line pipe)
-                    ((? eof-object?)
-                     (reverse lines))
-                    (line
-                     (loop (cons line lines))))))
-         (status (close-pipe pipe)))
-    (lambda (file stat)
-      (match (stat:type stat)
-        ('directory #t)
-        ((or 'regular 'symlink)
-         (any (cut string-suffix? <> file) files))
-        (_ #f)))))
-
-(define-public nyacc-for-mes
-  (package
-    (inherit nyacc)
-    (version "0.80.42")
-      (source (origin
-                (method url-fetch)
-                (uri (string-append "https://gitlab.com/janneke/nyacc"
-                                    "/-/archive/v" version
-                                    "/nyacc-" version ".tar.gz"))
-                (sha256
-                 (base32
-                  "0c8c8kxir0h2d4nxr131xbkfs7c80haipmkp2g6677sh14wn0b3y"))))))
-
-(define-public mescc-tools
-  (package
-    (name "mescc-tools")
-    (version "0.5.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/oriansj/mescc-tools/archive/Release_"
-                    version
-                    ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0rsxbjc3bg0jl3h7ai4hndxx2iyyk8bvwj9nd3xv2vgz3bmypnah"))))
-    (build-system gnu-build-system)
-    (supported-systems '("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.  Currently consists of the M1 macro assembler and the
-hex2 linker.")
-    (home-page "https://github.com/oriansj/mescc-tools")
-    (license gpl3+)))
-
-(define-public mes
-  (let ((commit "6a48f4a81431d4357057ff928a7df880e3f3e6b4")
-        (revision "0")
-        (triplet "i686-unknown-linux-gnu")
-        (version "0.16.1"))
-    (package
-      (name "mes")
-      (version (string-append version "-" revision "." (string-take commit 7)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://gitlab.com/janneke/mes")
-                      (commit commit)))
-                (file-name (string-append name "-" version))
-                (sha256
-                 (base32 "011bcqafbjq63rq0b2p2qzp8w8kql75nfyx9k56gnhwj6rzw4bcb"))))
-      (build-system gnu-build-system)
-      (supported-systems '("i686-linux" "x86_64-linux"))
-      (propagated-inputs
-       `(("mescc-tools" ,mescc-tools)
-         ("nyacc" ,nyacc-for-mes)))
-      (native-inputs
-       `(("git" ,git)
-         ("guile" ,guile-2.2)
-         ,@(if (string-prefix? "x86_64-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)))
-               '())
-         ("help2man" ,help2man)
-         ("perl" ,perl)                ; build-aux/gitlog-to-changelog
-         ("texinfo" ,texinfo)))
-      (arguments
-       `(#:phases
-         (modify-phases %standard-phases
-           (add-before 'build 'make-git-source-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (for-each make-file-writable
-                       (find-files "." ".*\\.M1"))))
-           (add-before 'install 'generate-changelog
-             (lambda _
-               (with-output-to-file "ChangeLog"
-                 (lambda ()
-                   (display "Please run
-    build-aux/gitlog-to-changelog --srcdir=<git-checkout> > ChangeLog\n")))
-               #t))
-           (delete 'strip)))) ; binutil's strip b0rkes Mescc/M1/hex2 binaries
-      (synopsis "Scheme interpreter and C compiler for full source bootstrapping")
-      (description
-       "Mes [Maxwell Equations of Software] aims to create full source
-bootstrapping for GuixSD.  It consists of a mutual self-hosting [close to
-Guile-] Scheme interpreter prototype in C and a Nyacc-based C compiler in
-[Guile] Scheme.")
-      (home-page "https://gitlab.com/janneke/mes")
-      (license gpl3+))))
-
-(define-public mes.git
- (let ((version "0.16.1")
-        (revision "0")
-        (commit (read-string (open-pipe "git show HEAD | head -1 | cut -d ' ' -f 2" OPEN_READ))))
-    (package
-      (inherit mes)
-      (name "mes.git")
-      (version (string-append version "-" revision "." (string-take commit 7)))
-      (source (local-file %source-dir #:recursive? #t #:select? git-file?)))))
-
-;; Return it here so `guix build/environment/package' can consume it directly.
-mes.git
diff --git a/guix/git/mes.scm b/guix/git/mes.scm
new file mode 100644 (file)
index 0000000..2198cbd
--- /dev/null
@@ -0,0 +1,166 @@
+;;; Mes --- Maxwell Equations of Software
+;;; Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;;
+;;; This file is part of Mes.
+;;;
+;;; Also borrowing code from:
+;;; guile-sdl2 --- FFI bindings for SDL2
+;;; Copyright © 2015 David Thompson <davet@gnu.org>
+;;;
+;;; Mes 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.
+;;;
+;;; Mes 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (git mes)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 popen)
+  #:use-module (ice-9 rdelim)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages commencement)
+  #:use-module (gnu packages cross-base)
+  #:use-module (gnu packages gcc)
+  #:use-module (gnu packages guile)
+  #:use-module (gnu packages man)
+  #:use-module (gnu packages mes)
+  #:use-module (gnu packages package-management)
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages texinfo)
+  #:use-module ((guix build utils) #:select (with-directory-excursion))
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
+  #:use-module (guix gexp)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix licenses)
+  #:use-module (guix packages))
+
+(define %source-dir (getcwd))
+
+(define git-file?
+  (let* ((pipe (with-directory-excursion %source-dir
+                 (open-pipe* OPEN_READ "git" "ls-files")))
+         (files (let loop ((lines '()))
+                  (match (read-line pipe)
+                    ((? eof-object?)
+                     (reverse lines))
+                    (line
+                     (loop (cons line lines))))))
+         (status (close-pipe pipe)))
+    (lambda (file stat)
+      (match (stat:type stat)
+        ('directory #t)
+        ((or 'regular 'symlink)
+         (any (cut string-suffix? <> file) files))
+        (_ #f)))))
+
+(define-public nyacc-for-mes
+  (package
+    (inherit nyacc)
+    (version "0.80.42")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "https://gitlab.com/janneke/nyacc"
+                                    "/-/archive/v" version
+                                    "/nyacc-" version ".tar.gz"))
+                (sha256
+                 (base32
+                  "0c8c8kxir0h2d4nxr131xbkfs7c80haipmkp2g6677sh14wn0b3y"))))))
+
+(define-public mescc-tools
+  (package
+    (name "mescc-tools")
+    (version "0.5.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/oriansj/mescc-tools/archive/Release_"
+                    version
+                    ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0rsxbjc3bg0jl3h7ai4hndxx2iyyk8bvwj9nd3xv2vgz3bmypnah"))))
+    (build-system gnu-build-system)
+    (supported-systems '("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.  Currently consists of the M1 macro assembler and the
+hex2 linker.")
+    (home-page "https://github.com/oriansj/mescc-tools")
+    (license gpl3+)))
+
+(define-public mes
+  (let ((triplet "i686-unknown-linux-gnu")
+        (version "0.16.1"))
+    (package
+      (name "mes")
+      (version version)
+      (source (origin
+                (method url-fetch)
+                (uri (string-append
+                      "https://alpha.gnu.org/pub/gnu/mes/mes-" version ".tar.gz"))
+                (sha256
+                 (base32 #!mes!# "171bwanlnvwy406i5s0a6806iffcdz086njk8wbhgrc33n6jr8ir"))))
+      (build-system gnu-build-system)
+      (supported-systems '("i686-linux" "x86_64-linux"))
+      (propagated-inputs
+       `(("mescc-tools" ,mescc-tools)
+         ("nyacc" ,nyacc-for-mes)))
+      (native-inputs
+       `(("git" ,git)
+         ("guile" ,guile-2.2)
+         ,@(if (string-prefix? "x86_64-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)))
+               '())
+         ("help2man" ,help2man)
+         ("perl" ,perl)                ; build-aux/gitlog-to-changelog
+         ("texinfo" ,texinfo)))
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-before 'build 'make-git-source-writable
+           (lambda* (#:key outputs #:allow-other-keys)
+             (for-each make-file-writable
+                       (find-files "." ".*\\.M1"))))
+           (delete 'strip)))) ; binutil's strip b0rkes Mescc/M1/hex2 binaries
+      (synopsis "Scheme interpreter and C compiler for full source bootstrapping")
+      (description
+       "Mes [Maxwell Equations of Software] aims to create full source
+bootstrapping for GuixSD.  It consists of a mutual self-hosting [close to
+Guile-] Scheme interpreter prototype in C and a Nyacc-based C compiler in
+[Guile] Scheme.")
+      (home-page "https://gitlab.com/janneke/mes")
+      (license gpl3+))))
+
+(define-public mes.git
+ (let ((version "0.16.1")
+        (revision "0")
+        (commit (read-string (open-pipe "git show HEAD | head -1 | cut -d ' ' -f 2" OPEN_READ))))
+    (package
+      (inherit mes)
+      (name "mes.git")
+      (version (string-append version "-" revision "." (string-take commit 7)))
+      (source (local-file %source-dir #:recursive? #t #:select? git-file?)))))
index 711bac6d948132fb20e592052fe391fe9647beea..df05b8865b97f1137cbb12d34b1432511d7241f9 100644 (file)
@@ -1,5 +1,3 @@
-;;; -*-scheme-*-
-
 ;;; Mes --- Maxwell Equations of Software
 ;;; Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;;