diff options
author | Ludovic Courtès <ludo@gnu.org> | 2020-02-04 09:40:51 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2020-02-06 18:47:15 +0100 |
commit | 558b0bbe291b2f2cd38b7f4eadc827e2ed102c54 (patch) | |
tree | 26672f4e07889e92d7eba316c2a2228c76907edd | |
parent | a1caea07f6b509e52c16869a9c74ec4503b67139 (diff) |
gnu: commencement: Rationalize search path handling.
This commit ensures that only packages that correspond to compilers have
a search path set. It also reduces manual handling of search path
environment variables.
* gnu/packages/commencement.scm (tcc-boot0)[native-search-paths]: Remove
copy/pasted comment.
(gcc-core-mesboot)[arguments]: In 'install2' phase, do not copy
TCC/include to OUT/include.
[native-search-paths]: Remove leading slash in "lib/gcc-lib/…" directory name.
(mesboot-headers)[native-search-paths]: Remove.
(glibc-mesboot0)[native-search-paths]: Remove.
(gcc-mesboot0)[native-inputs]: Reorder so that we have libc, then
kernel-headers, then gcc.
[arguments]: Rewrite 'setenv' phase to only set CONFIG_SHELL and create
'config.cache'.
(gcc-mesboot1)[native-inputs]: Reorder similarly.
[arguments]: In 'setenv' phase, only set CONFIG_SHELL, C_INCLUDE_PATH,
and CPLUS_INCLUDE_PATH.
(glibc-headers-mesboot)[arguments]: In 'setenv' phase, replace
references to '%build-inputs' by references to 'inputs'; simplify
setting of CONFIG_SHELL and SHELL; simplify patching of /bin/pwd in
the "configure" file; leave C_INCLUDE_PATH and LIBRARY_PATH unset.
(glibc-mesboot)[native-search-paths]: Remove.
(gcc-mesboot)[native-inputs]: Reorder.
[arguments]: Remove clause for #:phases that would change the 'setenv'
phase.
-rw-r--r-- | gnu/packages/commencement.scm | 196 |
1 files changed, 45 insertions, 151 deletions
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm index 8f24815b28..e26bc1cec2 100644 --- a/gnu/packages/commencement.scm +++ b/gnu/packages/commencement.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org> ;;; Copyright © 2014, 2015, 2017 Mark H Weaver <mhw@netris.org> @@ -144,11 +144,6 @@ (lambda _ (invoke "sh" "install.sh")))))) (native-search-paths - ;; Use the language-specific variables rather than 'CPATH' because they - ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'. - ;; The intent is to allow headers that are in the search path to be - ;; treated as "system headers" (headers exempt from warnings) just like - ;; the typical /usr/include headers on an FHS system. (list (search-path-specification (variable "C_INCLUDE_PATH") (files '("share/mes/include"))) @@ -262,11 +257,6 @@ (lambda _ (invoke "sh" "install.sh")))))) (native-search-paths - ;; Use the language-specific variables rather than 'CPATH' because they - ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'. - ;; The intent is to allow headers that are in the search path to be - ;; treated as "system headers" (headers exempt from warnings) just like - ;; the typical /usr/include headers on an FHS system. (list (search-path-specification (variable "C_INCLUDE_PATH") (files '("include"))) @@ -623,18 +613,14 @@ ac_cv_c_float_format='IEEE (little-endian)' (string-append tcc-lib "/libc+gnu.o") (string-append tcc-lib "/libtcc1.o")) (invoke "ls" "-ltrF" gcc-dir) - (copy-recursively (string-append tcc "/include") - (string-append out "/include")) #t)))))) (native-search-paths - ;; Use the language-specific variables rather than 'CPATH' because they - ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'. - ;; The intent is to allow headers that are in the search path to be - ;; treated as "system headers" (headers exempt from warnings) just like - ;; the typical /usr/include headers on an FHS system. (list (search-path-specification (variable "C_INCLUDE_PATH") - (files '("include" "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include"))) + (files '("include" + + ;; Needed to get things like GCC's <stddef.h>. + "lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include"))) (search-path-specification (variable "LIBRARY_PATH") (files '("lib"))))))) @@ -665,16 +651,7 @@ ac_cv_c_float_format='IEEE (little-endian)' (mkdir-p include) (copy-recursively "include" out) (copy-recursively headers out) - #t)))))) - (native-search-paths - ;; Use the language-specific variables rather than 'CPATH' because they - ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'. - ;; The intent is to allow headers that are in the search path to be - ;; treated as "system headers" (headers exempt from warnings) just like - ;; the typical /usr/include headers on an FHS system. - (list (search-path-specification - (variable "C_INCLUDE_PATH") - (files '("include"))))))) + #t)))))))) (define glibc-mesboot0 ;; GNU C Library 2.2.5 is the most recent glibc that we managed to build @@ -756,67 +733,37 @@ ac_cv_c_float_format='IEEE (little-endian)' (lambda* (#:key configure-flags #:allow-other-keys) (format (current-error-port) "running ./configure ~a\n" (string-join configure-flags)) - (apply invoke "./configure" configure-flags)))))) - (native-search-paths - ;; Use the language-specific variables rather than 'CPATH' because they - ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'. - ;; The intent is to allow headers that are in the search path to be - ;; treated as "system headers" (headers exempt from warnings) just like - ;; the typical /usr/include headers on an FHS system. - (list (search-path-specification - (variable "C_INCLUDE_PATH") - (files '("include"))) - (search-path-specification - (variable "CPLUS_INCLUDE_PATH") - (files '("include"))) - (search-path-specification - (variable "LIBRARY_PATH") - (files '("lib"))))))) + (apply invoke "./configure" configure-flags)))))))) (define gcc-mesboot0 (package (inherit gcc-core-mesboot) (name "gcc-mesboot0") (native-inputs `(("binutils" ,binutils-mesboot0) - ("gcc" ,gcc-core-mesboot) + + ;; Packages are given in an order that's relevant for + ;; #include_next purposes. ("libc" ,glibc-mesboot0) + ("kernel-headers" ,%bootstrap-linux-libre-headers) + ("gcc" ,gcc-core-mesboot) ("bash" ,%bootstrap-coreutils&co) ("coreutils" ,%bootstrap-coreutils&co) ("diffutils" ,diffutils-mesboot) - ("kernel-headers" ,%bootstrap-linux-libre-headers) ("make" ,make-mesboot0))) (arguments (substitute-keyword-arguments (package-arguments gcc-core-mesboot) ((#:phases phases) `(modify-phases ,phases (replace 'setenv - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (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")) - (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH")) - (setenv "C_INCLUDE_PATH" (string-append - gcc "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include" - ":" kernel-headers "/include" - ":" glibc "/include")) - (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH")) - (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH")) - ;; FIXME: add glibc dirs to paths manually - (setenv "LIBRARY_PATH" (string-join - (list (string-append glibc "/lib") - (getenv "LIBRARY_PATH")) - ":")) - (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH")) - (with-output-to-file "config.cache" - (lambda _ - (display " + (lambda _ + (setenv "CONFIG_SHELL" (which "sh")) + (with-output-to-file "config.cache" + (lambda _ + (display " ac_cv_c_float_format='IEEE (little-endian)' "))) - #t))) + #t)) (replace 'install2 (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -942,13 +889,14 @@ ac_cv_c_float_format='IEEE (little-endian)' ("mpfr-source" ,(package-source mpfr-boot)) ("mpc-source" ,(package-source mpc-boot)))) (native-inputs `(("binutils" ,binutils-mesboot) - ("gcc" ,gcc-mesboot0) + ("libc" ,glibc-mesboot0) + ("kernel-headers" ,%bootstrap-linux-libre-headers) + ("gcc" ,gcc-mesboot0) ("bash" ,%bootstrap-coreutils&co) ("coreutils" ,%bootstrap-coreutils&co) ("diffutils" ,diffutils-mesboot) - ("kernel-headers" ,%bootstrap-linux-libre-headers) ("make" ,make-mesboot))) (arguments (substitute-keyword-arguments (package-arguments gcc-core-mesboot) @@ -990,24 +938,18 @@ ac_cv_c_float_format='IEEE (little-endian)' #t))) (delete 'remove-info) (replace '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")) - #t))) + (lambda _ + (setenv "CONFIG_SHELL" (which "sh")) + + ;; Allow MPFR headers to be found. + (setenv "C_INCLUDE_PATH" + (string-append (getcwd) "/mpfr/src:" + (getenv "C_INCLUDE_PATH"))) + + ;; Set the C++ search path so that C headers can be found as + ;; libstdc++ is being compiled. + (setenv "CPLUS_INCLUDE_PATH" (getenv "C_INCLUDE_PATH")) + #t)) (delete 'install2))) ((#:configure-flags configure-flags) `(let ((out (assoc-ref %outputs "out")) @@ -1154,22 +1096,18 @@ exec " gcc "/bin/" program ((#:phases phases) `(modify-phases ,phases (replace 'setenv - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (headers (assoc-ref %build-inputs "headers")) - (bash (assoc-ref %build-inputs "bash")) - (coreutils (assoc-ref %build-inputs "coreutils")) - (libc (assoc-ref %build-inputs "libc")) - (gcc (assoc-ref %build-inputs "gcc")) + (lambda* (#:key inputs #:allow-other-keys) + (let* ((headers (assoc-ref inputs "headers")) + (libc (assoc-ref inputs "libc")) + (gcc (assoc-ref inputs "gcc")) (cppflags (string-append " -I " (getcwd) "/nptl/sysdeps/pthread/bits" " -D BOOTSTRAP_GLIBC=1")) (cflags (string-append " -L " (getcwd) " -L " libc "/lib"))) (setenv "libc_cv_friendly_stddef" "yes") - (setenv "CONFIG_SHELL" (string-append bash "/bin/sh")) - (setenv "SHELL" (getenv "CONFIG_SHELL")) - (format (current-error-port) "CONFIG_SHELL=~s\n" (getenv "CONFIG_SHELL")) + (setenv "CONFIG_SHELL" (which "sh")) + (setenv "SHELL" (which "sh")) (setenv "CPP" (string-append gcc "/bin/gcc -E " cppflags)) (setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags)) @@ -1177,10 +1115,7 @@ exec " gcc "/bin/" program ;; avoid -fstack-protector (setenv "libc_cv_ssp" "false") (substitute* "configure" - (("/bin/pwd") (string-append coreutils "/bin/pwd"))) - (setenv "C_INCLUDE_PATH" (string-append libc "/include" - headers "/include")) - (setenv "LIBRARY_PATH" (string-append libc "/lib")) + (("/bin/pwd") "pwd")) #t))) (replace 'install (lambda* (#:key outputs make-flags #:allow-other-keys) @@ -1240,22 +1175,7 @@ exec " gcc "/bin/" program (install-flags (cons "install" make-flags))) (apply invoke "make" install-flags) (copy-recursively kernel-headers out) - #t)))))))) - (native-search-paths ;; FIXME: move to glibc-mesboot0 - ;; Use the language-specific variables rather than 'CPATH' because they - ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'. - ;; The intent is to allow headers that are in the search path to be - ;; treated as "system headers" (headers exempt from warnings) just like - ;; the typical /usr/include headers on an FHS system. - (list (search-path-specification - (variable "C_INCLUDE_PATH") - (files '("include"))) - (search-path-specification - (variable "CPLUS_INCLUDE_PATH") - (files '("include"))) - (search-path-specification - (variable "LIBRARY_PATH") - (files '("lib"))))))) + #t)))))))))) (define gcc-mesboot (package @@ -1264,14 +1184,15 @@ exec " gcc "/bin/" program (version (package-version gcc-4.9)) (source (bootstrap-origin (package-source gcc-4.9))) (native-inputs `(("binutils" ,binutils-mesboot) + + ("libc" ,glibc-mesboot) + ("kernel-headers" ,%bootstrap-linux-libre-headers) ("gcc-wrapper" ,gcc-mesboot1-wrapper) ("gcc" ,gcc-mesboot1) - ("libc" ,glibc-mesboot) ("bash" ,%bootstrap-coreutils&co) ("coreutils" ,%bootstrap-coreutils&co) ("diffutils" ,diffutils-mesboot) - ("kernel-headers" ,%bootstrap-linux-libre-headers) ("make" ,make-mesboot))) (arguments `(#:validate-runpath? #f @@ -1314,34 +1235,7 @@ exec " gcc "/bin/" program "--disable-libstdcxx-pch" ;; for libcpp ... - "--disable-build-with-cxx"))) - ((#:phases phases) - `(modify-phases ,phases - (replace '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/4.7.4/include" - ":" kernel-headers "/include" - ":" glibc "/include" - ":" (getcwd) "/mpfr/src")) - (setenv "CPLUS_INCLUDE_PATH" (string-append - gcc "/lib/gcc-lib/i686-unknown-linux-gnu/4.7.4/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) "CPLUS_INCLUDE_PATH=~a\n" (getenv "CPLUS_INCLUDE_PATH")) - (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH")) - #t)))))))))) + "--disable-build-with-cxx")))))))) (define gcc-mesboot-wrapper ;; We need this so gcc-mesboot can be used to create shared binaries that |