diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-04-09 09:59:35 +0200 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-04-09 11:26:42 +0200 |
commit | 066e8a4557e7cbe98403bbf97b957f5f993f89c3 (patch) | |
tree | e62567f713a1088e892cb96a0c30c4c5db4163d7 /cmake/QtFeature.cmake | |
parent | c9b2528a9d60561e3050a3dadd86b893cd35349d (diff) |
CMake: Handle missing packages in project compile tests
If a find_package() in a try_compile project doesn't find a package,
and we then link against a non-existent target, the configuration
failure of the compile test also fails the configuration of the
project.
To avoid that, separate library targets from non-targets, and make sure
to only link against the targets if they exist.
pro2cmake now outputs modified compile test project code which iterates
over targets and non-target libraries, and links against them when
needed.
Change-Id: Ib0f4b5f07af13929c42d01a661df2cabdf9b926b
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'cmake/QtFeature.cmake')
-rw-r--r-- | cmake/QtFeature.cmake | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/cmake/QtFeature.cmake b/cmake/QtFeature.cmake index b2d993647f..4cf7c0f946 100644 --- a/cmake/QtFeature.cmake +++ b/cmake/QtFeature.cmake @@ -699,7 +699,25 @@ function(qt_config_compile_test name) # Pass which libraries need to be linked against. if(arg_LIBRARIES) - list(APPEND flags "-DQT_CONFIG_COMPILE_TEST_LIBRARIES:STRING=${arg_LIBRARIES}") + set(link_flags "") + set(library_targets "") + # Separate targets from link flags or paths. This is to prevent configuration failures + # when the targets are not found due to missing packages. + foreach(lib ${arg_LIBRARIES}) + string(FIND "${lib}" "::" is_library_target) + if(is_library_target EQUAL -1) + list(APPEND link_flags "${lib}") + else() + list(APPEND library_targets "${lib}") + endif() + endforeach() + if(link_flags) + list(APPEND flags "-DQT_CONFIG_COMPILE_TEST_LIBRARIES:STRING=${link_flags}") + endif() + if(library_targets) + list(APPEND flags + "-DQT_CONFIG_COMPILE_TEST_LIBRARY_TARGETS:STRING=${library_targets}") + endif() endif() try_compile(HAVE_${name} "${CMAKE_BINARY_DIR}/config.tests/${name}" "${arg_PROJECT_PATH}" |