blob: eb19a9da86bb26f7db206be132d3e4c9ee9692e2 [file] [log] [blame]
#!/bin/bash -e
# $Id: make-deb 2770 2013-05-30 08:46:46Z dreibh $
#
# Debian Packaging Scripts
# Copyright (C) 2002-2017 by Thomas Dreibholz
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Contact: dreibh@iem.uni-due.de
# ---------------------------------------------------------------------------
# USAGE:
# ./make-deb default => for Ubuntu REVU
# Note: Replaces "Maintainer" by Ubuntu Developers and
# writes original maintainer entry to "XSBC-Original-Maintainer"
# ./make-deb unstable => for Debian Mentors
# ./make-deb natty|maverick|... => for Launchpad PPA
# ---------------------------------------------------------------------------
DISTRIBUTIONS=`\
( \
while [ x$1 != "x" ] ; do \
echo $1
shift
done \
) | sort -u`
if [ "$DISTRIBUTIONS" == "" ] ; then
DISTRIBUTIONS="default"
fi
CHANGELOG_HEADER="`head -n1 debian/changelog`"
# The package name, e.g. MyApplication
PACKAGE=`echo $CHANGELOG_HEADER | sed -e "s/(.*//" -e "s/ //g"`
# The package distribution, e.g. precise, raring, ...
PACKAGE_DISTRIBUTION=`echo $CHANGELOG_HEADER | sed -e "s/[^)]*)//" -e "s/;.*//g" -e "s/ //g"`
# The package's version, e.g. 1.2.3-1ubuntu1
PACKAGE_VERSION=`echo $CHANGELOG_HEADER | sed -e "s/.*(//" -e "s/).*//" -e "s/ //g" -e "s/ //g" -e "s/^[0-9]://g"`
# The package's output version, e.g. 1.2.3-1ubuntu
OUTPUT_VERSION=`echo $PACKAGE_VERSION | sed -e "s/\(ubuntu\|ppa\)[0-9]*$/\1/"`
# The package's Debian version, e.g. 1.2.3-1
DEBIAN_VERSION=`echo $OUTPUT_VERSION | sed -e "s/\(ubuntu\|ppa\)$//1"`
# The package's upstream version, e.g. 1.2.3
UPSTREAM_VERSION=`echo $DEBIAN_VERSION | sed -e "s/-[0-9]*$//"`
# The package's plain upstream version, e.g. 1.2.3 (without e.g. ~svn<xxxx>)
PLAIN_VERSION=`echo $UPSTREAM_VERSION | sed -e "s/\([0-9\.]*\)[-+~].*$/\1/"`
echo -e "\x1b[34m######################################################################\x1b[0m"
echo -e "\x1b[34mCHANGELOG_HEADER: $CHANGELOG_HEADER\x1b[0m"
echo -e "\x1b[34mPACKAGE: $PACKAGE\x1b[0m"
echo -e "\x1b[34mPACKAGE_DISTRIBUTION: $PACKAGE_DISTRIBUTION\x1b[0m"
echo -e "\x1b[34mPACKAGE_VERSION $PACKAGE_VERSION\x1b[0m"
echo -e "\x1b[34mOUTPUT_VERSION: $OUTPUT_VERSION\x1b[0m"
echo -e "\x1b[34mDEBIAN_VERSION: $DEBIAN_VERSION\x1b[0m"
echo -e "\x1b[34mUPSTREAM_VERSION: $UPSTREAM_VERSION\x1b[0m"
echo -e "\x1b[34mPLAIN_VERSION: $PLAIN_VERSION\x1b[0m"
echo -e "\x1b[34m######################################################################\x1b[0m"
if [ ! -e ./debian.conf ] ; then
echo >&2 "ERROR: debian.conf does not exist -> no configuration for the new package!"
exit 1
fi
. ./debian.conf
echo -e ""
echo -e "\x1b[34m`date +%FT%H:%M:%S`: ====== Calling wrap-and-sort ==========================================\x1b[0m"
echo -e ""
wrap-and-sort -a -v || exit 1
echo -e ""
echo -e "\x1b[34m`date +%FT%H:%M:%S`: ====== Creating upstream package ======================================\x1b[0m"
echo -e ""
UPSTREAM_PACKAGE="`find . -maxdepth 1 -name "$PACKAGE-*.gz" -printf '%f'`"
UPSTREAM_PACKAGE_TYPE="gz"
if [ ! -e "$UPSTREAM_PACKAGE" ] ; then
UPSTREAM_PACKAGE="`find . -maxdepth 1 -name "$PACKAGE-*.bz2" -printf '%f'`"
UPSTREAM_PACKAGE_TYPE="bz2"
fi
if [ ! -e "$UPSTREAM_PACKAGE" ]; then
rm -f $PACKAGE-*.gz $PACKAGE"_"*.gz $PACKAGE-*.bz2 $PACKAGE"_"*.bz2
echo -e "\x1b[34m------ Running MAKE_DIST ... ------\x1b[0m"
echo "\$ $MAKE_DIST"
eval "$MAKE_DIST"
echo -e "\x1b[34m------ Looking for upstream package ... ------\x1b[0m"
UPSTREAM_PACKAGE="`find . -maxdepth 1 -name $PACKAGE-*.gz -printf '%f'`"
UPSTREAM_PACKAGE_TYPE="gz"
if [ ! -e "$UPSTREAM_PACKAGE" ] ; then
UPSTREAM_PACKAGE="`find . -maxdepth 1 -name $PACKAGE-*.bz2 -printf '%f'`"
UPSTREAM_PACKAGE_TYPE="bz2"
fi
if [ ! -e "$UPSTREAM_PACKAGE" ] ; then
echo -e "\x1b[34mERROR: No upstrem package found!\x1b[0m"
exit 1
fi
fi
echo -e ""
echo -e "\x1b[34m==> Upstream package is $UPSTREAM_PACKAGE (type is $UPSTREAM_PACKAGE_TYPE)\x1b[0m"
echo -e ""
echo -e ""
echo -e "\x1b[34m`date +%FT%H:%M:%S`: ====== Creating packages ==============================================\x1b[0m"
for DISTRIBUTION in $DISTRIBUTIONS ; do
echo -e ""
echo -e "\x1b[34m------ Creating package for $DISTRIBUTION ------\x1b[0m"
success=1
cp ${UPSTREAM_PACKAGE} ${PACKAGE}_${UPSTREAM_VERSION}.orig.tar.$UPSTREAM_PACKAGE_TYPE
cp ${UPSTREAM_PACKAGE} ${PACKAGE}_$OUTPUT_VERSION.orig.tar.$UPSTREAM_PACKAGE_TYPE
cp ${UPSTREAM_PACKAGE} ${PACKAGE}_$DEBIAN_VERSION.orig.tar.$UPSTREAM_PACKAGE_TYPE
rm -rf ${PACKAGE}-${UPSTREAM_VERSION}
rm -rf ${PACKAGE}-${UPSTREAM_VERSION}.orig
if [ "$UPSTREAM_PACKAGE_TYPE" = "gz" ] ; then
tar xzf ${UPSTREAM_PACKAGE}
elif [ "$UPSTREAM_PACKAGE_TYPE" = "bz2" ] ; then
tar xjf ${UPSTREAM_PACKAGE}
else
echo 2>&1 "ERROR: Bad archive format: $UPSTREAM_PACKAGE"
exit 1
fi
cp -r ${PACKAGE}-${UPSTREAM_VERSION} ${PACKAGE}-${UPSTREAM_VERSION}.orig
cp -r debian ${PACKAGE}-${UPSTREAM_VERSION}
find ${PACKAGE}-${UPSTREAM_VERSION} -name .svn | xargs --no-run-if-empty rm -rf
cd ${PACKAGE}-${UPSTREAM_VERSION}
success=0
if [ $success -ne 0 ] ; then
exit 1
fi
if [ "$DISTRIBUTION" != "default" ] ; then
if [ "$DISTRIBUTION" = "unstable" -o "$DISTRIBUTION" = "testing" -o "$DISTRIBUTION" = "stable" ] ; then
# Debian: Also remove Launchpad Bug IDs.
sed -e "s/$PACKAGE_DISTRIBUTION;/$DISTRIBUTION;/1" \
-e "s/\(ubuntu\|ppa\)[0-9]//1" \
-e "/(LP: #/D" \
<debian/changelog | ../filter-empty-entries "$DEBIAN_LAST_ENTRY" >debian/changelog.new
else
# Ubuntu PPA
# Naming example: 2.7.7-0ubuntu1~natty1~ppa0
# Ubuntu: Also remove Debian Bug IDs.
sed -e "s/$PACKAGE_DISTRIBUTION;/$DISTRIBUTION;/1" \
-e "s/$PACKAGE_VERSION/$PACKAGE_VERSION~${DISTRIBUTION}1~ppa0/1" \
-e "/(Closes: #/D" \
<debian/changelog | ../filter-empty-entries "$UBUNTU_LAST_ENTRY" >debian/changelog.new
# ------ Old distributions not supporting c++/regex style symbols --
if [ "$DISTRIBUTION" = "dapper" -o \
"$DISTRIBUTION" = "edgy" -o \
"$DISTRIBUTION" = "feisty" -o \
"$DISTRIBUTION" = "hardy" -o \
"$DISTRIBUTION" = "intrepid" -o \
"$DISTRIBUTION" = "jaunty" -o \
"$DISTRIBUTION" = "karmic" -o \
"$DISTRIBUTION" = "lucid" ] ; then
# Just skip the symbols ...
find debian/ -maxdepth 1 -name "*.symbols" | xargs --no-run-if-empty rm -f
fi
fi
mv debian/changelog.new debian/changelog
# ------ Old distributions not supporting new Debian format -----------
if [ "$DISTRIBUTION" = "dapper" -o \
"$DISTRIBUTION" = "edgy" -o \
"$DISTRIBUTION" = "feisty" -o \
"$DISTRIBUTION" = "hardy" -o \
"$DISTRIBUTION" = "intrepid" -o \
"$DISTRIBUTION" = "jaunty" ] ; then
rm -rf debian/source
fi
# ---------------------------------------------------------------------
else
# Ubuntu: Remove Debian Bug IDs.
sed -e "/(Closes: #/D" \
<debian/changelog >debian/changelog.new
mv debian/changelog.new debian/changelog
sed -e "s/^Maintainer:/Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>\nXSBC-Original-Maintainer:/g" <debian/control >debian/control.new
mv debian/control.new debian/control
fi
echo -e ""
echo -e "\x1b[34m------ Creating diff file $PACKAGE-$PACKAGE_VERSION.diff.gz ------\x1b[0m"
(
cd ..
diff -urN "--exclude=*~" "--exclude=.svn" "--exclude=.git" \
$PACKAGE-$UPSTREAM_VERSION.orig $PACKAGE-$UPSTREAM_VERSION \
| gzip -c >$PACKAGE-$PACKAGE_VERSION.diff.gz
)
echo -e ""
echo -e "\x1b[34m------ Building source package ------\x1b[0m"
# Without signature:
# debuild -us -uc
# For sources:
# debuild -S
# For binaries:
# debuild -b
# Use -i to ignore .svn files!
if [ "$SKIP_PACKAGE_SIGNING" = "" ] ; then
SKIP_PACKAGE_SIGNING=0
fi
if [ $SKIP_PACKAGE_SIGNING -eq 1 ] ; then
# Build source package without signature:
debuild -us -uc -S "-k$MAINTAINER" -i || exit 1
else
# Build source package including signature:
debuild -sa -S "-k$MAINTAINER" -i || exit 1
fi
# Important: In /etc/pbuilderrc, set COMPONENTS="main universe"!
# Important: After that, update with option "--override-config"!
# sudo pbuilder update --override-config
cd ..
if [ "$DISTRIBUTION" = "unstable" -o \
"$DISTRIBUTION" = "testing" -o \
"$DISTRIBUTION" = "stable" -o \
"$DISTRIBUTION" = "default" ] ; then
if [ "$DISTRIBUTION" = "default" ] ; then
version=${PACKAGE_VERSION}
else
version=${DEBIAN_VERSION}
fi
dscFile=`ls ${PACKAGE}_${version}.dsc | tail -n1`
else
dscFile=`ls ${PACKAGE}_${PACKAGE_VERSION}~${DISTRIBUTION}[0-9]~ppa[0-9].dsc | tail -n1`
fi
if [ ! -e $dscFile ] ; then
echo -e "\x1b[34mERROR: $dscFile has not been generated successfully -> Aborting!\x1b[0m"
exit 1
fi
done
if [ -e "$UPSTREAM_PACKAGE.asc" ] ; then
rm -f "$UPSTREAM_PACKAGE.asc"
fi
if [ "$SKIP_PACKAGE_SIGNING" != "" -a ! $SKIP_PACKAGE_SIGNING -eq 1 ] ; then
echo -e ""
echo -e "\x1b[34m`date +%FT%H:%M:%S`: ====== Sign upstream package ==========================================\x1b[0m"
echo -e ""
echo -e "\x1b[34mSigning upstream package $UPSTREAM_PACKAGE ...\x1b[0m"
gpg -sab "$UPSTREAM_PACKAGE"
fi
echo -e ""
echo -e "\x1b[34m`date +%FT%H:%M:%S`: ====== Command overview ===============================================\x1b[0m"
echo -e ""
echo -e "\x1b[34mUpload to PPA:\x1b[0m"
for DISTRIBUTION in $DISTRIBUTIONS ; do
if [ "$DISTRIBUTION" = "unstable" -o \
"$DISTRIBUTION" = "testing" -o \
"$DISTRIBUTION" = "stable" -o \
"$DISTRIBUTION" = "default" ] ; then
if [ "$DISTRIBUTION" = "default" ] ; then
ppa="revu"
version=${PACKAGE_VERSION}
else
ppa="mentors"
version=${DEBIAN_VERSION}
fi
changesFile=`ls ${PACKAGE}_${version}_source.changes | tail -n1`
else
ppa="ppa"
changesFile=`ls ${PACKAGE}_${PACKAGE_VERSION}~${DISTRIBUTION}[0-9]~ppa[0-9]_source.changes | tail -n1`
fi
echo -e "\x1b[34m dput $ppa $changesFile\x1b[0m"
done
echo -e ""
if [ -e make-symbols ] ; then
echo -e "\x1b[34m################################################################\x1b[0m"
echo -e "\x1b[34mDo not forget to run make-symbols after library version changes!\x1b[0m"
echo -e "\x1b[34m################################################################\x1b[0m"
echo -e ""
fi
echo -e "\x1b[34mBuild Test Commands:\x1b[0m"
for DISTRIBUTION in $DISTRIBUTIONS ; do
if [ "$DISTRIBUTION" = "unstable" -o \
"$DISTRIBUTION" = "testing" -o \
"$DISTRIBUTION" = "stable" -o \
"$DISTRIBUTION" = "default" ] ; then
if [ "$DISTRIBUTION" = "default" ] ; then
version=${PACKAGE_VERSION}
else
version=${DEBIAN_VERSION}
fi
changesFilesPattern="${PACKAGE}_${version}_*.changes"
dscFile=`ls ${PACKAGE}_${version}.dsc | tail -n1`
else
changesFilesPattern="${PACKAGE}_${PACKAGE_VERSION}~${DISTRIBUTION}[0-9]~ppa[0-9]_*.changes"
dscFile=`ls ${PACKAGE}_${PACKAGE_VERSION}~${DISTRIBUTION}[0-9]~ppa[0-9].dsc | tail -n1`
fi
echo -e "\x1b[34m sudo pbuilder build $dscFile && lintian -iIEv --pedantic /var/cache/pbuilder/result/$changesFilesPattern\x1b[0m"
done
echo -e ""