guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Dependency cycle issues when using a Gexp-based snippet


From: maxim . cournoyer
Subject: Dependency cycle issues when using a Gexp-based snippet
Date: Sun, 23 Aug 2020 22:10:50 -0400

Hello,

While trying to move some of the patching done to qtbase into a snippet,
with the goal of having at least the ./configure script runnable in a
guix environment without having to manually run patching phases:

--8<---------------cut here---------------start------------->8---
modified   gnu/packages/qt.scm
@@ -45,6 +45,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system python)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix deprecation)
   #:use-module (guix utils)
@@ -349,27 +350,36 @@ developers using C++ or QML, a CSS & JavaScript like 
language.")
     ;; TODO Remove ((gnu packages kde) qtbase-for-krita) when upgrading qtbase.
     (version "5.14.2")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "https://download.qt.io/official_releases/qt/";
-                                 (version-major+minor version) "/" version
-                                 "/submodules/" name "-everywhere-src-"
-                                 version ".tar.xz"))
-             (sha256
-              (base32
-               "12mjsahlma9rw3vz9a6b5h2s6ylg8b34hxc2vnlna5ll429fgfa8"))
-             ;; Use TZDIR to avoid depending on package "tzdata".
-             (patches (search-patches "qtbase-use-TZDIR.patch"
-                                      "qtbase-moc-ignore-gcc-macro.patch"))
-             (modules '((guix build utils)))
-             (snippet
-               ;; corelib uses bundled harfbuzz, md4, md5, sha3
-              '(begin
-                (with-directory-excursion "src/3rdparty"
-                  (for-each delete-file-recursively
-                            (list "double-conversion" "freetype" "harfbuzz-ng"
-                                  "libpng" "libjpeg" "pcre2" "sqlite" "xcb"
-                                  "zlib"))
-                  #t)))))
+              (method url-fetch)
+              (uri (string-append 
"https://download.qt.io/official_releases/qt/";
+                                  (version-major+minor version) "/" version
+                                  "/submodules/" name "-everywhere-src-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "12mjsahlma9rw3vz9a6b5h2s6ylg8b34hxc2vnlna5ll429fgfa8"))
+              ;; Use TZDIR to avoid depending on package "tzdata".
+              (patches (search-patches "qtbase-use-TZDIR.patch"
+                                       "qtbase-moc-ignore-gcc-macro.patch"))
+              (snippet
+               (with-imported-modules '((guix build utils))
+                 #~(begin
+                     (use-modules (guix build utils))
+                     ;; corelib uses bundled harfbuzz, md4, md5, sha3
+                     (with-directory-excursion "src/3rdparty"
+                       (for-each delete-file-recursively
+                                 (list "double-conversion" "freetype" 
"harfbuzz-ng"
+                                       "libpng" "libjpeg" "pcre2" "sqlite" 
"xcb"
+                                       "zlib")))
+
+                     (let ((coreutils #+(canonical-package coreutils)))
+                       (substitute* "configure"
+                         (("/bin/pwd")
+                          (string-append coreutils "/bin/pwd")))
+                       (substitute* "src/corelib/global/global.pri"
+                         (("/bin/ls")
+                          (string-append coreutils "/bin/ls"))))
+                     #t)))))
     (build-system gnu-build-system)
     (propagated-inputs
      `(("mesa" ,mesa)
--8<---------------cut here---------------end--------------->8---

I encountered the following issue, which seems similar to one
encountered by Ricardo in 2016 [0]:

--8<---------------cut here---------------start------------->8---
ice-9/eval.scm:293:34: error: canonical-package: unbound variable
hint: Did you forget a `use-modules' form?
--8<---------------cut here---------------end--------------->8---

The origin can be correctly built at the REPL, so the problem indeed
seems to be a dependency cycle.

Attempting a suggested fix by Ludovic in that same conversation [0],
namely, making the snippet field of the <origin> record a thunked one:

--8<---------------cut here---------------start------------->8---
modified   guix/packages.scm
@@ -250,7 +250,8 @@ as base32.  Otherwise, it must be a bytevector."
   (patches   origin-patches                       ; list of file names
              (default '()) (delayed))

-  (snippet   origin-snippet (default #f))         ; sexp or #f
+  (snippet   origin-snippet
+             (default #f) (thunked))              ; sexp or #f
   (patch-flags  origin-patch-flags                ; list of strings
                 (default '("-p1")))
--8<---------------cut here---------------end--------------->8---

It now seems a new cycle is introduced because trying to build anything
hangs using the CPU with slowly increasing memory usage:

./pre-inst-env guix build hello

How can we make Gexp-based snippets such as the one shown above work
without introducing problematic cycles?

Thanks,

Maxim

[0]  http://logs.guix.gnu.org/guix/2016-09-30.log#163047



reply via email to

[Prev in Thread] Current Thread [Next in Thread]