From d116e4db89b6a4593551a85c4e9716e87a48ec94 Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Fri, 10 Apr 2020 23:24:38 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=84=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMLibCPack.cmake | 25 ++++++++++++++++++++ CMLibCPackDeb.cmake | 52 +++++++++++++++++++++++++++++++++++++++++ CMLibCPackProject.cmake | 6 +++++ CMLibCPackSources.cmake | 12 ---------- CMLibCommon.cmake | 2 +- 5 files changed, 84 insertions(+), 13 deletions(-) create mode 100644 CMLibCPack.cmake create mode 100644 CMLibCPackDeb.cmake create mode 100644 CMLibCPackProject.cmake delete mode 100644 CMLibCPackSources.cmake diff --git a/CMLibCPack.cmake b/CMLibCPack.cmake new file mode 100644 index 0000000..b05ea40 --- /dev/null +++ b/CMLibCPack.cmake @@ -0,0 +1,25 @@ +# Общие настройки для пакета: организация, автор, версия +set(CPACK_PACKAGE_VENDOR ${CMLIB_ORGANIZATION_NAME_LOWER}) +set(CPACK_PACKAGE_NAME ${CMLIB_PROJECT_NAME_LOWER}) +set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) + +# Параметры для архива исходных текстов +set(CPACK_SOURCE_GENERATOR TXZ) +set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMLIB_PROJECT_NAME_LOWER}-${CPACK_PACKAGE_VERSION}") + +# Параметры для архива собранного проекта +set(CPACK_TARGET_ARCH ${CMAKE_SYSTEM_PROCESSOR}) +if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + set(CPACK_TARGET_ARCH "amd64") +endif() +set(CPACK_PACKAGE_FILE_NAME "${CMLIB_PROJECT_NAME_LOWER}_${CPACK_TARGET_ARCH}_${CPACK_PACKAGE_VERSION}") +set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMLIB_PROJECT_NAME_LOWER}-${CPACK_PACKAGE_VERSION}") + +set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_CURRENT_LIST_DIR}/CMLibCPackProject.cmake) + +# Правила для сборки пакетов для Debian +include(CMLibCPackDeb) + +# Подключение модуля, выполняющего сборку архивов и пакетов +include(CPack) + diff --git a/CMLibCPackDeb.cmake b/CMLibCPackDeb.cmake new file mode 100644 index 0000000..deff99d --- /dev/null +++ b/CMLibCPackDeb.cmake @@ -0,0 +1,52 @@ +# По умолчанию пакет собирается для дистрибутива unstable +if(NOT DEBIAN_PACKAGE_TYPE) + set(DEBIAN_PACKAGE_TYPE "unstable") +endif() + +# По умолчанию пакет для Debian делится на компоненты +if(NOT CPACK_DEB_COMPONENT_INSTALL) + set(CPACK_DEB_COMPONENT_INSTALL ON) +endif() + +# Если имя компонента по умолчанию не определено, то устанавливается MAIN +if(NOT CMAKE_INSTALL_DEFAULT_COMPONENT_NAME) + set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME MAIN) +endif() + +# В списке компонентов обязательно должны быть MAIN и DEV +list(APPEND CPACK_COMPONENTS_ALL MAIN DEV) +list(REMOVE_DUPLICATES CPACK_COMPONENTS_ALL) + +# Правило формирования имени пакета и файла для компонента MAIN +set(CPACK_DEBIAN_MAIN_PACKAGE_NAME "${CMLIB_PROJECT_NAME_LOWER}") +set(CPACK_DEBIAN_MAIN_FILE_NAME "${CMLIB_PROJECT_NAME_LOWER}_${CPACK_PACKAGE_VERSION}_${CPACK_TARGET_ARCH}.deb") + +# Правило формирования имени пакета и файла для остальных компонентов +foreach(C ${CPACK_COMPONENTS_ALL}) + if(NOT "${C}" STREQUAL "MAIN") + string(TOLOWER "${C}" cl) + set(CPACK_DEBIAN_${C}_PACKAGE_NAME "${CMLIB_PROJECT_NAME_LOWER}-${cl}") + set(CPACK_DEBIAN_${C}_FILE_NAME "${CMLIB_PROJECT_NAME_LOWER}-${cl}_${CPACK_PACKAGE_VERSION}_${CPACK_TARGET_ARCH}.deb") + endif() +endforeach() + +# Если в каталоге ${CMAKE_SOURCE_DIR}/cmake/deb находятся сценарии сопровождающего +# postinst, preinst, postrm и prerm, то они будут добавлены к пакету. +if(EXISTS "${CMAKE_SOURCE_DIR}/cmake/deb/preinst") + list(APPEND CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/deb/preinst") +endif() +if(EXISTS "${CMAKE_SOURCE_DIR}/cmake/deb/postinst") + list(APPEND CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/deb/postinst") +endif() +if(EXISTS "${CMAKE_SOURCE_DIR}/cmake/deb/prerm") + list(APPEND CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/deb/prerm") +endif() +if(EXISTS "${CMAKE_SOURCE_DIR}/cmake/deb/postrm") + list(APPEND CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/deb/postrm") +endif() + +if(UNIX AND NOT TARGET deb) + add_custom_target(deb + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMAND cpack -G DEB) +endif() diff --git a/CMLibCPackProject.cmake b/CMLibCPackProject.cmake new file mode 100644 index 0000000..197dad9 --- /dev/null +++ b/CMLibCPackProject.cmake @@ -0,0 +1,6 @@ +if(CPACK_GENERATOR MATCHES "DEB") + set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/${CPACK_PACKAGE_VENDOR}/${CPACK_PACKAGE_NAME}") +else() + set(CPACK_PACKAGING_INSTALL_PREFIX "${PROJECT_NAME}") +endif() + diff --git a/CMLibCPackSources.cmake b/CMLibCPackSources.cmake deleted file mode 100644 index fa6ae00..0000000 --- a/CMLibCPackSources.cmake +++ /dev/null @@ -1,12 +0,0 @@ -set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) -set(CPACK_SOURCE_GENERATOR TXZ) -set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMLIB_PROJECT_NAME_LOWER}-${CPACK_PACKAGE_VERSION}") - -set(CPACK_TARGET_ARCH ${CMAKE_SYSTEM_PROCESSOR}) -if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") - set(CPACK_TARGET_ARCH "amd64") -endif() -set(CPACK_PACKAGE_FILE_NAME "${CMLIB_PROJECT_NAME_LOWER}_${CPACK_PACKAGE_VERSION}_${CPACK_TARGET_ARCH}") - -include(CPack) -add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source) diff --git a/CMLibCommon.cmake b/CMLibCommon.cmake index 099587f..e096ff3 100644 --- a/CMLibCommon.cmake +++ b/CMLibCommon.cmake @@ -45,5 +45,5 @@ include(CMLibQtTranslation) include(CMLibToday) include(CMLibAuxilarySymlinks) include(CMLibConfigHPPGenerate) -include(CMLibCPackSources) +include(CMLibCPack) include(CMLibUninstall)