1- cmake_minimum_required (VERSION 3.16)
2- set (YGGDRASIL_REQUIRE_SKBUILD ON )
1+ cmake_minimum_required (VERSION 3.15)
2+ if (NOT PROJECT_NAME )
3+ if (NOT SKBUILD)
4+ message (FATAL_ERROR "Must be built via scikit-build-core" )
5+ endif ()
6+ PROJECT (${SKBUILD_PROJECT_NAME} VERSION "${SKBUILD_PROJECT_VERSION} " )
7+ endif ()
8+
9+ set (PYRJ_ALTERNATE_MODULE "yggdrasil_rapidjson" CACHE STRING "Name of the Python module that should be built" )
10+
311set (CMAKE_VERBOSE_MAKEFILE ON )
4- include (${CMAKE_CURRENT_SOURCE_DIR} /cmake/ygg_options.cmake)
512
6- if (NOT DEFAULT_RAPIDJSON_INCLUDE_DIRS)
7- cmake_path(APPEND CMAKE_CURRENT_SOURCE_DIR rapidjson include
8- OUTPUT_VARIABLE DEFAULT_RAPIDJSON_INCLUDE_DIRS)
9- endif ()
13+ include (${CMAKE_CURRENT_SOURCE_DIR} /cmake/ygg_options.cmake)
1014
1115find_package (
1216 ${PYTHON_PREFIX} COMPONENTS
13- Interpreter Development.Module NumPy REQUIRED)
14- if (${PYTHON_PREFIX} _VERSION VERSION_LESS "3.7.0" )
15- message (FATAL_ERROR "Only Python 3.7+ is supported." )
17+ Interpreter Development.Module NumPy REQUIRED
18+ )
19+ if (${PYTHON_PREFIX} _VERSION VERSION_LESS "3.9.0" )
20+ message (FATAL_ERROR "Only Python 3.9+ is supported." )
1621endif ()
1722
23+ set (PYRJ_TARGET "yggdrasil_python_rapidjson" )
1824set (PYRJ_SRC "${CMAKE_CURRENT_SOURCE_DIR} /rapidjson.cpp" )
1925
2026if (PYRJ_ALTERNATE_MODULE)
27+ if (NOT PYRJ_LIBNAME)
28+ string (FIND ${PYRJ_ALTERNATE_MODULE} "." IDX_LIBNAME REVERSE )
29+ message (STATUS "IDX_LIBNAME = ${IDX_LIBNAME} " )
30+ if (IDX_LIBNAME EQUAL -1)
31+ set (PYRJ_LIBNAME "${PYRJ_ALTERNATE_MODULE} " )
32+ else ()
33+ string (
34+ SUBSTRING ${PYRJ_ALTERNATE_MODULE} (IDX_LIBNAME + 1) -1
35+ PYRJ_LIBNAME
36+ )
37+ endif ()
38+ endif ()
2139 file (WRITE "${CMAKE_CURRENT_BINARY_DIR} /replace_module.cmake"
2240 [=[
2341 file(READ "${SOURCE}" TEXT)
2442 string(REPLACE "\"rapidjson\"" "\"${PYRJ_ALTERNATE_MODULE}\"" TEXT "${TEXT}")
2543 string(REPLACE "\"rapidjson." "\"${PYRJ_ALTERNATE_MODULE}." TEXT "${TEXT}")
44+ string(REPLACE ":rapidjson." ":${PYRJ_ALTERNATE_MODULE}." TEXT "${TEXT}")
45+ string(REPLACE "PyInit_rapidjson" "PyInit_${PYRJ_LIBNAME}" TEXT "${TEXT}")
2646 file(WRITE "${TARGET}" "${TEXT}")
2747 ]=])
2848
@@ -42,46 +62,59 @@ if (PYRJ_ALTERNATE_MODULE)
4262 "-DSOURCE=${src} "
4363 "-DTARGET=${dst} "
4464 "-DPYRJ_ALTERNATE_MODULE=${PYRJ_ALTERNATE_MODULE} "
65+ "-DPYRJ_LIBNAME=${PYRJ_LIBNAME} "
4566 -P "${CMAKE_CURRENT_BINARY_DIR} /replace_module.cmake"
4667 DEPENDS "${src} " "${CMAKE_CURRENT_BINARY_DIR} /replace_module.cmake" )
4768 endforeach ()
4869 set (PYRJ_SRC "${CMAKE_CURRENT_BINARY_DIR} /rapidjson.cpp" )
4970 add_custom_target (alt_rapidjson DEPENDS ${ALT_PYRJ_CPP} )
5071endif ()
5172
73+ if (NOT PYRJ_LIBNAME)
74+ set (PYRJ_LIBNAME "rapidjson" )
75+ endif ()
76+
77+ message (STATUS "PYRJ_ALTERNATE_MODULE = ${PYRJ_ALTERNATE_MODULE} " )
78+ message (STATUS "PYRJ_LIBNAME = ${PYRJ_LIBNAME} " )
79+ message (STATUS "PYRJ_TARGET = ${PYRJ_TARGET} " )
80+
5281if (PYTHON_PREFIX STREQUAL "Python" )
53- Python_add_library(rapidjson MODULE ${PYRJ_SRC} )
82+ Python_add_library(${PYRJ_TARGET} MODULE ${PYRJ_SRC} )
5483else ()
55- Python3_add_library(rapidjson MODULE ${PYRJ_SRC} )
84+ Python3_add_library(${PYRJ_TARGET} MODULE ${PYRJ_SRC} )
5685endif ()
86+ set_target_properties (
87+ ${PYRJ_TARGET} PROPERTIES OUTPUT_NAME ${PYRJ_LIBNAME}
88+ )
5789
5890if (PYRJ_ALTERNATE_MODULE)
59- add_dependencies (rapidjson alt_rapidjson)
91+ add_dependencies (${PYRJ_TARGET} alt_rapidjson)
6092 target_include_directories (
61- rapidjson PUBLIC
62- $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >)
93+ ${PYRJ_TARGET} PUBLIC
94+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
95+ )
6396endif ()
6497
65- target_include_directories (rapidjson PUBLIC ${RAPIDJSON_INCLUDE_DIRS} )
66- target_link_libraries (rapidjson PUBLIC ${PYTHON_PREFIX} ::NumPy)
98+ target_include_directories (${PYRJ_TARGET} PUBLIC ${RAPIDJSON_INCLUDE_DIRS} )
99+ target_link_libraries (${PYRJ_TARGET} PUBLIC ${PYTHON_PREFIX} ::NumPy)
67100
68101target_compile_options (
69- rapidjson PUBLIC
102+ ${PYRJ_TARGET} PUBLIC
70103 -DRAPIDJSON_YGGDRASIL
71104 -DRAPIDJSON_YGGDRASIL_PYTHON
72105 -DRAPIDJSON_HAS_STDSTRING
73106 -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION
74107 -D_USE_MATH_DEFINES)
75108if (RAPIDJSON_EXACT_VERSION)
76109 target_compile_options (
77- rapidjson PUBLIC
110+ ${PYRJ_TARGET} PUBLIC
78111 "-DRAPIDJSON_EXACT_VERSION=${RAPIDJSON_EXACT_VERSION} " )
79112endif ()
80113if (ASAN_COMPILE_FLAGS)
81- target_compile_options (rapidjson PUBLIC ${ASAN_COMPILE_FLAGS} )
114+ target_compile_options (${PYRJ_TARGET} PUBLIC ${ASAN_COMPILE_FLAGS} )
82115endif ()
83116if (ASAN_LINK_FLAGS)
84- target_link_options (rapidjson PUBLIC ${ASAN_LINK_FLAGS} )
117+ target_link_options (${PYRJ_TARGET} PUBLIC ${ASAN_LINK_FLAGS} )
85118endif ()
86119
87120if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
@@ -114,14 +147,14 @@ if (EXISTS RAPIDJSON_EXACT_VERSION_FILE)
114147 file (READ ${RAPIDJSON_EXACT_VERSION_FILE} RAPIDJSON_EXACT_VERSION)
115148 string (STRIP ${RAPIDJSON_EXACT_VERSION} RAPIDJSON_EXACT_VERSION)
116149 target_compile_options (
117- rapidjson PUBLIC
150+ ${PYRJ_TARGET} PUBLIC
118151 "-DRAPIDJSON_EXACT_VERSION=${RAPIDJSON_EXACT_VERSION} " )
119152endif ()
120153
121154if (NOT ${PYTHON_PREFIX} _INSTALL_DIR)
122155 set (${PYTHON_PREFIX} _INSTALL_DIR "." )
123156endif ()
124157
125- install (TARGETS rapidjson
158+ install (TARGETS ${PYRJ_TARGET}
126159 LIBRARY DESTINATION ${${PYTHON_PREFIX} _INSTALL_DIR}
127160 RUNTIME DESTINATION ${${PYTHON_PREFIX} _INSTALL_DIR})
0 commit comments