Re: Guile-Gnutls bindings to separate git repo?
Ludovic Courtès <[email protected]> Tue, 20 Dec 2022 15:00:24 +0100
| Newsgroups | gmane.network.gnutls.general |
|---|---|
| Message-ID | <[email protected]> |
Hi Simon, Simon Josefsson <[email protected]> skribis: > Ludovic Courtès <[email protected]> writes: [...] >> Now that Gnulib’s pulled in, building from a checkout is significantly >> more difficult; for example, the package in Guix cannot be updated as-is >> because we’d first need to download a copy of all of Gnulib (with an >> “origin”) because ./autopull.sh won’t work in the isolated, network-less >> build environment. >> >> (We could build from the source tarball, but Guix is trying to gradually >> move away from that as part of its effort on reproducible builds, >> because tarballs are in fact build products.) >> >> Since there’s little C and IMO not a strong need for a sophisticated >> release machinery, I wonder if we could avoid the dependency on Gnulib? > > Sure, let's see what we can do. Several files in the previous release > comes from gnulib too, so I don't think this is about dropping gnulib > completely, only re-arranging things to work smoother. I'd like to > understand the problem more first, as I think there are many ways to > solve it, and this is likely to become a generic problem affecting many > projects. > > I can understand that you would want to build from git instead of > tarballs. How does the download and build process work in Guix? > Without knowing anything about the environment, I imagine there is some > part of the process that downloads the git archive from gitlab, checks > out a particular git tag and verify the PGP signature or compute a hash > checksum and compares it? Can't that process be teached how to also > download the git submodule? Yes, we can change the origin to grab sub-modules as well: (origin (method git-fetch) (uri (git-reference (url home-page) (recursive? #t) ; ← here (commit (string-append "v" version)))) (sha256 (base32 "06i19a7a3w80msd15ckqwnlnq38vf2frnfk3dyk77086if89mm4a")) (file-name (git-file-name name version)) (patches (search-patches "gnutls-cross.patch"))) As a result, the build process starts by cloning the Gnulib repository, which is orders of magnitudes bigger than that of Guile-GnuTLS. But that’s not enough: now ./bootstrap expects ‘git’ to be in $PATH, so I need to add that dependency, and it wants to run ./autopull.sh, so I need to patch its shebang, etc.; here’s the modified package: That’s not good enough though, because: --8<---------------cut here---------------start------------->8--- starting phase `pre-bootstrap' patch-shebang: autopull.sh: changing `/bin/sh' to `/gnu/store/4y5m9lb8k3qkb1y9m02sw9w9a6hacd16-bash-minimal-5.1.8/bin/sh' phase `pre-bootstrap' succeeded after 0.0 seconds starting phase `bootstrap' running './bootstrap' patch-shebang: ./bootstrap: changing `/bin/sh' to `/gnu/store/4y5m9lb8k3qkb1y9m02sw9w9a6hacd16-bash-minimal-5.1.8/bin/sh' ./bootstrap: Bootstrapping from checked-out guile-gnutls sources... ./autopull.sh: getting gnulib files... fatal: not a git repository (or any of the parent directories): .git ./bootstrap: autopull.sh failed. error: in phase 'bootstrap': uncaught exception: %exception #<&invoke-error program: "./bootstrap" arguments: () exit-status: 1 term-signal: #f stop-signal: #f> phase `bootstrap' failed after 1.0 seconds --8<---------------cut here---------------end--------------->8--- Taking a step back, we’re using Gnulib for these modules: git-version-gen havelib gitlog-to-changelog readme-release update-copyright Does Gnulib “pay for its weight”? In this case, I don’t think so. In Guix, I manually copied ‘git-version-gen’ and ‘gitlog-to-changelog’ in the tree, back in the day. The ‘bootstrap’ script does little more than “autoreconf -vfi” (nowadays it does weird things related to i18n, but that’s another story). Yes, this duplicates two files and a few lines in ‘Makefile.am’ and ‘configure.ac’, but the end result is far more tractable IMO¹. Mind you, this is not criticism of Gnulib in general; as you know I was an early adopter and promoter, and it’s served us well in Guile for its C portability helpers. I think we have to check the cost/benefit ratio, which has both technical and social aspects to it, and in this particular case, I view Gnulib an unnecessary burden. WDYT? Ludo’. ¹ The bootstrap + Gnulib machinery in Guile-GnuTLS is almost 900 lines: --8<---------------cut here---------------start------------->8--- $ wc -l bootstrap* cfg.mk 214 bootstrap 44 bootstrap.conf 594 bootstrap-funclib.sh 39 cfg.mk 891 total --8<---------------cut here---------------end--------------->8--- _______________________________________________ Gnutls-help mailing list [email protected] http://lists.gnupg.org/mailman/listinfo/gnutls-help
(unnamed)
(text/x-patch, 1.8 KB)
modified gnu/packages/tls.scm
@@ -381,16 +381,17 @@ (define-public guile-gnutls
;; This package supersedes the Guile bindings that came with GnuTLS until
;; version 3.7.8 included.
(name "guile-gnutls")
- (version "3.7.9")
+ (version "3.7.11")
(home-page "https://gitlab.com/gnutls/guile/")
(source (origin
(method git-fetch)
(uri (git-reference
(url home-page)
+ (recursive? #t)
(commit (string-append "v" version))))
(sha256
(base32
- "00sfpqjmd263ka51fq4xf7nvaaxyfqsr3r8fj94jgx45q6q6n6wq"))
+ "06i19a7a3w80msd15ckqwnlnq38vf2frnfk3dyk77086if89mm4a"))
(file-name (git-file-name name version))
(patches (search-patches "gnutls-cross.patch"))))
(build-system gnu-build-system)
@@ -404,7 +405,11 @@ (define-public guile-gnutls
(string-append "--with-guile-site-ccache-dir="
"$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache")
(string-append "--with-guile-extension-dir="
- "$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/extensions"))))
+ "$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/extensions"))
+ #:phases (modify-phases %standard-phases
+ (add-before 'bootstrap 'pre-bootstrap
+ (lambda _
+ (patch-shebang "autopull.sh"))))))
(native-inputs
(list autoconf
automake
@@ -412,6 +417,7 @@ (define-public guile-gnutls
pkg-config
texinfo
gnutls ;XXX: 'guile-snarf' invokes the native 'cpp'
+ (@ (gnu packages version-control) git-minimal)
guile-3.0))
(inputs
(list gnutls-latest