Files

118 lines
5.7 KiB
CMake
Raw Permalink Normal View History

# ---------------------------------------------------------------------------
# 安装规则与打包(CPack → .deb)
#
# cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
# cmake --build build -j
# cpack --config build/CPackConfig.cmake # 产 deb
# cpack --config build/CPackConfig.cmake -G DEB # 只产 deb 更明确
#
# 产物:build/live-caption_<版本>-<修订>_<架构>.deb
# dpkg -c <deb> # 看文件清单
# dpkg -I <deb> # 看控制信息 / 依赖
# sudo apt install ./<deb>
#
# 说明与取舍见 docs/packaging.md。
# ---------------------------------------------------------------------------
include(GNUInstallDirs)
option(LC_INSTALL "生成安装与打包规则" ON)
option(LC_BUNDLE_SHERPA "把 sherpa-onnx 运行时打进包里(流式后端依赖它,而发行版没有对应包)" ON)
option(LC_PACKAGE_STRIP "打包时 strip 二进制(发布建议打开;要用 coredump 调试符号就关掉)" OFF)
if(NOT LC_INSTALL)
return()
endif()
# 包私有库目录。Debian 允许包把自己的私有共享库放在 /usr/lib/<包名>/,
# 这样不必占用 multiarch 目录,也避免和系统库撞名。
# 顶层 CMakeLists.txt 里已经定义(RPATH 要用),这里只是兜底。
if(NOT DEFINED LC_PRIVATE_LIBDIR)
set(LC_PRIVATE_LIBDIR "lib/live-caption")
endif()
# ---------------------------------------------------------------------------
# 安装规则
# ---------------------------------------------------------------------------
install(TARGETS live-caption live-caption-cli
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
# 桌面入口与图标(GUI 才会出现在应用菜单里;CLI 无入口)
install(FILES data/live-caption.desktop
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
install(FILES data/live-caption.svg
DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps)
# 模型注册表与下载脚本。注意:程序自己也把注册表编进了二进制(qt_add_resources),
# 这里装一份是为了让脚本在没有程序的情况下也能用。
install(FILES data/models.json
DESTINATION ${CMAKE_INSTALL_DATADIR}/live-caption)
install(PROGRAMS scripts/fetch-models.sh
DESTINATION ${CMAKE_INSTALL_BINDIR}
RENAME live-caption-fetch-models)
# sherpa-onnx 运行时:官方只发预编译 tar 包,没有系统包可依赖,
# 所以默认随包携带(约 32MB)。关掉的话流式 ONNX 后端在安装后的机器上会起不来。
if(LC_HAS_SHERPA AND LC_BUNDLE_SHERPA)
install(FILES ${LC_SHERPA_C_API} ${LC_SHERPA_ORT}
DESTINATION ${LC_PRIVATE_LIBDIR})
message(STATUS "打包: sherpa-onnx 运行时会随包安装到 /usr/${LC_PRIVATE_LIBDIR}")
endif()
# 文档
install(FILES README.md DESTINATION ${CMAKE_INSTALL_DOCDIR})
install(FILES docs/gui.md docs/cli.md docs/asr-backends.md docs/troubleshooting.md
DESTINATION ${CMAKE_INSTALL_DOCDIR}/docs)
# ---------------------------------------------------------------------------
# CPack
# ---------------------------------------------------------------------------
set(CPACK_GENERATOR "DEB")
set(CPACK_PACKAGE_NAME "live-caption")
set(CPACK_PACKAGE_VENDOR "live-caption")
set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
"系统播放音频的实时字幕(类似 Chrome 实时字幕)")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "live-caption")
set(CPACK_PACKAGING_INSTALL_PREFIX "/usr")
set(CPACK_STRIP_FILES ${LC_PACKAGE_STRIP})
# 维护者信息:发布前用 -DLC_DEB_MAINTAINER="名字 <邮箱>" 覆盖(Debian 要求可联系到人)
set(LC_DEB_MAINTAINER "live-caption maintainers <live-caption@example.com>"
CACHE STRING "Debian Maintainer 字段")
set(LC_DEB_HOMEPAGE "" CACHE STRING "Debian Homepage 字段(留空则不写)")
set(CPACK_PACKAGE_CONTACT "${LC_DEB_MAINTAINER}")
# Debian 控制字段
set(CPACK_DEBIAN_PACKAGE_NAME "live-caption")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${LC_DEB_MAINTAINER}")
set(CPACK_DEBIAN_PACKAGE_SECTION "utils")
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
set(CPACK_DEBIAN_PACKAGE_RELEASE "1") # Debian 修订号
set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") # live-caption_0.1.0-1_amd64.deb
if(NOT LC_DEB_HOMEPAGE STREQUAL "")
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "${LC_DEB_HOMEPAGE}")
endif()
# 维护者脚本:刷新应用菜单与图标缓存(见 data/deb/)
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
"${CMAKE_CURRENT_SOURCE_DIR}/data/deb/postinst;${CMAKE_CURRENT_SOURCE_DIR}/data/deb/postrm")
# 依赖由 dpkg-shlibdeps 从二进制里推出来(libllama0 / libpulse0 / libsamplerate0 /
# Qt6 各库…),比手写列表可靠。包内自带的 sherpa 库(RPATH 指向 $ORIGIN/../lib/
# live-caption)会被识别为私有库,不会变成外部依赖。
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
# 需要手动补依赖时,用 -DLC_DEB_EXTRA_DEPENDS=... 追加(逗号分隔;给了就覆盖自动结果)
set(LC_DEB_EXTRA_DEPENDS "" CACHE STRING "额外写入 Depends 的包(逗号分隔)")
if(NOT LC_DEB_EXTRA_DEPENDS STREQUAL "")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "${LC_DEB_EXTRA_DEPENDS}")
endif()
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION
"实时字幕:采集系统播放声音的输出(monitor),把语音实时转写成字幕并叠加显示。
.
两条推理后端:llama.cpp(Qwen3-ASR 的 GGUF 模型,准确率高、语言最全)与
sherpa-onnx(流式 ONNX 模型,原生流式、CPU 占用低)。模型不随包分发,
首次启动时在设置界面里按需下载(支持镜像与代理断点续传)。")
include(CPack)