nixpkgs/pkgs/development/tools/build-managers/ninja/default.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

108 lines
2.8 KiB
Nix
Raw Normal View History

{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, asciidoc
, docbook_xml_dtd_45
, docbook_xsl
2022-09-10 19:08:52 +00:00
, installShellFiles
, libxslt
, python3
, re2c
2023-01-11 03:26:46 +00:00
, buildPackages
, buildDocs ? true
}:
2022-09-10 19:12:45 +00:00
stdenv.mkDerivation rec {
pname = "ninja";
2022-08-31 19:26:59 +00:00
version = "1.11.1";
2017-11-18 16:55:01 +00:00
src = fetchFromGitHub {
owner = "ninja-build";
repo = "ninja";
2022-09-10 19:12:45 +00:00
rev = "v${version}";
hash = "sha256-LvV/Fi2ARXBkfyA1paCRmLUwCh/rTyz+tGMg2/qEepI=";
};
2023-01-11 03:26:46 +00:00
depsBuildBuild = [ buildPackages.stdenv.cc ];
nativeBuildInputs = [
python3
re2c
2022-09-10 19:08:52 +00:00
installShellFiles
]
++ lib.optionals buildDocs [
asciidoc
docbook_xml_dtd_45
docbook_xsl
libxslt.bin
];
patches = lib.optionals stdenv.is32bit [
# Otherwise ninja may fail on some files in a larger FS.
(fetchpatch {
name = "stat64.patch";
url = "https://github.com/ninja-build/ninja/commit/7bba11ae704efc84cac5fde5e9be53f653f237d1.diff";
hash = "sha256-tINS57xLh1lwnYFWCQs5OudfgtIShaOh5zbmv7w5BnQ=";
})
];
2023-01-11 03:26:46 +00:00
postPatch = ''
# write rebuild args to file after bootstrap
substituteInPlace configure.py --replace "subprocess.check_call(rebuild_args)" "open('rebuild_args','w').write(rebuild_args[0])"
'';
buildPhase = ''
2022-09-04 20:23:15 +00:00
runHook preBuild
2023-01-11 03:26:46 +00:00
# for list of env vars
# see https://github.com/ninja-build/ninja/blob/v1.11.1/configure.py#L264
CXX="$CXX_FOR_BUILD" \
AR="$AR_FOR_BUILD" \
CFLAGS="$CFLAGS_FOR_BUILD" \
CXXFLAGS="$CXXFLAGS_FOR_BUILD" \
LDFLAGS="$LDFLAGS_FOR_BUILD" \
2017-11-18 16:55:01 +00:00
python configure.py --bootstrap
2023-01-11 03:26:46 +00:00
python configure.py
source rebuild_args
'' + lib.optionalString buildDocs ''
2018-09-15 22:36:21 +00:00
# "./ninja -vn manual" output copied here to support cross compilation.
2018-06-03 22:42:52 +00:00
asciidoc -b docbook -d book -o build/manual.xml doc/manual.asciidoc
xsltproc --nonet doc/docbook.xsl build/manual.xml > doc/manual.html
2022-09-04 20:23:15 +00:00
'' + ''
runHook postBuild
'';
installPhase = ''
2022-09-04 20:23:15 +00:00
runHook preInstall
2017-11-18 16:55:01 +00:00
install -Dm555 -t $out/bin ninja
2022-09-10 19:08:52 +00:00
installShellCompletion --name ninja \
--bash misc/bash-completion \
--zsh misc/zsh-completion
'' + lib.optionalString buildDocs ''
install -Dm444 -t $out/share/doc/ninja doc/manual.asciidoc doc/manual.html
2022-09-04 20:23:15 +00:00
'' + ''
runHook postInstall
'';
setupHook = ./setup-hook.sh;
meta = with lib; {
2013-05-11 09:49:32 +00:00
description = "Small build system with a focus on speed";
longDescription = ''
Ninja is a small build system with a focus on speed. It differs from
other build systems in two major respects: it is designed to have its
input files generated by a higher-level build system, and it is designed
to run builds as fast as possible.
'';
homepage = "https://ninja-build.org/";
license = licenses.asl20;
platforms = platforms.unix;
2017-11-18 16:55:01 +00:00
maintainers = with maintainers; [ thoughtpolice bjornfor orivej ];
2013-05-11 09:49:32 +00:00
};
2022-09-10 19:12:45 +00:00
}