diff options
author | Vladimír Čunát <v@cunat.cz> | 2024-05-31 07:30:41 +0200 |
---|---|---|
committer | Vladimír Čunát <v@cunat.cz> | 2024-05-31 07:30:41 +0200 |
commit | 5804775d03fe99dcbc31aa61de20626df0ed7571 (patch) | |
tree | ad1b4f0b5dd0bd8fd9ecc0632815d129a7cc60ec /pkgs/by-name/ni | |
parent | d3d81af60c22e9e93a3930a9630b210362341ab9 (diff) | |
parent | b64e2b1db37091eb93959fe8f27a7d7da84feb27 (diff) |
Merge branch 'staging' into staging-next
Diffstat (limited to 'pkgs/by-name/ni')
-rw-r--r-- | pkgs/by-name/ni/ninja/package.nix | 101 | ||||
-rw-r--r-- | pkgs/by-name/ni/ninja/setup-hook.sh | 86 |
2 files changed, 187 insertions, 0 deletions
diff --git a/pkgs/by-name/ni/ninja/package.nix b/pkgs/by-name/ni/ninja/package.nix new file mode 100644 index 0000000000000..23d279e362d76 --- /dev/null +++ b/pkgs/by-name/ni/ninja/package.nix @@ -0,0 +1,101 @@ +{ lib +, stdenv +, fetchFromGitHub +, asciidoc +, docbook_xml_dtd_45 +, docbook_xsl +, installShellFiles +, libxslt +, python3 +, re2c +, buildPackages +, buildDocs ? true +, nix-update-script +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "ninja"; + version = "1.12.1"; + + src = fetchFromGitHub { + owner = "ninja-build"; + repo = "ninja"; + rev = "v${finalAttrs.version}"; + hash = "sha256-RT5u+TDvWxG5EVQEYj931EZyrHUSAqK73OKDAascAwA="; + }; + + depsBuildBuild = [ buildPackages.stdenv.cc ]; + + nativeBuildInputs = [ + python3 + re2c + installShellFiles + ] + ++ lib.optionals buildDocs [ + asciidoc + docbook_xml_dtd_45 + docbook_xsl + libxslt.bin + ]; + + 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 = '' + runHook preBuild + + # 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" \ + python configure.py --bootstrap + python configure.py + + source rebuild_args + '' + lib.optionalString buildDocs '' + # "./ninja -vn manual" output copied here to support cross compilation. + asciidoc -b docbook -d book -o build/manual.xml doc/manual.asciidoc + xsltproc --nonet doc/docbook.xsl build/manual.xml > doc/manual.html + '' + '' + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + install -Dm555 -t $out/bin ninja + 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 + '' + '' + + runHook postInstall + ''; + + setupHook = ./setup-hook.sh; + + passthru.updateScript = nix-update-script {}; + + meta = { + description = "Small build system with a focus on speed"; + mainProgram = "ninja"; + 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 = lib.licenses.asl20; + platforms = lib.platforms.unix; + maintainers = with lib.maintainers; [ thoughtpolice bjornfor orivej ]; + }; +}) diff --git a/pkgs/by-name/ni/ninja/setup-hook.sh b/pkgs/by-name/ni/ninja/setup-hook.sh new file mode 100644 index 0000000000000..7fa5e4675f39b --- /dev/null +++ b/pkgs/by-name/ni/ninja/setup-hook.sh @@ -0,0 +1,86 @@ +ninjaBuildPhase() { + runHook preBuild + + local buildCores=1 + + # Parallel building is enabled by default. + if [ "${enableParallelBuilding-1}" ]; then + buildCores="$NIX_BUILD_CORES" + fi + + local flagsArray=( + -j$buildCores + $ninjaFlags "${ninjaFlagsArray[@]}" + ) + + echoCmd 'build flags' "${flagsArray[@]}" + TERM=dumb ninja "${flagsArray[@]}" + + runHook postBuild +} + +ninjaCheckPhase() { + runHook preCheck + + if [ -z "${checkTarget:-}" ]; then + if ninja -t query test >/dev/null 2>&1; then + checkTarget=test + fi + fi + + if [ -z "${checkTarget:-}" ]; then + echo "no test target found in ninja, doing nothing" + else + local buildCores=1 + + if [ "${enableParallelChecking-1}" ]; then + buildCores="$NIX_BUILD_CORES" + fi + + local flagsArray=( + -j$buildCores + $ninjaFlags "${ninjaFlagsArray[@]}" + $checkTarget + ) + + echoCmd 'check flags' "${flagsArray[@]}" + TERM=dumb ninja "${flagsArray[@]}" + fi + + runHook postCheck +} + +ninjaInstallPhase() { + runHook preInstall + + local buildCores=1 + + # Parallel building is enabled by default. + if [ "${enableParallelInstalling-1}" ]; then + buildCores="$NIX_BUILD_CORES" + fi + + # shellcheck disable=SC2086 + local flagsArray=( + -j$buildCores + $ninjaFlags "${ninjaFlagsArray[@]}" + ${installTargets:-install} + ) + + echoCmd 'install flags' "${flagsArray[@]}" + TERM=dumb ninja "${flagsArray[@]}" + + runHook postInstall +} + +if [ -z "${dontUseNinjaBuild-}" -a -z "${buildPhase-}" ]; then + buildPhase=ninjaBuildPhase +fi + +if [ -z "${dontUseNinjaCheck-}" -a -z "${checkPhase-}" ]; then + checkPhase=ninjaCheckPhase +fi + +if [ -z "${dontUseNinjaInstall-}" -a -z "${installPhase-}" ]; then + installPhase=ninjaInstallPhase +fi |