Build platform ABI tag improvements

This commit adapts the ABI tag as follows:

- It removes ``PYBIND11_INTERNALS_KIND`` that was neither used nor documented.
- It adapts the MSVC ABI tag to be less stringent (see PR #4953)
- It adapts the GCC ABI tag to be less stringent.
- It adds a check for a Clang/libc++ ABI tag that wasn't present before

I plan to make a consistent set of changes to nanobind so that both
libraries use interchangeable platform ABI tags.
This commit is contained in:
Wenzel Jakob 2024-11-11 00:08:40 +09:00
parent 037310ea8a
commit 7a10c4adb2

View File

@ -310,25 +310,38 @@ struct type_info {
# endif # endif
#endif #endif
/// On Linux/OSX, changes in __GXX_ABI_VERSION__ indicate ABI incompatibility. // Catch other conditions that imply ABI incompatibility
/// On MSVC, changes in _MSC_VER may indicate ABI incompatibility (#2898). // - MSVC builds with different CRT versions
#ifndef PYBIND11_BUILD_ABI // - An anticipated MSVC ABI break ("vNext")
# if defined(__GXX_ABI_VERSION) // - Builds using libc++ with unstable ABIs
# define PYBIND11_BUILD_ABI "_cxxabi" PYBIND11_TOSTRING(__GXX_ABI_VERSION) // - Builds using libstdc++ with the legacy (pre-C++11) ABI
# elif defined(_MSC_VER) #if defined(_MSC_VER)
# define PYBIND11_BUILD_ABI "_mscver" PYBIND11_TOSTRING(_MSC_VER) # if defined(_MT) && defined(_DLL) // catches /MD or /MDd
# define PYBIND11_BUILD_LIB "_md"
# elif defined(_MT)
# define PYBIND11_BUILD_LIB "_mt" // catches /MT or /MTd
# else
# define PYBIND11_BUILD_LIB ""
# endif
# if (_MSC_VER) / 100 == 19
# define PYBIND11_BUILD_ABI NB_BUILD_LIB "_19"
# else
# define PYBIND11_BUILD_ABI NB_BUILD_LIB "_unknown"
# endif
#elif defined(_LIBCPP_ABI_VERSION)
# define PYBIND11_BUILD_ABI "_abi" NB_TOSTRING(_LIBCPP_ABI_VERSION)
#elif defined(__GLIBCXX__)
# if _GLIBCXX_USE_CXX11_ABI
# define PYBIND11_BUILD_ABI ""
# else
# define PYBIND11_BUILD_ABI "_legacy"
# endif
#else #else
# define PYBIND11_BUILD_ABI "" # define PYBIND11_BUILD_ABI ""
#endif #endif
#endif
#ifndef PYBIND11_INTERNALS_KIND
# define PYBIND11_INTERNALS_KIND ""
#endif
#define PYBIND11_PLATFORM_ABI_ID \ #define PYBIND11_PLATFORM_ABI_ID \
PYBIND11_INTERNALS_KIND PYBIND11_COMPILER_TYPE PYBIND11_STDLIB PYBIND11_BUILD_ABI \ PYBIND11_COMPILER_TYPE PYBIND11_STDLIB PYBIND11_BUILD_ABI PYBIND11_BUILD_TYPE
PYBIND11_BUILD_TYPE
#define PYBIND11_INTERNALS_ID \ #define PYBIND11_INTERNALS_ID \
"__pybind11_internals_v" PYBIND11_TOSTRING(PYBIND11_INTERNALS_VERSION) \ "__pybind11_internals_v" PYBIND11_TOSTRING(PYBIND11_INTERNALS_VERSION) \