diff --git a/build-deb-both.sh b/build-deb-both.sh new file mode 100755 index 0000000..1f6d99e --- /dev/null +++ b/build-deb-both.sh @@ -0,0 +1,91 @@ +#!/bin/bash + +# Spark Store - 构建 Qt5 和 Qt6 两个版本的 DEB 包 +# Build both Qt5 and Qt6 versions of DEB packages + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$SCRIPT_DIR" + +echo "=========================================" +echo "Spark Store - 双版本 DEB 构建" +echo "=========================================" +echo "" +echo "项目目录: $PROJECT_ROOT" +echo "" + +# 检查脚本存在 +if [ ! -f "$PROJECT_ROOT/build-deb-qt5.sh" ] || [ ! -f "$PROJECT_ROOT/build-deb-qt6.sh" ]; then + echo "错误: 构建脚本不存在" + exit 1 +fi + +# 检查 debian 目录存在 +if [ ! -d "$PROJECT_ROOT/debian" ]; then + echo "错误: debian 目录不存在" + exit 1 +fi + +# 构建 Qt5 +echo "================================" +echo "第一步:构建 Qt5 版本..." +echo "================================" +cd "$PROJECT_ROOT" +./build-deb-qt5.sh + +# 检查输出 +if ! ls ../*_qt5_amd64.deb 2>/dev/null | grep -q . ; then + echo "错误: Qt5 构建失败,未找到输出文件" + exit 1 +fi + +QT5_DEB=$(ls -t ../*_qt5_amd64.deb 2>/dev/null | head -1) +echo "✓ Qt5 版本已构建: $QT5_DEB" +echo "" + +# 清理构建文件以进行下一次构建 +echo "清理构建环境..." +cd "$PROJECT_ROOT" +rm -rf build-*/spark-update-tool build-*/src build-*/Makefile + +# 构建 Qt6 +echo "================================" +echo "第二步:构建 Qt6 版本..." +echo "================================" +cd "$PROJECT_ROOT" +./build-deb-qt6.sh + +# 检查输出 +if ! ls ../*_qt6_amd64.deb 2>/dev/null | grep -q . ; then + echo "错误: Qt6 构建失败,未找到输出文件" + exit 1 +fi + +QT6_DEB=$(ls -t ../*_qt6_amd64.deb 2>/dev/null | head -1) +echo "✓ Qt6 版本已构建: $QT6_DEB" +echo "" + +# 显示最终结果 +echo "=========================================" +echo "✓ 构建完成!" +echo "=========================================" +echo "" +echo "输出文件:" +ls -lh "$QT5_DEB" "$QT6_DEB" 2>/dev/null +echo "" + +# 显示版本信息 +echo "验证 Qt5 版本:" +dpkg -I "$QT5_DEB" | grep -E "Description:|Package:" | head -2 +echo "" + +echo "验证 Qt6 版本:" +dpkg -I "$QT6_DEB" | grep -E "Description:|Package:" | head -2 +echo "" + +echo "=========================================" +echo "安装选项:" +echo " Qt5: sudo apt install $QT5_DEB" +echo " Qt6: sudo apt install $QT6_DEB" +echo "=========================================" diff --git a/build-deb-qt5.sh b/build-deb-qt5.sh new file mode 100755 index 0000000..9933927 --- /dev/null +++ b/build-deb-qt5.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +# Spark Store - Qt5 DEB Package Builder +# 构建 Qt5 版本的 DEB 包 + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$SCRIPT_DIR" + +echo "=========================================" +echo "构建 Spark Store - Qt5 版本" +echo "=========================================" +echo "" + +# 检查 debian 目录是否存在 +if [ ! -d "$PROJECT_ROOT/debian" ]; then + echo "错误: $PROJECT_ROOT/debian 目录不存在" + exit 1 +fi + +# 检查必要的文件 +if [ ! -f "$PROJECT_ROOT/debian/control" ] || [ ! -f "$PROJECT_ROOT/debian/rules" ]; then + echo "错误: debian 目录中缺少必要的文件" + exit 1 +fi + +echo "使用 Qt5 构建..." +echo "Debian 配置目录: $PROJECT_ROOT/debian" +echo "" + +# 构建 DEB 包,传递 Qt 版本标志 +cd "$PROJECT_ROOT" +echo "开始构建..." +QT_VERSION=qt5 dpkg-buildpackage -us -uc -b + +BUILD_STATUS=$? + +if [ $BUILD_STATUS -eq 0 ]; then + echo "" + echo "=========================================" + echo "✓ Qt5 DEB 包构建成功!" + echo "=========================================" + + # 重命名 DEB 文件以包含 qt5 标识 + DEB_FILE=$(find "$PROJECT_ROOT/.." -maxdepth 1 -name "spark-store_*_$(dpkg-architecture -qDEB_BUILD_ARCH).deb" -type f -printf '%T@ %p\n' | sort -rn | head -1 | cut -d' ' -f2-) + if [ -n "$DEB_FILE" ] && [ -f "$DEB_FILE" ]; then + DEB_DIR=$(dirname "$DEB_FILE") + DEB_BASENAME=$(basename "$DEB_FILE") + DEB_NEW_NAME=$(echo "$DEB_BASENAME" | sed 's/_\([^_]*\)\.deb$/_qt5_\1.deb/') + DEB_NEW_PATH="$DEB_DIR/$DEB_NEW_NAME" + mv "$DEB_FILE" "$DEB_NEW_PATH" + echo "DEB 文件已重命名为: $DEB_NEW_NAME" + fi +else + echo "" + echo "=========================================" + echo "✗ Qt5 DEB 包构建失败" + echo "=========================================" + exit 1 +fi diff --git a/build-deb-qt6.sh b/build-deb-qt6.sh new file mode 100755 index 0000000..4928924 --- /dev/null +++ b/build-deb-qt6.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +# Spark Store - Qt6 DEB Package Builder +# 构建 Qt6 版本的 DEB 包 + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$SCRIPT_DIR" + +echo "=========================================" +echo "构建 Spark Store - Qt6 版本" +echo "=========================================" +echo "" + +# 检查 debian 目录是否存在 +if [ ! -d "$PROJECT_ROOT/debian" ]; then + echo "错误: $PROJECT_ROOT/debian 目录不存在" + exit 1 +fi + +# 检查必要的文件 +if [ ! -f "$PROJECT_ROOT/debian/control" ] || [ ! -f "$PROJECT_ROOT/debian/rules" ]; then + echo "错误: debian 目录中缺少必要的文件" + exit 1 +fi + +echo "使用 Qt6 构建..." +echo "Debian 配置目录: $PROJECT_ROOT/debian" +echo "" + +# 构建 DEB 包,传递 Qt 版本标志 +cd "$PROJECT_ROOT" +echo "开始构建..." +QT_VERSION=qt6 dpkg-buildpackage -us -uc -b + +BUILD_STATUS=$? + +if [ $BUILD_STATUS -eq 0 ]; then + echo "" + echo "=========================================" + echo "✓ Qt6 DEB 包构建成功!" + echo "=========================================" + + # 重命名 DEB 文件以包含 qt6 标识 + DEB_FILE=$(find "$PROJECT_ROOT/.." -maxdepth 1 -name "spark-store_*_$(dpkg-architecture -qDEB_BUILD_ARCH).deb" -type f -printf '%T@ %p\n' | sort -rn | head -1 | cut -d' ' -f2-) + if [ -n "$DEB_FILE" ] && [ -f "$DEB_FILE" ]; then + DEB_DIR=$(dirname "$DEB_FILE") + DEB_BASENAME=$(basename "$DEB_FILE") + DEB_NEW_NAME=$(echo "$DEB_BASENAME" | sed 's/_\([^_]*\)\.deb$/_qt6_\1.deb/') + DEB_NEW_PATH="$DEB_DIR/$DEB_NEW_NAME" + mv "$DEB_FILE" "$DEB_NEW_PATH" + echo "DEB 文件已重命名为: $DEB_NEW_NAME" + fi +else + echo "" + echo "=========================================" + echo "✗ Qt6 DEB 包构建失败" + echo "=========================================" + exit 1 +fi diff --git a/debian/control b/debian/control index 42bc4dc..4f7a9f7 100644 --- a/debian/control +++ b/debian/control @@ -5,14 +5,14 @@ Priority: optional Build-Depends: debhelper (>= 9), pkg-config, - qtchooser (>= 55-gc9562a1-1~) | qt5-default, - qtbase5-dev | qtbase6-dev, + qtchooser (>= 55-gc9562a1-1~) | qt5-default | qt6-base-dev, + qtbase5-dev | qt6-base-dev, libqt5svg5-dev | libqt6svg6-dev, qttools5-dev-tools | qt6-tools-dev, qtwebengine5-dev | qt6-webengine-dev, - libdtkcore-dev (>= 5.0), - libdtkgui-dev (>= 5.0), - libdtkwidget-dev (>= 5.0) + libdtkcore-dev (>= 5.0) | libdtk6core-dev (>= 6.0), + libdtkgui-dev (>= 5.0) | libdtk6gui-dev (>= 6.0), + libdtkwidget-dev (>= 5.0) | libdtk6widget-dev (>= 6.0) Standards-Version: 4.1.7 Homepage: https://www.spark-app.store/ @@ -20,6 +20,9 @@ Package: spark-store Architecture: any Provides: spark-store-console-in-container Depends: ${shlibs:Depends}, ${misc:Depends}, + libdtkcore5 (>= 5.0) | libdtk6core (>= 6.0), + libdtkgui5 (>= 5.0) | libdtk6gui (>= 6.0), + libdtkwidget5 (>= 5.0) | libdtk6widget (>= 6.0), dde-qt5integration | dde-qt6integration, curl, openssl, @@ -28,9 +31,10 @@ Depends: ${shlibs:Depends}, ${misc:Depends}, zenity, policykit-1 | pkexec, libnotify-bin, - qtwayland5, + qtwayland5 | qt6-wayland, desktop-file-utils, dpkg-dev, lsb-release, Description: Spark Store A community powered app store, based on DTK. + Supports both Qt5 and Qt6 versions. diff --git a/debian/debhelper-build-stamp b/debian/debhelper-build-stamp new file mode 100644 index 0000000..3a2977f --- /dev/null +++ b/debian/debhelper-build-stamp @@ -0,0 +1 @@ +spark-store diff --git a/debian/rules b/debian/rules index 2922145..472641a 100755 --- a/debian/rules +++ b/debian/rules @@ -1,6 +1,18 @@ #!/usr/bin/make -f -export QT_SELECT = qt5 +# Determine Qt version based on QT_VERSION environment variable +# Default to Qt5 if not specified +# Usage: QT_VERSION=qt6 dpkg-buildpackage -us -uc -b +QT_VERSION ?= qt5 + +ifeq ($(QT_VERSION),qt6) + export QT_SELECT = qt6 + QMAKE_CMD = qmake6 +else + export QT_SELECT = qt5 + QMAKE_CMD = qmake +endif + export DEB_BUILD_MAINT_OPTIONS = hardening=+all include /usr/share/dpkg/default.mk @@ -22,7 +34,7 @@ override_dh_auto_clean: override_dh_auto_configure: mkdir -p $(CURDIR)/build-$(DEB_HOST_MULTIARCH) - qmake BUILD_VERSION=$(DEB_VERSION_UPSTREAM) spark-store-project.pro \ + $(QMAKE_CMD) BUILD_VERSION=$(DEB_VERSION_UPSTREAM) spark-store-project.pro \ -spec linux-g++ CONFIG+=force_debug_info \ -o $(CURDIR)/build-$(DEB_HOST_MULTIARCH)/ @@ -34,8 +46,8 @@ override_dh_auto_install: INSTALL_ROOT=$(CURDIR)/debian/spark-store # Ignore the dpkg-shlibdeps: warning (it uses none of the library's symbols) -# Qt Mutidedia lib will ref to network libraray. +# Qt Multimedia lib will ref to network library. override_dh_shlibdeps: dh_shlibdeps --dpkg-shlibdeps-params=--warnings=0 --exclude=opt/durapps/spark-store/bin/ss-feedback/ override_dh_strip: - dh_strip --exclude=opt/durapps/spark-store/bin/ss-feedback/ \ No newline at end of file + dh_strip --exclude=opt/durapps/spark-store/bin/ss-feedback/ diff --git a/verify-debian-merge.sh b/verify-debian-merge.sh new file mode 100755 index 0000000..32e18bc --- /dev/null +++ b/verify-debian-merge.sh @@ -0,0 +1,93 @@ +#!/bin/bash + +# Debian 合并后的验证脚本 +# Verification script for merged Debian configuration + +echo "=========================================" +echo "Spark Store - Debian 配置验证" +echo "=========================================" +echo "" + +# 检查文件存在 +echo "[1/4] 检查文件结构..." +if [ ! -d "debian" ]; then + echo " ✗ debian 目录不存在" + exit 1 +fi + +if [ ! -f "debian/control" ]; then + echo " ✗ debian/control 不存在" + exit 1 +fi + +if [ ! -f "debian/rules" ]; then + echo " ✗ debian/rules 不存在" + exit 1 +fi + +echo " ✓ 文件结构完整" +echo "" + +# 检查是否有旧目录残留 +echo "[2/4] 检查是否清理了冗余目录..." +if [ -d "debian-qt5" ] || [ -d "debian-qt6" ]; then + echo " ⚠ 警告: 仍然存在 debian-qt5 或 debian-qt6 目录" +else + echo " ✓ 已清理冗余目录" +fi + +if [ -f "debian-qt5-qt6-backup.tar.gz" ]; then + echo " ✓ 已创建备份: debian-qt5-qt6-backup.tar.gz" +fi +echo "" + +# 检查 control 文件支持两个版本 +echo "[3/4] 检查 debian/control 的版本支持..." +if grep -q "qt5-default | qt6-base-dev" debian/control; then + echo " ✓ control 文件支持 Qt5 和 Qt6 选择" +else + echo " ⚠ control 文件可能未正确配置" +fi + +if grep -q "libdtk6core-dev" debian/control && grep -q "libdtk6core[^-]" debian/control; then + echo " ✓ control 文件包含 Qt6 DTK 依赖" +else + echo " ⚠ control 文件可能缺少 Qt6 DTK 依赖" +fi +echo "" + +# 检查 rules 文件支持版本切换 +echo "[4/4] 检查 debian/rules 的版本切换支持..." +if grep -q "QT_VERSION ?= qt5" debian/rules; then + echo " ✓ rules 文件支持 QT_VERSION 变量(默认 qt5)" +else + echo " ✗ rules 文件缺少 QT_VERSION 变量定义" + exit 1 +fi + +if grep -q "ifeq.*QT_VERSION.*qt6" debian/rules; then + echo " ✓ rules 文件支持 qt6 条件配置" +else + echo " ⚠ rules 文件可能缺少 qt6 条件" +fi + +if grep -q "QMAKE_CMD = qmake6" debian/rules; then + echo " ✓ rules 文件支持 qmake6 选择" +else + echo " ⚠ rules 文件可能缺少 qmake6 支持" +fi +echo "" + +# 最终结果 +echo "=========================================" +echo "✓ 验证完成!Debian 配置已正确合并" +echo "=========================================" +echo "" +echo "使用方法:" +echo " 构建 Qt5: ./build-deb-qt5.sh" +echo " 构建 Qt6: ./build-deb-qt6.sh" +echo " 构建两个版本: ./build-deb-both.sh" +echo "" +echo "或手动指定版本:" +echo " QT_VERSION=qt5 dpkg-buildpackage -us -uc -b" +echo " QT_VERSION=qt6 dpkg-buildpackage -us -uc -b"