guix_mirror_bot pushed a commit to branch core-packages-team in repository guix.
commit 0b61ecf6b14e144c3c0a97f7a13445b1ce71790c Author: Nicolas Graves <[email protected]> AuthorDate: Tue Feb 17 22:56:02 2026 +0100 gnu: gcc-core-mesboot1: Improve style, drop input labels. * gnu/packages/commencement.scm (unpack-and-symlink-other-tarballs-phase): New variable. (gcc-core-mesboot1)[inputs]: Drop input labels. [arguments]<#:make-flags, #:configure-flags>: Use G-expressions. <#:phases>: Replace phase 'unpack-gmp&co by injected phase unpack-and-symlink-other-tarballs-phase. In phase 'setenv, rewrite input locations to make drop labels. (gcc-mesboot1)[native-inputs]: Drop input labels. [arguments]<#:configure-flags>: Adapt accordingly. <#:phases>: Replace phase 'unpack-g++ by phase 'relocate-gcc-g++, unpacking is not necessary anymore since the above introduced phases are inherited. <#:modules>: Adapt accordingly. (gcc-mesboot)[arguments]<#:phases>: Rename removed phase accordingly. Change-Id: Id49ea3a22872bcda8cd6e3f732fd7b4bf252c2c9 Signed-off-by: Ludovic Courtès <[email protected]> --- gnu/packages/commencement.scm | 257 ++++++++++++++++++++++-------------------- 1 file changed, 135 insertions(+), 122 deletions(-) diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm index ee62620f0ec..1ef8616d5f1 100644 --- a/gnu/packages/commencement.scm +++ b/gnu/packages/commencement.scm @@ -1310,6 +1310,35 @@ ac_cv_c_float_format='IEEE (little-endian)' (sha256 (base32 "1hzci2zrrd7v3g1jk35qindq05hbl0bhjcyyisq9z209xb3fqzb1"))))) +;; This G-expression, when ungexped, returns a phase that unpacks and +;; symlink result directories from all input .tar.(gz|xz) input files. +;; It is used in multiple GCCs to reduce the set of pre-built bootstrap +;; inputs. +(define unpack-and-symlink-other-tarballs-phase + #~(lambda* (#:key inputs #:allow-other-keys) + (for-each + (match-lambda + ((filename . source) + (let ((gz (string-suffix? ".tar.gz" filename)) + (xz (string-suffix? ".tar.xz" filename))) + ;; Only select archives other than "source" + (and (or gz xz) + ;; Unpack them + (or (invoke "tar" "xvf" source) + (error "failed to unpack tarball" source)) + ;; Create symlinks like `gmp' -> `gmp-x.y.z'. + (let* ((suffix (if gz ".tar.gz" ".tar.xz")) + (name-version (string-trim-right + (basename filename suffix) + char-set:letter)) + (index (string-rindex name-version #\-))) + (when index + (symlink name-version + ;; Drop trailing letters, as + ;; gmp-6.0.0a unpacks into gmp-6.0.0. + (string-take name-version index)))))))) + inputs))) + (define gcc-core-mesboot1 ;; GCC 4.6.4 is the latest modular distribution. This package is not ;; stricly needed, but very helpful for development because it builds @@ -1326,111 +1355,91 @@ ac_cv_c_float_format='IEEE (little-endian)' (sha256 (base32 "173kdb188qg79pcz073cj9967rs2vzanyjdjyxy9v0xb0p5sad75")))) - (inputs `(("gmp-source" ,gmp-boot) - ("mpfr-source" ,mpfr-boot) - ("mpc-source" ,mpc-boot))) + (inputs (list gmp-boot mpfr-boot mpc-boot)) (native-inputs (%boot-mesboot1-inputs)) (arguments - (list #:implicit-inputs? #f - #:guile %bootstrap-guile - #:tests? #f - #:modules '((guix build gnu-build-system) - (guix build utils) - (srfi srfi-1)) - #:parallel-build? #f ; for debugging - #:make-flags - #~(let* ((libc (assoc-ref %build-inputs "libc")) - (ldflags (string-append - "-B" libc "/lib " - "-Wl,-dynamic-linker " - "-Wl," libc - #$(glibc-dynamic-linker "i686-linux")))) - (list (string-append "LDFLAGS=" ldflags) - (string-append "LDFLAGS_FOR_TARGET=" ldflags))) - #:configure-flags - #~(let ((out (assoc-ref %outputs "out")) - (glibc (assoc-ref %build-inputs "libc"))) - (list (string-append "--prefix=" out) - "--build=i686-unknown-linux-gnu" - "--host=i686-unknown-linux-gnu" - (string-append "--with-native-system-header-dir=" glibc "/include") - (string-append "--with-build-sysroot=" glibc "/include") - "--disable-bootstrap" - "--disable-decimal-float" - "--disable-libatomic" - "--disable-libcilkrts" - "--disable-libgomp" - "--disable-libitm" - "--disable-libmudflap" - "--disable-libquadmath" - "--disable-libsanitizer" - "--disable-libssp" - "--disable-libvtv" - "--disable-lto" - "--disable-lto-plugin" - "--disable-multilib" - "--disable-plugin" - "--disable-threads" - "--enable-languages=c" - "--enable-static" - "--disable-shared" - "--enable-threads=single" - "--disable-libstdcxx-pch" - "--disable-build-with-cxx")) - #:phases - #~(modify-phases %standard-phases - (add-after 'unpack 'apply-boot-patch - (lambda* (#:key inputs #:allow-other-keys) - (let ((patch-file - #$(local-file - (search-patch "gcc-boot-4.6.4.patch")))) - (invoke "patch" "--force" "-p1" "-i" patch-file)))) - ;; c&p from commencement.scm:gcc-boot0 - (add-after 'unpack 'unpack-gmp&co - (lambda* (#:key inputs #:allow-other-keys) - (let ((gmp (assoc-ref %build-inputs "gmp-source")) - (mpfr (assoc-ref %build-inputs "mpfr-source")) - (mpc (assoc-ref %build-inputs "mpc-source"))) - - ;; To reduce the set of pre-built bootstrap inputs, build - ;; GMP & co. from GCC. - (for-each (lambda (source) - (or (invoke "tar" "xvf" source) - (error "failed to unpack tarball" - source))) - (list gmp mpfr mpc)) - - ;; Create symlinks like `gmp' -> `gmp-x.y.z'. - #$@(map (lambda (lib package) - ;; Drop trailing letters, as gmp-6.0.0a unpacks - ;; into gmp-6.0.0. - #~(symlink #$(string-trim-right - (basename - (origin-actual-file-name lib) - ".tar.gz") - char-set:letter) - #$package)) - (list gmp-boot mpfr-boot mpc-boot) - '("gmp" "mpfr" "mpc"))))) - (add-before 'configure 'setenv - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (binutils (assoc-ref %build-inputs "binutils")) - (bash (assoc-ref %build-inputs "bash")) - (gcc (assoc-ref %build-inputs "gcc")) - (glibc (assoc-ref %build-inputs "libc")) - (kernel-headers (assoc-ref %build-inputs "kernel-headers"))) - (setenv "CONFIG_SHELL" (string-append bash "/bin/sh")) - (setenv "C_INCLUDE_PATH" (string-append - gcc "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include" - ":" kernel-headers "/include" - ":" glibc "/include" - ":" (getcwd) "/mpfr/src")) - (setenv "LIBRARY_PATH" (string-append glibc "/lib" - ":" gcc "/lib")) - (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH")) - (format (current-error-port) "LIBRARY_PATH=~a\n" - (getenv "LIBRARY_PATH")))))))))) + (list + #:implicit-inputs? #f + #:guile %bootstrap-guile + #:tests? #f + #:modules '((guix build gnu-build-system) + (guix build utils) + (ice-9 match) + (srfi srfi-1)) + #:parallel-build? #f ; for debugging + #:make-flags + #~(let* ((libc.a (search-input-file %build-inputs "/lib/libc.a")) + (libc (dirname (dirname libc.a))) + (ldflags (string-append + "-B" libc "/lib " + "-Wl,-dynamic-linker " + "-Wl," libc + #$(glibc-dynamic-linker "i686-linux")))) + (list (string-append "LDFLAGS=" ldflags) + (string-append "LDFLAGS_FOR_TARGET=" ldflags))) + #:configure-flags + #~(let* ((libc.a (search-input-file %build-inputs "/lib/libc.a")) + (glibc (dirname (dirname libc.a)))) + (list (string-append "--prefix=" #$output) + "--build=i686-unknown-linux-gnu" + "--host=i686-unknown-linux-gnu" + (string-append "--with-native-system-header-dir=" glibc "/include") + (string-append "--with-build-sysroot=" glibc "/include") + "--disable-bootstrap" + "--disable-decimal-float" + "--disable-libatomic" + "--disable-libcilkrts" + "--disable-libgomp" + "--disable-libitm" + "--disable-libmudflap" + "--disable-libquadmath" + "--disable-libsanitizer" + "--disable-libssp" + "--disable-libvtv" + "--disable-lto" + "--disable-lto-plugin" + "--disable-multilib" + "--disable-plugin" + "--disable-threads" + "--enable-languages=c" + "--enable-static" + "--disable-shared" + "--enable-threads=single" + "--disable-libstdcxx-pch" + "--disable-build-with-cxx")) + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'apply-boot-patch + (lambda* (#:key inputs #:allow-other-keys) + (let ((patch-file + #$(local-file + (search-patch "gcc-boot-4.6.4.patch")))) + (invoke "patch" "--force" "-p1" "-i" patch-file)))) + (add-after 'unpack 'unpack-other-tarballs + #$unpack-and-symlink-other-tarballs-phase) + (add-before 'configure 'setenv + (lambda* (#:key inputs #:allow-other-keys) + (let* ((shell (search-input-file inputs "/bin/sh")) + (gcc-lib (search-input-directory inputs "/lib/gcc-lib")) + (gcc (dirname (dirname gcc-lib))) + (libc.a (search-input-file inputs "/lib/libc.a")) + (glibc (dirname (dirname libc.a))) + (kernel-headers + (search-input-directory inputs #$(if (system-hurd?) + "include/mach" + "include/linux"))) + (kernel-headers-include (dirname kernel-headers))) + (setenv "CONFIG_SHELL" shell) + (setenv "C_INCLUDE_PATH" (string-append + gcc "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include" + ":" kernel-headers-include + ":" glibc "/include" + ":" (getcwd) "/mpfr/src")) + (setenv "LIBRARY_PATH" (string-append glibc "/lib" + ":" gcc "/lib")) + (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH")) + (format (current-error-port) "LIBRARY_PATH=~a\n" + (getenv "LIBRARY_PATH")))))))))) (define gcc-mesboot1 (package @@ -1438,29 +1447,33 @@ ac_cv_c_float_format='IEEE (little-endian)' (name "gcc-mesboot1") (version "4.6.4") (native-inputs - `(("gcc-g++" - ,(origin - (method url-fetch) - (uri (string-append "mirror://gnu/gcc/gcc-" - version "/gcc-g++-" version ".tar.gz")) - (sha256 - (base32 - "1fqqk5zkmdg4vmqzdmip9i42q6b82i3f6yc0n86n9021cr7ms2k9")))) - ,@(package-native-inputs gcc-core-mesboot1))) + (modify-inputs (package-native-inputs gcc-core-mesboot1) + (prepend + (origin + (method url-fetch) + (uri (string-append "mirror://gnu/gcc/gcc-" + version "/gcc-g++-" version ".tar.gz")) + (sha256 + (base32 + "1fqqk5zkmdg4vmqzdmip9i42q6b82i3f6yc0n86n9021cr7ms2k9")))))) (arguments (substitute-keyword-arguments arguments ((#:configure-flags configure-flags) - #~(let ((out (assoc-ref %outputs "out"))) - `("--enable-languages=c,c++" - ,@(filter - (negate (lambda (x) (string-prefix? "--enable-languages=" x))) - #$configure-flags)))) + #~(cons* "--enable-languages=c,c++" + (remove (lambda (x) (string-prefix? "--enable-languages=" x)) + #$configure-flags))) + ((#:modules modules) + (cons* '(ice-9 ftw) modules)) ((#:phases phases) #~(modify-phases #$phases - (add-before 'unpack 'unpack-g++ + (add-after 'unpack-other-tarballs 'relocate-gcc-g++ (lambda _ - (let ((source-g++ (assoc-ref %build-inputs "gcc-g++"))) - (invoke "tar" "xvf" source-g++)))) + (let ((directory (find (lambda (dir) + (string-prefix? "gcc-" dir)) + (scandir ".")))) + (copy-recursively directory ".") + (delete-file-recursively directory) + (delete-file "gcc-g++")))) (replace 'setenv (lambda _ (setenv "CONFIG_SHELL" (which "sh")) @@ -1818,8 +1831,8 @@ exec " gcc "/bin/" program ((#:phases phases) #~(modify-phases #$phases (delete 'apply-boot-patch) - (delete 'unpack-g++) ; sadly, gcc-4.9.4 does not provide - ; modular core/language downloads + (delete 'relocate-gcc-g++) ; sadly, gcc-4.9.4 does not provide + ; modular core/language downloads (replace 'setenv (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out"))
