1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
cmake_minimum_required (VERSION 3.10)
include (utils.cmake)
disallow_intree_builds()
# API version - be sure to update utf8proc.h and Makefile, too!
project (utf8proc VERSION 2.11.3 LANGUAGES C)
# This is the ABI version number, which may differ from the
# API version number (defined in utf8proc.h and above).
# Be sure to also update these in Makefile and MANIFEST!
set(SO_MAJOR 3)
set(SO_MINOR 2)
set(SO_PATCH 3)
option(UTF8PROC_INSTALL "Enable installation of utf8proc" On)
option(UTF8PROC_ENABLE_TESTING "Enable testing of utf8proc" Off)
option(LIB_FUZZING_ENGINE "Fuzzing engine to link against" Off)
add_library (utf8proc
utf8proc.c
utf8proc.h
)
# expose header path, for when this is part of a larger cmake project
target_include_directories(utf8proc PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<INSTALL_INTERFACE:include>)
if (BUILD_SHARED_LIBS)
# Building shared library
else()
# Building static library
target_compile_definitions(utf8proc PUBLIC "UTF8PROC_STATIC")
if (MSVC)
set_target_properties(utf8proc PROPERTIES OUTPUT_NAME "utf8proc_static")
endif()
endif()
target_compile_definitions(utf8proc PRIVATE "UTF8PROC_EXPORTS")
if (NOT MSVC)
set_target_properties(
utf8proc PROPERTIES
COMPILE_FLAGS "-O2 -std=c99 -pedantic -Wall"
)
endif ()
set_target_properties (utf8proc PROPERTIES
POSITION_INDEPENDENT_CODE ON
VERSION "${SO_MAJOR}.${SO_MINOR}.${SO_PATCH}"
SOVERSION ${SO_MAJOR}
)
if (UTF8PROC_INSTALL)
include(GNUInstallDirs)
install(FILES utf8proc.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
install(TARGETS utf8proc
EXPORT utf8proc-targets
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
)
configure_file(libutf8proc.pc.cmakein libutf8proc.pc @ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libutf8proc.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
# Install CMake targets file.
install(EXPORT utf8proc-targets FILE utf8proc-targets.cmake DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/utf8proc" NAMESPACE utf8proc::)
include(CMakePackageConfigHelpers)
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/utf8proc-config.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/utf8proc-config.cmake"
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/utf8proc"
NO_SET_AND_CHECK_MACRO
)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/utf8proc-config-version.cmake"
COMPATIBILITY SameMajorVersion
)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/utf8proc-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/utf8proc-config-version.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/utf8proc"
)
endif()
if(UTF8PROC_ENABLE_TESTING)
enable_testing()
file(MAKE_DIRECTORY data)
set(UNICODE_VERSION 17.0.0)
file(DOWNLOAD https://www.unicode.org/Public/${UNICODE_VERSION}/ucd/NormalizationTest.txt ${CMAKE_BINARY_DIR}/data/NormalizationTest.txt SHOW_PROGRESS)
file(DOWNLOAD https://www.unicode.org/Public/${UNICODE_VERSION}/ucd/auxiliary/GraphemeBreakTest.txt ${CMAKE_BINARY_DIR}/data/GraphemeBreakTest.txt SHOW_PROGRESS)
add_executable(case test/tests.h test/tests.c utf8proc.h test/case.c)
target_link_libraries(case utf8proc)
add_executable(custom test/tests.h test/tests.c utf8proc.h test/custom.c)
target_link_libraries(custom utf8proc)
add_executable(iterate test/tests.h test/tests.c utf8proc.h test/iterate.c)
target_link_libraries(iterate utf8proc)
add_executable(misc test/tests.h test/tests.c utf8proc.h test/misc.c)
target_link_libraries(misc utf8proc)
add_executable(printproperty test/tests.h test/tests.c utf8proc.h test/printproperty.c)
target_link_libraries(printproperty utf8proc)
add_executable(valid test/tests.h test/tests.c utf8proc.h test/valid.c)
target_link_libraries(valid utf8proc)
add_executable(maxdecomposition test/tests.h test/tests.c utf8proc.h test/maxdecomposition.c)
target_link_libraries(maxdecomposition utf8proc)
add_test(utf8proc.testcase case)
add_test(utf8proc.testcustom custom)
add_test(utf8proc.testiterate iterate)
add_test(utf8proc.testmisc misc)
add_test(utf8proc.testprintproperty printproperty)
add_test(utf8proc.testvalid valid)
add_test(utf8proc.testmaxdecomposition maxdecomposition)
if (NOT WIN32)
# no wcwidth function on Windows
add_executable(charwidth test/tests.h test/tests.c utf8proc.h test/charwidth.c)
target_link_libraries(charwidth utf8proc)
add_test(utf8proc.testcharwidth charwidth)
endif()
add_executable(graphemetest test/tests.h test/tests.c utf8proc.h test/graphemetest.c)
target_link_libraries(graphemetest utf8proc)
add_executable(normtest test/tests.h test/tests.c utf8proc.h test/normtest.c)
target_link_libraries(normtest utf8proc)
add_test(utf8proc.testgraphemetest graphemetest data/GraphemeBreakTest.txt)
add_test(utf8proc.testnormtest normtest data/NormalizationTest.txt)
if(LIB_FUZZING_ENGINE)
add_executable(fuzzer utf8proc.h test/fuzzer.c)
target_link_libraries(fuzzer ${LIB_FUZZING_ENGINE} utf8proc)
else()
add_executable(fuzzer utf8proc.h test/fuzz_main.c test/fuzzer.c)
target_link_libraries(fuzzer utf8proc)
endif()
endif()
|