build: support building with system utf8cpp (#8191)

This commit is contained in:
Yat Ho
2026-01-29 05:33:50 +08:00
committed by GitHub
parent 7559f7ffca
commit e687db8f26
5 changed files with 57 additions and 7 deletions

View File

@@ -58,7 +58,8 @@ runs:
libnatpmp-devel \
libpsl-devel \
miniupnpc-devel \
openssl-devel
openssl-devel \
utf8cpp-devel
# Compiler packages
if [[ "${{ inputs.compiler }}" == "clang" ]]; then
@@ -118,6 +119,13 @@ runs:
BASE_PACKAGES+=(libgtest-dev)
fi
if [ ! "$DISTRO" = 'debian' ] || [ ! "$DISTRO_VERSION" = '11' ]; then
BASE_PACKAGES+=(
libfmt-dev
libutfcpp-dev
)
fi
# Compiler packages
if [[ "${{ inputs.compiler }}" == "clang" ]]; then
BASE_PACKAGES+=(clang)
@@ -213,6 +221,7 @@ runs:
libnatpmp
libpsl
miniupnpc
utf8cpp
)
brew install --formulae "${BASE_PACKAGES[@]}"

View File

@@ -464,6 +464,7 @@ jobs:
ninja \
npm \
pkgconfig \
utfcpp \
xz
- name: Get Dependencies (GTK)
if: ${{ needs.what-to-make.outputs.make-gtk == 'true' }}
@@ -777,6 +778,7 @@ jobs:
-DUSE_SYSTEM_DHT=OFF `# Not packaged in Debian 11` \
-DUSE_SYSTEM_FMT=OFF `# Debian 11 package too old` \
-DUSE_SYSTEM_SMALL=OFF `# Not packaged in Debian 11` \
-DUSE_SYSTEM_UTF8CPP=OFF `# Debian 11 package too old` \
-DUSE_SYSTEM_UTP=OFF `# Not packaged in Debian 11` \
-DUSE_SYSTEM_WIDE_INTEGER=OFF `# Not packaged in Debian 11`
- name: Build

View File

@@ -57,6 +57,9 @@ set(NPM_MINIMUM 10.2.3) # Node.js 20.10 (eslint-plugin-unicorn)
set(PSL_MINIMUM 0.21.0)
set(QT_MINIMUM 5.15)
set(SMALL_MINIMUM 0.2.2)
# utf8cpp v4's version file is configured with `COMPATIBILITY SameMajorVersion`
# and does not support version range.
# set(UTF8CPP_MINIMUM 3.1...4)
option(ENABLE_DAEMON "Build daemon" ON)
tr_auto_option(ENABLE_GTK "Build GTK client" AUTO)
@@ -82,6 +85,7 @@ tr_auto_option(USE_SYSTEM_FMT "Use system fmt library" ${USE_SYSTEM_DEFAULT})
tr_auto_option(USE_SYSTEM_MINIUPNPC "Use system miniupnpc library" ${USE_SYSTEM_DEFAULT})
tr_auto_option(USE_SYSTEM_NATPMP "Use system natpmp library" ${USE_SYSTEM_DEFAULT})
tr_auto_option(USE_SYSTEM_SMALL "Use system small library" ${USE_SYSTEM_DEFAULT})
tr_auto_option(USE_SYSTEM_UTF8CPP "Use system uft8cpp library" ${USE_SYSTEM_DEFAULT})
tr_auto_option(USE_SYSTEM_UTP "Use system utp library" ${USE_SYSTEM_DEFAULT})
tr_auto_option(USE_SYSTEM_WIDE_INTEGER "Use system WideInteger library" ${USE_SYSTEM_DEFAULT})
tr_auto_option(USE_SYSTEM_B64 "Use system b64 library" ${USE_SYSTEM_DEFAULT})
@@ -251,7 +255,6 @@ set(SOURCE_ICONS_DIR "${PROJECT_SOURCE_DIR}/icons")
find_package(FastFloat)
find_package(RapidJSON)
find_package(UtfCpp)
find_package(Threads)
find_package(PkgConfig QUIET)
@@ -610,6 +613,13 @@ target_compile_definitions(transmission::small
INTERFACE
SMALL_DISABLE_EXCEPTIONS=1)
tr_add_external_auto_library(UTF8CPP utf8cpp
SUBPROJECT
SOURCE_DIR utfcpp)
if (NOT TARGET utf8::cpp)
add_library(utf8::cpp ALIAS utf8cpp)
endif()
tr_add_external_auto_library(WIDE_INTEGER WideInteger
SUBPROJECT
SOURCE_DIR wide-integer)

View File

@@ -1,5 +0,0 @@
add_library(utf8::cpp INTERFACE IMPORTED)
target_include_directories(utf8::cpp
INTERFACE
${TR_THIRD_PARTY_SOURCE_DIR}/utfcpp/source)

34
cmake/Findutf8cpp.cmake Normal file
View File

@@ -0,0 +1,34 @@
find_package(${CMAKE_FIND_PACKAGE_NAME} QUIET NO_MODULE)
include(FindPackageHandleStandardArgs)
if(${CMAKE_FIND_PACKAGE_NAME}_FOUND)
if(${CMAKE_FIND_PACKAGE_NAME}_VERSION VERSION_LESS 4.0.0)
# Before 4.0.0, some compiler options from their tests leaked into the
# main target. We workaround by clearing them here.
set_property(TARGET utf8cpp PROPERTY INTERFACE_COMPILE_OPTIONS)
endif()
find_package_handle_standard_args(${CMAKE_FIND_PACKAGE_NAME} CONFIG_MODE)
return()
endif()
find_path(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR
NAMES utf8.h
PATH_SUFFIXES utf8cpp)
find_package_handle_standard_args(${CMAKE_FIND_PACKAGE_NAME}
REQUIRED_VARS ${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR)
if(${CMAKE_FIND_PACKAGE_NAME}_FOUND)
set(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIRS ${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR})
if(NOT TARGET utf8::cpp)
add_library(utf8::cpp INTERFACE IMPORTED)
target_include_directories(utf8::cpp
INTERFACE
${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR})
endif()
endif()
mark_as_advanced(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR)