Skip to content

Commit c125cc7

Browse files
authored
Collect all #define PYBIND11_HAS_... in pybind11/detail/common.h (#5647)
1 parent 002c05b commit c125cc7

File tree

7 files changed

+28
-37
lines changed

7 files changed

+28
-37
lines changed

include/pybind11/detail/common.h

+19-9
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,21 @@
5050
# endif
5151
#endif
5252

53+
// These PYBIND11_HAS_... macros are consolidated in pybind11/detail/common.h
54+
// to simplify backward compatibility handling for users (e.g., via #ifdef checks):
55+
#define PYBIND11_HAS_TYPE_CASTER_STD_FUNCTION_SPECIALIZATIONS 1
56+
#define PYBIND11_HAS_INTERNALS_WITH_SMART_HOLDER_SUPPORT 1
57+
#define PYBIND11_HAS_CPP_CONDUIT 1
58+
#define PYBIND11_HAS_NATIVE_ENUM 1
59+
60+
#if defined(PYBIND11_CPP17) && defined(__has_include)
61+
# if __has_include(<filesystem>)
62+
# define PYBIND11_HAS_FILESYSTEM 1
63+
# elif __has_include(<experimental/filesystem>)
64+
# define PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM 1
65+
# endif
66+
#endif
67+
5368
#if defined(__cpp_lib_launder) && !(defined(_MSC_VER) && (_MSC_VER < 1914))
5469
# define PYBIND11_STD_LAUNDER std::launder
5570
# define PYBIND11_HAS_STD_LAUNDER 1
@@ -168,14 +183,9 @@
168183
# define PYBIND11_HAS_VARIANT 1
169184
#endif
170185

171-
#if defined(PYBIND11_CPP17)
172-
# if defined(__has_include)
173-
# if __has_include(<string_view>)
174-
# define PYBIND11_HAS_STRING_VIEW
175-
# endif
176-
# elif defined(_MSC_VER)
177-
# define PYBIND11_HAS_STRING_VIEW
178-
# endif
186+
#if defined(PYBIND11_CPP17) \
187+
&& ((defined(__has_include) && __has_include(<string_view>)) || defined(_MSC_VER))
188+
# define PYBIND11_HAS_STRING_VIEW 1
179189
#endif
180190

181191
#if (defined(PYPY_VERSION) || defined(GRAALVM_PYTHON)) && !defined(PYBIND11_SIMPLE_GIL_MANAGEMENT)
@@ -213,7 +223,7 @@
213223

214224
// Must be after including <version> or one of the other headers specified by the standard
215225
#if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L
216-
# define PYBIND11_HAS_U8STRING
226+
# define PYBIND11_HAS_U8STRING 1
217227
#endif
218228

219229
// See description of PR #4246:

include/pybind11/detail/cpp_conduit.h

-2
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,5 @@ inline void *try_raw_pointer_ephemeral_from_cpp_conduit(handle src,
7171
return nullptr;
7272
}
7373

74-
#define PYBIND11_HAS_CPP_CONDUIT 1
75-
7674
PYBIND11_NAMESPACE_END(detail)
7775
PYBIND11_NAMESPACE_END(PYBIND11_NAMESPACE)

include/pybind11/detail/internals.h

-3
Original file line numberDiff line numberDiff line change
@@ -206,9 +206,6 @@ struct internals {
206206
}
207207
};
208208

209-
// For backwards compatibility (i.e. #ifdef guards):
210-
#define PYBIND11_HAS_INTERNALS_WITH_SMART_HOLDER_SUPPORT
211-
212209
enum class holder_enum_t : uint8_t {
213210
undefined,
214211
std_unique_ptr, // Default, lacking interop with std::shared_ptr.

include/pybind11/detail/native_enum_data.h

-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
#pragma once
66

7-
#define PYBIND11_HAS_NATIVE_ENUM
8-
97
#include "../pytypes.h"
108
#include "common.h"
119
#include "internals.h"

include/pybind11/functional.h

-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99

1010
#pragma once
1111

12-
#define PYBIND11_HAS_TYPE_CASTER_STD_FUNCTION_SPECIALIZATIONS
13-
1412
#include "pybind11.h"
1513

1614
#include <functional>

include/pybind11/stl/filesystem.h

+6-16
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,12 @@
1212

1313
#include <string>
1414

15-
#ifdef __has_include
16-
# if defined(PYBIND11_CPP17)
17-
# if __has_include(<filesystem>)
18-
# include <filesystem>
19-
# define PYBIND11_HAS_FILESYSTEM 1
20-
# elif __has_include(<experimental/filesystem>)
21-
# include <experimental/filesystem>
22-
# define PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM 1
23-
# endif
24-
# endif
25-
#endif
26-
27-
#if !defined(PYBIND11_HAS_FILESYSTEM) && !defined(PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM) \
28-
&& !defined(PYBIND11_HAS_FILESYSTEM_IS_OPTIONAL)
29-
# error \
30-
"Neither #include <filesystem> nor #include <experimental/filesystem is available. (Use -DPYBIND11_HAS_FILESYSTEM_IS_OPTIONAL to ignore.)"
15+
#if defined(PYBIND11_HAS_FILESYSTEM)
16+
# include <filesystem>
17+
#elif defined(PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM)
18+
# include <experimental/filesystem>
19+
#else
20+
# error "Neither #include <filesystem> nor #include <experimental/filesystem is available."
3121
#endif
3222

3323
PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)

tests/test_stl.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
#include "constructor_stats.h"
1313
#include "pybind11_tests.h"
1414

15-
#ifndef PYBIND11_HAS_FILESYSTEM_IS_OPTIONAL
16-
# define PYBIND11_HAS_FILESYSTEM_IS_OPTIONAL
15+
#if defined(PYBIND11_HAS_FILESYSTEM) || defined(PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM)
16+
# include <pybind11/stl/filesystem.h>
1717
#endif
18-
#include <pybind11/stl/filesystem.h>
18+
1919
#include <pybind11/typing.h>
2020

2121
#include <string>

0 commit comments

Comments
 (0)