Implements deb packaging and put to ppa.

This commit is contained in:
Tao He 2021-03-30 18:12:10 +08:00 committed by lidongze0629
parent 9339b6dee4
commit fe5bbb6081
3 changed files with 636 additions and 1 deletions

View File

@ -5,7 +5,9 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(etcd-cpp-api_VERSION_MAJOR 0) set(etcd-cpp-api_VERSION_MAJOR 0)
set(etcd-cpp-api_VERSION_MINOR 1) set(etcd-cpp-api_VERSION_MINOR 1)
set(etcd-cpp-api_VERSION ${etcd-cpp-api_MAJOR_VERSION}.${etcd-cpp-api_MINOR_VERSION}) set(etcd-cpp-api_VERSION_PATCH 1)
set(etcd-cpp-api_VERSION ${etcd-cpp-api_VERSION_MAJOR}.${etcd-cpp-api_VERSION_MINOR}.${etcd-cpp-api_VERSION_PATCH})
set(CMAKE_PROJECT_HOMEPAGE_URL https://github.com/etcd-cpp-apiv3/etcd-cpp-apiv3)
include(CheckCXXCompilerFlag) include(CheckCXXCompilerFlag)
include(CheckLibraryExists) include(CheckLibraryExists)
@ -120,3 +122,54 @@ install(EXPORT etcd-targets
FILE etcd-targets.cmake FILE etcd-targets.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/etcd-cpp-api DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/etcd-cpp-api
) )
# deb/rpc packaging for Linux
set(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME})
set(CPACK_PACKAGE_VENDOR etcd-cpp-apiv3)
set(CPACK_PACKAGE_CONTACT "Tao He <sighingnow@gmail.com>")
set(CPACK_PACKAGE_VERSION "${etcd-cpp-api_VERSION}")
set(CPACK_PACKAGE_VERSION_MAJOR "${etcd-cpp-api_VERSION_MAJOR}")
set(CPACK_PACKAGE_VERSION_MINOR "${etcd-cpp-api_VERSION_MINOR}")
set(CPACK_PACKAGE_VERSION_PATCH "${etcd-cpp-api_VERSION_PATCH}")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The etcd-cpp-apiv3 is a C++ API for etcd's v3 client API, i.e., `ETCDCTL_API=3`.")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt")
set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
set(CPACK_SOURCE_IGNORE_FILES "${PROJECT_BINARY_DIR}")
set(CPACK_CMAKE_GENERATOR "Unix Makefiles")
set(CPACK_GENERATOR "STGZ;TGZ")
set(CPACK_SOURCE_GENERATOR "TGZ")
include(CPack)
# generate deb for ppa
#
# requires: apt-get install devscripts
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libcpprest-dev, libprotobuf-dev, libgrpc-dev, libgrpc++-dev, libssl-dev")
set(CPACK_DEBIAN_BUILD_DEPENDS "ca-certificates,
gcc,
g++,
libboost-all-dev,
libcurl4-openssl-dev,
libgrpc-dev,
libgrpc++-dev,
libprotobuf-dev,
libprotoc-dev,
libssl-dev,
libz-dev,
lsb-release,
openssl,
protobuf-compiler-grpc")
set(CPACK_DEBIAN_PACKAGE_UPSTREAM_COPYRIGHT_YEAR 2016-2021)
set(CPACK_DEBIAN_PACKAGE_LICENSE bsd)
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Tao He <sighingnow@gmail.com>")
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/etcd-cpp-apiv3/etcd-cpp-apiv3/")
set(CPACK_DEBIAN_PACKAGE_DISTRIBUTION "focal")
set(DPUT_HOST "ppa:graphscope/etcd-cpp-api")
set(DPUT_SNAPSHOT_HOST "ppa:graphscope/etcd-cpp-api")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(UploadPPA)

540
cmake/UploadPPA.cmake Normal file
View File

@ -0,0 +1,540 @@
##
# Copyright (c) 2012 Karsten Ohme <k_o_@users.sourceforge.net>
# Based on a script from Daniel Pfeifer <daniel@pfeifer-mail.de> Copyright (c) 2010
#
# This script builds an Ubuntu/Debian source package with "make package_ubuntu". It also offers a convenient way to upload it by dput to Launchpad.
#It assumes a working install and package_source configuration (CPACK_PACKAGE_* variables in CMakeLists.txt CMake configuration file) with all files in place.
# Also a PGP key for signing the package is necessary. The key is referenced by the CPACK_DEBIAN_PACKAGE_MAINTAINER setting. For uploading the package to Launchpad this should be the Lauchpad PGP key.
# You should also be familiar with the meaning of snapshot and release versions. See https://help.launchpad.net/Packaging/PPA/BuildingASourcePackage
#
# USAGE: INCLUDE IN PROJECT
#
# set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
# include(UploadPPA)
# Add the UploadPPA.cmake file to the projects source directory.
#
#
# From the resulting dsc file in the Debian directory also a Ubuntu/Debian package can be build:
#
# dpkg-source -x foo.dsc
# cd <CPACK_DEBIAN_PACKAGE_NAME>
# fakeroot debian/rules binary
#
# When uploading it to Launchpad with dput you must be registered there and you must have a .dput.cf in place. Follow the instructions on https://help.launchpad.net/Packaging/PPA/Uploading
#
# Known problems:
#
# If you set the build type SET(CMAKE_BUILD_TYPE "Release") then the cmakeinstall.cmake file does not install the binary files
#
#
#
# CPACK_DEBIAN_PACKAGE_NAME - used as "Source" in control file, default TOLOWER "${CPACK_PACKAGE_NAME}"
# CPACK_DEBIAN_PACKAGE_PRIORITY - used as "Priority" in control file, default "optional"
# CPACK_DEBIAN_PACKAGE_SECTION - used as "Section" in control file, default "devel"
# CPACK_DEBIAN_PACKAGE_HOMEPAGE - used in "Homepage" field in control file
# CPACK_DEBIAN_BUILD_DEPENDS - use in "Build-Depends" field in control file, cmake is automatically added
# CPACK_DEBIAN_PACKAGE_DEPENDS - used as "Depends" field in the control file, default "${shlibs:Depends}, ${misc:Depends} ${CPACK_PACKAGE_NAME} (= ${binary:Version}) "
# for components. Instead of "binary:Version" "Source-Version" is used if CPACK_DEBIAN_PACKAGE_DISTRIBUTION is "dapper"
#
# CPACK_DEBIAN_PACKAGE_INSTALL - specifies which files have to be installed for the main package separated by ";". This is a space separated list. The file path must be absolute to the root directory of the installation
# e.g. "/usr/lib/*.so". * wildcards can be used
# CPACK_DEBIAN_PACKAGE_DOCS - specifies which files have to be installed for the main package separated by ";". This is a space separated list. The file path must be absolute to the root directory of the installation
# e.g. "/usr/share/docs/${CPACK_DEBIAN_PACKAGE_NAME}-dev/README". * wildcards can be used
#
# CPACK_PACKAGE_DESCRIPTION_FILE - used main text in "Description" field of control file
# CPACK_DEBIAN_PACKAGE_UPSTREAM_AUTHOR - used as upstream author in copyright file (format: Name <email>), default ${CPACK_DEBIAN_PACKAGE_MAINTAINER}
# CPACK_DEBIAN_PACKAGE_UPSTREAM_AUTHOR_NAME - used as upstream author name in copyright file, default ${CPACK_DEBIAN_PACKAGE_HOMEPAGE}
# CPACK_DEBIAN_PACKAGE_UPSTREAM_COPYRIGHT_YEAR - used as the copyright year in copyright file, default this year
# CPACK_DEBIAN_PACKAGE_UPSTREAM_URL - used as upstream url in copyright file, default CPACK_DEBIAN_PACKAGE_HOMEPAGE
# CPACK_DEBIAN_PACKAGE_LICENSE - used as license indicator for the copyright file generation, possible values gpl, lgpl, bsd, apache
# CPACK_DEBIAN_PACKAGE_DISTRIBUTION - distribution name, default "precise"
#
# CPACK_DEBIAN_PACKAGE_RECOMMENDS - used as "Recommends" field in control file
# CPACK_DEBIAN_PACKAGE_SUGGESTS - used as "Suggests" field in control file
# CPACK_DEBIAN_PACKAGE_PREDEPENDS - used as "Pre-Depends" field in control file
# CPACK_DEBIAN_PACKAGE_BREAKS - used as "Breaks" field in control file
# CPACK_DEBIAN_PACKAGE_CONFLICTS - used as "Conflicts" field in control file
# CPACK_DEBIAN_PACKAGE_REPLACES - used as "Replaces" field in control file
# CPACK_DEBIAN_PACKAGE_ENHANCES - used as "Enhances" field in control file
#
#
#
# CPACK_COMPONENTS_ALL - list of additional components separated by ";" - used for the "Package" field in the control file for additional components of a package, e.g. for development files for a library this would be "dev"
# The component must match the used components in the CMake file. The component is appended to ${CPACK_DEBIAN_PACKAGE_NAME} with a dash: e.g.: ${CPACK_DEBIAN_PACKAGE_NAME}-dev
# CPACK_COMPONENT_${COMPONENT}_DISPLAY_NAME - used as additional short description for the "Description" field of additional packages. ${COMPONENT} must be in the list of CPACK_COMPONENTS_ALL, e.g. dev
# CPACK_COMPONENT_${COMPONENT}_DESCRIPTION - used as additional description for the "Description" field of additional packages. ${COMPONENT} must be in the list of CPACK_COMPONENTS_ALL, e.g. dev
# CPACK_COMPONENT_${COMPONENT}_DEPENDS - used for the "Depends" field of additional packages. ${COMPONENT} must be in the list of CPACK_COMPONENTS_ALL, e.g. dev
# CPACK_COMPONENT_${COMPONENT}_SECTION - used for the "Section" field of additional packages. ${COMPONENT} must be in the list of CPACK_COMPONENTS_ALL, e.g. dev
# CPACK_COMPONENT_${COMPONENT}_INSTALL - specifies which files have to be installed for this component separated by ";". The file path must be absolute to the root directory of the installation
# e.g. "/usr/lib/*.so". * wildcards can be used
# CPACK_COMPONENT_${COMPONENT}_DOCS - specifies which files have to be installed for this component separated by ";". The file path must be absolute to the root directory of the installation
# e.g. "/usr/share/docs/${CPACK_DEBIAN_PACKAGE_NAME}/README". * wildcards can be used
# CPACK_DEBIAN_PACKAGE_MANPAGES - specifies which files have to be installed as manual pages. Separated by ";".
# CPACK_DEBIAN_CUSTOM_BUILD_COMMAND - A custom build command, e.g. create documentation with something like "make doc". The build artifact's path created somewhere in the build directory must be referenced in the CMake INSTALL command by ${CMAKE_CURRENT_BINARY_DIR} variable. E.g.: INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc DESTINATION ${DOCUMENTATION_DIRECTORY} COMPONENT dev OPTIONAL)
# The OPTIONAL keyword does not work under CMake 2.6, so you have to use a more difficult construct:
# INSTALL(
#CODE "FILE (GLOB_RECURSE ALL_DOCS \"${CMAKE_CURRENT_BINARY_DIR}/doc/html/*\")"
#CODE "FILE (INSTALL DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${DOCUMENTATION_DIRECTORY}/html\" TYPE FILE FILES \${ALL_DOCS})"
#COMPONENT dev)
# Here the "\" before ${CMAKE_INSTALL_PREFIX} is important, so this variable is resolved at runtime first.
#
# CPACK_DEBIAN_PACKAGE_MAINTAINER - used as "Maintainer" field in control and copyright file, default ${CPACK_PACKAGE_CONTACT}, also used as reference for the GPG signing key
# CPACK_DEBIAN_PACKAGE_HOMEPAGE - used as "Homepage" in control file, default ${CPACK_PACKAGE_VENDOR}
# CPACK_DEBIAN_PACKAGE_SNAPSHOT_HOMEPAGE - used as "Homepage" in control file if this is a snapshot build, default ${CPACK_PACKAGE_VENDOR}
# CPACK_PACKAGE_DESCRIPTION_SUMMARY - used as first line of all "Description" fields for all packages in control file
#
# DPUT_HOST - used as host for dput for uploading the file to Launchpad
# DPUT_SNAPSHOT_HOST - used as snapshot host for dput for uploading the file to Launchpad
# CPACK_DEBIAN_PACKAGE_TYPE - used for determining the build type, "snapshot" or "release" is possible, default snapshot
#
# The format of the resulting versioning scheme is the following: ${CPACK_DEBIAN_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_BUILD_NUMBER_PREFIX}${CPACK_DEBIAN_PACKAGE_BUILD_NUMBER}~${CPACK_DEBIAN_PACKAGE_DISTRIBUTION}
#${CPACK_DEBIAN_PACKAGE_BUILD_NUMBER_PREFIX}${CPACK_DEBIAN_PACKAGE_BUILD_NUMBER}~${CPACK_DEBIAN_PACKAGE_DISTRIBUTION} is the Debian/Ubuntu revision. See http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version.
# An example is libfoo1-1.2.0-0ubuntu1~maverick
# "0ubuntu1" stands for the first package in Ubuntu when there is no Debian package existing and "maverick" is the used Ubuntu series
#
# To generate always a unique code version for snapshots you must should also set ${CPACK_PACKAGE_VERSION} to a unique increasing package version number. This can be done by appending a [<currentVersion>+<nextVersion>SNAPSHOT<DATE>] part to the package version number. The package version number cannot contain hyphens because a Debian/Ubuntu revision follows.
# Assuming the libtool versioning scheme http://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html an example could be: "1.2.0+1SNAPSHOT20110402031738+0200", when the current version is 1.2.0 and the next version in development is 1.2.1. The date format is using a variant of the ISO date format.
#
# CPACK_DEBIAN_PACKAGE_BUILD_NUMBER_PREFIX - used as a prefix for the build number, default ""
# CPACK_DEBIAN_PACKAGE_BUILD_NUMBER - used for the build number, default 1
# CPACK_DEBIAN_NATIVE_PACKAGE - if set a native package is build, default not set
#
#
##
find_program(DEBUILD_EXECUTABLE debuild)
find_program(DPUT_EXECUTABLE dput)
if(NOT DEBUILD_EXECUTABLE OR NOT DPUT_EXECUTABLE)
MESSAGE(WARNING "${DEBUILD_EXECUTABLE} or ${DPUT_EXECUTABLE} not installed.")
return()
endif(NOT DEBUILD_EXECUTABLE OR NOT DPUT_EXECUTABLE)
# set default package type
IF(NOT CPACK_DEBIAN_PACKAGE_TYPE)
set(CPACK_DEBIAN_PACKAGE_TYPE "snapshot")
ENDIF(NOT CPACK_DEBIAN_PACKAGE_TYPE)
# set default distribution
IF(NOT CPACK_DEBIAN_PACKAGE_DISTRIBUTION)
set(CPACK_DEBIAN_PACKAGE_DISTRIBUTION "precise")
ENDIF(NOT CPACK_DEBIAN_PACKAGE_DISTRIBUTION)
# Set the version name
set(VERSION_NAME "${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_BUILD_NUMBER_PREFIX}${CPACK_DEBIAN_PACKAGE_BUILD_NUMBER}~${CPACK_DEBIAN_PACKAGE_DISTRIBUTION}")
# DEBIAN/control
# debian policy enforce lower case for package name
# Package: (mandatory)
IF(NOT CPACK_DEBIAN_PACKAGE_NAME)
STRING(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_DEBIAN_PACKAGE_NAME)
ENDIF(NOT CPACK_DEBIAN_PACKAGE_NAME)
# Maintainer:
IF(NOT CPACK_DEBIAN_PACKAGE_MAINTAINER)
set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_DEBIAN_PACKAGE_HOMEPAGE})
ENDIF(NOT CPACK_DEBIAN_PACKAGE_MAINTAINER)
# Homepage:
IF(NOT CPACK_DEBIAN_PACKAGE_HOMEPAGE)
ENDIF(NOT CPACK_DEBIAN_PACKAGE_HOMEPAGE)
# Section: (recommended)
IF(NOT CPACK_DEBIAN_PACKAGE_SECTION)
SET(CPACK_DEBIAN_PACKAGE_SECTION "devel")
ENDIF(NOT CPACK_DEBIAN_PACKAGE_SECTION)
# Priority: (recommended)
IF(NOT CPACK_DEBIAN_PACKAGE_PRIORITY)
SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
ENDIF(NOT CPACK_DEBIAN_PACKAGE_PRIORITY)
# Section:
set(CPACK_DEBIAN_PACKAGE_DEPENDS "\${shlibs:Depends}, \${misc:Depends}")
# Description:
file(STRINGS ${CPACK_PACKAGE_DESCRIPTION_FILE} DESC_LINES)
foreach(LINE ${DESC_LINES})
set(DEB_LONG_DESCRIPTION "${DEB_LONG_DESCRIPTION} ${LINE}\n")
endforeach(LINE ${DESC_LINES})
file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/Debian)
set(DEBIAN_SOURCE_DIR ${CMAKE_BINARY_DIR}/Debian/${CPACK_DEBIAN_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION})
file(MAKE_DIRECTORY ${DEBIAN_SOURCE_DIR}/debian)
##############################################################################
# debian/control
set(DEBIAN_CONTROL ${DEBIAN_SOURCE_DIR}/debian/control)
file(WRITE ${DEBIAN_CONTROL}
"Source: ${CPACK_DEBIAN_PACKAGE_NAME}\n"
"Section: ${CPACK_DEBIAN_PACKAGE_SECTION}\n"
"Priority: ${CPACK_DEBIAN_PACKAGE_PRIORITY}\n"
"Maintainer: ${CPACK_DEBIAN_PACKAGE_MAINTAINER}\n"
"Build-Depends: "
)
foreach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS})
file(APPEND ${DEBIAN_CONTROL} "${DEP}, ")
endforeach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS})
file(APPEND ${DEBIAN_CONTROL} "cmake\n"
"Standards-Version: 3.8.4\n"
)
IF(CPACK_DEBIAN_PACKAGE_TYPE STREQUAL "snapshot")
file(APPEND ${DEBIAN_CONTROL} "Homepage: ${CPACK_DEBIAN_PACKAGE_SNAPSHOT_HOMEPAGE}\n")
ELSE(CPACK_DEBIAN_PACKAGE_TYPE STREQUAL "snapshot")
file(APPEND ${DEBIAN_CONTROL} "Homepage: ${CPACK_DEBIAN_PACKAGE_HOMEPAGE}\n")
ENDIF(CPACK_DEBIAN_PACKAGE_TYPE STREQUAL "snapshot")
file(APPEND ${DEBIAN_CONTROL}
"\n"
"Package: ${CPACK_DEBIAN_PACKAGE_NAME}\n"
"Architecture: any\n"
"Depends: ${CPACK_DEBIAN_PACKAGE_DEPENDS}\n"
)
# Recommends:
IF(CPACK_DEBIAN_PACKAGE_RECOMMENDS)
file(APPEND ${DEBIAN_CONTROL}
"Recommends: ${CPACK_DEBIAN_PACKAGE_RECOMMENDS}\n"
)
ENDIF(CPACK_DEBIAN_PACKAGE_RECOMMENDS)
# Suggests
IF(CPACK_DEBIAN_PACKAGE_SUGGESTS)
file(APPEND ${DEBIAN_CONTROL}
"Suggests: ${CPACK_DEBIAN_PACKAGE_SUGGESTS}\n"
)
ENDIF(CPACK_DEBIAN_PACKAGE_SUGGESTS)
# Pre-Depends:
IF(CPACK_DEBIAN_PACKAGE_PREDEPENDS)
file(APPEND ${DEBIAN_CONTROL}
"Pre-Depends: ${CPACK_DEBIAN_PACKAGE_PREDEPENDS}\n"
)
ENDIF(CPACK_DEBIAN_PACKAGE_PREDEPENDS)
# Conflicts:
IF(CPACK_DEBIAN_PACKAGE_CONFLICTS)
file(APPEND ${DEBIAN_CONTROL}
"Conflicts: ${CPACK_DEBIAN_PACKAGE_CONFLICTS}\n"
)
ENDIF(CPACK_DEBIAN_PACKAGE_CONFLICTS)
# Enhances:
IF(CPACK_DEBIAN_PACKAGE_ENHANCES)
file(APPEND ${DEBIAN_CONTROL}
"Enhances: ${CPACK_DEBIAN_PACKAGE_ENHANCES}\n"
)
ENDIF(CPACK_DEBIAN_PACKAGE_ENHANCES)
# Replaces:
IF(CPACK_DEBIAN_PACKAGE_REPLACES)
file(APPEND ${DEBIAN_CONTROL}
"Replaces: ${CPACK_DEBIAN_PACKAGE_REPLACES}\n"
)
ENDIF(CPACK_DEBIAN_PACKAGE_REPLACES)
file(APPEND ${DEBIAN_CONTROL}
"Description: ${CPACK_PACKAGE_DESCRIPTION_SUMMARY}\n"
"${DEB_LONG_DESCRIPTION}"
)
foreach(COMPONENT ${CPACK_COMPONENTS_ALL})
string(TOUPPER ${COMPONENT} UPPER_COMPONENT)
set(DEPENDS "${CPACK_DEBIAN_PACKAGE_NAME}")
IF(CPACK_DEBIAN_PACKAGE_DISTRIBUTION STREQUAL "dapper")
set(DEPENDS "${DEPENDS} (= \${Source-Version})")
ELSE(CPACK_DEBIAN_PACKAGE_DISTRIBUTION STREQUAL "dapper")
set(DEPENDS "${DEPENDS} (= \${binary:Version})")
ENDIF(CPACK_DEBIAN_PACKAGE_DISTRIBUTION STREQUAL "dapper")
foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS})
set(DEPENDS "${DEPENDS}, ${CPACK_DEBIAN_PACKAGE_NAME}-${DEP}")
endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS})
file(APPEND ${DEBIAN_CONTROL} "\n"
"Package: ${CPACK_DEBIAN_PACKAGE_NAME}-${COMPONENT}\n"
"Section: ${CPACK_COMPONENT_${UPPER_COMPONENT}_SECTION}\n"
"Architecture: any\n"
"Depends: ${DEPENDS}\n"
"Description: ${CPACK_PACKAGE_DESCRIPTION_SUMMARY}"
": ${CPACK_COMPONENT_${UPPER_COMPONENT}_DISPLAY_NAME}\n"
"${DEB_LONG_DESCRIPTION}"
" .\n"
" ${CPACK_COMPONENT_${UPPER_COMPONENT}_DESCRIPTION}\n"
)
endforeach(COMPONENT ${CPACK_COMPONENTS_ALL})
##############################################################################
# debian/copyright
set(DEBIAN_COPYRIGHT ${DEBIAN_SOURCE_DIR}/debian/copyright)
IF(NOT CPACK_DEBIAN_PACKAGE_LICENSE)
set(CPACK_DEBIAN_PACKAGE_LICENSE gpl)
ENDIF(NOT CPACK_DEBIAN_PACKAGE_LICENSE)
IF(NOT CPACK_DEBIAN_PACKAGE_UPSTREAM_AUTHOR)
set(CPACK_DEBIAN_PACKAGE_UPSTREAM_AUTHOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})
ENDIF(NOT CPACK_DEBIAN_PACKAGE_UPSTREAM_AUTHOR)
IF(NOT CPACK_DEBIAN_PACKAGE_UPSTREAM_AUTHOR_NAME)
set(CPACK_DEBIAN_PACKAGE_UPSTREAM_AUTHOR_NAME ${CPACK_DEBIAN_PACKAGE_HOMEPAGE})
ENDIF(NOT CPACK_DEBIAN_PACKAGE_UPSTREAM_AUTHOR_NAME)
IF(NOT CPACK_DEBIAN_PACKAGE_UPSTREAM_URL)
set(CPACK_DEBIAN_PACKAGE_UPSTREAM_URL ${CPACK_DEBIAN_PACKAGE_HOMEPAGE})
ENDIF(NOT CPACK_DEBIAN_PACKAGE_UPSTREAM_URL)
IF(NOT CPACK_DEBIAN_PACKAGE_UPSTREAM_COPYRIGHT_YEAR)
execute_process(COMMAND date +%Y OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_UPSTREAM_COPYRIGHT_YEAR)
STRING(REPLACE "\n" "" CPACK_DEBIAN_PACKAGE_UPSTREAM_COPYRIGHT_YEAR ${CPACK_DEBIAN_PACKAGE_UPSTREAM_COPYRIGHT_YEAR})
ENDIF(NOT CPACK_DEBIAN_PACKAGE_UPSTREAM_COPYRIGHT_YEAR)
execute_process(COMMAND date +%Y OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_YEAR)
STRING(REPLACE "\n" "" CPACK_DEBIAN_PACKAGE_YEAR ${CPACK_DEBIAN_PACKAGE_YEAR})
execute_process(COMMAND date -R OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_DATE)
STRING(REPLACE "\n" "" CPACK_DEBIAN_PACKAGE_DATE ${CPACK_DEBIAN_PACKAGE_DATE})
set(POSSIBLE_LICENSES gpl lgpl bsd apache)
list(FIND POSSIBLE_LICENSES ${CPACK_DEBIAN_PACKAGE_LICENSE} CPACK_DEBIAN_PACKAGE_LICENSE_FOUND)
IF(CPACK_DEBIAN_PACKAGE_LICENSE_FOUND EQUAL "-1")
message(FATAL_ERROR "License ${CPACK_DEBIAN_PACKAGE_LICENSE} is unknown.")
ENDIF(CPACK_DEBIAN_PACKAGE_LICENSE_FOUND EQUAL "-1")
find_path(COPYRIGHT_FILES_DIRECTORY copyright.${CPACK_DEBIAN_PACKAGE_LICENSE} PATHS ${CMAKE_MODULE_PATH})
execute_process(COMMAND ${CMAKE_COMMAND} -E
copy ${COPYRIGHT_FILES_DIRECTORY}/copyright.${CPACK_DEBIAN_PACKAGE_LICENSE} ${DEBIAN_COPYRIGHT}
)
# Here also CONFIGURE_FILE might be better
FILE(READ ${DEBIAN_COPYRIGHT} COPYRIGHT_TEMP)
STRING(REPLACE "<Maintainer>" ${CPACK_DEBIAN_PACKAGE_MAINTAINER} COPYRIGHT_TEMP ${COPYRIGHT_TEMP})
STRING(REPLACE "<Date>" ${CPACK_DEBIAN_PACKAGE_DATE} COPYRIGHT_TEMP ${COPYRIGHT_TEMP})
STRING(REPLACE "<Year>" ${CPACK_DEBIAN_PACKAGE_YEAR} COPYRIGHT_TEMP ${COPYRIGHT_TEMP})
STRING(REPLACE "<UpstreamURL>" ${CPACK_DEBIAN_PACKAGE_UPSTREAM_URL} COPYRIGHT_TEMP ${COPYRIGHT_TEMP})
STRING(REPLACE "<UpstreamAuthor>" ${CPACK_DEBIAN_PACKAGE_UPSTREAM_AUTHOR} COPYRIGHT_TEMP ${COPYRIGHT_TEMP})
STRING(REPLACE "<YearUpstreamCopyright>" ${CPACK_DEBIAN_PACKAGE_UPSTREAM_COPYRIGHT_YEAR} COPYRIGHT_TEMP ${COPYRIGHT_TEMP})
STRING(REPLACE "<UpstreamAuthorName>" ${CPACK_DEBIAN_PACKAGE_UPSTREAM_AUTHOR_NAME} COPYRIGHT_TEMP ${COPYRIGHT_TEMP})
FILE(WRITE ${DEBIAN_COPYRIGHT} ${COPYRIGHT_TEMP})
##############################################################################
# debian/${CPACK_DEBIAN_PACKAGE_NAME}.install
set(DEBIAN_INSTALL_FILE ${DEBIAN_SOURCE_DIR}/debian/${CPACK_DEBIAN_PACKAGE_NAME}.install)
foreach(INSTALL_UNIT ${CPACK_DEBIAN_PACKAGE_INSTALL})
file(APPEND ${DEBIAN_INSTALL_FILE} "debian/tmp${INSTALL_UNIT}\n")
endforeach(INSTALL_UNIT ${CPACK_DEBIAN_PACKAGE_INSTALL})
##############################################################################
# debian/${CPACK_DEBIAN_PACKAGE_NAME}.docs
set(DEBIAN_DOCS_FILE ${DEBIAN_SOURCE_DIR}/debian/${CPACK_DEBIAN_PACKAGE_NAME}.docs)
foreach(INSTALL_UNIT ${CPACK_DEBIAN_PACKAGE_DOCS})
file(APPEND ${DEBIAN_DOCS_FILE} "debian/tmp${INSTALL_UNIT}\n")
endforeach(INSTALL_UNIT ${CPACK_DEBIAN_PACKAGE_DOCS})
##############################################################################
# debian/${CPACK_DEBIAN_PACKAGE_NAME}.manpages
set(DEBIAN_MANPAGES_FILE ${DEBIAN_SOURCE_DIR}/debian/${CPACK_DEBIAN_PACKAGE_NAME}.manpages)
foreach(INSTALL_UNIT ${CPACK_DEBIAN_PACKAGE_MANPAGES})
file(APPEND ${DEBIAN_MANPAGES_FILE} "debian/tmp${INSTALL_UNIT}\n")
endforeach(INSTALL_UNIT ${CPACK_DEBIAN_PACKAGE_MANPAGES})
foreach(COMPONENT ${CPACK_COMPONENTS_ALL})
string(TOUPPER ${COMPONENT} UPPER_COMPONENT)
##############################################################################
# debian/${CPACK_DEBIAN_PACKAGE_NAME}-${COMPONENT}.install
set(DEBIAN_INSTALL_FILE ${DEBIAN_SOURCE_DIR}/debian/${CPACK_DEBIAN_PACKAGE_NAME}-${COMPONENT}.install)
foreach(INSTALL_UNIT ${CPACK_COMPONENT_${UPPER_COMPONENT}_INSTALL})
file(APPEND ${DEBIAN_INSTALL_FILE} "debian/tmp${INSTALL_UNIT}\n")
endforeach(INSTALL_UNIT ${CPACK_COMPONENT_${UPPER_COMPONENT}_INSTALL})
##############################################################################
# debian/${CPACK_DEBIAN_PACKAGE_NAME}-${COMPONENT}.docs
set(DEBIAN_DOCS_FILE ${DEBIAN_SOURCE_DIR}/debian/${CPACK_DEBIAN_PACKAGE_NAME}-${COMPONENT}.docs)
foreach(INSTALL_UNIT ${CPACK_COMPONENT_${UPPER_COMPONENT}_DOCS})
file(APPEND ${DEBIAN_DOCS_FILE} "debian/tmp${INSTALL_UNIT}\n")
endforeach(INSTALL_UNIT ${CPACK_COMPONENT_${UPPER_COMPONENT}_DOCS})
##############################################################################
# debian/${CPACK_DEBIAN_PACKAGE_NAME}-${COMPONENT}.manpages
set(DEBIAN_MANPAGES_FILE ${DEBIAN_SOURCE_DIR}/debian/${CPACK_DEBIAN_PACKAGE_NAME}-${COMPONENT}.manpages)
foreach(INSTALL_UNIT ${CPACK_COMPONENT_${UPPER_COMPONENT}_MANPAGES})
file(APPEND ${DEBIAN_MANPAGES_FILE} "debian/tmp${INSTALL_UNIT}\n")
endforeach(INSTALL_UNIT ${CPACK_COMPONENT_${UPPER_COMPONENT}_MANPAGES})
endforeach(COMPONENT ${CPACK_COMPONENTS_ALL})
##############################################################################
# debian/rules
set(DEBIAN_RULES ${DEBIAN_SOURCE_DIR}/debian/rules)
file(WRITE ${DEBIAN_RULES}
"#!/usr/bin/make -f\n"
"\n"
"BUILDDIR = build_dir\n"
"\n"
"build:\n"
" mkdir $(BUILDDIR)\n"
" cd $(BUILDDIR); cmake ..\n"
" cd $(BUILDDIR); ${CPACK_DEBIAN_CUSTOM_BUILD_COMMAND}\n"
" make -C $(BUILDDIR) preinstall\n"
" touch build\n"
"\n"
"binary: binary-indep binary-arch\n"
"\n"
"binary-indep: build\n"
"\n"
"binary-arch: build\n"
" cd $(BUILDDIR); cmake -DCMAKE_INSTALL_PREFIX=../debian/tmp/usr -P cmake_install.cmake\n"
" dh_testdir\n"
" dh_testroot\n"
" dh_installchangelogs\n"
" dh_installdocs\n"
" dh_installman\n"
" dh_install\n"
" dh_link\n"
" dh_strip\n"
" dh_compress\n"
" dh_fixperms\n"
" dh_listpackages\n"
" dh_makeshlibs\n"
" dh_gencontrol\n"
" dh_md5sums\n"
" dh_builddeb\n"
)
# sh_libs is not resolved. Maybe OK, maybe wrong. This is a try.
# " dpkg-shlibdeps -e./debian/tmp/usr/lib/libglobalplatform.so\n"
# " dh_shlibdeps\n"
# " mkdir debian/tmp/DEBIAN\n"
#" dpkg-gensymbols -plibglobalplatform\n"
# " dpkg-shlibdeps -elibglobalplatform\n"
# " dpkg-gencontrol -p${CPACK_DEBIAN_PACKAGE_NAME}\n"
# " dpkg --build debian/tmp ..\n"
foreach(COMPONENT ${CPACK_COMPONENTS_ALL})
set(PATH debian/tmp_${COMPONENT})
set(PACKAGE ${CPACK_DEBIAN_PACKAGE_NAME}-${COMPONENT})
file(APPEND ${DEBIAN_RULES}
" cd $(BUILDDIR); cmake -DCOMPONENT=${COMPONENT} -DCMAKE_INSTALL_PREFIX=../${PATH}/usr -P cmake_install.cmake\n"
" dh_testdir\n"
" dh_testroot\n"
" dh_installchangelogs\n"
" dh_installdocs\n"
" dh_installman\n"
" dh_install\n"
" dh_link\n"
" dh_strip\n"
" dh_compress\n"
" dh_fixperms\n"
" dh_listpackages\n"
" dh_makeshlibs\n"
" dh_gencontrol\n"
" dh_md5sums\n"
" dh_builddeb\n"
)
endforeach(COMPONENT ${CPACK_COMPONENTS_ALL})
# sh_libs is not resolved. Maybe OK, maybe wrong. This is a try.
# " dpkg-shlibdeps -e./debian/tmp/usr/lib/libglobalplatform.so\n"
# " dh_shlibdeps\n"
# " mkdir ${PATH}/DEBIAN\n"
# " dh_shlibdeps -L libglobalplatform6 -l ../debian/tmp/usr/lib\n"
# " dpkg-gensymbols -plibglobalplatform -P${PATH}\n"
# " dpkg-shlibdeps -elibglobalplatform\n"
# " dpkg-gencontrol -p${PACKAGE} -P${PATH}\n"
# " dpkg --build ${PATH} ..\n"
file(APPEND ${DEBIAN_RULES}
"\n"
"clean:\n"
" rm -f build\n"
" rm -rf $(BUILDDIR)\n"
"\n"
".PHONY: binary binary-arch binary-indep clean\n"
)
execute_process(COMMAND chmod +x ${DEBIAN_RULES})
##############################################################################
# debian/compat - 5 is used to also support dapper
file(WRITE ${DEBIAN_SOURCE_DIR}/debian/compat "5")
##############################################################################
# debian/source/format
IF(CPACK_DEBIAN_NATIVE_PACKAGE)
file(WRITE ${DEBIAN_SOURCE_DIR}/debian/source/format "3.0 (native)")
ELSE(CPACK_DEBIAN_NATIVE_PACKAGE)
file(WRITE ${DEBIAN_SOURCE_DIR}/debian/source/format "3.0 (quilt)")
ENDIF(CPACK_DEBIAN_NATIVE_PACKAGE)
##############################################################################
# debian/changelog
set(DEBIAN_CHANGELOG ${DEBIAN_SOURCE_DIR}/debian/changelog)
execute_process(COMMAND date -R OUTPUT_VARIABLE DATE_TIME)
file(WRITE ${DEBIAN_CHANGELOG}
"${CPACK_DEBIAN_PACKAGE_NAME} (${VERSION_NAME}) ${CPACK_DEBIAN_PACKAGE_DISTRIBUTION}; urgency=low\n\n"
" * Package built with CMake\n\n"
" -- ${CPACK_DEBIAN_PACKAGE_MAINTAINER} ${DATE_TIME}"
)
#INSTALL(FILES ${CMAKE_CURRENT_BUILD_DIR}/*.so DESTINATION lib${LIB_SUFFIX})
##############################################################################
# debuild -S
set(DEB_SOURCE_CHANGES
${CPACK_DEBIAN_PACKAGE_NAME}_${VERSION_NAME}_source.changes
)
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/Debian/${DEB_SOURCE_CHANGES}
COMMAND ${DEBUILD_EXECUTABLE} -S
DEPENDS ${CMAKE_BINARY_DIR}/Debian/${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}.orig.tar.gz
WORKING_DIRECTORY ${DEBIAN_SOURCE_DIR}
)
IF(${CPACK_DEBIAN_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION} STREQUAL ${CPACK_SOURCE_PACKAGE_FILE_NAME})
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/Debian/${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}.orig.tar.gz
COMMAND make -C ${CMAKE_BINARY_DIR} package_source
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz ${CMAKE_BINARY_DIR}/Debian/${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}.orig.tar.gz
COMMAND tar xzf ${CMAKE_BINARY_DIR}/Debian/${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}.orig.tar.gz -C ${CMAKE_BINARY_DIR}/Debian/
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
)
ELSE(${CPACK_DEBIAN_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION} STREQUAL ${CPACK_SOURCE_PACKAGE_FILE_NAME})
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/Debian/${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}.orig.tar.gz
COMMAND make -C ${CMAKE_BINARY_DIR} package_source
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz ${CMAKE_BINARY_DIR}/Debian/${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}.orig.tar.gz
COMMAND tar xzf ${CMAKE_BINARY_DIR}/Debian/${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}.orig.tar.gz -C ${CMAKE_BINARY_DIR}/Debian/
COMMAND cp -unR ${CMAKE_BINARY_DIR}/Debian/${CPACK_SOURCE_PACKAGE_FILE_NAME}/* ${CMAKE_BINARY_DIR}/Debian/${CPACK_DEBIAN_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
)
ENDIF(${CPACK_DEBIAN_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION} STREQUAL ${CPACK_SOURCE_PACKAGE_FILE_NAME})
add_custom_target(package_ubuntu
DEPENDS ${CMAKE_BINARY_DIR}/Debian/${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}.orig.tar.gz ${CMAKE_BINARY_DIR}/Debian/${DEB_SOURCE_CHANGES}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/Debian
)
##############################################################################
# dput ppa:your-lp-id/ppa <source.changes>
IF(CPACK_DEBIAN_PACKAGE_TYPE STREQUAL "snapshot")
set(USED_DPUT_HOST ${DPUT_SNAPSHOT_HOST})
ELSE(CPACK_DEBIAN_PACKAGE_TYPE STREQUAL "snapshot")
set(USED_DPUT_HOST ${DPUT_HOST})
ENDIF(CPACK_DEBIAN_PACKAGE_TYPE STREQUAL "snapshot")
add_custom_target(dput ${DPUT_EXECUTABLE} ${USED_DPUT_HOST} ${DEB_SOURCE_CHANGES}
DEPENDS ${CMAKE_BINARY_DIR}/Debian/${DEB_SOURCE_CHANGES}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/Debian
)
# Also clean Debian directory
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${DEBIAN_SOURCE_DIR})

42
cmake/copyright.bsd Normal file
View File

@ -0,0 +1,42 @@
This work was packaged for Debian by:
<Maintainer> on <Date>
It was downloaded from
<UpstreamURL>
Upstream Author(s):
<UpstreamAuthor>
Copyright:
Copyright (C) <YearUpstreamCopyright> <UpstreamAuthorName>
License:
Redistribution and use in source and binary forms, with or without
modification, are permitted under the terms of the BSD License.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
On Debian systems, the complete text of the BSD License can be
found in `/usr/share/common-licenses/BSD'.
The Debian packaging is:
Copyright (C) <Year> <Maintainer>
and is licensed under the GPL version 3,
see `/usr/share/common-licenses/GPL-3'.