Skip to content
Snippets Groups Projects
make_debian_package.sh.in 3.58 KiB
#!/bin/bash

# Shell script to generate a debian package from a particular tag (configured during the cmake configuration).

#######################################################################################################################
#
# IMPORTANT NOTE:
#
# DO NOT MODIFY THIS FILE inside a project. Instead update the project-template repository and pull the change from
# there. Make sure to keep the file generic, since it will be used by other projects, too.
#
# If you have modified this file inside a project despite this warning, make sure to cherry-pick all your changes
# into the project-template repository immediately.
#
#######################################################################################################################

# This cmake.in file requires the following variables to be set:
# PACKAGE_BUILDVERSION_ENVIRONMENT_VARIABLE_NAME Environment variable which contains the build version.
#   Must not contain any hyphens.
# PACKAGE_BASE_NAME This is the debian package name, not the project name (e.g. libraries must start with lib,
#   all lover case, no underscore)
# PACKAGE_FULL_LIBRARY_VERSION The full version, incl. build version and patch version
# PACKAGE_GIT_URI The URI where to check out the source code
# PACKAGE_TAG_VERSION The tag for which the package is build
# PACKAGE_MESSAGE The message for the debian package log

#Check that the @PACKAGE_BUILDVERSION_ENVIRONMENT_VARIABLE_NAME@ variable is set, otherwise reject creating a package
if [ -z "$@PACKAGE_BUILDVERSION_ENVIRONMENT_VARIABLE_NAME@" ]; then
    echo Environment variable '@PACKAGE_BUILDVERSION_ENVIRONMENT_VARIABLE_NAME@' not set or empty. You need it to make a debian package!
    exit 1
fi

#drop out of the script if anything goes wrong (e.g. non-existen git tag)
set -e

#Create a working directory in order not to merge with the rest in the build directory
rm -rf debian_package
mkdir debian_package
cd debian_package

#Check out the correct tag from the master git repository.
#The local directory name has to follow the debian convention
# lowecasepackagenname_package.ver.sion
#Note, we first clone and then checkout the tag because the old git version on
#Ubuntu12.4 does not support to do it in one go.
BUILD_DIR_NAME=@PACKAGE_BASE_NAME@_@PACKAGE_FULL_LIBRARY_VERSION@
git clone @CMAKE_SOURCE_DIR@ ${BUILD_DIR_NAME}
( cd  ${BUILD_DIR_NAME} &&\
  git checkout @PACKAGE_TAG_VERSION@ &&\
  rm -rf .git )
#Debian convention: file has to end on .orig.tar.gz
tar -czf  ${BUILD_DIR_NAME}.orig.tar.gz  ${BUILD_DIR_NAME}

#Copy the prepared debian packaging config files to the source code
#directroy
cp -r ../debian_from_template  ${BUILD_DIR_NAME}/debian
cd ${BUILD_DIR_NAME}

#The package versions for doocs / Ubuntu contain the codename of the distribution. Get it from the system.
CODENAME=`lsb_release -c | sed "{s/Codename:\s*//}"`

#Before building the package we will update the changelog. This is easier from a shell script
#because debchange does the right format and the current date, user name and email automatically for us.
#Use the NAME and EMAIL environment variables to get correct values if needed (usually the email is
# user@host instead of first.last@institute, for instance killenb@mskpcx18571.desy.de instead of martin.killenberg@desy.de).
debchange --create --package @PACKAGE_BASE_NAME@ -v @PACKAGE_FULL_LIBRARY_VERSION@-${@PACKAGE_BUILDVERSION_ENVIRONMENT_VARIABLE_NAME@} --distribution ${CODENAME} @PACKAGE_MESSAGE@

#Now everything is prepared and we can actually build the package.
#If you have a gpg signature you can remove the -us and -uc flags and sign the package.
dpkg-buildpackage -rfakeroot -us -uc