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>
This commit is contained in:
parent
c9b2528a9d
commit
066e8a4557
@ -699,7 +699,25 @@ function(qt_config_compile_test name)
|
|||||||
|
|
||||||
# Pass which libraries need to be linked against.
|
# Pass which libraries need to be linked against.
|
||||||
if(arg_LIBRARIES)
|
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()
|
endif()
|
||||||
|
|
||||||
try_compile(HAVE_${name} "${CMAKE_BINARY_DIR}/config.tests/${name}" "${arg_PROJECT_PATH}"
|
try_compile(HAVE_${name} "${CMAKE_BINARY_DIR}/config.tests/${name}" "${arg_PROJECT_PATH}"
|
||||||
|
@ -3948,7 +3948,13 @@ endforeach()
|
|||||||
if(QT_CONFIG_COMPILE_TEST_LIBRARIES)
|
if(QT_CONFIG_COMPILE_TEST_LIBRARIES)
|
||||||
link_libraries(${QT_CONFIG_COMPILE_TEST_LIBRARIES})
|
link_libraries(${QT_CONFIG_COMPILE_TEST_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
if(QT_CONFIG_COMPILE_TEST_LIBRARY_TARGETS)
|
||||||
|
foreach(lib ${QT_CONFIG_COMPILE_TEST_LIBRARY_TARGETS})
|
||||||
|
if(TARGET ${lib})
|
||||||
|
link_libraries(${lib})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
cm_fh.write(f"{content}\n")
|
cm_fh.write(f"{content}\n")
|
||||||
|
Loading…
Reference in New Issue
Block a user