Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 54 additions & 32 deletions cmake/icu.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,9 @@
# The lowest checked version is 55 on Ubuntu 16.
SET(MIN_ICU_VERSION_REQUIRED "55")

MACRO(FIND_ICU_VERSION ICU_COMMON_DIR)
MACRO(FIND_ICU_VERSION ICU_SEARCH_DIRS)
FIND_PATH(ICU_COMMON_DIR NAMES unicode/uvernum.h ${ICU_SEARCH_DIRS})

# Extract the version number. Major version information looks like:
# #define U_ICU_VERSION_MAJOR_NUM nn
FILE(STRINGS "${ICU_COMMON_DIR}/unicode/uvernum.h"
Expand All @@ -71,13 +73,30 @@ ENDMACRO()
#
FUNCTION(FIND_ICU install_root)
IF("${install_root}" STREQUAL "system")
SET(EXTRA_FIND_LIB_ARGS)
SET(EXTRA_FIND_INC_ARGS)
IF(APPLE)
SET(EXTRA_FIND_LIB_ARGS HINTS "${HOMEBREW_HOME}/icu4c"
PATH_SUFFIXES "lib")
SET(EXTRA_FIND_INC_ARGS HINTS "${HOMEBREW_HOME}/icu4c"
PATH_SUFFIXES "include")
FIND_PACKAGE(PkgConfig QUIET)
IF(PkgConfig_FOUND)
PKG_CHECK_MODULES(ICU icu-io)
ENDIF()

IF(ICU_FOUND)
SET(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIRS})
IF(BUILD_SHARED_LIBS)
SET(ICU_LIBRARIES ${ICU_LIBRARIES})
ELSE()
SET(ICU_LIBRARIES ${ICU_STATIC_LIBRARIES})
ENDIF()

MESSAGE(STATUS "ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIRS}")
MESSAGE(STATUS "ICU_LIBRARIES ${ICU_LIBRARIES}")
ELSE()
SET(EXTRA_FIND_LIB_ARGS)
SET(EXTRA_FIND_INC_ARGS)
IF(APPLE)
SET(EXTRA_FIND_LIB_ARGS HINTS "${HOMEBREW_HOME}/icu4c"
PATH_SUFFIXES "lib")
SET(EXTRA_FIND_INC_ARGS HINTS "${HOMEBREW_HOME}/icu4c"
PATH_SUFFIXES "include")
ENDIF()
ENDIF()
ELSE()
SET(EXTRA_FIND_LIB_ARGS HINTS "${install_root}"
Expand All @@ -86,38 +105,41 @@ FUNCTION(FIND_ICU install_root)
PATH_SUFFIXES "include" NO_DEFAULT_PATH)
ENDIF()

FIND_PATH(ICU_INCLUDE_DIR NAMES unicode/regex.h ${EXTRA_FIND_INC_ARGS})
IF (NOT ICU_INCLUDE_DIR)
MESSAGE(FATAL_ERROR "Cannot find ICU regular expression headers")
ENDIF()

IF(WIN32)
SET(ICU_LIBS icuuc icuio icudt icuin)
ELSE()
SET(ICU_LIBS icuuc icuio icudata icui18n)
ENDIF()
IF(NOT ICU_FOUND)
FIND_PATH(ICU_INCLUDE_DIR NAMES unicode/regex.h ${EXTRA_FIND_INC_ARGS})
IF (NOT ICU_INCLUDE_DIR)
MESSAGE(FATAL_ERROR "Cannot find ICU regular expression headers")
ENDIF()

SET(ICU_SYSTEM_LIBRARIES)
FOREACH(ICU_LIB ${ICU_LIBS})
UNSET(ICU_LIB_PATH CACHE)
FIND_LIBRARY(ICU_LIB_PATH NAMES ${ICU_LIB} ${EXTRA_FIND_LIB_ARGS})
IF(NOT ICU_LIB_PATH)
MESSAGE(FATAL_ERROR "Cannot find the ICU library ${ICU_LIB}")
IF(WIN32)
SET(ICU_LIBS icuuc icuio icudt icuin)
ELSE()
SET(ICU_LIBS icuuc icuio icudata icui18n)
ENDIF()
LIST(APPEND ICU_SYSTEM_LIBRARIES ${ICU_LIB_PATH})
ENDFOREACH()

SET(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIR})
SET(ICU_LIBRARIES ${ICU_SYSTEM_LIBRARIES})
SET(ICU_SYSTEM_LIBRARIES)
FOREACH(ICU_LIB ${ICU_LIBS})
UNSET(ICU_LIB_PATH CACHE)
FIND_LIBRARY(ICU_LIB_PATH NAMES ${ICU_LIB} ${EXTRA_FIND_LIB_ARGS})
IF(NOT ICU_LIB_PATH)
MESSAGE(FATAL_ERROR "Cannot find the ICU library ${ICU_LIB}")
ENDIF()
LIST(APPEND ICU_SYSTEM_LIBRARIES ${ICU_LIB_PATH})
ENDFOREACH()

SET(ICU_COMMON_DIR ${ICU_INCLUDE_DIR})
FIND_ICU_VERSION(${ICU_COMMON_DIR})
SET(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIR})
SET(ICU_LIBRARIES ${ICU_SYSTEM_LIBRARIES})

SET(ICU_COMMON_DIR ${ICU_INCLUDE_DIR})
ENDIF()

FIND_ICU_VERSION(${ICU_INCLUDE_DIRS})

ADD_LIBRARY(icu_interface INTERFACE)
TARGET_LINK_LIBRARIES(icu_interface INTERFACE ${ICU_LIBRARIES})
IF(NOT ICU_INCLUDE_DIR STREQUAL "/usr/include")
IF(NOT ICU_INCLUDE_DIRS STREQUAL "/usr/include")
TARGET_INCLUDE_DIRECTORIES(icu_interface SYSTEM INTERFACE
${ICU_INCLUDE_DIR})
${ICU_INCLUDE_DIRS})
ENDIF()
ENDFUNCTION(FIND_ICU)

Expand Down