#!/bin/bash # Prepare to build a Debian package. # Jose Luis Blanco Claraco, 2019 (for GTSAM) # Jose Luis Blanco Claraco, 2008-2018 (for MRPT) set -e # end on error #set -x # for debugging APPEND_SNAPSHOT_NUM=0 IS_FOR_UBUNTU=0 APPEND_LINUX_DISTRO="" VALUE_EXTRA_CMAKE_PARAMS="" while getopts "sud:c:" OPTION do case $OPTION in s) APPEND_SNAPSHOT_NUM=1 ;; u) IS_FOR_UBUNTU=1 ;; d) APPEND_LINUX_DISTRO=$OPTARG ;; c) VALUE_EXTRA_CMAKE_PARAMS=$OPTARG ;; ?) echo "Unknown command line argument!" exit 1 ;; esac done if [ -f CMakeLists.txt ]; then source package_scripts/prepare_debian_gen_snapshot_version.sh else echo "Error: cannot find CMakeList.txt. This script is intended to be run from the root of the source tree." exit 1 fi # Append snapshot? if [ $APPEND_SNAPSHOT_NUM == "1" ]; then CUR_SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" source $CUR_SCRIPT_DIR/prepare_debian_gen_snapshot_version.sh # populate GTSAM_SNAPSHOT_VERSION GTSAM_VERSION_STR="${GTSAM_VERSION_STR}~snapshot${GTSAM_SNAPSHOT_VERSION}${APPEND_LINUX_DISTRO}" else GTSAM_VERSION_STR="${GTSAM_VERSION_STR}${APPEND_LINUX_DISTRO}" fi # Call prepare_release GTSAMSRC=`pwd` if [ -f $HOME/gtsam_release/gtsam*.tar.gz ]; then echo "## release file already exists. Reusing it." else source package_scripts/prepare_release.sh echo echo "## Done prepare_release.sh" fi echo "=========== Generating GTSAM ${GTSAM_VER_MMP} Debian package ==============" cd $GTSAMSRC set -x if [ -z "$GTSAM_DEB_DIR" ]; then GTSAM_DEB_DIR="$HOME/gtsam_debian" fi GTSAM_EXTERN_DEBIAN_DIR="$GTSAMSRC/debian/" GTSAM_EXTERN_UBUNTU_PPA_DIR="$GTSAMSRC/debian/" if [ -f ${GTSAM_EXTERN_DEBIAN_DIR}/control ]; then echo "Using debian dir: ${GTSAM_EXTERN_DEBIAN_DIR}" else echo "ERROR: Cannot find ${GTSAM_EXTERN_DEBIAN_DIR}" exit 1 fi GTSAM_DEBSRC_DIR=$GTSAM_DEB_DIR/gtsam-${GTSAM_VERSION_STR} echo "GTSAM_VERSION_STR: ${GTSAM_VERSION_STR}" echo "GTSAM_DEBSRC_DIR: ${GTSAM_DEBSRC_DIR}" # Prepare a directory for building the debian package: # rm -fR $GTSAM_DEB_DIR || true mkdir -p $GTSAM_DEB_DIR || true # Orig tarball: echo "Copying orig tarball: gtsam_${GTSAM_VERSION_STR}.orig.tar.gz" cp $HOME/gtsam_release/gtsam*.tar.gz $GTSAM_DEB_DIR/gtsam_${GTSAM_VERSION_STR}.orig.tar.gz cd ${GTSAM_DEB_DIR} tar -xf gtsam_${GTSAM_VERSION_STR}.orig.tar.gz if [ ! -d "${GTSAM_DEBSRC_DIR}" ]; then mv gtsam-* ${GTSAM_DEBSRC_DIR} # fix different dir names for Ubuntu PPA packages fi if [ ! -f "${GTSAM_DEBSRC_DIR}/CMakeLists.txt" ]; then echo "*ERROR*: Seems there was a problem copying sources to ${GTSAM_DEBSRC_DIR}... aborting script." exit 1 fi cd ${GTSAM_DEBSRC_DIR} # Copy debian directory: #mkdir debian cp -r ${GTSAM_EXTERN_DEBIAN_DIR}/* debian # Use modified control & rules files for Ubuntu PPA packages: #if [ $IS_FOR_UBUNTU == "1" ]; #then # already done: cp ${GTSAM_EXTERN_UBUNTU_PPA_DIR}/control.in debian/ # Ubuntu: force use of gcc-7: #sed -i '9i\export CXX=/usr/bin/g++-7\' debian/rules #sed -i '9i\export CC=/usr/bin/gcc-7\' debian/rules7 #fi # Export signing pub key: mkdir debian/upstream/ gpg --export --export-options export-minimal --armor > debian/upstream/signing-key.asc # Parse debian/ control.in --> control #mv debian/control.in debian/control #sed -i "s/@GTSAM_VER_MM@/${GTSAM_VER_MM}/g" debian/control # Replace the text "REPLACE_HERE_EXTRA_CMAKE_PARAMS" in the "debian/rules" file # with: ${${VALUE_EXTRA_CMAKE_PARAMS}} RULES_FILE=debian/rules sed -i -e "s/REPLACE_HERE_EXTRA_CMAKE_PARAMS/${VALUE_EXTRA_CMAKE_PARAMS}/g" $RULES_FILE echo "Using these extra parameters for CMake: '${VALUE_EXTRA_CMAKE_PARAMS}'" # Strip my custom files... rm debian/*.new || true # Figure out the next Debian version number: echo "Detecting next Debian version number..." CHANGELOG_UPSTREAM_VER=$( dpkg-parsechangelog | sed -n 's/Version:.*\([0-9]\.[0-9]*\.[0-9]*.*snapshot.*\)-.*/\1/p' ) CHANGELOG_LAST_DEBIAN_VER=$( dpkg-parsechangelog | sed -n 's/Version:.*\([0-9]\.[0-9]*\.[0-9]*\).*-\([0-9]*\).*/\2/p' ) echo " -> PREVIOUS UPSTREAM: $CHANGELOG_UPSTREAM_VER -> New: ${GTSAM_VERSION_STR}" echo " -> PREVIOUS DEBIAN VERSION: $CHANGELOG_LAST_DEBIAN_VER" # If we have the same upstream versions, increase the Debian version, otherwise create a new entry: if [ "$CHANGELOG_UPSTREAM_VER" = "$GTSAM_VERSION_STR" ]; then NEW_DEBIAN_VER=$[$CHANGELOG_LAST_DEBIAN_VER + 1] echo "Changing to a new Debian version: ${GTSAM_VERSION_STR}-${NEW_DEBIAN_VER}" DEBCHANGE_CMD="--newversion ${GTSAM_VERSION_STR}-${NEW_DEBIAN_VER}" else DEBCHANGE_CMD="--newversion ${GTSAM_VERSION_STR}-1" fi echo "Adding a new entry to debian/changelog..." DEBEMAIL="Jose Luis Blanco Claraco " debchange $DEBCHANGE_CMD -b --distribution unstable --force-distribution New version of upstream sources. echo "Copying back the new changelog to a temporary file in: ${GTSAM_EXTERN_DEBIAN_DIR}changelog.new" cp debian/changelog ${GTSAM_EXTERN_DEBIAN_DIR}changelog.new set +x echo "==============================================================" echo "Now, you can build the source Deb package with 'debuild -S -sa'" echo "==============================================================" cd .. ls -lh exit 0