@@ -15,61 +15,84 @@ 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
32- src/CPyCppyyModule .cxx
30+ src/CallContext .cxx
31+ src/Converters .cxx
3332 src/CustomPyTypes.cxx
34- src/Dispatcher.cxx
3533 src/DispatchPtr.cxx
34+ src/Dispatcher.cxx
3635 src/Executors.cxx
36+ src/Initialization.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} " )
5150
52- set (libname cppyy)
51+ add_library (CPyCppyy SHARED ${headers} ${sources} )
52+ # Set the suffix to '.so' and the prefix to 'lib'
53+ set_target_properties (CPyCppyy PROPERTIES ${ROOT_LIBRARY_PROPERTIES} )
54+ target_link_libraries (CPyCppyy PRIVATE Core)
55+ if (MSVC )
56+ target_link_libraries (CPyCppyy PRIVATE cppyy_backend Python3::Python)
57+ set_target_properties (CPyCppyy PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE )
58+ set_target_properties (CPyCppyy PROPERTIES PREFIX "lib" )
59+ set_target_properties (CPyCppyy PROPERTIES SUFFIX ".pyd" )
60+ elseif (APPLE )
61+ target_link_libraries (CPyCppyy PRIVATE -Wl,-bind_at_load -Wl,-w -Wl,-undefined -Wl,dynamic_lookup cppyy_backend)
62+ else ()
63+ target_link_libraries (CPyCppyy PRIVATE -Wl,--unresolved-symbols=ignore -all cppyy_backend)
64+ endif ()
5365
54- add_library (${libname} SHARED ${headers} ${sources} )
66+ if (NOT MSVC )
67+ target_compile_options (CPyCppyy PRIVATE -Wno-strict-aliasing)
68+ endif ()
69+ if (NOT "${CMAKE_CXX_COMPILER_ID} " MATCHES "Clang" AND NOT MSVC )
70+ target_compile_options (CPyCppyy PRIVATE
71+ -Wno-unused-but-set-parameter)
72+ endif ()
73+
74+
75+ add_library (cppyy SHARED
76+ src/CPyCppyyModule.cxx
77+ )
5578# Set the suffix to '.so' and the prefix to 'lib'
56- set_target_properties (${libname} PROPERTIES ${ROOT_LIBRARY_PROPERTIES} )
79+ set_target_properties (cppyy PROPERTIES ${ROOT_LIBRARY_PROPERTIES} )
5780if (MSVC )
58- target_link_libraries (${libname} PUBLIC cppyy_backend Python3::Python )
59- set_target_properties (${libname} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE )
60- set_target_properties (${libname} PROPERTIES PREFIX "lib" )
61- set_target_properties (${libname} PROPERTIES SUFFIX ".pyd" )
81+ target_link_libraries (cppyy PRIVATE CPyCppyy )
82+ set_target_properties (cppyy PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE )
83+ set_target_properties (cppyy PROPERTIES PREFIX "lib" )
84+ set_target_properties (cppyy PROPERTIES SUFFIX ".pyd" )
6285elseif (APPLE )
63- target_link_libraries (${libname} PUBLIC -Wl,-bind_at_load -Wl,-w -Wl,-undefined -Wl,dynamic_lookup cppyy_backend )
86+ target_link_libraries (cppyy PRIVATE -Wl,-bind_at_load -Wl,-w -Wl,-undefined -Wl,dynamic_lookup CPyCppyy )
6487else ()
65- target_link_libraries (${libname} PUBLIC -Wl,--unresolved-symbols=ignore -all cppyy_backend )
88+ target_link_libraries (cppyy PRIVATE -Wl,--unresolved-symbols=ignore -all CPyCppyy )
6689endif ()
6790
6891if (NOT MSVC )
69- target_compile_options (${libname} PRIVATE -Wno-strict-aliasing)
92+ target_compile_options (cppyy PRIVATE -Wno-strict-aliasing)
7093endif ()
7194if (NOT "${CMAKE_CXX_COMPILER_ID} " MATCHES "Clang" AND NOT MSVC )
72- target_compile_options (${libname} PRIVATE
95+ target_compile_options (cppyy PRIVATE
7396 -Wno-unused-but-set-parameter)
7497endif ()
7598
@@ -79,42 +102,61 @@ endif()
79102# CPython docs for C/C++ extensions. see
80103# https://docs.python.org/3/extending/extending.html#keyword-parameters-for-extension-functions
81104if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
82- target_compile_options (${libname} PRIVATE -Wno-cast-function-type )
105+ target_compile_options (cppyy PRIVATE -Wno-cast-function-type )
106+ target_compile_options (CPyCppyy PRIVATE -Wno-cast-function-type )
83107endif ()
84108
85109# Disables warnings in Python 3.8 caused by the temporary extra filed for tp_print compatibility
86110# (see https://github.com/python/cpython/blob/3.8/Include/cpython/object.h#L260).
87111# Note that Python 3.8 is the lowers Python version that is still supported by
88112# ROOT, so this compile option can be completely removed soon.
89113if (NOT MSVC AND Python3_VERSION VERSION_LESS 3.9)
90- target_compile_options (${libname} PRIVATE -Wno-missing-field-initializers)
114+ target_compile_options (cppyy PRIVATE -Wno-missing-field-initializers)
115+ target_compile_options (CPyCppyy PRIVATE -Wno-missing-field-initializers)
91116endif ()
92117
93- target_compile_definitions (${libname} PRIVATE NO_CPPYY_LEGACY_NAMESPACE)
118+ target_compile_definitions (CPyCppyy PRIVATE NO_CPPYY_LEGACY_NAMESPACE)
94119
95- target_include_directories (${libname}
96- SYSTEM PUBLIC ${Python3_INCLUDE_DIRS} )
120+ target_include_directories (CPyCppyy SYSTEM PUBLIC ${Python3_INCLUDE_DIRS} )
97121
98- target_include_directories (${libname}
99- PRIVATE
100- ${CMAKE_BINARY_DIR} /ginclude
122+ target_include_directories (CPyCppyy
101123 PUBLIC
102124 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include >
103125)
104126
105- set_property (GLOBAL APPEND PROPERTY ROOT_EXPORTED_TARGETS ${libname} )
127+ if (NOT MSVC )
128+ # Make sure that relative RUNPATH to main ROOT libraries is always correct.
129+
130+ file (RELATIVE_PATH pymoduledir_to_libdir_build ${localruntimedir} "${localruntimedir} " )
131+ file (RELATIVE_PATH pymoduledir_to_libdir_install ${CMAKE_INSTALL_PREFIX} /${CMAKE_INSTALL_PYTHONDIR} "${CMAKE_INSTALL_FULL_LIBDIR} " )
132+
133+ if (APPLE )
134+ set_target_properties (cppyy PROPERTIES
135+ BUILD_RPATH "@loader_path/${pymoduledir_to_libdir_build} "
136+ INSTALL_RPATH "@loader_path/${pymoduledir_to_libdir_install} "
137+ )
138+ else ()
139+ set_target_properties (cppyy PROPERTIES
140+ BUILD_RPATH "$ORIGIN/${pymoduledir_to_libdir_build} "
141+ INSTALL_RPATH "$ORIGIN/${pymoduledir_to_libdir_install} "
142+ )
143+ endif ()
144+
145+ endif ()
146+
147+ set_property (GLOBAL APPEND PROPERTY ROOT_EXPORTED_TARGETS CPyCppyy)
148+ set_property (GLOBAL APPEND PROPERTY ROOT_EXPORTED_TARGETS cppyy)
106149
107150# Install library
108- install (TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME} Exports
151+ install (TARGETS CPyCppyy EXPORT ${CMAKE_PROJECT_NAME} Exports
109152 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries
110153 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries
111154 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries)
112- if (NOT MSVC AND NOT CMAKE_INSTALL_LIBDIR STREQUAL CMAKE_INSTALL_PYTHONDIR)
113- # add a symlink to ${libname} in CMAKE_INSTALL_PYTHONDIR
114- set (LIB_FILE_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${libname} .so)
115- install (CODE "file(CREATE_LINK ${PYTHONDIR_TO_LIBDIR} /${LIB_FILE_NAME}
116- \$ ENV{DESTDIR}${CMAKE_INSTALL_FULL_PYTHONDIR} /${LIB_FILE_NAME} SYMBOLIC)" )
117- endif ()
155+
156+ install (TARGETS cppyy EXPORT ${CMAKE_PROJECT_NAME} Exports
157+ RUNTIME DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries
158+ LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries
159+ ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries)
118160
119161file (COPY ${headers} DESTINATION ${CMAKE_BINARY_DIR} /include /CPyCppyy)
120162install (FILES ${headers}
0 commit comments