summaryrefslogtreecommitdiffstats
path: root/pkgs/development/libraries/boost
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2017-07-09 13:37:14 -0400
committerJohn Ericson <John.Ericson@Obsidian.Systems>2017-12-30 19:17:53 -0500
commit76b590405a3e9211aecfc56126eb0dabddfd5e95 (patch)
treedb2ec2edecd8e4e4549b5a3ca90c04719fc91a72 /pkgs/development/libraries/boost
parentcc44e04472bf8d0774e09a6cc4bd47175e531b8e (diff)
boost: Clean, reducing duplication
This was motivated originally by my cross work, but that goal requires a few more commits to other things. Still, it's good to start the cleanup now / get things out of the way.
Diffstat (limited to 'pkgs/development/libraries/boost')
-rw-r--r--pkgs/development/libraries/boost/1.59.nix58
-rw-r--r--pkgs/development/libraries/boost/generic.nix150
2 files changed, 83 insertions, 125 deletions
diff --git a/pkgs/development/libraries/boost/1.59.nix b/pkgs/development/libraries/boost/1.59.nix
index 2666b1d6c5d2..603d7883c647 100644
--- a/pkgs/development/libraries/boost/1.59.nix
+++ b/pkgs/development/libraries/boost/1.59.nix
@@ -8,33 +8,33 @@ callPackage ./generic.nix (args // rec {
sha256 = "1jj1aai5rdmd72g90a3pd8sw9vi32zad46xv5av8fhnr48ir6ykj";
};
- patches = if stdenv.isCygwin then [
- ./cygwin-fedora-boost-1.50.0-fix-non-utf8-files.patch
- ./cygwin-fedora-boost-1.50.0-pool.patch
- ./cygwin-fedora-boost-1.57.0-mpl-print.patch
- ./cygwin-fedora-boost-1.57.0-spirit-unused_typedef.patch
- ./cygwin-fedora-boost-1.54.0-locale-unused_typedef.patch
- ./cygwin-fedora-boost-1.54.0-python-unused_typedef.patch
- ./cygwin-fedora-boost-1.57.0-pool-test_linking.patch
- ./cygwin-fedora-boost-1.54.0-pool-max_chunks_shadow.patch
- ./cygwin-fedora-boost-1.57.0-signals2-weak_ptr.patch
- ./cygwin-fedora-boost-1.57.0-uuid-comparison.patch
- ./cygwin-fedora-boost-1.57.0-move-is_class.patch
- ./cygwin-1.40.0-cstdint-cygwin.patch
- ./cygwin-1.57.0-asio-cygwin.patch
- ./cygwin-1.55.0-asio-MSG_EOR.patch
- ./cygwin-1.57.0-config-cygwin.patch
- ./cygwin-1.57.0-context-cygwin.patch
- ./cygwin-1.57.0-filesystem-cygwin.patch
- ./cygwin-1.55.0-interlocked-cygwin.patch
- ./cygwin-1.40.0-iostreams-cygwin.patch
- ./cygwin-1.57.0-locale-cygwin.patch
- ./cygwin-1.57.0-log-cygwin.patch
- ./cygwin-1.40.0-python-cygwin.patch
- ./cygwin-1.40.0-regex-cygwin.patch
- ./cygwin-1.57.0-smart_ptr-cygwin.patch
- ./cygwin-1.57.0-system-cygwin.patch
- ./cygwin-1.45.0-jam-cygwin.patch
- ./cygwin-1.50.0-jam-pep3149.patch
- ] else null;
+ patches = stdenv.lib.optionals stdenv.isCygwin [
+ ./cygwin-fedora-boost-1.50.0-fix-non-utf8-files.patch
+ ./cygwin-fedora-boost-1.50.0-pool.patch
+ ./cygwin-fedora-boost-1.57.0-mpl-print.patch
+ ./cygwin-fedora-boost-1.57.0-spirit-unused_typedef.patch
+ ./cygwin-fedora-boost-1.54.0-locale-unused_typedef.patch
+ ./cygwin-fedora-boost-1.54.0-python-unused_typedef.patch
+ ./cygwin-fedora-boost-1.57.0-pool-test_linking.patch
+ ./cygwin-fedora-boost-1.54.0-pool-max_chunks_shadow.patch
+ ./cygwin-fedora-boost-1.57.0-signals2-weak_ptr.patch
+ ./cygwin-fedora-boost-1.57.0-uuid-comparison.patch
+ ./cygwin-fedora-boost-1.57.0-move-is_class.patch
+ ./cygwin-1.40.0-cstdint-cygwin.patch
+ ./cygwin-1.57.0-asio-cygwin.patch
+ ./cygwin-1.55.0-asio-MSG_EOR.patch
+ ./cygwin-1.57.0-config-cygwin.patch
+ ./cygwin-1.57.0-context-cygwin.patch
+ ./cygwin-1.57.0-filesystem-cygwin.patch
+ ./cygwin-1.55.0-interlocked-cygwin.patch
+ ./cygwin-1.40.0-iostreams-cygwin.patch
+ ./cygwin-1.57.0-locale-cygwin.patch
+ ./cygwin-1.57.0-log-cygwin.patch
+ ./cygwin-1.40.0-python-cygwin.patch
+ ./cygwin-1.40.0-regex-cygwin.patch
+ ./cygwin-1.57.0-smart_ptr-cygwin.patch
+ ./cygwin-1.57.0-system-cygwin.patch
+ ./cygwin-1.45.0-jam-cygwin.patch
+ ./cygwin-1.50.0-jam-pep3149.patch
+ ];
})
diff --git a/pkgs/development/libraries/boost/generic.nix b/pkgs/development/libraries/boost/generic.nix
index b2ec31ace17b..adb7ca665cc2 100644
--- a/pkgs/development/libraries/boost/generic.nix
+++ b/pkgs/development/libraries/boost/generic.nix
@@ -1,18 +1,19 @@
{ stdenv, fetchurl, icu, expat, zlib, bzip2, python, fixDarwinDylibNames, libiconv
-, buildPlatform, hostPlatform
-, toolset ? if stdenv.cc.isClang then "clang" else null
+, which
+, buildPackages, buildPlatform, hostPlatform
+, toolset ? /**/ if stdenv.cc.isClang then "clang"
+ else if stdenv.cc.isGNU && hostPlatform != buildPlatform then "gcc-cross"
+ else null
, enableRelease ? true
, enableDebug ? false
, enableSingleThreaded ? false
, enableMultiThreaded ? true
, enableShared ? !(hostPlatform.libc == "msvcrt") # problems for now
, enableStatic ? !enableShared
-, enablePIC ? false
-, enableExceptions ? false
, enablePython ? hostPlatform == buildPlatform
, enableNumpy ? false
, taggedLayout ? ((enableRelease && enableDebug) || (enableSingleThreaded && enableMultiThreaded) || (enableShared && enableStatic))
-, patches ? null
+, patches ? []
, mpi ? null
# Attributes inherit from specific versions
@@ -21,8 +22,9 @@
}:
# We must build at least one type of libraries
-assert !enableShared -> enableStatic;
+assert enableShared || enableStatic;
+# Python isn't supported when cross-compiling
assert enablePython -> hostPlatform == buildPlatform;
assert enableNumpy -> enablePython;
@@ -46,86 +48,41 @@ let
# To avoid library name collisions
layout = if taggedLayout then "tagged" else "system";
- cflags = if enablePIC && enableExceptions then
- "cflags=\"-fPIC -fexceptions\" cxxflags=-fPIC linkflags=-fPIC"
- else if enablePIC then
- "cflags=-fPIC cxxflags=-fPIC linkflags=-fPIC"
- else if enableExceptions then
- "cflags=-fexceptions"
- else
- "";
-
- withToolset = stdenv.lib.optionalString (toolset != null) "--with-toolset=${toolset}";
-
- genericB2Flags = [
+ b2Args = concatStringsSep " " ([
"--includedir=$dev/include"
"--libdir=$out/lib"
"-j$NIX_BUILD_CORES"
"--layout=${layout}"
"variant=${variant}"
"threading=${threading}"
- ] ++ optional (link != "static") "runtime-link=${runtime-link}" ++ [
+ "runtime-link=${runtime-link}"
"link=${link}"
- "${cflags}"
- ] ++ optional (variant == "release") "debug-symbols=off"
- ++ optional (!enablePython) "--without-python";
-
- nativeB2Flags = [
"-sEXPAT_INCLUDE=${expat.dev}/include"
"-sEXPAT_LIBPATH=${expat.out}/lib"
- ] ++ optional (toolset != null) "toolset=${toolset}"
- ++ optional (mpi != null) "--user-config=user-config.jam";
- nativeB2Args = concatStringsSep " " (genericB2Flags ++ nativeB2Flags);
-
- crossB2Flags = [
- "-sEXPAT_INCLUDE=${expat.crossDrv}/include"
- "-sEXPAT_LIBPATH=${expat.crossDrv}/lib"
- "--user-config=user-config.jam"
- "toolset=gcc-cross"
- ] ++ optionals (hostPlatform.libc == "msvcrt") [
+ ] ++ optional (variant == "release") "debug-symbols=off"
+ ++ optional (toolset != null) "toolset=${toolset}"
+ ++ optional (mpi != null || hostPlatform != buildPlatform) "--user-config=user-config.jam"
+ ++ optionals (hostPlatform.libc == "msvcrt") [
"target-os=windows"
"threadapi=win32"
"binary-format=pe"
"address-model=${toString hostPlatform.parsed.cpu.bits}"
"architecture=x86"
- ];
- crossB2Args = concatStringsSep " " (genericB2Flags ++ crossB2Flags);
-
- builder = b2Args: ''
- ./b2 ${b2Args}
- '';
-
- installer = b2Args: ''
- # boostbook is needed by some applications
- mkdir -p $dev/share/boostbook
- cp -a tools/boostbook/{xsl,dtd} $dev/share/boostbook/
-
- # Let boost install everything else
- ./b2 ${b2Args} install
- '';
-
- commonConfigureFlags = [
- "--includedir=$(dev)/include"
- "--libdir=$(out)/lib"
- ];
-
- fixup = ''
- # Make boost header paths relative so that they are not runtime dependencies
- (
- cd "$dev"
- find include \( -name '*.hpp' -or -name '*.h' -or -name '*.ipp' \) \
- -exec sed '1i#line 1 "{}"' -i '{}' \;
- )
- '' + optionalString (hostPlatform.libc == "msvcrt") ''
- ${stdenv.cc.targetPrefix}ranlib "$out/lib/"*.a
- '';
+ ]);
in
stdenv.mkDerivation {
name = "boost-${version}";
- inherit src patches version;
+ inherit src;
+
+ patchFlags = optionalString (hostPlatform.libc == "msvcrt") "-p0";
+ patches = patches ++ optional (hostPlatform.libc == "msvcrt") (fetchurl {
+ url = "https://svn.boost.org/trac/boost/raw-attachment/tickaet/7262/"
+ + "boost-mingw.patch";
+ sha256 = "0s32kwll66k50w6r5np1y5g907b7lcpsjhfgr7rsw7q5syhzddyj";
+ });
meta = {
homepage = http://boost.org/;
@@ -142,9 +99,13 @@ stdenv.mkDerivation {
--replace '@rpath/$(<[1]:D=)' "$out/lib/\$(<[1]:D=)";
fi;
'' + optionalString (mpi != null) ''
- cat << EOF > user-config.jam
+ cat << EOF >> user-config.jam
using mpi : ${mpi}/bin/mpiCC ;
EOF
+ '' + optionalString (hostPlatform != buildPlatform) ''
+ cat << EOF >> user-config.jam
+ using gcc : cross : ${stdenv.cc.targetPrefix}c++ ;
+ EOF
'';
NIX_CFLAGS_LINK = stdenv.lib.optionalString stdenv.isDarwin
@@ -152,6 +113,7 @@ stdenv.mkDerivation {
enableParallelBuilding = true;
+ nativeBuildInputs = [ which buildPackages.stdenv.cc ];
buildInputs = [ expat zlib bzip2 libiconv ]
++ optional (hostPlatform == buildPlatform) icu
++ optional stdenv.isDarwin fixDarwinDylibNames
@@ -159,39 +121,35 @@ stdenv.mkDerivation {
++ optional enableNumpy python.pkgs.numpy;
configureScript = "./bootstrap.sh";
- configureFlags = commonConfigureFlags
- ++ [ "--with-python=${python.interpreter}" ]
- ++ optional (hostPlatform == buildPlatform) "--with-icu=${icu.dev}"
- ++ optional (toolset != null) "--with-toolset=${toolset}";
+ configurePlatforms = [];
+ configureFlags = [
+ "--includedir=$(dev)/include"
+ "--libdir=$(out)/lib"
+ (if enablePython then "--with-python=${python.interpreter}" else "--without-python")
+ (if hostPlatform == buildPlatform then "--with-icu=${icu.dev}" else "--without-icu")
+ ] ++ optional (toolset != null) "--with-toolset=${toolset}";
- buildPhase = builder nativeB2Args;
+ buildPhase = ''
+ ./b2 ${b2Args}
+ '';
+
+ installPhase = ''
+ # boostbook is needed by some applications
+ mkdir -p $dev/share/boostbook
+ cp -a tools/boostbook/{xsl,dtd} $dev/share/boostbook/
- installPhase = installer nativeB2Args;
+ # Let boost install everything else
+ ./b2 ${b2Args} install
+ '';
- postFixup = fixup;
+ postFixup = ''
+ # Make boost header paths relative so that they are not runtime dependencies
+ find "$dev/include" \( -name '*.hpp' -or -name '*.h' -or -name '*.ipp' \) \
+ -exec sed '1i#line 1 "{}"' -i '{}' \;
+ '' + optionalString (hostPlatform.libc == "msvcrt") ''
+ $RANLIB "$out/lib/"*.a
+ '';
outputs = [ "out" "dev" ];
setOutputFlags = false;
-
- crossAttrs = rec {
- # We want to substitute the contents of configureFlags, removing thus the
- # usual --build and --host added on cross building.
- preConfigure = ''
- export configureFlags="--without-icu ${concatStringsSep " " commonConfigureFlags}"
- cat << EOF > user-config.jam
- using gcc : cross : $crossConfig-g++ ;
- EOF
- '';
- buildPhase = builder crossB2Args;
- installPhase = installer crossB2Args;
- postFixup = fixup;
- } // optionalAttrs (hostPlatform.libc == "msvcrt") {
- patches = fetchurl {
- url = "https://svn.boost.org/trac/boost/raw-attachment/ticket/7262/"
- + "boost-mingw.patch";
- sha256 = "0s32kwll66k50w6r5np1y5g907b7lcpsjhfgr7rsw7q5syhzddyj";
- };
-
- patchFlags = "-p0";
- };
}