xref: /aosp_15_r20/external/grpc-grpc/third_party/utf8_range/CMakeLists.txt (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1cmake_minimum_required (VERSION 3.5)
2project (utf8_range C CXX)
3
4# option() honor variables
5if (POLICY CMP0077)
6  cmake_policy(SET CMP0077 NEW)
7endif (POLICY CMP0077)
8
9option (utf8_range_ENABLE_TESTS "Build test suite" ON)
10option (utf8_range_ENABLE_INSTALL "Configure installation" ON)
11
12##
13# Create the lightweight C library
14add_library (utf8_range STATIC
15  utf8_range.c
16)
17
18##
19# A heavier-weight C++ wrapper that supports Abseil.
20add_library (utf8_validity STATIC utf8_validity.cc utf8_range.c)
21
22# Load Abseil dependency.
23if (NOT TARGET absl::strings)
24  if (NOT ABSL_ROOT_DIR)
25    find_package(absl REQUIRED CONFIG)
26  else ()
27    set(ABSL_ENABLE_INSTALL ${utf8_range_ENABLE_INSTALL})
28    set(ABSL_PROPAGATE_CXX_STD ON)
29    add_subdirectory(${ABSL_ROOT_DIR} third_party/abseil-cpp)
30  endif ()
31endif ()
32target_link_libraries(utf8_validity PUBLIC absl::strings)
33
34# Configure tests.
35if (utf8_range_ENABLE_TESTS)
36  enable_testing()
37
38  find_package(GTest REQUIRED)
39
40  add_executable(tests utf8_validity_test.cc)
41  target_link_libraries(tests utf8_validity GTest::gmock_main)
42
43  add_test(NAME utf8_validity_test COMMAND tests)
44
45  add_custom_target(check
46    COMMAND tests
47    DEPENDS tests
48  )
49endif ()
50
51# Configure installation.
52if (utf8_range_ENABLE_INSTALL)
53  include(CMakePackageConfigHelpers)
54  include(GNUInstallDirs)
55
56  install(EXPORT ${PROJECT_NAME}-targets
57    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
58    NAMESPACE utf8_range::
59  )
60  install(TARGETS utf8_validity utf8_range EXPORT ${PROJECT_NAME}-targets
61        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
62        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
63        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
64  )
65
66  configure_package_config_file(
67    cmake/${PROJECT_NAME}-config.cmake.in
68    "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
69    INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
70  )
71  install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
72    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
73  )
74  configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/utf8_range.pc.cmake
75                 ${CMAKE_CURRENT_BINARY_DIR}/utf8_range.pc @ONLY)
76  install(
77    FILES ${CMAKE_CURRENT_BINARY_DIR}/utf8_range.pc
78    DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
79
80  # Install public headers explicitly.
81  install(FILES utf8_range.h utf8_validity.h
82    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
83  )
84endif ()
85