guix: Refactor package setup.

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.
This commit is contained in:
Jan Nieuwenhuizen 2018-07-22 08:41:48 +02:00
parent ceeaa6b50c
commit 53c0941937
No known key found for this signature in database
GPG key ID: F3C1A0D9C1D65273
9 changed files with 99 additions and 75 deletions

41
.guix.scm Normal file
View file

@ -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

View file

@ -174,6 +174,18 @@ $(TARBALL): ${top_builddest}.tarball-version | generate-ChangeLog
--transform=s,^,$(TARBALL_DIR)/,S -T- -czf $@ --transform=s,^,$(TARBALL_DIR)/,S -T- -czf $@
git checkout ChangeLog 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 define HELP_TOP
Usage: make [OPTION]... [TARGET]... Usage: make [OPTION]... [TARGET]...

View file

@ -1,11 +1,11 @@
-*-mode:org-*- -*-mode:org-*-
* SETUP * SETUP
guix environment -l guix.scm #64 bit + 32bit guix environment -l .guix.scm #64 bit + 32bit
or or
guix environment --system=i686-linux -l guix.scm #32 bit only guix environment --system=i686-linux -l .guix.scm #32 bit only
or or

View file

@ -66,6 +66,10 @@ ifdef GUILE_TOOLS
export GUILE_TOOLS export GUILE_TOOLS
endif endif
ifdef GUIX
export GUIX
endif
ifdef PERL ifdef PERL
export PERL export PERL
endif endif

View file

@ -16,5 +16,5 @@
;;; You should have received a copy of the GNU General Public License ;;; You should have received a copy of the GNU General Public License
;;; along with Mes. If not, see <http://www.gnu.org/licenses/>. ;;; 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))) (packages->manifest (map cadr (package-direct-inputs mes)))

View file

@ -26,7 +26,7 @@ MES_PREFIX=mes
export MES_PREFIX export MES_PREFIX
GUILE_LOAD_COMPILED_PATH="$abs_top_builddir/module${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH" 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 if [ -n "$top_builddest" ]; then
GUILE_LOAD_PATH="$abs_top_buildir/module:$GUILE_LOAD_PATH" GUILE_LOAD_PATH="$abs_top_buildir/module:$GUILE_LOAD_PATH"
fi fi

3
configure vendored
View file

