Architecture-any packages only built once
[git-tools-moved-to-github.git] / id-deb-build / id-pbuild.sh
1 #!/bin/sh
2 # This script builds Debian packages for one or more distributions
3 # in i386/amd64 architectures. It uses pbuilder. pbuilder requires root
4 # privilege and so this script should be invoked with sudo.
5
6 usage()
7 {
8     cat <<EOF
9 Usage: id-pbuild-all.sh [OPTIONS]
10 Options:
11         [--debian=distros]
12         [--ubuntu=distros]
13         [--upload]
14         [--concurrency=N]
15 EOF
16     exit $1
17 }
18
19 # things that might be set by options
20 upload=false
21 do_help=false
22 concurrency=4
23
24 if test -f IDMETA; then
25     . ./IDMETA
26 fi
27 while test $# -gt 0; do
28     case "$1" in
29         -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
30         *) optarg= ;;
31     esac
32     
33     case $1 in
34         --ubuntu=*)
35             UBUNTU_DIST=$optarg
36             ;;
37         --debian=*)
38             DEBIAN_DIST=$optarg
39             ;;
40         --concurrency=*)
41             concurrency=$optarg
42             ;;
43         --upload)
44             upload=true
45             ;;
46         -*)
47             do_help=yes
48             ;;
49     esac
50     shift
51 done
52
53 if test "$do_help" = "yes"; then
54     usage 1 1>&2
55 fi
56
57 if test -d deb-src; then
58     cd deb-src
59 fi
60 for f in *.dsc; do
61     if test -f "$f"; then
62         PKG=$f
63     fi
64 done
65 if test -z "$PKG"; then
66     echo "Specify .dsc file"
67     exit 1
68 fi
69 if test ! -e "$PKG"; then
70     echo "${PKG} does not exist"
71     exit 1
72 fi
73 PBUILDER=/usr/sbin/pbuilder
74 PRODUCT=`echo *.dsc|sed 's/_.*//g'`
75 ARCHS="i386 amd64"
76 if grep "Architecture: all" $PKG >/dev/null; then
77     USE_ARCHS=i386
78 else
79     USE_ARCHS=$ARCHS
80 fi
81 echo "Dsc $PKG . Product $PRODUCT"
82 echo "Ubuntu distros: $UBUNTU_DIST"
83 echo "Debian distros: $DEBIAN_DIST"
84 if $upload; then
85     for dist in ${UBUNTU_DIST}; do
86         scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/ubuntu/${dist}
87     done
88     for dist in ${DEBIAN_DIST}; do
89         scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/debian/${dist}
90     done
91     echo "Remember to update APT on ftp.indexdata.dk"
92     echo "cd git-tools/update-archive"
93     echo "sudo su"
94     echo "./update-archive.sh"
95     exit 0
96 fi
97 i=0
98 date
99
100 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
101     for arch in ${USE_ARCHS}; do
102         rm -fr ${dist}-${arch}
103         (
104             if test ! -f /var/cache/pbuilder/${dist}-${arch}-base.tgz; then
105                 DIST=$dist ARCH=$arch $PBUILDER create
106             fi
107             DIST=$dist ARCH=$arch $PBUILDER update --override-config
108             DIST=$dist ARCH=$arch $PBUILDER --build $PKG
109             ) >${dist}-${arch}.log 2>&1 &
110         i=`expr $i + 1`
111         if test $i -eq $concurrency; then
112             i=0
113             wait
114         fi
115     done
116 done
117 wait
118 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
119     for arch in ${USE_ARCHS}; do
120         if test -f ${dist}-${arch}/*.dsc; then
121             :
122         else
123             echo "No .dsc file for ${dist}-${arch}"
124             exit 1
125         fi
126     done
127 done
128 date
129 echo "Done"
130 # Local Variables:
131 # mode:shell-script
132 # sh-indentation: 2
133 # sh-basic-offset: 4
134 # End: