diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2019-11-22 17:49:06 +0100 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2019-11-25 09:14:09 +0100 |
commit | 8c6824f2af79b6a094566d04d62a084e8448d333 (patch) | |
tree | c20470d6c4c884a63be91bf7c3cb02e25f784750 /mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in | |
parent | 2e7c83ea3882edd7bcc84c67c31fdc71be40e223 (diff) |
CMake: Fix static build linkage with CMake version lower than 3.13
After appropriate link flags are determined, they are added to the
INTERFACE_LINK_OPTIONS property. Unfortunately this property was added
in 3.13, and thus static builds on Windows for instance failed with
missing symbols due to missing system libraries on the link command
line, when the CMake version was lower.
When detecting a lower version, add the flags instead to
INTERFACE_LINK_LIBRARIES, which is a property that is available in
older CMake versions. To do this we have to strip the SHELL: prefix,
which means that the added link flags might get deduplicated, and thus
it can happen that the linking phase might still fail.
Nevertheless, on Windows this improves the situation when using an older
CMake version.
Amends 44602224bfae7bea08e5883768cfeef6629ac503
Task-number: QTBUG-38913
Change-Id: Ib710b8ea691d4a9281dcd5f5b9700b11df0a5c10
Reviewed-by: Kyle Edwards <kyle.edwards@kitware.com>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in')
-rw-r--r-- | mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in index 364c23e750..5077b8d8b4 100644 --- a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in +++ b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in @@ -173,11 +173,20 @@ macro(_populate_$${CMAKE_MODULE_NAME}_target_properties Configuration LIB_LOCATI endif() set(_static_link_flags \"${_Qt5$${CMAKE_MODULE_NAME}_STATIC_${Configuration}_LINK_FLAGS}\") - if(NOT CMAKE_VERSION VERSION_LESS \"3.13\" AND _static_link_flags) + if(_static_link_flags) set(_static_link_flags_genex \"$<${_genex_condition}:${_static_link_flags}>\") - set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY INTERFACE_LINK_OPTIONS - \"${_static_link_flags_genex}\" - ) + if(NOT CMAKE_VERSION VERSION_LESS \"3.13\") + set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY INTERFACE_LINK_OPTIONS + \"${_static_link_flags_genex}\" + ) + else() + # Abuse INTERFACE_LINK_LIBRARIES to add link flags when CMake version is too low. + # Strip out SHELL:, because it is not supported in this property. And hope for the best. + string(REPLACE \"SHELL:\" \"\" _static_link_flags_genex \"${_static_link_flags_genex}\") + set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY INTERFACE_LINK_LIBRARIES + \"${_static_link_flags_genex}\" + ) + endif() endif() !!ENDIF @@ -546,11 +555,20 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME}) endif() set(_static_link_flags \"${_Qt5${Plugin}_STATIC_${Configuration}_LINK_FLAGS}\") - if(NOT CMAKE_VERSION VERSION_LESS \"3.13\" AND _static_link_flags) + if(_static_link_flags) set(_static_link_flags_genex \"$<${_genex_condition}:${_static_link_flags}>\") - set_property(TARGET Qt5::${Plugin} APPEND PROPERTY INTERFACE_LINK_OPTIONS - \"${_static_link_flags_genex}\" - ) + if(NOT CMAKE_VERSION VERSION_LESS \"3.13\") + set_property(TARGET Qt5::${Plugin} APPEND PROPERTY INTERFACE_LINK_OPTIONS + \"${_static_link_flags_genex}\" + ) + else() + # Abuse INTERFACE_LINK_LIBRARIES to add link flags when CMake version is too low. + # Strip out SHELL:, because it is not supported in this property. And hope for the best. + string(REPLACE \"SHELL:\" \"\" _static_link_flags_genex \"${_static_link_flags_genex}\") + set_property(TARGET Qt5::${Plugin} APPEND PROPERTY INTERFACE_LINK_LIBRARIES + \"${_static_link_flags_genex}\" + ) + endif() endif() !!ENDIF endmacro() |