Skip to content

Commit

Permalink
treewide: Get rid of all uses of crossConfig
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Ericson2314 committed May 15, 2018
1 parent d7160f3 commit 330ca73
Show file tree
Hide file tree
Showing 22 changed files with 111 additions and 138 deletions.
1 change: 1 addition & 0 deletions pkgs/build-support/bintools-wrapper/default.nix
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion pkgs/build-support/bintools-wrapper/setup-hook.sh
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions pkgs/build-support/cc-wrapper/default.nix
Expand Up @@ -201,6 +201,7 @@ stdenv.mkDerivation {
ln -s $ccPath/${targetPrefix}ghdl $out/bin/${targetPrefix}ghdl
'';

strictDeps = true;
propagatedBuildInputs = [ bintools ];
depsTargetTargetPropagated = extraPackages;

Expand Down
2 changes: 1 addition & 1 deletion pkgs/build-support/cc-wrapper/setup-hook.sh
Expand Up @@ -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
Expand Down
6 changes: 2 additions & 4 deletions pkgs/development/compilers/ghc/7.10.3.nix
Expand Up @@ -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
Expand Down
6 changes: 2 additions & 4 deletions pkgs/development/compilers/ghc/8.0.2.nix
Expand Up @@ -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 ];

Expand Down
6 changes: 2 additions & 4 deletions pkgs/development/compilers/ghc/8.2.2.nix
Expand Up @@ -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 ];

Expand Down
6 changes: 2 additions & 4 deletions pkgs/development/compilers/ghc/8.4.1.nix
Expand Up @@ -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 ];

Expand Down
6 changes: 2 additions & 4 deletions pkgs/development/compilers/ghc/head.nix
Expand Up @@ -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 ];

Expand Down
15 changes: 5 additions & 10 deletions pkgs/development/interpreters/guile/1.8.nix
Expand Up @@ -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)
Expand All @@ -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
'';
Expand Down
13 changes: 2 additions & 11 deletions pkgs/development/libraries/fontconfig/2.10.nix
Expand Up @@ -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;
Expand Down
13 changes: 2 additions & 11 deletions pkgs/development/libraries/fontconfig/default.nix
Expand Up @@ -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;
Expand Down
28 changes: 12 additions & 16 deletions pkgs/development/libraries/gettext/default.nix
Expand Up @@ -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
Expand All @@ -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;
Expand Down
13 changes: 7 additions & 6 deletions pkgs/development/libraries/glibc/2.27.nix
Expand Up @@ -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
Expand Down
13 changes: 7 additions & 6 deletions pkgs/development/libraries/glibc/default.nix
Expand Up @@ -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
Expand Down
30 changes: 17 additions & 13 deletions pkgs/development/tools/build-managers/cmake/default.nix
Expand Up @@ -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;
Expand Down
25 changes: 11 additions & 14 deletions pkgs/development/tools/build-managers/cmake/setup-hook.sh
Expand Up @@ -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
Expand Down
21 changes: 8 additions & 13 deletions 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 {
Expand Down Expand Up @@ -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;
Expand All @@ -59,6 +54,6 @@ stdenv.mkDerivation {
'';

meta = {
platforms = [ "mipsel-linux" ];
platforms = stdenv.lib.platforms.mips;
};
}

0 comments on commit 330ca73

Please sign in to comment.