gcc: Handle CPATH and LIBRARY_PATH purely in Nix

This commit is contained in:
John Ericson 2017-12-02 12:26:49 -05:00
parent d4595b38e9
commit d96cf0f46c
8 changed files with 240 additions and 235 deletions

View File

@ -339,18 +339,21 @@ stdenv.mkDerivation ({
LD = "ld"; LD = "ld";
CC = "gcc"; CC = "gcc";
# Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find # Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find the
# the library headers and binaries, regarless of the language being # library headers and binaries, regarless of the language being compiled.
# compiled. #
# Note: When building the Java AWT GTK+ peer, the build system doesn't honor
# Note: When building the Java AWT GTK+ peer, the build system doesn't # `--with-gmp' et al., e.g., when building
# honor `--with-gmp' et al., e.g., when building # `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just add
# `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just # them to $CPATH and $LIBRARY_PATH in this case.
# add them to $CPATH and $LIBRARY_PATH in this case.
# #
# Likewise, the LTO code doesn't find zlib. # Likewise, the LTO code doesn't find zlib.
#
# Cross-compiling, we need gcc not to read ./specs in order to build the g++
# compiler (after the specs for the cross-gcc are created). Having
# LIBRARY_PATH= makes gcc read the specs from ., and the build breaks.
CPATH = makeSearchPathOutput "dev" "include" ([] CPATH = optionals (targetPlatform == hostPlatform) (makeSearchPathOutput "dev" "include" ([]
++ optional (zlib != null) zlib ++ optional (zlib != null) zlib
++ optional langJava boehmgc ++ optional langJava boehmgc
++ optionals javaAwtGtk xlibs ++ optionals javaAwtGtk xlibs
@ -360,41 +363,39 @@ stdenv.mkDerivation ({
# On GNU/Hurd glibc refers to Mach & Hurd # On GNU/Hurd glibc refers to Mach & Hurd
# headers. # headers.
++ optionals (libcCross != null && ++ optionals (libcCross != null && libcCross ? "propagatedBuildInputs" )
hasAttr "propagatedBuildInputs" libcCross) libcCross.propagatedBuildInputs
libcCross.propagatedBuildInputs); ));
LIBRARY_PATH = makeLibraryPath ([] LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath ([]
++ optional (zlib != null) zlib ++ optional (zlib != null) zlib
++ optional langJava boehmgc ++ optional langJava boehmgc
++ optionals javaAwtGtk xlibs ++ optionals javaAwtGtk xlibs
++ optionals javaAwtGtk [ gmp mpfr ] ++ optionals javaAwtGtk [ gmp mpfr ]
++ optional (libpthread != null) libpthread); ++ optional (libpthread != null) libpthread)
);
EXTRA_TARGET_CFLAGS = EXTRA_TARGET_FLAGS = optionals
if targetPlatform != hostPlatform && libcCross != null then [ (targetPlatform != hostPlatform && libcCross != null)
"-idirafter ${libcCross.dev}/include" ([
] "-idirafter ${libcCross.dev}/include"
++ optionals (! crossStageStatic) [ ] ++ optionals (! crossStageStatic) [
"-B${libcCross.out}/lib" "-B${libcCross.out}/lib"
] ]);
else null;
EXTRA_TARGET_LDFLAGS = EXTRA_TARGET_LDFLAGS = optionals
if targetPlatform != hostPlatform && libcCross != null then [ (targetPlatform != hostPlatform && libcCross != null)
"-Wl,-L${libcCross.out}/lib" ([
] "-Wl,-L${libcCross.out}/lib"
++ (if crossStageStatic then [ ] ++ (if crossStageStatic then [
"-B${libcCross.out}/lib" "-B${libcCross.out}/lib"
] else [ ] else [
"-Wl,-rpath,${libcCross.out}/lib" "-Wl,-rpath,${libcCross.out}/lib"
"-Wl,-rpath-link,${libcCross.out}/lib" "-Wl,-rpath-link,${libcCross.out}/lib"
]) ]) ++ optionals (libpthreadCross != null) [
++ optionals (libpthreadCross != null) [ "-L${libpthreadCross}/lib"
"-L${libpthreadCross}/lib" "-Wl,${libpthreadCross.TARGET_LDFLAGS}"
"-Wl,${libpthreadCross.TARGET_LDFLAGS}" ]);
]
else null;
passthru = { inherit langC langCC langAda langFortran langVhdl passthru = { inherit langC langCC langAda langFortran langVhdl
enableMultilib version; isGNU = true; }; enableMultilib version; isGNU = true; };

View File

@ -413,18 +413,21 @@ stdenv.mkDerivation ({
# http://gcc.gnu.org/install/specific.html#x86-64-x-solaris210 # http://gcc.gnu.org/install/specific.html#x86-64-x-solaris210
CC = if stdenv.system == "x86_64-solaris" then "gcc -m64" else "gcc"; CC = if stdenv.system == "x86_64-solaris" then "gcc -m64" else "gcc";
# Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find # Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find the
# the library headers and binaries, regarless of the language being # library headers and binaries, regarless of the language being compiled.
# compiled. #
# Note: When building the Java AWT GTK+ peer, the build system doesn't honor
# Note: When building the Java AWT GTK+ peer, the build system doesn't # `--with-gmp' et al., e.g., when building
# honor `--with-gmp' et al., e.g., when building # `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just add
# `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just # them to $CPATH and $LIBRARY_PATH in this case.
# add them to $CPATH and $LIBRARY_PATH in this case.
# #
# Likewise, the LTO code doesn't find zlib. # Likewise, the LTO code doesn't find zlib.
#
# Cross-compiling, we need gcc not to read ./specs in order to build the g++
# compiler (after the specs for the cross-gcc are created). Having
# LIBRARY_PATH= makes gcc read the specs from ., and the build breaks.
CPATH = makeSearchPathOutput "dev" "include" ([] CPATH = optionals (targetPlatform == hostPlatform) (makeSearchPathOutput "dev" "include" ([]
++ optional (zlib != null) zlib ++ optional (zlib != null) zlib
++ optional langJava boehmgc ++ optional langJava boehmgc
++ optionals javaAwtGtk xlibs ++ optionals javaAwtGtk xlibs
@ -435,39 +438,38 @@ stdenv.mkDerivation ({
# On GNU/Hurd glibc refers to Mach & Hurd # On GNU/Hurd glibc refers to Mach & Hurd
# headers. # headers.
++ optionals (libcCross != null && libcCross ? "propagatedBuildInputs" ) ++ optionals (libcCross != null && libcCross ? "propagatedBuildInputs" )
libcCross.propagatedBuildInputs); libcCross.propagatedBuildInputs
));
LIBRARY_PATH = makeLibraryPath ([] LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath ([]
++ optional (zlib != null) zlib ++ optional (zlib != null) zlib
++ optional langJava boehmgc ++ optional langJava boehmgc
++ optionals javaAwtGtk xlibs ++ optionals javaAwtGtk xlibs
++ optionals javaAwtGtk [ gmp mpfr ] ++ optionals javaAwtGtk [ gmp mpfr ]
++ optional (libpthread != null) libpthread); ++ optional (libpthread != null) libpthread)
);
EXTRA_TARGET_CFLAGS = EXTRA_TARGET_FLAGS = optionals
if targetPlatform != hostPlatform && libcCross != null then [ (targetPlatform != hostPlatform && libcCross != null)
"-idirafter ${libcCross.dev}/include" ([
] "-idirafter ${libcCross.dev}/include"
++ optionals (! crossStageStatic) [ ] ++ optionals (! crossStageStatic) [
"-B${libcCross.out}/lib" "-B${libcCross.out}/lib"
] ]);
else null;
EXTRA_TARGET_LDFLAGS = EXTRA_TARGET_LDFLAGS = optionals
if targetPlatform != hostPlatform && libcCross != null then [ (targetPlatform != hostPlatform && libcCross != null)
"-Wl,-L${libcCross.out}/lib" ([
] "-Wl,-L${libcCross.out}/lib"
++ (if crossStageStatic then [ ] ++ (if crossStageStatic then [
"-B${libcCross.out}/lib" "-B${libcCross.out}/lib"
] else [ ] else [
"-Wl,-rpath,${libcCross.out}/lib" "-Wl,-rpath,${libcCross.out}/lib"
"-Wl,-rpath-link,${libcCross.out}/lib" "-Wl,-rpath-link,${libcCross.out}/lib"
]) ]) ++ optionals (libpthreadCross != null) [
++ optionals (libpthreadCross != null) [ "-L${libpthreadCross}/lib"
"-L${libpthreadCross}/lib" "-Wl,${libpthreadCross.TARGET_LDFLAGS}"
"-Wl,${libpthreadCross.TARGET_LDFLAGS}" ]);
]
else null;
passthru = passthru =
{ inherit langC langCC langObjC langObjCpp langAda langFortran langVhdl langGo version; isGNU = true; }; { inherit langC langCC langObjC langObjCpp langAda langFortran langVhdl langGo version; isGNU = true; };

View File

@ -419,18 +419,21 @@ stdenv.mkDerivation ({
# http://gcc.gnu.org/install/specific.html#x86-64-x-solaris210 # http://gcc.gnu.org/install/specific.html#x86-64-x-solaris210
CC = if stdenv.system == "x86_64-solaris" then "gcc -m64" else "gcc"; CC = if stdenv.system == "x86_64-solaris" then "gcc -m64" else "gcc";
# Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find # Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find the
# the library headers and binaries, regarless of the language being # library headers and binaries, regarless of the language being compiled.
# compiled. #
# Note: When building the Java AWT GTK+ peer, the build system doesn't honor
# Note: When building the Java AWT GTK+ peer, the build system doesn't # `--with-gmp' et al., e.g., when building
# honor `--with-gmp' et al., e.g., when building # `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just add
# `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just # them to $CPATH and $LIBRARY_PATH in this case.
# add them to $CPATH and $LIBRARY_PATH in this case.
# #
# Likewise, the LTO code doesn't find zlib. # Likewise, the LTO code doesn't find zlib.
#
# Cross-compiling, we need gcc not to read ./specs in order to build the g++
# compiler (after the specs for the cross-gcc are created). Having
# LIBRARY_PATH= makes gcc read the specs from ., and the build breaks.
CPATH = makeSearchPathOutput "dev" "include" ([] CPATH = optionals (targetPlatform == hostPlatform) (makeSearchPathOutput "dev" "include" ([]
++ optional (zlib != null) zlib ++ optional (zlib != null) zlib
++ optional langJava boehmgc ++ optional langJava boehmgc
++ optionals javaAwtGtk xlibs ++ optionals javaAwtGtk xlibs
@ -441,39 +444,38 @@ stdenv.mkDerivation ({
# On GNU/Hurd glibc refers to Mach & Hurd # On GNU/Hurd glibc refers to Mach & Hurd
# headers. # headers.
++ optionals (libcCross != null && libcCross ? "propagatedBuildInputs" ) ++ optionals (libcCross != null && libcCross ? "propagatedBuildInputs" )
libcCross.propagatedBuildInputs); libcCross.propagatedBuildInputs
));
LIBRARY_PATH = makeLibraryPath ([] LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath ([]
++ optional (zlib != null) zlib ++ optional (zlib != null) zlib
++ optional langJava boehmgc ++ optional langJava boehmgc
++ optionals javaAwtGtk xlibs ++ optionals javaAwtGtk xlibs
++ optionals javaAwtGtk [ gmp mpfr ] ++ optionals javaAwtGtk [ gmp mpfr ]
++ optional (libpthread != null) libpthread); ++ optional (libpthread != null) libpthread)
);
EXTRA_TARGET_CFLAGS = EXTRA_TARGET_FLAGS = optionals
if targetPlatform != hostPlatform && libcCross != null then [ (targetPlatform != hostPlatform && libcCross != null)
"-idirafter ${libcCross.dev}/include" ([
] "-idirafter ${libcCross.dev}/include"
++ optionals (! crossStageStatic) [ ] ++ optionals (! crossStageStatic) [
"-B${libcCross.out}/lib" "-B${libcCross.out}/lib"
] ]);
else null;
EXTRA_TARGET_LDFLAGS = EXTRA_TARGET_LDFLAGS = optionals
if targetPlatform != hostPlatform && libcCross != null then [ (targetPlatform != hostPlatform && libcCross != null)
"-Wl,-L${libcCross.out}/lib" ([
] "-Wl,-L${libcCross.out}/lib"
++ (if crossStageStatic then [ ] ++ (if crossStageStatic then [
"-B${libcCross.out}/lib" "-B${libcCross.out}/lib"
] else [ ] else [
"-Wl,-rpath,${libcCross.out}/lib" "-Wl,-rpath,${libcCross.out}/lib"
"-Wl,-rpath-link,${libcCross.out}/lib" "-Wl,-rpath-link,${libcCross.out}/lib"
]) ]) ++ optionals (libpthreadCross != null) [
++ optionals (libpthreadCross != null) [ "-L${libpthreadCross}/lib"
"-L${libpthreadCross}/lib" "-Wl,${libpthreadCross.TARGET_LDFLAGS}"
"-Wl,${libpthreadCross.TARGET_LDFLAGS}" ]);
]
else null;
passthru = passthru =
{ inherit langC langCC langObjC langObjCpp langAda langFortran langVhdl langGo version; isGNU = true; }; { inherit langC langCC langObjC langObjCpp langAda langFortran langVhdl langGo version; isGNU = true; };

View File

@ -434,18 +434,21 @@ stdenv.mkDerivation ({
# http://gcc.gnu.org/install/specific.html#x86-64-x-solaris210 # http://gcc.gnu.org/install/specific.html#x86-64-x-solaris210
CC = if stdenv.system == "x86_64-solaris" then "gcc -m64" else "gcc"; CC = if stdenv.system == "x86_64-solaris" then "gcc -m64" else "gcc";
# Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find # Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find the
# the library headers and binaries, regarless of the language being # library headers and binaries, regarless of the language being compiled.
# compiled. #
# Note: When building the Java AWT GTK+ peer, the build system doesn't honor
# Note: When building the Java AWT GTK+ peer, the build system doesn't # `--with-gmp' et al., e.g., when building
# honor `--with-gmp' et al., e.g., when building # `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just add
# `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just # them to $CPATH and $LIBRARY_PATH in this case.
# add them to $CPATH and $LIBRARY_PATH in this case.
# #
# Likewise, the LTO code doesn't find zlib. # Likewise, the LTO code doesn't find zlib.
#
# Cross-compiling, we need gcc not to read ./specs in order to build the g++
# compiler (after the specs for the cross-gcc are created). Having
# LIBRARY_PATH= makes gcc read the specs from ., and the build breaks.
CPATH = makeSearchPathOutput "dev" "include" ([] CPATH = optionals (targetPlatform == hostPlatform) (makeSearchPathOutput "dev" "include" ([]
++ optional (zlib != null) zlib ++ optional (zlib != null) zlib
++ optionals langJava [ boehmgc ] ++ optionals langJava [ boehmgc ]
++ optionals javaAwtGtk xlibs ++ optionals javaAwtGtk xlibs
@ -456,39 +459,38 @@ stdenv.mkDerivation ({
# On GNU/Hurd glibc refers to Mach & Hurd # On GNU/Hurd glibc refers to Mach & Hurd
# headers. # headers.
++ optionals (libcCross != null && libcCross ? "propagatedBuildInputs" ) ++ optionals (libcCross != null && libcCross ? "propagatedBuildInputs" )
libcCross.propagatedBuildInputs); libcCross.propagatedBuildInputs
));
LIBRARY_PATH = makeLibraryPath ([] LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath ([]
++ optional (zlib != null) zlib ++ optional (zlib != null) zlib
++ optional langJava boehmgc ++ optional langJava boehmgc
++ optionals javaAwtGtk xlibs ++ optionals javaAwtGtk xlibs
++ optionals javaAwtGtk [ gmp mpfr ] ++ optionals javaAwtGtk [ gmp mpfr ]
++ optional (libpthread != null) libpthread); ++ optional (libpthread != null) libpthread)
);
EXTRA_TARGET_CFLAGS = EXTRA_TARGET_FLAGS = optionals
if targetPlatform != hostPlatform && libcCross != null then [ (targetPlatform != hostPlatform && libcCross != null)
"-idirafter ${getDev libcCross}/include" ([
] "-idirafter ${getDev libcCross}/include"
++ optionals (! crossStageStatic) [ ] ++ optionals (! crossStageStatic) [
"-B${libcCross.out}/lib" "-B${libcCross.out}/lib"
] ]);
else null;
EXTRA_TARGET_LDFLAGS = EXTRA_TARGET_LDFLAGS = optionals
if targetPlatform != hostPlatform && libcCross != null then [ (targetPlatform != hostPlatform && libcCross != null)
"-Wl,-L${libcCross.out}/lib" ([
] "-Wl,-L${libcCross.out}/lib"
++ (if crossStageStatic then [ ] ++ (if crossStageStatic then [
"-B${libcCross.out}/lib" "-B${libcCross.out}/lib"
] else [ ] else [
"-Wl,-rpath,${libcCross.out}/lib" "-Wl,-rpath,${libcCross.out}/lib"
"-Wl,-rpath-link,${libcCross.out}/lib" "-Wl,-rpath-link,${libcCross.out}/lib"
]) ]) ++ optionals (libpthreadCross != null) [
++ optionals (libpthreadCross != null) [ "-L${libpthreadCross}/lib"
"-L${libpthreadCross}/lib" "-Wl,${libpthreadCross.TARGET_LDFLAGS}"
"-Wl,${libpthreadCross.TARGET_LDFLAGS}" ]);
]
else null;
passthru = passthru =
{ inherit langC langCC langObjC langObjCpp langAda langFortran langVhdl langGo version; isGNU = true; }; { inherit langC langCC langObjC langObjCpp langAda langFortran langVhdl langGo version; isGNU = true; };

View File

@ -416,18 +416,21 @@ stdenv.mkDerivation ({
# http://gcc.gnu.org/install/specific.html#x86-64-x-solaris210 # http://gcc.gnu.org/install/specific.html#x86-64-x-solaris210
CC = if stdenv.system == "x86_64-solaris" then "gcc -m64" else "gcc"; CC = if stdenv.system == "x86_64-solaris" then "gcc -m64" else "gcc";
# Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find # Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find the
# the library headers and binaries, regarless of the language being # library headers and binaries, regarless of the language being compiled.
# compiled. #
# Note: When building the Java AWT GTK+ peer, the build system doesn't honor
# Note: When building the Java AWT GTK+ peer, the build system doesn't # `--with-gmp' et al., e.g., when building
# honor `--with-gmp' et al., e.g., when building # `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just add
# `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just # them to $CPATH and $LIBRARY_PATH in this case.
# add them to $CPATH and $LIBRARY_PATH in this case.
# #
# Likewise, the LTO code doesn't find zlib. # Likewise, the LTO code doesn't find zlib.
#
# Cross-compiling, we need gcc not to read ./specs in order to build the g++
# compiler (after the specs for the cross-gcc are created). Having
# LIBRARY_PATH= makes gcc read the specs from ., and the build breaks.
CPATH = makeSearchPathOutput "dev" "include" ([] CPATH = optionals (targetPlatform == hostPlatform) (makeSearchPathOutput "dev" "include" ([]
++ optional (zlib != null) zlib ++ optional (zlib != null) zlib
++ optional langJava boehmgc ++ optional langJava boehmgc
++ optionals javaAwtGtk xlibs ++ optionals javaAwtGtk xlibs
@ -437,40 +440,39 @@ stdenv.mkDerivation ({
# On GNU/Hurd glibc refers to Mach & Hurd # On GNU/Hurd glibc refers to Mach & Hurd
# headers. # headers.
++ optionals (libcCross != null && libcCross ? "propagatedBuildInputs") ++ optionals (libcCross != null && libcCross ? "propagatedBuildInputs" )
libcCross.propagatedBuildInputs); libcCross.propagatedBuildInputs
));
LIBRARY_PATH = makeLibraryPath ([] LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath ([]
++ optional (zlib != null) zlib ++ optional (zlib != null) zlib
++ optional langJava boehmgc ++ optional langJava boehmgc
++ optionals javaAwtGtk xlibs ++ optionals javaAwtGtk xlibs
++ optionals javaAwtGtk [ gmp mpfr ] ++ optionals javaAwtGtk [ gmp mpfr ]
++ optional (libpthread != null) libpthread); ++ optional (libpthread != null) libpthread)
);
EXTRA_TARGET_CFLAGS = EXTRA_TARGET_FLAGS = optionals
if targetPlatform != hostPlatform && libcCross != null then [ (targetPlatform != hostPlatform && libcCross != null)
"-idirafter ${getDev libcCross}/include" ([
] "-idirafter ${getDev libcCross}/include"
++ optionals (! crossStageStatic) [ ] ++ optionals (! crossStageStatic) [
"-B${libcCross.out}/lib" "-B${libcCross.out}/lib"
] ]);
else null;
EXTRA_TARGET_LDFLAGS = EXTRA_TARGET_LDFLAGS = optionals
if targetPlatform != hostPlatform && libcCross != null then [ (targetPlatform != hostPlatform && libcCross != null)
"-Wl,-L${libcCross.out}/lib" ([
] "-Wl,-L${libcCross.out}/lib"
++ (if crossStageStatic then [ ] ++ (if crossStageStatic then [
"-B${libcCross.out}/lib" "-B${libcCross.out}/lib"
] else [ ] else [
"-Wl,-rpath,${libcCross.out}/lib" "-Wl,-rpath,${libcCross.out}/lib"
"-Wl,-rpath-link,${libcCross.out}/lib" "-Wl,-rpath-link,${libcCross.out}/lib"
]) ]) ++ optionals (libpthreadCross != null) [
++ optionals (libpthreadCross != null) [ "-L${libpthreadCross}/lib"
"-L${libpthreadCross}/lib" "-Wl,${libpthreadCross.TARGET_LDFLAGS}"
"-Wl,${libpthreadCross.TARGET_LDFLAGS}" ]);
]
else null;
passthru = passthru =
{ inherit langC langCC langObjC langObjCpp langAda langFortran langVhdl langGo version; isGNU = true; }; { inherit langC langCC langObjC langObjCpp langAda langFortran langVhdl langGo version; isGNU = true; };

View File

@ -417,18 +417,21 @@ stdenv.mkDerivation ({
# http://gcc.gnu.org/install/specific.html#x86-64-x-solaris210 # http://gcc.gnu.org/install/specific.html#x86-64-x-solaris210
CC = if stdenv.system == "x86_64-solaris" then "gcc -m64" else "gcc"; CC = if stdenv.system == "x86_64-solaris" then "gcc -m64" else "gcc";
# Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find # Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find the
# the library headers and binaries, regarless of the language being # library headers and binaries, regarless of the language being compiled.
# compiled. #
# Note: When building the Java AWT GTK+ peer, the build system doesn't honor
# Note: When building the Java AWT GTK+ peer, the build system doesn't # `--with-gmp' et al., e.g., when building
# honor `--with-gmp' et al., e.g., when building # `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just add
# `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just # them to $CPATH and $LIBRARY_PATH in this case.
# add them to $CPATH and $LIBRARY_PATH in this case.
# #
# Likewise, the LTO code doesn't find zlib. # Likewise, the LTO code doesn't find zlib.
#
# Cross-compiling, we need gcc not to read ./specs in order to build the g++
# compiler (after the specs for the cross-gcc are created). Having
# LIBRARY_PATH= makes gcc read the specs from ., and the build breaks.
CPATH = makeSearchPathOutput "dev" "include" ([] CPATH = optionals (targetPlatform == hostPlatform) (makeSearchPathOutput "dev" "include" ([]
++ optional (zlib != null) zlib ++ optional (zlib != null) zlib
++ optional langJava boehmgc ++ optional langJava boehmgc
++ optionals javaAwtGtk xlibs ++ optionals javaAwtGtk xlibs
@ -438,40 +441,39 @@ stdenv.mkDerivation ({
# On GNU/Hurd glibc refers to Mach & Hurd # On GNU/Hurd glibc refers to Mach & Hurd
# headers. # headers.
++ optionals (libcCross != null && libcCross ? "propagatedBuildInputs") ++ optionals (libcCross != null && libcCross ? "propagatedBuildInputs" )
libcCross.propagatedBuildInputs); libcCross.propagatedBuildInputs
));
LIBRARY_PATH = makeLibraryPath ([] LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath ([]
++ optional (zlib != null) zlib ++ optional (zlib != null) zlib
++ optional langJava boehmgc ++ optional langJava boehmgc
++ optionals javaAwtGtk xlibs ++ optionals javaAwtGtk xlibs
++ optionals javaAwtGtk [ gmp mpfr ] ++ optionals javaAwtGtk [ gmp mpfr ]
++ optional (libpthread != null) libpthread); ++ optional (libpthread != null) libpthread)
);
EXTRA_TARGET_CFLAGS = EXTRA_TARGET_FLAGS = optionals
if targetPlatform != hostPlatform && libcCross != null then [ (targetPlatform != hostPlatform && libcCross != null)
"-idirafter ${getDev libcCross}/include" ([
] "-idirafter ${getDev libcCross}/include"
++ optionals (! crossStageStatic) [ ] ++ optionals (! crossStageStatic) [
"-B${libcCross.out}/lib" "-B${libcCross.out}/lib"
] ]);
else null;
EXTRA_TARGET_LDFLAGS = EXTRA_TARGET_LDFLAGS = optionals
if targetPlatform != hostPlatform && libcCross != null then [ (targetPlatform != hostPlatform && libcCross != null)
"-Wl,-L${libcCross.out}/lib" ([
] "-Wl,-L${libcCross.out}/lib"
++ (if crossStageStatic then [ ] ++ (if crossStageStatic then [
"-B${libcCross.out}/lib" "-B${libcCross.out}/lib"
] else [ ] else [
"-Wl,-rpath,${libcCross.out}/lib" "-Wl,-rpath,${libcCross.out}/lib"
"-Wl,-rpath-link,${libcCross.out}/lib" "-Wl,-rpath-link,${libcCross.out}/lib"
]) ]) ++ optionals (libpthreadCross != null) [
++ optionals (libpthreadCross != null) [ "-L${libpthreadCross}/lib"
"-L${libpthreadCross}/lib" "-Wl,${libpthreadCross.TARGET_LDFLAGS}"
"-Wl,${libpthreadCross.TARGET_LDFLAGS}" ]);
]
else null;
passthru = passthru =
{ inherit langC langCC langObjC langObjCpp langAda langFortran langVhdl langGo version; isGNU = true; }; { inherit langC langCC langObjC langObjCpp langAda langFortran langVhdl langGo version; isGNU = true; };

View File

@ -22,10 +22,10 @@ fi
# GCC interprets empty paths as ".", which we don't want. # GCC interprets empty paths as ".", which we don't want.
if test -z "$CPATH"; then unset CPATH; fi if test -z "${CPATH-}"; then unset CPATH; fi
if test -z "$LIBRARY_PATH"; then unset LIBRARY_PATH; fi if test -z "${LIBRARY_PATH-}"; then unset LIBRARY_PATH; fi
echo "\$CPATH is \`$CPATH'" echo "\$CPATH is \`${CPATH-}'"
echo "\$LIBRARY_PATH is \`$LIBRARY_PATH'" echo "\$LIBRARY_PATH is \`${LIBRARY_PATH-}'"
if test "$noSysDirs" = "1"; then if test "$noSysDirs" = "1"; then
@ -82,15 +82,7 @@ if test "$noSysDirs" = "1"; then
done done
done done
if test -n "${targetConfig-}"; then if test -z "${targetConfig-}"; then
# Cross-compiling, we need gcc not to read ./specs in order to build the
# g++ compiler (after the specs for the cross-gcc are created). Having
# LIBRARY_PATH= makes gcc read the specs from ., and the build
# breaks. Having this variable comes from the default.nix code to bring
# gcj in.
unset LIBRARY_PATH
unset CPATH
else
# host = target, so the flags are the same # host = target, so the flags are the same
EXTRA_TARGET_FLAGS="$EXTRA_FLAGS" EXTRA_TARGET_FLAGS="$EXTRA_FLAGS"
EXTRA_TARGET_LDFLAGS="$EXTRA_LDFLAGS" EXTRA_TARGET_LDFLAGS="$EXTRA_LDFLAGS"

View File

@ -417,18 +417,21 @@ stdenv.mkDerivation ({
# http://gcc.gnu.org/install/specific.html#x86-64-x-solaris210 # http://gcc.gnu.org/install/specific.html#x86-64-x-solaris210
CC = if stdenv.system == "x86_64-solaris" then "gcc -m64" else "gcc"; CC = if stdenv.system == "x86_64-solaris" then "gcc -m64" else "gcc";
# Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find # Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find the
# the library headers and binaries, regarless of the language being # library headers and binaries, regarless of the language being compiled.
# compiled. #
# Note: When building the Java AWT GTK+ peer, the build system doesn't honor
# Note: When building the Java AWT GTK+ peer, the build system doesn't # `--with-gmp' et al., e.g., when building
# honor `--with-gmp' et al., e.g., when building # `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just add
# `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just # them to $CPATH and $LIBRARY_PATH in this case.
# add them to $CPATH and $LIBRARY_PATH in this case.
# #
# Likewise, the LTO code doesn't find zlib. # Likewise, the LTO code doesn't find zlib.
#
# Cross-compiling, we need gcc not to read ./specs in order to build the g++
# compiler (after the specs for the cross-gcc are created). Having
# LIBRARY_PATH= makes gcc read the specs from ., and the build breaks.
CPATH = makeSearchPathOutput "dev" "include" ([] CPATH = optionals (targetPlatform == hostPlatform) (makeSearchPathOutput "dev" "include" ([]
++ optional (zlib != null) zlib ++ optional (zlib != null) zlib
++ optional langJava boehmgc ++ optional langJava boehmgc
++ optionals javaAwtGtk xlibs ++ optionals javaAwtGtk xlibs
@ -438,40 +441,39 @@ stdenv.mkDerivation ({
# On GNU/Hurd glibc refers to Mach & Hurd # On GNU/Hurd glibc refers to Mach & Hurd
# headers. # headers.
++ optionals (libcCross != null && libcCross ? "propagatedBuildInputs") ++ optionals (libcCross != null && libcCross ? "propagatedBuildInputs" )
libcCross.propagatedBuildInputs); libcCross.propagatedBuildInputs
));
LIBRARY_PATH = makeLibraryPath ([] LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath ([]
++ optional (zlib != null) zlib ++ optional (zlib != null) zlib
++ optional langJava boehmgc ++ optional langJava boehmgc
++ optionals javaAwtGtk xlibs ++ optionals javaAwtGtk xlibs
++ optionals javaAwtGtk [ gmp mpfr ] ++ optionals javaAwtGtk [ gmp mpfr ]
++ optional (libpthread != null) libpthread); ++ optional (libpthread != null) libpthread)
);
EXTRA_TARGET_CFLAGS = EXTRA_TARGET_FLAGS = optionals
if targetPlatform != hostPlatform && libcCross != null then [ (targetPlatform != hostPlatform && libcCross != null)
"-idirafter ${getDev libcCross}/include" ([
] "-idirafter ${getDev libcCross}/include"
++ optionals (! crossStageStatic) [ ] ++ optionals (! crossStageStatic) [
"-B${libcCross.out}/lib" "-B${libcCross.out}/lib"
] ]);
else null;
EXTRA_TARGET_LDFLAGS = EXTRA_TARGET_LDFLAGS = optionals
if targetPlatform != hostPlatform && libcCross != null then [ (targetPlatform != hostPlatform && libcCross != null)
"-Wl,-L${libcCross.out}/lib" ([
] "-Wl,-L${libcCross.out}/lib"
++ (if crossStageStatic then [ ] ++ (if crossStageStatic then [
"-B${libcCross.out}/lib" "-B${libcCross.out}/lib"
] else [ ] else [
"-Wl,-rpath,${libcCross.out}/lib" "-Wl,-rpath,${libcCross.out}/lib"
"-Wl,-rpath-link,${libcCross.out}/lib" "-Wl,-rpath-link,${libcCross.out}/lib"
]) ]) ++ optionals (libpthreadCross != null) [
++ optionals (libpthreadCross != null) [ "-L${libpthreadCross}/lib"
"-L${libpthreadCross}/lib" "-Wl,${libpthreadCross.TARGET_LDFLAGS}"
"-Wl,${libpthreadCross.TARGET_LDFLAGS}" ]);
]
else null;
passthru = passthru =
{ inherit langC langCC langObjC langObjCpp langAda langFortran langVhdl langGo version; isGNU = true; }; { inherit langC langCC langObjC langObjCpp langAda langFortran langVhdl langGo version; isGNU = true; };