diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2019-05-21 17:09:47 +0200 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2019-05-22 07:25:41 +0000 |
commit | 774088b677b03cd1857fd352f305a5fe15b9f5eb (patch) | |
tree | 9e2015cf4419a58e4664ee5374f1f986857f2e3a /cmake/FindWrapDoubleConversion.cmake | |
parent | 4e7756a6cd48716ff37d071fe660bb0e9edfa89f (diff) |
Build and use double-conversion library shipped by Qt when needed
Some Linux distros might not have a double-conversion library. Because
it is such an essential library for QtCore, compile and use the
the copy of the library bundled with Qt.
Also change library name to be a proper target with double colons,
so that in case the library is not found for some reason, the CMake
configure step would fail, instead of failing at link time.
Task-number: QTBUG-74133
Change-Id: I9f3b4298ae6e952891a7a89541d46878176bf1ce
Fixes: QTBUG-75891
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'cmake/FindWrapDoubleConversion.cmake')
-rw-r--r-- | cmake/FindWrapDoubleConversion.cmake | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/cmake/FindWrapDoubleConversion.cmake b/cmake/FindWrapDoubleConversion.cmake index cfb70a0981..1164f6ba44 100644 --- a/cmake/FindWrapDoubleConversion.cmake +++ b/cmake/FindWrapDoubleConversion.cmake @@ -1,16 +1,17 @@ -include(CheckCXXSourceCompiles) - -add_library(WrapDoubleConversion INTERFACE IMPORTED) +add_library(WrapDoubleConversion::WrapDoubleConversion INTERFACE IMPORTED) find_package(double-conversion) if (double-conversion_FOUND) include(FeatureSummary) set_package_properties(double-conversion PROPERTIES TYPE REQUIRED) - target_link_libraries(WrapDoubleConversion INTERFACE double-conversion::double-conversion) + target_link_libraries(WrapDoubleConversion::WrapDoubleConversion + INTERFACE double-conversion::double-conversion) set(WrapDoubleConversion_FOUND 1) return() endif() +include(CheckCXXSourceCompiles) + check_cxx_source_compiles(" #include <stdio.h> #include <locale.h> @@ -36,8 +37,17 @@ int main(int argc, char *argv[]) { return 0; }" HAVE_SPRINTF_L) +# In a static build, we need to find the package to bring the target into scope. +find_package(QtDoubleConversion QUIET) + if (HAVE__SPRINTF_L OR HAVE_SPRINTF_L) - target_compile_definitions(WrapDoubleConversion INTERFACE QT_NO_DOUBLECONVERSION) + target_compile_definitions(WrapDoubleConversion::WrapDoubleConversion + INTERFACE QT_NO_DOUBLECONVERSION) + set(WrapDoubleConversion_FOUND 1) +elseif(TARGET QtDoubleConversion) + # If a Config package wasn't found, and the C++ library doesn't contain the necessary functions, + # use the library bundled with Qt. + target_link_libraries(WrapDoubleConversion::WrapDoubleConversion INTERFACE QtDoubleConversion) set(WrapDoubleConversion_FOUND 1) else() set(WrapDoubleConversion_FOUND 0) |