unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#65860] [PATCH 1/4] gnu: avr: Delay all cross compilation packages.
       [not found] <cover.1694406359.git.maxim.cournoyer@gmail.com>
@ 2023-09-11  4:25 ` Maxim Cournoyer
  2023-09-13 20:27   ` [bug#65860] [PATCH 0/4] Resolve a circular module dependencies in embedded modules Ludovic Courtès
  2023-09-11  4:25 ` [bug#65860] [PATCH 2/4] gnu: embedded: Turn packages using top-level variables into procedures Maxim Cournoyer
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 11+ messages in thread
From: Maxim Cournoyer @ 2023-09-11  4:25 UTC (permalink / raw)
  To: 65860; +Cc: Maxim Cournoyer

Partially addresses <https://issues.guix.gnu.org/65716>.

* gnu/packages/avr.scm: Add commentary comment.
(avr-gcc): Turn into this...
(make-avr-gcc): ... procedure.
(avr-libc): Likewise, into...
(make-avr-gcc): ... this.  Adjust native-inputs accordingly.
(avr-toolchain): Likewise, into...
(make-avr-toolchain): ... this.
* gnu/packages/avr-xyz.scm (simavr) [propagated-inputs]: replace avr-toolchain
with a call to the 'make-avr-toolchain' procedure.
---

 gnu/packages/avr-xyz.scm |  2 +-
 gnu/packages/avr.scm     | 66 +++++++++++++++++++++++++---------------
 2 files changed, 42 insertions(+), 26 deletions(-)

diff --git a/gnu/packages/avr-xyz.scm b/gnu/packages/avr-xyz.scm
index a05157ede7..e8844b8d43 100644
--- a/gnu/packages/avr-xyz.scm
+++ b/gnu/packages/avr-xyz.scm
@@ -71,7 +71,7 @@ (define-public simavr
                            (string-append "PREFIX=" #$output)
                            (string-append "DESTDIR=" #$output))))
     (propagated-inputs
-     (list avr-toolchain))
+     (list (make-avr-toolchain)))
     (native-inputs
      (list autoconf
            which
diff --git a/gnu/packages/avr.scm b/gnu/packages/avr.scm
index 9c623a9626..abca60eeac 100644
--- a/gnu/packages/avr.scm
+++ b/gnu/packages/avr.scm
@@ -38,15 +38,27 @@ (define-module (gnu packages avr)
   #:use-module (gnu packages flashing-tools)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages llvm)
-  #:use-module (gnu packages vim))
+  #:use-module (gnu packages vim)
+  #:export (make-avr-toolchain))
 
-(define-public avr-binutils
+;;; Commentary:
+;;;
+;;; This module defines a procedure that can be used to create a complete
+;;; avr-toolchain package.  The procedure must not be used at the top level,
+;;; to avoid cyclic module dependencies caused by the (gnu packages
+;;; cross-base) module referring to top level bindings from (gnu packages
+;;; gcc).
+;;;
+;;; It also contains packages for working with or targeting the AVR system.
+;;;
+
+(define (make-avr-binutils)
   (package
     (inherit (cross-binutils "avr"))
     (name "avr-binutils")))
 
-(define avr-gcc
-  (let ((xgcc (cross-gcc "avr" #:xbinutils avr-binutils)))
+(define (make-avr-gcc)
+  (let ((xgcc (cross-gcc "avr" #:xbinutils (make-avr-binutils))))
     (package
       (inherit xgcc)
       (name "avr-gcc")
@@ -99,7 +111,7 @@ (define avr-gcc
        `(("gcc" ,gcc)
          ,@(package-native-inputs xgcc))))))
 
