Skip to content

Commit d384f36

Browse files
committed
ENH: Add configure package options for PythonQt
Configure so that other builds can find PythonQt with find_package
1 parent 97346f2 commit d384f36

File tree

2 files changed

+66
-18
lines changed

2 files changed

+66
-18
lines changed

src/CMakeLists.txt

Lines changed: 63 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This is the actual package to be installed
22
# PythonQtParent project contains all compontents
3-
project(PythonQt LANGUAGES CXX)
3+
project(PythonQt LANGUAGES CXX VERSION 3.5.6)
44

55
set(CMAKE_AUTOMOC ON)
66

@@ -39,12 +39,6 @@ set(Core_SOURCES
3939
PythonQtStdOut.cpp
4040
PythonQtThreadSupport.cpp
4141
)
42-
target_sources(${PROJECT_NAME} PRIVATE
43-
${Core_SOURCES}
44-
${PYTHONQT_WRAPPER_CORE_BUILTIN_SOURCES}
45-
${PYTHONQT_WRAPPER_GUI_BUILTIN_SOURCES}
46-
)
47-
unset(Core_SOURCES)
4842

4943
set(Core_PUBLIC_HEADER
5044
PythonQt.h
@@ -75,11 +69,18 @@ set(Core_PUBLIC_HEADER
7569
PythonQtBoolResult.h
7670
PythonQtThreadSupport.h
7771
)
78-
set_target_properties(${PROJECT_NAME} PROPERTIES
79-
OUTPUT_NAME PythonQt-${PYTHONQT_SUFFIX}
80-
PUBLIC_HEADER ${Core_PUBLIC_HEADER}
81-
)
82-
unset(Core_PUBLIC_HEADER)
72+
target_sources(${PROJECT_NAME} PRIVATE
73+
${Core_SOURCES}
74+
${PYTHONQT_WRAPPER_CORE_BUILTIN_SOURCES}
75+
${PYTHONQT_WRAPPER_GUI_BUILTIN_SOURCES}
76+
)
77+
78+
foreach( header ${Core_PUBLIC_HEADER})
79+
set_target_properties(${PROJECT_NAME} PROPERTIES
80+
# OUTPUT_NAME ${PROJECT_NAME}Targets #PythonQt-${PYTHONQT_SUFFIX}
81+
PUBLIC_HEADER ${header}
82+
)
83+
endforeach()
8384

8485
add_dependencies(${PROJECT_NAME} PythonQtWrapper)
8586

@@ -92,7 +93,13 @@ target_link_libraries(${PROJECT_NAME} PUBLIC
9293

9394
target_compile_definitions(${PROJECT_NAME} PRIVATE PYTHONQT_EXPORTS PYTHONQT_CATCH_ALL_EXCEPTIONS)
9495

95-
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR})
96+
target_include_directories(${PROJECT_NAME} PUBLIC
97+
INTERFACE
98+
# Use headers in the build tree when configuring/running CMake here:
99+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
100+
# Use headers in the install tree when someone does `find_package(PythonQt)`:
101+
$<INSTALL_INTERFACE:include/PythonQt>
102+
)
96103

97104
if(MSVC)
98105
target_compile_options(${PROJECT_NAME} PRIVATE "/bigobj")
@@ -125,9 +132,47 @@ include(GNUInstallDirs)
125132
# Install library (on windows, put the dll in 'bin' and the archive in 'lib')
126133

127134
install(TARGETS ${PROJECT_NAME}
128-
BUNDLE DESTINATION .
129-
LIBRARY DESTINATION ${PythonQt_INSTALL_LIBRARY_DIR}
130-
ARCHIVE DESTINATION ${PythonQt_INSTALL_ARCHIVE_DIR}
131-
RUNTIME DESTINATION ${PythonQt_INSTALL_RUNTIME_DIR}
132-
PUBLIC_HEADER DESTINATION ${PythonQt_INSTALL_INCLUDE_DIR}
135+
EXPORT ${PROJECT_NAME}Targets
136+
BUNDLE DESTINATION ${CMAKE_INSTALL_PREFIX}
137+
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${PythonQt_INSTALL_LIBRARY_DIR}
138+
ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/${PythonQt_INSTALL_ARCHIVE_DIR}
139+
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/${PythonQt_INSTALL_RUNTIME_DIR}
140+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_PREFIX}/${PythonQt_INSTALL_INCLUDE_DIR}
141+
)
142+
143+
install(FILES
144+
${Core_PUBLIC_HEADER}
145+
DESTINATION ${CMAKE_INSTALL_PREFIX}/${PythonQt_INSTALL_INCLUDE_DIR}
146+
)
147+
148+
149+
#-----------------------------------------------------------------------------
150+
# Configure so that other builds can find PythonQt with find_package
151+
include(CMakePackageConfigHelpers)
152+
153+
# Generate PythonQtConfigVersion.cmake
154+
write_basic_package_version_file(
155+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
156+
VERSION ${PROJECT_NAME}_VERSION}
157+
COMPATIBILITY AnyNewerVersion
158+
)
159+
160+
# Install the export target
161+
install(EXPORT ${PROJECT_NAME}Targets
162+
FILE ${PROJECT_NAME}Targets.cmake
163+
NAMESPACE ${PROJECT_NAME}::
164+
DESTINATION lib/cmake/${PROJECT_NAME}
165+
)
166+
167+
# Generate and install PythonQtConfig.cmake
168+
configure_package_config_file(
169+
"${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in"
170+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
171+
INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}
172+
)
173+
174+
install(FILES
175+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
176+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
177+
DESTINATION lib/cmake/${PROJECT_NAME}
133178
)

src/PythonQtConfig.cmake.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@PACKAGE_INIT@
2+
3+
include("${CMAKE_CURRENT_LIST_DIR}/PythonQtTargets.cmake")

0 commit comments

Comments
 (0)