Description
Required prerequisites
- Make sure you've read the documentation. Your issue may be addressed there.
- Search the issue tracker and Discussions to verify that this hasn't already been reported. +1 or comment there if it has.
- Consider asking first in the Gitter chat room or in a Discussion.
What version (or hash if on master) of pybind11 are you using?
2.10.4
Problem description
pybind11 uses this to figure out the SUFFIX (extension) for cmake.
pybind11/tools/pybind11NewTools.cmake
Lines 100 to 102 in 0e43fcc
This is problematic because this can also contain the debug postfix ("_d" on Windows in debug mode) because of this:
What should be done instead is splitting the result into SUFFIX and DEBUG_POSTFIX.
At the moment, we are trying to use pybind11 with a Python that sets the DEBUG_POSTFIX _d when it needs. This is great for all python libraries.
However, cmake combines DEBUG_POSTFIX and SUFFIX, so we end up with double _d, so we _d_d which then crashes since Windows in debug mode is looking for a single _d.
At the moment, as a consumer of pybind11, we have no easy solution to fix this, only to avoid using pybind11_add_module
, but then we would need to reinvent quite a bit of boilerplate, which does not look sustainable.
So, the issue is that our Python package sets the DEBUG_POSTFIX and pybind11 sets the SUFFIX. These two get combined in debug mode. They do not overwrite each other.
pybind11_extension sets SUFFIX
to _d.something
and we set DEBUG_POSTFIX
to _d
.
_d + _d.something = _d_d.something
Reproducible example code
Call pybind11_add_module() from a consumer cmake extension module in the CMakeLists.txt file on Windows in debug mode.
Is this a regression? Put the last known working version here if it is.
Not a regression