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