diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1961630..c178e45 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -30,8 +30,8 @@ install(DIRECTORY src/sakuraassistant/pkg/usr
DESTINATION "/")
# deb 构建支持
-find_package(DebPackage PATHS ${CMAKE_SOURCE_DIR})
-add_package_descript(cmake/package-deb.descript)
+find_package(SparkDebPackage PATHS ${CMAKE_SOURCE_DIR})
+add_package_descript(cmake/spark-deb-package.descript)
# 预留,Appimage 构建支持
diff --git a/cmake/SparkAppimageConfig.cmake b/cmake/SparkAppimageConfig.cmake
index 40649f8..9a25121 100644
--- a/cmake/SparkAppimageConfig.cmake
+++ b/cmake/SparkAppimageConfig.cmake
@@ -24,41 +24,60 @@
# default.desktop 文件与 default.png 文件的生成。
# 这是一个依赖的 copy-desktop-appimage 目标,并先行执行
-# if ()
-set(APPIMAGE_OUTPUT "${CMAKE_BINARY_DIR}/appimage")
-set(APPIMAGE_ICON "${APPIMAGE_OUTPUT}/default.png")
-set(APPIMAGE_DESTKOP "${APPIMAGE_OUTPUT}/default.desktop")
-# set(LINUXDEPLOYQT)
-# set(APPIMAGETOOL)
-
-function(execute_linuxdeploy _PATH)
- execute_process(COMMAND ${LINUXDEPLOYQT}
- WORKING_DIRECTORY "${APPIMAGE_OUTPUT}"
- )
-endfunction(execute_linuxdeploy _PATH)
+# 要求:
+ # LINUXDEPLOYQT 提供的外部参数,一般指 linuxdeployqt 程序路径
+ # APPIMAGETOOL 提供的外部参数,一般指 appimagetool 程序路径
+
+option(USE_APPIMAGE_NEW_GLIBC "允许在打包过程中使用较新版本的 glibc 库" ON)
+
+set(APPIMAGE_OUTPUT "${CMAKE_BINARY_DIR}/appimage")
+set(APPIMAGE_OUTPUT_ICON "${APPIMAGE_OUTPUT}/default.png")
+set(APPIMAGE_OUTPUT_DESTKOP "${APPIMAGE_OUTPUT}/default.desktop")
+
+# 1. 添加一个可以用于 Appimage 使用的图标文件
+function(add_appimage_icon _icon)
+ if(CMAKE_VERSION VERSION_LESS 3.21)
+ message("> cmake version is less than 3.21")
+ configure_file(${_icon} ${APPIMAGE_OUTPUT_ICON} COPYONLY)
+ else()
+ file(MAKE_DIRECTORY ${APPIMAGE_OUTPUT})
+ file(COPY_FILE ${_icon} ${APPIMAGE_OUTPUT_ICON})
+ endif(CMAKE_VERSION VERSION_LESS 3.21)
+endfunction(add_appimage_icon _icon)
+
+# 2. 基于 SparkDesktopMacros.cmake 提供的宏来定义 desktop 内容说明
+ # 使用与自身的 desktop.in 模板进行生成
+function(add_appimage_desktop)
+ configure_file(cmake/spark-appimage.desktop.in
+ ${APPIMAGE_OUTPUT_DESTKOP} @ONLY)
+endfunction(add_appimage_desktop)
function(target_linuxdeploy)
- add_custom_target(linuxdeploy pwd
- BYPRODUCTS appimage
- COMMAND cp ../${PROJECT_NAME} .
- COMMAND "${LINUXDEPLOYQT}" ${PROJECT_NAME} -appimage -unsupported-allow-new-glibc -verbose=3 -no-strip|| true
- COMMAND cp ../spark-appimage.desktop default.desktop
- COMMAND cp ../spark-appimage.png default.png
- WORKING_DIRECTORY "${APPIMAGE_OUTPUT}")
+
+ if(USE_APPIMAGE_NEW_GLIBC)
+ message("Use New glibc")
+ add_custom_target(linuxdeploy pwd
+ BYPRODUCTS appimage
+ COMMAND "${LINUXDEPLOYQT}" ${PROJECT_NAME} -appimage -unsupported-allow-new-glibc -verbose=3 -no-strip|| true
+ WORKING_DIRECTORY "${APPIMAGE_OUTPUT}")
+ else()
+ message("Un Use New glibc")
+ add_custom_target(linuxdeploy pwd
+ BYPRODUCTS appimage
+ COMMAND "${LINUXDEPLOYQT}" ${PROJECT_NAME} -appimage -verbose=3 -no-strip|| true
+ WORKING_DIRECTORY "${APPIMAGE_OUTPUT}")
+ endif(USE_APPIMAGE_NEW_GLIBC)
+
endfunction(target_linuxdeploy)
function(target_appimage)
- add_custom_target(copy-desktop-appimage
- COMMAND cp ../spark-appimage.desktop default.desktop
- COMMAND cp ../spark-appimage.png default.png
- WORKING_DIRECTORY "${APPIMAGE_OUTPUT}")
add_custom_target(appimage pwd
COMMAND ${APPIMAGETOOL} ${APPIMAGE_OUTPUT}
- WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
- DEPENDS copy-desktop-appimage)
+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
endfunction(target_appimage)
-function(add_appimage)
+# 3. 添加对目标的 Appimage 构建,Appimage 在一个项目中只能构建一个目标
+function(add_appimage_target _target)
# check linuxdeploy
if(NOT DEFINED LINUXDEPLOYQT)
message("AppImage> Not Found LINUXDEPLOYQT Variable!")
@@ -84,40 +103,46 @@ function(add_appimage)
else()
file(REAL_PATH ${APPIMAGETOOL} APPIMAGETOOL_REAL_PATH)
endif(CMAKE_VERSION VERSION_LESS 3.19 AND NOT EXISTS ${LINUXDEPLOYQT})
- message("AppImage> Found APPIMAGETOOL Variable: ${LINUXDEPLOYQT_REAL_PATH}")
+ message("AppImage> Found APPIMAGETOOL Variable: ${APPIMAGETOOL}")
# do add_custome_target
make_directory(${APPIMAGE_OUTPUT})
target_linuxdeploy()
target_appimage()
-endfunction(add_appimage)
-function(add_appimage_desktop)
- configure_file(cmake/spark-appimage.desktop.in
- ${CMAKE_BINARY_DIR}/spark-appimage.desktop @ONLY)
-endfunction(add_appimage_desktop)
+ # 重设目标输出的目录
+ set_target_properties(${PROJECT_NAME}
+ PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY "${APPIMAGE_OUTPUT}")
-function(add_appimage_icon _ICON_PATH)
- if(CMAKE_VERSION VERSION_LESS 3.21)
- message("> cmake version is less than 3.21")
- configure_file(${_ICON_PATH} ${CMAKE_BINARY_DIR}/spark-appimage.png COPYONLY)
- else()
- file(COPY_FILE ${_ICON_PATH} ${CMAKE_BINARY_DIR}/spark-appimage.png)
- endif(CMAKE_VERSION VERSION_LESS 3.21)
-endfunction(add_appimage_icon _ICON_PATH)
+ # 为解决在不使用 -unsupported-allow-new-glibc 参数时,
+ # 可能不会生成 AppRun 软链接的问题
+ if(NOT USE_APPIMAGE_NEW_GLIBC)
+ set_target_properties(${PROJECT_NAME}
+ PROPERTIES
+ RUNTIME_OUTPUT_NAME "AppRun")
+ endif(NOT USE_APPIMAGE_NEW_GLIBC)
+endfunction(add_appimage_target _target)
-# 如果glic>=2.27,你就需要加上参数 -unsupported-allow-new-glibc (意思就是不再低版本发行版使用了)
-# 或 -unsupported-bundle-everything(大概的意思是尝试兼容,实际测试,到其他发行版直接用不了了,有可能是发行版的原因,还是建议用前者,虽然放弃了低版本)
+# 如果 glic>=2.27, 你就需要加上参数 -unsupported-allow-new-glibc 意思就是不再低版本发行版使用了
+# 或 -unsupported-bundle-everything
+# 大概的意思是尝试兼容,实际测试,到其他发行版直接用不了了,有可能是发行版的原因,还是建议用前者,虽然放弃了低版本
# -unsupported-bundle-everything
- # 捆绑所有依赖库,包括 ld-linux.so 加载器和 glibc。这将允许构建在较新系统上的应用程序在较旧的目标系统上运行,但不建议这样做,因为它会导致捆绑包超出所需的大小(并且可能到其他发行版无法使用)
+ # 捆绑所有依赖库,包括 ld-linux.so 加载器和 glibc。
+ # 这将允许构建在较新系统上的应用程序在较旧的目标系统上运行,
+ # 但不建议这样做,因为它会导致捆绑包超出所需的大小(并且可能到其他发行版无法使用)
# -unsupported-allow-new-glibc
- # 允许 linuxdeployqt 在比仍受支持的最旧 Ubuntu LTS 版本更新的发行版上运行。这将导致 AppImage无法在所有仍受支持的发行版上运行,既不推荐也不测试或支持
+ # 允许 linuxdeployqt 在比仍受支持的最旧 Ubuntu LTS 版本更新的发行版上运行。
+ # 这将导致 AppImage无法在所有仍受支持的发行版上运行,既不推荐也不测试或支持
-# ./linuxdeployqt-7-x86_64.AppImage 程序目录/程序 -appimage -unsupported-allow-new-glibc
-# ./linuxdeployqt-7-x86_64.AppImage 程序目录/程序 -appimage -unsupported-bundle-everything
+# 对 linuxdeployqt 的使用
+# ./linuxdeployqt-7-x86_64.AppImage
+ # 程序目录/程序 -appimage -unsupported-allow-new-glibc
+# ./linuxdeployqt-7-x86_64.AppImage
+ # 程序目录/程序 -appimage -unsupported-bundle-everything
@@ -126,7 +151,7 @@ endfunction(add_appimage_icon _ICON_PATH)
# include(cmake/SparkAppimageConfig.cmake) # 导入来自 Spark 构建的 Appimage 构建
# add_appimage_icon(assets/spark.png) # 添加到 Appimage 中的默认的图标
# add_appimage_desktop() # 添加到 Appimage 中的默认desktop(使用来自 Spark 构建的 Desktop 构建中配置的信息(必须要求 spark-desktop))
-# add_appimage() # 应用对 Appimage 的构建
+# add_appimage_target(${PROJECT_NAME}) # 添加到 Appimage 中的默认目标,应用对 Appimage 的构建
# 2. 在 Makefile 进行构建目标构建 Appimage 的构建流 --
# 在 Makefile 进行构建目标构建 Appimage (要求提供工具的绝对路径,然后可依次进行linuxdeployqt, genrate-appimage)
@@ -150,3 +175,4 @@ endfunction(add_appimage_icon _ICON_PATH)
# genrate-appimage:
# cd build && cmake .. -DLINUXDEPLOYQT=$(LINUXDEPLOYQT) -DAPPIMAGETOOL=$(APPIMAGETOOL)
# cd build && make appimage
+
diff --git a/cmake/DebPackageConfig.cmake b/cmake/SparkDebPackageConfig.cmake
similarity index 90%
rename from cmake/DebPackageConfig.cmake
rename to cmake/SparkDebPackageConfig.cmake
index 59950ec..d881ad3 100644
--- a/cmake/DebPackageConfig.cmake
+++ b/cmake/SparkDebPackageConfig.cmake
@@ -172,6 +172,12 @@ function(set_package_vars _IN_KEY _IN_VAL)
set(CPACK_DEBIAN_PACKAGE_RECOMMENDS "${_IN_VAL}" PARENT_SCOPE)
message("--> 软件建议: ${_IN_VAL}")
endif(_Recommends EQUAL "0")
+
+ find_str("${_IN_KEY}" "Conflicts" _Conflicts)
+ if(_Conflicts EQUAL "0")
+ set(CPACK_DEBIAN_PACKAGE_CONFLICTS "${_IN_VAL}" PARENT_SCOPE)
+ message("--> 软件冲突: ${_IN_VAL}")
+ endif(_Conflicts EQUAL "0")
endfunction(set_package_vars _IN_KEY _IN_VAL)
@@ -238,7 +244,12 @@ function(add_package_descript IN_DES)
set(PREV_DES_LINE "")
while(NOT PREV_DES_LINE STREQUAL DES_LINE)
if(NOT PREV_DES_LINE STREQUAL "")
- set(Descrition "${Descrition}\n${DES_LINE}")
+ if ("${CMAKE_VERSION}" VERSION_LESS "3.15")
+ set(Descrition "${Descrition}\n${DES_LINE}")
+ else()
+ string(STRIP "${DES_LINE}" STRIP_DES_LINE)
+ set(Descrition "${Descrition}\n${STRIP_DES_LINE}")
+ endif("${CMAKE_VERSION}" VERSION_LESS "3.15")
endif(NOT PREV_DES_LINE STREQUAL "")
set(PREV_DES_LINE "${DES_LINE}")
sub_next(${DES_CONTENT} NEXT_INDEX DES_LINE DES_CONTENT)
@@ -275,6 +286,17 @@ function(add_package_descript IN_DES)
)
set(CPACK_DEBIAN_FILE_NAME ${_DebFileName})
+ # 标识: spark-deb-package
+ if(NOT "${PACKAGE_SUFFIX}" STREQUAL "")
+ # eg: remove '_' of '_Debian'
+ string(SUBSTRING "${PACKAGE_SUFFIX}" 1 -1 DISTRIBUTION)
+ if ("${CMAKE_VERSION}" VERSION_LESS "3.15")
+ set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "${Descrition}\n .\n Build for ${DISTRIBUTION} through spark-deb-build.")
+ else()
+ set(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${Descrition} "\n.\nBuild for ${DISTRIBUTION} through spark-deb-build.")
+ endif("${CMAKE_VERSION}" VERSION_LESS "3.15")
+
+ endif(NOT "${PACKAGE_SUFFIX}" STREQUAL "")
# set(CPACK_DEBIAN_PACKAGE_NAME "${Package}")
# set(CPACK_DEBIAN_PACKAGE_VERSION "${Version}")
@@ -307,7 +329,7 @@ endfunction(add_package_descript IN_DES)
# CPACK_DEBIAN_FILE_NAME - n
# CPACK_DEBIAN_PACKAGE_NAME - y
# CPACK_DEBIAN_PACKAGE_VERSION - y
-# CPACK_DEBIAN_PACKAGE_ARCHITECTURE - y(auto)
+# CPACK_DEBIAN_PACKAGE_ARCHITECTURE - y(auto) -> dpkg --print-architecture
# CPACK_DEBIAN_PACKAGE_DEPENDS - y
# CPACK_DEBIAN_PACKAGE_PRIORITY - y
# CPACK_DEBIAN_PACKAGE_MAINTAINER - y
@@ -320,4 +342,5 @@ endfunction(add_package_descript IN_DES)
# set(ARCHITECTURE "arm64")
# endif()
+
# string(TIMESTAMP BUILD_TIME "%Y%m%d")
diff --git a/cmake/SparkDesktopMacros.cmake b/cmake/SparkDesktopMacros.cmake
index 255a205..d88755a 100644
--- a/cmake/SparkDesktopMacros.cmake
+++ b/cmake/SparkDesktopMacros.cmake
@@ -1,16 +1,19 @@
+# SparkDesktopMacros.cmake
-macro(spark_desktop_macros _APP_NAME _APP_NAME_ZH_CN _APP_COMMENT _APP_TYPE _APP_EXECUTE_PATH _APP_EXECUTE_ICON_PATH _APP_CATEGORIES)
- set(APP_NAME ${_APP_NAME})
- set(APP_NAME_ZH_CN ${_APP_NAME_ZH_CN})
- set(APP_COMMENT ${_APP_COMMENT})
- set(APP_TYPE ${_APP_TYPE})
- set(APP_EXECUTE_PATH ${_APP_EXECUTE_PATH})
- set(APP_EXECUTE_ICON_PATH ${_APP_EXECUTE_ICON_PATH})
- set(APP_CATEGORIES ${_APP_CATEGORIES})
- configure_file(cmake/spark-desktop.desktop.in
- ${CMAKE_BINARY_DIR}/${_APP_NAME}.desktop
+macro(spark_desktop_macros)
+ set(APP_NAME ${ARGV0})
+ set(APP_NAME_ZH_CN ${ARGV1})
+ set(APP_COMMENT ${ARGV2})
+ set(APP_TYPE ${ARGV3})
+ set(APP_EXECUTE_PATH ${ARGV4})
+ set(APP_EXECUTE_ICON_PATH ${ARGV5})
+ set(APP_CATEGORIES ${ARGV6})
+ set(APP_MIME_TYPE ${ARGV7})
+ configure_file(cmake/spark-desktop.desktop.in.txt
+ ${CMAKE_BINARY_DIR}/${ARGV0}.desktop
)
-endmacro(spark_desktop_macros _APP_NAME _APP_NAME_ZH_CN _APP_COMMENT _APP_TYPE _APP_EXECUTE_PATH _APP_EXECUTE_ICON_PATH _APP_CATEGORIES)
+ set(SPARK_DESKTOP_FILE ${CMAKE_BINARY_DIR}/${ARGV0}.desktop)
+endmacro(spark_desktop_macros)
# include(cmake/SparkDesktopMacros.cmake)
# 内容默认应用名称: Name= 应与项目名称相同
@@ -22,33 +25,26 @@ endmacro(spark_desktop_macros _APP_NAME _APP_NAME_ZH_CN _APP_COMMENT _APP_TYPE _
# 执行程序: Exec=
# 图标路径: Icon=
# 应用分类: Category=
+ # MIME类型: MimeType=
# )
+# TODO 安装位置:INSTALL(将自动实现 install 文件,如 /usr/share/applications)
+
+# install(FILES ${APP_NAME}.desktop
+# DESTINATION /usr/share/applications
+# )
+ # 或者
+# install(FILES ${SPARK_DESKTOP_FILE}
+# DESTINATION /usr/share/applications
+# )
+
+# 基于 configure_file 填充内容配置
# configure_file(