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  naive.c
16  range2-neon.c
17  range2-sse.c
18)
19
20##
21# A heavier-weight C++ wrapper that supports Abseil.
22add_library (utf8_validity STATIC utf8_validity.cc)
23
24# Load Abseil dependency.
25if (NOT TARGET absl::strings)
26  if (NOT ABSL_ROOT_DIR)
27    find_package(absl REQUIRED CONFIG)
28  else ()
29    set(ABSL_ENABLE_INSTALL ${utf8_range_ENABLE_INSTALL})
30    set(ABSL_PROPAGATE_CXX_STD ON)
31    add_subdirectory(${ABSL_ROOT_DIR} third_party/abseil-cpp)
32  endif ()
33endif ()
34target_link_libraries(utf8_validity PUBLIC absl::strings)
35
36# Configure tests.
37if (utf8_range_ENABLE_TESTS)
38  enable_testing()
39
40  find_package(GTest REQUIRED)
41
42  add_executable(tests utf8_validity_test.cc)
43  target_link_libraries(tests utf8_validity GTest::gmock_main)
44
45  add_test(NAME utf8_validity_test COMMAND tests)
46
47  add_custom_target(check
48    COMMAND tests
49    DEPENDS tests
50  )
51endif ()
52
53# Configure installation.
54if (utf8_range_ENABLE_INSTALL)
55  include(CMakePackageConfigHelpers)
56  include(GNUInstallDirs)
57
58  install(EXPORT ${PROJECT_NAME}-targets
59    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
60    NAMESPACE utf8_range::
61  )
62  install(TARGETS utf8_validity utf8_range EXPORT ${PROJECT_NAME}-targets
63        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
64        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
65        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
66  )
67
68  configure_package_config_file(
69    cmake/${PROJECT_NAME}-config.cmake.in
70    "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
71    INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
72  )
73  install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
74    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
75  )
76
77  # Install public headers explicitly.
78  install(FILES utf8_range.h utf8_validity.h
79    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
80  )
81endif ()
82