[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
02/02: gnu: cross-base: Switch back to 'CROSS_C_INCLUDE_PATH' & co.
From: |
guix-commits |
Subject: |
02/02: gnu: cross-base: Switch back to 'CROSS_C_INCLUDE_PATH' & co. |
Date: |
Wed, 12 Feb 2020 14:40:38 -0500 (EST) |
civodul pushed a commit to branch core-updates
in repository guix.
commit 89da127035737bdf922bc566970c5506c2e01b00
Author: Ludovic Courtès <address@hidden>
AuthorDate: Wed Feb 12 18:29:19 2020 +0100
gnu: cross-base: Switch back to 'CROSS_C_INCLUDE_PATH' & co.
This is a followup to 2073b55e6b964cb8ca15e8c74cb32dac00f05f0d.
* gnu/build/cross-toolchain.scm (%gcc-include-paths): Switch back to
'C_INCLUDE_PATH' & co.
* gnu/packages/cross-base.scm (%gcc-include-paths): Likewise.
(cross-gcc-arguments): Remove 'treat-glibc-as-system-header' phase.
(cross-gcc)[native-inputs]: Reorder so that libc comes last.
[search-paths]: Add "include/c++" for 'CROSS_CPLUS_INCLUDE_PATH'.
* guix/build-system/gnu.scm (standard-cross-packages): Have "cross-gcc"
appear both for 'host and 'target.
---
gnu/build/cross-toolchain.scm | 9 ++++---
gnu/packages/cross-base.scm | 63 ++++++++++++++++++++++---------------------
guix/build-system/gnu.scm | 8 +++++-
3 files changed, 46 insertions(+), 34 deletions(-)
diff --git a/gnu/build/cross-toolchain.scm b/gnu/build/cross-toolchain.scm
index 6bdbdd5..9746be3 100644
--- a/gnu/build/cross-toolchain.scm
+++ b/gnu/build/cross-toolchain.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <address@hidden>
+;;; Copyright © 2013, 2014, 2015, 2016, 2020 Ludovic Courtès <address@hidden>
;;; Copyright © 2014, 2015, 2018 Mark H Weaver <address@hidden>
;;; Copyright © 2016 Jan Nieuwenhuizen <address@hidden>
;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <address@hidden>
@@ -38,8 +38,11 @@
(define %gcc-include-paths
;; Environment variables for header search paths.
- ;; Note: See <http://bugs.gnu.org/30756> for why not 'C_INCLUDE_PATH' & co.
- '("CPATH"))
+ ;; Note: See <http://bugs.gnu.org/22186> for why not 'CPATH'.
+ '("C_INCLUDE_PATH"
+ "CPLUS_INCLUDE_PATH"
+ "OBJC_INCLUDE_PATH"
+ "OBJCPLUS_INCLUDE_PATH"))
(define %gcc-cross-include-paths
;; Search path for target headers when cross-compiling.
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 13237fb..497d415 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès
<address@hidden>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2020 Ludovic Courtès
<address@hidden>
;;; Copyright © 2014, 2015, 2018 Mark H Weaver <address@hidden>
;;; Copyright © 2016, 2019 Jan (janneke) Nieuwenhuizen <address@hidden>
;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <address@hidden>
@@ -54,8 +54,11 @@
(define %gcc-include-paths
;; Environment variables for header search paths.
- ;; Note: See <http://bugs.gnu.org/30756> for why not 'C_INCLUDE_PATH' & co.
- '("CPATH"))
+ ;; Note: See <http://bugs.gnu.org/22186> for why not 'CPATH'.
+ '("C_INCLUDE_PATH"
+ "CPLUS_INCLUDE_PATH"
+ "OBJC_INCLUDE_PATH"
+ "OBJCPLUS_INCLUDE_PATH"))
(define %gcc-cross-include-paths
;; Search path for target headers when cross-compiling.
@@ -177,19 +180,7 @@ base compiler and using LIBC (which may be either a libc
package or #f.)"
,flags))
flags))
((#:phases phases)
- `(cross-gcc-build-phases
- ,target
- (modify-phases ,phases
- (add-before 'configure 'treat-glibc-as-system-header
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((libc (assoc-ref inputs "libc")))
- (when libc
- ;; For GCC6 and later, make sure Glibc is treated as a
"system
- ;; header" such that #include_next does the right thing.
- (for-each (lambda (var)
- (setenv var (string-append libc "/include")))
- '("CROSS_C_INCLUDE_PATH"
"CROSS_CPLUS_INCLUDE_PATH")))
- #t))))))))))
+ `(cross-gcc-build-phases ,target ,phases))))))
(define (cross-gcc-patches xgcc target)
"Return GCC patches needed for XGCC and TARGET."
@@ -262,27 +253,31 @@ target that libc."
#:binutils xbinutils))
("binutils-cross" ,xbinutils)
- ;; Call it differently so that the builder can check whether the "libc"
- ;; input is #f.
- ("libc-native" ,@(assoc-ref (%final-inputs) "libc"))
-
- ;; Remaining inputs.
,@(let ((inputs (append (package-inputs xgcc)
- (alist-delete "libc" (%final-inputs)))))
+ (fold alist-delete (%final-inputs)
+ '("libc" "libc:static"))
+
+ ;; Call it differently so that the builder can
+ ;; check whether the "libc" input is #f.
+ `(("libc-native"
+ ,@(assoc-ref (%final-inputs) "libc"))
+ ("libc-native:static"
+ ,@(assoc-ref (%final-inputs)
+ "libc:static"))))))
(cond
((target-mingw? target)
(if libc
- `(("libc" ,libc)
- ,@inputs)
- `(("mingw-source" ,(package-source mingw-w64))
- ,@inputs)))
+ `(,@inputs
+ ("libc" ,libc))
+ `(,@inputs
+ ("mingw-source" ,(package-source mingw-w64)))))
(libc
- `(("libc" ,libc)
+ `(,@inputs
+ ("libc" ,libc)
("libc:static" ,libc "static")
("xkernel-headers" ;the target headers
,@(assoc-ref (package-propagated-inputs libc)
- "kernel-headers"))
- ,@inputs))
+ "kernel-headers"))))
(else inputs)))))
(inputs '())
@@ -294,7 +289,15 @@ target that libc."
(map (lambda (variable)
(search-path-specification
(variable variable)
- (files '("include"))))
+
+ ;; Add 'include/c++' here so that <cstdlib>'s
+ ;; "#include_next <stdlib.h>" finds GCC's
+ ;; <stdlib.h>, not libc's.
+ (files (match variable
+ ("CROSS_CPLUS_INCLUDE_PATH"
+ '("include/c++" "include"))
+ (_
+ '("include"))))))
%gcc-cross-include-paths)))
(native-search-paths '())))
diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm
index 6e66f5f..d6613ed 100644
--- a/guix/build-system/gnu.scm
+++ b/guix/build-system/gnu.scm
@@ -460,13 +460,19 @@ is one of `host' or `target'."
(libc (module-ref cross 'cross-libc)))
(case kind
((host)
+ ;; Cross-GCC appears once here, so that it's in $PATH...
`(("cross-gcc" ,(gcc target
#:xbinutils (binutils target)
#:libc (libc target)))
("cross-binutils" ,(binutils target))))
((target)
(let ((libc (libc target)))
- `(("cross-libc" ,libc)
+ ;; ... and once here, so that libstdc++ & co. are in
+ ;; CROSS_CPLUS_INCLUDE_PATH, etc.
+ `(("cross-gcc" ,(gcc target
+ #:xbinutils (binutils target)
+ #:libc libc))
+ ("cross-libc" ,libc)
;; MinGW's libc doesn't have a "static" output.
,@(if (member "static" (package-outputs libc))