summaryrefslogtreecommitdiff
path: root/backport
blob: 7cbbee0c986bbae83dbcd062daf6b149d3b3c1a0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/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
Rversion=3.2.3
reposversion="cran3"

# Where the buildresults should be stored
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 squeeze|wheezy|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 != "squeeze" ] && [ $DIST != "wheezy" ] && [ $DIST != "jessie" ]; then usage; exit 1; fi
export DIST

# Set required r-base-dev version for packages build-depending on R
rbasedev="r-base-dev (>= $Rversion)"

# 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 Debian package
oldversion=`dpkg-parsechangelog | grep ^Version | cut -f2 -d " "`
cranversion=$oldversion"~"$DIST"cran.0"

echo Old version is $oldversion
echo 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 
    echo "Lowering Build-Depends to $rbasedev"    
    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 dependencies 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
fi
sudo -E pdebuild --debbuildopts '-sa' \
  --buildresult $rcrandir/$DIST-cran3/ \
  -- --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

cd ../..

# Clean sources from $DIST directory
if [ "$keep" = false ]
then
  rm -f $DIST/$pkg\_*
  rm -rf $DIST/$pkg-*
fi

Contact - Imprint