2024-05-03 20:14:27 +00:00
#### Various workarounds
2023-05-05 10:43:22 +00:00
if ( APPLE )
# old & new homebrew's include paths
target_include_directories ( ${ GOLDENDICT } PRIVATE /usr/local/include /opt/homebrew/include )
endif ( )
target_include_directories ( ${ GOLDENDICT } PRIVATE
$ { P R O J E C T _ S O U R C E _ D I R } / t h i r d p a r t y )
#### Special Platform supporting libraries
if ( LINUX OR BSD )
find_package ( X11 REQUIRED )
2024-01-25 05:59:13 +00:00
if ( X11_FOUND AND X11_Xtst_FOUND )
target_compile_definitions ( ${ GOLDENDICT } PUBLIC HAVE_X11 )
target_link_libraries ( ${ GOLDENDICT } PRIVATE ${ X11_LIBRARIES } ${ X11_Xtst_LIB } )
target_include_directories ( ${ GOLDENDICT } PRIVATE ${ X11_INCLUDE_DIR } ${ X11_Xtst_INCLUDE_PATH } )
else ( )
message ( FATAL_ERROR "Cannot find X11 and libXtst!" )
endif ( )
2023-05-05 10:43:22 +00:00
endif ( )
if ( APPLE )
find_library ( CARBON_LIBRARY Carbon REQUIRED )
target_link_libraries ( ${ GOLDENDICT } PRIVATE ${ CARBON_LIBRARY } )
endif ( )
##### Finding packages from package manager
find_package ( PkgConfig REQUIRED )
find_package ( ZLIB REQUIRED )
find_package ( BZip2 REQUIRED )
# Consider all PkgConfig dependencies as one
pkg_check_modules ( PKGCONFIG_DEPS IMPORTED_TARGET
h u n s p e l l
l z o 2
o p e n c c
v o r b i s # .ogg
v o r b i s f i l e
l i b l z m a
2024-03-20 03:08:17 +00:00
x a p i a n - c o r e
)
2023-05-05 10:43:22 +00:00
target_link_libraries ( ${ GOLDENDICT } PRIVATE
P k g C o n f i g : : P K G C O N F I G _ D E P S
B Z i p 2 : : B Z i p 2
2023-06-01 03:39:29 +00:00
Z L I B : : Z L I B
2024-01-25 07:59:45 +00:00
)
# On FreeBSD, there are two iconv, libc iconv & GNU libiconv.
# The system one is good enough, the following is a workaround to use libc iconv on freeBSD.
if ( BSD STREQUAL "FreeBSD" )
# Simply do nothing. libc includes iconv on freeBSD.
# LIBICONV_PLUG is a magic word to turn /usr/include/local/inconv.h, which belong to GNU libiconv, into normal iconv.h
# Same hack used by SDL https://github.com/libsdl-org/SDL/blob/d6ebbc2fa4abdbe0bd53d0ce8804a492ecb042b9/src/stdlib/SDL_iconv.c#L27-L28
target_compile_definitions ( ${ GOLDENDICT } PUBLIC LIBICONV_PLUG )
else ( )
find_package ( Iconv REQUIRED )
target_link_libraries ( ${ GOLDENDICT } PRIVATE Iconv::Iconv )
endif ( )
2023-05-05 10:43:22 +00:00
if ( WITH_FFMPEG_PLAYER )
pkg_check_modules ( FFMPEG REQUIRED IMPORTED_TARGET
l i b a v c o d e c
l i b a v f o r m a t
l i b a v u t i l
l i b s w r e s a m p l e
2024-03-20 03:08:17 +00:00
)
2023-05-05 10:43:22 +00:00
target_link_libraries ( ${ GOLDENDICT } PRIVATE PkgConfig::FFMPEG )
endif ( )
if ( WITH_EPWING_SUPPORT )
2023-06-01 03:39:29 +00:00
find_library ( EB_LIBRARY eb REQUIRED )
target_link_libraries ( ${ GOLDENDICT } PRIVATE ${ EB_LIBRARY } )
2023-05-05 10:43:22 +00:00
endif ( )
2023-06-01 03:39:29 +00:00
if ( WITH_ZIM )
2024-11-15 20:13:34 +00:00
if ( APPLE )
# ICU from homebrew is "key-only", we need to manually prioritize it -> see `brew info icu4c`
set ( ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/opt/icu4c@76/lib/pkgconfig:/opt/homebrew/opt/icu4c@76/lib/pkgconfig:/usr/local/opt/icu4c/lib/pkgconfig:/opt/homebrew/opt/icu4c/lib/pkgconfig" )
endif ( )
2023-06-01 03:39:29 +00:00
pkg_check_modules ( ZIM REQUIRED IMPORTED_TARGET libzim )
2023-05-27 04:12:16 +00:00
target_link_libraries ( ${ GOLDENDICT } PRIVATE PkgConfig::ZIM )
2024-11-15 20:13:34 +00:00
2024-09-10 09:52:23 +00:00
if ( APPLE )
2024-11-15 20:13:34 +00:00
# icu4c as transitive dependency of libzim may not be copied into app bundle, so we directly depends on it to assist macdeployqt
# Why such complexities: 1) System or XCode SDKS's icu exists 2) icu itself is depended by various stuffs and homebrew may need multiple versions of it
pkg_check_modules ( BREW_ICU REQUIRED IMPORTED_TARGET icu-i18n icu-uc )
target_link_libraries ( ${ GOLDENDICT } PUBLIC PkgConfig::BREW_ICU )
# Verify icu <-> zim matches
message ( "Zim include dirs -> ${ZIM_INCLUDE_DIRS}" )
message ( "Homebrew icu include dirs-> ${BREW_ICU_INCLUDE_DIRS}" )
list ( GET BREW_ICU_INCLUDE_DIRS 0 ONE_OF_BREW_ICU_INCLUDE_DIR )
if ( ONE_OF_BREW_ICU_INCLUDE_DIR IN_LIST ZIM_INCLUDE_DIRS )
message ( "ZIM OK!" )
else ( )
message ( FATAL_ERROR "!!!! ZIM <-> icu error -> check `brew info libzim` and `brew list libzim`" )
endif ( )
# TODO: get rid of these 💩, how?
2024-09-10 09:52:23 +00:00
endif ( )
2023-06-01 03:39:29 +00:00
endif ( )
if ( USE_SYSTEM_FMT )
find_package ( fmt )
target_link_libraries ( ${ GOLDENDICT } PRIVATE fmt::fmt )
endif ( )
if ( USE_SYSTEM_TOML )
find_package ( tomlplusplus )
target_link_libraries ( ${ GOLDENDICT } PRIVATE tomlplusplus::tomlplusplus )
2024-10-10 01:11:57 +00:00
endif ( )