1# This module can find the International Components for Unicode (ICU) Library
2#
3# Requirements:
4# - CMake >= 2.8.3 (for new version of find_package_handle_standard_args)
5#
6# The following variables will be defined for your use:
7#   - ICU_FOUND             : were all of your specified components found (include dependencies)?
8#   - ICU_INCLUDE_DIRS      : ICU include directory
9#   - ICU_LIBRARIES         : ICU libraries
10#   - ICU_VERSION           : complete version of ICU (x.y.z)
11#   - ICU_MAJOR_VERSION     : major version of ICU
12#   - ICU_MINOR_VERSION     : minor version of ICU
13#   - ICU_PATCH_VERSION     : patch version of ICU
14#   - ICU_<COMPONENT>_FOUND : were <COMPONENT> found? (FALSE for non specified component if it is not a dependency)
15#
16# For windows or non standard installation, define ICU_ROOT variable to point to the root installation of ICU. Two ways:
17#   - run cmake with -DICU_ROOT=<PATH>
18#   - define an environment variable with the same name before running cmake
19# With cmake-gui, before pressing "Configure":
20#   1) Press "Add Entry" button
21#   2) Add a new entry defined as:
22#     - Name: ICU_ROOT
23#     - Type: choose PATH in the selection list
24#     - Press "..." button and select the root installation of ICU
25#
26# Example Usage:
27#
28#   1. Copy this file in the root of your project source directory
29#   2. Then, tell CMake to search this non-standard module in your project directory by adding to your CMakeLists.txt:
30#     set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})
31#   3. Finally call find_package() once, here are some examples to pick from
32#
33#   Require ICU 4.4 or later
34#     find_package(ICU 4.4 REQUIRED)
35#
36#   if(ICU_FOUND)
37#      include_directories(${ICU_INCLUDE_DIRS})
38#      add_executable(myapp myapp.c)
39#      target_link_libraries(myapp ${ICU_LIBRARIES})
40#   endif(ICU_FOUND)
41
42#=============================================================================
43# Copyright (c) 2011-2013, julp
44#
45# Distributed under the OSI-approved BSD License
46#
47# This software is distributed WITHOUT ANY WARRANTY; without even the
48# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
49#=============================================================================
50
51find_package(PkgConfig QUIET)
52
53########## Private ##########
54if(NOT DEFINED ICU_PUBLIC_VAR_NS)
55    set(ICU_PUBLIC_VAR_NS "ICU")                          # Prefix for all ICU relative public variables
56endif(NOT DEFINED ICU_PUBLIC_VAR_NS)
57if(NOT DEFINED ICU_PRIVATE_VAR_NS)
58    set(ICU_PRIVATE_VAR_NS "_${ICU_PUBLIC_VAR_NS}")       # Prefix for all ICU relative internal variables
59endif(NOT DEFINED ICU_PRIVATE_VAR_NS)
60if(NOT DEFINED PC_ICU_PRIVATE_VAR_NS)
61    set(PC_ICU_PRIVATE_VAR_NS "_PC${ICU_PRIVATE_VAR_NS}") # Prefix for all pkg-config relative internal variables
62endif(NOT DEFINED PC_ICU_PRIVATE_VAR_NS)
63
64function(icudebug _VARNAME)
65    if(${ICU_PUBLIC_VAR_NS}_DEBUG)
66        if(DEFINED ${ICU_PUBLIC_VAR_NS}_${_VARNAME})
67            message("${ICU_PUBLIC_VAR_NS}_${_VARNAME} = ${${ICU_PUBLIC_VAR_NS}_${_VARNAME}}")
68        else(DEFINED ${ICU_PUBLIC_VAR_NS}_${_VARNAME})
69            message("${ICU_PUBLIC_VAR_NS}_${_VARNAME} = <UNDEFINED>")
70        endif(DEFINED ${ICU_PUBLIC_VAR_NS}_${_VARNAME})
71    endif(${ICU_PUBLIC_VAR_NS}_DEBUG)
72endfunction(icudebug)
73
74set(${ICU_PRIVATE_VAR_NS}_ROOT "")
75if(DEFINED ENV{ICU_ROOT})
76    set(${ICU_PRIVATE_VAR_NS}_ROOT "$ENV{ICU_ROOT}")
77endif(DEFINED ENV{ICU_ROOT})
78if (DEFINED ICU_ROOT)
79    set(${ICU_PRIVATE_VAR_NS}_ROOT "${ICU_ROOT}")
80endif(DEFINED ICU_ROOT)
81
82set(${ICU_PRIVATE_VAR_NS}_BIN_SUFFIXES )
83set(${ICU_PRIVATE_VAR_NS}_LIB_SUFFIXES )
84if(CMAKE_SIZEOF_VOID_P EQUAL 8)
85    list(APPEND ${ICU_PRIVATE_VAR_NS}_BIN_SUFFIXES "bin64")
86    list(APPEND ${ICU_PRIVATE_VAR_NS}_LIB_SUFFIXES "lib64")
87endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
88list(APPEND ${ICU_PRIVATE_VAR_NS}_BIN_SUFFIXES "bin")
89list(APPEND ${ICU_PRIVATE_VAR_NS}_LIB_SUFFIXES "lib")
90
91set(${ICU_PRIVATE_VAR_NS}_COMPONENTS )
92# <icu component name> <library name 1> ... <library name N>
93macro(icu_declare_component _NAME)
94    list(APPEND ${ICU_PRIVATE_VAR_NS}_COMPONENTS ${_NAME})
95    set("${ICU_PRIVATE_VAR_NS}_COMPONENTS_${_NAME}" ${ARGN})
96endmacro(icu_declare_component)
97
98icu_declare_component(data icudata)
99icu_declare_component(uc   icuuc)         # Common and Data libraries
100icu_declare_component(i18n icui18n icuin) # Internationalization library
101icu_declare_component(io   icuio ustdio)  # Stream and I/O Library
102icu_declare_component(le   icule)         # Layout library
103icu_declare_component(lx   iculx)         # Paragraph Layout library
104
105########## Public ##########
106set(${ICU_PUBLIC_VAR_NS}_FOUND TRUE)
107set(${ICU_PUBLIC_VAR_NS}_LIBRARIES )
108set(${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS )
109set(${ICU_PUBLIC_VAR_NS}_C_FLAGS "")
110set(${ICU_PUBLIC_VAR_NS}_CXX_FLAGS "")
111set(${ICU_PUBLIC_VAR_NS}_CPP_FLAGS "")
112set(${ICU_PUBLIC_VAR_NS}_C_SHARED_FLAGS "")
113set(${ICU_PUBLIC_VAR_NS}_CXX_SHARED_FLAGS "")
114set(${ICU_PUBLIC_VAR_NS}_CPP_SHARED_FLAGS "")
115foreach(${ICU_PRIVATE_VAR_NS}_COMPONENT ${${ICU_PRIVATE_VAR_NS}_COMPONENTS})
116    string(TOUPPER "${${ICU_PRIVATE_VAR_NS}_COMPONENT}" ${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT)
117    set("${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_FOUND" FALSE) # may be done in the icu_declare_component macro
118endforeach(${ICU_PRIVATE_VAR_NS}_COMPONENT)
119
120# Check components
121if(NOT ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS) # uc required at least
122    set(${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS uc)
123else(NOT ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS)
124    list(APPEND ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS uc)
125    list(REMOVE_DUPLICATES ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS)
126    foreach(${ICU_PRIVATE_VAR_NS}_COMPONENT ${${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS})
127        if(NOT DEFINED ${ICU_PRIVATE_VAR_NS}_COMPONENTS_${${ICU_PRIVATE_VAR_NS}_COMPONENT})
128            message(FATAL_ERROR "Unknown ICU component: ${${ICU_PRIVATE_VAR_NS}_COMPONENT}")
129        endif(NOT DEFINED ${ICU_PRIVATE_VAR_NS}_COMPONENTS_${${ICU_PRIVATE_VAR_NS}_COMPONENT})
130    endforeach(${ICU_PRIVATE_VAR_NS}_COMPONENT)
131endif(NOT ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS)
132
133# Includes
134find_path(
135    ${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS
136    NAMES unicode/utypes.h utypes.h
137    HINTS ${${ICU_PRIVATE_VAR_NS}_ROOT}
138    PATH_SUFFIXES "include"
139    DOC "Include directories for ICU"
140)
141
142if(${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS)
143    ########## <part to keep synced with tests/version/CMakeLists.txt> ##########
144    if(EXISTS "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/unicode/uvernum.h") # ICU >= 4
145        file(READ "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/unicode/uvernum.h" ${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS)
146    elseif(EXISTS "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/unicode/uversion.h") # ICU [2;4[
147        file(READ "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/unicode/uversion.h" ${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS)
148    elseif(EXISTS "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/unicode/utypes.h") # ICU [1.4;2[
149        file(READ "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/unicode/utypes.h" ${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS)
150    elseif(EXISTS "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/utypes.h") # ICU 1.3
151        file(READ "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/utypes.h" ${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS)
152    else()
153        message(FATAL_ERROR "ICU version header not found")
154    endif()
155
156    if(${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS MATCHES ".*# *define *ICU_VERSION *\"([0-9]+)\".*") # ICU 1.3
157        # [1.3;1.4[ as #define ICU_VERSION "3" (no patch version, ie all 1.3.X versions will be detected as 1.3.0)
158        set(${ICU_PUBLIC_VAR_NS}_MAJOR_VERSION "1")
159        set(${ICU_PUBLIC_VAR_NS}_MINOR_VERSION "${CMAKE_MATCH_1}")
160        set(${ICU_PUBLIC_VAR_NS}_PATCH_VERSION "0")
161    elseif(${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS MATCHES ".*# *define *U_ICU_VERSION_MAJOR_NUM *([0-9]+).*")
162        #
163        # Since version 4.9.1, ICU release version numbering was totaly changed, see:
164        # - http://site.icu-project.org/download/49
165        # - http://userguide.icu-project.org/design#TOC-Version-Numbers-in-ICU
166        #
167        set(${ICU_PUBLIC_VAR_NS}_MAJOR_VERSION "${CMAKE_MATCH_1}")
168        string(REGEX REPLACE ".*# *define *U_ICU_VERSION_MINOR_NUM *([0-9]+).*" "\\1" ${ICU_PUBLIC_VAR_NS}_MINOR_VERSION "${${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS}")
169        string(REGEX REPLACE ".*# *define *U_ICU_VERSION_PATCHLEVEL_NUM *([0-9]+).*" "\\1" ${ICU_PUBLIC_VAR_NS}_PATCH_VERSION "${${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS}")
170    elseif(${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS MATCHES ".*# *define *U_ICU_VERSION *\"(([0-9]+)(\\.[0-9]+)*)\".*") # ICU [1.4;1.8[
171        # [1.4;1.8[ as #define U_ICU_VERSION "1.4.1.2" but it seems that some 1.4.1(?:\.\d)? have releasing error and appears as 1.4.0
172        set(${ICU_PRIVATE_VAR_NS}_FULL_VERSION "${CMAKE_MATCH_1}") # copy CMAKE_MATCH_1, no longer valid on the following if
173        if(${ICU_PRIVATE_VAR_NS}_FULL_VERSION MATCHES "^([0-9]+)\\.([0-9]+)$")
174            set(${ICU_PUBLIC_VAR_NS}_MAJOR_VERSION "${CMAKE_MATCH_1}")
175            set(${ICU_PUBLIC_VAR_NS}_MINOR_VERSION "${CMAKE_MATCH_2}")
176            set(${ICU_PUBLIC_VAR_NS}_PATCH_VERSION "0")
177        elseif(${ICU_PRIVATE_VAR_NS}_FULL_VERSION MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)")
178            set(${ICU_PUBLIC_VAR_NS}_MAJOR_VERSION "${CMAKE_MATCH_1}")
179            set(${ICU_PUBLIC_VAR_NS}_MINOR_VERSION "${CMAKE_MATCH_2}")
180            set(${ICU_PUBLIC_VAR_NS}_PATCH_VERSION "${CMAKE_MATCH_3}")
181        endif()
182    else()
183        message(FATAL_ERROR "failed to detect ICU version")
184    endif()
185    set(${ICU_PUBLIC_VAR_NS}_VERSION "${${ICU_PUBLIC_VAR_NS}_MAJOR_VERSION}.${${ICU_PUBLIC_VAR_NS}_MINOR_VERSION}.${${ICU_PUBLIC_VAR_NS}_PATCH_VERSION}")
186    ########## </part to keep synced with tests/version/CMakeLists.txt> ##########
187
188    # Check dependencies (implies pkg-config)
189    if(PKG_CONFIG_FOUND)
190        set(${ICU_PRIVATE_VAR_NS}_COMPONENTS_DUP ${${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS})
191        foreach(${ICU_PRIVATE_VAR_NS}_COMPONENT ${${ICU_PRIVATE_VAR_NS}_COMPONENTS_DUP})
192            pkg_check_modules(PC_ICU_PRIVATE_VAR_NS "icu-${${ICU_PRIVATE_VAR_NS}_COMPONENT}" QUIET)
193
194            if(${PC_ICU_PRIVATE_VAR_NS}_FOUND)
195                foreach(${PC_ICU_PRIVATE_VAR_NS}_LIBRARY ${PC_ICU_LIBRARIES})
196                    string(REGEX REPLACE "^icu" "" ${PC_ICU_PRIVATE_VAR_NS}_STRIPPED_LIBRARY ${${PC_ICU_PRIVATE_VAR_NS}_LIBRARY})
197                    list(APPEND ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS ${${PC_ICU_PRIVATE_VAR_NS}_STRIPPED_LIBRARY})
198                endforeach(${PC_ICU_PRIVATE_VAR_NS}_LIBRARY)
199            endif(${PC_ICU_PRIVATE_VAR_NS}_FOUND)
200        endforeach(${ICU_PRIVATE_VAR_NS}_COMPONENT)
201        list(REMOVE_DUPLICATES ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS)
202    endif(PKG_CONFIG_FOUND)
203
204    # Check libraries
205    foreach(${ICU_PRIVATE_VAR_NS}_COMPONENT ${${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS})
206        set(${ICU_PRIVATE_VAR_NS}_POSSIBLE_RELEASE_NAMES )
207        set(${ICU_PRIVATE_VAR_NS}_POSSIBLE_DEBUG_NAMES )
208        foreach(${ICU_PRIVATE_VAR_NS}_BASE_NAME ${${ICU_PRIVATE_VAR_NS}_COMPONENTS_${${ICU_PRIVATE_VAR_NS}_COMPONENT}})
209            list(APPEND ${ICU_PRIVATE_VAR_NS}_POSSIBLE_RELEASE_NAMES "${${ICU_PRIVATE_VAR_NS}_BASE_NAME}")
210            list(APPEND ${ICU_PRIVATE_VAR_NS}_POSSIBLE_DEBUG_NAMES "${${ICU_PRIVATE_VAR_NS}_BASE_NAME}d")
211            list(APPEND ${ICU_PRIVATE_VAR_NS}_POSSIBLE_RELEASE_NAMES "${${ICU_PRIVATE_VAR_NS}_BASE_NAME}${ICU_MAJOR_VERSION}${ICU_MINOR_VERSION}")
212            list(APPEND ${ICU_PRIVATE_VAR_NS}_POSSIBLE_DEBUG_NAMES "${${ICU_PRIVATE_VAR_NS}_BASE_NAME}${ICU_MAJOR_VERSION}${ICU_MINOR_VERSION}d")
213        endforeach(${ICU_PRIVATE_VAR_NS}_BASE_NAME)
214
215        find_library(
216            ${ICU_PRIVATE_VAR_NS}_LIB_RELEASE_${${ICU_PRIVATE_VAR_NS}_COMPONENT}
217            NAMES ${${ICU_PRIVATE_VAR_NS}_POSSIBLE_RELEASE_NAMES}
218            HINTS ${${ICU_PRIVATE_VAR_NS}_ROOT}
219            PATH_SUFFIXES ${_ICU_LIB_SUFFIXES}
220            DOC "Release libraries for ICU"
221        )
222        find_library(
223            ${ICU_PRIVATE_VAR_NS}_LIB_DEBUG_${${ICU_PRIVATE_VAR_NS}_COMPONENT}
224            NAMES ${${ICU_PRIVATE_VAR_NS}_POSSIBLE_DEBUG_NAMES}
225            HINTS ${${ICU_PRIVATE_VAR_NS}_ROOT}
226            PATH_SUFFIXES ${_ICU_LIB_SUFFIXES}
227            DOC "Debug libraries for ICU"
228        )
229
230        string(TOUPPER "${${ICU_PRIVATE_VAR_NS}_COMPONENT}" ${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT)
231        if(NOT ${ICU_PRIVATE_VAR_NS}_LIB_RELEASE_${${ICU_PRIVATE_VAR_NS}_COMPONENT} AND NOT ${ICU_PRIVATE_VAR_NS}_LIB_DEBUG_${${ICU_PRIVATE_VAR_NS}_COMPONENT}) # both not found
232            set("${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_FOUND" FALSE)
233            set("${ICU_PUBLIC_VAR_NS}_FOUND" FALSE)
234        else(NOT ${ICU_PRIVATE_VAR_NS}_LIB_RELEASE_${${ICU_PRIVATE_VAR_NS}_COMPONENT} AND NOT ${ICU_PRIVATE_VAR_NS}_LIB_DEBUG_${${ICU_PRIVATE_VAR_NS}_COMPONENT}) # one or both found
235            set("${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_FOUND" TRUE)
236            if(NOT ${ICU_PRIVATE_VAR_NS}_LIB_RELEASE_${${ICU_PRIVATE_VAR_NS}_COMPONENT}) # release not found => we are in debug
237                set(${ICU_PRIVATE_VAR_NS}_LIB_${${ICU_PRIVATE_VAR_NS}_COMPONENT} "${${ICU_PRIVATE_VAR_NS}_LIB_DEBUG_${${ICU_PRIVATE_VAR_NS}_COMPONENT}}")
238            elseif(NOT ${ICU_PRIVATE_VAR_NS}_LIB_DEBUG_${${ICU_PRIVATE_VAR_NS}_COMPONENT}) # debug not found => we are in release
239                set(${ICU_PRIVATE_VAR_NS}_LIB_${${ICU_PRIVATE_VAR_NS}_COMPONENT} "${${ICU_PRIVATE_VAR_NS}_LIB_RELEASE_${${ICU_PRIVATE_VAR_NS}_COMPONENT}}")
240            else() # both found
241                set(
242                    ${ICU_PRIVATE_VAR_NS}_LIB_${${ICU_PRIVATE_VAR_NS}_COMPONENT}
243                    optimized ${${ICU_PRIVATE_VAR_NS}_LIB_RELEASE_${${ICU_PRIVATE_VAR_NS}_COMPONENT}}
244                    debug ${${ICU_PRIVATE_VAR_NS}_LIB_DEBUG_${${ICU_PRIVATE_VAR_NS}_COMPONENT}}
245                )
246            endif()
247            list(APPEND ${ICU_PUBLIC_VAR_NS}_LIBRARIES ${${ICU_PRIVATE_VAR_NS}_LIB_${${ICU_PRIVATE_VAR_NS}_COMPONENT}})
248        endif(NOT ${ICU_PRIVATE_VAR_NS}_LIB_RELEASE_${${ICU_PRIVATE_VAR_NS}_COMPONENT} AND NOT ${ICU_PRIVATE_VAR_NS}_LIB_DEBUG_${${ICU_PRIVATE_VAR_NS}_COMPONENT})
249    endforeach(${ICU_PRIVATE_VAR_NS}_COMPONENT)
250
251    # Try to find out compiler flags
252    find_program(${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE icu-config HINTS ${${ICU_PRIVATE_VAR_NS}_ROOT})
253    if(${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE)
254        execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cflags OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_C_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
255        execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cxxflags OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_CXX_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
256        execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cppflags OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_CPP_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
257
258        execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cflags-dynamic OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_C_SHARED_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
259        execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cxxflags-dynamic OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_CXX_SHARED_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
260        execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cppflags-dynamic OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_CPP_SHARED_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
261    endif(${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE)
262
263    # Check find_package arguments
264    include(FindPackageHandleStandardArgs)
265    if(${ICU_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${ICU_PUBLIC_VAR_NS}_FIND_QUIETLY)
266        find_package_handle_standard_args(
267            ${ICU_PUBLIC_VAR_NS}
268            REQUIRED_VARS ${ICU_PUBLIC_VAR_NS}_LIBRARIES ${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS
269            VERSION_VAR ${ICU_PUBLIC_VAR_NS}_VERSION
270        )
271    else(${ICU_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${ICU_PUBLIC_VAR_NS}_FIND_QUIETLY)
272        find_package_handle_standard_args(${ICU_PUBLIC_VAR_NS} "ICU not found" ${ICU_PUBLIC_VAR_NS}_LIBRARIES ${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS)
273    endif(${ICU_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${ICU_PUBLIC_VAR_NS}_FIND_QUIETLY)
274else(${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS)
275    if(${ICU_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${ICU_PUBLIC_VAR_NS}_FIND_QUIETLY)
276        message(FATAL_ERROR "Could not find ICU include directory")
277    endif(${ICU_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${ICU_PUBLIC_VAR_NS}_FIND_QUIETLY)
278endif(${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS)
279
280mark_as_advanced(
281    ${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS
282    ${ICU_PUBLIC_VAR_NS}_LIBRARIES
283)
284
285# IN (args)
286icudebug("FIND_COMPONENTS")
287icudebug("FIND_REQUIRED")
288icudebug("FIND_QUIETLY")
289icudebug("FIND_VERSION")
290# OUT
291# Found
292icudebug("FOUND")
293icudebug("UC_FOUND")
294icudebug("I18N_FOUND")
295icudebug("IO_FOUND")
296icudebug("LE_FOUND")
297icudebug("LX_FOUND")
298icudebug("DATA_FOUND")
299# Flags
300icudebug("C_FLAGS")
301icudebug("CPP_FLAGS")
302icudebug("CXX_FLAGS")
303icudebug("C_SHARED_FLAGS")
304icudebug("CPP_SHARED_FLAGS")
305icudebug("CXX_SHARED_FLAGS")
306# Linking
307icudebug("INCLUDE_DIRS")
308icudebug("LIBRARIES")
309# Version
310icudebug("MAJOR_VERSION")
311icudebug("MINOR_VERSION")
312icudebug("PATCH_VERSION")
313icudebug("VERSION")
314