[Shepherd PATCH] build: Add guix.scm helper file.

  • Done
  • quality assurance status badge
Details
2 participants
  • Efraim Flashner
  • Ludovic Courtès
Owner
unassigned
Submitted by
Efraim Flashner
Severity
normal
E
E
Efraim Flashner wrote on 19 Nov 2020 13:52
(address . guix-patches@gnu.org)(name . Efraim Flashner)(address . efraim@flashner.co.il)
20201119125244.3674-1-efraim@flashner.co.il
* build-aux/guix.scm: New file.
---
build-aux/guix.scm | 52 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
create mode 100644 build-aux/guix.scm

Toggle diff (60 lines)
diff --git a/build-aux/guix.scm b/build-aux/guix.scm
new file mode 100644
index 0000000..ea9c63f
--- /dev/null
+++ b/build-aux/guix.scm
@@ -0,0 +1,52 @@
+;;; guix.scm -- Guix package definition
+
+(use-modules
+ (guix packages)
+ ((guix git-download) #:select (git-version))
+ ((guix build utils) #:select (find-files))
+ ((guix gexp) #:select (local-file))
+ ((gnu packages) #:select (specification->package))
+ ((ice-9 popen) #:select (open-pipe))
+ ((ice-9 rdelim) #:select (read-string))
+ ((srfi srfi-1) #:select (any)))
+
+(define %source-dir (dirname (dirname (current-filename))))
+
+(define %git-commit
+ (read-string (open-pipe "git show HEAD | head -1 | cut -d ' ' -f 2" OPEN_READ)))
+
+(define (keep-file? file stat)
+ (not (any (lambda (my-string)
+ (string-contains file my-string))
+ (list ".git" ".dir-locals.el" "build-aux"))))
+
+(define (build-from-git base)
+ (package
+ (inherit base)
+ (version (git-version (package-version base) "HEAD" %git-commit))
+ (source (local-file %source-dir
+ #:recursive? #t
+ #:select? keep-file?))
+ (native-inputs
+ `(("autoconf" ,(specification->package "autoconf"))
+ ("automake" ,(specification->package "automake"))
+ ("gettext" ,(specification->package "gettext"))
+ ("help2man" ,(specification->package "help2man"))
+ ("texinfo" ,(specification->package "texinfo"))
+ ,@(package-native-inputs base)))
+ (arguments
+ `(#:configure-flags '("--localstatedir=/var")
+ #:make-flags (list "GUILE_AUTO_COMPILE=0")
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'make-po-directory-writable
+ (lambda _
+ (for-each make-file-writable
+ (find-files "po" "."))
+ #t)))))))
+
+(list (build-from-git (specification->package "shepherd"))
+ (build-from-git (specification->package "guile2.2-shepherd"))
+ ;; This version FTBFS due to an import of '(ice-9 threads)' in modules/shepherd.scm
+ ;(build-from-git (specification->package "guile2.0-shepherd"))
+ )
--
2.29.2
L
L
Ludovic Courtès wrote on 11 Jan 2021 13:36
(name . Efraim Flashner)(address . efraim@flashner.co.il)(address . 44736@debbugs.gnu.org)
87o8hvfy5l.fsf@gnu.org
Hello!

Efraim Flashner <efraim@flashner.co.il> skribis:

Toggle quote (2 lines)
> * build-aux/guix.scm: New file.

Could you (1) add a copyright header, and (2) add this file to
‘EXTRA_DIST’ in ‘Makefile.am’?

Toggle quote (5 lines)
> +(define (keep-file? file stat)
> + (not (any (lambda (my-string)
> + (string-contains file my-string))
> + (list ".git" ".dir-locals.el" "build-aux"))))

FWIW, I’m never quite sure what to do here. In Guile-zstd, I wrote
something that works even from a tarball (not a Git checkout), but it’s
a bit verbose:


Toggle quote (8 lines)
> +(define (build-from-git base)
> + (package
> + (inherit base)
> + (version (git-version (package-version base) "HEAD" %git-commit))
> + (source (local-file %source-dir
> + #:recursive? #t
> + #:select? keep-file?))

[…]

Toggle quote (6 lines)
> +(list (build-from-git (specification->package "shepherd"))
> + (build-from-git (specification->package "guile2.2-shepherd"))
> + ;; This version FTBFS due to an import of '(ice-9 threads)' in modules/shepherd.scm
> + ;(build-from-git (specification->package "guile2.0-shepherd"))
> + )

Should it be a manifest instead, so that ‘guix build -f’ works?

The downside of returning several packages is that ‘guix environment -l
guix.scm’ won’t work.

Thanks,
Ludo’.
E
E
Efraim Flashner wrote on 21 Jan 2021 11:13
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 44736@debbugs.gnu.org)
YAlTuZzanZnpmXtR@3900XT
On Mon, Jan 11, 2021 at 01:36:38PM +0100, Ludovic Courtès wrote:
Toggle quote (9 lines)
> Hello!
>
> Efraim Flashner <efraim@flashner.co.il> skribis:
>
> > * build-aux/guix.scm: New file.
>
> Could you (1) add a copyright header, and (2) add this file to
> ‘EXTRA_DIST’ in ‘Makefile.am’?

Sure

Toggle quote (11 lines)
> > +(define (keep-file? file stat)
> > + (not (any (lambda (my-string)
> > + (string-contains file my-string))
> > + (list ".git" ".dir-locals.el" "build-aux"))))
>
> FWIW, I’m never quite sure what to do here. In Guile-zstd, I wrote
> something that works even from a tarball (not a Git checkout), but it’s
> a bit verbose:
>
> https://notabug.org/guile-zstd/guile-zstd/src/master/guix.scm

Looking at that list I feel like I'm missing bits. If we go down the
rabiit hole of figuring out all the different files which could possibly
be included in the list I feel like we should keep it as a fancy macro
somewhere. It'd almost be easier to copy the entire directory somewhere,
run 'git clean -dfx' and then use that. Or to parse .gitignore or make
clean.

Toggle quote (18 lines)
> > +(define (build-from-git base)
> > + (package
> > + (inherit base)
> > + (version (git-version (package-version base) "HEAD" %git-commit))
> > + (source (local-file %source-dir
> > + #:recursive? #t
> > + #:select? keep-file?))
>
> […]
>
> > +(list (build-from-git (specification->package "shepherd"))
> > + (build-from-git (specification->package "guile2.2-shepherd"))
> > + ;; This version FTBFS due to an import of '(ice-9 threads)' in modules/shepherd.scm
> > + ;(build-from-git (specification->package "guile2.0-shepherd"))
> > + )
>
> Should it be a manifest instead, so that ‘guix build -f’ works?

Returning a list also seems to work

(ins)efraim@3900XT ~/workspace/shepherd$ guix build -f build-aux/guix.scm -n
substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0%
substitute: updating substitutes from 'https://bayfront.guix.gnu.org'... 100.0%
The following derivations would be built:
/gnu/store/g2ql360i3s02mg42l4ys27lsghpx5xqq-shepherd-0.8.1-HEAD.b482009.drv
/gnu/store/ajlqc21qqmi3fp5j30jq7vc0i1qn701y-guile2.2-shepherd-0.8.1-HEAD.b482009.drv
/gnu/store/nbq7yw0zzmrwvykcld3fsbgmh39fapym-guile2.0-shepherd-0.8.1.drv


Toggle quote (3 lines)
> The downside of returning several packages is that ‘guix environment -l
> guix.scm’ won’t work.

Technically it works, but it's not as useful as just getting the inputs
you actually want.

(ins)efraim@3900XT ~/workspace/shepherd$ guix environment -l build-aux/guix.scm
(ins)efraim@3900XT ~/workspace/shepherd [env]$ which -a guile
/gnu/store/xlsi9fmi4blrpwn4xy8cvfq86zhag878-profile/bin/guile
/home/efraim/.guix-profile/bin/guile
/run/current-system/profile/bin/guile
(ins)efraim@3900XT ~/workspace/shepherd [env]$ /gnu/store/xlsi9fmi4blrpwn4xy8cvfq86zhag878-profile/bin/guile --version
guile (GNU Guile) 3.0.2
Copyright (C) 2020 Free Software Foundation, Inc.

License LGPLv3+: GNU LGPL 3 or later http://gnu.org/licenses/lgpl.html.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
(ins)efraim@3900XT ~/workspace/shepherd$ ls /gnu/store/xlsi9fmi4blrpwn4xy8cvfq86zhag878-profile/lib/guile/
2.0 2.2 3.0/

Toggle quote (3 lines)
> Thanks,
> Ludo’.

I also got guile2.0-shepherd to build.

--
Efraim Flashner <efraim@flashner.co.il> ????? ?????
GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
From 3fe742290f24fa5e514a06c73247537aed3e58a4 Mon Sep 17 00:00:00 2001
From: Efraim Flashner <efraim@flashner.co.il>
Date: Thu, 19 Nov 2020 14:51:28 +0200
Subject: [PATCH] build: Add guix.scm helper file.

* build-aux/guix.scm: New file.
* Makefile.am (EXTRA_DIST): Register it.
---
Makefile.am | 2 +-
build-aux/guix.scm | 79 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 80 insertions(+), 1 deletion(-)
create mode 100644 build-aux/guix.scm

Toggle diff (100 lines)
diff --git a/Makefile.am b/Makefile.am
index 774ebba..1c4acda 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -71,7 +71,7 @@ CLEANFILES = \
# Crash handler.
-EXTRA_DIST = etc/crash-handler.c
+EXTRA_DIST = etc/crash-handler.c build-aux/guix.scm
if BUILD_CRASH_HANDLER
diff --git a/build-aux/guix.scm b/build-aux/guix.scm
new file mode 100644
index 0000000..d895db4
--- /dev/null
+++ b/build-aux/guix.scm
@@ -0,0 +1,79 @@
+;;; guix.scm -- Guix package definition
+;; Copyright (C) 2020 Efraim Flashner <efraim@flashner.co.il>
+;;
+;; This file is part of the GNU Shepherd.
+;;
+;; The GNU Shepherd 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.
+;;
+;; The GNU Shepherd 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 the GNU Shepherd. If not, see <http://www.gnu.org/licenses/>.
+
+(use-modules
+ (guix packages)
+ ((guix git-download) #:select (git-version))
+ ((guix build utils) #:select (find-files))
+ ((guix gexp) #:select (local-file))
+ ((guix utils) #:select (substitute-keyword-arguments))
+ ((gnu packages) #:select (specification->package))
+ ((ice-9 popen) #:select (open-pipe))
+ ((ice-9 rdelim) #:select (read-string))
+ ((srfi srfi-1) #:select (any)))
+
+(define %source-dir (dirname (dirname (current-filename))))
+
+(define %git-commit
+ (read-string (open-pipe "git show HEAD | head -1 | cut -d ' ' -f 2" OPEN_READ)))
+
+(define (keep-file? file stat)
+ (not (any (lambda (my-string)
+ (string-contains file my-string))
+ (list ".git" ".dir-locals.el" "build-aux"))))
+
+(define (build-from-git base)
+ (package
+ (inherit base)
+ (version (git-version (package-version base) "HEAD" %git-commit))
+ (source (local-file %source-dir
+ #:recursive? #t
+ #:select? keep-file?))
+ (native-inputs
+ `(("autoconf" ,(specification->package "autoconf"))
+ ("automake" ,(specification->package "automake"))
+ ("gettext" ,(specification->package "gettext"))
+ ("help2man" ,(specification->package "help2man"))
+ ("texinfo" ,(specification->package "texinfo"))
+ ,@(package-native-inputs base)))
+ (arguments
+ `(#:configure-flags '("--localstatedir=/var")
+ #:make-flags (list "GUILE_AUTO_COMPILE=0")
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'make-po-directory-writable
+ (lambda _
+ (for-each make-file-writable
+ (find-files "po"))
+ #t)))))))
+
+(list (build-from-git (specification->package "shepherd"))
+ (build-from-git (specification->package "guile2.2-shepherd"))
+ (let ((base (build-from-git (specification->package "guile2.0-shepherd"))))
+ (package
+ (inherit base)
+ (arguments
+ (substitute-keyword-arguments (package-arguments base)
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (add-after 'unpack 'patch-source
+ (lambda _
+ ;; (ice-9 threads) isn't available in guile-2.0
+ (substitute* "modules/shepherd.scm"
+ ((".*\\(ice-9 threads\\).*") ""))
+ #t)))))))))
--
2.30.0
-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEEoov0DD5VE3JmLRT3Qarn3Mo9g1EFAmAJU7kACgkQQarn3Mo9
g1EPCA/9EUpv+ZDRNEJLwP8KwaOiAIW9eqSsIdO2eajsJBelD8nJ5uDOZ+oNVtnW
insjMQsrmvwBHGNH0JVgbKYtY+jwyLb5ZzGCTEaLZLDEzG2A+v2zMkMQVYpesvbM
GhOo8DggWY8rbem3vLUKha4XIPWQ4tbqhckQLib0RbKaCD/nEwukYWkesz9xrNoB
EDdblfFZWGCbYggs/n0R5gD9I1XbrecuaSO1IV/H1/L67TVGSQJGmOxPxmLOEFcI
ZwNKSCzBXTOqhvNvJRaJ2QGiDTk4ZqThIFHB5tsZqzVg96yMbEuUoJoIic3zd9pY
DVAhSsbhAL6ZvJBs1sx1T+Q4qKJKTkzOm/BgVR0dnwNxLUqIEP6GumQpZQJ9Wj5V
RqnpCMaXFuAcFH82QeWKjskf0kDHHtRYfYMiuiPXiJ1HxJo58tnRIgQTrHNenseq
oPqszGbbwCgtCpnlU//+6VO5odLZvxmUqVPW8VsFTFFJEJa+eF8+eLmn+bsbNE9p
LU+eOesvMoZmlQ7zIlbZQdT3zf1pON1OnwJRL6IbCVFN3hMCAZaNal/nrHx2tE2C
pjp3xmEXPon4i6G7QIv6aWJjAq9ja6QtxBUl9A50WUsrrDXiC8MHa+Iz1t2zBCzu
vKmmCWhuZUVuo3MKyeUA8u4qRLK+/hr/wRWfuxkQieeVcRVwhhU=
=1BJR
-----END PGP SIGNATURE-----


L
L
Ludovic Courtès wrote on 2 Jun 2023 15:54
Re: bug#44736: [Shepherd PATCH] build: Add guix.scm helper file.
(name . Efraim Flashner)(address . efraim@flashner.co.il)(address . 44736-done@debbugs.gnu.org)
87leh255s5.fsf@gnu.org
Hi,

Efraim Flashner <efraim@flashner.co.il> skribis:

Toggle quote (2 lines)
> * build-aux/guix.scm: New file.

I did something similar quite recently in the Shepherd. Closing!

Ludo’.
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 44736@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 44736
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch