summaryrefslogtreecommitdiffstats
path: root/cmake/FindWrapDoubleConversion.cmake
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2019-05-21 17:09:47 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2019-05-22 07:25:41 +0000
commit774088b677b03cd1857fd352f305a5fe15b9f5eb (patch)
tree9e2015cf4419a58e4664ee5374f1f986857f2e3a /cmake/FindWrapDoubleConversion.cmake
parent4e7756a6cd48716ff37d071fe660bb0e9edfa89f (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.cmake20
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)