gnu: gcc: Fix libstdc++ misconfiguration.

Fixes <https://bugs.gnu.org/42392>.
Reported by Maxim Cournoyer and Erik Garrison.

Until now, the generated <bits/c++config.h> would be incorrect (many
_GLIBCXX_HAVE macros would be undefined), which in turn would lead to
build failures for most C++ programs.

* gnu/packages/gcc.scm (gcc-6)[inputs]: Add LIBSTDC++-HEADERS.
(libstdc++, libstdc++-headers): New variables.
* gnu/packages/gcc.scm (gfortran): Change first argument to 'custom-gcc'
to remove dependency on LIBSTDC++-HEADERS.
This commit is contained in:
Ludovic Courtès 2020-07-24 09:56:25 +02:00
parent b1d3c122e1
commit 12dc9f58c4
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -514,6 +514,12 @@ (define-public gcc-6
(inputs
`(("isl" ,isl)
;; XXX: This gross hack allows us to have libstdc++'s <bits/c++config.h>
;; in the search path, thereby avoiding misconfiguration of libstdc++:
;; <https://bugs.gnu.org/42392>.
("libstdc++" ,libstdc++-headers)
,@(package-inputs gcc-4.7)))))
(define-public gcc-7
@ -607,6 +613,31 @@ (define-public (make-libstdc++ gcc)
(propagated-inputs '())
(synopsis "GNU C++ standard library")))
(define libstdc++
;; Libstdc++ matching the default GCC.
(make-libstdc++ gcc))
(define libstdc++-headers
;; XXX: This package is for internal use to work around
;; <https://bugs.gnu.org/42392> (see above). The main difference compared
;; to the libstdc++ headers that come with 'gcc' is that <bits/c++config.h>
;; is right under include/c++ and not under
;; include/c++/x86_64-unknown-linux-gnu (aka. GPLUSPLUS_TOOL_INCLUDE_DIR).
(package
(inherit libstdc++)
(name "libstdc++-headers")
(outputs '("out"))
(build-system trivial-build-system)
(arguments
'(#:builder (let* ((out (assoc-ref %outputs "out"))
(libstdc++ (assoc-ref %build-inputs "libstdc++")))
(mkdir out)
(mkdir (string-append out "/include"))
(symlink (string-append libstdc++ "/include")
(string-append out "/include/c++")))))
(inputs `(("libstdc++" ,libstdc++)))
(synopsis "Headers of GNU libstdc++")))
(define-public libstdc++-4.9
(make-libstdc++ gcc-4.9))
@ -689,7 +720,13 @@ (define %generic-search-paths
(define-public gfortran
(hidden-package
(custom-gcc gcc "gfortran" '("fortran")
(custom-gcc (package
(inherit gcc)
;; XXX: Remove LIBSTDC++-HEADERS from the inputs just to
;; avoid a rebuild of all the GFORTRAN dependents.
;; TODO: Remove this hack on the next rebuild cycle.
(inputs (alist-delete "libstdc++" (package-inputs gcc))))
"gfortran" '("fortran")
%generic-search-paths)))
(define-public gdc-10