2014-11-09 21:32:21 +00:00
|
|
|
|
;;; GNU Guix --- Functional package management for GNU
|
2021-01-27 13:46:10 +00:00
|
|
|
|
;;; Copyright © 2014, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
|
2014-11-09 21:32:21 +00:00
|
|
|
|
;;;
|
|
|
|
|
;;; 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 (build-self)
|
2017-11-21 22:51:59 +00:00
|
|
|
|
#:use-module (gnu)
|
|
|
|
|
#:use-module (guix)
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
#:use-module (guix ui)
|
2017-11-21 22:51:59 +00:00
|
|
|
|
#:use-module (guix config)
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
#:use-module (guix modules)
|
Switch to Guile-Gcrypt.
This removes (guix hash) and (guix pk-crypto), which now live as part of
Guile-Gcrypt (version 0.1.0.)
* guix/gcrypt.scm, guix/hash.scm, guix/pk-crypto.scm,
tests/hash.scm, tests/pk-crypto.scm: Remove.
* configure.ac: Test for Guile-Gcrypt. Remove LIBGCRYPT and
LIBGCRYPT_LIBDIR assignments.
* m4/guix.m4 (GUIX_ASSERT_LIBGCRYPT_USABLE): Remove.
* README: Add Guile-Gcrypt to the dependencies; move libgcrypt as
"required unless --disable-daemon".
* doc/guix.texi (Requirements): Likewise.
* gnu/packages/bash.scm, guix/derivations.scm, guix/docker.scm,
guix/git.scm, guix/http-client.scm, guix/import/cpan.scm,
guix/import/cran.scm, guix/import/crate.scm, guix/import/elpa.scm,
guix/import/gnu.scm, guix/import/hackage.scm,
guix/import/texlive.scm, guix/import/utils.scm, guix/nar.scm,
guix/pki.scm, guix/scripts/archive.scm,
guix/scripts/authenticate.scm, guix/scripts/download.scm,
guix/scripts/hash.scm, guix/scripts/pack.scm,
guix/scripts/publish.scm, guix/scripts/refresh.scm,
guix/scripts/substitute.scm, guix/store.scm,
guix/store/deduplication.scm, guix/tests.scm, tests/base32.scm,
tests/builders.scm, tests/challenge.scm, tests/cpan.scm,
tests/crate.scm, tests/derivations.scm, tests/gem.scm,
tests/nar.scm, tests/opam.scm, tests/pki.scm,
tests/publish.scm, tests/pypi.scm, tests/store-deduplication.scm,
tests/store.scm, tests/substitute.scm: Adjust imports.
* gnu/system/vm.scm: Likewise.
(guile-sqlite3&co): Rename to...
(gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT.
(expression->derivation-in-linux-vm)[config]: Remove.
(iso9660-image)[config]: Remove.
(qemu-image)[config]: Remove.
(system-docker-image)[config]: Remove.
* guix/scripts/pack.scm: Adjust imports.
(guile-sqlite3&co): Rename to...
(gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT.
(self-contained-tarball)[build]: Call 'make-config.scm' without
#:libgcrypt argument.
(squashfs-image)[libgcrypt]: Remove.
[build]: Call 'make-config.scm' without #:libgcrypt.
(docker-image)[config, json]: Remove.
[build]: Add GUILE-GCRYPT to the extensions Remove (guix config) from
the imported modules.
* guix/self.scm (specification->package): Remove "libgcrypt", add
"guile-gcrypt".
(compiled-guix): Remove #:libgcrypt.
[guile-gcrypt]: New variable.
[dependencies]: Add it.
[*core-modules*]: Remove #:libgcrypt from 'make-config.scm' call.
Add #:extensions.
[*config*]: Remove #:libgcrypt from 'make-config.scm' call.
(%dependency-variables): Remove %libgcrypt.
(make-config.scm): Remove #:libgcrypt.
* build-aux/build-self.scm (guile-gcrypt): New variable.
(make-config.scm): Remove #:libgcrypt.
(build-program)[fake-gcrypt-hash]: New variable.
Add (gcrypt hash) to the imported modules. Adjust load path
assignments.
* gnu/packages/package-management.scm (guix)[propagated-inputs]: Add
GUILE-GCRYPT.
[arguments]: In 'wrap-program' phase, add GUILE-GCRYPT to the search
path.
2018-08-31 15:07:07 +00:00
|
|
|
|
#:use-module (guix build-system gnu)
|
2014-11-09 21:32:21 +00:00
|
|
|
|
#:use-module (srfi srfi-1)
|
2016-07-20 20:40:20 +00:00
|
|
|
|
#:use-module (srfi srfi-19)
|
2018-09-13 08:23:39 +00:00
|
|
|
|
#:use-module (srfi srfi-34)
|
|
|
|
|
#:use-module (srfi srfi-35)
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
#:use-module (rnrs io ports)
|
2017-05-09 15:04:02 +00:00
|
|
|
|
#:use-module (ice-9 match)
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
#:use-module (ice-9 popen)
|
2014-11-09 21:32:21 +00:00
|
|
|
|
#:export (build))
|
|
|
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
|
;;;
|
|
|
|
|
;;; When loaded, this module returns a monadic procedure of at least one
|
|
|
|
|
;;; argument: the source tree to build. It returns a derivation that
|
|
|
|
|
;;; builds it.
|
|
|
|
|
;;;
|
2017-11-21 22:51:59 +00:00
|
|
|
|
;;; This file uses modules provided by the already-installed Guix. Those
|
|
|
|
|
;;; modules may be arbitrarily old compared to the version we want to
|
|
|
|
|
;;; build. Because of that, it must rely on the smallest set of features
|
|
|
|
|
;;; that are likely to be provided by the (guix) and (gnu) modules, and by
|
|
|
|
|
;;; Guile itself, forever and ever.
|
|
|
|
|
;;;
|
2014-11-09 21:32:21 +00:00
|
|
|
|
;;; Code:
|
|
|
|
|
|
2017-11-21 22:51:59 +00:00
|
|
|
|
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
;;;
|
|
|
|
|
;;; Generating (guix config).
|
|
|
|
|
;;;
|
|
|
|
|
;;; This is copied from (guix self) because we cannot assume (guix self) is
|
|
|
|
|
;;; available at this point.
|
|
|
|
|
;;;
|
|
|
|
|
|
|
|
|
|
(define %persona-variables
|
|
|
|
|
;; (guix config) variables that define Guix's persona.
|
|
|
|
|
'(%guix-package-name
|
|
|
|
|
%guix-version
|
|
|
|
|
%guix-bug-report-address
|
|
|
|
|
%guix-home-page-url))
|
|
|
|
|
|
|
|
|
|
(define %config-variables
|
2018-06-18 20:43:44 +00:00
|
|
|
|
;; (guix config) variables corresponding to Guix configuration.
|
|
|
|
|
(letrec-syntax ((variables (syntax-rules ()
|
|
|
|
|
((_)
|
|
|
|
|
'())
|
|
|
|
|
((_ variable rest ...)
|
|
|
|
|
(cons `(variable . ,variable)
|
|
|
|
|
(variables rest ...))))))
|
2018-06-18 21:56:16 +00:00
|
|
|
|
(variables %localstatedir %storedir %sysconfdir %system)))
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
|
Use "guile-zlib" and "guile-lzlib" instead of (guix config).
* Makefile.am (MODULES): Remove guix/zlib.scm and guix/lzlib.scm,
(SCM_TESTS): remove tests/zlib.scm, tests/lzlib.scm.
* build-aux/build-self.scm (make-config.scm): Remove unused %libz variable.
* configure.ac: Remove LIBZ and LIBLZ variables and check instead for
Guile-zlib and Guile-lzlib.
* doc/guix.texi ("Requirements"): Remove zlib requirement and add Guile-zlib
and Guile-lzlib instead.
* gnu/packages/package-management.scm (guix)[native-inputs]: Add "guile-zlib"
and "guile-lzlib",
[inputs]: remove "zlib" and "lzlib",
[propagated-inputs]: ditto,
[arguments]: add "guile-zlib" and "guile-lzlib" to Guile load path.
* guix/config.scm.in (%libz, %liblz): Remove them.
* guix/lzlib.scm: Remove it.
* guix/man-db.scm: Use (zlib) instead of (guix zlib).
* guix/profiles.scm (manual-database): Do not stub (guix config) in imported
modules list, instead add "guile-zlib" to the extension list.
* guix/scripts/publish.scm: Use (zlib) instead of (guix zlib) and (lzlib)
instead of (guix lzlib),
(string->compression-type, effective-compression): do not check for zlib and
lzlib availability.
* guix/scripts/substitute.scm (%compression-methods): Do not check for lzlib
availability.
* guix/self.scm (specification->package): Add "guile-zlib" and "guile-lzlib"
and remove "zlib" and "lzlib",
(compiled-guix): remove "zlib" and "lzlib" arguments and add guile-zlib and
guile-lzlib to the dependencies, also do not pass "zlib" and "lzlib" to
"make-config.scm" procedure,
(make-config.scm): remove "zlib" and "lzlib" arguments as well as %libz and
%liblz variables.
* guix/utils.scm (lzip-port): Use (lzlib) instead of (guix lzlib) and do not
check for lzlib availability.
* guix/zlib.scm: Remove it.
* m4/guix.m4 (GUIX_LIBZ_LIBDIR, GUIX_LIBLZ_FILE_NAME): Remove them.
* tests/lzlib.scm: Use (zlib) instead of (guix zlib) and (lzlib)
instead of (guix lzlib), and do not check for zlib and lzlib availability.
* tests/publish.scm: Ditto.
* tests/substitute.scm: Do not check for lzlib availability.
* tests/utils.scm: Ditto.
* tests/zlib.scm: Remove it.
2020-07-27 14:36:39 +00:00
|
|
|
|
(define* (make-config.scm #:key gzip xz bzip2
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
(package-name "GNU Guix")
|
|
|
|
|
(package-version "0")
|
|
|
|
|
(bug-report-address "bug-guix@gnu.org")
|
2019-07-15 16:46:39 +00:00
|
|
|
|
(home-page-url "https://guix.gnu.org"))
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
|
|
|
|
|
;; Hack so that Geiser is not confused.
|
|
|
|
|
(define defmod 'define-module)
|
|
|
|
|
|
|
|
|
|
(scheme-file "config.scm"
|
|
|
|
|
#~(begin
|
|
|
|
|
(#$defmod (guix config)
|
|
|
|
|
#:export (%guix-package-name
|
|
|
|
|
%guix-version
|
|
|
|
|
%guix-bug-report-address
|
|
|
|
|
%guix-home-page-url
|
2018-06-18 21:56:16 +00:00
|
|
|
|
%store-directory
|
|
|
|
|
%state-directory
|
|
|
|
|
%store-database-directory
|
|
|
|
|
%config-directory
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
%libz
|
|
|
|
|
%gzip
|
|
|
|
|
%bzip2
|
2018-06-18 20:53:25 +00:00
|
|
|
|
%xz))
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
|
|
|
|
|
;; XXX: Work around <http://bugs.gnu.org/15602>.
|
|
|
|
|
(eval-when (expand load eval)
|
|
|
|
|
#$@(map (match-lambda
|
|
|
|
|
((name . value)
|
|
|
|
|
#~(define-public #$name #$value)))
|
|
|
|
|
%config-variables)
|
|
|
|
|
|
2018-06-18 21:56:16 +00:00
|
|
|
|
(define %store-directory
|
|
|
|
|
(or (and=> (getenv "NIX_STORE_DIR") canonicalize-path)
|
|
|
|
|
%storedir))
|
|
|
|
|
|
|
|
|
|
(define %state-directory
|
|
|
|
|
;; This must match `NIX_STATE_DIR' as defined in
|
|
|
|
|
;; `nix/local.mk'.
|
2019-02-03 21:10:06 +00:00
|
|
|
|
(or (getenv "GUIX_STATE_DIRECTORY")
|
2018-06-18 21:56:16 +00:00
|
|
|
|
(string-append %localstatedir "/guix")))
|
|
|
|
|
|
|
|
|
|
(define %store-database-directory
|
2019-02-03 21:10:06 +00:00
|
|
|
|
(or (getenv "GUIX_DATABASE_DIRECTORY")
|
2018-06-18 21:56:16 +00:00
|
|
|
|
(string-append %state-directory "/db")))
|
|
|
|
|
|
|
|
|
|
(define %config-directory
|
|
|
|
|
;; This must match `GUIX_CONFIGURATION_DIRECTORY' as
|
|
|
|
|
;; defined in `nix/local.mk'.
|
|
|
|
|
(or (getenv "GUIX_CONFIGURATION_DIRECTORY")
|
|
|
|
|
(string-append %sysconfdir "/guix")))
|
|
|
|
|
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
(define %guix-package-name #$package-name)
|
|
|
|
|
(define %guix-version #$package-version)
|
|
|
|
|
(define %guix-bug-report-address #$bug-report-address)
|
|
|
|
|
(define %guix-home-page-url #$home-page-url)
|
|
|
|
|
|
|
|
|
|
(define %gzip
|
|
|
|
|
#+(and gzip (file-append gzip "/bin/gzip")))
|
|
|
|
|
(define %bzip2
|
|
|
|
|
#+(and bzip2 (file-append bzip2 "/bin/bzip2")))
|
|
|
|
|
(define %xz
|
Use "guile-zlib" and "guile-lzlib" instead of (guix config).
* Makefile.am (MODULES): Remove guix/zlib.scm and guix/lzlib.scm,
(SCM_TESTS): remove tests/zlib.scm, tests/lzlib.scm.
* build-aux/build-self.scm (make-config.scm): Remove unused %libz variable.
* configure.ac: Remove LIBZ and LIBLZ variables and check instead for
Guile-zlib and Guile-lzlib.
* doc/guix.texi ("Requirements"): Remove zlib requirement and add Guile-zlib
and Guile-lzlib instead.
* gnu/packages/package-management.scm (guix)[native-inputs]: Add "guile-zlib"
and "guile-lzlib",
[inputs]: remove "zlib" and "lzlib",
[propagated-inputs]: ditto,
[arguments]: add "guile-zlib" and "guile-lzlib" to Guile load path.
* guix/config.scm.in (%libz, %liblz): Remove them.
* guix/lzlib.scm: Remove it.
* guix/man-db.scm: Use (zlib) instead of (guix zlib).
* guix/profiles.scm (manual-database): Do not stub (guix config) in imported
modules list, instead add "guile-zlib" to the extension list.
* guix/scripts/publish.scm: Use (zlib) instead of (guix zlib) and (lzlib)
instead of (guix lzlib),
(string->compression-type, effective-compression): do not check for zlib and
lzlib availability.
* guix/scripts/substitute.scm (%compression-methods): Do not check for lzlib
availability.
* guix/self.scm (specification->package): Add "guile-zlib" and "guile-lzlib"
and remove "zlib" and "lzlib",
(compiled-guix): remove "zlib" and "lzlib" arguments and add guile-zlib and
guile-lzlib to the dependencies, also do not pass "zlib" and "lzlib" to
"make-config.scm" procedure,
(make-config.scm): remove "zlib" and "lzlib" arguments as well as %libz and
%liblz variables.
* guix/utils.scm (lzip-port): Use (lzlib) instead of (guix lzlib) and do not
check for lzlib availability.
* guix/zlib.scm: Remove it.
* m4/guix.m4 (GUIX_LIBZ_LIBDIR, GUIX_LIBLZ_FILE_NAME): Remove them.
* tests/lzlib.scm: Use (zlib) instead of (guix zlib) and (lzlib)
instead of (guix lzlib), and do not check for zlib and lzlib availability.
* tests/publish.scm: Ditto.
* tests/substitute.scm: Do not check for lzlib availability.
* tests/utils.scm: Ditto.
* tests/zlib.scm: Remove it.
2020-07-27 14:36:39 +00:00
|
|
|
|
#+(and xz (file-append xz "/bin/xz")))))))
|
2017-11-21 22:51:59 +00:00
|
|
|
|
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
|
|
|
|
|
;;;
|
|
|
|
|
;;; 'gexp->script'.
|
|
|
|
|
;;;
|
|
|
|
|
;;; This is our own variant of 'gexp->script' with an extra #:module-path
|
|
|
|
|
;;; parameter, which was unavailable in (guix gexp) until commit
|
|
|
|
|
;;; 1ae16033f34cebe802023922436883867010850f (March 2018.)
|
|
|
|
|
;;;
|
2017-11-21 22:51:59 +00:00
|
|
|
|
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
(define (load-path-expression modules path)
|
|
|
|
|
"Return as a monadic value a gexp that sets '%load-path' and
|
|
|
|
|
'%load-compiled-path' to point to MODULES, a list of module names. MODULES
|
|
|
|
|
are searched for in PATH."
|
|
|
|
|
(mlet %store-monad ((modules (imported-modules modules
|
|
|
|
|
#:module-path path))
|
|
|
|
|
(compiled (compiled-modules modules
|
|
|
|
|
#:module-path path)))
|
|
|
|
|
(return (gexp (eval-when (expand load eval)
|
|
|
|
|
(set! %load-path
|
|
|
|
|
(cons (ungexp modules) %load-path))
|
|
|
|
|
(set! %load-compiled-path
|
|
|
|
|
(cons (ungexp compiled)
|
|
|
|
|
%load-compiled-path)))))))
|
|
|
|
|
|
|
|
|
|
(define* (gexp->script name exp
|
|
|
|
|
#:key (guile (default-guile))
|
|
|
|
|
(module-path %load-path))
|
|
|
|
|
"Return an executable script NAME that runs EXP using GUILE, with EXP's
|
|
|
|
|
imported modules in its search path."
|
|
|
|
|
(mlet %store-monad ((set-load-path
|
|
|
|
|
(load-path-expression (gexp-modules exp)
|
|
|
|
|
module-path)))
|
|
|
|
|
(gexp->derivation name
|
|
|
|
|
(gexp
|
|
|
|
|
(call-with-output-file (ungexp output)
|
|
|
|
|
(lambda (port)
|
|
|
|
|
;; Note: that makes a long shebang. When the store
|
|
|
|
|
;; is /gnu/store, that fits within the 128-byte
|
|
|
|
|
;; limit imposed by Linux, but that may go beyond
|
|
|
|
|
;; when running tests.
|
|
|
|
|
(format port
|
|
|
|
|
"#!~a/bin/guile --no-auto-compile~%!#~%"
|
|
|
|
|
(ungexp guile))
|
|
|
|
|
|
|
|
|
|
(write '(ungexp set-load-path) port)
|
|
|
|
|
(write '(ungexp exp) port)
|
|
|
|
|
(chmod port #o555))))
|
|
|
|
|
#:module-path module-path)))
|
2016-07-20 20:40:20 +00:00
|
|
|
|
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
|
2016-07-20 20:40:20 +00:00
|
|
|
|
(define (date-version-string)
|
|
|
|
|
"Return the current date and hour in UTC timezone, for use as a poor
|
|
|
|
|
person's version identifier."
|
2017-11-21 22:51:59 +00:00
|
|
|
|
;; XXX: Replace with a Git commit id.
|
2016-07-20 20:40:20 +00:00
|
|
|
|
(date->string (current-date 0) "~Y~m~d.~H"))
|
|
|
|
|
|
Switch to Guile-Gcrypt.
This removes (guix hash) and (guix pk-crypto), which now live as part of
Guile-Gcrypt (version 0.1.0.)
* guix/gcrypt.scm, guix/hash.scm, guix/pk-crypto.scm,
tests/hash.scm, tests/pk-crypto.scm: Remove.
* configure.ac: Test for Guile-Gcrypt. Remove LIBGCRYPT and
LIBGCRYPT_LIBDIR assignments.
* m4/guix.m4 (GUIX_ASSERT_LIBGCRYPT_USABLE): Remove.
* README: Add Guile-Gcrypt to the dependencies; move libgcrypt as
"required unless --disable-daemon".
* doc/guix.texi (Requirements): Likewise.
* gnu/packages/bash.scm, guix/derivations.scm, guix/docker.scm,
guix/git.scm, guix/http-client.scm, guix/import/cpan.scm,
guix/import/cran.scm, guix/import/crate.scm, guix/import/elpa.scm,
guix/import/gnu.scm, guix/import/hackage.scm,
guix/import/texlive.scm, guix/import/utils.scm, guix/nar.scm,
guix/pki.scm, guix/scripts/archive.scm,
guix/scripts/authenticate.scm, guix/scripts/download.scm,
guix/scripts/hash.scm, guix/scripts/pack.scm,
guix/scripts/publish.scm, guix/scripts/refresh.scm,
guix/scripts/substitute.scm, guix/store.scm,
guix/store/deduplication.scm, guix/tests.scm, tests/base32.scm,
tests/builders.scm, tests/challenge.scm, tests/cpan.scm,
tests/crate.scm, tests/derivations.scm, tests/gem.scm,
tests/nar.scm, tests/opam.scm, tests/pki.scm,
tests/publish.scm, tests/pypi.scm, tests/store-deduplication.scm,
tests/store.scm, tests/substitute.scm: Adjust imports.
* gnu/system/vm.scm: Likewise.
(guile-sqlite3&co): Rename to...
(gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT.
(expression->derivation-in-linux-vm)[config]: Remove.
(iso9660-image)[config]: Remove.
(qemu-image)[config]: Remove.
(system-docker-image)[config]: Remove.
* guix/scripts/pack.scm: Adjust imports.
(guile-sqlite3&co): Rename to...
(gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT.
(self-contained-tarball)[build]: Call 'make-config.scm' without
#:libgcrypt argument.
(squashfs-image)[libgcrypt]: Remove.
[build]: Call 'make-config.scm' without #:libgcrypt.
(docker-image)[config, json]: Remove.
[build]: Add GUILE-GCRYPT to the extensions Remove (guix config) from
the imported modules.
* guix/self.scm (specification->package): Remove "libgcrypt", add
"guile-gcrypt".
(compiled-guix): Remove #:libgcrypt.
[guile-gcrypt]: New variable.
[dependencies]: Add it.
[*core-modules*]: Remove #:libgcrypt from 'make-config.scm' call.
Add #:extensions.
[*config*]: Remove #:libgcrypt from 'make-config.scm' call.
(%dependency-variables): Remove %libgcrypt.
(make-config.scm): Remove #:libgcrypt.
* build-aux/build-self.scm (guile-gcrypt): New variable.
(make-config.scm): Remove #:libgcrypt.
(build-program)[fake-gcrypt-hash]: New variable.
Add (gcrypt hash) to the imported modules. Adjust load path
assignments.
* gnu/packages/package-management.scm (guix)[propagated-inputs]: Add
GUILE-GCRYPT.
[arguments]: In 'wrap-program' phase, add GUILE-GCRYPT to the search
path.
2018-08-31 15:07:07 +00:00
|
|
|
|
(define guile-gcrypt
|
|
|
|
|
;; The host Guix may or may not have 'guile-gcrypt', which was introduced in
|
|
|
|
|
;; August 2018. If it has it, it's at least version 0.1.0, which is good
|
|
|
|
|
;; enough. If it doesn't, specify our own package because the target Guix
|
|
|
|
|
;; requires it.
|
|
|
|
|
(match (find-best-packages-by-name "guile-gcrypt" #f)
|
|
|
|
|
(()
|
|
|
|
|
(package
|
|
|
|
|
(name "guile-gcrypt")
|
|
|
|
|
(version "0.1.0")
|
|
|
|
|
(home-page "https://notabug.org/cwebber/guile-gcrypt")
|
|
|
|
|
(source (origin
|
|
|
|
|
(method url-fetch)
|
|
|
|
|
(uri (string-append home-page "/archive/v" version ".tar.gz"))
|
|
|
|
|
(sha256
|
|
|
|
|
(base32
|
|
|
|
|
"1gir7ifknbmbvjlql5j6wzk7bkb5lnmq80q59ngz43hhpclrk5k3"))
|
|
|
|
|
(file-name (string-append name "-" version ".tar.gz"))))
|
|
|
|
|
(build-system gnu-build-system)
|
2018-09-06 09:55:36 +00:00
|
|
|
|
(arguments
|
|
|
|
|
;; The 'bootstrap' phase appeared in 'core-updates', which was merged
|
|
|
|
|
;; into 'master' ca. June 2018.
|
|
|
|
|
'(#:phases (modify-phases %standard-phases
|
|
|
|
|
(delete 'bootstrap)
|
|
|
|
|
(add-before 'configure 'bootstrap
|
|
|
|
|
(lambda _
|
|
|
|
|
(unless (zero? (system* "autoreconf" "-vfi"))
|
|
|
|
|
(error "autoreconf failed"))
|
|
|
|
|
#t)))))
|
Switch to Guile-Gcrypt.
This removes (guix hash) and (guix pk-crypto), which now live as part of
Guile-Gcrypt (version 0.1.0.)
* guix/gcrypt.scm, guix/hash.scm, guix/pk-crypto.scm,
tests/hash.scm, tests/pk-crypto.scm: Remove.
* configure.ac: Test for Guile-Gcrypt. Remove LIBGCRYPT and
LIBGCRYPT_LIBDIR assignments.
* m4/guix.m4 (GUIX_ASSERT_LIBGCRYPT_USABLE): Remove.
* README: Add Guile-Gcrypt to the dependencies; move libgcrypt as
"required unless --disable-daemon".
* doc/guix.texi (Requirements): Likewise.
* gnu/packages/bash.scm, guix/derivations.scm, guix/docker.scm,
guix/git.scm, guix/http-client.scm, guix/import/cpan.scm,
guix/import/cran.scm, guix/import/crate.scm, guix/import/elpa.scm,
guix/import/gnu.scm, guix/import/hackage.scm,
guix/import/texlive.scm, guix/import/utils.scm, guix/nar.scm,
guix/pki.scm, guix/scripts/archive.scm,
guix/scripts/authenticate.scm, guix/scripts/download.scm,
guix/scripts/hash.scm, guix/scripts/pack.scm,
guix/scripts/publish.scm, guix/scripts/refresh.scm,
guix/scripts/substitute.scm, guix/store.scm,
guix/store/deduplication.scm, guix/tests.scm, tests/base32.scm,
tests/builders.scm, tests/challenge.scm, tests/cpan.scm,
tests/crate.scm, tests/derivations.scm, tests/gem.scm,
tests/nar.scm, tests/opam.scm, tests/pki.scm,
tests/publish.scm, tests/pypi.scm, tests/store-deduplication.scm,
tests/store.scm, tests/substitute.scm: Adjust imports.
* gnu/system/vm.scm: Likewise.
(guile-sqlite3&co): Rename to...
(gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT.
(expression->derivation-in-linux-vm)[config]: Remove.
(iso9660-image)[config]: Remove.
(qemu-image)[config]: Remove.
(system-docker-image)[config]: Remove.
* guix/scripts/pack.scm: Adjust imports.
(guile-sqlite3&co): Rename to...
(gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT.
(self-contained-tarball)[build]: Call 'make-config.scm' without
#:libgcrypt argument.
(squashfs-image)[libgcrypt]: Remove.
[build]: Call 'make-config.scm' without #:libgcrypt.
(docker-image)[config, json]: Remove.
[build]: Add GUILE-GCRYPT to the extensions Remove (guix config) from
the imported modules.
* guix/self.scm (specification->package): Remove "libgcrypt", add
"guile-gcrypt".
(compiled-guix): Remove #:libgcrypt.
[guile-gcrypt]: New variable.
[dependencies]: Add it.
[*core-modules*]: Remove #:libgcrypt from 'make-config.scm' call.
Add #:extensions.
[*config*]: Remove #:libgcrypt from 'make-config.scm' call.
(%dependency-variables): Remove %libgcrypt.
(make-config.scm): Remove #:libgcrypt.
* build-aux/build-self.scm (guile-gcrypt): New variable.
(make-config.scm): Remove #:libgcrypt.
(build-program)[fake-gcrypt-hash]: New variable.
Add (gcrypt hash) to the imported modules. Adjust load path
assignments.
* gnu/packages/package-management.scm (guix)[propagated-inputs]: Add
GUILE-GCRYPT.
[arguments]: In 'wrap-program' phase, add GUILE-GCRYPT to the search
path.
2018-08-31 15:07:07 +00:00
|
|
|
|
(native-inputs
|
|
|
|
|
`(("pkg-config" ,(specification->package "pkg-config"))
|
|
|
|
|
("autoconf" ,(specification->package "autoconf"))
|
|
|
|
|
("automake" ,(specification->package "automake"))
|
|
|
|
|
("texinfo" ,(specification->package "texinfo"))))
|
|
|
|
|
(inputs
|
|
|
|
|
`(("guile" ,(specification->package "guile"))
|
|
|
|
|
("libgcrypt" ,(specification->package "libgcrypt"))))
|
|
|
|
|
(synopsis "Cryptography library for Guile using Libgcrypt")
|
|
|
|
|
(description
|
|
|
|
|
"Guile-Gcrypt provides a Guile 2.x interface to a subset of the
|
|
|
|
|
GNU Libgcrypt crytographic library. It provides modules for cryptographic
|
|
|
|
|
hash functions, message authentication codes (MAC), public-key cryptography,
|
|
|
|
|
strong randomness, and more. It is implemented using the foreign function
|
|
|
|
|
interface (FFI) of Guile.")
|
|
|
|
|
(license #f))) ;license:gpl3+
|
|
|
|
|
((package . _)
|
|
|
|
|
package)))
|
|
|
|
|
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
(define* (build-program source version
|
2018-05-30 09:10:27 +00:00
|
|
|
|
#:optional (guile-version (effective-version))
|
2021-01-27 13:46:10 +00:00
|
|
|
|
#:key (pull-version 0) (channel-metadata #f))
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
"Return a program that computes the derivation to build Guix from SOURCE."
|
|
|
|
|
(define select?
|
|
|
|
|
;; Select every module but (guix config) and non-Guix modules.
|
2021-01-10 21:13:04 +00:00
|
|
|
|
;; Also exclude (guix channels): it is autoloaded by (guix describe), but
|
|
|
|
|
;; only for peripheral functionality.
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
(match-lambda
|
|
|
|
|
(('guix 'config) #f)
|
2021-01-10 21:13:04 +00:00
|
|
|
|
(('guix 'channels) #f)
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
(('guix _ ...) #t)
|
|
|
|
|
(('gnu _ ...) #t)
|
|
|
|
|
(_ #f)))
|
|
|
|
|
|
Switch to Guile-Gcrypt.
This removes (guix hash) and (guix pk-crypto), which now live as part of
Guile-Gcrypt (version 0.1.0.)
* guix/gcrypt.scm, guix/hash.scm, guix/pk-crypto.scm,
tests/hash.scm, tests/pk-crypto.scm: Remove.
* configure.ac: Test for Guile-Gcrypt. Remove LIBGCRYPT and
LIBGCRYPT_LIBDIR assignments.
* m4/guix.m4 (GUIX_ASSERT_LIBGCRYPT_USABLE): Remove.
* README: Add Guile-Gcrypt to the dependencies; move libgcrypt as
"required unless --disable-daemon".
* doc/guix.texi (Requirements): Likewise.
* gnu/packages/bash.scm, guix/derivations.scm, guix/docker.scm,
guix/git.scm, guix/http-client.scm, guix/import/cpan.scm,
guix/import/cran.scm, guix/import/crate.scm, guix/import/elpa.scm,
guix/import/gnu.scm, guix/import/hackage.scm,
guix/import/texlive.scm, guix/import/utils.scm, guix/nar.scm,
guix/pki.scm, guix/scripts/archive.scm,
guix/scripts/authenticate.scm, guix/scripts/download.scm,
guix/scripts/hash.scm, guix/scripts/pack.scm,
guix/scripts/publish.scm, guix/scripts/refresh.scm,
guix/scripts/substitute.scm, guix/store.scm,
guix/store/deduplication.scm, guix/tests.scm, tests/base32.scm,
tests/builders.scm, tests/challenge.scm, tests/cpan.scm,
tests/crate.scm, tests/derivations.scm, tests/gem.scm,
tests/nar.scm, tests/opam.scm, tests/pki.scm,
tests/publish.scm, tests/pypi.scm, tests/store-deduplication.scm,
tests/store.scm, tests/substitute.scm: Adjust imports.
* gnu/system/vm.scm: Likewise.
(guile-sqlite3&co): Rename to...
(gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT.
(expression->derivation-in-linux-vm)[config]: Remove.
(iso9660-image)[config]: Remove.
(qemu-image)[config]: Remove.
(system-docker-image)[config]: Remove.
* guix/scripts/pack.scm: Adjust imports.
(guile-sqlite3&co): Rename to...
(gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT.
(self-contained-tarball)[build]: Call 'make-config.scm' without
#:libgcrypt argument.
(squashfs-image)[libgcrypt]: Remove.
[build]: Call 'make-config.scm' without #:libgcrypt.
(docker-image)[config, json]: Remove.
[build]: Add GUILE-GCRYPT to the extensions Remove (guix config) from
the imported modules.
* guix/self.scm (specification->package): Remove "libgcrypt", add
"guile-gcrypt".
(compiled-guix): Remove #:libgcrypt.
[guile-gcrypt]: New variable.
[dependencies]: Add it.
[*core-modules*]: Remove #:libgcrypt from 'make-config.scm' call.
Add #:extensions.
[*config*]: Remove #:libgcrypt from 'make-config.scm' call.
(%dependency-variables): Remove %libgcrypt.
(make-config.scm): Remove #:libgcrypt.
* build-aux/build-self.scm (guile-gcrypt): New variable.
(make-config.scm): Remove #:libgcrypt.
(build-program)[fake-gcrypt-hash]: New variable.
Add (gcrypt hash) to the imported modules. Adjust load path
assignments.
* gnu/packages/package-management.scm (guix)[propagated-inputs]: Add
GUILE-GCRYPT.
[arguments]: In 'wrap-program' phase, add GUILE-GCRYPT to the search
path.
2018-08-31 15:07:07 +00:00
|
|
|
|
(define fake-gcrypt-hash
|
|
|
|
|
;; Fake (gcrypt hash) module; see below.
|
|
|
|
|
(scheme-file "hash.scm"
|
|
|
|
|
#~(define-module (gcrypt hash)
|
|
|
|
|
#:export (sha1 sha256))))
|
|
|
|
|
|
2018-09-13 08:10:49 +00:00
|
|
|
|
(define fake-git
|
|
|
|
|
(scheme-file "git.scm" #~(define-module (git))))
|
|
|
|
|
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
(with-imported-modules `(((guix config)
|
Switch to Guile-Gcrypt.
This removes (guix hash) and (guix pk-crypto), which now live as part of
Guile-Gcrypt (version 0.1.0.)
* guix/gcrypt.scm, guix/hash.scm, guix/pk-crypto.scm,
tests/hash.scm, tests/pk-crypto.scm: Remove.
* configure.ac: Test for Guile-Gcrypt. Remove LIBGCRYPT and
LIBGCRYPT_LIBDIR assignments.
* m4/guix.m4 (GUIX_ASSERT_LIBGCRYPT_USABLE): Remove.
* README: Add Guile-Gcrypt to the dependencies; move libgcrypt as
"required unless --disable-daemon".
* doc/guix.texi (Requirements): Likewise.
* gnu/packages/bash.scm, guix/derivations.scm, guix/docker.scm,
guix/git.scm, guix/http-client.scm, guix/import/cpan.scm,
guix/import/cran.scm, guix/import/crate.scm, guix/import/elpa.scm,
guix/import/gnu.scm, guix/import/hackage.scm,
guix/import/texlive.scm, guix/import/utils.scm, guix/nar.scm,
guix/pki.scm, guix/scripts/archive.scm,
guix/scripts/authenticate.scm, guix/scripts/download.scm,
guix/scripts/hash.scm, guix/scripts/pack.scm,
guix/scripts/publish.scm, guix/scripts/refresh.scm,
guix/scripts/substitute.scm, guix/store.scm,
guix/store/deduplication.scm, guix/tests.scm, tests/base32.scm,
tests/builders.scm, tests/challenge.scm, tests/cpan.scm,
tests/crate.scm, tests/derivations.scm, tests/gem.scm,
tests/nar.scm, tests/opam.scm, tests/pki.scm,
tests/publish.scm, tests/pypi.scm, tests/store-deduplication.scm,
tests/store.scm, tests/substitute.scm: Adjust imports.
* gnu/system/vm.scm: Likewise.
(guile-sqlite3&co): Rename to...
(gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT.
(expression->derivation-in-linux-vm)[config]: Remove.
(iso9660-image)[config]: Remove.
(qemu-image)[config]: Remove.
(system-docker-image)[config]: Remove.
* guix/scripts/pack.scm: Adjust imports.
(guile-sqlite3&co): Rename to...
(gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT.
(self-contained-tarball)[build]: Call 'make-config.scm' without
#:libgcrypt argument.
(squashfs-image)[libgcrypt]: Remove.
[build]: Call 'make-config.scm' without #:libgcrypt.
(docker-image)[config, json]: Remove.
[build]: Add GUILE-GCRYPT to the extensions Remove (guix config) from
the imported modules.
* guix/self.scm (specification->package): Remove "libgcrypt", add
"guile-gcrypt".
(compiled-guix): Remove #:libgcrypt.
[guile-gcrypt]: New variable.
[dependencies]: Add it.
[*core-modules*]: Remove #:libgcrypt from 'make-config.scm' call.
Add #:extensions.
[*config*]: Remove #:libgcrypt from 'make-config.scm' call.
(%dependency-variables): Remove %libgcrypt.
(make-config.scm): Remove #:libgcrypt.
* build-aux/build-self.scm (guile-gcrypt): New variable.
(make-config.scm): Remove #:libgcrypt.
(build-program)[fake-gcrypt-hash]: New variable.
Add (gcrypt hash) to the imported modules. Adjust load path
assignments.
* gnu/packages/package-management.scm (guix)[propagated-inputs]: Add
GUILE-GCRYPT.
[arguments]: In 'wrap-program' phase, add GUILE-GCRYPT to the search
path.
2018-08-31 15:07:07 +00:00
|
|
|
|
=> ,(make-config.scm))
|
|
|
|
|
|
|
|
|
|
;; To avoid relying on 'with-extensions', which was
|
|
|
|
|
;; introduced in 0.15.0, provide a fake (gcrypt
|
|
|
|
|
;; hash) just so that we can build modules, and
|
|
|
|
|
;; adjust %LOAD-PATH later on.
|
|
|
|
|
((gcrypt hash) => ,fake-gcrypt-hash)
|
|
|
|
|
|
2018-09-13 08:10:49 +00:00
|
|
|
|
;; (guix git-download) depends on (git) but only
|
|
|
|
|
;; for peripheral functionality. Provide a dummy
|
|
|
|
|
;; (git) to placate it.
|
|
|
|
|
((git) => ,fake-git)
|
|
|
|
|
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
,@(source-module-closure `((guix store)
|
|
|
|
|
(guix self)
|
|
|
|
|
(guix derivations)
|
|
|
|
|
(gnu packages bootstrap))
|
|
|
|
|
(list source)
|
|
|
|
|
#:select? select?))
|
|
|
|
|
(gexp->script "compute-guix-derivation"
|
|
|
|
|
#~(begin
|
2021-03-30 14:35:05 +00:00
|
|
|
|
(use-modules (ice-9 match))
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
|
|
|
|
|
(eval-when (expand load eval)
|
|
|
|
|
;; (gnu packages …) modules are going to be looked up
|
|
|
|
|
;; under SOURCE. (guix config) is looked up in FRONT.
|
2018-06-21 09:14:17 +00:00
|
|
|
|
(match (command-line)
|
|
|
|
|
((_ source _ ...)
|
|
|
|
|
(match %load-path
|
|
|
|
|
((front _ ...)
|
|
|
|
|
(unless (string=? front source) ;already done?
|
Switch to Guile-Gcrypt.
This removes (guix hash) and (guix pk-crypto), which now live as part of
Guile-Gcrypt (version 0.1.0.)
* guix/gcrypt.scm, guix/hash.scm, guix/pk-crypto.scm,
tests/hash.scm, tests/pk-crypto.scm: Remove.
* configure.ac: Test for Guile-Gcrypt. Remove LIBGCRYPT and
LIBGCRYPT_LIBDIR assignments.
* m4/guix.m4 (GUIX_ASSERT_LIBGCRYPT_USABLE): Remove.
* README: Add Guile-Gcrypt to the dependencies; move libgcrypt as
"required unless --disable-daemon".
* doc/guix.texi (Requirements): Likewise.
* gnu/packages/bash.scm, guix/derivations.scm, guix/docker.scm,
guix/git.scm, guix/http-client.scm, guix/import/cpan.scm,
guix/import/cran.scm, guix/import/crate.scm, guix/import/elpa.scm,
guix/import/gnu.scm, guix/import/hackage.scm,
guix/import/texlive.scm, guix/import/utils.scm, guix/nar.scm,
guix/pki.scm, guix/scripts/archive.scm,
guix/scripts/authenticate.scm, guix/scripts/download.scm,
guix/scripts/hash.scm, guix/scripts/pack.scm,
guix/scripts/publish.scm, guix/scripts/refresh.scm,
guix/scripts/substitute.scm, guix/store.scm,
guix/store/deduplication.scm, guix/tests.scm, tests/base32.scm,
tests/builders.scm, tests/challenge.scm, tests/cpan.scm,
tests/crate.scm, tests/derivations.scm, tests/gem.scm,
tests/nar.scm, tests/opam.scm, tests/pki.scm,
tests/publish.scm, tests/pypi.scm, tests/store-deduplication.scm,
tests/store.scm, tests/substitute.scm: Adjust imports.
* gnu/system/vm.scm: Likewise.
(guile-sqlite3&co): Rename to...
(gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT.
(expression->derivation-in-linux-vm)[config]: Remove.
(iso9660-image)[config]: Remove.
(qemu-image)[config]: Remove.
(system-docker-image)[config]: Remove.
* guix/scripts/pack.scm: Adjust imports.
(guile-sqlite3&co): Rename to...
(gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT.
(self-contained-tarball)[build]: Call 'make-config.scm' without
#:libgcrypt argument.
(squashfs-image)[libgcrypt]: Remove.
[build]: Call 'make-config.scm' without #:libgcrypt.
(docker-image)[config, json]: Remove.
[build]: Add GUILE-GCRYPT to the extensions Remove (guix config) from
the imported modules.
* guix/self.scm (specification->package): Remove "libgcrypt", add
"guile-gcrypt".
(compiled-guix): Remove #:libgcrypt.
[guile-gcrypt]: New variable.
[dependencies]: Add it.
[*core-modules*]: Remove #:libgcrypt from 'make-config.scm' call.
Add #:extensions.
[*config*]: Remove #:libgcrypt from 'make-config.scm' call.
(%dependency-variables): Remove %libgcrypt.
(make-config.scm): Remove #:libgcrypt.
* build-aux/build-self.scm (guile-gcrypt): New variable.
(make-config.scm): Remove #:libgcrypt.
(build-program)[fake-gcrypt-hash]: New variable.
Add (gcrypt hash) to the imported modules. Adjust load path
assignments.
* gnu/packages/package-management.scm (guix)[propagated-inputs]: Add
GUILE-GCRYPT.
[arguments]: In 'wrap-program' phase, add GUILE-GCRYPT to the search
path.
2018-08-31 15:07:07 +00:00
|
|
|
|
(set! %load-path
|
|
|
|
|
(list source
|
|
|
|
|
(string-append #$guile-gcrypt
|
|
|
|
|
"/share/guile/site/"
|
|
|
|
|
(effective-version))
|
|
|
|
|
front)))))))
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
|
Switch to Guile-Gcrypt.
This removes (guix hash) and (guix pk-crypto), which now live as part of
Guile-Gcrypt (version 0.1.0.)
* guix/gcrypt.scm, guix/hash.scm, guix/pk-crypto.scm,
tests/hash.scm, tests/pk-crypto.scm: Remove.
* configure.ac: Test for Guile-Gcrypt. Remove LIBGCRYPT and
LIBGCRYPT_LIBDIR assignments.
* m4/guix.m4 (GUIX_ASSERT_LIBGCRYPT_USABLE): Remove.
* README: Add Guile-Gcrypt to the dependencies; move libgcrypt as
"required unless --disable-daemon".
* doc/guix.texi (Requirements): Likewise.
* gnu/packages/bash.scm, guix/derivations.scm, guix/docker.scm,
guix/git.scm, guix/http-client.scm, guix/import/cpan.scm,
guix/import/cran.scm, guix/import/crate.scm, guix/import/elpa.scm,
guix/import/gnu.scm, guix/import/hackage.scm,
guix/import/texlive.scm, guix/import/utils.scm, guix/nar.scm,
guix/pki.scm, guix/scripts/archive.scm,
guix/scripts/authenticate.scm, guix/scripts/download.scm,
guix/scripts/hash.scm, guix/scripts/pack.scm,
guix/scripts/publish.scm, guix/scripts/refresh.scm,
guix/scripts/substitute.scm, guix/store.scm,
guix/store/deduplication.scm, guix/tests.scm, tests/base32.scm,
tests/builders.scm, tests/challenge.scm, tests/cpan.scm,
tests/crate.scm, tests/derivations.scm, tests/gem.scm,
tests/nar.scm, tests/opam.scm, tests/pki.scm,
tests/publish.scm, tests/pypi.scm, tests/store-deduplication.scm,
tests/store.scm, tests/substitute.scm: Adjust imports.
* gnu/system/vm.scm: Likewise.
(guile-sqlite3&co): Rename to...
(gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT.
(expression->derivation-in-linux-vm)[config]: Remove.
(iso9660-image)[config]: Remove.
(qemu-image)[config]: Remove.
(system-docker-image)[config]: Remove.
* guix/scripts/pack.scm: Adjust imports.
(guile-sqlite3&co): Rename to...
(gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT.
(self-contained-tarball)[build]: Call 'make-config.scm' without
#:libgcrypt argument.
(squashfs-image)[libgcrypt]: Remove.
[build]: Call 'make-config.scm' without #:libgcrypt.
(docker-image)[config, json]: Remove.
[build]: Add GUILE-GCRYPT to the extensions Remove (guix config) from
the imported modules.
* guix/self.scm (specification->package): Remove "libgcrypt", add
"guile-gcrypt".
(compiled-guix): Remove #:libgcrypt.
[guile-gcrypt]: New variable.
[dependencies]: Add it.
[*core-modules*]: Remove #:libgcrypt from 'make-config.scm' call.
Add #:extensions.
[*config*]: Remove #:libgcrypt from 'make-config.scm' call.
(%dependency-variables): Remove %libgcrypt.
(make-config.scm): Remove #:libgcrypt.
* build-aux/build-self.scm (guile-gcrypt): New variable.
(make-config.scm): Remove #:libgcrypt.
(build-program)[fake-gcrypt-hash]: New variable.
Add (gcrypt hash) to the imported modules. Adjust load path
assignments.
* gnu/packages/package-management.scm (guix)[propagated-inputs]: Add
GUILE-GCRYPT.
[arguments]: In 'wrap-program' phase, add GUILE-GCRYPT to the search
path.
2018-08-31 15:07:07 +00:00
|
|
|
|
;; Only load Guile-Gcrypt, our own modules, or those
|
|
|
|
|
;; of Guile.
|
2019-01-21 09:05:00 +00:00
|
|
|
|
(set! %load-compiled-path
|
|
|
|
|
(cons (string-append #$guile-gcrypt "/lib/guile/"
|
|
|
|
|
(effective-version)
|
|
|
|
|
"/site-ccache")
|
2019-03-26 10:36:33 +00:00
|
|
|
|
%load-compiled-path))
|
|
|
|
|
|
|
|
|
|
;; Disable position recording to save time and space
|
|
|
|
|
;; when loading the package modules.
|
|
|
|
|
(read-disable 'positions))
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
|
|
|
|
|
(use-modules (guix store)
|
|
|
|
|
(guix self)
|
|
|
|
|
(guix derivations)
|
|
|
|
|
(srfi srfi-1))
|
|
|
|
|
|
|
|
|
|
(match (command-line)
|
2021-03-30 14:07:26 +00:00
|
|
|
|
((_ source system version protocol-version
|
|
|
|
|
build-output)
|
2018-06-25 16:41:01 +00:00
|
|
|
|
;; The current input port normally wraps a file
|
|
|
|
|
;; descriptor connected to the daemon, or it is
|
|
|
|
|
;; connected to /dev/null. In the former case, reuse
|
|
|
|
|
;; the connection such that we inherit build options
|
|
|
|
|
;; such as substitute URLs and so on; in the latter
|
|
|
|
|
;; case, attempt to open a new connection.
|
|
|
|
|
(let* ((proto (string->number protocol-version))
|
|
|
|
|
(store (if (integer? proto)
|
|
|
|
|
(port->connection (duplicate-port
|
|
|
|
|
(current-input-port)
|
|
|
|
|
"w+0")
|
|
|
|
|
#:version proto)
|
2021-03-30 14:07:26 +00:00
|
|
|
|
(open-connection)))
|
|
|
|
|
(sock (socket AF_UNIX SOCK_STREAM 0)))
|
|
|
|
|
;; Connect to BUILD-OUTPUT and send it the raw
|
|
|
|
|
;; build output.
|
|
|
|
|
(connect sock AF_UNIX build-output)
|
|
|
|
|
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
(display
|
2018-05-30 09:10:27 +00:00
|
|
|
|
(and=>
|
2021-03-19 20:33:37 +00:00
|
|
|
|
;; Silence autoload warnings and the likes.
|
|
|
|
|
(parameterize ((current-warning-port
|
2021-03-30 14:07:26 +00:00
|
|
|
|
(%make-void-port "w"))
|
|
|
|
|
(current-build-output-port sock))
|
2021-03-19 20:33:37 +00:00
|
|
|
|
(run-with-store store
|
|
|
|
|
(guix-derivation source version
|
|
|
|
|
#$guile-version
|
|
|
|
|
#:channel-metadata
|
|
|
|
|
'#$channel-metadata
|
|
|
|
|
#:pull-version
|
|
|
|
|
#$pull-version)
|
|
|
|
|
#:system system))
|
2018-05-30 09:10:27 +00:00
|
|
|
|
derivation-file-name))))))
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
#:module-path (list source))))
|
2017-05-09 15:04:02 +00:00
|
|
|
|
|
2021-03-30 14:07:26 +00:00
|
|
|
|
(define (proxy input output)
|
2021-03-30 14:35:05 +00:00
|
|
|
|
"Dump the contents of INPUT to OUTPUT until EOF is reached on INPUT.
|
|
|
|
|
Display a spinner when nothing happens."
|
|
|
|
|
(define spin
|
|
|
|
|
(circular-list "-" "\\" "|" "/" "-" "\\" "|" "/"))
|
|
|
|
|
|
2021-03-30 14:07:26 +00:00
|
|
|
|
(setvbuf input 'block 16384)
|
2021-03-30 14:35:05 +00:00
|
|
|
|
(let loop ((spin spin))
|
|
|
|
|
(match (select (list input) '() '() 1)
|
2021-03-30 14:07:26 +00:00
|
|
|
|
((() () ())
|
2021-03-30 14:35:05 +00:00
|
|
|
|
(when (isatty? (current-error-port))
|
|
|
|
|
(display (string-append "\b" (car spin))
|
|
|
|
|
(current-error-port))
|
|
|
|
|
(force-output (current-error-port)))
|
|
|
|
|
(loop (cdr spin)))
|
2021-03-30 14:07:26 +00:00
|
|
|
|
(((_) () ())
|
|
|
|
|
;; Read from INPUT as much as can be read without blocking.
|
|
|
|
|
(let ((bv (get-bytevector-some input)))
|
|
|
|
|
(unless (eof-object? bv)
|
|
|
|
|
(put-bytevector output bv)
|
2021-03-30 14:35:05 +00:00
|
|
|
|
(loop spin)))))))
|
2021-03-30 14:07:26 +00:00
|
|
|
|
|
2019-01-21 09:05:00 +00:00
|
|
|
|
(define (call-with-clean-environment thunk)
|
|
|
|
|
(let ((env (environ)))
|
|
|
|
|
(dynamic-wind
|
|
|
|
|
(lambda ()
|
|
|
|
|
(environ '()))
|
|
|
|
|
thunk
|
|
|
|
|
(lambda ()
|
|
|
|
|
(environ env)))))
|
|
|
|
|
|
|
|
|
|
(define-syntax-rule (with-clean-environment exp ...)
|
|
|
|
|
"Evaluate EXP in a context where zero environment variables are defined."
|
|
|
|
|
(call-with-clean-environment (lambda () exp ...)))
|
|
|
|
|
|
2014-11-09 21:32:21 +00:00
|
|
|
|
;; The procedure below is our return value.
|
2016-07-20 20:40:20 +00:00
|
|
|
|
(define* (build source
|
2021-01-27 13:46:10 +00:00
|
|
|
|
#:key verbose?
|
|
|
|
|
(version (date-version-string)) channel-metadata
|
|
|
|
|
system
|
2018-05-30 09:10:27 +00:00
|
|
|
|
(pull-version 0)
|
2018-07-27 09:32:59 +00:00
|
|
|
|
|
2020-02-22 23:20:30 +00:00
|
|
|
|
;; For the standalone Guix, default to Guile 3.0. For old
|
2018-07-27 09:32:59 +00:00
|
|
|
|
;; versions of 'guix pull' (pre-0.15.0), we have to use the
|
|
|
|
|
;; same Guile as the current one.
|
|
|
|
|
(guile-version (if (> pull-version 0)
|
2020-02-22 23:20:30 +00:00
|
|
|
|
"3.0"
|
2018-07-27 09:32:59 +00:00
|
|
|
|
(effective-version)))
|
|
|
|
|
|
2014-11-09 21:32:21 +00:00
|
|
|
|
#:allow-other-keys
|
|
|
|
|
#:rest rest)
|
|
|
|
|
"Return a derivation that unpacks SOURCE into STORE and compiles Scheme
|
|
|
|
|
files."
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
;; Build the build program and then use it as a trampoline to build from
|
|
|
|
|
;; SOURCE.
|
2018-05-30 09:10:27 +00:00
|
|
|
|
(mlet %store-monad ((build (build-program source version guile-version
|
2021-01-27 13:46:10 +00:00
|
|
|
|
#:channel-metadata channel-metadata
|
2018-05-30 09:10:27 +00:00
|
|
|
|
#:pull-version pull-version))
|
2018-06-25 16:41:01 +00:00
|
|
|
|
(system (if system (return system) (current-system)))
|
2019-05-12 20:56:57 +00:00
|
|
|
|
(home -> (getenv "HOME"))
|
2019-04-23 14:39:00 +00:00
|
|
|
|
|
|
|
|
|
;; Note: Use the deprecated names here because the
|
|
|
|
|
;; caller might be Guix <= 0.16.0.
|
2019-04-22 22:47:41 +00:00
|
|
|
|
(port ((store-lift nix-server-socket)))
|
|
|
|
|
(major ((store-lift nix-server-major-version)))
|
|
|
|
|
(minor ((store-lift nix-server-minor-version))))
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
(mbegin %store-monad
|
2020-04-06 09:06:53 +00:00
|
|
|
|
;; Before 'with-build-handler' was implemented and used, we had to
|
|
|
|
|
;; explicitly call 'show-what-to-build*'.
|
|
|
|
|
(munless (module-defined? (resolve-module '(guix store))
|
|
|
|
|
'with-build-handler)
|
|
|
|
|
(show-what-to-build* (list build)))
|
build-self: Use (guix self).
This mitigates <https://bugs.gnu.org/27284>.
* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
2018-03-23 16:18:15 +00:00
|
|
|
|
(built-derivations (list build))
|
2018-06-25 16:41:01 +00:00
|
|
|
|
|
|
|
|
|
;; Use the port beneath the current store as the stdin of BUILD. This
|
|
|
|
|
;; way, we know 'open-pipe*' will not close it on 'exec'. If PORT is
|
|
|
|
|
;; not a file port (e.g., it's an SSH channel), then the subprocess's
|
|
|
|
|
;; stdin will actually be /dev/null.
|
2021-03-30 14:07:26 +00:00
|
|
|
|
(let* ((sock (socket AF_UNIX SOCK_STREAM 0))
|
|
|
|
|
(node (let ((file (string-append (or (getenv "TMPDIR") "/tmp")
|
|
|
|
|
"/guix-build-output-"
|
|
|
|
|
(number->string (getpid)))))
|
|
|
|
|
(bind sock AF_UNIX file)
|
|
|
|
|
(listen sock 1)
|
|
|
|
|
file))
|
|
|
|
|
(pipe (with-input-from-port port
|
2018-06-25 16:41:01 +00:00
|
|
|
|
(lambda ()
|
2019-01-21 09:05:00 +00:00
|
|
|
|
;; Make sure BUILD is not influenced by
|
|
|
|
|
;; $GUILE_LOAD_PATH & co.
|
|
|
|
|
(with-clean-environment
|
|
|
|
|
(setenv "GUILE_WARN_DEPRECATED" "no") ;be quiet and drive
|
2020-02-20 10:12:33 +00:00
|
|
|
|
(setenv "COLUMNS" "120") ;show wider backtraces
|
2019-05-12 20:56:57 +00:00
|
|
|
|
(when home
|
|
|
|
|
;; Inherit HOME so that 'xdg-directory' works.
|
|
|
|
|
(setenv "HOME" home))
|
2019-01-21 09:05:00 +00:00
|
|
|
|
(open-pipe* OPEN_READ
|
|
|
|
|
(derivation->output-path build)
|
|
|
|
|
source system version
|
|
|
|
|
(if (file-port? port)
|
|
|
|
|
(number->string
|
|
|
|
|
(logior major minor))
|
2021-03-30 14:07:26 +00:00
|
|
|
|
"none")
|
|
|
|
|
node))))))
|
2021-03-30 14:35:05 +00:00
|
|
|
|
(format (current-error-port) "Computing Guix derivation for '~a'... "
|
|
|
|
|
system)
|
|
|
|
|
|
2021-03-30 14:07:26 +00:00
|
|
|
|
;; Wait for a connection on SOCK and proxy build output so it can be
|
|
|
|
|
;; processed according to the settings currently in effect (build
|
|
|
|
|
;; traces, verbosity level, and so on).
|
|
|
|
|
(match (accept sock)
|
|
|
|
|
((port . _)
|
|
|
|
|
(close-port sock)
|
|
|
|
|
(delete-file node)
|
|
|
|
|
(proxy port (current-build-output-port))))
|
|
|
|
|
|
|
|
|
|
;; Now that the build output connection was closed, read the result, a
|
|
|
|
|
;; derivation file name, from PIPE.
|
|
|
|
|
(let ((str (get-string-all pipe))
|
|
|
|
|
(status (close-pipe pipe)))
|
|
|
|
|
(match str
|
|
|
|
|
((? eof-object?)
|
|
|
|
|
(error "build program failed" (list build status)))
|
|
|
|
|
((? derivation-path? drv)
|
|
|
|
|
(mbegin %store-monad
|
|
|
|
|
(return (newline (current-error-port)))
|
|
|
|
|
((store-lift add-temp-root) drv)
|
|
|
|
|
(return (read-derivation-from-file drv))))
|
|
|
|
|
("#f"
|
|
|
|
|
;; Unsupported PULL-VERSION.
|
|
|
|
|
(return #f))
|
|
|
|
|
((? string? str)
|
|
|
|
|
(raise (condition
|
|
|
|
|
(&message
|
|
|
|
|
(message (format #f "You found a bug: the program '~a'
|
2018-09-13 08:23:39 +00:00
|
|
|
|
failed to compute the derivation for Guix (version: ~s; system: ~s;
|
|
|
|
|
host version: ~s; pull-version: ~s).
|
|
|
|
|
Please report it by email to <~a>.~%"
|
2021-03-30 14:07:26 +00:00
|
|
|
|
(derivation->output-path build)
|
|
|
|
|
version system %guix-version pull-version
|
|
|
|
|
%guix-bug-report-address))))))))))))
|
2014-11-09 21:32:21 +00:00
|
|
|
|
|
|
|
|
|
;; This file is loaded by 'guix pull'; return it the build procedure.
|
|
|
|
|
build
|
|
|
|
|
|
2017-11-21 22:51:59 +00:00
|
|
|
|
;; Local Variables:
|
|
|
|
|
;; eval: (put 'with-load-path 'scheme-indent-function 1)
|
|
|
|
|
;; End:
|
|
|
|
|
|
2014-11-09 21:32:21 +00:00
|
|
|
|
;;; build-self.scm ends here
|