From 53c09419374aa258722e2372d3e0b373f9af3060 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Sun, 22 Jul 2018 08:41:48 +0200 Subject: [PATCH] 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. --- .guix.scm | 41 ++++++++++++++ GNUmakefile | 12 ++++ HACKING | 4 +- build-aux/export.make | 4 ++ build-aux/manifest.scm | 2 +- build-aux/pre-inst-env.in | 2 +- configure | 3 +- guix.scm => guix/git/mes.scm | 104 ++++++++++++----------------------- module/mescc/mescc.scm | 2 - 9 files changed, 99 insertions(+), 75 deletions(-) create mode 100644 .guix.scm rename guix.scm => guix/git/mes.scm (70%) diff --git a/.guix.scm b/.guix.scm new file mode 100644 index 00000000..7831712d --- /dev/null +++ b/.guix.scm @@ -0,0 +1,41 @@ +;;; .guix.scm -- Guix package definition + +;;; Mes --- Maxwell Equations of Software +;;; Copyright © 2018 Jan (janneke) Nieuwenhuizen +;;; +;;; 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 . + +;;; 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 diff --git a/GNUmakefile b/GNUmakefile index 07377307..1d493276 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -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 9a35180a..740afaa9 100644 --- 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 diff --git a/build-aux/export.make b/build-aux/export.make index 7504231b..d28aa755 100644 --- a/build-aux/export.make +++ b/build-aux/export.make @@ -66,6 +66,10 @@ ifdef GUILE_TOOLS export GUILE_TOOLS endif +ifdef GUIX +export GUIX +endif + ifdef PERL export PERL endif diff --git a/build-aux/manifest.scm b/build-aux/manifest.scm index d2087578..89684205 100644 --- a/build-aux/manifest.scm +++ b/build-aux/manifest.scm @@ -16,5 +16,5 @@ ;;; You should have received a copy of the GNU General Public License ;;; along with Mes. If not, see . -(include "../guix.scm") +(include "../.guix.scm") (packages->manifest (map cadr (package-direct-inputs mes))) diff --git a/build-aux/pre-inst-env.in b/build-aux/pre-inst-env.in index 7aab6b74..63715ece 100644 --- a/build-aux/pre-inst-env.in +++ b/build-aux/pre-inst-env.in @@ -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 diff --git a/configure b/configure index def96270..720cfdf0 100755 --- 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/git/mes.scm similarity index 70% rename from guix.scm rename to guix/git/mes.scm index 54b96a1e..2198cbd1 100644 --- a/guix.scm +++ b/guix/git/mes.scm @@ -1,14 +1,11 @@ -;;; guix.scm -- Guix package definition - ;;; Mes --- Maxwell Equations of Software ;;; Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen - +;;; +;;; This file is part of Mes. +;;; ;;; Also borrowing code from: ;;; guile-sdl2 --- FFI bindings for SDL2 ;;; Copyright © 2015 David Thompson - -;;; -;;; 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 @@ -23,49 +20,34 @@ ;;; You should have received a copy of the GNU General Public License ;;; along with Mes. If not, see . -;;; 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: +(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)) -(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 %source-dir (getcwd)) (define git-file? (let* ((pipe (with-directory-excursion %source-dir @@ -127,21 +109,17 @@ hex2 linker.") (license gpl3+))) (define-public mes - (let ((commit "6a48f4a81431d4357057ff928a7df880e3f3e6b4") - (revision "0") - (triplet "i686-unknown-linux-gnu") + (let ((triplet "i686-unknown-linux-gnu") (version "0.16.1")) (package (name "mes") - (version (string-append version "-" revision "." (string-take commit 7))) + (version version) (source (origin - (method git-fetch) - (uri (git-reference - (url "https://gitlab.com/janneke/mes") - (commit commit))) - (file-name (string-append name "-" version)) + (method url-fetch) + (uri (string-append + "https://alpha.gnu.org/pub/gnu/mes/mes-" version ".tar.gz")) (sha256 - (base32 "011bcqafbjq63rq0b2p2qzp8w8kql75nfyx9k56gnhwj6rzw4bcb")))) + (base32 #!mes!# "171bwanlnvwy406i5s0a6806iffcdz086njk8wbhgrc33n6jr8ir")))) (build-system gnu-build-system) (supported-systems '("i686-linux" "x86_64-linux")) (propagated-inputs @@ -167,13 +145,6 @@ hex2 linker.") (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= > ChangeLog\n"))) - #t)) (delete 'strip)))) ; binutil's strip b0rkes Mescc/M1/hex2 binaries (synopsis "Scheme interpreter and C compiler for full source bootstrapping") (description @@ -193,6 +164,3 @@ Guile-] Scheme interpreter prototype in C and a Nyacc-based C compiler in (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/module/mescc/mescc.scm b/module/mescc/mescc.scm index 711bac6d..df05b886 100644 --- a/module/mescc/mescc.scm +++ b/module/mescc/mescc.scm @@ -1,5 +1,3 @@ -;;; -*-scheme-*- - ;;; Mes --- Maxwell Equations of Software ;;; Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen ;;;