Skip to content

Commit 639b99e

Browse files
committed
CMake: Explicitly handle incompatible option overrides
Provide sensible defaults for the *ONLY* builds and explicitly verify incompatible configurations.
1 parent ea79be4 commit 639b99e

1 file changed

Lines changed: 58 additions & 46 deletions

File tree

CMakeLists.txt

Lines changed: 58 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -222,60 +222,60 @@ message(STATUS "Building GammaRay ${GAMMARAY_VERSION_STRING} in ${CMAKE_BUILD_TY
222222
#
223223
# Build options
224224
#
225-
set(GAMMARAY_BUILD_UI_DEFAULT ON)
226-
if(QNXNTO OR ANDROID)
227-
set(GAMMARAY_BUILD_UI_DEFAULT OFF)
225+
gammaray_option(GAMMARAY_STATIC_PROBE "Build the probe as static library for compile-time injection." OFF)
226+
gammaray_option(GAMMARAY_MULTI_BUILD "Build multiple applicable probe configurations." ON)
227+
gammaray_option(GAMMARAY_ENFORCE_QT_ASSERTS "Force QT_ASSERT in all builds." OFF)
228+
229+
set(GAMMARAY_INSTALL_QT_LAYOUT_DEFAULT OFF)
230+
if(ANDROID)
231+
set(GAMMARAY_INSTALL_QT_LAYOUT_DEFAULT ON)
232+
endif()
233+
gammaray_option(GAMMARAY_INSTALL_QT_LAYOUT "Install into Qt directory layout." ${GAMMARAY_INSTALL_QT_LAYOUT_DEFAULT})
234+
if(ANDROID AND NOT GAMMARAY_INSTALL_QT_LAYOUT)
235+
message(FATAL_ERROR "Must use GAMMARAY_INSTALL_QT_LAYOUT on Android.")
228236
endif()
229237

238+
set(GAMMARAY_PROBE_ONLY_BUILD_DEFAULT OFF)
239+
if(GAMMARAY_STATIC_PROBE)
240+
set(GAMMARAY_PROBE_ONLY_BUILD_DEFAULT ON)
241+
endif()
230242
gammaray_option(
231-
GAMMARAY_PROBE_ONLY_BUILD "Build only an additional probe configuration for an already existing launcher." OFF
243+
GAMMARAY_PROBE_ONLY_BUILD "Build only an additional probe configuration for an already existing launcher."
244+
${GAMMARAY_PROBE_ONLY_BUILD_DEFAULT}
232245
)
233-
234-
gammaray_option(GAMMARAY_CLIENT_ONLY_BUILD "Build the client part only." OFF)
235-
236-
if(GAMMARAY_CLIENT_ONLY_BUILD)
237-
set(GAMMARAY_BUILD_UI_DEFAULT ON)
238-
endif()
239-
240-
if(GAMMARAY_PROBE_ONLY_BUILD)
241-
set(GAMMARAY_BUILD_UI_DEFAULT OFF)
246+
if(GAMMARAY_STATIC_PROBE AND NOT GAMMARAY_PROBE_ONLY_BUILD)
247+
message(FATAL_ERROR "Must use PROBE_ONLY_BUILD for STATIC_PROBE.")
248+
elseif(GAMMARAY_STATIC_PROBE)
249+
set(GAMMARAY_LIBRARY_TYPE STATIC)
250+
set(GAMMARAY_PLUGIN_TYPE STATIC)
251+
else()
252+
set(GAMMARAY_LIBRARY_TYPE SHARED)
253+
set(GAMMARAY_PLUGIN_TYPE MODULE)
242254
endif()
243255

244-
gammaray_option(GAMMARAY_BUILD_UI "Build the GammaRay client and in-process UI." ${GAMMARAY_BUILD_UI_DEFAULT})
245-
256+
gammaray_option(GAMMARAY_CLIENT_ONLY_BUILD "Build the client part only." OFF)
246257
if(GAMMARAY_PROBE_ONLY_BUILD AND GAMMARAY_CLIENT_ONLY_BUILD)
247-
message(FATAL_ERROR "You can only use one of the *ONLY* option.")
258+
message(FATAL_ERROR "Cannot use PROBE_ONLY_BUILD and CLIENT_ONLY_BUILD at the same time.")
248259
endif()
249260

250-
gammaray_option(GAMMARAY_INSTALL_QT_LAYOUT "Install into Qt directory layout." OFF)
251-
gammaray_option(GAMMARAY_MULTI_BUILD "Build multiple applicable probe configurations." ON)
252-
gammaray_option(GAMMARAY_BUILD_CLI_INJECTOR "Build command line injector on Windows." ON)
253-
254261
set(GAMMARAY_BUILD_DOCS_DEFAULT ON)
255262
set(GAMMARAY_DISABLE_FEEDBACK_DEFAULT OFF)
256263
if(GAMMARAY_PROBE_ONLY_BUILD OR CMAKE_CROSSCOMPILING)
257264
set(GAMMARAY_BUILD_DOCS_DEFAULT OFF)
258265
set(GAMMARAY_DISABLE_FEEDBACK_DEFAULT ON)
259266
endif()
260267
gammaray_option(GAMMARAY_BUILD_DOCS "Build GammaRay documentation." ${GAMMARAY_BUILD_DOCS_DEFAULT})
261-
gammaray_option(GAMMARAY_STATIC_PROBE "Build the probe as static library for compile-time injection." OFF)
262-
263-
gammaray_option(GAMMARAY_ENFORCE_QT_ASSERTS "Force QT_ASSERT in all builds." OFF)
264-
265268
gammaray_option(GAMMARAY_DISABLE_FEEDBACK "Disable user feedback support." ${GAMMARAY_DISABLE_FEEDBACK_DEFAULT})
266269

267-
#
268-
# Static probe setup
269-
#
270-
if(GAMMARAY_STATIC_PROBE)
271-
set(GAMMARAY_BUILD_UI OFF)
272-
set(GAMMARAY_PROBE_ONLY_BUILD ON)
273-
274-
set(GAMMARAY_LIBRARY_TYPE STATIC)
275-
set(GAMMARAY_PLUGIN_TYPE STATIC)
276-
else()
277-
set(GAMMARAY_LIBRARY_TYPE SHARED)
278-
set(GAMMARAY_PLUGIN_TYPE MODULE)
270+
set(GAMMARAY_BUILD_UI_DEFAULT ON)
271+
if(GAMMARAY_PROBE_ONLY_BUILD)
272+
set(GAMMARAY_BUILD_UI_DEFAULT OFF)
273+
elseif(QNXNTO OR ANDROID)
274+
set(GAMMARAY_BUILD_UI_DEFAULT OFF)
275+
endif()
276+
gammaray_option(GAMMARAY_BUILD_UI "Build the GammaRay client and in-process UI." ${GAMMARAY_BUILD_UI_DEFAULT})
277+
if(GAMMARAY_BUILD_UI AND GAMMARAY_PROBE_ONLY_BUILD)
278+
message(FATAL_ERROR "Cannot use BUILD_UI and PROBE_ONLY_BUILD at the same time.")
279279
endif()
280280

281281
gammaray_option(GAMMARAY_USE_PCH "Enable Precompiled Headers support" OFF)
@@ -297,6 +297,17 @@ if(GAMMARAY_USE_PCH)
297297
)
298298
endif()
299299

