Files
nixpkgs/pkgs/by-name/pi/piper-tts/cmake-system-libs.patch
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

204 lines
6.7 KiB
Diff

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2db7493..675c64b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,93 +4,133 @@
cmake_minimum_required(VERSION 3.26)
project(piper LANGUAGES C CXX)
+set(UCD_STATIC_LIB "" CACHE FILEPATH "Path to libucd.a if built with system espeak-ng")
+
include(ExternalProject)
# scikit-build-core will forward Python_* variables
find_package(Python COMPONENTS Development.Module Development.SABIModule REQUIRED)
-# Install location for espeak-ng
-set(ESPEAKNG_BUILD_DIR ${CMAKE_BINARY_DIR}/espeak_ng)
-set(ESPEAKNG_INSTALL_DIR ${CMAKE_BINARY_DIR}/espeak_ng-install)
+# Try to find espeak-ng using pkg-config, if available
+find_package(PkgConfig QUIET)
-if(WIN32)
- # Special handling for Windows
- set(ESPEAKNG_STATIC_LIB ${ESPEAKNG_INSTALL_DIR}/lib/espeak-ng.lib)
- set(UCD_STATIC_LIB ${ESPEAKNG_BUILD_DIR}/src/espeak_ng_external-build/src/ucd-tools/ucd.lib)
-else()
- set(ESPEAKNG_STATIC_LIB ${ESPEAKNG_INSTALL_DIR}/lib/libespeak-ng.a)
- set(UCD_STATIC_LIB ${ESPEAKNG_BUILD_DIR}/src/espeak_ng_external-build/src/ucd-tools/libucd.a)
+if (PKG_CONFIG_FOUND)
+ pkg_check_modules(ESPEAKNG QUIET espeak-ng)
endif()
-ExternalProject_Add(espeak_ng_external
- GIT_REPOSITORY https://github.com/espeak-ng/espeak-ng.git
- GIT_TAG 212928b394a96e8fd2096616bfd54e17845c48f6 # 2025-Mar-22
- PREFIX ${ESPEAKNG_BUILD_DIR}
- CMAKE_ARGS
- -DCMAKE_INSTALL_PREFIX=${ESPEAKNG_INSTALL_DIR}
- -DBUILD_SHARED_LIBS:BOOL=OFF
- -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
- -DUSE_ASYNC:BOOL=OFF
- -DUSE_MBROLA:BOOL=OFF
- -DUSE_LIBSONIC:BOOL=OFF
- -DUSE_LIBPCAUDIO:BOOL=OFF
- -DUSE_KLATT:BOOL=OFF
- -DUSE_SPEECHPLAYER:BOOL=OFF
- -DEXTRA_cmn:BOOL=ON
- -DEXTRA_ru:BOOL=ON
- # Need to explicitly add ucd include directory for CI
- "-DCMAKE_C_FLAGS=-D_FILE_OFFSET_BITS=64 -I${ESPEAKNG_BUILD_DIR}/src/espeak_ng_external/src/ucd-tools/src/include"
- BUILD_BYPRODUCTS
- ${ESPEAKNG_STATIC_LIB}
- ${UCD_STATIC_LIB}
- UPDATE_DISCONNECTED TRUE
-)
-
-include_directories(
- ${ESPEAKNG_INSTALL_DIR}/include
-)
-
# espeak bridge
add_library(espeakbridge MODULE
src/piper/espeakbridge.c
)
-add_dependencies(espeakbridge espeak_ng_external)
-target_link_libraries(espeakbridge
- ${ESPEAKNG_STATIC_LIB}
- ${UCD_STATIC_LIB}
+# scikit-build-core forwards this
+target_link_libraries(espeakbridge PRIVATE
Python::SABIModule
)
-target_include_directories(espeakbridge PRIVATE
- ${ESPEAKNG_INSTALL_DIR}/include
-)
-if(WIN32)
- # Fix dll thunk issue (__imp_SYMBOL not found)
- target_compile_definitions(espeakbridge PRIVATE LIBESPEAK_NG_EXPORT)
- # Fix .dll suffix
+if (ESPEAKNG_FOUND)
+ message(STATUS "Found system espeak-ng via pkg-config")
+
+ target_include_directories(espeakbridge PRIVATE
+ ${ESPEAKNG_INCLUDE_DIRS}
+ )
+ target_link_directories(espeakbridge PRIVATE
+ ${ESPEAKNG_LIBRARY_DIRS}
+ )
+ target_link_libraries(espeakbridge PRIVATE
+ ${ESPEAKNG_LIBRARIES}
+ ${UCD_STATIC_LIB}
+ )
+
set_target_properties(espeakbridge PROPERTIES
PREFIX ""
- SUFFIX ".pyd"
)
+
+ install(TARGETS espeakbridge
+ LIBRARY DESTINATION .
+ RUNTIME DESTINATION .
+ )
+
else()
- set_target_properties(espeakbridge PROPERTIES
- PREFIX ""
+ # Install location for espeak-ng
+ set(ESPEAKNG_BUILD_DIR ${CMAKE_BINARY_DIR}/espeak_ng)
+ set(ESPEAKNG_INSTALL_DIR ${CMAKE_BINARY_DIR}/espeak_ng-install)
+
+ if(WIN32)
+ # Special handling for Windows
+ set(ESPEAKNG_STATIC_LIB ${ESPEAKNG_INSTALL_DIR}/lib/espeak-ng.lib)
+ set(UCD_STATIC_LIB ${ESPEAKNG_BUILD_DIR}/src/espeak_ng_external-build/src/ucd-tools/ucd.lib)
+ else()
+ set(ESPEAKNG_STATIC_LIB ${ESPEAKNG_INSTALL_DIR}/lib/libespeak-ng.a)
+ set(UCD_STATIC_LIB ${ESPEAKNG_BUILD_DIR}/src/espeak_ng_external-build/src/ucd-tools/libucd.a)
+ endif()
+
+ ExternalProject_Add(espeak_ng_external
+ GIT_REPOSITORY https://github.com/espeak-ng/espeak-ng.git
+ GIT_TAG 212928b394a96e8fd2096616bfd54e17845c48f6 # 2025-Mar-22
+ PREFIX ${ESPEAKNG_BUILD_DIR}
+ CMAKE_ARGS
+ -DCMAKE_INSTALL_PREFIX=${ESPEAKNG_INSTALL_DIR}
+ -DBUILD_SHARED_LIBS:BOOL=OFF
+ -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
+ -DUSE_ASYNC:BOOL=OFF
+ -DUSE_MBROLA:BOOL=OFF
+ -DUSE_LIBSONIC:BOOL=OFF
+ -DUSE_LIBPCAUDIO:BOOL=OFF
+ -DUSE_KLATT:BOOL=OFF
+ -DUSE_SPEECHPLAYER:BOOL=OFF
+ -DEXTRA_cmn:BOOL=ON
+ -DEXTRA_ru:BOOL=ON
+ # Need to explicitly add ucd include directory for CI
+ "-DCMAKE_C_FLAGS=-D_FILE_OFFSET_BITS=64 -I${ESPEAKNG_BUILD_DIR}/src/espeak_ng_external/src/ucd-tools/src/include"
+ BUILD_BYPRODUCTS
+ ${ESPEAKNG_STATIC_LIB}
+ ${UCD_STATIC_LIB}
+ UPDATE_DISCONNECTED TRUE
)
-endif()
-install(TARGETS espeakbridge
- LIBRARY DESTINATION .
- RUNTIME DESTINATION .
-)
+ include_directories(
+ ${ESPEAKNG_INSTALL_DIR}/include
+ )
+
+ add_dependencies(espeakbridge espeak_ng_external)
+ target_link_libraries(espeakbridge
+ ${ESPEAKNG_STATIC_LIB}
+ ${UCD_STATIC_LIB}
+ Python::SABIModule
+ )
+ target_include_directories(espeakbridge PRIVATE
+ ${ESPEAKNG_INSTALL_DIR}/include
+ )
-# Copy espeak-ng-data
-set(DATA_SRC ${CMAKE_BINARY_DIR}/espeak_ng-install/share/espeak-ng-data)
-set(DATA_DST ${CMAKE_CURRENT_SOURCE_DIR}/src/piper/espeak-ng-data)
+ if(WIN32)
+ # Fix dll thunk issue (__imp_SYMBOL not found)
+ target_compile_definitions(espeakbridge PRIVATE LIBESPEAK_NG_EXPORT)
-add_custom_target(copy_espeak_ng_data ALL
- COMMAND ${CMAKE_COMMAND} -E copy_directory ${DATA_SRC} ${DATA_DST}
- DEPENDS espeak_ng_external
- COMMENT "Copying espeak-ng-data after espeak-ng external project builds"
-)
+ # Fix .dll suffix
+ set_target_properties(espeakbridge PROPERTIES
+ PREFIX ""
+ SUFFIX ".pyd"
+ )
+ else()
+ set_target_properties(espeakbridge PROPERTIES
+ PREFIX ""
+ )
+ endif()
+
+ install(TARGETS espeakbridge
+ LIBRARY DESTINATION .
+ RUNTIME DESTINATION .
+ )
+
+ # Copy espeak-ng-data
+ set(DATA_SRC ${CMAKE_BINARY_DIR}/espeak_ng-install/share/espeak-ng-data)
+ set(DATA_DST ${CMAKE_CURRENT_SOURCE_DIR}/src/piper/espeak-ng-data)
+
+ add_custom_target(copy_espeak_ng_data ALL
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${DATA_SRC} ${DATA_DST}
+ DEPENDS espeak_ng_external
+ COMMENT "Copying espeak-ng-data after espeak-ng external project builds"
+ )
+endif()