Add install rules and CPack settings so cpack produces an installable .deb. Dependencies are derived with dpkg-shlibdeps, so they follow the binaries. The sherpa-onnx runtime the streaming backend needs is bundled because no distro package provides it. The fetch-models script now also locates its registry when installed system-wide. 增加 CPack 配置,可直接用 cpack 打出 deb:安装规则含桌面入口、应用图标、 模型注册表与下载脚本、用户文档;依赖由 dpkg-shlibdeps 自动推导;流式后端 需要的 sherpa-onnx 运行时(发行版无对应包)随包携带;fetch-models 脚本 装到系统后也能找到注册表。
119 lines
5.7 KiB
CMake
119 lines
5.7 KiB
CMake
# ---------------------------------------------------------------------------
|
||
# 安装规则与打包(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)
|