Subject: [bug#49868] [PATCH 0/2] guix: dune-build-system: Add a profile parameter.

From: pukkamustard <[email-masked]>
Date: Wed, 08 Sep 2021 08:24:19 +0000

Julien Lepiller <[email-masked]> writes:

>> 
>> 2.9.0:
>> --8<---------------cut here---------------start------------->8---
>> --root . --ignore-promoted-rules --no-config --profile release
>>   --always-show-command-line --promote-install-files --default-target
>>   @install
>> --8<---------------cut here---------------end--------------->8---
>> 
>> 1.11.3:
>> --8<---------------cut here---------------start------------->8---
>> --root . --ignore-promoted-rules --no-config ----profile release
>> --8<---------------cut here---------------end--------------->8---
>
> I suppose these additional flags are not available in dune 1.11?
>

No, unfortunately the flags are not available in 1.11. We need to check
version and use appropriate flags.

>> 
>> Can we check the version of dune in dune-build-system and either use
>> --release or the set of 1.11.3 flags?
>> 
>> I just tried doing this in (guix build dune-build-system). Didn't work
>> as I couldn't use (guix package). After reading up, I guess this needs
>> to be done in (guix build-system dune) and lowered down as an
>> argument - maybe as 'dune-release-flags'? Would that be ok?
>
> Yeah, that sounds good.

Attached a patch that does that. ocaml4.07 packages are building again.

Unsure about the double quote things and if there is a better way to
check versions.

> Another solution would be to get rid of
> ocaml4.07, but that's our future bootstrap path (as this is the only
> bootstrapped version currently), so we will need it anyway...

Yup, good to keep it.

>From bb6bf9e12b81165405da6d5872c18f63e425742d Mon Sep 17 00:00:00 2001
From: pukkamustard <[email-masked]>
Date: Tue, 7 Sep 2021 13:41:12 +0200
Subject: [PATCH] guix: dune-build-system: Put dune into a reproducible release
 mode.

* guix/build/dune-build-system.scm (build,check): Remove the profile parameter
and use the release flag.
* guix/build-system/dune.scm: Remove the profile parameter.
* doc/guix.texi: Remove paragraph on profile parameter.
---
 doc/guix.texi                    |  5 -----
 guix/build-system/dune.scm       | 17 ++++++++++++++---
 guix/build/dune-build-system.scm | 15 +++++++++------
 3 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 36a0c7f5ec..a056edc192 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -7735,11 +7735,6 @@ is useful when a package contains multiple packages and you want to build
 only one of them.  This is equivalent to passing the @code{-p} argument to
 @code{dune}.
 
-The @code{#:profile} parameter can be passed to specify the
-@uref{https://dune.readthedocs.io/en/stable/dune-files.html#profile,
-dune build profile}. This is equivalent to passing the @code{--profile}
-argument to @code{dune}. Its default value is @code{"release"}.
-
 @end defvr
 
 @defvr {Scheme Variable} go-build-system
diff --git a/guix/build-system/dune.scm b/guix/build-system/dune.scm
index 1a64cf9b75..f52bbd0257 100644
--- a/guix/build-system/dune.scm
+++ b/guix/build-system/dune.scm
@@ -60,6 +60,15 @@
                 #:allow-other-keys
                 #:rest arguments)
   "Return a bag for NAME."
+
+  ;; Flags that put dune into reproducible build mode.
+  (define dune-release-flags
+    (if (equal? (package-version dune) "1.11.3")
+        ''("--root" "." "--ignore-promoted-rules" "--no-config"
+           "--profile" "release")
+        ;; For dune >= 2.5.0 this is just --release.
+        ''("--release")))
+
   (define private-keywords
     '(#:source #:target #:dune #:findlib #:ocaml #:inputs #:native-inputs))
 
@@ -79,7 +88,9 @@
            (build-inputs `(("dune" ,dune)
                            ,@(bag-build-inputs base)))
            (build dune-build)
-           (arguments (strip-keyword-arguments private-keywords arguments))))))
+           (arguments (append
+                       `(#:dune-release-flags ,dune-release-flags)
+                       (strip-keyword-arguments private-keywords arguments)))))))
 
 (define* (dune-build store name inputs
                      #:key (guile #f)
@@ -89,7 +100,7 @@
                      (out-of-source? #t)
                      (jbuild? #f)
                      (package #f)
-                     (profile "release")
+                     (dune-release-flags ''())
                      (tests? #t)
                      (test-flags ''())
                      (test-target "test")
@@ -129,7 +140,7 @@ provides a 'setup.ml' file as its build system."
                    #:out-of-source? ,out-of-source?
                    #:jbuild? ,jbuild?
                    #:package ,package
-                   #:profile ,profile
+                   #:dune-release-flags ,dune-release-flags
                    #:tests? ,tests?
                    #:test-target ,test-target
                    #:install-target ,install-target
diff --git a/guix/build/dune-build-system.scm b/guix/build/dune-build-system.scm
index 6a0c2593ac..e9ccc71057 100644
--- a/guix/build/dune-build-system.scm
+++ b/guix/build/dune-build-system.scm
@@ -32,23 +32,26 @@
 ;; Code:
 
 (define* (build #:key (build-flags '()) (jbuild? #f)
-                (use-make? #f) (package #f)
-                (profile "release") #:allow-other-keys)
+                (use-make? #f) (package #f) (dune-release-flags '())
+                #:allow-other-keys)
   "Build the given package."
   (let ((program (if jbuild? "jbuilder" "dune")))
     (apply invoke program "build" "@install"
-           (append (if package (list "-p" package) '())
-                   `("--profile" ,profile)
+           (append (if package (list "-p" package)
+                       dune-release-flags)
                    build-flags)))
   #t)
 
 (define* (check #:key (test-flags '()) (test-target "test") tests?
-                  (jbuild? #f) (package #f) #:allow-other-keys)
+                (jbuild? #f) (package #f) (dune-release-flags '())
+                #:allow-other-keys)
   "Test the given package."
   (when tests?
     (let ((program (if jbuild? "jbuilder" "dune")))
       (apply invoke program "runtest" test-target
-             (append (if package (list "-p" package) '()) test-flags))))
+             (append (if package (list "-p" package)
+                         dune-release-flags)
+                     test-flags))))
   #t)
 
 (define* (install #:key outputs (install-target "install") (jbuild? #f)
-- 
2.33.0