From dc510e44c085e87233b628a995b6957ad9c0ab9b Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Thu, 13 Feb 2020 19:18:47 +0200 Subject: [default] Build a no-op number formatter for old ICUs This has been causing too many build problems and it is a major source of complains because of different ICU interfaces. --- platform/default/src/mbgl/i18n/number_format.cpp | 23 +++++++++++------------ platform/linux/linux.cmake | 23 +++++++++++++++++++---- 2 files changed, 30 insertions(+), 16 deletions(-) (limited to 'platform') diff --git a/platform/default/src/mbgl/i18n/number_format.cpp b/platform/default/src/mbgl/i18n/number_format.cpp index ded4495202..6a975926d7 100644 --- a/platform/default/src/mbgl/i18n/number_format.cpp +++ b/platform/default/src/mbgl/i18n/number_format.cpp @@ -1,10 +1,16 @@ #include +#if !defined(MBGL_USE_BUILTIN_ICU) #include +#include +#endif + +#include namespace mbgl { namespace platform { +#if !defined(MBGL_USE_BUILTIN_ICU) std::string formatNumber(double number, const std::string& localeId, const std::string& currency, @@ -22,28 +28,21 @@ std::string formatNumber(double number, .unit(icu::CurrencyUnit(ucurrency.getBuffer(), status)) .locale(locale) .formatDouble(number, status) -#if U_ICU_VERSION_MAJOR_NUM >= 62 .toString(status); -#else - .toString(); -#endif } else { ustr = icu::number::NumberFormatter::with() -#if U_ICU_VERSION_MAJOR_NUM >= 62 .precision(icu::number::Precision::minMaxFraction(minFractionDigits, maxFractionDigits)) -#else - .rounding(icu::number::Rounder::minMaxFraction(minFractionDigits, maxFractionDigits)) -#endif .locale(locale) .formatDouble(number, status) -#if U_ICU_VERSION_MAJOR_NUM >= 62 .toString(status); -#else - .toString(); -#endif } return ustr.toUTF8String(formatted); } +#else +std::string formatNumber(double number, const std::string&, const std::string&, uint8_t, uint8_t) { + return std::to_string(number); +} +#endif } // namespace platform } // namespace mbgl diff --git a/platform/linux/linux.cmake b/platform/linux/linux.cmake index bf89601a57..7412b09f8a 100644 --- a/platform/linux/linux.cmake +++ b/platform/linux/linux.cmake @@ -1,6 +1,6 @@ find_package(CURL REQUIRED) -find_package(ICU REQUIRED i18n) -find_package(ICU REQUIRED uc) +find_package(ICU OPTIONAL_COMPONENTS i18n) +find_package(ICU OPTIONAL_COMPONENTS uc) find_package(JPEG REQUIRED) find_package(OpenGL REQUIRED GLX) find_package(PNG REQUIRED) @@ -65,6 +65,20 @@ target_include_directories( include(${PROJECT_SOURCE_DIR}/vendor/nunicode.cmake) include(${PROJECT_SOURCE_DIR}/vendor/sqlite.cmake) +if(NOT ${ICU_FOUND} OR "${ICU_VERSION}" VERSION_LESS 62.0) + message("-- ICU not found or too old, using builtin.") + + set(MBGL_USE_BUILTIN_ICU TRUE) + include(${PROJECT_SOURCE_DIR}/vendor/icu.cmake) + + set_source_files_properties( + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/i18n/number_format.cpp + PROPERTIES + COMPILE_DEFINITIONS + MBGL_USE_BUILTIN_ICU + ) +endif() + target_link_libraries( mbgl-core PRIVATE @@ -72,8 +86,9 @@ target_link_libraries( ${JPEG_LIBRARIES} ${LIBUV_LIBRARIES} ${X11_LIBRARIES} - ICU::i18n - ICU::uc + $<$>:ICU::i18n> + $<$>:ICU::uc> + $<$:mbgl-vendor-icu> OpenGL::GLX PNG::PNG mbgl-vendor-nunicode -- cgit v1.2.1