blob: 7420ef8c814038beaddc8d92340bcc9b3db26682 (
plain) (
tree)
|
|
#!/bin/bash
# Script to automate backporting for CRAN
# Creates a source package and binary packages for the following architecture
ARCH=i386
export ARCH
# R version against which the software is compiled
iteration=0
Rversion=3.5.0
# Set required r-base-dev version for packages build-depending on R
rbasedev="r-base-dev (>= $Rversion)"
# Where the buildresults should be stored and where to look for current backports
rcrandir=/home/jranke/svn/website/www/ranke/r-cran
# Author: Johannes Ranke <jranke@uni-bremen.de>
# Preconditions:
# - up to date R version specified above, for packages depending on R
# - sudo and pbuilder configuration (see README)
# - sid sources in /etc/apt/sources/list
# - cdbs installed (and maybe more)
# - shell variables DEBEMAIL and DEBFULLNAME
usage()
{
echo "Usage: ./backport [options] sourcepackage stretch|jessie"
echo "Options:"
echo " -k, --keep Keep copied source package and directory used for package building"
echo " -s, --skip Skip apt-get update/upgrade and pbuilder update"
}
# Loop over options
skip=false
keep=false
while test -n "${1}"; do
case "$1" in
-k | --keep)
keep=true
shift
;;
-s | --skip)
skip=true
shift
;;
-*)
echo "Error: Unknown option: $1" >&2
usage
exit 1
;;
*) # No more options
break
;;
esac
done
# Positional arguments
if [ $# -lt 2 ]; then usage; exit 1; fi
pkg=$1
DIST=$2
# Validate distribution argument
if [ $DIST != "stretch" ] && [ $DIST != "jessie" ]; then usage; exit 1; fi
export DIST
# Remove previously extracted sources
if [ -d $pkg-* ]
then
sudo rm -rf `ls -d $pkg-*`
fi
# Get current source from unstable
if [ "$skip" = false ]
then
sudo apt-get update
sudo apt-get upgrade
fi
sudo apt-get source $pkg
# Copy sources to $DIST directory to enable parallel builds
mkdir -p $DIST
cp -r $pkg\_* $DIST
cp -r $pkg-* $DIST
# Go to package building directory
cd $DIST/$pkg-*
# Determine the version of the upstream Debian package
upstreamversion=`dpkg-parsechangelog | grep ^Version | cut -f2 -d " "`
# Define the version to be used for the backport
cranversion=$upstreamversion"~"$DIST"cran.$iteration"
# Only do a backport if not already available
# This avoids recompiling packages resulting in different sizes which
# would make an update of the archive index inside the loop in backport_others
# necessary
new_dsc=$rcrandir/$DIST-cran35/${pkg}_${cranversion}.dsc
logfile=$rcrandir/$DIST-cran35/${pkg}_${cranversion}_${ARCH}.build
if [ -e $new_dsc ]; then
echo backport.sh: $new_dsc already present
else
echo backport.sh: Upstream version is $upstreamversion
echo backport.sh: New CRAN version is $cranversion
# Add new version to changelog
dch -v "${cranversion}" --force-distribution -D $DIST-cran -b "Backport from Debian unstable to Debian $DIST"
# Adapt build dependency on r-base-dev if present
if grep -q "^Build-Depends.*r-base-dev" debian/control
then
ssed -i -R "/^Build-Depends/s/r-base-dev \(>= .*?\)/$rbasedev/" debian/control
ssed -i -R "/^Build-Depends-Indep/s/r-base-dev \(>= .*?\)/$rbasedev/" debian/control
dch -a "debian/control: Adapt build dependency on r-base-dev to current backport"
fi
# Check for a script doing modifications required for backporting
script=../\_reverts\_$pkg\.sh
if [ -f $script ]; then source $script; fi
if [ "$skip" = false ]
then
sudo -E pbuilder update \
--override-config \
--distribution $DIST \
--basetgz /var/cache/pbuilder/$DIST-$ARCH-base.tgz \
--aptcache /var/cache/pbuilder/$DIST-$ARCH/aptcache
fi
sudo -E pdebuild --debbuildopts '-sa' \
--buildresult $rcrandir/$DIST-cran35/ \
--logfile $logfile \
-- --override-config \
--distribution $DIST --basetgz /var/cache/pbuilder/$DIST-$ARCH-base.tgz \
--aptcache /var/cache/pbuilder/$DIST-$ARCH/aptcache \
--buildplace /var/cache/pbuilder/$DIST-$ARCH/build
if [ $? -ne 0 ]; then
exit
fi
fi
cd ../..
# Clean sources from $DIST directory
if [ "$keep" = false ]
then
rm -f $DIST/$pkg\_*
rm -rf $DIST/$pkg-*
fi
|