@ -4,7 +4,7 @@ unset LANG LC_ALL
guile=$(command -v ${GUILE-guile}) guile=$(command -v ${GUILE-guile})
guix=$(command -v ${GUIX-guix}) guix=$(command -v ${GUIX-guix})
if [ -n "$guix" ] ; then if [ -n "$guix" ] ; then
install="guix environment -l guix.scm" install="guix environment -l .guix.scm"
else else
install="sudo apt-get install guile-2.2-dev" install="sudo apt-get install guile-2.2-dev"
fi fi
@ -344,6 +344,7 @@ Some influential environment variables:
(cons (check-program-version program) results)) (cons (check-program-version program) results))
'() '()
(list (make-dep "guile" '(2 0) #:commands '("guile-2.2" "guile-2.0" "guile-2" "guile")) (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 "bash" '(2 0) #:optional? #t)
(make-dep "guile-tools" '(2 0)) (make-dep "guile-tools" '(2 0))
(make-dep "mes-seed" '(0 16 1) #:optional? #t (make-dep "mes-seed" '(0 16 1) #:optional? #t

View file

@ -1,14 +1,11 @@
;;; guix.scm -- Guix package definition
;;; Mes --- Maxwell Equations of Software ;;; Mes --- Maxwell Equations of Software
;;; Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> ;;; Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of Mes.
;;;
;;; Also borrowing code from: ;;; Also borrowing code from:
;;; guile-sdl2 --- FFI bindings for SDL2 ;;; guile-sdl2 --- FFI bindings for SDL2
;;; Copyright © 2015 David Thompson <davet@gnu.org> ;;; 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 ;;; Mes is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by ;;; under the terms of the GNU General Public License as published by
@ -23,49 +20,34 @@
;;; You should have received a copy of the GNU General Public License ;;; You should have received a copy of the GNU General Public License
;;; along with Mes. If not, see <http://www.gnu.org/licenses/>. ;;; along with Mes. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary: (define-module (git mes)
;; #:use-module (srfi srfi-1)
;; GNU Guix development package. To build and install, run: #:use-module (srfi srfi-26)
;; #:use-module (ice-9 match)
;; guix package -f guix.scm #:use-module (ice-9 popen)
;; #:use-module (ice-9 rdelim)
;; To build it, but not install it, run: #:use-module (gnu packages)
;; #:use-module (gnu packages base)
;; guix build -f guix.scm #:use-module (gnu packages commencement)
;; #:use-module (gnu packages cross-base)
;; To use as the basis for a development environment, run: #:use-module (gnu packages gcc)
;; #:use-module (gnu packages guile)
;; guix environment -l guix.scm #:use-module (gnu packages man)
;; #:use-module (gnu packages mes)
;;; Code: #: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))
(use-modules (srfi srfi-1) (define %source-dir (getcwd))
(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? (define git-file?
(let* ((pipe (with-directory-excursion %source-dir (let* ((pipe (with-directory-excursion %source-dir
@ -127,21 +109,17 @@ hex2 linker.")
(license gpl3+))) (license gpl3+)))
(define-public mes (define-public mes
(let ((commit "6a48f4a81431d4357057ff928a7df880e3f3e6b4") (let ((triplet "i686-unknown-linux-gnu")
(revision "0")
(triplet "i686-unknown-linux-gnu")
(version "0.16.1")) (version "0.16.1"))
(package (package
(name "mes") (name "mes")
(version (string-append version "-" revision "." (string-take commit 7))) (version version)
(source (origin (source (origin
(method git-fetch) (method url-fetch)
(uri (git-reference (uri (string-append
(url "https://gitlab.com/janneke/mes") "https://alpha.gnu.org/pub/gnu/mes/mes-" version ".tar.gz"))
(commit commit)))
(file-name (string-append name "-" version))
(sha256 (sha256
(base32 "011bcqafbjq63rq0b2p2qzp8w8kql75nfyx9k56gnhwj6rzw4bcb")))) (base32 #!mes!# "171bwanlnvwy406i5s0a6806iffcdz086njk8wbhgrc33n6jr8ir"))))
(build-system gnu-build-system) (build-system gnu-build-system)
(supported-systems '("i686-linux" "x86_64-linux")) (supported-systems '("i686-linux" "x86_64-linux"))
(propagated-inputs (propagated-inputs
@ -167,13 +145,6 @@ hex2 linker.")
(lambda* (#:key outputs #:allow-other-keys) (lambda* (#:key outputs #:allow-other-keys)
(for-each make-file-writable (for-each make-file-writable
(find-files "." ".*\\.M1")))) (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 (delete 'strip)))) ; binutil's strip b0rkes Mescc/M1/hex2 binaries
(synopsis "Scheme interpreter and C compiler for full source bootstrapping") (synopsis "Scheme interpreter and C compiler for full source bootstrapping")
(description (description
@ -193,6 +164,3 @@ Guile-] Scheme interpreter prototype in C and a Nyacc-based C compiler in
(name "mes.git") (name "mes.git")
(version (string-append version "-" revision "." (string-take commit 7))) (version (string-append version "-" revision "." (string-take commit 7)))
(source (local-file %source-dir #:recursive? #t #:select? git-file?))))) (source (local-file %source-dir #:recursive? #t #:select? git-file?)))))
;; Return it here so `guix build/environment/package' can consume it directly.
mes.git

View file

@ -1,5 +1,3 @@
;;; -*-scheme-*-
;;; Mes --- Maxwell Equations of Software ;;; Mes --- Maxwell Equations of Software
;;; Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> ;;; Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; ;;;