Commit da919262 by biergaizi Committed by GitHub

fix: remove -stdlib=libc++ from setup helpers, not needed on modern Pythons (#4639)

* Inject -stdlib=libc++ on macOS only when it's supported, close #4637.

On macOS, by default, pybind11 currently unconditionally set the compiler
flag "-stdlib=libc++" in Pybind11Extension.__init__(), regardless of which
compiler is used. This flag is required for clang, but is invalid for GCC.
If GCC is used, it causes compilation failures in all Python projects that
use pybind11, with the error message:

    arm64-apple-darwin22-gcc: error: unrecognized command-line option -stdlib=libc++.

This commit uses has_flag() to detect whether "-stdlib=libc++" on macOS,
and injects this flag from build_ext.build_extensions(), rather than
setting it unconditionally.

Signed-off-by: Yifeng Li <tomli@tomli.me>

* revert: just remove flags

---------

Signed-off-by: Yifeng Li <tomli@tomli.me>
Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
parent 956390a8
...@@ -144,7 +144,6 @@ class Pybind11Extension(_Extension): # type: ignore[misc] ...@@ -144,7 +144,6 @@ class Pybind11Extension(_Extension): # type: ignore[misc]
self.cxx_std = cxx_std self.cxx_std = cxx_std
cflags = [] cflags = []
ldflags = []
if WIN: if WIN:
cflags += ["/EHsc", "/bigobj"] cflags += ["/EHsc", "/bigobj"]
else: else:
...@@ -154,11 +153,7 @@ class Pybind11Extension(_Extension): # type: ignore[misc] ...@@ -154,11 +153,7 @@ class Pybind11Extension(_Extension): # type: ignore[misc]
c_cpp_flags = shlex.split(env_cflags) + shlex.split(env_cppflags) c_cpp_flags = shlex.split(env_cflags) + shlex.split(env_cppflags)
if not any(opt.startswith("-g") for opt in c_cpp_flags): if not any(opt.startswith("-g") for opt in c_cpp_flags):
cflags += ["-g0"] cflags += ["-g0"]
if MACOS:
cflags += ["-stdlib=libc++"]
ldflags += ["-stdlib=libc++"]
self._add_cflags(cflags) self._add_cflags(cflags)
self._add_ldflags(ldflags)
@property @property
def cxx_std(self) -> int: def cxx_std(self) -> int:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment