Browse Source

Merge pull request #10962 from richardkchapman/1804a

HPCC-19243 Build error in ICU with Ubuntu 18.04

Reviewed-by: Gavin Halliday <ghalliday@hpccsystems.com>
Gavin Halliday 7 years ago
parent
commit
da88db2be6
3 changed files with 17 additions and 1 deletions
  1. 5 0
      cmake_modules/commonSetup.cmake
  2. 11 0
      plugins/unicodelib/unicodelib.cpp
  3. 1 1
      rtl/eclrtl/CMakeLists.txt

+ 5 - 0
cmake_modules/commonSetup.cmake

@@ -247,6 +247,8 @@ IF ("${COMMONSETUP_DONE}" STREQUAL "")
     set( PORTALURL "http://hpccsystems.com/download" )
   endif()
 
+  option(ICU_REQUIRES_CPP11 "Require C++11 for ICU support" OFF)
+
   set(CMAKE_MODULE_PATH "${HPCC_SOURCE_DIR}/cmake_modules/")
 
   if(UNIX AND SIGN_MODULES)
@@ -719,6 +721,9 @@ IF ("${COMMONSETUP_DONE}" STREQUAL "")
         find_package(ICU)
         IF (ICU_FOUND)
           add_definitions (-D_USE_ICU)
+          IF (NOT WIN32)
+            add_definitions (-DUCHAR_TYPE=uint16_t)
+          ENDIF()
           include_directories(${ICU_INCLUDE_DIR})
         ELSE()
           message(FATAL_ERROR "ICU requested but package not found")

+ 11 - 0
plugins/unicodelib/unicodelib.cpp

@@ -26,6 +26,9 @@
 #include "unicode/coll.h"
 #include "unicode/stsearch.h"
 #include "unicode/translit.h"
+#if U_ICU_VERSION_MAJOR_NUM >= 44
+#include "unicode/normalizer2.h"
+#endif
 #include "unicode/rbbi.h"
 #include "../stringlib/wildmatch.tpp"
 
@@ -192,7 +195,11 @@ int doUnicodeCompareAtStrength(unsigned src1Len, UChar const * src1, unsigned sr
     UErrorCode error = U_ZERO_ERROR;
     Collator * coll = Collator::createInstance(error);
     coll->setStrength(strength);
+#if U_ICU_VERSION_MAJOR_NUM>=58
+    Collator::EComparisonResult ret = coll->compare((char16_t *)src1, src1Len, (char16_t *)src2, src2Len);
+#else
     Collator::EComparisonResult ret = coll->compare(src1, src1Len, src2, src2Len);
+#endif
     delete coll;
     return ret;
 }
@@ -203,7 +210,11 @@ int doUnicodeLocaleCompareAtStrength(unsigned src1Len, UChar const * src1, unsig
     Locale locale(localename);
     Collator * coll = Collator::createInstance(locale, error);
     coll->setStrength(strength);
+#if U_ICU_VERSION_MAJOR_NUM>=58
+    Collator::EComparisonResult ret = coll->compare((char16_t *)src1, src1Len, (char16_t *)src2, src2Len);
+#else
     Collator::EComparisonResult ret = coll->compare(src1, src1Len, src2, src2Len);
+#endif
     delete coll;
     return ret;
 }

+ 1 - 1
rtl/eclrtl/CMakeLists.txt

@@ -69,7 +69,7 @@ include_directories (
 ADD_DEFINITIONS( -D_USRDLL -DECLRTL_EXPORTS )
 
 if (USE_BOOST_REGEX)
-    if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX)
+    if ((CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) AND NOT ICU_REQUIRES_CPP11)
         set_source_files_properties(eclregex.cpp PROPERTIES COMPILE_FLAGS -std=c++98)
     endif ()