[BUG]: Not detecting the SUFFIX and DEBUG_POSTFIX for cmake correctly
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 18k
- Forks
- 2.3k
- Avg merge
- 5d 17h
- Merged PRs (30d)
- 10
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.
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
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with tools/pybind11NewTools.cmake around the SUFFIX handling at lines 100-102 and inspect pybind11_extension and pybind11_add_module. Reproduce the Windows debug-mode case described in the issue, then verify that SUFFIX and DEBUG_POSTFIX are handled separately so their values are not duplicated.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cmake, cpp, python
- Domain
- build-system
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100