From 330ca731e88ec015181c43d92ae8f7c77cf0226a Mon Sep 17 00:00:00 2001 From: John Ericson Date: Sun, 13 May 2018 11:31:24 -0400 Subject: [PATCH 1/2] treewide: Get rid of all uses of crossConfig The hack of using `crossConfig` to enforce stricter handling of dependencies is replaced with a dedicated `strictDeps` for that purpose. (Experience has shown that my punning was a terrible idea that made more difficult and embarrising to teach teach.) Now that is is clear, a few packages now use `strictDeps`, to fix various bugs: - bintools-wrapper and cc-wrapper --- .../bintools-wrapper/default.nix | 1 + .../bintools-wrapper/setup-hook.sh | 2 +- pkgs/build-support/cc-wrapper/default.nix | 1 + pkgs/build-support/cc-wrapper/setup-hook.sh | 2 +- pkgs/development/compilers/ghc/7.10.3.nix | 6 ++-- pkgs/development/compilers/ghc/8.0.2.nix | 6 ++-- pkgs/development/compilers/ghc/8.2.2.nix | 6 ++-- pkgs/development/compilers/ghc/8.4.1.nix | 6 ++-- pkgs/development/compilers/ghc/head.nix | 6 ++-- pkgs/development/interpreters/guile/1.8.nix | 15 +++------ .../development/libraries/fontconfig/2.10.nix | 13 ++------ .../libraries/fontconfig/default.nix | 13 ++------ .../development/libraries/gettext/default.nix | 28 +++++++---------- pkgs/development/libraries/glibc/2.27.nix | 13 ++++---- pkgs/development/libraries/glibc/default.nix | 13 ++++---- .../tools/build-managers/cmake/default.nix | 30 ++++++++++-------- .../tools/build-managers/cmake/setup-hook.sh | 25 +++++++-------- pkgs/misc/uboot/nanonote.nix | 21 +++++-------- pkgs/servers/x11/xorg/overrides.nix | 31 ++++++++++++------- pkgs/stdenv/generic/make-derivation.nix | 5 ++- pkgs/stdenv/generic/setup.sh | 4 +-- pkgs/tools/misc/bc/default.nix | 2 +- 22 files changed, 111 insertions(+), 138 deletions(-) diff --git a/pkgs/build-support/bintools-wrapper/default.nix b/pkgs/build-support/bintools-wrapper/default.nix index a5084808c3b..17ec2ec7ad7 100644 --- a/pkgs/build-support/bintools-wrapper/default.nix +++ b/pkgs/build-support/bintools-wrapper/default.nix @@ -186,6 +186,7 @@ stdenv.mkDerivation { else throw "unknown emulation for platform: " + targetPlatform.config; in targetPlatform.platform.bfdEmulation or (fmt + sep + arch); + strictDeps = true; depsTargetTargetPropagated = extraPackages; setupHook = ./setup-hook.sh; diff --git a/pkgs/build-support/bintools-wrapper/setup-hook.sh b/pkgs/build-support/bintools-wrapper/setup-hook.sh index 48a00b0b9b0..a093ef8f3b4 100644 --- a/pkgs/build-support/bintools-wrapper/setup-hook.sh +++ b/pkgs/build-support/bintools-wrapper/setup-hook.sh @@ -8,7 +8,7 @@ set -u # native compile. # # TODO(@Ericson2314): No native exception -[[ -z ${crossConfig-} ]] || (( "$hostOffset" < 0 )) || return 0 +[[ -z ${strictDeps-} ]] || (( "$hostOffset" < 0 )) || return 0 bintoolsWrapper_addLDVars () { case $depHostOffset in diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index 8de2366ff5f..7cd02c4b24c 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -201,6 +201,7 @@ stdenv.mkDerivation { ln -s $ccPath/${targetPrefix}ghdl $out/bin/${targetPrefix}ghdl ''; + strictDeps = true; propagatedBuildInputs = [ bintools ]; depsTargetTargetPropagated = extraPackages; diff --git a/pkgs/build-support/cc-wrapper/setup-hook.sh b/pkgs/build-support/cc-wrapper/setup-hook.sh index 29a7306b9b7..6e635486078 100644 --- a/pkgs/build-support/cc-wrapper/setup-hook.sh +++ b/pkgs/build-support/cc-wrapper/setup-hook.sh @@ -60,7 +60,7 @@ set -u # native compile. # # TODO(@Ericson2314): No native exception -[[ -z ${crossConfig-} ]] || (( "$hostOffset" < 0 )) || return 0 +[[ -z ${strictDeps-} ]] || (( "$hostOffset" < 0 )) || return 0 # It's fine that any other cc-wrapper will redefine this. Bash functions close # over no state, and there's no @-substitutions within, so any redefined diff --git a/pkgs/development/compilers/ghc/7.10.3.nix b/pkgs/development/compilers/ghc/7.10.3.nix index e4bf23c6e9e..4c227f56115 100644 --- a/pkgs/development/compilers/ghc/7.10.3.nix +++ b/pkgs/development/compilers/ghc/7.10.3.nix @@ -129,10 +129,8 @@ stdenv.mkDerivation rec { "--disable-large-address-space" ]; - # Hack to make sure we never to the relaxation `$PATH` and hooks support for - # compatability. This will be replaced with something clearer in a future - # masss-rebuild. - crossConfig = true; + # Make sure we never relax`$PATH` and hooks support for compatability. + strictDeps = true; nativeBuildInputs = [ ghc perl libxml2 libxslt docbook_xsl docbook_xml_dtd_45 docbook_xml_dtd_42 hscolour diff --git a/pkgs/development/compilers/ghc/8.0.2.nix b/pkgs/development/compilers/ghc/8.0.2.nix index 7d11ffb66c6..ca3b128df15 100644 --- a/pkgs/development/compilers/ghc/8.0.2.nix +++ b/pkgs/development/compilers/ghc/8.0.2.nix @@ -128,10 +128,8 @@ stdenv.mkDerivation rec { "--disable-large-address-space" ]; - # Hack to make sure we never to the relaxation `$PATH` and hooks support for - # compatability. This will be replaced with something clearer in a future - # masss-rebuild. - crossConfig = true; + # Make sure we never relax`$PATH` and hooks support for compatability. + strictDeps = true; nativeBuildInputs = [ ghc perl hscolour sphinx ]; diff --git a/pkgs/development/compilers/ghc/8.2.2.nix b/pkgs/development/compilers/ghc/8.2.2.nix index b2a1aafe613..c8b8451ea60 100644 --- a/pkgs/development/compilers/ghc/8.2.2.nix +++ b/pkgs/development/compilers/ghc/8.2.2.nix @@ -145,10 +145,8 @@ stdenv.mkDerivation rec { "--disable-large-address-space" ]; - # Hack to make sure we never to the relaxation `$PATH` and hooks support for - # compatability. This will be replaced with something clearer in a future - # masss-rebuild. - crossConfig = true; + # Make sure we never relax`$PATH` and hooks support for compatability. + strictDeps = true; nativeBuildInputs = [ alex autoconf autoreconfHook automake ghc happy hscolour perl python3 sphinx ]; diff --git a/pkgs/development/compilers/ghc/8.4.1.nix b/pkgs/development/compilers/ghc/8.4.1.nix index f232e0b4728..14c94887d62 100644 --- a/pkgs/development/compilers/ghc/8.4.1.nix +++ b/pkgs/development/compilers/ghc/8.4.1.nix @@ -144,10 +144,8 @@ stdenv.mkDerivation rec { "--disable-large-address-space" ]; - # Hack to make sure we never to the relaxation `$PATH` and hooks support for - # compatability. This will be replaced with something clearer in a future - # masss-rebuild. - crossConfig = true; + # Make sure we never relax`$PATH` and hooks support for compatability. + strictDeps = true; nativeBuildInputs = [ ghc perl autoconf automake happy alex python3 ]; diff --git a/pkgs/development/compilers/ghc/head.nix b/pkgs/development/compilers/ghc/head.nix index 51497e0d9ce..da38230d485 100644 --- a/pkgs/development/compilers/ghc/head.nix +++ b/pkgs/development/compilers/ghc/head.nix @@ -134,10 +134,8 @@ stdenv.mkDerivation rec { "--disable-large-address-space" ]; - # Hack to make sure we never to the relaxation `$PATH` and hooks support for - # compatability. This will be replaced with something clearer in a future - # masss-rebuild. - crossConfig = true; + # Make sure we never relax`$PATH` and hooks support for compatability. + strictDeps = true; nativeBuildInputs = [ ghc perl autoconf automake happy alex python3 ]; diff --git a/pkgs/development/interpreters/guile/1.8.nix b/pkgs/development/interpreters/guile/1.8.nix index cf42c9a7b68..658b2cce77f 100644 --- a/pkgs/development/interpreters/guile/1.8.nix +++ b/pkgs/development/interpreters/guile/1.8.nix @@ -16,7 +16,11 @@ stdenv.mkDerivation rec { setOutputFlags = false; # $dev gets into the library otherwise # GCC 4.6 raises a number of set-but-unused warnings. - configureFlags = [ "--disable-error-on-warning" ]; + configureFlags = [ "--disable-error-on-warning" ] + # Guile needs patching to preset results for the configure tests about + # pthreads, which work only in native builds. + ++ stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) + "--with-threads=no"; depsBuildBuild = [ buildPackages.stdenv.cc ] ++ stdenv.lib.optional (hostPlatform != buildPlatform) @@ -34,17 +38,8 @@ stdenv.mkDerivation rec { libtool ]; - patches = [ ./cpp-4.5.patch ]; - # Guile needs patching to preset results for the configure tests - # about pthreads, which work only in native builds. - preConfigure = '' - if test -n "$crossConfig"; then - configureFlags="--with-threads=no $configureFlags" - fi - ''; - preBuild = '' sed -e '/lt_dlinit/a lt_dladdsearchdir("'$out/lib'");' -i libguile/dynl.c ''; diff --git a/pkgs/development/libraries/fontconfig/2.10.nix b/pkgs/development/libraries/fontconfig/2.10.nix index 5fb0ea4429e..b02d9ccdcef 100644 --- a/pkgs/development/libraries/fontconfig/2.10.nix +++ b/pkgs/development/libraries/fontconfig/2.10.nix @@ -21,19 +21,10 @@ stdenv.mkDerivation rec { "--with-cache-dir=/var/cache/fontconfig" "--disable-docs" "--with-default-fonts=" + ] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + "--with-arch=${hostPlatform.parsed.cpu.name}" ]; - # We should find a better way to access the arch reliably. - crossArch = if stdenv.hostPlatform != stdenv.buildPlatform - then hostPlatform.parsed.cpu.name - else null; - - preConfigure = '' - if test -n "$crossConfig"; then - configureFlags="$configureFlags --with-arch=$crossArch"; - fi - ''; - enableParallelBuilding = true; doCheck = true; diff --git a/pkgs/development/libraries/fontconfig/default.nix b/pkgs/development/libraries/fontconfig/default.nix index ce41f1ac7eb..dafd4834a94 100644 --- a/pkgs/development/libraries/fontconfig/default.nix +++ b/pkgs/development/libraries/fontconfig/default.nix @@ -53,19 +53,10 @@ stdenv.mkDerivation rec { "--disable-docs" # just <1MB; this is what you get when loading config fails for some reason "--with-default-fonts=${dejavu_fonts.minimal}" + ] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + "--with-arch=${hostPlatform.parsed.cpu.name}" ]; - # We should find a better way to access the arch reliably. - crossArch = if stdenv.hostPlatform != stdenv.buildPlatform - then hostPlatform.parsed.cpu.name - else null; - - preConfigure = '' - if test -n "$crossConfig"; then - configureFlags="$configureFlags --with-arch=$crossArch"; - fi - ''; - enableParallelBuilding = true; doCheck = true; diff --git a/pkgs/development/libraries/gettext/default.nix b/pkgs/development/libraries/gettext/default.nix index 9c3024ce25f..b6855a7e26d 100644 --- a/pkgs/development/libraries/gettext/default.nix +++ b/pkgs/development/libraries/gettext/default.nix @@ -16,12 +16,19 @@ stdenv.mkDerivation rec { LDFLAGS = if stdenv.isSunOS then "-lm -lmd -lmp -luutil -lnvpair -lnsl -lidmap -lavl -lsec" else ""; - configureFlags = [ "--disable-csharp" "--with-xz" ] + configureFlags = [ + "--disable-csharp" "--with-xz" # avoid retaining reference to CF during stdenv bootstrap - ++ lib.optionals stdenv.isDarwin [ - "gt_cv_func_CFPreferencesCopyAppValue=no" - "gt_cv_func_CFLocaleCopyCurrent=no" - ]; + ] ++ lib.optionals stdenv.isDarwin [ + "gt_cv_func_CFPreferencesCopyAppValue=no" + "gt_cv_func_CFLocaleCopyCurrent=no" + ] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + # On cross building, gettext supposes that the wchar.h from libc + # does not fulfill gettext needs, so it tries to work with its + # own wchar.h file, which does not cope well with the system's + # wchar.h and stddef.h (gcc-4.3 - glibc-2.9) + "gl_cv_func_wcwidth_works=yes" + ]; postPatch = '' substituteAllInPlace gettext-runtime/src/gettext.sh.in @@ -33,17 +40,6 @@ stdenv.mkDerivation rec { sed -i -e "s/\(libgettextsrc_la_LDFLAGS = \)/\\1..\/gnulib-lib\/libxml_rpl.la /" gettext-tools/src/Makefile.in ''; - # On cross building, gettext supposes that the wchar.h from libc - # does not fulfill gettext needs, so it tries to work with its - # own wchar.h file, which does not cope well with the system's - # wchar.h and stddef.h (gcc-4.3 - glibc-2.9) - preConfigure = '' - if test -n "$crossConfig"; then - echo gl_cv_func_wcwidth_works=yes > cachefile - configureFlags="$configureFlags --cache-file=`pwd`/cachefile" - fi - ''; - nativeBuildInputs = [ xz xz.bin ]; # HACK, see #10874 (and 14664) buildInputs = stdenv.lib.optional (!stdenv.isLinux && !hostPlatform.isCygwin) libiconv; diff --git a/pkgs/development/libraries/glibc/2.27.nix b/pkgs/development/libraries/glibc/2.27.nix index bb057ae899e..bf63b97635a 100644 --- a/pkgs/development/libraries/glibc/2.27.nix +++ b/pkgs/development/libraries/glibc/2.27.nix @@ -71,14 +71,15 @@ callPackage ./common-2.27.nix { inherit stdenv; } { # Get rid of more unnecessary stuff. rm -rf $out/var $bin/bin/sln - + '' # For some reason these aren't stripped otherwise and retain reference # to bootstrap-tools; on cross-arm this stripping would break objects. - if [ -z "$crossConfig" ]; then - for i in "$out"/lib/*.a; do - [ "$i" = "$out/lib/libm.a" ] || strip -S "$i" - done - fi + + stdenv.lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) '' + + for i in "$out"/lib/*.a; do + [ "$i" = "$out/lib/libm.a" ] || $STRIP -S "$i" + done + '' + '' # Put libraries for static linking in a separate output. Note # that libc_nonshared.a and libpthread_nonshared.a are required diff --git a/pkgs/development/libraries/glibc/default.nix b/pkgs/development/libraries/glibc/default.nix index 976dbcde47f..ea443ce9a24 100644 --- a/pkgs/development/libraries/glibc/default.nix +++ b/pkgs/development/libraries/glibc/default.nix @@ -71,14 +71,15 @@ callPackage ./common.nix { inherit stdenv; } { # Get rid of more unnecessary stuff. rm -rf $out/var $bin/bin/sln - + '' # For some reason these aren't stripped otherwise and retain reference # to bootstrap-tools; on cross-arm this stripping would break objects. - if [ -z "$crossConfig" ]; then - for i in "$out"/lib/*.a; do - [ "$i" = "$out/lib/libm.a" ] || strip -S "$i" - done - fi + + stdenv.lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) '' + + for i in "$out"/lib/*.a; do + [ "$i" = "$out/lib/libm.a" ] || $STRIP -S "$i" + done + '' + '' # Put libraries for static linking in a separate output. Note # that libc_nonshared.a and libpthread_nonshared.a are required diff --git a/pkgs/development/tools/build-managers/cmake/default.nix b/pkgs/development/tools/build-managers/cmake/default.nix index 97c02cd9cc1..b40b284b759 100644 --- a/pkgs/development/tools/build-managers/cmake/default.nix +++ b/pkgs/development/tools/build-managers/cmake/default.nix @@ -80,19 +80,23 @@ stdenv.mkDerivation rec { configureFlags="--parallel=''${NIX_BUILD_CORES:-1} $configureFlags" ''; - configureFlags = [ "--docdir=share/doc/${name}" ] - ++ (if useSharedLibraries then [ "--no-system-jsoncpp" "--system-libs" ] else [ "--no-system-libs" ]) # FIXME: cleanup - ++ optional (useQt4 || withQt5) "--qt-gui" - ++ ["--"] - ++ optionals (!useNcurses) [ "-DBUILD_CursesDialog=OFF" ] - ++ optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ - "-DCMAKE_CXX_COMPILER=${stdenv.cc.targetPrefix}c++" - "-DCMAKE_C_COMPILER=${stdenv.cc.targetPrefix}cc" - "-DCMAKE_AR=${getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ar" - "-DCMAKE_RANLIB=${getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ranlib" - "-DCMAKE_STRIP=${getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}strip" - # TODO: Why are ar and friends not provided by the bintools wrapper? - ]; + configureFlags = [ + "--docdir=share/doc/${name}" + # We should set the proper `CMAKE_SYSTEM_NAME`. + # http://www.cmake.org/Wiki/CMake_Cross_Compiling + # + # Unfortunately cmake seems to expect absolute paths for ar, ranlib, and + # strip. Otherwise they are taken to be relative to the source root of the + # package being built. + "-DCMAKE_CXX_COMPILER=${stdenv.cc.targetPrefix}c++" + "-DCMAKE_C_COMPILER=${stdenv.cc.targetPrefix}cc" + "-DCMAKE_AR=${getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ar" + "-DCMAKE_RANLIB=${getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ranlib" + "-DCMAKE_STRIP=${getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}strip" + ] ++ (if useSharedLibraries then [ "--no-system-jsoncpp" "--system-libs" ] else [ "--no-system-libs" ]) # FIXME: cleanup + ++ optional (useQt4 || withQt5) "--qt-gui" + ++ ["--"] + ++ optionals (!useNcurses) [ "-DBUILD_CursesDialog=OFF" ]; dontUseCmakeConfigure = true; enableParallelBuilding = true; diff --git a/pkgs/development/tools/build-managers/cmake/setup-hook.sh b/pkgs/development/tools/build-managers/cmake/setup-hook.sh index c796c31cb70..003f900c954 100755 --- a/pkgs/development/tools/build-managers/cmake/setup-hook.sh +++ b/pkgs/development/tools/build-managers/cmake/setup-hook.sh @@ -29,20 +29,17 @@ cmakeConfigurePhase() { cmakeFlags="-DCMAKE_INSTALL_PREFIX=$prefix $cmakeFlags" fi - if [ -n "$crossConfig" ]; then - # By now it supports linux builds only. We should set the proper - # CMAKE_SYSTEM_NAME otherwise. - # http://www.cmake.org/Wiki/CMake_Cross_Compiling - # - # Unfortunately cmake seems to expect absolute paths for ar, ranlib, and - # strip. Otherwise they are taken to be relative to the source root of - # the package being built. - cmakeFlags="-DCMAKE_CXX_COMPILER=$crossConfig-c++ $cmakeFlags" - cmakeFlags="-DCMAKE_C_COMPILER=$crossConfig-cc $cmakeFlags" - cmakeFlags="-DCMAKE_AR=$(command -v $crossConfig-ar) $cmakeFlags" - cmakeFlags="-DCMAKE_RANLIB=$(command -v $crossConfig-ranlib) $cmakeFlags" - cmakeFlags="-DCMAKE_STRIP=$(command -v $crossConfig-strip) $cmakeFlags" - fi + # We should set the proper `CMAKE_SYSTEM_NAME`. + # http://www.cmake.org/Wiki/CMake_Cross_Compiling + # + # Unfortunately cmake seems to expect absolute paths for ar, ranlib, and + # strip. Otherwise they are taken to be relative to the source root of the + # package being built. + cmakeFlags="-DCMAKE_CXX_COMPILER=$CXX $cmakeFlags" + cmakeFlags="-DCMAKE_C_COMPILER=$CC $cmakeFlags" + cmakeFlags="-DCMAKE_AR=$(command -v $AR) $cmakeFlags" + cmakeFlags="-DCMAKE_RANLIB=$(command -v $RANLAB) $cmakeFlags" + cmakeFlags="-DCMAKE_STRIP=$(command -v $STRIP) $cmakeFlags" # This installs shared libraries with a fully-specified install # name. By default, cmake installs shared libraries with just the diff --git a/pkgs/misc/uboot/nanonote.nix b/pkgs/misc/uboot/nanonote.nix index 2783927ef57..fb3b98f478e 100644 --- a/pkgs/misc/uboot/nanonote.nix +++ b/pkgs/misc/uboot/nanonote.nix @@ -1,8 +1,5 @@ {stdenv, fetchurl, fetchgit}: -# We should enable this check once we have the cross target system information -# assert stdenv.system == "armv5tel-linux" || crossConfig == "armv5tel-linux"; - # All this file is made for the Marvell Sheevaplug stdenv.mkDerivation { @@ -30,21 +27,19 @@ stdenv.mkDerivation { sed -i -e 's/0x200000;bootm/0x400000;bootm/' include/configs/qi_lb60.h ''; - # Remove the cross compiler prefix, and add reiserfs support + makeFlags = [ + "CROSS_COMPILE=${stdenv.cc.targetPrefix}" + ]; + + # Add reiserfs support configurePhase = '' make mrproper make qi_lb60_config - sed -i /CROSS_COMPILE/d include/config.mk ''; - buildPhase = '' + preBuild= '' # A variable named 'src' used to affect the build in some uboot... - unset src - if test -z "$crossConfig"; then - make clean all - else - make clean all ARCH=mips CROSS_COMPILE=$crossConfig- - fi + unset -v src ''; dontStrip = true; @@ -59,6 +54,6 @@ stdenv.mkDerivation { ''; meta = { - platforms = [ "mipsel-linux" ]; + platforms = stdenv.lib.platforms.mips; }; } diff --git a/pkgs/servers/x11/xorg/overrides.nix b/pkgs/servers/x11/xorg/overrides.nix index 18189ba2e68..42831dc4064 100644 --- a/pkgs/servers/x11/xorg/overrides.nix +++ b/pkgs/servers/x11/xorg/overrides.nix @@ -5,11 +5,9 @@ let inherit (stdenv) lib isDarwin; inherit (lib) overrideDerivation; - setMalloc0ReturnsNullCrossCompiling = '' - if test -n "$crossConfig"; then - configureFlags="$configureFlags --enable-malloc0returnsnull"; - fi - ''; + malloc0ReturnsNullCrossFlag = stdenv.lib.optional + (stdenv.hostPlatform != stdenv.buildPlatform) + "--enable-malloc0returnsnull"; gitRelease = { libName, version, rev, sha256 } : attrs : attrs // { name = libName + "-" + version; @@ -101,7 +99,9 @@ in libX11 = attrs: attrs // { outputs = [ "out" "dev" "man" ]; - preConfigure = setMalloc0ReturnsNullCrossCompiling + '' + configureFlags = attrs.configureFlags or [] + ++ malloc0ReturnsNullCrossFlag; + preConfigure = '' sed 's,^as_dummy.*,as_dummy="\$PATH",' -i configure ''; postInstall = @@ -138,16 +138,19 @@ in libXxf86vm = attrs: attrs // { outputs = [ "out" "dev" ]; - preConfigure = setMalloc0ReturnsNullCrossCompiling; + configureFlags = attrs.configureFlags or [] + ++ malloc0ReturnsNullCrossFlag; }; # Propagate some build inputs because of header file dependencies. # Note: most of these are in Requires.private, so maybe builder.sh # should propagate them automatically. libXt = attrs: attrs // { - preConfigure = setMalloc0ReturnsNullCrossCompiling + '' + preConfigure = '' sed 's,^as_dummy.*,as_dummy="\$PATH",' -i configure ''; + configureFlags = attrs.configureFlags or [] + ++ malloc0ReturnsNullCrossFlag; propagatedBuildInputs = [ xorg.libSM ]; CPP = stdenv.lib.optionalString stdenv.isDarwin "clang -E -"; outputs = [ "out" "dev" "devdoc" ]; @@ -188,7 +191,8 @@ in libXft = attrs: attrs // { outputs = [ "out" "dev" ]; propagatedBuildInputs = [ xorg.libXrender args.freetype args.fontconfig ]; - preConfigure = setMalloc0ReturnsNullCrossCompiling; + configureFlags = attrs.configureFlags or [] + ++ malloc0ReturnsNullCrossFlag; # the include files need ft2build.h, and Requires.private isn't enough for us postInstall = '' sed "/^Requires:/s/$/, freetype2/" -i "$dev/lib/pkgconfig/xft.pc" @@ -198,7 +202,8 @@ in libXext = attrs: attrs // { outputs = [ "out" "dev" "man" "doc" ]; propagatedBuildInputs = [ xorg.xproto xorg.libXau ]; - preConfigure = setMalloc0ReturnsNullCrossCompiling; + configureFlags = attrs.configureFlags or [] + ++ malloc0ReturnsNullCrossFlag; }; libXfixes = attrs: attrs // { @@ -221,7 +226,8 @@ in libXrandr = attrs: attrs // { outputs = [ "out" "dev" ]; - preConfigure = setMalloc0ReturnsNullCrossCompiling; + configureFlags = attrs.configureFlags or [] + ++ malloc0ReturnsNullCrossFlag; propagatedBuildInputs = [xorg.libXrender]; }; @@ -232,8 +238,9 @@ in libXrender = attrs: attrs // { outputs = [ "out" "dev" "doc" ]; + configureFlags = attrs.configureFlags or [] + ++ malloc0ReturnsNullCrossFlag; propagatedBuildInputs = [ xorg.renderproto ]; - preConfigure = setMalloc0ReturnsNullCrossCompiling; }; libXres = attrs: attrs // { diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix index 46df958b839..e108e3f156a 100644 --- a/pkgs/stdenv/generic/make-derivation.nix +++ b/pkgs/stdenv/generic/make-derivation.nix @@ -52,7 +52,8 @@ rec { # InstallCheck phase , doInstallCheck ? false - , crossConfig ? null + , # TODO(@Ericson2314): Make always true and remove + strictDeps ? stdenv.hostPlatform != stdenv.buildPlatform , meta ? {} , passthru ? {} , pos ? # position used in error messages and for meta.position @@ -156,6 +157,8 @@ rec { userHook = config.stdenv.userHook or null; __ignoreNulls = true; + inherit strictDeps; + depsBuildBuild = lib.elemAt (lib.elemAt dependencies 0) 0; nativeBuildInputs = lib.elemAt (lib.elemAt dependencies 0) 1; depsBuildTarget = lib.elemAt (lib.elemAt dependencies 0) 2; diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index d7a4781448a..bfab19dd973 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -501,7 +501,7 @@ activatePackage() { # the transition, we do include everything in thatcase. # # TODO(@Ericson2314): Don't special-case native compilation - if [[ ( -z "${crossConfig-}" || "$hostOffset" -le -1 ) && -d "$pkg/bin" ]]; then + if [[ ( -z "${strictDeps-}" || "$hostOffset" -le -1 ) && -d "$pkg/bin" ]]; then addToSearchPath _PATH "$pkg/bin" fi @@ -551,7 +551,7 @@ _addToEnv() { for depTargetOffset in "${allPlatOffsets[@]}"; do (( "$depHostOffset" <= "$depTargetOffset" )) || continue local hookRef="${hookVar}[$depTargetOffset - $depHostOffset]" - if [[ -z "${crossConfig-}" ]]; then + if [[ -z "${strictDeps-}" ]]; then # Apply environment hooks to all packages during native # compilation to ease the transition. # diff --git a/pkgs/tools/misc/bc/default.nix b/pkgs/tools/misc/bc/default.nix index fc60a000e36..52bd28e9748 100644 --- a/pkgs/tools/misc/bc/default.nix +++ b/pkgs/tools/misc/bc/default.nix @@ -26,7 +26,7 @@ stdenv.mkDerivation rec { # Hack to make sure we never to the relaxation `$PATH` and hooks support for # compatability. This will be replaced with something clearer in a future # masss-rebuild. - crossConfig = true; + strictDeps = true; meta = { description = "GNU software calculator"; From 5a860c20f3030df890084d00d7d487ded735326e Mon Sep 17 00:00:00 2001 From: John Ericson Date: Mon, 14 May 2018 20:05:48 -0400 Subject: [PATCH 2/2] stdenv cross adapter: Don't define crossConfig All its uses have been removed. --- pkgs/stdenv/adapters.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkgs/stdenv/adapters.nix b/pkgs/stdenv/adapters.nix index 734119491a0..18a9c7f3809 100644 --- a/pkgs/stdenv/adapters.nix +++ b/pkgs/stdenv/adapters.nix @@ -87,8 +87,6 @@ rec { (hostPlatform.isAarch64 || hostPlatform.isMips || hostPlatform.libc == "musl") pkgs.updateAutotoolsGnuConfigScriptsHook ; - - crossConfig = hostPlatform.config; } // args.crossAttrs or {}); };