300+
set(GAMMARAY_BUILD_CLI_INJECTOR_DEFAULT ON)
301+
if(WIN32)
302+
set(GAMMARAY_BUILD_CLI_INJECTOR_DEFAULT OFF)
303+
endif()
304+
gammaray_option(
305+
GAMMARAY_BUILD_CLI_INJECTOR "Build command line injector on Windows." ${GAMMARAY_BUILD_CLI_INJECTOR_DEFAULT}
306+
)
307+
if(WIN32 AND GAMMARAY_BUILD_CLI_INJECTOR)
308+
message(FATAL_ERROR "Cannot use CLI injection on Windows.")
309+
endif()
310+
300311
#
301312
# Compiler & linker settings
302313
#
@@ -601,13 +612,17 @@ if(UPPERCASE_CMAKE_BUILD_TYPE MATCHES "^RELEASE$")
601612
add_definitions(-DQT_NO_DEBUG_OUTPUT)
602613
endif()
603614

604-
if(HAVE_QT_WIDGETS)
605-
gammaray_option(
606-
GAMMARAY_CORE_ONLY_LAUNCHER
607-
"Only use QtCore in the CLI launcher (breaks style injector, but is needed for Boot2Qt compatibility)" FALSE
608-
)
609-
else()
610-
set(GAMMARAY_CORE_ONLY_LAUNCHER TRUE)
615+
set(GAMMARAY_CORE_ONLY_LAUNCHER_DEFAULT FALSE)
616+
if(NOT HAVE_QT_WIDGETS)
617+
set(GAMMARAY_CORE_ONLY_LAUNCHER_DEFAULT TRUE)
618+
endif()
619+
gammaray_option(
620+
GAMMARAY_CORE_ONLY_LAUNCHER
621+
"Only use QtCore in the CLI launcher (breaks style injector, but is needed for Boot2Qt compatibility)"
622+
${GAMMARAY_CORE_ONLY_LAUNCHER_DEFAULT}
623+
)
624+
if(NOT HAVE_QT_WIDGETS AND NOT GAMMARAY_CORE_ONLY_LAUNCHER)
625+
message(FATAL_ERROR "Must CORE_ONLY_LAUNCHER when Qt Widgets are not available.")
611626
endif()
612627

613628
add_feature_info("QtScript debugger" Qt5ScriptTools_FOUND "Requires QtScript and QtScriptTools.")
@@ -657,9 +672,6 @@ include(GammaRayProbeABI)
657672
# Installation settings
658673
#
659674
set(BUNDLE_INSTALL_DIR "")
660-
if(ANDROID)
661-
set(GAMMARAY_INSTALL_QT_LAYOUT ON)
662-
endif()
663675
if(APPLE)
664676
set(BUNDLE_APP_NAME "GammaRay.app")
665677

0 commit comments

Comments
 (0)