Warning, /graphics/krita/3rdparty_vendor/raqm/CMakeLists.txt is written in an unsupported language. File is not indexed.

0001 # SPDX-FileCopyrightText: 2023 Alvin Wong <alvin@alvinhc.com>
0002 # SPDX-License-Identifier: BSD-2-Clause
0003 
0004 #[=======================================================================[
0005 
0006 This CMake file builds a patched libraqm as a static library to be linked from
0007 Krita (libkritaflake). We use FetchContent to download a copy of the unmodified
0008 libraqm source and patch it locally.
0009 
0010 FetchContent provides a way to use existing source instead of a downloaded copy.
0011 By setting `FETCHCONTENT_SOURCE_DIR_LIBRAQM_SRC` to the path of a local copy of
0012 the patched libraqm source, you can skip the download step, and you will be
0013 able to modify the local copy of the libraqm source to test out changes.
0014 
0015 #]=======================================================================]
0016 
0017 
0018 project(libraqm
0019     VERSION 0.10.1.1
0020     DESCRIPTION "A library for complex text layout"
0021     HOMEPAGE_URL "https://github.com/HOST-Oman/libraqm"
0022     LANGUAGES C
0023 )
0024 
0025 ##
0026 ## Check for FriBidi
0027 ##
0028 find_package(FriBidi 1.0.6 REQUIRED)
0029 set_package_properties(FriBidi PROPERTIES
0030     DESCRIPTION "GNU FriBidi"
0031     URL "https://github.com/fribidi/fribidi"
0032     TYPE REQUIRED
0033     PURPOSE "Needed by libraqm to perform bidirectional text layout."
0034 )
0035 
0036 
0037 include(FetchContent)
0038 if(NOT DEFINED PATCH_COMMAND)
0039     if(WIN32)
0040         set(PATCH_COMMAND patch --binary)
0041     else()
0042         set(PATCH_COMMAND patch)
0043     endif()
0044 endif()
0045 
0046 
0047 if (USE_EXTERNAL_RAQM)
0048     set(RAQM_FETCHCONTENT_ARGS
0049         URL https://github.com/HOST-Oman/libraqm/releases/download/v0.10.1/raqm-0.10.1.tar.xz
0050         # HACK: Whenever you change this file to add patch commands, it causes
0051         # CMake to rerun the patch commands on the already-patched source, which
0052         # results in a failure. Changing the following fake URL tricks CMake
0053         # into re-extracting the source so the patch commands can succeed.
0054         http://:0/hack_to_trigger_re-extract-source/20230914
0055         URL_HASH SHA256=4d76a358358d67c5945684f2f10b3b08fb80e924371bf3ebf8b15cd2e321d05d
0056         PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0001-Add-arbitrary-run-break-function.patch
0057               COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0002-Fix-Unicode-codepoint-conversion-from-UTF-16.patch)
0058 else ()
0059     set(RAQM_FETCHCONTENT_ARGS SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/raqm-0.10.1)
0060 endif ()
0061 
0062 FetchContent_Declare(
0063     libraqm_src
0064     DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0065     ${RAQM_FETCHCONTENT_ARGS}
0066 )
0067 
0068 FetchContent_MakeAvailable(libraqm_src)
0069 if(NOT libraqm_src_POPULATED)
0070     message(FATAL_ERROR "Missing libraqm source.")
0071 endif()
0072 
0073 
0074 set(CMAKE_AUTOMOC OFF)
0075 
0076 set(RAQM_VERSION_MAJOR ${libraqm_VERSION_MAJOR})
0077 set(RAQM_VERSION_MINOR ${libraqm_VERSION_MINOR})
0078 set(RAQM_VERSION_MICRO ${libraqm_VERSION_PATCH})
0079 set(RAQM_VERSION ${libraqm_VERSION})
0080 configure_file(${libraqm_src_SOURCE_DIR}/src/raqm-version.h.in ${CMAKE_CURRENT_BINARY_DIR}/raqm-version.h @ONLY)
0081 
0082 set(libraqm_SRC
0083     ${libraqm_src_SOURCE_DIR}/src/raqm.c
0084     ${libraqm_src_SOURCE_DIR}/src/raqm.h
0085 )
0086 
0087 add_library(libraqm STATIC ${libraqm_SRC})
0088 set_property(TARGET libraqm PROPERTY C_STANDARD 99)
0089 
0090 target_include_directories(libraqm INTERFACE ${libraqm_src_SOURCE_DIR}/src)
0091 target_include_directories(libraqm PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
0092 
0093 target_link_libraries(libraqm
0094     PUBLIC
0095         Freetype::Freetype
0096     PRIVATE
0097         HarfBuzz::HarfBuzz
0098         FriBidi::FriBidi
0099 )
0100 
0101 add_library(Raqm::Raqm ALIAS libraqm)