python3Packages.pybind11: work around clang check

This is required for the upcoming clang 16 bump for Darwin. clang 16
defaults to C++17, which results in aligned allocations in pybind11.
These are supported in libc++ with the 10.12 SDK, but clang has a
hard-coded check for 10.13.
This commit is contained in:
Randy Eckenrode
2023-07-12 17:54:04 -06:00
committed by toonn
parent 8f1823936f
commit 04f489ca60
@@ -12,6 +12,7 @@
, pytestCheckHook
, libxcrypt
, makeSetupHook
, darwin
}: let
setupHook = makeSetupHook {
name = "pybind11-setup-hook";
@@ -22,6 +23,19 @@
pythonSitePackages = "${python}/${python.sitePackages}";
};
} ./setup-hook.sh;
# clang 16 defaults to C++17, which results in the use of aligned allocations by pybind11.
# libc++ supports aligned allocations via `posix_memalign`, which is available since 10.6,
# but clang has a check hard-coded requiring 10.13 because thats when Apple first shipped a
# support for C++17 aligned allocations on macOS.
# Tell clang were targeting 10.13 on x86_64-darwin while continuing to use the default SDK.
stdenv' = if stdenv.isDarwin && stdenv.isx86_64
then python.stdenv.override (oldStdenv: {
buildPlatform = oldStdenv.buildPlatform // { darwinMinVersion = "10.13"; };
targetPlatform = oldStdenv.targetPlatform // { darwinMinVersion = "10.13"; };
hostPlatform = oldStdenv.hostPlatform // { darwinMinVersion = "10.13"; };
})
else python.stdenv;
in buildPythonPackage rec {
pname = "pybind11";
version = "2.11.1";
@@ -41,6 +55,8 @@ in buildPythonPackage rec {
buildInputs = lib.optionals (pythonOlder "3.9") [ libxcrypt ];
propagatedBuildInputs = [ setupHook ];
stdenv = stdenv';
dontUseCmakeBuildDir = true;
# Don't build tests if not needed, read the doInstallCheck value at runtime