mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-11 08:03:55 +00:00
fix(setup =_helpers): don't add -g0 CFLAGS sets -g (#3436)
On Unix, setuptools prepends $CFLAGS and $CPPFLAGS to the compiler flags (they always come before extra_compile_args and anything else; see distutils.sysconfig.customize_compiler). In practice, the environment variables are useful e.g. to quickly generate a debug build (e.g. by setting CFLAGS=-g), but Pybind11Extension currently unconditionally overwrites this with -g0. Instead, check the environment variables and only insert -g0 if not overridden by them.
This commit is contained in:
parent
b322018e15
commit
b11ff912a6
@ -42,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
import contextlib
|
import contextlib
|
||||||
import os
|
import os
|
||||||
import platform
|
import platform
|
||||||
|
import shlex
|
||||||
import shutil
|
import shutil
|
||||||
import sys
|
import sys
|
||||||
import sysconfig
|
import sysconfig
|
||||||
@ -143,7 +144,12 @@ class Pybind11Extension(_Extension):
|
|||||||
if WIN:
|
if WIN:
|
||||||
cflags += ["/EHsc", "/bigobj"]
|
cflags += ["/EHsc", "/bigobj"]
|
||||||
else:
|
else:
|
||||||
cflags += ["-fvisibility=hidden", "-g0"]
|
cflags += ["-fvisibility=hidden"]
|
||||||
|
env_cflags = os.environ.get("CFLAGS", "")
|
||||||
|
env_cppflags = os.environ.get("CPPFLAGS", "")
|
||||||
|
c_cpp_flags = shlex.split(env_cflags) + shlex.split(env_cppflags)
|
||||||
|
if not any(opt.startswith("-g") for opt in c_cpp_flags):
|
||||||
|
cflags += ["-g0"]
|
||||||
if MACOS:
|
if MACOS:
|
||||||
cflags += ["-stdlib=libc++"]
|
cflags += ["-stdlib=libc++"]
|
||||||
ldflags += ["-stdlib=libc++"]
|
ldflags += ["-stdlib=libc++"]
|
||||||
|
@ -8,6 +8,7 @@ import pytest
|
|||||||
|
|
||||||
DIR = os.path.abspath(os.path.dirname(__file__))
|
DIR = os.path.abspath(os.path.dirname(__file__))
|
||||||
MAIN_DIR = os.path.dirname(os.path.dirname(DIR))
|
MAIN_DIR = os.path.dirname(os.path.dirname(DIR))
|
||||||
|
WIN = sys.platform.startswith("win32") or sys.platform.startswith("cygwin")
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("parallel", [False, True])
|
@pytest.mark.parametrize("parallel", [False, True])
|
||||||
@ -71,13 +72,20 @@ def test_simple_setup_py(monkeypatch, tmpdir, parallel, std):
|
|||||||
encoding="ascii",
|
encoding="ascii",
|
||||||
)
|
)
|
||||||
|
|
||||||
subprocess.check_call(
|
out = subprocess.check_output(
|
||||||
[sys.executable, "setup.py", "build_ext", "--inplace"],
|
[sys.executable, "setup.py", "build_ext", "--inplace"],
|
||||||
stdout=sys.stdout,
|
|
||||||
stderr=sys.stderr,
|
|
||||||
)
|
)
|
||||||
|
if not WIN:
|
||||||
|
assert b"-g0" in out
|
||||||
|
out = subprocess.check_output(
|
||||||
|
[sys.executable, "setup.py", "build_ext", "--inplace", "--force"],
|
||||||
|
env=dict(os.environ, CFLAGS="-g"),
|
||||||
|
)
|
||||||
|
if not WIN:
|
||||||
|
assert b"-g0" not in out
|
||||||
|
|
||||||
# Debug helper printout, normally hidden
|
# Debug helper printout, normally hidden
|
||||||
|
print(out)
|
||||||
for item in tmpdir.listdir():
|
for item in tmpdir.listdir():
|
||||||
print(item.basename)
|
print(item.basename)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user