diff --git a/cmake/FindWrapDoubleConversion.cmake b/cmake/FindWrapDoubleConversion.cmake index cfb70a09819..1164f6ba445 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 #include @@ -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) diff --git a/src/3rdparty/CMakeLists.txt b/src/3rdparty/CMakeLists.txt index 77c4970f499..d3b30fea651 100644 --- a/src/3rdparty/CMakeLists.txt +++ b/src/3rdparty/CMakeLists.txt @@ -1,2 +1,3 @@ add_subdirectory(tinycbor) add_subdirectory(harfbuzz) +add_subdirectory(double-conversion) diff --git a/src/3rdparty/double-conversion/CMakeLists.txt b/src/3rdparty/double-conversion/CMakeLists.txt new file mode 100644 index 00000000000..7450bc48ec2 --- /dev/null +++ b/src/3rdparty/double-conversion/CMakeLists.txt @@ -0,0 +1,21 @@ +# special case begin + +add_library(QtDoubleConversion STATIC + ${CMAKE_CURRENT_SOURCE_DIR}/bignum.cc + ${CMAKE_CURRENT_SOURCE_DIR}/bignum-dtoa.cc + ${CMAKE_CURRENT_SOURCE_DIR}/cached-powers.cc + ${CMAKE_CURRENT_SOURCE_DIR}/diy-fp.cc + ${CMAKE_CURRENT_SOURCE_DIR}/double-conversion.cc + ${CMAKE_CURRENT_SOURCE_DIR}/fast-dtoa.cc + ${CMAKE_CURRENT_SOURCE_DIR}/fixed-dtoa.cc + ${CMAKE_CURRENT_SOURCE_DIR}/strtod.cc + ) + +target_include_directories(QtDoubleConversion PUBLIC + $ + $ + $ + ) + +qt_install_3rdparty_library(QtDoubleConversion) +# special case end diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt index 59ad7dcdd6d..cae1e981116 100644 --- a/src/corelib/CMakeLists.txt +++ b/src/corelib/CMakeLists.txt @@ -2,7 +2,8 @@ # special case begin qt_find_package(Threads PROVIDED_TARGETS Threads::Threads) -qt_find_package(WrapDoubleConversion REQUIRED PROVIDED_TARGETS WrapDoubleConversion) +qt_find_package(WrapDoubleConversion REQUIRED + PROVIDED_TARGETS WrapDoubleConversion::WrapDoubleConversion) if (NOT WrapDoubleConversion_FOUND) message(FATAL_ERROR "Your C library does not provide \ @@ -231,7 +232,7 @@ add_qt_module(Core QtHarfBuzz # special case Threads::Threads # special case tinycbor # special case - WrapDoubleConversion # special case + WrapDoubleConversion::WrapDoubleConversion # special case PUBLIC_LIBRARIES # special case: Qt::Platform # special case: DISABLE_AUTOGEN_TOOLS # special case: