guix-commits
[Top][All Lists]
Advanced

[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))



reply via email to

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