mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-24 14:15:11 +00:00
a90e2af88d
* Factor out pybind11/compat/wrap_include_python_h.h * Fixes to resolve tests_packaging failures. * Factor out pybind11/compat/pybind11_platform_abi_id.h * Add pybind11/compat/README.txt and a couple source code comments. * Minor changes to comments. * Factor out pybind11/compat/pybind11_conduit_v1.h * Add long comment to pybind11/compat/pybind11_conduit_v1.h * Add pybind11/compat/README.txt to wheels. * Add `-fno-exceptions` to compiler options for exo_planet_c_api * 1. Move `target_compile_options()` into loop over test targets, in case the `"exo_planet_c_api"` target does not exist. 2. Add `-fno-exceptions` option also for `NVHPC`. 3. Also check for `__cpp_exceptions` in exo_planet_c_api.cpp. * 1. Fix accident (forgot to undo temporary change). 2. Special-case __EMSCRIPTEN__ in exo_planet_c_api.cpp * Give up on compiling exo_planet_c_api.cpp with MSVC `/EHs-c-`: There was one trouble maker (all other jobs worked): Visual Studio 15 2017: ``` cl : Command line warning D9025: overriding '/EHc' with '/EHc-' [C:\projects\pybind11\tests\exo_planet_c_api.vcxproj] ... C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xlocale(319): error C2220: warning treated as error - no 'object' file generated [C:\projects\pybind11\tests\exo_planet_c_api.vcxproj] C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xlocale(319): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc ``` * Move pybind11/compat to pybind11/conduit as suggested by @henryiii: https://github.com/pybind/pybind11/pull/5375#pullrequestreview-2329006001
77 lines
2.7 KiB
C++
77 lines
2.7 KiB
C++
// Copyright (c) 2024 The pybind Community.
|
|
|
|
// In production situations it is totally fine to build with
|
|
// C++ Exception Handling enabled. However, here we want to ensure that
|
|
// C++ Exception Handling is not required.
|
|
#if defined(_MSC_VER) || defined(__EMSCRIPTEN__)
|
|
// Too much trouble making the required cmake changes (see PR #5375).
|
|
#else
|
|
# ifdef __cpp_exceptions
|
|
// https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations#__cpp_exceptions
|
|
# error This test is meant to be built with C++ Exception Handling disabled, but __cpp_exceptions is defined.
|
|
# endif
|
|
# ifdef __EXCEPTIONS
|
|
// https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html
|
|
# error This test is meant to be built with C++ Exception Handling disabled, but __EXCEPTIONS is defined.
|
|
# endif
|
|
#endif
|
|
|
|
// THIS MUST STAY AT THE TOP!
|
|
#include <pybind11/conduit/pybind11_conduit_v1.h> // VERY light-weight dependency.
|
|
|
|
#include "test_cpp_conduit_traveler_types.h"
|
|
|
|
#include <Python.h>
|
|
|
|
namespace {
|
|
|
|
extern "C" PyObject *wrapGetLuggage(PyObject * /*self*/, PyObject *traveler) {
|
|
const auto *cpp_traveler = pybind11_conduit_v1::get_type_pointer_ephemeral<
|
|
pybind11_tests::test_cpp_conduit::Traveler>(traveler);
|
|
if (cpp_traveler == nullptr) {
|
|
return nullptr;
|
|
}
|
|
return PyUnicode_FromString(cpp_traveler->luggage.c_str());
|
|
}
|
|
|
|
extern "C" PyObject *wrapGetPoints(PyObject * /*self*/, PyObject *premium_traveler) {
|
|
const auto *cpp_premium_traveler = pybind11_conduit_v1::get_type_pointer_ephemeral<
|
|
pybind11_tests::test_cpp_conduit::PremiumTraveler>(premium_traveler);
|
|
if (cpp_premium_traveler == nullptr) {
|
|
return nullptr;
|
|
}
|
|
return PyLong_FromLong(static_cast<long>(cpp_premium_traveler->points));
|
|
}
|
|
|
|
PyMethodDef ThisMethodDef[] = {{"GetLuggage", wrapGetLuggage, METH_O, nullptr},
|
|
{"GetPoints", wrapGetPoints, METH_O, nullptr},
|
|
{nullptr, nullptr, 0, nullptr}};
|
|
|
|
struct PyModuleDef ThisModuleDef = {
|
|
PyModuleDef_HEAD_INIT, // m_base
|
|
"exo_planet_c_api", // m_name
|
|
nullptr, // m_doc
|
|
-1, // m_size
|
|
ThisMethodDef, // m_methods
|
|
nullptr, // m_slots
|
|
nullptr, // m_traverse
|
|
nullptr, // m_clear
|
|
nullptr // m_free
|
|
};
|
|
|
|
} // namespace
|
|
|
|
#if defined(WIN32) || defined(_WIN32)
|
|
# define EXO_PLANET_C_API_EXPORT __declspec(dllexport)
|
|
#else
|
|
# define EXO_PLANET_C_API_EXPORT __attribute__((visibility("default")))
|
|
#endif
|
|
|
|
extern "C" EXO_PLANET_C_API_EXPORT PyObject *PyInit_exo_planet_c_api() {
|
|
PyObject *m = PyModule_Create(&ThisModuleDef);
|
|
if (m == nullptr) {
|
|
return nullptr;
|
|
}
|
|
return m;
|
|
}
|