Files
blumia 8b9a8c420e chore(pack): add CPack configuration to build a deb package
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 脚本
装到系统后也能找到注册表。
2026-10-13 11:53:07 +08:00

119 lines
5.7 KiB
CMake
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ---------------------------------------------------------------------------
# 安装规则与打包(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)