gnu: gcc: Prefer language-specific variables over 'CPATH'.
Suggested by Andy Wingo <wingo@igalia.com>. Fixes <http://bugs.gnu.org/22186>. * gnu/packages/gcc.scm (gcc-4.7)[native-search-paths]: Remove 'CPATH'; add 'C_INCLUDE_PATH' and 'CPLUS_INCLUDE_PATH' instead. * gnu/packages/gcc.scm (custom-gcc): Add 'search-paths' parameter and honor it. (%generic-search-paths): New variable. (gfortran-4.8, gfortran-4.9, gfortran, gfortran-5, gccgo-4.8): Pass %GENERIC-SEARCH-PATHS to 'custom-gcc'. (gcj)[native-search-paths]: New field. (gcc-objc-4.8, gcc-objc++-4.8): Use 'OBJC_INCLUDE_PATH' and 'OBJCPLUS_INCLUDE_PATH', respectively.master
parent
8309c3899a
commit
009b53fd1c
|
@ -293,8 +293,16 @@ where the OS part is overloaded to denote a specific ABI---into GCC
|
||||||
%standard-phases))))
|
%standard-phases))))
|
||||||
|
|
||||||
(native-search-paths
|
(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
|
(list (search-path-specification
|
||||||
(variable "CPATH")
|
(variable "C_INCLUDE_PATH")
|
||||||
|
(files '("include")))
|
||||||
|
(search-path-specification
|
||||||
|
(variable "CPLUS_INCLUDE_PATH")
|
||||||
(files '("include")))
|
(files '("include")))
|
||||||
(search-path-specification
|
(search-path-specification
|
||||||
(variable "LIBRARY_PATH")
|
(variable "LIBRARY_PATH")
|
||||||
|
@ -408,13 +416,18 @@ using compilers other than GCC."
|
||||||
(define-public libiberty
|
(define-public libiberty
|
||||||
(make-libiberty gcc))
|
(make-libiberty gcc))
|
||||||
|
|
||||||
(define* (custom-gcc gcc name languages #:key (separate-lib-output? #t))
|
(define* (custom-gcc gcc name languages
|
||||||
"Return a custom version of GCC that supports LANGUAGES."
|
#:optional
|
||||||
|
(search-paths (package-native-search-paths gcc))
|
||||||
|
#:key (separate-lib-output? #t))
|
||||||
|
"Return a custom version of GCC that supports LANGUAGES. Use SEARCH-PATHS
|
||||||
|
as the 'native-search-paths' field."
|
||||||
(package (inherit gcc)
|
(package (inherit gcc)
|
||||||
(name name)
|
(name name)
|
||||||
(outputs (if separate-lib-output?
|
(outputs (if separate-lib-output?
|
||||||
(package-outputs gcc)
|
(package-outputs gcc)
|
||||||
(delete "lib" (package-outputs gcc))))
|
(delete "lib" (package-outputs gcc))))
|
||||||
|
(native-search-paths search-paths)
|
||||||
(arguments
|
(arguments
|
||||||
(substitute-keyword-arguments `(#:modules ((guix build gnu-build-system)
|
(substitute-keyword-arguments `(#:modules ((guix build gnu-build-system)
|
||||||
(guix build utils)
|
(guix build utils)
|
||||||
|
@ -428,20 +441,37 @@ using compilers other than GCC."
|
||||||
(remove (cut string-match "--enable-languages.*" <>)
|
(remove (cut string-match "--enable-languages.*" <>)
|
||||||
,flags)))))))
|
,flags)))))))
|
||||||
|
|
||||||
|
(define %generic-search-paths
|
||||||
|
;; This is the language-neutral search path for GCC. Entries in $CPATH are
|
||||||
|
;; not considered "system headers", which means GCC can raise warnings for
|
||||||
|
;; issues in those headers. 'CPATH' is the only one that works for
|
||||||
|
;; front-ends not in the C family.
|
||||||
|
(list (search-path-specification
|
||||||
|
(variable "CPATH")
|
||||||
|
(files '("include")))
|
||||||
|
(search-path-specification
|
||||||
|
(variable "LIBRARY_PATH")
|
||||||
|
(files '("lib" "lib64")))))
|
||||||
|
|
||||||
(define-public gfortran-4.8
|
(define-public gfortran-4.8
|
||||||
(custom-gcc gcc-4.8 "gfortran" '("fortran")))
|
(custom-gcc gcc-4.8 "gfortran" '("fortran")
|
||||||
|
%generic-search-paths))
|
||||||
|
|
||||||
(define-public gfortran-4.9
|
(define-public gfortran-4.9
|
||||||
(custom-gcc gcc-4.9 "gfortran" '("fortran")))
|
(custom-gcc gcc-4.9 "gfortran" '("fortran")
|
||||||
|
%generic-search-paths))
|
||||||
|
|
||||||
(define-public gfortran
|
(define-public gfortran
|
||||||
(custom-gcc gcc "gfortran" '("fortran")))
|
(custom-gcc gcc "gfortran" '("fortran")
|
||||||
|
%generic-search-paths))
|
||||||
|
|
||||||
(define-public gfortran-5
|
(define-public gfortran-5
|
||||||
(custom-gcc gcc-5 "gfortran" '("fortran")))
|
(custom-gcc gcc-5 "gfortran" '("fortran")
|
||||||
|
%generic-search-paths))
|
||||||
|
|
||||||
(define-public gccgo-4.8
|
(define-public gccgo-4.8
|
||||||
(custom-gcc gcc-4.8 "gccgo" '("go")
|
(custom-gcc gcc-4.8 "gccgo" '("go")
|
||||||
|
%generic-search-paths
|
||||||
;; Suppress the separate "lib" output, because otherwise the
|
;; Suppress the separate "lib" output, because otherwise the
|
||||||
;; "lib" and "out" outputs would refer to each other, creating
|
;; "lib" and "out" outputs would refer to each other, creating
|
||||||
;; a cyclic dependency. <http://debbugs.gnu.org/18101>
|
;; a cyclic dependency. <http://debbugs.gnu.org/18101>
|
||||||
|
@ -468,6 +498,8 @@ using compilers other than GCC."
|
||||||
(native-inputs
|
(native-inputs
|
||||||
`(("dejagnu" ,dejagnu)
|
`(("dejagnu" ,dejagnu)
|
||||||
,@(package-native-inputs gcc)))
|
,@(package-native-inputs gcc)))
|
||||||
|
(native-search-paths %generic-search-paths)
|
||||||
|
|
||||||
;; Suppress the separate "lib" output, because otherwise the
|
;; Suppress the separate "lib" output, because otherwise the
|
||||||
;; "lib" and "out" outputs would refer to each other, creating
|
;; "lib" and "out" outputs would refer to each other, creating
|
||||||
;; a cyclic dependency. <http://debbugs.gnu.org/18101>
|
;; a cyclic dependency. <http://debbugs.gnu.org/18101>
|
||||||
|
@ -551,10 +583,22 @@ using compilers other than GCC."
|
||||||
"1k9lgm3qamf6zy534pa2zwskr8mpiqrngbv1vw9j4y1ghrdyf1lm"))))
|
"1k9lgm3qamf6zy534pa2zwskr8mpiqrngbv1vw9j4y1ghrdyf1lm"))))
|
||||||
|
|
||||||
(define-public gcc-objc-4.8
|
(define-public gcc-objc-4.8
|
||||||
(custom-gcc gcc-4.8 "gcc-objc" '("objc")))
|
(custom-gcc gcc-4.8 "gcc-objc" '("objc")
|
||||||
|
(list (search-path-specification
|
||||||
|
(variable "OBJC_INCLUDE_PATH")
|
||||||
|
(files '("include")))
|
||||||
|
(search-path-specification
|
||||||
|
(variable "LIBRARY_PATH")
|
||||||
|
(files '("lib" "lib64"))))))
|
||||||
|
|
||||||
(define-public gcc-objc++-4.8
|
(define-public gcc-objc++-4.8
|
||||||
(custom-gcc gcc-4.8 "gcc-objc++" '("obj-c++")))
|
(custom-gcc gcc-4.8 "gcc-objc++" '("obj-c++")
|
||||||
|
(list (search-path-specification
|
||||||
|
(variable "OBJCPLUS_INCLUDE_PATH")
|
||||||
|
(files '("include")))
|
||||||
|
(search-path-specification
|
||||||
|
(variable "LIBRARY_PATH")
|
||||||
|
(files '("lib" "lib64"))))))
|
||||||
|
|
||||||
(define (make-libstdc++-doc gcc)
|
(define (make-libstdc++-doc gcc)
|
||||||
"Return a package with the libstdc++ documentation for GCC."
|
"Return a package with the libstdc++ documentation for GCC."
|
||||||
|
|
Reference in New Issue