source: trunk/debathena/scripts/dasource @ 24537

Revision 24537, 3.5 KB checked in by broder, 15 years ago (diff)
In dasource, only run daconfiscate on packages with a configure.in We'll use configure.ac as an indicator that this package is part of the New World Daconfiscate-free Order.
  • Property svn:executable set to *
Line 
1#!/bin/bash
2
3# Usage: dasource [-r REPOS] [PACKAGENAME ...]
4
5# Creates or updates a checkout and source package for each listed
6# PACKAGENAME, or for all regular packages if no PACKAGENAME is
7# specified.
8
9# If REPOS is specified, it is used in preference to the canonical
10# Athena repository trunk.
11
12# Package subdirectories are created in the cwd.  The source checkout
13# will reside in PACKAGENAME/PACKAGENAME-VERSION and the source
14# package will be created in PACKAGENAME.
15
16set -e
17
18die() {
19  echo "$@" >&2
20  exit 1
21}
22
23usage() {
24  die "dasource [-r repos] [packagename ...]"
25}
26
27: ${DEBATHENA_APT=/mit/debathena/apt}
28basedir=$(dirname "$0")
29repo=svn+ssh://svn.mit.edu/athena/trunk
30
31while getopts r: opt; do
32  case "$opt" in
33  r)
34    repo="$OPTARG"
35    ;;
36  \?)
37    usage
38    ;;
39  esac
40done
41shift $(($OPTIND - 1))
42
43do_package() {
44  pkgname=$1
45  pkgpath=$2
46  if [ ! -d $pkgname ]; then
47    echo "Creating directory $pkgname"
48    mkdir $pkgname
49  fi
50
51  # Work around a bad interaction between dpkg-source and AFS.
52  # (dpkg-source invokes perl's Tempfile which checks if the parent
53  # directory is writable using mode bits).  This will not actually
54  # grant any outside access to the directory since AFS ignores
55  # non-user mode bits.
56  if fs whichcell . >/dev/null 2>&1; then
57    chmod 777 $pkgname
58  fi
59
60  # Check out or update the package source.
61  pattern="$pkgname/$pkgname-[0-9]*[0-9]"
62  if [ $(echo $pattern | wc -w) -gt 1 ]; then
63    die "More than one checkout under $pkgname!"
64  elif [ -d $pattern ]; then
65    dir=$(echo $pattern)
66    echo "Updating and cleaning $dir"
67    (cd $dir && svn update && svn revert -R . &&
68     svn st | awk '/^?/ {print $2}' | xargs rm -vrf)
69  else
70    dir=$pkgname/$pkgname
71    echo "Checking out $repo/$pkgpath into $dir"
72    svn co $repo/$pkgpath $dir
73  fi
74
75  # Extract the changelog version and strip off the epoch and Debian component.
76  changever=$(cd $dir && dpkg-parsechangelog | sed -n 's/Version: //p')
77  sver=$(echo $changever | sed -re 's/^[0-9]+://p')
78  upver=$(echo $sver | sed -re 's/-[^-]*$//')
79
80  # Rename the source checkout if necessary.
81  correctdir=$pkgname/${pkgname}-$upver
82  if [ $dir != $correctdir ]; then
83    echo "Renaming $dir to $correctdir"
84    mv $dir $correctdir
85    dir=$correctdir
86  fi
87
88  # Add autoconf goo if it's an Athena source directory.
89  case $pkgpath in
90  athena/*)
91    if [ -e "$basedir/configure.in" ]; then
92        (cd $dir && $basedir/daconfiscate)
93    fi
94    ;;
95  esac
96
97  # Generate debian/control from debian/control.in if control.in exists
98  ([ -f "$dir/debian/control.in" ] && cd $dir && DEB_AUTO_UPDATE_DEBIAN_CONTROL=yes debian/rules debian/control || :)
99  [ -f "$dir/debian/control" ] || die "Can't find or generate debian/control!"
100
101  # Create a suitable orig tarball if necessary.
102  (cd $dir && $basedir/daorig)
103
104  # Build an unsigned package, ignoring version control subdirs in the source.
105  echo "Creating source package"
106  (cd $dir && debuild -S -i -I.svn -sa -us -uc)
107}
108
109packages=packages
110
111if [ ! -r "$packages" ]; then
112    packages=/mit/debathena/packages/packages
113fi
114if [ ! -r "$packages" ]; then
115  die "Can't read packages file; create with gen-packages"
116fi
117
118if [ $# -gt 0 ]; then
119  # Build specific source packages.
120  for pkgname; do
121    pkgname="${pkgname%/}"
122    pkgpath=$(sed -nre "s/^$pkgname[[:space:]]+//p" "$packages")
123    [ -n "$pkgpath" ] || die "Can't find package $pkgname"
124    do_package $pkgname $pkgpath
125  done
126else
127  # Build all source packages.
128  exec <"$packages"
129  while read pkgname pkgpath; do
130    do_package $pkgname $pkgpath
131  done
132fi
Note: See TracBrowser for help on using the repository browser.