Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 29 additions & 12 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -479,6 +479,18 @@ if(ENABLE_PYTHON AND Python_FOUND)
endif(BUILD_DOC AND DOXYGEN_FOUND)
endif(SWIG_VERSION VERSION_GREATER 4.0)

if(SWIG_VERSION VERSION_GREATER_EQUAL 4.4.0)
# Use -nogil to tell compiler we do not need builtin threadsafety
list(APPEND CRPROPA_SWIG_DEFINES -nogil)
endif(SWIG_VERSION VERSION_GREATER_EQUAL 4.4.0)

if(SWIG_VERSION VERSION_GREATER_EQUAL 4.5)
# with swig 4.5 we can generate stub files directly with swig
list(APPEND CRPROPA_SWIG_DEFINES -pyi)
# with swig 4.5 we can explicitly enable typhints:
list(APPEND CRPROPA_SWIG_DEFINES -typehints)
endif(SWIG_VERSION VERSION_GREATER_EQUAL 4.5)

# use SWIG's builtin (maybe should be abandoned if everything will be tested and working with -builtin)
option(ENABLE_SWIG_BUILTIN "Use SWIG builtin option" On)

Expand All @@ -503,7 +515,7 @@ if(ENABLE_PYTHON AND Python_FOUND)
PROPERTIES
CPLUSPLUS ON
SWIG_MODULE_NAME "crpropa"
SWIG_FLAGS "${CRPROPA_SWIG_DEFINES};-dirprot;${CMAKE_SWIG_FLAGS}"
SWIG_FLAGS "${CRPROPA_SWIG_DEFINES};-dirprot;-threads;${CMAKE_SWIG_FLAGS}"
DEPENDS "${CRPROPA_SWIG_INPUTS};${CRPROPA_INCLUDES}"
OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}
)
Expand Down Expand Up @@ -545,6 +557,9 @@ if(ENABLE_PYTHON AND Python_FOUND)

install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/python/crpropa" DESTINATION "${Python_INSTALL_PACKAGE_DIR}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/crpropa.py" DESTINATION "${Python_INSTALL_PACKAGE_DIR}/crpropa")
if(SWIG_VERSION VERSION_GREATER_EQUAL 4.5)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/crpropa.pyi" DESTINATION "${Python_INSTALL_PACKAGE_DIR}/crpropa")
endif(SWIG_VERSION VERSION_GREATER_EQUAL 4.5)
install(TARGETS crpropa-swig LIBRARY DESTINATION "${Python_INSTALL_PACKAGE_DIR}/crpropa")
install(FILES ${CRPROPA_SWIG_INPUTS} DESTINATION ${CMAKE_INSTALL_PREFIX}/share/crpropa/swig_interface)

Expand All @@ -571,17 +586,19 @@ foreach(CRPROPA_BUNDLED_INCLUDE_DIR IN LISTS CRPROPA_BUNDLED_INCLUDE_DIRS)
install(DIRECTORY ${CRPROPA_BUNDLED_INCLUDE_DIR}/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include FILES_MATCHING PATTERN "*.h" PATTERN "*.hh" PATTERN "*.hpp" PATTERN "*.hxx")
endforeach()

option(ENABLE_PYBIND11_STUBGEN "Generate Pybind11 stubs" On)
if(ENABLE_PYBIND11_STUBGEN)
if(ENABLE_PYTHON AND Python_FOUND)
find_program(PYBIND11_STUBGEN_EXECUTABLE NAMES "pybind11-stubgen")
if(PYBIND11_STUBGEN_EXECUTABLE)
message(STATUS "Found pybind11-stubgen at ${PYBIND11_STUBGEN_EXECUTABLE}")
install(CODE "execute_process(COMMAND ${PYBIND11_STUBGEN_EXECUTABLE} --ignore-all-errors -o ${Python_SITELIB} crpropa)")
install(CODE "execute_process(COMMAND echo -- Generated python stubs over pybind11-stubgen for crpropa)")
endif(PYBIND11_STUBGEN_EXECUTABLE)
endif(ENABLE_PYTHON AND Python_FOUND)
endif(ENABLE_PYBIND11_STUBGEN)
if(SWIG_VERSION VERSION_LESS 4.5)
option(ENABLE_PYBIND11_STUBGEN "Generate Pybind11 stubs" On)
if(ENABLE_PYBIND11_STUBGEN)
if(ENABLE_PYTHON AND Python_FOUND)
find_program(PYBIND11_STUBGEN_EXECUTABLE NAMES "pybind11-stubgen")
if(PYBIND11_STUBGEN_EXECUTABLE)
message(STATUS "Found pybind11-stubgen at ${PYBIND11_STUBGEN_EXECUTABLE}")
install(CODE "execute_process(COMMAND ${PYBIND11_STUBGEN_EXECUTABLE} --ignore-all-errors -o ${Python_SITELIB} crpropa)")
install(CODE "execute_process(COMMAND echo -- Generated python stubs over pybind11-stubgen for crpropa)")
endif(PYBIND11_STUBGEN_EXECUTABLE)
endif(ENABLE_PYTHON AND Python_FOUND)
endif(ENABLE_PYBIND11_STUBGEN)
endif(SWIG_VERSION VERSION_LESS 4.5)



