From f1415f633cb5cca0000dc5d5b36b717a1b11ae0f Mon Sep 17 00:00:00 2001 From: Edward Amsden Date: Mon, 2 Mar 2020 07:04:31 -0500 Subject: [PATCH 1/2] nix: Patch config.nix.in to reference host platform binaries --- pkgs/tools/package-management/nix/default.nix | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/pkgs/tools/package-management/nix/default.nix b/pkgs/tools/package-management/nix/default.nix index eed14a12978..a17a621fbbe 100644 --- a/pkgs/tools/package-management/nix/default.nix +++ b/pkgs/tools/package-management/nix/default.nix @@ -10,6 +10,7 @@ let common = { lib, stdenv, fetchpatch, perl, curl, bzip2, sqlite, openssl ? null, xz + , bash, coreutils, gzip, gnutar , pkgconfig, boehmgc, perlPackages, libsodium, brotli, boost, editline, nlohmann_json , jq, libarchive, rustc, cargo , busybox-sandbox-shell @@ -30,6 +31,7 @@ common = is20 = lib.versionAtLeast version "2.0pre"; is24 = lib.versionAtLeast version "2.4pre"; + isExactly23 = lib.versionAtLeast version "2.3" && lib.versionOlder version "2.4"; VERSION_SUFFIX = suffix; @@ -64,17 +66,31 @@ common = preConfigure = # Copy libboost_context so we don't get all of Boost in our closure. # https://github.com/NixOS/nixpkgs/issues/45462 - if is20 then '' - mkdir -p $out/lib - cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib - rm -f $out/lib/*.a - ${lib.optionalString stdenv.isLinux '' - chmod u+w $out/lib/*.so.* - patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.* - ''} - '' else '' - configureFlagsArray+=(BDW_GC_LIBS="-lgc -lgccpp") - ''; + (if is20 then '' + mkdir -p $out/lib + cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib + rm -f $out/lib/*.a + ${lib.optionalString stdenv.isLinux '' + chmod u+w $out/lib/*.so.* + patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.* + ''} + '' else '' + configureFlagsArray+=(BDW_GC_LIBS="-lgc -lgccpp") + '') + + # For Nix-2.3, patch around an issue where the Nix configure step pulls in the + # build system's bash and other utilities when cross-compiling + lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform && isExactly23) '' + mkdir tmp/ + substitute corepkgs/config.nix.in tmp/config.nix.in \ + --subst-var-by bash ${bash}/bin/bash \ + --subst-var-by coreutils ${coreutils}/bin \ + --subst-var-by bzip2 ${bzip2}/bin/bzip2 \ + --subst-var-by gzip ${gzip}/bin/gzip \ + --subst-var-by xz ${xz}/bin/xz \ + --subst-var-by tar ${gnutar}/bin/tar \ + --subst-var-by tr ${coreutils}/bin/tr + mv tmp/config.nix.in corepkgs/config.nix.in + ''; configureFlags = [ "--with-store-dir=${storeDir}" From 3b72c55fc5aff74cc7bdef1f15c04c29e5671ab1 Mon Sep 17 00:00:00 2001 From: Edward Amsden Date: Mon, 2 Mar 2020 07:07:42 -0500 Subject: [PATCH 2/2] nix: Drive-by cleanup: replace ifthenelse with lib.optionalString --- pkgs/tools/package-management/nix/default.nix | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/pkgs/tools/package-management/nix/default.nix b/pkgs/tools/package-management/nix/default.nix index a17a621fbbe..29af4a90cb9 100644 --- a/pkgs/tools/package-management/nix/default.nix +++ b/pkgs/tools/package-management/nix/default.nix @@ -66,17 +66,15 @@ common = preConfigure = # Copy libboost_context so we don't get all of Boost in our closure. # https://github.com/NixOS/nixpkgs/issues/45462 - (if is20 then '' - mkdir -p $out/lib - cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib - rm -f $out/lib/*.a - ${lib.optionalString stdenv.isLinux '' - chmod u+w $out/lib/*.so.* - patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.* - ''} - '' else '' - configureFlagsArray+=(BDW_GC_LIBS="-lgc -lgccpp") - '') + + lib.optionalString is20 '' + mkdir -p $out/lib + cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib + rm -f $out/lib/*.a + ${lib.optionalString stdenv.isLinux '' + chmod u+w $out/lib/*.so.* + patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.* + ''} + '' + # For Nix-2.3, patch around an issue where the Nix configure step pulls in the # build system's bash and other utilities when cross-compiling lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform && isExactly23) '' @@ -103,6 +101,7 @@ common = "--with-dbi=${perlPackages.DBI}/${perl.libPrefix}" "--with-dbd-sqlite=${perlPackages.DBDSQLite}/${perl.libPrefix}" "--with-www-curl=${perlPackages.WWWCurl}/${perl.libPrefix}" + "BDW_GC_LIBS=\"-lgc -lgccpp\"" ] ++ lib.optionals (is20 && stdenv.isLinux) [ "--with-sandbox-shell=${sh}/bin/busybox" ]