Collect all #define PYBIND11_HAS_... in pybind11/detail/common.h (#5647)

This commit is contained in:
Ralf W. Grosse-Kunstleve
2025-05-08 23:46:01 -07:00
committed by GitHub
parent 002c05b17e
commit c125cc789c
7 changed files with 28 additions and 37 deletions

View File

@@ -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(<filesystem>)
# define PYBIND11_HAS_FILESYSTEM 1
# elif __has_include(<experimental/filesystem>)
# 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(<string_view>)
# 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(<string_view>)) || 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 <version> 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:

View File

@@ -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)

View File

@@ -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.

View File

@@ -4,8 +4,6 @@
#pragma once
#define PYBIND11_HAS_NATIVE_ENUM
#include "../pytypes.h"
#include "common.h"
#include "internals.h"

View File

@@ -9,8 +9,6 @@
#pragma once
#define PYBIND11_HAS_TYPE_CASTER_STD_FUNCTION_SPECIALIZATIONS
#include "pybind11.h"
#include <functional>

View File

@@ -12,22 +12,12 @@
#include <string>
#ifdef __has_include
# if defined(PYBIND11_CPP17)
# if __has_include(<filesystem>)
# include <filesystem>
# define PYBIND11_HAS_FILESYSTEM 1
# elif __has_include(<experimental/filesystem>)
# include <experimental/filesystem>
# 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 <filesystem> nor #include <experimental/filesystem is available. (Use -DPYBIND11_HAS_FILESYSTEM_IS_OPTIONAL to ignore.)"
#if defined(PYBIND11_HAS_FILESYSTEM)
# include <filesystem>
#elif defined(PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM)
# include <experimental/filesystem>
#else
# error "Neither #include <filesystem> nor #include <experimental/filesystem is available."
#endif
PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)

View File

@@ -12,10 +12,10 @@
#include "constructor_stats.h"
#include "pybind11_tests.h"
#ifndef PYBIND11_HAS_FILESYSTEM_IS_OPTIONAL
# define PYBIND11_HAS_FILESYSTEM_IS_OPTIONAL
#if defined(PYBIND11_HAS_FILESYSTEM) || defined(PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM)
# include <pybind11/stl/filesystem.h>
#endif
#include <pybind11/stl/filesystem.h>
#include <pybind11/typing.h>
#include <string>