Expand Down
41 changes: 29 additions & 12 deletions plugin-template/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,9 @@ option(ENABLE_PYTHON "Create Python bindings with SWIG" On)
option(USE_OWN_CRPROPA "Use builtin CRPropa instead of in CRPROPA_PATH installed CRPropa" Off)
option(ENABLE_TESTING "Build tests and enable test target" On)
option(ENABLE_COVERAGE "Add code for coverage analysis." Off)
option(ENABLE_PYBIND11_STUBGEN "Generate Pybind11 stubs" Off)

if(SWIG_VERSION VERSION_LESS 4.5)
option(ENABLE_PYBIND11_STUBGEN "Generate Pybind11 stubs" Off)
endif(SWIG_VERSION VERSION_LESS 4.5)

# This token means "relative to the loaded binary" on each platform.
# It should work for unix-based platforms (Linux, MacOS).
Expand Down Expand Up @@ -225,6 +226,18 @@ if(ENABLE_PYTHON)
set(BUILTIN "")
endif(ENABLE_SWIG_BUILTIN)

if(SWIG_VERSION VERSION_GREATER_EQUAL 4.4.0)
# Use -nogil to tell compiler we do not need builtin threadsafety
list(APPEND ${pluginName}_SWIG_DEFINES -nogil)
endif(SWIG_VERSION VERSION_GREATER_EQUAL 4.4.0)

if(SWIG_VERSION VERSION_GREATER_EQUAL 4.5)
# with swig 4.5 we can generate stub files directly with swig
list(APPEND ${pluginName}_SWIG_DEFINES -pyi)
# with swig 4.5 we can explicitly enable typhints:
list(APPEND ${pluginName}_SWIG_DEFINES -typehints)
endif(SWIG_VERSION VERSION_GREATER_EQUAL 4.5)

