aboutsummaryrefslogtreecommitdiffstats
path: root/src/CMakeLists.txt
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2019-05-21 12:22:35 +0200
committerEike Ziller <eike.ziller@qt.io>2019-05-23 11:13:21 +0000
commit6fb9bf453f6f67af42649034af4ec5745e12d901 (patch)
treee848c277b7c2dac30fa0254051994e7c121ea5c3 /src/CMakeLists.txt
parent9645687e539bd0ea286fb4136329458c3db3694e (diff)
CMake build: Add ability to disable building of individual plugins
Adds a cache entry "BUILD_PLUGIN_${NAME}", defaulting to ON which can be set to OFF to disable building of a plugin. Adds a extend_qtc_plugin function that should be used to add properties to a plugin after add_qtc_plugin, instead of the standard CMake functions target_... . The new function results in a no-op if the plugin was disabled. Change-Id: I57f6799620aea0aaa8b56acead4815ccced95911 Reviewed-by: Cristian Adam <cristian.adam@qt.io> Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Diffstat (limited to 'src/CMakeLists.txt')
-rw-r--r--src/CMakeLists.txt98
1 files changed, 78 insertions, 20 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index be56ed0bd0..a889baa369 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -62,6 +62,31 @@ function(set_explicit_moc target_name file)
target_sources(${target_name} PRIVATE "${file_moc}")
endfunction()
+function(add_qtc_depends target_name)
+ cmake_parse_arguments(_arg "" "" "PRIVATE;PUBLIC" ${ARGN})
+ if (${_arg_UNPARSED_ARGUMENTS})
+ message(FATAL_ERROR "add_qtc_depends had unparsed arguments")
+ endif()
+
+ separate_object_libraries("${_arg_PRIVATE}"
+ depends object_lib_depends object_lib_depends_objects)
+ separate_object_libraries("${_arg_PUBLIC}"
+ public_depends object_public_depends object_public_depends_objects)
+
+ target_sources(${target_name} PRIVATE ${object_lib_depends_objects} ${object_public_depends_objects})
+ target_link_libraries(${target_name} PRIVATE ${depends} PUBLIC ${public_depends})
+
+ foreach(obj_lib IN LISTS object_lib_depends)
+ target_compile_definitions(${target_name} PRIVATE $<TARGET_PROPERTY:${obj_lib},INTERFACE_COMPILE_DEFINITIONS>)
+ target_include_directories(${target_name} PRIVATE $<TARGET_PROPERTY:${obj_lib},INTERFACE_INCLUDE_DIRECTORIES>)
+ endforeach()
+ foreach(obj_lib IN LISTS object_public_depends)
+ target_compile_definitions(${target_name} PUBLIC $<TARGET_PROPERTY:${obj_lib},INTERFACE_COMPILE_DEFINITIONS>)
+ target_include_directories(${target_name} PUBLIC $<TARGET_PROPERTY:${obj_lib},INTERFACE_INCLUDE_DIRECTORIES>)
+ endforeach()
+
+endfunction()
+
function(add_qtc_library name)
cmake_parse_arguments(_arg "STATIC;OBJECT" ""
"DEFINES;DEPENDS;INCLUDES;PUBLIC_DEFINES;PUBLIC_DEPENDS;PUBLIC_INCLUDES;SOURCES;EXPLICIT_MOC;SKIP_AUTOMOC;PROPERTIES" ${ARGN}
@@ -179,6 +204,11 @@ function(find_dependent_plugins varName)
set("${varName}" ${_RESULT} PARENT_SCOPE)
endfunction()
+function(qtc_plugin_enabled varName name)
+ string(TOUPPER "BUILD_PLUGIN_${name}" _build_plugin_var)
+ set(${varName} ${${_build_plugin_var}} PARENT_SCOPE)
+endfunction()
+
function(add_qtc_plugin target_name)
cmake_parse_arguments(_arg
"EXPERIMENTAL;SKIP_DEBUG_CMAKE_FILE_CHECK"
@@ -204,7 +234,10 @@ function(add_qtc_plugin target_name)
set(_extra_text "with CONDITION ${_contents}")
endif()
- if (${_arg_CONDITION})
+ string(TOUPPER "BUILD_PLUGIN_${target_name}" _build_plugin_var)
+ set(${_build_plugin_var} "ON" CACHE BOOL "Build plugin ${name}.")
+
+ if ((${_arg_CONDITION}) AND ${_build_plugin_var})
set(_plugin_enabled ON)
else()
set(_plugin_enabled OFF)
@@ -273,13 +306,7 @@ function(add_qtc_plugin target_name)
configure_file("${CMAKE_CURRENT_BINARY_DIR}/${name}.json.cmakein" "${name}.json")
endif()
- separate_object_libraries("${_arg_DEPENDS}"
- depends object_lib_depends object_lib_depends_objects)
- separate_object_libraries("${_arg_PUBLIC_DEPENDS}"
- public_depends object_public_depends object_public_depends_objects)
-
- add_library(${target_name} SHARED ${_arg_SOURCES}
- ${object_lib_depends_objects} ${object_public_depends_objects})
+ add_library(${target_name} SHARED ${_arg_SOURCES})
### Generate EXPORT_SYMBOL
string(TOUPPER "${name}_LIBRARY" EXPORT_SYMBOL)
@@ -288,10 +315,7 @@ function(add_qtc_plugin target_name)
set(TEST_DEFINES WITH_TESTS SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}")
endif()
- target_link_libraries(${target_name}
- PRIVATE ${_DEP_PLUGINS} ${depends} ${_TEST_DEPENDS}
- PUBLIC ${public_depends}
- )
+ target_link_libraries(${target_name} PRIVATE ${_DEP_PLUGINS} ${_TEST_DEPENDS})
target_include_directories(${target_name}
PRIVATE ${_arg_INCLUDES} "${CMAKE_CURRENT_SOURCE_DIR}/.." "${CMAKE_CURRENT_BINARY_DIR}"
"${CMAKE_BINARY_DIR}/src"
@@ -301,14 +325,10 @@ function(add_qtc_plugin target_name)
PRIVATE ${EXPORT_SYMBOL} ${DEFAULT_DEFINES} ${_arg_DEFINES} ${TEST_DEFINES}
)
- foreach(obj_lib IN LISTS object_lib_depends)
- target_compile_definitions(${target_name} PRIVATE $<TARGET_PROPERTY:${obj_lib},INTERFACE_COMPILE_DEFINITIONS>)
- target_include_directories(${target_name} PRIVATE $<TARGET_PROPERTY:${obj_lib},INTERFACE_INCLUDE_DIRECTORIES>)
- endforeach()
- foreach(obj_lib IN LISTS object_public_depends)
- target_compile_definitions(${target_name} PUBLIC $<TARGET_PROPERTY:${obj_lib},INTERFACE_COMPILE_DEFINITIONS>)
- target_include_directories(${target_name} PUBLIC $<TARGET_PROPERTY:${obj_lib},INTERFACE_INCLUDE_DIRECTORIES>)
- endforeach()
+ add_qtc_depends(${target_name}
+ PRIVATE ${_arg_DEPENDS}
+ PUBLIC ${_arg_PUBLIC_DEPENDS}
+ )
set(plugin_dir "${IDE_PLUGIN_PATH}")
if (_arg_PLUGIN_PATH)
@@ -340,6 +360,44 @@ function(add_qtc_plugin target_name)
)
endfunction()
+function(extend_qtc_plugin target_name)
+ cmake_parse_arguments(_arg
+ ""
+ "SOURCES_PREFIX"
+ "CONDITION;DEPENDS;PUBLIC_DEPENDS;DEFINES;INCLUDES;PUBLIC_INCLUDES;SOURCES;EXPLICIT_MOC"
+ ${ARGN}
+ )
+
+ if (${_arg_UNPARSED_ARGUMENTS})
+ message(FATAL_ERROR "extend_qtc_plugin had unparsed arguments")
+ endif()
+
+ qtc_plugin_enabled(_plugin_enabled ${target_name})
+ if (NOT _arg_CONDITION)
+ set(_arg_CONDITION ON)
+ endif()
+ if ((NOT (${_arg_CONDITION})) OR (NOT _plugin_enabled))
+ return()
+ endif()
+
+ add_qtc_depends(${target_name}
+ PRIVATE ${_arg_DEPENDS}
+ PUBLIC ${_arg_PUBLIC_DEPENDS}
+ )
+ target_compile_definitions(${target_name} PRIVATE ${_arg_DEFINES})
+ target_include_directories(${target_name} PRIVATE ${_arg_INCLUDES} PUBLIC ${_arg_PUBLIC_INCLUDES})
+
+ if (_arg_SOURCES_PREFIX)
+ list(TRANSFORM _arg_SOURCES PREPEND "${_arg_SOURCES_PREFIX}/")
+ target_include_directories(${target_name} PUBLIC "${_arg_SOURCES_PREFIX}")
+ endif()
+ target_sources(${target_name} PRIVATE ${_arg_SOURCES})
+
+ foreach(file IN LISTS _arg_EXPLICIT_MOC)
+ set_explicit_moc(${target_name} "${file}")
+ endforeach()
+endfunction()
+
function(add_qtc_executable name)
cmake_parse_arguments(_arg "" "DESTINATION" "DEFINES;DEPENDS;INCLUDES;SOURCES;PROPERTIES" ${ARGN})