-(define avr-libc
+(define (make-avr-libc)
   (package
     (name "avr-libc")
     (version "2.0.0")
@@ -114,8 +126,8 @@ (define avr-libc
     (arguments
      '(#:out-of-source? #t
        #:configure-flags '("--host=avr")))
-    (native-inputs `(("avr-binutils" ,avr-binutils)
-                     ("avr-gcc" ,avr-gcc)))
+    (native-inputs `(("avr-binutils" ,(make-avr-binutils))
+                     ("avr-gcc" ,(make-avr-gcc))))
     (home-page "https://www.nongnu.org/avr-libc/")
     (synopsis "The AVR C Library")
     (description
@@ -124,27 +136,31 @@ (define avr-libc
     (license
      (license:non-copyleft "http://www.nongnu.org/avr-libc/LICENSE.txt"))))
 
-(define-public avr-toolchain
-  ;; avr-libc checks the compiler version and passes "--enable-device-lib" for avr-gcc > 5.1.0.
-  ;; It wouldn't install the library for atmega32u4 etc if we didn't use the corret avr-gcc.
-  (package
-    (name "avr-toolchain")
-    (version (package-version avr-gcc))
-    (source #f)
-    (build-system trivial-build-system)
-    (arguments '(#:builder (begin (mkdir %output) #t)))
-    (propagated-inputs
-     `(("avrdude" ,avrdude)
-       ("binutils" ,avr-binutils)
-       ("gcc" ,avr-gcc)
-       ("libc" ,avr-libc)))
-    (synopsis "Complete GCC tool chain for AVR microcontroller development")
-    (description "This package provides a complete GCC tool chain for AVR
+(define (make-avr-toolchain)
+  (let ((avr-binutils (make-avr-binutils))
+        (avr-libc (make-avr-libc))
+        (avr-gcc (make-avr-gcc)))
+    ;; avr-libc checks the compiler version and passes "--enable-device-lib"
+    ;; for avr-gcc > 5.1.0.  It wouldn't install the library for atmega32u4
+    ;; etc if we didn't use the corret avr-gcc.
+    (package
+      (name "avr-toolchain")
+      (version (package-version avr-gcc))
+      (source #f)
+      (build-system trivial-build-system)
+      (arguments '(#:builder (begin (mkdir %output) #t)))
+      (propagated-inputs
+       `(("avrdude" ,avrdude)
+         ("binutils" ,avr-binutils)
+         ("gcc" ,avr-gcc)
+         ("libc" ,avr-libc)))
+      (synopsis "Complete GCC tool chain for AVR microcontroller development")
+      (description "This package provides a complete GCC tool chain for AVR
 microcontroller development.  This includes the GCC AVR cross compiler and
 avrdude for firmware flashing.  The supported programming languages are C and
 C++.")
-    (home-page (package-home-page avr-libc))
-    (license (package-license avr-gcc))))
+      (home-page (package-home-page avr-libc))
+      (license (package-license avr-gcc)))))
 
 (define-public microscheme
   (package
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [bug#65860] [PATCH 2/4] gnu: embedded: Turn packages using top-level variables into procedures.
       [not found] <cover.1694406359.git.maxim.cournoyer@gmail.com>
  2023-09-11  4:25 ` [bug#65860] [PATCH 1/4] gnu: avr: Delay all cross compilation packages Maxim Cournoyer
@ 2023-09-11  4:25 ` Maxim Cournoyer
  2023-09-11  4:25 ` [bug#65860] [PATCH 3/4] gnu: Remove extraneous imports Maxim Cournoyer
  2023-09-11  4:26 ` [bug#65860] [PATCH 4/4] doc: Add new 'Circular Module Dependencies' section Maxim Cournoyer
  3 siblings, 0 replies; 11+ messages in thread
From: Maxim Cournoyer @ 2023-09-11  4:25 UTC (permalink / raw)
  To: 65860; +Cc: Maxim Cournoyer

Fixes <https://issues.guix.gnu.org/65716>.

Before this change, simply adding the following import:

  modified   gnu/packages/firmware.scm
  @@ -42,6 +42,7 @@ (define-module (gnu packages firmware)
     #:use-module (gnu packages admin)
     #:use-module (gnu packages autotools)
     #:use-module (gnu packages assembly)
  +  #:use-module (gnu packages avr)
     #:use-module (gnu packages backup)
     #:use-module (gnu packages base)
     #:use-module (gnu packages bash)

Would cause byte compilation and/or evaluation to fail due to a circular
module dependency.

* gnu/packages/embedded.scm: Add commentary.
(gcc-arm-none-eabi-4.9, gcc-arm-none-eabi-6, newlib-arm-none-eabi)
(newlib-nano-arm-none-eabi, gcc-arm-none-eabi-7-2018-q2-update)
(newlib-arm-none-eabi-7-2018-q2-update)
(newlib-nano-arm-none-eabi-7-2018-q2-update)
(arm-none-eabi-toolchain-4.9, arm-none-eabi-nano-toolchain-4.9)
(arm-none-eabi-toolchain-6, arm-none-eabi-nano-toolchain-6)
(arm-none-eabi-toolchain-7-2018-q2-update, gdb-arm-none-eabi)
(propeller-binutils, propeller-gcc-6, propeller-gcc-4)
(propeller-gcc, propeller-toolchain, propeller-development-suite)
(gcc-vc4): Turn into procedures, prefixing the procedure name with 'make-',
and adjust all users.
(make-libstdc++-arm-none-eabi) [arguments]: Avoid an unused warning.
(arm-none-eabi-toolchain):  Rename to...
(make-arm-none-eabi-toolchain): ... this.
* gnu/packages/raspberry-pi.scm (raspi-arm-chainloader) [native-inputs]:
Replace gcc-arm-none-eabi-6 with (make-arm-none-eabi-toolchain).
* gnu/packages/axoloti.scm (axoloti-runtime)
[inputs]: Replace arm-none-eabi-nano-toolchain-4.9
with (make-arm-none-eabi-nano-toolchain-4.9).
(axoloti-patcher): Likewise.
(axoloti-patcher-next) [inputs]: Replace
arm-none-eabi-nano-toolchain-7-2018-q2-update
with (make-arm-none-eabi-nano-toolchain-7-2018-q2-update).
---

 gnu/packages/axoloti.scm      |   6 +-
 gnu/packages/embedded.scm     | 322 +++++++++++++++++++---------------
 gnu/packages/raspberry-pi.scm |   2 +-
 3 files changed, 186 insertions(+), 144 deletions(-)

diff --git a/gnu/packages/axoloti.scm b/gnu/packages/axoloti.scm
index e0dd22c627..7b36922860 100644
--- a/gnu/packages/axoloti.scm
+++ b/gnu/packages/axoloti.scm
@@ -199,7 +199,7 @@ (define-public axoloti-runtime
        ;; for compiling patches
        ("make" ,gnu-make)
        ;; for compiling firmware
-       ("cross-toolchain" ,arm-none-eabi-nano-toolchain-4.9)
+       ("cross-toolchain" ,(make-arm-none-eabi-nano-toolchain-4.9))
        ;; for uploading compiled patches and firmware
        ("dfu-util" ,dfu-util-for-axoloti)))
     (native-inputs
@@ -339,7 +339,7 @@ (define-public axoloti-patcher
            (assoc-ref ant:%standard-phases 'strip-jar-timestamps)))))
     (inputs
      `(("icedtea" ,icedtea "jdk")
-       ("cross-toolchain" ,arm-none-eabi-nano-toolchain-4.9)
+       ("cross-toolchain" ,(make-arm-none-eabi-nano-toolchain-4.9))
        ("java-simple-xml" ,java-simple-xml)
        ("java-rsyntaxtextarea" ,java-rsyntaxtextarea)
        ("java-usb4java" ,java-usb4java)
@@ -572,7 +572,7 @@ (define-public axoloti-patcher-next
            (assoc-ref ant:%standard-phases 'strip-jar-timestamps)))))
     (inputs
      `(("jdk" ,icedtea "jdk")
-       ("cross-toolchain" ,arm-none-eabi-nano-toolchain-7-2018-q2-update)
+       ("cross-toolchain" ,(make-arm-none-eabi-nano-toolchain-7-2018-q2-update))
        ;; for compiling patches
        ("make" ,gnu-make)
        ;; for uploading compiled patches and firmware
diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
index 325013a627..c84262b825 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -11,7 +11,7 @@
 ;;; Copyright © 2020, 2021, 2022 Simon South <simon@simonsouth.net>
 ;;; Copyright © 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;; Copyright © 2022 Mathieu Othacehe <othacehe@gnu.org>
-;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -73,14 +73,49 @@ (define-module (gnu packages embedded)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages xorg)
-  #:use-module (srfi srfi-1))
+  #:use-module (srfi srfi-1)
+  #:export (make-gcc-arm-none-eabi-4.9
+            make-gcc-arm-none-eabi-6
+            make-gcc-arm-none-eabi-7-2018-q2-update
+
+            make-gcc-vc4
+
+            make-newlib-arm-none-eabi
+            make-newlib-arm-none-eabi-7-2018-q2-update
+
+            make-newlib-nano-arm-none-eabi
+            make-newlib-nano-arm-none-eabi-7-2018-q2-update
+
+            make-arm-none-eabi-toolchain-4.9
+            make-arm-none-eabi-toolchain-6
+            make-arm-none-eabi-toolchain-7-2018-q2-update
+
+            make-arm-none-eabi-nano-toolchain-4.9
+            make-arm-none-eabi-nano-toolchain-6
+            make-arm-none-eabi-nano-toolchain-7-2018-q2-update
+
+            make-gdb-arm-none-eabi
+
+            make-propeller-gcc
+            make-propeller-gcc-4
+            make-propeller-gcc-6
+            make-propeller-toolchain
+            make-propeller-development-suite))
+
+;;; Commentary:
+;;;
+;;; This modules contains toolchain generators as well as packages for use in
+;;; embedded contexts.  Note: the toolchain and specialized packages are
+;;; procedures, so as to delay their references to top level bindings such as
+;;; 'gcc' or 'cross-gcc', etc.
+;;;
 
 ;; We must not use the released GCC sources here, because the cross-compiler
 ;; does not produce working binaries.  Instead we take the very same SVN
 ;; revision from the branch that is used for a release of the "GCC ARM
 ;; embedded" project on launchpad.
 ;; See https://launchpadlibrarian.net/218827644/release.txt
-(define-public gcc-arm-none-eabi-4.9
+(define (make-gcc-arm-none-eabi-4.9)
   (let ((xgcc (cross-gcc "arm-none-eabi"
                          #:xgcc gcc-4.9
                          #:xbinutils (cross-binutils "arm-none-eabi")))
@@ -167,9 +202,9 @@ (define-public gcc-arm-none-eabi-4.9
               (variable "CROSS_LIBRARY_PATH")
               (files '("arm-none-eabi/lib"))))))))
 
-(define-public gcc-arm-none-eabi-6
+(define (make-gcc-arm-none-eabi-6)
   (package
-    (inherit gcc-arm-none-eabi-4.9)
+    (inherit (make-gcc-arm-none-eabi-4.9))
     (version (package-version gcc-6))
     (source (origin (inherit (package-source gcc-6))
                     (patches
@@ -178,7 +213,7 @@ (define-public gcc-arm-none-eabi-6
                       (search-patches "gcc-6-cross-environment-variables.patch"
                                       "gcc-6-arm-none-eabi-multilib.patch")))))))
 
-(define-public newlib-arm-none-eabi
+(define (make-newlib-arm-none-eabi)
   (package
     (name "newlib")
     (version "2.4.0")
@@ -211,7 +246,7 @@ (define-public newlib-arm-none-eabi
              #t)))))
     (native-inputs
      `(("xbinutils" ,(cross-binutils "arm-none-eabi"))
-       ("xgcc" ,gcc-arm-none-eabi-4.9)
+       ("xgcc" ,(make-gcc-arm-none-eabi-4.9))
        ("texinfo" ,texinfo)))
     (home-page "https://www.sourceware.org/newlib/")
     (synopsis "C library for use on embedded systems")
@@ -221,68 +256,70 @@ (define-public newlib-arm-none-eabi
     (license (license:non-copyleft
               "https://www.sourceware.org/newlib/COPYING.NEWLIB"))))
 
-(define-public newlib-nano-arm-none-eabi
-  (package (inherit newlib-arm-none-eabi)
-    (name "newlib-nano")
-    (arguments
-     (substitute-keyword-arguments (package-arguments newlib-arm-none-eabi)
-       ;; The configure flags are identical to the flags used by the "GCC ARM
-       ;; embedded" project.  They optimize newlib for use on small embedded
-       ;; systems with limited memory.
-       ((#:configure-flags flags)
-        ''("--target=arm-none-eabi"
-           "--enable-multilib"
-           "--disable-newlib-supplied-syscalls"
-           "--enable-newlib-reent-small"
-           "--disable-newlib-fvwrite-in-streamio"
-           "--disable-newlib-fseek-optimization"
-           "--disable-newlib-wide-orient"
-           "--enable-newlib-nano-malloc"
-           "--disable-newlib-unbuf-stream-opt"
-           "--enable-lite-exit"
-           "--enable-newlib-global-atexit"
-           "--enable-newlib-nano-formatted-io"
-           "--disable-nls"))
-       ((#:phases phases)
-        `(modify-phases ,phases
-           ;; XXX: Most arm toolchains offer both *.a and *_nano.a as newlib
-           ;; and newlib-nano respectively.  The headers are usually
-           ;; arm-none-eabi/include/newlib.h for newlib and
-           ;; arm-none-eabi/include/newlib-nano/newlib.h for newlib-nano.  We
-           ;; have two different toolchain packages for each which works but
-           ;; is a little strange.
-           (add-after 'install 'hardlink-newlib
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
-                 ;; The nano.specs file says that newlib-nano files should end
-                 ;; in "_nano.a" instead of just ".a".  Note that this applies
-                 ;; to all the multilib folders too.
-                 (for-each
-                  (lambda (file)
-                    (link file
-                          (string-append
-                           ;; Strip ".a" off the end
-                           (substring file 0 (- (string-length file) 2))
-                           ;; Add "_nano.a" onto the end
-                           "_nano.a")))
-                  (find-files
-                   out
-                   "^(libc.a|libg.a|librdimon.a|libstdc\\+\\+.a|libsupc\\+\\+.a)$"))
+(define (make-newlib-nano-arm-none-eabi)
+  (let ((base (make-newlib-arm-none-eabi)))
+    (package
+      (inherit base)
+      (name "newlib-nano")
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ;; The configure flags are identical to the flags used by the "GCC ARM
+         ;; embedded" project.  They optimize newlib for use on small embedded
+         ;; systems with limited memory.
+         ((#:configure-flags _)
+          ''("--target=arm-none-eabi"
+             "--enable-multilib"
+             "--disable-newlib-supplied-syscalls"
+             "--enable-newlib-reent-small"
+             "--disable-newlib-fvwrite-in-streamio"
+             "--disable-newlib-fseek-optimization"
+             "--disable-newlib-wide-orient"
+             "--enable-newlib-nano-malloc"
+             "--disable-newlib-unbuf-stream-opt"
+             "--enable-lite-exit"
+             "--enable-newlib-global-atexit"
+             "--enable-newlib-nano-formatted-io"
+             "--disable-nls"))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             ;; XXX: Most arm toolchains offer both *.a and *_nano.a as newlib
+             ;; and newlib-nano respectively.  The headers are usually
+             ;; arm-none-eabi/include/newlib.h for newlib and
+             ;; arm-none-eabi/include/newlib-nano/newlib.h for newlib-nano.  We
+             ;; have two different toolchain packages for each which works but
+             ;; is a little strange.
+             (add-after 'install 'hardlink-newlib
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((out (assoc-ref outputs "out")))
+                   ;; The nano.specs file says that newlib-nano files should end
+                   ;; in "_nano.a" instead of just ".a".  Note that this applies
+                   ;; to all the multilib folders too.
+                   (for-each
+                    (lambda (file)
+                      (link file
+                            (string-append
+                             ;; Strip ".a" off the end
+                             (substring file 0 (- (string-length file) 2))
+                             ;; Add "_nano.a" onto the end
+                             "_nano.a")))
+                    (find-files
+                     out
+                     "^(libc.a|libg.a|librdimon.a|libstdc\\+\\+.a|libsupc\\+\\+.a)$"))
 
-                 ;; newlib.h is usually in this location instead so both
-                 ;; newlib and newlib-nano can be in the toolchain at the same
-                 ;; time
-                 (mkdir (string-append out "/arm-none-eabi/include/newlib-nano"))
-                 (symlink
-                   "../newlib.h"
-                   (string-append out "/arm-none-eabi/include/newlib-nano/newlib.h"))
-                 #t)))))))
-    (synopsis "Newlib variant for small systems with limited memory")))
+                   ;; newlib.h is usually in this location instead so both
+                   ;; newlib and newlib-nano can be in the toolchain at the same
+                   ;; time
+                   (mkdir (string-append out "/arm-none-eabi/include/newlib-nano"))
+                   (symlink
+                    "../newlib.h"
+                    (string-append out "/arm-none-eabi/include/newlib-nano/newlib.h"))
+                   #t)))))))
+      (synopsis "Newlib variant for small systems with limited memory"))))
 
 \f
 ;;; The following definitions are for the "7-2018-q2-update" variant of the
 ;;; ARM cross toolchain as offered on https://developer.arm.com
-(define-public gcc-arm-none-eabi-7-2018-q2-update
+(define (make-gcc-arm-none-eabi-7-2018-q2-update)
   (let ((xgcc (cross-gcc "arm-none-eabi"
                          #:xgcc gcc-7
                          #:xbinutils (cross-binutils "arm-none-eabi")))
@@ -370,13 +407,14 @@ (define-public gcc-arm-none-eabi-7-2018-q2-update
               (variable "CROSS_LIBRARY_PATH")
               (files '("arm-none-eabi/lib"))))))))
 
-(define-public newlib-arm-none-eabi-7-2018-q2-update
+(define (make-newlib-arm-none-eabi-7-2018-q2-update)
   ;; This is the same commit as used for the 7-2018-q2-update release
   ;; according to the release.txt.
-  (let ((commit "3ccfb407af410ba7e54ea0da11ae1e40b554a6f4")
+  (let ((base ((make-newlib-arm-none-eabi)))
+        (commit "3ccfb407af410ba7e54ea0da11ae1e40b554a6f4")
         (revision "0"))
     (package
-      (inherit newlib-arm-none-eabi)
+      (inherit base)
       (version (git-version "3.0.0" revision commit))
       (source
        (origin
@@ -389,7 +427,7 @@ (define-public newlib-arm-none-eabi-7-2018-q2-update
           (base32
            "1dq23fqrk75g1a4v7569fvnnw5q440zawbxi3w0g05n8jlqsmvcy"))))
       (arguments
-       (substitute-keyword-arguments (package-arguments newlib-arm-none-eabi)
+       (substitute-keyword-arguments (package-arguments base)
          ;; The configure flags are identical to the flags used by the "GCC ARM
          ;; embedded" project.
          ((#:configure-flags flags)
@@ -399,15 +437,17 @@ (define-public newlib-arm-none-eabi-7-2018-q2-update
                   ,flags))))
       (native-inputs
        `(("xbinutils" ,(cross-binutils "arm-none-eabi"))
-         ("xgcc" ,gcc-arm-none-eabi-7-2018-q2-update)
+         ("xgcc" ,(make-gcc-arm-none-eabi-7-2018-q2-update))
          ("texinfo" ,texinfo))))))
 
-(define-public newlib-nano-arm-none-eabi-7-2018-q2-update
-  (package (inherit newlib-arm-none-eabi-7-2018-q2-update)
-    (name "newlib-nano")
-    (arguments
-     (package-arguments newlib-nano-arm-none-eabi))
-    (synopsis "Newlib variant for small systems with limited memory")))
+(define-public (make-newlib-nano-arm-none-eabi-7-2018-q2-update)
+  (let ((base (make-newlib-arm-none-eabi-7-2018-q2-update)))
+    (package
+      (inherit base)
+      (name "newlib-nano")
+      (arguments
+       (package-arguments base))
+      (synopsis "Newlib variant for small systems with limited memory"))))
 
 \f
 (define (make-libstdc++-arm-none-eabi xgcc newlib)
@@ -416,7 +456,7 @@ (define (make-libstdc++-arm-none-eabi xgcc newlib)
       (name "libstdc++-arm-none-eabi")
       (arguments
        (substitute-keyword-arguments (package-arguments libstdc++)
-         ((#:configure-flags flags)
+         ((#:configure-flags _)
           ``("--target=arm-none-eabi"
              "--host=arm-none-eabi"
              "--disable-libstdcxx-pch"
@@ -434,7 +474,7 @@ (define (make-libstdc++-arm-none-eabi xgcc newlib)
          ("xgcc" ,xgcc)
          ,@(package-native-inputs libstdc++))))))
 
-(define (arm-none-eabi-toolchain xgcc newlib)
+(define (make-arm-none-eabi-toolchain xgcc newlib)
   "Produce a cross-compiler toolchain package with the compiler XGCC and the C
 library variant NEWLIB."
   (let ((newlib-with-xgcc (package (inherit newlib)
@@ -474,31 +514,31 @@ (define (arm-none-eabi-toolchain xgcc newlib)
       (home-page (package-home-page xgcc))
       (license (package-license xgcc)))))
 
-(define-public arm-none-eabi-toolchain-4.9
-  (arm-none-eabi-toolchain gcc-arm-none-eabi-4.9
-                           newlib-arm-none-eabi))
+(define (make-arm-none-eabi-toolchain-4.9)
+  (make-arm-none-eabi-toolchain (make-gcc-arm-none-eabi-4.9)
+                                (make-newlib-arm-none-eabi)))
 
-(define-public arm-none-eabi-nano-toolchain-4.9
-  (arm-none-eabi-toolchain gcc-arm-none-eabi-4.9
-                           newlib-nano-arm-none-eabi))
+(define (make-arm-none-eabi-nano-toolchain-4.9)
+  (make-arm-none-eabi-toolchain (make-gcc-arm-none-eabi-4.9)
+                                (make-newlib-nano-arm-none-eabi)))
 
-(define-public arm-none-eabi-toolchain-6
-  (arm-none-eabi-toolchain gcc-arm-none-eabi-6
-                           newlib-arm-none-eabi))
+(define (make-arm-none-eabi-toolchain-6)
+  (make-arm-none-eabi-toolchain (make-gcc-arm-none-eabi-6)
+                                (make-newlib-arm-none-eabi)))
 
-(define-public arm-none-eabi-nano-toolchain-6
-  (arm-none-eabi-toolchain gcc-arm-none-eabi-6
-                           newlib-nano-arm-none-eabi))
+(define (make-arm-none-eabi-nano-toolchain-6)
+  (make-arm-none-eabi-toolchain (make-gcc-arm-none-eabi-6)
+                                (make-newlib-nano-arm-none-eabi)))
 
-(define-public arm-none-eabi-toolchain-7-2018-q2-update
-  (arm-none-eabi-toolchain gcc-arm-none-eabi-7-2018-q2-update
-                           newlib-arm-none-eabi-7-2018-q2-update))
+(define (make-arm-none-eabi-toolchain-7-2018-q2-update)
+  (make-arm-none-eabi-toolchain (make-gcc-arm-none-eabi-7-2018-q2-update)
+                                (make-newlib-arm-none-eabi-7-2018-q2-update)))
 
-(define-public arm-none-eabi-nano-toolchain-7-2018-q2-update
-  (arm-none-eabi-toolchain gcc-arm-none-eabi-7-2018-q2-update
-                           newlib-nano-arm-none-eabi-7-2018-q2-update))
+(define (make-arm-none-eabi-nano-toolchain-7-2018-q2-update)
+  (make-arm-none-eabi-toolchain (make-gcc-arm-none-eabi-7-2018-q2-update)
+                                (make-newlib-nano-arm-none-eabi-7-2018-q2-update)))
 
-(define-public gdb-arm-none-eabi
+(define (make-gdb-arm-none-eabi)
   (package
     (inherit gdb)
     (name "gdb-arm-none-eabi")
@@ -647,7 +687,7 @@ (define-public openocd
 ;; personal correspondence with the developers in July 2017, more recent
 ;; versions are currently incompatible with the "Simple Libraries".
 
-(define propeller-binutils
+(define (make-propeller-binutils)
   (let ((xbinutils (cross-binutils "propeller-elf"))
         (commit "4c46ecbe79ffbecd2ce918497ace5b956736b5a3")
         (revision "2"))
@@ -683,9 +723,9 @@ (define propeller-binutils
          ("dejagnu" ,dejagnu)
          ,@(package-native-inputs xbinutils))))))
 
-(define-public propeller-gcc-6
+(define (make-propeller-gcc-6)
   (let ((xgcc (cross-gcc "propeller-elf"
-                         #:xbinutils propeller-binutils))
+                         #:xbinutils (make-propeller-binutils)))
         (commit "b4f45a4725e0b6d0af59e594c4e3e35ca4105867")
         (revision "1"))
     (package (inherit xgcc)
@@ -719,8 +759,8 @@ (define-public propeller-gcc-6
       (home-page "https://github.com/totalspectrum/gcc-propeller")
       (synopsis "GCC for the Parallax Propeller"))))
 
-(define-public propeller-gcc-4
-  (let ((xgcc propeller-gcc-6)
+(define (make-propeller-gcc-4)
+  (let ((xgcc (make-propeller-gcc-6))
         (commit "4c46ecbe79ffbecd2ce918497ace5b956736b5a3")
         (revision "2"))
     (package (inherit xgcc)
@@ -742,13 +782,13 @@ (define-public propeller-gcc-4
                   (search-patches "gcc-4.6-gnu-inline.patch"
                                   "gcc-cross-environment-variables.patch")))))
       (arguments
-       (substitute-keyword-arguments (package-arguments propeller-gcc-6)
+       (substitute-keyword-arguments (package-arguments xgcc)
          ((#:phases phases)
           #~(modify-phases #$phases
              (add-after 'unpack 'chdir
                (lambda _ (chdir "gcc")))))))
       (native-inputs
-       (modify-inputs (package-native-inputs propeller-gcc-6)
+       (modify-inputs (package-native-inputs xgcc)
          (prepend gcc-4.9)))
       (home-page "https://github.com/parallaxinc/propgcc")
       (supported-systems (delete "aarch64-linux" %supported-systems)))))
@@ -756,7 +796,7 @@ (define-public propeller-gcc-4
 ;; Version 6 is experimental and may not work correctly.  This is why we
 ;; default to version 4, which is also used in the binary toolchain bundle
 ;; provided by Parallax Inc.
-(define-public propeller-gcc propeller-gcc-4)
+(define make-propeller-gcc make-propeller-gcc-4)
 
 
 ;; FIXME: We do not build the tiny library because that would require C++
@@ -814,7 +854,7 @@ (define-public proplib
              (lambda* (#:key make-flags #:allow-other-keys)
                (apply invoke "make" "install-includes" make-flags))))))
       (native-inputs
-       (list propeller-gcc propeller-binutils perl))
+       (list (make-propeller-gcc) (make-propeller-binutils) perl))
       (home-page "https://github.com/parallaxinc/propgcc")
       (synopsis "C library for the Parallax Propeller")
       (description "This is a C library for the Parallax Propeller
@@ -823,22 +863,23 @@ (define-public proplib
       ;; included code is public domain and some changes are BSD licensed.
       (license license:expat))))
 
-(define-public propeller-toolchain
-  (package
-    (name "propeller-toolchain")
-    (version (package-version propeller-gcc))
-    (source #f)
-    (build-system trivial-build-system)
-    (arguments '(#:builder (begin (mkdir %output) #t)))
-    (propagated-inputs
-     `(("binutils" ,propeller-binutils)
-       ("libc" ,proplib)
-       ("gcc" ,propeller-gcc)))
-    (synopsis "Complete GCC tool chain for Propeller micro-controllers")
-    (description "This package provides a complete GCC tool chain for
+(define (make-propeller-toolchain)
+  (let ((propeller-gcc (make-propeller-gcc)))
+    (package
+      (name "propeller-toolchain")
+      (version (package-version propeller-gcc))
+      (source #f)
+      (build-system trivial-build-system)
+      (arguments '(#:builder (begin (mkdir %output) #t)))
+      (propagated-inputs
+       `(("binutils" ,(make-propeller-binutils))
+         ("libc" ,proplib)
+         ("gcc" ,propeller-gcc)))
+      (synopsis "Complete GCC tool chain for Propeller micro-controllers")
+      (description "This package provides a complete GCC tool chain for
 Propeller micro-controller development.")
-    (home-page (package-home-page propeller-gcc))
-    (license (package-license propeller-gcc))))
+      (home-page (package-home-page propeller-gcc))
+      (license (package-license propeller-gcc)))))
 
 (define-public openspin
   (package
@@ -906,7 +947,7 @@ (define-public propeller-load
              (lambda _ (chdir "loader") #t))
            (delete 'configure))))
       (native-inputs
-       (list openspin propeller-toolchain))
+       (list openspin (make-propeller-toolchain)))
       (home-page "https://github.com/parallaxinc/propgcc")
       (synopsis "Loader for Parallax Propeller micro-controllers")
       (description "This package provides the tool @code{propeller-load} to
@@ -951,7 +992,7 @@ (define-public spin2cpp
                          '("testlex" "spin2cpp" "fastspin")))
              #t)))))
     (native-inputs
-     (list bison propeller-load propeller-toolchain))
+     (list bison propeller-load (make-propeller-toolchain)))
     (home-page "https://github.com/totalspectrum/spin2cpp")
     (synopsis "Convert Spin code to C, C++, or PASM code")
     (description "This is a set of tools for converting the Spin language for
@@ -997,26 +1038,27 @@ (define-public spinsim
 two-thirds of the opcodes in the P2 instruction set.")
       (license license:expat))))
 
-(define-public propeller-development-suite
-  (package
-    (name "propeller-development-suite")
-    (version (package-version propeller-gcc))
-    (source #f)
-    (build-system trivial-build-system)
-    (arguments '(#:builder (begin (mkdir %output) #t)))
-    (propagated-inputs
-     `(("toolchain" ,propeller-toolchain)
-       ("openspin" ,openspin)
-       ("propeller-load" ,propeller-load)
-       ("spin2cpp" ,spin2cpp)
-       ("spinsim" ,spinsim)))
-    (synopsis "Complete development suite for Propeller micro-controllers")
-    (description "This meta-package provides a complete environment for the
+(define (make-propeller-development-suite)
+  (let ((propeller-gcc (make-propeller-gcc)))
+    (package
+      (name "propeller-development-suite")
+      (version (package-version propeller-gcc))
+      (source #f)
+      (build-system trivial-build-system)
+      (arguments '(#:builder (begin (mkdir %output) #t)))
+      (propagated-inputs
+       `(("toolchain" ,(make-propeller-toolchain))
+         ("openspin" ,openspin)
+         ("propeller-load" ,propeller-load)
+         ("spin2cpp" ,spin2cpp)
+         ("spinsim" ,spinsim)))
+      (synopsis "Complete development suite for Propeller micro-controllers")
+      (description "This meta-package provides a complete environment for the
 development with Parallax Propeller micro-controllers.  It includes the GCC
 toolchain, the loader, the Openspin compiler, the Spin2cpp tool, and the Spin
 simulator.")
-    (home-page (package-home-page propeller-gcc))
-    (license (package-license propeller-gcc))))
+      (home-page (package-home-page propeller-gcc))
+      (license (package-license propeller-gcc)))))
 
 (define-public binutils-vc4
   (let ((commit "708acc851880dbeda1dd18aca4fd0a95b2573b36"))
@@ -1070,7 +1112,7 @@ (define-public binutils-vc4
       (license license:gpl3+)
       (home-page "https://github.com/puppeh/vc4-toolchain/"))))
 
-(define-public gcc-vc4
+(define (make-gcc-vc4)
   (let ((commit "0fe4b83897341742f9df65797474cb0feab4b377")
         (xgcc (cross-gcc "vc4-elf" #:xgcc gcc-6 #:xbinutils binutils-vc4)))
     (package (inherit xgcc)
diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm
index a866a7e4f2..80bfaf0896 100644
--- a/gnu/packages/raspberry-pi.scm
+++ b/gnu/packages/raspberry-pi.scm
@@ -177,7 +177,7 @@ (define-public raspi-arm-chainloader
                #t))))))
     (native-inputs
      `(("binutils" ,(cross-binutils "arm-none-eabi"))
-       ("gcc" ,gcc-arm-none-eabi-6)))
+       ("gcc" ,(make-gcc-arm-none-eabi-6))))
     (inputs
      `())
     (synopsis "Raspberry Pi ARM bootloader")
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [bug#65860] [PATCH 3/4] gnu: Remove extraneous imports.
       [not found] <cover.1694406359.git.maxim.cournoyer@gmail.com>
  2023-09-11  4:25 ` [bug#65860] [PATCH 1/4] gnu: avr: Delay all cross compilation packages Maxim Cournoyer
  2023-09-11  4:25 ` [bug#65860] [PATCH 2/4] gnu: embedded: Turn packages using top-level variables into procedures Maxim Cournoyer
@ 2023-09-11  4:25 ` Maxim Cournoyer
  2023-09-13 20:06   ` Ludovic Courtès
  2023-09-11  4:26 ` [bug#65860] [PATCH 4/4] doc: Add new 'Circular Module Dependencies' section Maxim Cournoyer
  3 siblings, 1 reply; 11+ messages in thread
From: Maxim Cournoyer @ 2023-09-11  4:25 UTC (permalink / raw)
  To: 65860
  Cc: Maxim Cournoyer, Efraim Flashner, Ludovic Courtès,
	Maxim Cournoyer, Ricardo Wurmus, Vagrant Cascadian

Found by running 'guild compile -W3 gnu/packages/$module.scm', using guild
from the upcoming Guile.

* gnu/packages/admin.scm: Remove extraneous imports.
* gnu/packages/avr.scm: Likewise.
* gnu/packages/base.scm: Likewise.
* gnu/packages/bootloaders.scm: Likewise.
* gnu/packages/firmware.scm: Likewise.
* gnu/packages/linphone.scm: Likewise.
* gnu/packages/telephony.scm: Likewise.
* gnu/packages/cran.scm: Likewise.
* gnu/packages/kde.scm: Likewise.
* gnu/packages/libcanberra.scm: Likewise.
* gnu/packages/libreoffice.scm: Likewise.
* gnu/packages/mes.scm: Likewise.
* gnu/packages/mingw.scm: Likewise.
* gnu/packages/serialization.scm: Likewise.
* gnu/packages/sync.scm: Likewise.
* gnu/packages/syncthing.scm: Likewise.
* gnu/packages/terminals.scm: Likewise.
* gnu/packages/version-control.scm: Likewise.
* gnu/packages/video.scm: Likewise.
* gnu/packages/wm.scm: Likewise.
* gnu/packages/emulators.scm: Likewise.
---

 gnu/packages/admin.scm           |  5 -----
 gnu/packages/avr.scm             |  1 -
 gnu/packages/base.scm            |  1 -
 gnu/packages/bootloaders.scm     |  2 --
 gnu/packages/cran.scm            |  2 --
 gnu/packages/emulators.scm       |  3 ---
 gnu/packages/firmware.scm        |  4 ----
 gnu/packages/kde.scm             |  3 ---
 gnu/packages/libcanberra.scm     |  6 +-----
 gnu/packages/libreoffice.scm     |  4 ----
 gnu/packages/linphone.scm        |  4 ----
 gnu/packages/mes.scm             |  5 -----
 gnu/packages/mingw.scm           |  6 ------
 gnu/packages/serialization.scm   |  5 +----
 gnu/packages/sync.scm            |  2 --
 gnu/packages/syncthing.scm       |  2 --
 gnu/packages/telephony.scm       | 12 ------------
 gnu/packages/terminals.scm       |  1 -
 gnu/packages/version-control.scm |  2 --
 gnu/packages/video.scm           |  7 -------
 gnu/packages/wm.scm              |  3 ---
 21 files changed, 2 insertions(+), 78 deletions(-)

diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 5d586e6f36..a1229c11d0 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -101,7 +101,6 @@ (define-module (gnu packages admin)
   #:use-module (gnu packages acl)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages attr)
-  #:use-module (gnu packages autogen)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
@@ -112,7 +111,6 @@ (define-module (gnu packages admin)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages crates-graphics)
   #:use-module (gnu packages crates-io)
-  #:use-module (gnu packages cross-base)
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages cryptsetup)
   #:use-module (gnu packages curl)
@@ -140,7 +138,6 @@ (define-module (gnu packages admin)
   #:use-module (gnu packages inkscape)
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages libbsd)
-  #:use-module (gnu packages libftdi)
   #:use-module (gnu packages libunwind)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
@@ -160,11 +157,9 @@ (define-module (gnu packages admin)
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages polkit)
-  #:use-module (gnu packages popt)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-crypto)
-  #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
diff --git a/gnu/packages/avr.scm b/gnu/packages/avr.scm
index abca60eeac..2c107c6f60 100644
--- a/gnu/packages/avr.scm
+++ b/gnu/packages/avr.scm
@@ -31,7 +31,6 @@ (define-module (gnu packages avr)
   #:use-module (guix packages)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
-  #:use-module (gnu packages)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cross-base)
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 5a3d5aced5..702e243270 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -49,7 +49,6 @@ (define-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages ed)
-  #:use-module (gnu packages gawk)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages multiprecision)
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index 1c47636341..1124eca837 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -36,8 +36,6 @@
 
 (define-module (gnu packages bootloaders)
   #:use-module (gnu packages)
-  #:use-module (gnu packages admin)
-  #:use-module (gnu packages algebra)
   #:use-module (gnu packages assembly)
   #:use-module (gnu packages base)
   #:use-module (gnu packages disk)
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index b6a01a99b0..dc3efcaf43 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -62,7 +62,6 @@ (define-module (gnu packages cran)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system r)
-  #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
@@ -79,7 +78,6 @@ (define-module (gnu packages cran)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages gnome)
-  #:use-module (gnu packages graph)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages haskell-xyz)
   #:use-module (gnu packages icu4c)
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 1d50c9ef01..ce61f935fb 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -56,7 +56,6 @@ (define-module (gnu packages emulators)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
-  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages cdrom)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -72,7 +71,6 @@ (define-module (gnu packages emulators)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages fribidi)
   #:use-module (gnu packages game-development)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
@@ -102,7 +100,6 @@ (define-module (gnu packages emulators)
   #:use-module (gnu packages upnp)
   #:use-module (gnu packages video)
   #:use-module (gnu packages vulkan)
-  #:use-module (gnu packages wxwidgets)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xml)
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm
index 2e2c4af796..cbb24230de 100644
--- a/gnu/packages/firmware.scm
+++ b/gnu/packages/firmware.scm
@@ -40,7 +40,6 @@ (define-module (gnu packages firmware)
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
-  #:use-module (gnu packages autotools)
   #:use-module (gnu packages assembly)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
@@ -58,7 +57,6 @@ (define-module (gnu packages firmware)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
-  #:use-module (gnu packages gnupg)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages hardware)
   #:use-module (gnu packages libusb)
@@ -71,13 +69,11 @@ (define-module (gnu packages firmware)
   #:use-module (gnu packages polkit)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages shells)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
-  #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (ice-9 match))
 
diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm
index 9e5ac767b8..20fbb41d73 100644
--- a/gnu/packages/kde.scm
+++ b/gnu/packages/kde.scm
@@ -36,13 +36,11 @@
 (define-module (gnu packages kde)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system qt)
-  #:use-module (guix deprecation)
   #:use-module (guix download)
   #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
-  #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages apr)
@@ -69,7 +67,6 @@ (define-module (gnu packages kde)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gimp)
-  #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gperf)
diff --git a/gnu/packages/libcanberra.scm b/gnu/packages/libcanberra.scm
index c0ec47a445..cf38ac113e 100644
--- a/gnu/packages/libcanberra.scm
+++ b/gnu/packages/libcanberra.scm
@@ -25,10 +25,8 @@ (define-module (gnu packages libcanberra)
   #:use-module (gnu packages)
   #:use-module (guix packages)
   #:use-module (guix download)
-  #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
-  #:use-module (guix utils)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
@@ -36,9 +34,7 @@ (define-module (gnu packages libcanberra)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages python)
-  #:use-module (gnu packages xiph)
-  #:use-module ((srfi srfi-1) #:select (alist-delete)))
+  #:use-module (gnu packages xiph))
 
 (define-public libcanberra
   (package
diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index d06166e64a..71131ca1f3 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -44,7 +44,6 @@ (define-module (gnu packages libreoffice)
   #:use-module (ice-9 match)
   #:use-module (gnu packages)
   #:use-module (gnu packages aidc)
-  #:use-module (gnu packages aspell)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
@@ -73,10 +72,8 @@ (define-module (gnu packages libreoffice)
   #:use-module (gnu packages hunspell)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
-  #:use-module (gnu packages java)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages logging)
-  #:use-module (gnu packages m4)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages nss)
   #:use-module (gnu packages openldap)
@@ -87,7 +84,6 @@ (define-module (gnu packages libreoffice)
   #:use-module (gnu packages python)
   #:use-module (gnu packages rdf)
   #:use-module (gnu packages scanner)
-  #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages xml)
diff --git a/gnu/packages/linphone.scm b/gnu/packages/linphone.scm
index 7d87ee602c..48a30f32d0 100644
--- a/gnu/packages/linphone.scm
+++ b/gnu/packages/linphone.scm
@@ -34,11 +34,8 @@ (define-module (gnu packages linphone)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
-  #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
-  #:use-module (gnu packages gnome-xyz)
   #:use-module (gnu packages graphviz)
-  #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages ncurses)
@@ -49,7 +46,6 @@ (define-module (gnu packages linphone)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
-  #:use-module (gnu packages java)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages telephony)
   #:use-module (gnu packages tls)
diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm
index 4176977375..a7924d943d 100644
--- a/gnu/packages/mes.scm
+++ b/gnu/packages/mes.scm
@@ -24,15 +24,10 @@
 (define-module (gnu packages mes)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
-  #:use-module (gnu packages bash)
-  #:use-module (gnu packages bootstrap)
-  #:use-module (gnu packages compression)
   #:use-module (gnu packages cross-base)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages man)
-  #:use-module (gnu packages package-management)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages texinfo)
diff --git a/gnu/packages/mingw.scm b/gnu/packages/mingw.scm
index 4eeefe1490..0ac6f0e767 100644
--- a/gnu/packages/mingw.scm
+++ b/gnu/packages/mingw.scm
@@ -22,16 +22,10 @@
 (define-module (gnu packages mingw)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
-  #:use-module (gnu packages base)
   #:use-module (gnu packages cross-base)
-  #:use-module (gnu packages gcc)
-  #:use-module (gnu packages compression)
-  #:use-module (gnu packages multiprecision)
   #:use-module (guix build-system gnu)
   #:use-module (guix packages)
   #:use-module (guix download)
-  #:use-module (guix utils)
-  #:use-module (ice-9 match)
   #:export (make-mingw-w64))
 
 (define* (make-mingw-w64 machine
diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm
index c17d417d5e..d0b4bd2735 100644
--- a/gnu/packages/serialization.scm
+++ b/gnu/packages/serialization.scm
@@ -52,8 +52,6 @@ (define-module (gnu packages serialization)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages cmake)
-  #:use-module (gnu packages cpp)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages gcc)
@@ -64,8 +62,7 @@ (define-module (gnu packages serialization)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-science)
-  #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages perl))
+  #:use-module (gnu packages python-xyz))
 
 (define-public avro-cpp-1.9
   (package
diff --git a/gnu/packages/sync.scm b/gnu/packages/sync.scm
index 8235332cb0..c4410c67fd 100644
--- a/gnu/packages/sync.scm
+++ b/gnu/packages/sync.scm
@@ -50,7 +50,6 @@ (define-module (gnu packages sync)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
-  #:use-module (gnu packages golang)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages image)
   #:use-module (gnu packages kde-frameworks)
@@ -62,7 +61,6 @@ (define-module (gnu packages sync)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages rsync)
diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm
index 414395251b..57f5235616 100644
--- a/gnu/packages/syncthing.scm
+++ b/gnu/packages/syncthing.scm
@@ -38,9 +38,7 @@ (define-module (gnu packages syncthing)
   #:use-module (gnu packages golang)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages python)
   #:use-module (gnu packages python-crypto)
-  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages time))
 
 (define-public syncthing
diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm
index aa65c4eaad..42158784ca 100644
--- a/gnu/packages/telephony.scm
+++ b/gnu/packages/telephony.scm
@@ -44,7 +44,6 @@ (define-module (gnu packages telephony)
   #:use-module (guix gexp)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
-  #:use-module (gnu packages aidc)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages avahi)
@@ -52,23 +51,17 @@ (define-module (gnu packages telephony)
   #:use-module (gnu packages base)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
-  #:use-module (gnu packages compression)
   #:use-module (gnu packages cpp)
-  #:use-module (gnu packages crypto)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages file)
   #:use-module (gnu packages protobuf)
-  #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
-  #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
-  #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
-  #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linphone)
   #:use-module (gnu packages linux)
@@ -77,7 +70,6 @@ (define-module (gnu packages telephony)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages netpbm)
   #:use-module (gnu packages networking)
-  #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pulseaudio)
@@ -85,12 +77,8 @@ (define-module (gnu packages telephony)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages samba)
   #:use-module (gnu packages security-token)
-  #:use-module (gnu packages serialization)
   #:use-module (gnu packages speech)
   #:use-module (gnu packages tls)
-  #:use-module (gnu packages upnp)
-  #:use-module (gnu packages video)
-  #:use-module (gnu packages webkit)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages xml)
diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm
index 43aeac9fd7..aedf9309e0 100644
--- a/gnu/packages/terminals.scm
+++ b/gnu/packages/terminals.scm
@@ -102,7 +102,6 @@ (define-module (gnu packages terminals)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-check)
-  #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages serialization)
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 86dcea908c..cf3c4d4e19 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -115,7 +115,6 @@ (define-module (gnu packages version-control)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages ssh)
   #:use-module (gnu packages web)
-  #:use-module (gnu packages openstack)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
@@ -128,7 +127,6 @@ (define-module (gnu packages version-control)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages rsync)
   #:use-module (gnu packages ruby)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages texinfo)
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 153fe354d5..d959a7bcc4 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -117,10 +117,8 @@ (define-module (gnu packages video)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
-  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages cdrom)
   #:use-module (gnu packages check)
-  #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cpp)
   #:use-module (gnu packages crates-io)
@@ -131,7 +129,6 @@ (define-module (gnu packages video)
   #:use-module (gnu packages dns)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
-  #:use-module (gnu packages elf)
   #:use-module (gnu packages file)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fonts)
@@ -157,9 +154,7 @@ (define-module (gnu packages video)
   #:use-module (gnu packages libidn)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages llvm)
   #:use-module (gnu packages lua)
-  #:use-module (gnu packages m4)
   #:use-module (gnu packages man)
   #:use-module (gnu packages markup)
   #:use-module (gnu packages maths)
@@ -188,7 +183,6 @@ (define-module (gnu packages video)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
-  #:use-module (gnu packages rdesktop)
   #:use-module (gnu packages re2c)
   #:use-module (gnu packages ruby)
   #:use-module (gnu packages rust-apps)
@@ -208,7 +202,6 @@ (define-module (gnu packages video)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages vulkan)
   #:use-module (gnu packages web)
-  #:use-module (gnu packages webkit)
   #:use-module (gnu packages wget)
   #:use-module (gnu packages wxwidgets)
   #:use-module (gnu packages xdisorg)
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index aaff618248..48dd29071a 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -131,9 +131,7 @@ (define-module (gnu packages wm)
   #:use-module (gnu packages lisp-xyz)
   #:use-module (gnu packages logging)
   #:use-module (gnu packages lua)
-  #:use-module (gnu packages m4)
   #:use-module (gnu packages man)
-  #:use-module (gnu packages maths)
   #:use-module (gnu packages mpd)
   #:use-module (gnu packages pciutils)
   #:use-module (gnu packages music)
@@ -153,7 +151,6 @@ (define-module (gnu packages wm)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages time)
-  #:use-module (gnu packages video)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [bug#65860] [PATCH 4/4] doc: Add new 'Circular Module Dependencies' section.
       [not found] <cover.1694406359.git.maxim.cournoyer@gmail.com>
                   ` (2 preceding siblings ...)
  2023-09-11  4:25 ` [bug#65860] [PATCH 3/4] gnu: Remove extraneous imports Maxim Cournoyer
@ 2023-09-11  4:26 ` Maxim Cournoyer
  3 siblings, 0 replies; 11+ messages in thread
From: Maxim Cournoyer @ 2023-09-11  4:26 UTC (permalink / raw)
  To: 65860; +Cc: mhw, Maxim Cournoyer

* doc/contributing.texi (Circular Module Dependencies): New subsection.

---

 doc/contributing.texi | 56 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/doc/contributing.texi b/doc/contributing.texi
index a0da871f1a..67ceff4fdb 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -449,6 +449,7 @@ Packaging Guidelines
 * Version Numbers::             When the name is not enough.
 * Synopses and Descriptions::   Helping users find the right package.
 * Snippets versus Phases::      Whether to use a snippet, or a build phase.
+* Cyclic Module Dependencies::   Going full circle.
 * Emacs Packages::              Your Elisp fix.
 * Python Modules::              A touch of British comedy.
 * Perl Modules::                Little pearls.
@@ -720,6 +721,61 @@ Snippets versus Phases
 using build phases.  Refer to the @code{origin} record documentation for
 more information (@pxref{origin Reference}).
 
+@node Cyclic Module Dependencies
+@subsection Cyclic Module Dependencies
+
+While there cannot be circular dependencies between packages, Guile's
+lax module loading mechanism allows circular dependencies between Guile
+modules, which doesn't cause problems as long as the following
+conditions are followed for two modules part of a dependency cycle:
+
+@cindex rules to cope with circular module dependencies
+@enumerate
+@item
+Macros are not shared between the co-dependent modules
+@item
+Top-level variables are only referenced in delayed (@i{thunked}) package
+fields: @code{arguments}, @code{native-inputs}, @code{inputs},
+@code{propagated-inputs} or @code{replacement}
+@item
+Procedures referencing top-level variables from another module are not
+called at the top level of a module themselves.
+@end enumerate
+
+Straying away from the above rules may work while there are no
+dependency cycles between modules, but given such cycles are confusing
+and difficult to troubleshoot, it is best to follow the rules to avoid
+introducing problems down the line.
+
+@noindent
+Here is a common trap to avoid:
+
+@lisp
+(define-public avr-binutils
+  (package
+    (inherit (cross-binutils "avr"))
+    (name "avr-binutils")))
+@end lisp
+
+In the above example, the @code{avr-binutils} package was defined in the
+module @code{(gnu packages avr)}, and the @code{cross-binutils}
+procedure in @code{(gnu packages cross-base)}.  Because the
+@code{inherit} field is not delayed (thunked), it is evaluated at the
+top level at load time, which is problematic in the presence of module
+dependency cycles.  This could be resolved by turning the package into a
+procedure instead, like:
+
+@lisp
+(define (make-avr-binutils)
+  (package
+    (inherit (cross-binutils "avr"))
+    (name "avr-binutils")))
+@end lisp
+
+Care would need to be taken to ensure the above procedure is only ever
+used in a package delayed fields or within another procedure also not
+called at the top level.
+
 @node Emacs Packages
 @subsection Emacs Packages
 
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [bug#65860] [PATCH 3/4] gnu: Remove extraneous imports.
  2023-09-11  4:25 ` [bug#65860] [PATCH 3/4] gnu: Remove extraneous imports Maxim Cournoyer
@ 2023-09-13 20:06   ` Ludovic Courtès
  2023-09-17 20:27     ` Maxim Cournoyer
  0 siblings, 1 reply; 11+ messages in thread
From: Ludovic Courtès @ 2023-09-13 20:06 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: Ricardo Wurmus, Vagrant Cascadian, 65860, Efraim Flashner

Hi,

Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:

> Found by running 'guild compile -W3 gnu/packages/$module.scm', using guild
> from the upcoming Guile.

Excellent, go for it!

(The was the motivation for ‘-Wunused-modules’.)

Ludo’.




^ permalink raw reply	[flat|nested] 11+ messages in thread

* [bug#65860] [PATCH 0/4] Resolve a circular module dependencies in embedded modules
  2023-09-11  4:25 ` [bug#65860] [PATCH 1/4] gnu: avr: Delay all cross compilation packages Maxim Cournoyer
@ 2023-09-13 20:27   ` Ludovic Courtès
  2023-09-14  3:10     ` Maxim Cournoyer
  0 siblings, 1 reply; 11+ messages in thread
From: Ludovic Courtès @ 2023-09-13 20:27 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: 65860

Hi,

Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:

> Partially addresses <https://issues.guix.gnu.org/65716>.
>
> * gnu/packages/avr.scm: Add commentary comment.
> (avr-gcc): Turn into this...
> (make-avr-gcc): ... procedure.
> (avr-libc): Likewise, into...
> (make-avr-gcc): ... this.  Adjust native-inputs accordingly.
> (avr-toolchain): Likewise, into...
> (make-avr-toolchain): ... this.
> * gnu/packages/avr-xyz.scm (simavr) [propagated-inputs]: replace avr-toolchain
> with a call to the 'make-avr-toolchain' procedure.

[...]

> Fixes <https://issues.guix.gnu.org/65716>.
>
> Before this change, simply adding the following import:
>
>   modified   gnu/packages/firmware.scm
>   @@ -42,6 +42,7 @@ (define-module (gnu packages firmware)
>      #:use-module (gnu packages admin)
>      #:use-module (gnu packages autotools)
>      #:use-module (gnu packages assembly)
>   +  #:use-module (gnu packages avr)
>      #:use-module (gnu packages backup)
>      #:use-module (gnu packages base)
>      #:use-module (gnu packages bash)
>
> Would cause byte compilation and/or evaluation to fail due to a circular
> module dependency.
>
> * gnu/packages/embedded.scm: Add commentary.
> (gcc-arm-none-eabi-4.9, gcc-arm-none-eabi-6, newlib-arm-none-eabi)
> (newlib-nano-arm-none-eabi, gcc-arm-none-eabi-7-2018-q2-update)
> (newlib-arm-none-eabi-7-2018-q2-update)
> (newlib-nano-arm-none-eabi-7-2018-q2-update)
> (arm-none-eabi-toolchain-4.9, arm-none-eabi-nano-toolchain-4.9)
> (arm-none-eabi-toolchain-6, arm-none-eabi-nano-toolchain-6)
> (arm-none-eabi-toolchain-7-2018-q2-update, gdb-arm-none-eabi)
> (propeller-binutils, propeller-gcc-6, propeller-gcc-4)
> (propeller-gcc, propeller-toolchain, propeller-development-suite)
> (gcc-vc4): Turn into procedures, prefixing the procedure name with 'make-',
> and adjust all users.
> (make-libstdc++-arm-none-eabi) [arguments]: Avoid an unused warning.
> (arm-none-eabi-toolchain):  Rename to...
> (make-arm-none-eabi-toolchain): ... this.
> * gnu/packages/raspberry-pi.scm (raspi-arm-chainloader) [native-inputs]:
> Replace gcc-arm-none-eabi-6 with (make-arm-none-eabi-toolchain).
> * gnu/packages/axoloti.scm (axoloti-runtime)
> [inputs]: Replace arm-none-eabi-nano-toolchain-4.9
> with (make-arm-none-eabi-nano-toolchain-4.9).
> (axoloti-patcher): Likewise.
> (axoloti-patcher-next) [inputs]: Replace
> arm-none-eabi-nano-toolchain-7-2018-q2-update
> with (make-arm-none-eabi-nano-toolchain-7-2018-q2-update).

People will lose the ability to install those toolchains, for instance
with ‘guix install propeller-toolchain’, or to upgrade profiles that
contain them (though ‘guix install axoloti-runtime’ is still good, for
instance).

I’m not sure whether that’s acceptable, but we should check with known
users of this, such as Ricardo.

I’ve always felt that these toolchains should be provided as part of the
“regular” cross-compilation framework in cross-base.scm.  Packages that
always need to be cross-compiled (to AVR microcontrollers, etc.) would
have a hardcoded #:target in their ‘arguments’ field.  I forgot why this
was rejected.

Thanks,
Ludo’.




^ permalink raw reply	[flat|nested] 11+ messages in thread

* [bug#65860] [PATCH 0/4] Resolve a circular module dependencies in embedded modules
  2023-09-13 20:27   ` [bug#65860] [PATCH 0/4] Resolve a circular module dependencies in embedded modules Ludovic Courtès
@ 2023-09-14  3:10     ` Maxim Cournoyer
  2023-09-14  9:10       ` Ludovic Courtès
  0 siblings, 1 reply; 11+ messages in thread
From: Maxim Cournoyer @ 2023-09-14  3:10 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 65860

Hi,

Ludovic Courtès <ludo@gnu.org> writes:

> Hi,
>
> Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:
>
>> Partially addresses <https://issues.guix.gnu.org/65716>.
>>
>> * gnu/packages/avr.scm: Add commentary comment.
>> (avr-gcc): Turn into this...
>> (make-avr-gcc): ... procedure.
>> (avr-libc): Likewise, into...
>> (make-avr-gcc): ... this.  Adjust native-inputs accordingly.
>> (avr-toolchain): Likewise, into...
>> (make-avr-toolchain): ... this.
>> * gnu/packages/avr-xyz.scm (simavr) [propagated-inputs]: replace avr-toolchain
>> with a call to the 'make-avr-toolchain' procedure.
>
> [...]
>
>> Fixes <https://issues.guix.gnu.org/65716>.
>>
>> Before this change, simply adding the following import:
>>
>>   modified   gnu/packages/firmware.scm
>>   @@ -42,6 +42,7 @@ (define-module (gnu packages firmware)
>>      #:use-module (gnu packages admin)
>>      #:use-module (gnu packages autotools)
>>      #:use-module (gnu packages assembly)
>>   +  #:use-module (gnu packages avr)
>>      #:use-module (gnu packages backup)
>>      #:use-module (gnu packages base)
>>      #:use-module (gnu packages bash)
>>
>> Would cause byte compilation and/or evaluation to fail due to a circular
>> module dependency.

[...]

> People will lose the ability to install those toolchains, for instance
> with ‘guix install propeller-toolchain’, or to upgrade profiles that
> contain them (though ‘guix install axoloti-runtime’ is still good, for
> instance).
>
> I’m not sure whether that’s acceptable, but we should check with known
> users of this, such as Ricardo.

It's a pity to loose that ability (it's also a pity to not be able to
simply 'guix install gcc-cross-some-target', for the same reason) but
the statu quo where pulling (gnu packages avr) causes hard to grasp
failures is worst, in my opinion.  I wasn't able to work on adding
packages dependent on (gnu packages avr) for that reason.  Debugging was
a pain.

> I’ve always felt that these toolchains should be provided as part of the
> “regular” cross-compilation framework in cross-base.scm.  Packages that
> always need to be cross-compiled (to AVR microcontrollers, etc.) would
> have a hardcoded #:target in their ‘arguments’ field.  I forgot why this
> was rejected.

That'd be an improvement, I think.  Right now we have to call a
procedure in the input fields everywhere, it's not very elegant.  Until
then, the change proposed here seems the best we can do.  I've been
adding new avr-dependent firmware packages in (gnu packages firmware)
happily on top of it.

-- 
Thanks,
Maxim




^ permalink raw reply	[flat|nested] 11+ messages in thread

* [bug#65860] [PATCH 0/4] Resolve a circular module dependencies in embedded modules
  2023-09-14  3:10     ` Maxim Cournoyer
@ 2023-09-14  9:10       ` Ludovic Courtès
  2023-09-18  0:52         ` Maxim Cournoyer
  0 siblings, 1 reply; 11+ messages in thread
From: Ludovic Courtès @ 2023-09-14  9:10 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: 65860

Hi,

Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:

> Ludovic Courtès <ludo@gnu.org> writes:

[...]

>> People will lose the ability to install those toolchains, for instance
>> with ‘guix install propeller-toolchain’, or to upgrade profiles that
>> contain them (though ‘guix install axoloti-runtime’ is still good, for
>> instance).
>>
>> I’m not sure whether that’s acceptable, but we should check with known
>> users of this, such as Ricardo.
>
> It's a pity to loose that ability (it's also a pity to not be able to
> simply 'guix install gcc-cross-some-target', for the same reason) but
> the statu quo where pulling (gnu packages avr) causes hard to grasp
> failures is worst, in my opinion.  I wasn't able to work on adding
> packages dependent on (gnu packages avr) for that reason.  Debugging was
> a pain.

Oh yes, I’ve been there, so I can tell you I sympathize.  :-)

I agree that this needs to be addressed.  I wondered whether/how hard we
should search for a different solution.

>> I’ve always felt that these toolchains should be provided as part of the
>> “regular” cross-compilation framework in cross-base.scm.  Packages that
>> always need to be cross-compiled (to AVR microcontrollers, etc.) would
>> have a hardcoded #:target in their ‘arguments’ field.  I forgot why this
>> was rejected.
>
> That'd be an improvement, I think.  Right now we have to call a
> procedure in the input fields everywhere, it's not very elegant.

BTW, another issue with the package-returning procedures: they return a
fresh package object at each call, which defeats caching.  I think you
should be able to observe it with:

  GUIX_PROFILING=object-cache guix build axoloti-runtime -d  --no-grafts

The effect will be more acute on the build farms since they compute
derivations for everything that depends on these toolchains.

The solution would be to make those procedures memoizing, with ‘mlambda’
or similar.

Ludo’.




^ permalink raw reply	[flat|nested] 11+ messages in thread

* [bug#65860] [PATCH 3/4] gnu: Remove extraneous imports.
  2023-09-13 20:06   ` Ludovic Courtès
@ 2023-09-17 20:27     ` Maxim Cournoyer
  0 siblings, 0 replies; 11+ messages in thread
From: Maxim Cournoyer @ 2023-09-17 20:27 UTC (permalink / raw)
  To: Ludovic Courtès
  Cc: Ricardo Wurmus, Vagrant Cascadian, 65860, Efraim Flashner

Hi,

Ludovic Courtès <ludo@gnu.org> writes:

> Hi,
>
> Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:
>
>> Found by running 'guild compile -W3 gnu/packages/$module.scm', using guild
>> from the upcoming Guile.
>
> Excellent, go for it!

Great, I've installed this single commit to master.

-- 
Thanks,
Maxim




^ permalink raw reply	[flat|nested] 11+ messages in thread

* [bug#65860] [PATCH 0/4] Resolve a circular module dependencies in embedded modules
  2023-09-14  9:10       ` Ludovic Courtès
@ 2023-09-18  0:52         ` Maxim Cournoyer
  2023-09-25 17:58           ` [bug#66063] [PATCH v2 0/3] " Maxim Cournoyer
  0 siblings, 1 reply; 11+ messages in thread
From: Maxim Cournoyer @ 2023-09-18  0:52 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 65860

Hi Ludovic,

Ludovic Courtès <ludo@gnu.org> writes:

[...]

> I agree that this needs to be addressed.  I wondered whether/how hard we
> should search for a different solution.

OK.  I think the current situation needs to be resolved ASAP, but longer
term I'm definitely willing to revisit our strategy when it comes to
cross compiler toolchains.

[...]

> BTW, another issue with the package-returning procedures: they return a
> fresh package object at each call, which defeats caching.  I think you
> should be able to observe it with:
>
>   GUIX_PROFILING=object-cache guix build axoloti-runtime -d  --no-grafts
>
> The effect will be more acute on the build farms since they compute
> derivations for everything that depends on these toolchains.
>
> The solution would be to make those procedures memoizing, with ‘mlambda’
> or similar.

I haven't tried measuring the impact, but I've use mlambda in the v2
just sent; thanks for the suggesting it!

-- 
Thanks,
Maxim




^ permalink raw reply	[flat|nested] 11+ messages in thread

* [bug#66063] [PATCH v2 0/3] Resolve a circular module dependencies in embedded modules
  2023-09-18  0:52         ` Maxim Cournoyer
@ 2023-09-25 17:58           ` Maxim Cournoyer
  0 siblings, 0 replies; 11+ messages in thread
From: Maxim Cournoyer @ 2023-09-25 17:58 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: Ricardo Wurmus, 66063-done, 65860-done

Hi,

Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:

> Hi Ludovic,
>
> Ludovic Courtès <ludo@gnu.org> writes:
>
> [...]
>
>> I agree that this needs to be addressed.  I wondered whether/how hard we
>> should search for a different solution.
>
> OK.  I think the current situation needs to be resolved ASAP, but longer
> term I'm definitely willing to revisit our strategy when it comes to
> cross compiler toolchains.
>
> [...]
>
>> BTW, another issue with the package-returning procedures: they return a
>> fresh package object at each call, which defeats caching.  I think you
>> should be able to observe it with:
>>
>>   GUIX_PROFILING=object-cache guix build axoloti-runtime -d  --no-grafts
>>
>> The effect will be more acute on the build farms since they compute
>> derivations for everything that depends on these toolchains.
>>
>> The solution would be to make those procedures memoizing, with ‘mlambda’
>> or similar.
>
> I haven't tried measuring the impact, but I've use mlambda in the v2
> just sent; thanks for the suggesting it!

I've now pushed this series.  If we can make AVR a native
target/platform in Guix, that may make things simpler/nicer, but
otherwise, this is at least resolved.

-- 
Thanks,
Maxim




^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2023-09-25 17:59 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <cover.1694406359.git.maxim.cournoyer@gmail.com>
2023-09-11  4:25 ` [bug#65860] [PATCH 1/4] gnu: avr: Delay all cross compilation packages Maxim Cournoyer
2023-09-13 20:27   ` [bug#65860] [PATCH 0/4] Resolve a circular module dependencies in embedded modules Ludovic Courtès
2023-09-14  3:10     ` Maxim Cournoyer
2023-09-14  9:10       ` Ludovic Courtès
2023-09-18  0:52         ` Maxim Cournoyer
2023-09-25 17:58           ` [bug#66063] [PATCH v2 0/3] " Maxim Cournoyer
2023-09-11  4:25 ` [bug#65860] [PATCH 2/4] gnu: embedded: Turn packages using top-level variables into procedures Maxim Cournoyer
2023-09-11  4:25 ` [bug#65860] [PATCH 3/4] gnu: Remove extraneous imports Maxim Cournoyer
2023-09-13 20:06   ` Ludovic Courtès
2023-09-17 20:27     ` Maxim Cournoyer
2023-09-11  4:26 ` [bug#65860] [PATCH 4/4] doc: Add new 'Circular Module Dependencies' section Maxim Cournoyer

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).