file(GLOB_RECURSE ${pluginName}_SWIG_INPUTS ${CMAKE_CURRENT_SOURCE_DIR}/python/*.i)
set(${pluginName}_PYTHON_PACKAGE_DIR "${CMAKE_CURRENT_BINARY_DIR}/${pluginName}")
file(MAKE_DIRECTORY "${${pluginName}_PYTHON_PACKAGE_DIR}")
Expand All @@ -234,7 +247,7 @@ if(ENABLE_PYTHON)
PROPERTIES
CPLUSPLUS ON
SWIG_MODULE_NAME "${pluginName}"
SWIG_FLAGS "${${pluginName}_SWIG_DEFINES};-dirprot;${CMAKE_SWIG_FLAGS}"
SWIG_FLAGS "${${pluginName}_SWIG_DEFINES};-dirprot;-threads;${CMAKE_SWIG_FLAGS}"
OUTPUT_DIR "${${pluginName}_PYTHON_PACKAGE_DIR}"
INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include;${CRPropa_SWIG_INTERFACE_FILES};${${pluginName}_EXTRA_INCLUDES};"
)
Expand Down Expand Up @@ -402,16 +415,20 @@ install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/" DESTINATION "${CMAKE_IN
if(ENABLE_PYTHON AND Python_FOUND)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/python/${pluginName}" DESTINATION "${Python_INSTALL_PACKAGE_DIR}")
install(FILES "${${pluginName}_PYTHON_PACKAGE_DIR}/${pluginName}.py" DESTINATION "${Python_INSTALL_PACKAGE_DIR}/${pluginName}")
if(SWIG_VERSION VERSION_GREATER_EQUAL 4.5)
install(FILES "${${pluginName}_PYTHON_PACKAGE_DIR}/${pluginName}.pyi" DESTINATION "${Python_INSTALL_PACKAGE_DIR}/${pluginName}")
endif(SWIG_VERSION VERSION_GREATER_EQUAL 4.5)
install(TARGETS ${pluginName}-swig LIBRARY DESTINATION "${Python_INSTALL_PACKAGE_DIR}/${pluginName}")
install(FILES ${${pluginName}_SWIG_INPUTS} DESTINATION ${CMAKE_INSTALL_PREFIX}/share/${pluginName}/swig_interface)
endif(ENABLE_PYTHON AND Python_FOUND)


if(ENABLE_PYBIND11_STUBGEN AND ENABLE_PYTHON AND Python_FOUND)
find_program(PYBIND11_STUBGEN_EXECUTABLE NAMES "pybind11-stubgen")
if(PYBIND11_STUBGEN_EXECUTABLE)
message(STATUS "Found pybind11-stubgen at ${PYBIND11_STUBGEN_EXECUTABLE}")
install(CODE "execute_process(COMMAND ${PYBIND11_STUBGEN_EXECUTABLE} --ignore-all-errors -o ${Python_SITELIB} ${pluginName})")
install(CODE "execute_process(COMMAND echo -- Generated python stubs over pybind11-stubgen for ${pluginName})")
endif(PYBIND11_STUBGEN_EXECUTABLE)
endif(ENABLE_PYBIND11_STUBGEN AND ENABLE_PYTHON AND Python_FOUND)
if(SWIG_VERSION VERSION_LESS 4.5)
if(ENABLE_PYBIND11_STUBGEN AND ENABLE_PYTHON AND Python_FOUND)
find_program(PYBIND11_STUBGEN_EXECUTABLE NAMES "pybind11-stubgen")
if(PYBIND11_STUBGEN_EXECUTABLE)
message(STATUS "Found pybind11-stubgen at ${PYBIND11_STUBGEN_EXECUTABLE}")
install(CODE "execute_process(COMMAND ${PYBIND11_STUBGEN_EXECUTABLE} --ignore-all-errors -o ${Python_SITELIB} ${pluginName})")
install(CODE "execute_process(COMMAND echo -- Generated python stubs over pybind11-stubgen for ${pluginName})")
endif(PYBIND11_STUBGEN_EXECUTABLE)
endif(ENABLE_PYBIND11_STUBGEN AND ENABLE_PYTHON AND Python_FOUND)
endif(SWIG_VERSION VERSION_LESS 4.5)
2 changes: 1 addition & 1 deletion python/1_swig.i
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
#ifdef WITH_DOXYGEN
%include "docstrings_from_doxy.i"
#else
%feature("autodoc", "1"); // automatic docstrings
%feature("autodoc", "3"); // automatic docstrings
#endif

%{
Expand Down
10 changes: 2 additions & 8 deletions python/2_headers.i
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,8 @@

if (PyUnicode_Check(name)) {
input = PyUnicode_AsUTF8(name);
} else if (PyString_Check(name)){
input = PyString_AsString(name);
} else if (PyBytes_Check(name)){
input = PyBytes_AsString(name);
} else {
PyErr_SetString(PyExc_TypeError, "The argument of getProperty() must be a string/unicode object!");
return NULL;
Expand Down Expand Up @@ -221,9 +221,6 @@
$self->setProperty(input, false);
}
Py_RETURN_TRUE;
} else if (PyInt_Check(value)) {
$self->setProperty(input, crpropa::Variant::fromInt32(PyInt_AsLong(value)));
Py_RETURN_TRUE;
} else if (PyLong_Check(value)) {
$self->setProperty(input, crpropa::Variant::fromUInt64(PyLong_AsLong(value)));
Py_RETURN_TRUE;
Expand Down Expand Up @@ -363,9 +360,6 @@
$self->enableProperty(name, false, comment);
}
Py_RETURN_TRUE;
} else if (PyInt_Check(defaultValue)) {
$self->enableProperty(name, crpropa::Variant::fromInt32(PyInt_AsLong(defaultValue)), comment);
Py_RETURN_TRUE;
} else if (PyLong_Check(defaultValue)) {
$self->enableProperty(name, crpropa::Variant::fromInt64(PyLong_AsLong(defaultValue)), comment);
Py_RETURN_TRUE;
Expand Down
Loading