Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Kitware
GitHub Repository: Kitware/CMake
Path: blob/master/Source/QtDialog/CMakeLists.txt
5000 views
1
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2
# file LICENSE.rst or https://cmake.org/licensing for details.
3
4
if(CMake_GUI_OSX_DEPLOYMENT_TARGET)
5
set(CMAKE_OSX_DEPLOYMENT_TARGET "${CMake_GUI_OSX_DEPLOYMENT_TARGET}")
6
endif()
7
8
project(QtDialog)
9
CMake_OPTIONAL_COMPONENT(cmake-gui)
10
set(QT_COMPONENTS
11
Core
12
Widgets
13
Gui
14
)
15
16
set(CMake_QT_MAJOR_VERSION "A" CACHE
17
STRING "Expected Qt major version. Valid values are A (auto-select), 5, 6.")
18
set(SUPPORTED_QT_VERSIONS "A" 5 6)
19
set_property(CACHE CMake_QT_MAJOR_VERSION PROPERTY STRINGS ${SUPPORTED_QT_VERSIONS})
20
# Select a Qt version and store it in a normal variable of the same name.
21
if(NOT CMake_QT_MAJOR_VERSION STREQUAL "A")
22
if(NOT CMake_QT_MAJOR_VERSION IN_LIST SUPPORTED_QT_VERSIONS)
23
message(FATAL_ERROR "Supported Qt versions are \"${SUPPORTED_QT_VERSIONS}\"."
24
" But CMake_QT_MAJOR_VERSION is set to ${CMake_QT_MAJOR_VERSION}.")
25
endif()
26
set(CMake_QT_MAJOR_VERSION "${CMake_QT_MAJOR_VERSION}")
27
else()
28
find_package(Qt6Widgets QUIET)
29
set(CMake_QT_MAJOR_VERSION 6)
30
if(NOT Qt6Widgets_FOUND)
31
find_package(Qt5Widgets QUIET)
32
if(NOT Qt5Widgets_FOUND)
33
message(FATAL_ERROR "Could not find a valid Qt installation.")
34
endif()
35
set(CMake_QT_MAJOR_VERSION 5)
36
endif()
37
endif()
38
39
find_package(Qt${CMake_QT_MAJOR_VERSION}
40
COMPONENTS ${QT_COMPONENTS}
41
REQUIRED QUIET
42
)
43
44
set(CMake_QT_EXTRA_LIBRARIES)
45
46
# Try to find the package WinExtras for the task bar progress
47
if(WIN32)
48
find_package(Qt${CMake_QT_MAJOR_VERSION}WinExtras QUIET)
49
if(Qt${CMake_QT_MAJOR_VERSION}WinExtras_FOUND)
50
add_compile_definitions(QT_WINEXTRAS)
51
list(APPEND CMake_QT_EXTRA_LIBRARIES Qt${CMake_QT_MAJOR_VERSION}::WinExtras)
52
list(APPEND QT_COMPONENTS WinExtras)
53
endif()
54
endif()
55
56
if(MSVC)
57
# QTBUG-118993: Qt uses deprecated stdext::checked_array_iterator
58
add_compile_definitions(_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING)
59
endif()
60
61
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt${CMake_QT_MAJOR_VERSION}Widgets_EXECUTABLE_COMPILE_FLAGS}")
62
63
if(CMake_QT_STATIC_QXcbIntegrationPlugin_LIBRARIES)
64
list(APPEND CMake_QT_EXTRA_LIBRARIES ${CMake_QT_STATIC_QXcbIntegrationPlugin_LIBRARIES})
65
set_property(SOURCE CMakeSetup.cxx
66
PROPERTY COMPILE_DEFINITIONS USE_QXcbIntegrationPlugin)
67
endif()
68
69
# We need to install platform plugin and add qt.conf for Qt5 on Mac and Windows.
70
if(CMake_INSTALL_DEPENDENCIES AND (APPLE OR WIN32) AND NOT COMMAND qt_generate_deploy_app_script)
71
function(_qt_get_plugin_name_with_version target out_var)
72
string(REGEX REPLACE "^Qt::(.+)" "Qt${CMake_QT_MAJOR_VERSION}::\\1"
73
qt_plugin_with_version "${target}")
74
if(TARGET "${qt_plugin_with_version}")
75
set("${out_var}" "${qt_plugin_with_version}" PARENT_SCOPE)
76
else()
77
set("${out_var}" "" PARENT_SCOPE)
78
endif()
79
endfunction()
80
macro(install_qt_plugin _qt_plugin_name _qt_plugins_var)
81
if(TARGET "${_qt_plugin_name}")
82
get_target_property(_qt_plugin_path "${_qt_plugin_name}" LOCATION)
83
else()
84
_qt_get_plugin_name_with_version("Qt::${_qt_plugin_name}" _qt_plugin_with_version_name)
85
if(TARGET "${_qt_plugin_with_version_name}")
86
get_target_property(_qt_plugin_path "${_qt_plugin_with_version_name}" LOCATION)
87
endif()
88
endif()
89
if(EXISTS "${_qt_plugin_path}")
90
get_filename_component(_qt_plugin_file "${_qt_plugin_path}" NAME)
91
get_filename_component(_qt_plugin_type "${_qt_plugin_path}" PATH)
92
get_filename_component(_qt_plugin_type "${_qt_plugin_type}" NAME)
93
if(APPLE)
94
set(_qt_plugin_dir "PlugIns")
95
elseif(WIN32)
96
set(_qt_plugin_dir "plugins")
97
endif()
98
set(_qt_plugin_dest "${CMake_INSTALL_APP_DIR_SLASH}${_qt_plugin_dir}/${_qt_plugin_type}")
99
install(FILES "${_qt_plugin_path}"
100
DESTINATION "${_qt_plugin_dest}"
101
${COMPONENT})
102
set(${_qt_plugins_var}
103
"${${_qt_plugins_var}};\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${_qt_plugin_dest}/${_qt_plugin_file}")
104
endif()
105
endmacro()
106
if(APPLE)
107
if(CMake_QT_MAJOR_VERSION VERSION_GREATER_EQUAL 6)
108
# Qt6 provides the plugins as individual packages that need to be found.
109
find_package(Qt${CMake_QT_MAJOR_VERSION}QCocoaIntegrationPlugin QUIET PATHS ${Qt${CMake_QT_MAJOR_VERSION}Gui_DIR})
110
find_package(Qt${CMake_QT_MAJOR_VERSION}QMacStylePlugin QUIET PATHS ${Qt${CMake_QT_MAJOR_VERSION}Widgets_DIR})
111
endif()
112
install_qt_plugin("Qt${CMake_QT_MAJOR_VERSION}::QCocoaIntegrationPlugin" QT_PLUGINS)
113
if(TARGET Qt${CMake_QT_MAJOR_VERSION}::QMacStylePlugin)
114
install_qt_plugin("Qt${CMake_QT_MAJOR_VERSION}::QMacStylePlugin" QT_PLUGINS)
115
endif()
116
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qt.conf"
117
"[Paths]\nPlugins = ${_qt_plugin_dir}\n")
118
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/qt.conf"
119
DESTINATION "${CMake_INSTALL_APP_DIR_SLASH}Resources"
120
${COMPONENT})
121
elseif(WIN32)
122
if(CMake_QT_MAJOR_VERSION VERSION_GREATER_EQUAL 6)
123
# Qt6 provides the plugins as individual packages that need to be found.
124
find_package(Qt${CMake_QT_MAJOR_VERSION}QWindowsIntegrationPlugin QUIET PATHS ${Qt${CMake_QT_MAJOR_VERSION}Gui_DIR})
125
endif()
126
install_qt_plugin("Qt${CMake_QT_MAJOR_VERSION}::QWindowsIntegrationPlugin" QT_PLUGINS)
127
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qt.conf"
128
"[Paths]\nPlugins = ../${_qt_plugin_dir}\n")
129
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/qt.conf"
130
DESTINATION bin
131
${COMPONENT})
132
endif()
133
endif()
134
135
set(CMAKE_INCLUDE_CURRENT_DIR ON)
136
137
add_library(
138
CMakeGUILib STATIC
139
AddCacheEntry.cxx
140
AddCacheEntry.h
141
CMakeSetupDialog.cxx
142
CMakeSetupDialog.h
143
Compilers.h
144
EnvironmentDialog.cxx
145
EnvironmentDialog.h
146
FirstConfigure.cxx
147
FirstConfigure.h
148
QCMake.cxx
149
QCMake.h
150
QCMakeCacheView.cxx
151
QCMakeCacheView.h
152
QCMakePreset.cxx
153
QCMakePreset.h
154
QCMakePresetComboBox.cxx
155
QCMakePresetComboBox.h
156
QCMakePresetItemModel.cxx
157
QCMakePresetItemModel.h
158
QCMakeSizeType.h
159
QCMakeWidgets.cxx
160
QCMakeWidgets.h
161
RegexExplorer.cxx
162
RegexExplorer.h
163
WarningMessagesDialog.cxx
164
WarningMessagesDialog.h
165
)
166
# CMake_QT_EXTRA_LIBRARIES have to come before the main libraries on the link line
167
target_link_libraries(
168
CMakeGUILib
169
PUBLIC
170
CMakeLib
171
${CMake_QT_EXTRA_LIBRARIES}
172
Qt${CMake_QT_MAJOR_VERSION}::Core
173
Qt${CMake_QT_MAJOR_VERSION}::Widgets
174
)
175
176
set(UI_SRCS
177
CMakeSetupDialog.ui
178
Compilers.ui
179
CrossCompiler.ui
180
AddCacheEntry.ui
181
EnvironmentDialog.ui
182
RegexExplorer.ui
183
WarningMessagesDialog.ui
184
)
185
set(MOC_SRCS
186
AddCacheEntry.h
187
Compilers.h
188
CMakeSetupDialog.h
189
EnvironmentDialog.h
190
FirstConfigure.h
191
QCMake.h
192
QCMakeCacheView.h
193
QCMakePresetComboBox.h
194
QCMakePresetItemModel.h
195
QCMakeWidgets.h
196
RegexExplorer.h
197
WarningMessagesDialog.h
198
)
199
set(QRC_SRCS CMakeSetup.qrc)
200
201
if(CMake_QT_MAJOR_VERSION VERSION_LESS 6)
202
qt5_wrap_ui(UI_BUILT_SRCS ${UI_SRCS})
203
qt5_wrap_cpp(MOC_BUILT_SRCS ${MOC_SRCS})
204
qt5_add_resources(QRC_BUILT_SRCS ${QRC_SRCS})
205
else()
206
qt_wrap_ui(UI_BUILT_SRCS ${UI_SRCS})
207
qt_wrap_cpp(MOC_BUILT_SRCS ${MOC_SRCS})
208
qt_add_resources(QRC_BUILT_SRCS ${QRC_SRCS})
209
endif()
210
add_library(CMakeGUIQRCLib OBJECT ${QRC_BUILT_SRCS})
211
212
if(FALSE) # CMake's bootstrap binary does not support automoc
213
set(CMAKE_AUTOMOC 1)
214
set(CMAKE_AUTORCC 1)
215
set(CMAKE_AUTOUIC 1)
216
else()
217
target_sources(
218
CMakeGUILib
219
PRIVATE
220
${UI_BUILT_SRCS}
221
${MOC_BUILT_SRCS}
222
)
223
endif()
224
225
if(USE_LGPL)
226
install(FILES ${CMake_SOURCE_DIR}/Licenses/LGPLv${USE_LGPL}.txt
227
DESTINATION ${CMake_INSTALL_DATA_DIR}/Licenses
228
${COMPONENT})
229
set_property(SOURCE CMakeSetupDialog.cxx
230
PROPERTY COMPILE_DEFINITIONS USE_LGPL="${USE_LGPL}")
231
endif()
232
233
add_library(CMakeGUIMainLib STATIC CMakeSetup.cxx)
234
target_link_libraries(
235
CMakeGUIMainLib
236
PUBLIC
237
CMakeGUILib
238
)
239
240
add_executable(cmake-gui WIN32 MACOSX_BUNDLE CMakeGUIExec.cxx)
241
set_property(TARGET cmake-gui PROPERTY CMake_QT_MAJOR_VERSION "${CMake_QT_MAJOR_VERSION}")
242
target_link_libraries(cmake-gui
243
PRIVATE
244
CMakeGUIMainLib
245
CMakeGUIQRCLib
246
$<TARGET_NAME_IF_EXISTS:CMakeVersion>
247
ManifestLib
248
Qt${CMake_QT_MAJOR_VERSION}::Core
249
)
250
251
if(WIN32)
252
target_sources(CMakeGUIMainLib INTERFACE CMakeSetup.rc)
253
endif()
254
if(APPLE)
255
target_sources(CMakeGUIMainLib INTERFACE CMakeSetup.icns)
256
set(MACOSX_BUNDLE_ICON_FILE CMakeSetup.icns)
257
set_source_files_properties(CMakeSetup.icns PROPERTIES
258
MACOSX_PACKAGE_LOCATION Resources)
259
endif()
260
261
if(CMake_JOB_POOL_LINK_BIN)
262
set_property(TARGET cmake-gui PROPERTY JOB_POOL_LINK "link-bin")
263
endif()
264
265
# cmake-gui has not been updated for `include-what-you-use`.
266
# Block the tool until this is done.
267
set_target_properties(CMakeGUILib CMakeGUIMainLib cmake-gui PROPERTIES
268
CXX_INCLUDE_WHAT_YOU_USE ""
269
)
270
271
# Files generated by MOC, RCC, and UIC may produce clang-tidy warnings.
272
# We generate a dummy .clang-tidy file in the binary directory that disables
273
# all clang-tidy checks except one that will never match. This one check is
274
# necessary; clang-tidy reports an error when no checks are enabled.
275
# Since the Qt code generators will generate source files in the binary tree,
276
# clang-tidy will load the configuration from this dummy file when the sources
277
# are built.
278
file(WRITE "${QtDialog_BINARY_DIR}/.clang-tidy" "
279
---
280
Checks: '-*,llvm-twine-local'
281
...
282
")
283
284
if(APPLE)
285
set_target_properties(cmake-gui PROPERTIES
286
OUTPUT_NAME CMake
287
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in"
288
MACOSX_BUNDLE_SHORT_VERSION_STRING "${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}.${CMake_VERSION_PATCH}"
289
# TBD: MACOSX_BUNDLE_BUNDLE_VERSION "${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}.${CMake_VERSION_PATCH}"
290
MACOSX_BUNDLE_COPYRIGHT "${CMake_COPYRIGHT_LINE}"
291
MACOSX_BUNDLE_GUI_IDENTIFIER "org.cmake.cmake"
292
)
293
294
# Create a symlink in the build tree to provide a "cmake-gui" next
295
# to the "cmake" executable that refers to the application bundle.
296
add_custom_command(TARGET cmake-gui POST_BUILD
297
COMMAND ln -sf CMake.app/Contents/MacOS/CMake
298
$<TARGET_FILE_DIR:cmake>/cmake-gui
299
)
300
endif()
301
302
install(TARGETS cmake-gui
303
RUNTIME DESTINATION ${CMake_INSTALL_BIN_DIR} ${COMPONENT}
304
BUNDLE DESTINATION . ${COMPONENT})
305
306
if(UNIX AND NOT APPLE)
307
foreach(size IN ITEMS 32 128)
308
install(
309
FILES "${CMAKE_CURRENT_SOURCE_DIR}/CMakeSetup${size}.png"
310
DESTINATION "${CMake_INSTALL_XDGDATA_DIR}/icons/hicolor/${size}x${size}/apps"
311
${COMPONENT}
312
RENAME "CMakeSetup.png")
313
endforeach()
314
315
# install a desktop file so CMake appears in the application start menu
316
# with an icon
317
install(FILES cmake-gui.desktop
318
DESTINATION "${CMake_INSTALL_XDGDATA_DIR}/applications"
319
${COMPONENT})
320
install(FILES cmakecache.xml
321
DESTINATION "${CMake_INSTALL_XDGDATA_DIR}/mime/packages"
322
${COMPONENT})
323
endif()
324
325
if(APPLE)
326
install(CODE "
327
execute_process(COMMAND ln -s \"../MacOS/CMake\" cmake-gui
328
WORKING_DIRECTORY \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMake_INSTALL_BIN_DIR})
329
" ${COMPONENT})
330
endif()
331
332
if(CMake_INSTALL_DEPENDENCIES AND (APPLE OR WIN32))
333
if(COMMAND qt_generate_deploy_app_script)
334
# Qt libraries are found via @rpath, so point the runtime path at them.
335
set_property(TARGET cmake-gui PROPERTY INSTALL_RPATH "@executable_path/../Frameworks")
336
qt_generate_deploy_app_script(
337
TARGET cmake-gui
338
OUTPUT_SCRIPT qt_deploy_script
339
)
340
install(SCRIPT "${qt_deploy_script}")
341
else()
342
# install rules for including 3rd party libs such as Qt
343
# if a system Qt is used (e.g. installed in /usr/lib/), it will not be included in the installation
344
set(fixup_exe "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMake_INSTALL_BIN_DIR}/cmake-gui${CMAKE_EXECUTABLE_SUFFIX}")
345
if(APPLE)
346
set(fixup_exe "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMake_INSTALL_APP_DIR_SLASH}MacOS/CMake")
347
endif()
348
get_property(_Qt_Core_LOCATION TARGET Qt${CMake_QT_MAJOR_VERSION}::Core PROPERTY LOCATION)
349
if(APPLE AND _Qt_Core_LOCATION MATCHES [[^(.*)/[^/]*\.framework/]])
350
set(Qt_LIB_DIR "${CMAKE_MATCH_1}")
351
else()
352
get_filename_component(Qt_LIB_DIR "${_Qt_Core_LOCATION}" PATH)
353
endif()
354
install(CODE "
355
include(BundleUtilities)
356
set(BU_CHMOD_BUNDLE_ITEMS ON)
357
fixup_bundle(\"${fixup_exe}\" \"${QT_PLUGINS}\" \"${Qt_LIB_DIR};${QT_LIBRARY_DIR};${QT_BINARY_DIR}\")
358
" ${COMPONENT})
359
endif()
360
endif()
361
362
set(CMAKE_PACKAGE_QTGUI TRUE)
363
configure_file(QtDialogCPack.cmake.in QtDialogCPack.cmake @ONLY)
364
365