Message ID | 4eca94501c2c1e9986e1f718eeccb3eb9276dcd4.1694441831.git.ludo@gnu.org |
---|---|
State | New |
Headers | show |
Series | Add built-in builder for Git checkouts | expand |
Hello, Ludovic Courtès <ludo@gnu.org> writes: > * configure.ac: Check for ‘git’ and substitute ‘GIT’. > * guix/config.scm.in (%git): New variable. > * guix/self.scm (compiled-guix): Define ‘git’ and pass it to > ‘make-config.scm’. > (make-config.scm): Add #:git; emit a ‘%git’ variable. > * doc/guix.texi (Requirements): Add it. I'm a bit confused; we *both* capture git from the build environment, and reference git from the git-minimal Guix package -- why can't we strictly rely on the captured Git from the environment? Nitpick: this commit should be ordered before the daemon changes that requires it. > --- > configure.ac | 7 +++++++ > doc/guix.texi | 1 + > guix/config.scm.in | 6 +++++- > guix/self.scm | 10 +++++++++- > 4 files changed, 22 insertions(+), 2 deletions(-) > > diff --git a/configure.ac b/configure.ac > index 92dede8014..d817f620cf 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -201,6 +201,13 @@ AC_SUBST([GZIP]) > AC_SUBST([BZIP2]) > AC_SUBST([XZ]) > > +dnl Git is now required for the "builtin:git-download" derivation builder. > +AC_PATH_PROG([GIT], [git]) > +if test "x$GIT" = "x"; then > + AC_MSG_ERROR([Git is missing; please install it.]) > +fi > +AC_SUBST([GIT]) Since git is now a hard requirement, the conditional checks to disable tests relying on git in the test suite, as added in previous commits of this series are no longer needed and should be removed.
Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis: > Ludovic Courtès <ludo@gnu.org> writes: > >> * configure.ac: Check for ‘git’ and substitute ‘GIT’. >> * guix/config.scm.in (%git): New variable. >> * guix/self.scm (compiled-guix): Define ‘git’ and pass it to >> ‘make-config.scm’. >> (make-config.scm): Add #:git; emit a ‘%git’ variable. >> * doc/guix.texi (Requirements): Add it. > > I'm a bit confused; we *both* capture git from the build environment, > and reference git from the git-minimal Guix package -- why can't we > strictly rely on the captured Git from the environment? That’s because we have two build systems: Autotools and (guix self). It’s the same change semantically, but for each of these build systems. > Nitpick: this commit should be ordered before the daemon changes that > requires it. I believe that’s the case. Ludo’.
Hello, Ludovic Courtès <ludo@gnu.org> writes: > Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis: > >> Ludovic Courtès <ludo@gnu.org> writes: >> >>> * configure.ac: Check for ‘git’ and substitute ‘GIT’. >>> * guix/config.scm.in (%git): New variable. >>> * guix/self.scm (compiled-guix): Define ‘git’ and pass it to >>> ‘make-config.scm’. >>> (make-config.scm): Add #:git; emit a ‘%git’ variable. >>> * doc/guix.texi (Requirements): Add it. >> >> I'm a bit confused; we *both* capture git from the build environment, >> and reference git from the git-minimal Guix package -- why can't we >> strictly rely on the captured Git from the environment? > > That’s because we have two build systems: Autotools and (guix self). > It’s the same change semantically, but for each of these build systems. Oof, thanks for explaining. >> Nitpick: this commit should be ordered before the daemon changes that >> requires it. > > I believe that’s the case. Indeed, I should sort by subject in Gnus when reviewing to get the correct ordering! The series LGTM with the comments from Simon and myself in other replies taken into account.
diff --git a/configure.ac b/configure.ac index 92dede8014..d817f620cf 100644 --- a/configure.ac +++ b/configure.ac @@ -201,6 +201,13 @@ AC_SUBST([GZIP]) AC_SUBST([BZIP2]) AC_SUBST([XZ]) +dnl Git is now required for the "builtin:git-download" derivation builder. +AC_PATH_PROG([GIT], [git]) +if test "x$GIT" = "x"; then + AC_MSG_ERROR([Git is missing; please install it.]) +fi +AC_SUBST([GIT]) + LIBGCRYPT_LIBDIR="no" LIBGCRYPT_PREFIX="no" diff --git a/doc/guix.texi b/doc/guix.texi index 339dcb2a41..a2520ce89d 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -1011,6 +1011,7 @@ Requirements @item @uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, version 0.5.0 or later; +@item @uref{https://git-scm.com, Git} (yes, both!); @item @uref{https://savannah.nongnu.org/projects/guile-json/, Guile-JSON} 4.3.0 or later; @item @url{https://www.gnu.org/software/make/, GNU Make}. diff --git a/guix/config.scm.in b/guix/config.scm.in index d582d91d74..62e15dd713 100644 --- a/guix/config.scm.in +++ b/guix/config.scm.in @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012-2016, 2018-2019, 2021, 2023 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2017 Caleb Ristvedt <caleb.ristvedt@cune.org> ;;; ;;; This file is part of GNU Guix. @@ -35,6 +35,7 @@ (define-module (guix config) %config-directory %system + %git %gzip %bzip2 %xz)) @@ -109,6 +110,9 @@ (define %config-directory (define %system "@guix_system@") +(define %git + "@GIT@") + (define %gzip "@GZIP@") diff --git a/guix/self.scm b/guix/self.scm index 81a36e007f..41c5f40786 100644 --- a/guix/self.scm +++ b/guix/self.scm @@ -68,6 +68,7 @@ (define %packages ("gzip" . ,(ref 'compression 'gzip)) ("bzip2" . ,(ref 'compression 'bzip2)) ("xz" . ,(ref 'compression 'xz)) + ("git-minimal" . ,(ref 'version-control 'git-minimal)) ("po4a" . ,(ref 'gettext 'po4a)) ("gettext-minimal" . ,(ref 'gettext 'gettext-minimal)) ("gcc-toolchain" . ,(ref 'commencement 'gcc-toolchain)) @@ -825,6 +826,9 @@ (define* (compiled-guix source #:key (define guile-lzma (specification->package "guile-lzma")) + (define git + (specification->package "git-minimal")) + (define dependencies (append-map transitive-package-dependencies (list guile-gcrypt guile-gnutls guile-git guile-avahi @@ -998,6 +1002,7 @@ (define* (compiled-guix source #:key => ,(make-config.scm #:gzip gzip #:bzip2 bzip2 #:xz xz + #:git git #:package-name %guix-package-name #:package-version @@ -1103,7 +1108,7 @@ (define %default-config-variables (%storedir . "/gnu/store") (%sysconfdir . "/etc"))) -(define* (make-config.scm #:key gzip xz bzip2 +(define* (make-config.scm #:key gzip xz bzip2 git (package-name "GNU Guix") (package-version "0") (channel-metadata #f) @@ -1133,6 +1138,7 @@ (define* (make-config.scm #:key gzip xz bzip2 %state-directory %store-database-directory %config-directory + %git %gzip %bzip2 %xz)) @@ -1175,6 +1181,8 @@ (define* (make-config.scm #:key gzip xz bzip2 ;; information is used by (guix describe). '#$channel-metadata) + (define %git + #+(and git (file-append git "/bin/git"))) (define %gzip #+(and gzip (file-append gzip "/bin/gzip"))) (define %bzip2