llvm-{4,5}: don't build entire project to get the manpages

Much cheaper to build this way.

Also this gives them a different name to avoid confusion
and clutter when using `nix-env -qaP` or similar.
This commit is contained in:
Will Dietz 2018-01-03 09:51:31 -06:00
parent 4dff3ee959
commit 33c132e9b3
6 changed files with 88 additions and 48 deletions

View File

@ -5,7 +5,7 @@
let let
gcc = if stdenv.cc.isGNU then stdenv.cc.cc else stdenv.cc.cc.gcc; gcc = if stdenv.cc.isGNU then stdenv.cc.cc else stdenv.cc.cc.gcc;
self = stdenv.mkDerivation { self = stdenv.mkDerivation ({
name = "clang-${version}"; name = "clang-${version}";
unpackPhase = '' unpackPhase = ''
@ -37,10 +37,6 @@ let
patches = [ ./purity.patch ]; patches = [ ./purity.patch ];
postBuild = stdenv.lib.optionalString enableManpages ''
cmake --build . --target docs-clang-man
'';
postPatch = '' postPatch = ''
sed -i -e 's/Args.hasArg(options::OPT_nostdlibinc)/true/' lib/Driver/Tools.cpp sed -i -e 's/Args.hasArg(options::OPT_nostdlibinc)/true/' lib/Driver/Tools.cpp
sed -i -e 's/DriverArgs.hasArg(options::OPT_nostdlibinc)/true/' lib/Driver/ToolChains.cpp sed -i -e 's/DriverArgs.hasArg(options::OPT_nostdlibinc)/true/' lib/Driver/ToolChains.cpp
@ -49,8 +45,7 @@ let
sed -i '1s,^,find_package(Sphinx REQUIRED)\n,' docs/CMakeLists.txt sed -i '1s,^,find_package(Sphinx REQUIRED)\n,' docs/CMakeLists.txt
''; '';
outputs = [ "out" "python" ] outputs = [ "out" "python" ];
++ stdenv.lib.optional enableManpages "man";
# Clang expects to find LLVMgold in its own prefix # Clang expects to find LLVMgold in its own prefix
# Clang expects to find sanitizer libraries in its own prefix # Clang expects to find sanitizer libraries in its own prefix
@ -67,13 +62,6 @@ let
mv $out/share/clang/*.py $python/share/clang mv $out/share/clang/*.py $python/share/clang
rm $out/bin/c-index-test rm $out/bin/c-index-test
''
+ stdenv.lib.optionalString enableManpages ''
# Manually install clang manpage
cp docs/man/*.1 $out/share/man/man1/
# Move it and other man pages to 'man' output
moveToOutput "share/man" "$man"
''; '';
enableParallelBuilding = true; enableParallelBuilding = true;
@ -92,5 +80,23 @@ let
license = stdenv.lib.licenses.ncsa; license = stdenv.lib.licenses.ncsa;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };
}; } // stdenv.lib.optionalAttrs enableManpages {
name = "clang-manpages-${version}";
buildPhase = ''
make docs-clang-man
'';
installPhase = ''
mkdir -p $out/share/man/man1
# Manually install clang manpage
cp docs/man/*.1 $out/share/man/man1/
'';
outputs = [ "out" ];
doCheck = false;
meta.description = "man page for Clang ${version}";
});
in self in self

View File

@ -20,7 +20,7 @@ let
# Add man output without introducing extra dependencies. # Add man output without introducing extra dependencies.
overrideManOutput = drv: overrideManOutput = drv:
let drv-manpages = drv.override { enableManpages = true; }; in let drv-manpages = drv.override { enableManpages = true; }; in
drv // { man = drv-manpages.man; /*outputs = drv.outputs ++ ["man"];*/ }; drv // { man = drv-manpages.out; /*outputs = drv.outputs ++ ["man"];*/ };
llvm = callPackage ./llvm.nix { llvm = callPackage ./llvm.nix {
inherit compiler-rt_src stdenv; inherit compiler-rt_src stdenv;

View File

@ -27,7 +27,7 @@ let
# Used when creating a version-suffixed symlink of libLLVM.dylib # Used when creating a version-suffixed symlink of libLLVM.dylib
shortVersion = with stdenv.lib; shortVersion = with stdenv.lib;
concatStringsSep "." (take 2 (splitString "." release_version)); concatStringsSep "." (take 2 (splitString "." release_version));
in stdenv.mkDerivation rec { in stdenv.mkDerivation (rec {
name = "llvm-${version}"; name = "llvm-${version}";
unpackPhase = '' unpackPhase = ''
@ -39,8 +39,7 @@ in stdenv.mkDerivation rec {
''; '';
outputs = [ "out" ] outputs = [ "out" ]
++ stdenv.lib.optional enableSharedLibraries "lib" ++ stdenv.lib.optional enableSharedLibraries "lib";
++ stdenv.lib.optional enableManpages "man";
nativeBuildInputs = [ perl groff cmake python ] nativeBuildInputs = [ perl groff cmake python ]
++ stdenv.lib.optional enableManpages python.pkgs.sphinx; ++ stdenv.lib.optional enableManpages python.pkgs.sphinx;
@ -129,10 +128,7 @@ in stdenv.mkDerivation rec {
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/lib export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/lib
''; '';
postInstall = stdenv.lib.optionalString enableManpages '' postInstall = stdenv.lib.optionalString enableSharedLibraries ''
moveToOutput "share/man" "$man"
''
+ stdenv.lib.optionalString enableSharedLibraries ''
moveToOutput "lib/libLLVM-*" "$lib" moveToOutput "lib/libLLVM-*" "$lib"
moveToOutput "lib/libLLVM${stdenv.hostPlatform.extensions.sharedLibrary}" "$lib" moveToOutput "lib/libLLVM${stdenv.hostPlatform.extensions.sharedLibrary}" "$lib"
substituteInPlace "$out/lib/cmake/llvm/LLVMExports-${if debugVersion then "debug" else "release"}.cmake" \ substituteInPlace "$out/lib/cmake/llvm/LLVMExports-${if debugVersion then "debug" else "release"}.cmake" \
@ -160,4 +156,22 @@ in stdenv.mkDerivation rec {
maintainers = with stdenv.lib.maintainers; [ lovek323 raskin viric dtzWill ]; maintainers = with stdenv.lib.maintainers; [ lovek323 raskin viric dtzWill ];
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };
} } // stdenv.lib.optionalAttrs enableManpages {
name = "llvm-manpages-${version}";
buildPhase = ''
make docs-llvm-man
'';
propagatedBuildInputs = [ ];
installPhase = ''
make -C docs install
'';
outputs = [ "out" ];
doCheck = false;
meta.description = "man pages for LLVM ${version}";
})

View File

@ -5,7 +5,7 @@
let let
gcc = if stdenv.cc.isGNU then stdenv.cc.cc else stdenv.cc.cc.gcc; gcc = if stdenv.cc.isGNU then stdenv.cc.cc else stdenv.cc.cc.gcc;
self = stdenv.mkDerivation { self = stdenv.mkDerivation ({
name = "clang-${version}"; name = "clang-${version}";
unpackPhase = '' unpackPhase = ''
@ -37,10 +37,6 @@ let
patches = [ ./purity.patch ]; patches = [ ./purity.patch ];
postBuild = stdenv.lib.optionalString enableManpages ''
cmake --build . --target docs-clang-man
'';
postPatch = '' postPatch = ''
sed -i -e 's/DriverArgs.hasArg(options::OPT_nostdlibinc)/true/' \ sed -i -e 's/DriverArgs.hasArg(options::OPT_nostdlibinc)/true/' \
-e 's/Args.hasArg(options::OPT_nostdlibinc)/true/' \ -e 's/Args.hasArg(options::OPT_nostdlibinc)/true/' \
@ -50,8 +46,7 @@ let
sed -i '1s,^,find_package(Sphinx REQUIRED)\n,' docs/CMakeLists.txt sed -i '1s,^,find_package(Sphinx REQUIRED)\n,' docs/CMakeLists.txt
''; '';
outputs = [ "out" "python" ] outputs = [ "out" "python" ];
++ stdenv.lib.optional enableManpages "man";
# Clang expects to find LLVMgold in its own prefix # Clang expects to find LLVMgold in its own prefix
# Clang expects to find sanitizer libraries in its own prefix # Clang expects to find sanitizer libraries in its own prefix
@ -68,13 +63,6 @@ let
mv $out/share/clang/*.py $python/share/clang mv $out/share/clang/*.py $python/share/clang
rm $out/bin/c-index-test rm $out/bin/c-index-test
''
+ stdenv.lib.optionalString enableManpages ''
# Manually install clang manpage
cp docs/man/*.1 $out/share/man/man1/
# Move it and other man pages to 'man' output
moveToOutput "share/man" "$man"
''; '';
enableParallelBuilding = true; enableParallelBuilding = true;
@ -93,5 +81,23 @@ let
license = stdenv.lib.licenses.ncsa; license = stdenv.lib.licenses.ncsa;
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };
}; } // stdenv.lib.optionalAttrs enableManpages {
name = "clang-manpages-${version}";
buildPhase = ''
make docs-clang-man
'';
installPhase = ''
mkdir -p $out/share/man/man1
# Manually install clang manpage
cp docs/man/*.1 $out/share/man/man1/
'';
outputs = [ "out" ];
doCheck = false;
meta.description = "man page for Clang ${version}";
});
in self in self

View File

@ -20,7 +20,7 @@ let
# Add man output without introducing extra dependencies. # Add man output without introducing extra dependencies.
overrideManOutput = drv: overrideManOutput = drv:
let drv-manpages = drv.override { enableManpages = true; }; in let drv-manpages = drv.override { enableManpages = true; }; in
drv // { man = drv-manpages.man; /*outputs = drv.outputs ++ ["man"];*/ }; drv // { man = drv-manpages.out; /*outputs = drv.outputs ++ ["man"];*/ };
llvm = callPackage ./llvm.nix { llvm = callPackage ./llvm.nix {
inherit compiler-rt_src stdenv; inherit compiler-rt_src stdenv;

View File

@ -27,7 +27,7 @@ let
# Used when creating a version-suffixed symlink of libLLVM.dylib # Used when creating a version-suffixed symlink of libLLVM.dylib
shortVersion = with stdenv.lib; shortVersion = with stdenv.lib;
concatStringsSep "." (take 2 (splitString "." release_version)); concatStringsSep "." (take 2 (splitString "." release_version));
in stdenv.mkDerivation rec { in stdenv.mkDerivation (rec {
name = "llvm-${version}"; name = "llvm-${version}";
unpackPhase = '' unpackPhase = ''
@ -39,8 +39,7 @@ in stdenv.mkDerivation rec {
''; '';
outputs = [ "out" ] outputs = [ "out" ]
++ stdenv.lib.optional enableSharedLibraries "lib" ++ stdenv.lib.optional enableSharedLibraries "lib";
++ stdenv.lib.optional enableManpages "man";
nativeBuildInputs = [ perl groff cmake python ] nativeBuildInputs = [ perl groff cmake python ]
++ stdenv.lib.optional enableManpages python.pkgs.sphinx; ++ stdenv.lib.optional enableManpages python.pkgs.sphinx;
@ -123,10 +122,7 @@ in stdenv.mkDerivation rec {
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/lib export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/lib
''; '';
postInstall = stdenv.lib.optionalString enableManpages '' postInstall = stdenv.lib.optionalString enableSharedLibraries ''
moveToOutput "share/man" "$man"
''
+ stdenv.lib.optionalString enableSharedLibraries ''
moveToOutput "lib/libLLVM-*" "$lib" moveToOutput "lib/libLLVM-*" "$lib"
moveToOutput "lib/libLLVM${stdenv.hostPlatform.extensions.sharedLibrary}" "$lib" moveToOutput "lib/libLLVM${stdenv.hostPlatform.extensions.sharedLibrary}" "$lib"
substituteInPlace "$out/lib/cmake/llvm/LLVMExports-${if debugVersion then "debug" else "release"}.cmake" \ substituteInPlace "$out/lib/cmake/llvm/LLVMExports-${if debugVersion then "debug" else "release"}.cmake" \
@ -154,4 +150,22 @@ in stdenv.mkDerivation rec {
maintainers = with stdenv.lib.maintainers; [ lovek323 raskin viric dtzWill ]; maintainers = with stdenv.lib.maintainers; [ lovek323 raskin viric dtzWill ];
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
}; };
} } // stdenv.lib.optionalAttrs enableManpages {
name = "llvm-manpages-${version}";
buildPhase = ''
make docs-llvm-man
'';
propagatedBuildInputs = [];
installPhase = ''
make -C docs install
'';
outputs = [ "out" ];
doCheck = false;
meta.description = "man pages for LLVM ${version}";
})