# Find libicu's libraries

include(FindPackageHandleStandardArgs)

find_package(PkgConfig)

set(ICU_REQUIRED)
foreach(MODULE ${ICU_FIND_COMPONENTS})
  string(TOUPPER "${MODULE}" MODULE)
  string(TOLOWER "${MODULE}" module)
  list(APPEND ICU_REQUIRED 
    ICU_${MODULE}_INCLUDE_DIR ICU_${MODULE}_LIBRARIES)

  pkg_check_modules(PC_ICU_${MODULE} QUIET icu-${module})
  if(${PC_ICU_${MODULE}_FOUND})
    set(ICU_${MODULE}_DEFINITIONS ${PC_ICU_${MODULE}_CFLAGS_OTHER})

    find_path(ICU_${MODULE}_INCLUDE_DIR unicode
      HINTS ${PC_ICU_${MODULE}_INCLUDEDIR} ${PC_ICU_${MODULE}_INCLUDE_DIRS})
    set(ICU_${MODULE}_INCLUDE_DIR ${ICU_${MODULE}_INCLUDE_DIR})

    find_library(ICU_${MODULE}_LIBRARY NAMES icu${module}
      HINTS ${PC_ICU_${MODULE}_LIBDIR} ${PC_ICU_${MODULE}_LIBRARY_DIRS})
    set(ICU_${MODULE}_LIBRARIES ${ICU_${MODULE}_LIBRARY})
  endif()
endforeach()

foreach(sdk ANDROID;FREEBSD;LINUX;WINDOWS)
  foreach(MODULE ${ICU_FIND_COMPONENTS})
    if("${SWIFT_${sdk}_ICU_${MODULE}_INCLUDE}" STREQUAL "")
      set(SWIFT_${sdk}_ICU_${MODULE}_INCLUDE ${ICU_${MODULE}_INCLUDE_DIRS})
    endif()
    if("${SWIFT_${sdk}_ICU_${MODULE}}" STREQUAL "")
      set(SWIFT_${sdk}_ICU_${MODULE} ${ICU_${MODULE}_LIBRARY})
    endif()
  endforeach()
endforeach()

find_package_handle_standard_args(ICU DEFAULT_MSG ${ICU_REQUIRED})
mark_as_advanced(${ICU_REQUIRED})
