python3.pkgs.ninja-python: replace with a stub implementation

Instead of packaging the upstream package, which downloads Ninja from
the web, we can stub it out to use ninja from nixpkgs.
This commit is contained in:
Theodore Ni 2023-08-03 06:06:34 -07:00
parent 99524a94ff
commit d36556b8a5
No known key found for this signature in database
GPG key ID: 48B67583BDDD4474
4 changed files with 43 additions and 58 deletions

View file

@ -1,70 +1,45 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, fetchurl
, cmake
, setuptools-scm
, scikit-build
, pytestCheckHook
, pytest-virtualenv
, flit-core
, ninja
}:
let
# these must match NinjaUrls.cmake
ninja_src_url = "https://github.com/Kitware/ninja/archive/v1.11.1.g95dee.kitware.jobserver-1.tar.gz";
ninja_src_sha256 = "7ba84551f5b315b4270dc7c51adef5dff83a2154a3665a6c9744245c122dd0db";
ninja_src = fetchurl {
url = ninja_src_url;
sha256 = ninja_src_sha256;
};
in
buildPythonPackage rec {
pname = "ninja";
version = "1.11.1";
inherit (ninja) version;
format = "pyproject";
src = fetchFromGitHub {
owner = "scikit-build";
repo = "ninja-python-distributions";
rev = version;
hash = "sha256-scCYsSEyN+u3qZhNhWYqHpJCl+JVJJbKz+T34gOXGJM=";
};
patches = [
# make sure cmake doesn't try to download the ninja sources
./no-download.patch
];
src = ./stub;
inherit ninja_src;
postUnpack = ''
# assume that if the hash matches, the source should be fine
if ! grep "${ninja_src_sha256}" $sourceRoot/NinjaUrls.cmake; then
echo "ninja_src_sha256 doesn't match the hash in NinjaUrls.cmake!"
exit 1
fi
mkdir -p "$sourceRoot/Ninja-src"
pushd "$sourceRoot/Ninja-src"
tar -xavf ${ninja_src} --strip-components 1
popd
substituteInPlace "$sourceRoot/pyproject.toml" \
--subst-var version
substituteInPlace "$sourceRoot/ninja/__init__.py" \
--subst-var-by BIN_DIR "${ninja}/bin"
'';
postPatch = ''
sed -i '/cov/d' setup.cfg
'';
dontUseCmakeConfigure = true;
inherit (ninja) setupHook;
nativeBuildInputs = [
setuptools-scm
scikit-build
cmake
flit-core
];
nativeCheckInputs = [
pytestCheckHook
pytest-virtualenv
preBuild = ''
cp "${ninja.src}/misc/ninja_syntax.py" ninja/ninja_syntax.py
'';
pythonImportsCheck = [
"ninja"
"ninja.ninja_syntax"
];
meta = with lib; {
description = "A small build system with a focus on speed";
longDescription = ''
This is a stub of the ninja package on PyPI that uses the ninja program
provided by nixpkgs instead of downloading ninja from the web.
'';
homepage = "https://github.com/scikit-build/ninja-python-distributions";
license = licenses.asl20;
maintainers = with maintainers; [ _999eagle tjni ];

View file

@ -1,10 +0,0 @@
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -64,6 +64,7 @@
# Download selected source archive
ExternalProject_add(download_ninja_source
SOURCE_DIR ${Ninja_SOURCE_DIR}
+ DOWNLOAD_COMMAND ""
URL ${${src_archive}_url}
URL_HASH SHA256=${${src_archive}_sha256}
DOWNLOAD_DIR ${ARCHIVE_DOWNLOAD_DIR}

View file

@ -0,0 +1,9 @@
import os
import subprocess
import sys
def _program(name, args):
return subprocess.call([os.path.join('@BIN_DIR@', name)] + args, close_fds=False)
def ninja():
raise SystemExit(_program('ninja', sys.argv[1:]))

View file

@ -0,0 +1,11 @@
[build-system]
requires = ["flit_core"]
build-backend = "flit_core.buildapi"
[project]
name = "ninja"
version = "@version@"
description = "Ninja is a small build system with a focus on speed"
[project.scripts]
ninja = "ninja:ninja"