diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-08-04 17:24:17 +0200 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-08-10 11:56:54 +0200 |
commit | 3c52f8af9dbc125eee22115910c25510df8fede0 (patch) | |
tree | 3a3d7c60c53cb3c49b506ca721afcce249311c15 /cmake/FindWrapSystemFreetype.cmake | |
parent | 7e7796fb006e616537a31112438232c124e8ce35 (diff) |
CMake: pro2cmake: Specify library versions for 3rd party libraries
If certain 3rd party libraries have a version that's not suitable for
Qt, the configure summary should say so, rather than use them and fail
at build time.
With the current situation, we have to duplicate the version
information from the configure.json files in helper.py, by assigning
the version number as an extra find_package variable.
Rerunning configurejson2cmake then embeds this version info into the
qt_find_package calls in configure.cmake.
Some of the Find modules are rewritten to take the specified version
into account when looking for the libraries.
This involves moving around the code for creating a target, after
calling find_package_handle_standard_args() so we know if a good
enough version was found.
Task-number: QTBUG-82917
Change-Id: I139748d8090e0630cda413362760034dc3483e11
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'cmake/FindWrapSystemFreetype.cmake')
-rw-r--r-- | cmake/FindWrapSystemFreetype.cmake | 47 |
1 files changed, 30 insertions, 17 deletions
diff --git a/cmake/FindWrapSystemFreetype.cmake b/cmake/FindWrapSystemFreetype.cmake index 41c669b973..2cf6caca19 100644 --- a/cmake/FindWrapSystemFreetype.cmake +++ b/cmake/FindWrapSystemFreetype.cmake @@ -1,37 +1,50 @@ # We can't create the same interface imported target multiple times, CMake will complain if we do # that. This can happen if the find_package call is done in multiple different subdirectories. if(TARGET WrapSystemFreetype::WrapSystemFreetype) - set(WrapSystemFreetype_FOUND ON) + set(WrapSystemFreetype_FOUND TRUE) return() endif() - -set(WrapSystemFreetype_FOUND OFF) +set(WrapSystemFreetype_REQUIRED_VARS __freetype_found) # Hunter has the package named freetype, but exports the Freetype::Freetype target as upstream # First try the CONFIG package, and afterwards the MODULE if not found - -find_package(Freetype QUIET CONFIG NAMES Freetype freetype QUIET) +find_package(Freetype ${${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION} + CONFIG NAMES Freetype freetype QUIET) if(NOT Freetype_FOUND) - find_package(Freetype QUIET MODULE) + find_package(Freetype ${${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION} QUIET MODULE) endif() if(Freetype_FOUND) # vcpkg defines a lower case target name, while upstream Find module defines a prefixed # upper case name. - set(potential_target_names Freetype::Freetype freetype) - foreach(target_name ${potential_target_names}) - if(TARGET ${target_name}) - set(WrapSystemFreetype_FOUND ON) - set(final_target_name ${target_name}) - - add_library(WrapSystemFreetype::WrapSystemFreetype INTERFACE IMPORTED) - target_link_libraries(WrapSystemFreetype::WrapSystemFreetype INTERFACE - ${final_target_name}) - + set(__freetype_potential_target_names Freetype::Freetype freetype) + foreach(__freetype_potential_target_name ${__freetype_potential_target_names}) + if(TARGET "${__freetype_potential_target_name}") + set(__freetype_target_name "${__freetype_potential_target_name}") + set(__freetype_found TRUE) break() endif() endforeach() endif() +if(FREETYPE_LIBRARIES) + list(PREPEND WrapSystemFreetype_REQUIRED_VARS FREETYPE_LIBRARIES) +endif() +if(Freetype_VERSION) + set(WrapSystemFreetype_VERSION "${Freetype_VERSION}") +elseif(FREETYPE_VERSION_STRING) + set(WrapSystemFreetype_VERSION "${FREETYPE_VERSION_STRING}") +endif() + include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(WrapSystemFreetype DEFAULT_MSG WrapSystemFreetype_FOUND) +find_package_handle_standard_args(WrapSystemFreetype + REQUIRED_VARS ${WrapSystemFreetype_REQUIRED_VARS} + VERSION_VAR WrapSystemFreetype_VERSION) + +if(WrapSystemFreetype_FOUND) + add_library(WrapSystemFreetype::WrapSystemFreetype INTERFACE IMPORTED) + target_link_libraries(WrapSystemFreetype::WrapSystemFreetype + INTERFACE "${__freetype_target_name}") +endif() +unset(__freetype_target_name) +unset(__freetype_found) |