diff --git a/pkgs/development/tools/boost-build/default.nix b/pkgs/development/tools/boost-build/default.nix index 5016aa590b5f..c6c66d4d212d 100644 --- a/pkgs/development/tools/boost-build/default.nix +++ b/pkgs/development/tools/boost-build/default.nix @@ -2,18 +2,36 @@ , stdenv , fetchFromGitHub , bison +# boost derivation to use for the src and version. +# This is used by the boost derivation to build +# a b2 matching their version (by overriding this +# argument). Infinite recursion is not an issue +# since we only look at src and version of boost. +, useBoost ? {} }: -stdenv.mkDerivation rec { - pname = "boost-build"; - version = "4.4.1"; +let + defaultVersion = "4.4.1"; +in - src = fetchFromGitHub { +stdenv.mkDerivation { + pname = "boost-build"; + version = + if useBoost ? version + then "boost-${useBoost.version}" + else defaultVersion; + + src = useBoost.src or (fetchFromGitHub { owner = "boostorg"; repo = "build"; - rev = version; + rev = defaultVersion; sha256 = "1r4rwlq87ydmsdqrik4ly5iai796qalvw7603mridg2nwcbbnf54"; - }; + }); + + # b2 is in a subdirectory of boost source tarballs + postUnpack = lib.optionalString (useBoost ? src) '' + sourceRoot="$sourceRoot/tools/build" + ''; patches = [ # Upstream defaults to gcc on darwin, but we use clang. @@ -32,8 +50,13 @@ stdenv.mkDerivation rec { installPhase = '' runHook preInstall + ./b2 install --prefix="$out" - ln -s b2 "$out/bin/bjam" + + # older versions of b2 created this symlink, + # which we want to support building via useBoost. + test -e "$out/bin/bjam" || ln -s b2 "$out/bin/bjam" + runHook postInstall '';