utf8proc

A clean C library for processing UTF-8 Unicode data
git clone https://git.sinitax.com/juliastrings/utf8proc
Log | Files | Refs | README | LICENSE | sfeed.txt

CMakeLists.txt (4184B)


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