diff --git a/include/pybind11/detail/common.h b/include/pybind11/detail/common.h index d1cf8bd956..ab6221aff4 100644 --- a/include/pybind11/detail/common.h +++ b/include/pybind11/detail/common.h @@ -50,6 +50,21 @@ # endif #endif +// These PYBIND11_HAS_... macros are consolidated in pybind11/detail/common.h +// to simplify backward compatibility handling for users (e.g., via #ifdef checks): +#define PYBIND11_HAS_TYPE_CASTER_STD_FUNCTION_SPECIALIZATIONS 1 +#define PYBIND11_HAS_INTERNALS_WITH_SMART_HOLDER_SUPPORT 1 +#define PYBIND11_HAS_CPP_CONDUIT 1 +#define PYBIND11_HAS_NATIVE_ENUM 1 + +#if defined(PYBIND11_CPP17) && defined(__has_include) +# if __has_include() +# define PYBIND11_HAS_FILESYSTEM 1 +# elif __has_include() +# define PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM 1 +# endif +#endif + #if defined(__cpp_lib_launder) && !(defined(_MSC_VER) && (_MSC_VER < 1914)) # define PYBIND11_STD_LAUNDER std::launder # define PYBIND11_HAS_STD_LAUNDER 1 @@ -168,14 +183,9 @@ # define PYBIND11_HAS_VARIANT 1 #endif -#if defined(PYBIND11_CPP17) -# if defined(__has_include) -# if __has_include() -# define PYBIND11_HAS_STRING_VIEW -# endif -# elif defined(_MSC_VER) -# define PYBIND11_HAS_STRING_VIEW -# endif +#if defined(PYBIND11_CPP17) \ + && ((defined(__has_include) && __has_include()) || defined(_MSC_VER)) +# define PYBIND11_HAS_STRING_VIEW 1 #endif #if (defined(PYPY_VERSION) || defined(GRAALVM_PYTHON)) && !defined(PYBIND11_SIMPLE_GIL_MANAGEMENT) @@ -213,7 +223,7 @@ // Must be after including or one of the other headers specified by the standard #if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L -# define PYBIND11_HAS_U8STRING +# define PYBIND11_HAS_U8STRING 1 #endif // See description of PR #4246: diff --git a/include/pybind11/detail/cpp_conduit.h b/include/pybind11/detail/cpp_conduit.h index b66c2d39c0..a06b9b21a0 100644 --- a/include/pybind11/detail/cpp_conduit.h +++ b/include/pybind11/detail/cpp_conduit.h @@ -71,7 +71,5 @@ inline void *try_raw_pointer_ephemeral_from_cpp_conduit(handle src, return nullptr; } -#define PYBIND11_HAS_CPP_CONDUIT 1 - PYBIND11_NAMESPACE_END(detail) PYBIND11_NAMESPACE_END(PYBIND11_NAMESPACE) diff --git a/include/pybind11/detail/internals.h b/include/pybind11/detail/internals.h index 5317695859..3687b48744 100644 --- a/include/pybind11/detail/internals.h +++ b/include/pybind11/detail/internals.h @@ -206,9 +206,6 @@ struct internals { } }; -// For backwards compatibility (i.e. #ifdef guards): -#define PYBIND11_HAS_INTERNALS_WITH_SMART_HOLDER_SUPPORT - enum class holder_enum_t : uint8_t { undefined, std_unique_ptr, // Default, lacking interop with std::shared_ptr. diff --git a/include/pybind11/detail/native_enum_data.h b/include/pybind11/detail/native_enum_data.h index 26aa965989..a8f7675ba0 100644 --- a/include/pybind11/detail/native_enum_data.h +++ b/include/pybind11/detail/native_enum_data.h @@ -4,8 +4,6 @@ #pragma once -#define PYBIND11_HAS_NATIVE_ENUM - #include "../pytypes.h" #include "common.h" #include "internals.h" diff --git a/include/pybind11/functional.h b/include/pybind11/functional.h index 77ddf290ef..85f9b7907d 100644 --- a/include/pybind11/functional.h +++ b/include/pybind11/functional.h @@ -9,8 +9,6 @@ #pragma once -#define PYBIND11_HAS_TYPE_CASTER_STD_FUNCTION_SPECIALIZATIONS - #include "pybind11.h" #include diff --git a/include/pybind11/stl/filesystem.h b/include/pybind11/stl/filesystem.h index fb8164e0d5..4246518809 100644 --- a/include/pybind11/stl/filesystem.h +++ b/include/pybind11/stl/filesystem.h @@ -12,22 +12,12 @@ #include -#ifdef __has_include -# if defined(PYBIND11_CPP17) -# if __has_include() -# include -# define PYBIND11_HAS_FILESYSTEM 1 -# elif __has_include() -# include -# define PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM 1 -# endif -# endif -#endif - -#if !defined(PYBIND11_HAS_FILESYSTEM) && !defined(PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM) \ - && !defined(PYBIND11_HAS_FILESYSTEM_IS_OPTIONAL) -# error \ - "Neither #include nor #include +#elif defined(PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM) +# include +#else +# error "Neither #include nor #include #endif -#include + #include #include