Loading pkgs/development/python-modules/pybind11/default.nix +54 −54 Original line number Diff line number Diff line Loading @@ -6,13 +6,14 @@ fetchFromGitHub, cmake, ninja, setuptools, scikit-build-core, pybind11, boost, eigen, python, catch2, numpy, pytestCheckHook, pytest, libxcrypt, makeSetupHook, }: Loading @@ -29,84 +30,83 @@ let in buildPythonPackage rec { pname = "pybind11"; version = "2.13.6"; version = "3.0.1"; pyproject = true; src = fetchFromGitHub { owner = "pybind"; repo = "pybind11"; tag = "v${version}"; hash = "sha256-SNLdtrOjaC3lGHN9MAqTf51U9EzNKQLyTMNPe0GcdrU="; hash = "sha256-ZiwNGsE1FOkhnWv/1ib1akhQ4FZvrXRCDnnBZoPp6r4="; }; build-system = [ cmake ninja setuptools pybind11.passthru.scikit-build-core-no-tests ]; buildInputs = [ # Used only for building tests - something we do even when cross # compiling. catch2 boost eigen ]; buildInputs = lib.optionals (pythonOlder "3.9") [ libxcrypt ]; propagatedNativeBuildInputs = [ setupHook ]; dontUseCmakeBuildDir = true; nativeCheckInputs = [ numpy pytest ]; # Don't build tests if not needed, read the doInstallCheck value at runtime preConfigure = '' if [ -n "$doInstallCheck" ]; then cmakeFlagsArray+=("-DBUILD_TESTING=ON") fi ''; pypaBuildFlags = [ # Keep the build directory around to run the tests. "-Cbuild-dir=build" ]; cmakeFlags = [ "-DBoost_INCLUDE_DIR=${lib.getDev boost}/include" "-DCATCH_INCLUDE_DIR=${lib.getDev catch2}/include/catch2" "-DEIGEN3_INCLUDE_DIR=${lib.getDev eigen}/include/eigen3" ] ++ lib.optionals (python.isPy3k && !stdenv.cc.isClang) [ "-DPYBIND11_CXX_STANDARD=-std=c++17" ]; postBuild = '' # build tests make -j $NIX_BUILD_CORES ''; postInstall = '' make install # Symlink the CMake-installed headers to the location expected by setuptools mkdir -p $out/include/${python.libPrefix} ln -sf $out/include/pybind11 $out/include/${python.libPrefix}/pybind11 ''; # Always build tests, because even when cross compiling building the tests # is another confirmation that everything is OK. (lib.cmakeBool "BUILD_TESTING" true) nativeCheckInputs = [ catch2 numpy pytestCheckHook # Override the `PYBIND11_NOPYTHON = true` in `pyproject.toml`. This # is required to build the tests. (lib.cmakeBool "PYBIND11_NOPYTHON" false) ]; disabledTestPaths = [ # require dependencies not available in nixpkgs "tests/test_embed/test_trampoline.py" "tests/test_embed/test_interpreter.py" # numpy changed __repr__ output of numpy dtypes "tests/test_numpy_dtypes.py" # no need to test internal packaging "tests/extra_python_package/test_files.py" # tests that try to parse setuptools stdout "tests/extra_setuptools/test_setuphelper.py" ]; dontUseCmakeConfigure = true; disabledTests = lib.optionals stdenv.hostPlatform.isDarwin [ # expects KeyError, gets RuntimeError # https://github.com/pybind/pybind11/issues/4243 "test_cross_module_exception_translator" ninjaFlags = [ "-C" "build" ]; postCheck = '' make cpptest checkTarget = "check"; checkPhase = "ninjaCheckPhase"; # Make the headers and CMake/pkg-config files inside the wheel # discoverable. This simulates the effect of the `pybind11[global]` # installation but works better for our build. postInstall = '' ln -s $out/${python.sitePackages}/pybind11/{include,share} $out/ ''; passthru = { # scikit-build-core's tests depend upon pybind11, and hence introduce # infinite recursion. To avoid this, we define here a scikit-build-core # derivation that doesn't depend on pybind11, and use it for pybind11's # build-system. scikit-build-core-no-tests = scikit-build-core.overridePythonAttrs { doCheck = false; }; }; hardeningDisable = lib.optional stdenv.hostPlatform.isMusl "fortify"; meta = with lib; { meta = { homepage = "https://github.com/pybind/pybind11"; changelog = "https://github.com/pybind/pybind11/blob/${src.rev}/docs/changelog.rst"; description = "Seamless operability between C++11 and Python"; Loading @@ -116,8 +116,8 @@ buildPythonPackage rec { C++ types in Python and vice versa, mainly to create Python bindings of existing C++ code. ''; license = licenses.bsd3; maintainers = with maintainers; [ license = lib.licenses.bsd3; maintainers = with lib.maintainers; [ yuriaisaka dotlambda ]; Loading pkgs/development/python-modules/scikit-build-core/append-cmakeFlags.sh +4 −13 Original line number Diff line number Diff line scikitBuildFlagsHook() { OLD_IFS="$IFS" IFS=';' concatTo flagsArray cmakeFlags cmakeFlagsArray local args=() if [[ -n "$SKBUILD_CMAKE_ARGS" ]]; then read -ra existing_args <<< "$SKBUILD_CMAKE_ARGS" args+=("${existing_args[@]}") fi args+=($cmakeFlags) args+=("${cmakeFlagsArray[@]}") export SKBUILD_CMAKE_ARGS="${args[*]}" IFS="$OLD_IFS" unset OLD_IFS for arg in "${flagsArray[@]}"; do appendToVar pypaBuildFlags "-Ccmake.args=$arg" done } preConfigureHooks+=(scikitBuildFlagsHook) Loading
pkgs/development/python-modules/pybind11/default.nix +54 −54 Original line number Diff line number Diff line Loading @@ -6,13 +6,14 @@ fetchFromGitHub, cmake, ninja, setuptools, scikit-build-core, pybind11, boost, eigen, python, catch2, numpy, pytestCheckHook, pytest, libxcrypt, makeSetupHook, }: Loading @@ -29,84 +30,83 @@ let in buildPythonPackage rec { pname = "pybind11"; version = "2.13.6"; version = "3.0.1"; pyproject = true; src = fetchFromGitHub { owner = "pybind"; repo = "pybind11"; tag = "v${version}"; hash = "sha256-SNLdtrOjaC3lGHN9MAqTf51U9EzNKQLyTMNPe0GcdrU="; hash = "sha256-ZiwNGsE1FOkhnWv/1ib1akhQ4FZvrXRCDnnBZoPp6r4="; }; build-system = [ cmake ninja setuptools pybind11.passthru.scikit-build-core-no-tests ]; buildInputs = [ # Used only for building tests - something we do even when cross # compiling. catch2 boost eigen ]; buildInputs = lib.optionals (pythonOlder "3.9") [ libxcrypt ]; propagatedNativeBuildInputs = [ setupHook ]; dontUseCmakeBuildDir = true; nativeCheckInputs = [ numpy pytest ]; # Don't build tests if not needed, read the doInstallCheck value at runtime preConfigure = '' if [ -n "$doInstallCheck" ]; then cmakeFlagsArray+=("-DBUILD_TESTING=ON") fi ''; pypaBuildFlags = [ # Keep the build directory around to run the tests. "-Cbuild-dir=build" ]; cmakeFlags = [ "-DBoost_INCLUDE_DIR=${lib.getDev boost}/include" "-DCATCH_INCLUDE_DIR=${lib.getDev catch2}/include/catch2" "-DEIGEN3_INCLUDE_DIR=${lib.getDev eigen}/include/eigen3" ] ++ lib.optionals (python.isPy3k && !stdenv.cc.isClang) [ "-DPYBIND11_CXX_STANDARD=-std=c++17" ]; postBuild = '' # build tests make -j $NIX_BUILD_CORES ''; postInstall = '' make install # Symlink the CMake-installed headers to the location expected by setuptools mkdir -p $out/include/${python.libPrefix} ln -sf $out/include/pybind11 $out/include/${python.libPrefix}/pybind11 ''; # Always build tests, because even when cross compiling building the tests # is another confirmation that everything is OK. (lib.cmakeBool "BUILD_TESTING" true) nativeCheckInputs = [ catch2 numpy pytestCheckHook # Override the `PYBIND11_NOPYTHON = true` in `pyproject.toml`. This # is required to build the tests. (lib.cmakeBool "PYBIND11_NOPYTHON" false) ]; disabledTestPaths = [ # require dependencies not available in nixpkgs "tests/test_embed/test_trampoline.py" "tests/test_embed/test_interpreter.py" # numpy changed __repr__ output of numpy dtypes "tests/test_numpy_dtypes.py" # no need to test internal packaging "tests/extra_python_package/test_files.py" # tests that try to parse setuptools stdout "tests/extra_setuptools/test_setuphelper.py" ]; dontUseCmakeConfigure = true; disabledTests = lib.optionals stdenv.hostPlatform.isDarwin [ # expects KeyError, gets RuntimeError # https://github.com/pybind/pybind11/issues/4243 "test_cross_module_exception_translator" ninjaFlags = [ "-C" "build" ]; postCheck = '' make cpptest checkTarget = "check"; checkPhase = "ninjaCheckPhase"; # Make the headers and CMake/pkg-config files inside the wheel # discoverable. This simulates the effect of the `pybind11[global]` # installation but works better for our build. postInstall = '' ln -s $out/${python.sitePackages}/pybind11/{include,share} $out/ ''; passthru = { # scikit-build-core's tests depend upon pybind11, and hence introduce # infinite recursion. To avoid this, we define here a scikit-build-core # derivation that doesn't depend on pybind11, and use it for pybind11's # build-system. scikit-build-core-no-tests = scikit-build-core.overridePythonAttrs { doCheck = false; }; }; hardeningDisable = lib.optional stdenv.hostPlatform.isMusl "fortify"; meta = with lib; { meta = { homepage = "https://github.com/pybind/pybind11"; changelog = "https://github.com/pybind/pybind11/blob/${src.rev}/docs/changelog.rst"; description = "Seamless operability between C++11 and Python"; Loading @@ -116,8 +116,8 @@ buildPythonPackage rec { C++ types in Python and vice versa, mainly to create Python bindings of existing C++ code. ''; license = licenses.bsd3; maintainers = with maintainers; [ license = lib.licenses.bsd3; maintainers = with lib.maintainers; [ yuriaisaka dotlambda ]; Loading
pkgs/development/python-modules/scikit-build-core/append-cmakeFlags.sh +4 −13 Original line number Diff line number Diff line scikitBuildFlagsHook() { OLD_IFS="$IFS" IFS=';' concatTo flagsArray cmakeFlags cmakeFlagsArray local args=() if [[ -n "$SKBUILD_CMAKE_ARGS" ]]; then read -ra existing_args <<< "$SKBUILD_CMAKE_ARGS" args+=("${existing_args[@]}") fi args+=($cmakeFlags) args+=("${cmakeFlagsArray[@]}") export SKBUILD_CMAKE_ARGS="${args[*]}" IFS="$OLD_IFS" unset OLD_IFS for arg in "${flagsArray[@]}"; do appendToVar pypaBuildFlags "-Ccmake.args=$arg" done } preConfigureHooks+=(scikitBuildFlagsHook)