@@ -15,95 +15,125 @@ set(headers
1515
1616set (sources
1717 src/API.cxx
18- src/CallContext.cxx
19- src/Converters.cxx
2018 src/CPPClassMethod.cxx
2119 src/CPPConstructor.cxx
2220 src/CPPDataMember.cxx
2321 src/CPPEnum.cxx
2422 src/CPPExcInstance.cxx
2523 src/CPPFunction.cxx
24+ src/CPPGetSetItem.cxx
2625 src/CPPInstance.cxx
2726 src/CPPMethod.cxx
2827 src/CPPOperator.cxx
2928 src/CPPOverload.cxx
3029 src/CPPScope.cxx
31- src/CPPGetSetItem.cxx
3230 src/CPyCppyyModule.cxx
31+ src/CallContext.cxx
32+ src/Converters.cxx
3333 src/CustomPyTypes.cxx
34- src/Dispatcher.cxx
3534 src/DispatchPtr.cxx
35+ src/Dispatcher.cxx
3636 src/Executors.cxx
3737 src/LowLevelViews.cxx
3838 src/MemoryRegulator.cxx
3939 src/ProxyWrappers.cxx
40+ src/PyException.cxx
41+ src/PyResult.cxx
4042 src/PyStrings.cxx
4143 src/Pythonize.cxx
4244 src/TemplateProxy.cxx
43- src/PyException.cxx
44- src/PyResult.cxx
4545 src/TupleOfInstances.cxx
4646 src/TypeManip.cxx
4747 src/Utility.cxx
4848)
4949
50- file (RELATIVE_PATH PYTHONDIR_TO_LIBDIR "${CMAKE_INSTALL_FULL_PYTHONDIR} " "${CMAKE_INSTALL_FULL_LIBDIR} " )
51-
52- set (libname cppyy)
5350
54- add_library (${libname} SHARED ${headers} ${sources} )
51+ add_library (CPyCppyy SHARED ${headers} ${sources} )
5552# Set the suffix to '.so' and the prefix to 'lib'
56- set_target_properties (${libname} PROPERTIES ${ROOT_LIBRARY_PROPERTIES} )
53+ set_target_properties (CPyCppyy PROPERTIES ${ROOT_LIBRARY_PROPERTIES} )
54+ target_link_libraries (CPyCppyy PRIVATE Core)
5755if (MSVC )
58- target_link_libraries (${libname} PRIVATE cppyy_backend)
59- target_link_libraries (${libname} PUBLIC Python3::Python)
60- set_target_properties (${libname} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE )
61- set_target_properties (${libname} PROPERTIES PREFIX "lib" )
62- set_target_properties (${libname} PROPERTIES SUFFIX ".pyd" )
56+ target_link_libraries (CPyCppyy PRIVATE cppyy_backend)
57+ target_link_libraries (CPyCppyy PUBLIC Python3::Python)
58+ set_target_properties (CPyCppyy PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE )
6359elseif (APPLE )
64- target_link_libraries (${libname} PRIVATE -Wl,-bind_at_load -Wl,-w -Wl,-undefined -Wl,dynamic_lookup cppyy_backend)
60+ target_link_libraries (CPyCppyy PRIVATE -Wl,-bind_at_load -Wl,-w -Wl,-undefined -Wl,dynamic_lookup cppyy_backend)
6561else ()
66- target_link_libraries (${libname} PRIVATE -Wl,--unresolved-symbols=ignore -all cppyy_backend)
62+ target_link_libraries (CPyCppyy PRIVATE -Wl,--unresolved-symbols=ignore -all cppyy_backend)
6763endif ()
6864
6965if (NOT MSVC )
70- target_compile_options (${libname} PRIVATE -Wno-strict-aliasing)
66+ target_compile_options (CPyCppyy PRIVATE -Wno-strict-aliasing)
7167endif ()
7268if (NOT "${CMAKE_CXX_COMPILER_ID} " MATCHES "Clang" AND NOT MSVC )
73- target_compile_options (${libname} PRIVATE
69+ target_compile_options (CPyCppyy PRIVATE
7470 -Wno-unused-but-set-parameter)
7571endif ()
7672
73+
74+ add_library (cppyy SHARED src/CPyCppyyPyModule.cxx)
75+
76+ # Set the suffix to '.so' and the prefix to 'lib'
77+ set_target_properties (cppyy PROPERTIES ${ROOT_LIBRARY_PROPERTIES} )
78+ if (MSVC )
79+ target_link_libraries (cppyy PRIVATE CPyCppyy)
80+ set_target_properties (cppyy PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE )
81+ set_target_properties (cppyy PROPERTIES PREFIX "lib" )
82+ set_target_properties (cppyy PROPERTIES SUFFIX ".pyd" )
83+ elseif (APPLE )
84+ target_link_libraries (cppyy PRIVATE -Wl,-bind_at_load -Wl,-w -Wl,-undefined -Wl,dynamic_lookup CPyCppyy)
85+ else ()
86+ target_link_libraries (cppyy PRIVATE -Wl,--unresolved-symbols=ignore -all CPyCppyy)
87+ endif ()
88+
7789# Avoid warnings due to invalid function casts from C++ functions in CPyCppyy
7890# to CPython API function typedefs (e.g. PyCFunction). This is a common pattern
7991# in CPython extension implementations, explicitly encouraged by the official
8092# CPython docs for C/C++ extensions. see
8193# https://docs.python.org/3/extending/extending.html#keyword-parameters-for-extension-functions
8294if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
83- target_compile_options (${libname} PRIVATE -Wno-cast-function-type )
95+ target_compile_options (CPyCppyy PRIVATE -Wno-cast-function-type )
8496endif ()
8597
8698# Disables warnings in Python 3.8 caused by the temporary extra filed for tp_print compatibility
8799# (see https://github.com/python/cpython/blob/3.8/Include/cpython/object.h#L260).
88100# Note that Python 3.8 is the lowers Python version that is still supported by
89101# ROOT, so this compile option can be completely removed soon.
90102if (NOT MSVC AND Python3_VERSION VERSION_LESS 3.9)
91- target_compile_options (${libname} PRIVATE -Wno-missing-field-initializers)
103+ target_compile_options (CPyCppyy PRIVATE -Wno-missing-field-initializers)
92104endif ()
93105
94- target_compile_definitions (${libname} PRIVATE NO_CPPYY_LEGACY_NAMESPACE)
106+ target_compile_definitions (CPyCppyy PRIVATE NO_CPPYY_LEGACY_NAMESPACE)
95107
96- target_include_directories (${libname}
97- SYSTEM PUBLIC ${Python3_INCLUDE_DIRS} )
108+ target_include_directories (CPyCppyy SYSTEM PUBLIC ${Python3_INCLUDE_DIRS} )
98109
99- target_include_directories (${libname}
100- PRIVATE
101- ${CMAKE_BINARY_DIR} /ginclude
110+ target_include_directories (CPyCppyy
102111 PUBLIC
103112 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include >
104113)
105114
106- set_property (GLOBAL APPEND PROPERTY ROOT_EXPORTED_TARGETS ${libname} )
115+ if (NOT MSVC )
116+ # Make sure that relative RUNPATH to main ROOT libraries is always correct.
117+
118+ file (RELATIVE_PATH pymoduledir_to_libdir_build ${localruntimedir} "${localruntimedir} " )
119+ file (RELATIVE_PATH pymoduledir_to_libdir_install ${CMAKE_INSTALL_PREFIX} /${CMAKE_INSTALL_PYTHONDIR} "${CMAKE_INSTALL_FULL_LIBDIR} " )
120+
121+ if (APPLE )
122+ set_target_properties (cppyy PROPERTIES
123+ BUILD_RPATH "@loader_path/${pymoduledir_to_libdir_build} "
124+ INSTALL_RPATH "@loader_path/${pymoduledir_to_libdir_install} "
125+ )
126+ else ()
127+ set_target_properties (cppyy PROPERTIES
128+ BUILD_RPATH "$ORIGIN/${pymoduledir_to_libdir_build} "
129+ INSTALL_RPATH "$ORIGIN/${pymoduledir_to_libdir_install} "
130+ )
131+ endif ()
132+
133+ endif ()
134+
135+ set_property (GLOBAL APPEND PROPERTY ROOT_EXPORTED_TARGETS CPyCppyy)
136+ set_property (GLOBAL APPEND PROPERTY ROOT_EXPORTED_TARGETS cppyy)
107137
108138if (NOT MSVC )
109139 # Make sure that relative RUNPATH to main ROOT libraries is always correct.
@@ -126,18 +156,17 @@ if(NOT MSVC)
126156endif ()
127157
128158# Install library
129- install (TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME} Exports
159+ install (TARGETS CPyCppyy EXPORT ${CMAKE_PROJECT_NAME} Exports
130160 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries
131161 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries
132162 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries)
133- if (NOT MSVC AND NOT CMAKE_INSTALL_LIBDIR STREQUAL CMAKE_INSTALL_PYTHONDIR)
134- # add a symlink to ${libname} in CMAKE_INSTALL_PYTHONDIR
135- set (LIB_FILE_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${libname} .so)
136- install (CODE "file(CREATE_LINK ${PYTHONDIR_TO_LIBDIR} /${LIB_FILE_NAME}
137- \$ ENV{DESTDIR}${CMAKE_INSTALL_FULL_PYTHONDIR} /${LIB_FILE_NAME} SYMBOLIC)" )
138- endif ()
139163
140- file (COPY ${headers} DESTINATION ${CMAKE_BINARY_DIR} /include /CPyCppyy)
164+ install (TARGETS cppyy EXPORT ${CMAKE_PROJECT_NAME} Exports
165+ RUNTIME DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries
166+ LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries
167+ ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries)
168+
169+ file (COPY ${headers} DESTINATION ${CMAKE_BINARY_DIR} /${CMAKE_INSTALL_INCLUDEDIR} /CPyCppyy)
141170install (FILES ${headers}
142171 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /CPyCppyy
143172 COMPONENT headers)
0 commit comments