improve warning message
[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         --remote=*)
47             REMOTE=$optarg
48             ;;
49         -*)
50             do_help=yes
51             ;;
52     esac
53     shift
54 done
55
56 if test "$do_help" = "yes"; then
57     usage 1 1>&2
58 fi
59
60 if test "$REMOTE"; then
61     if test ! -d deb-src; then
62         echo "deb-src not in current directory"
63         exit 1
64     fi
65     cd deb-src
66     PRODUCT=`echo *.dsc|sed 's/_.*//g'`
67     cd ..
68     ssh $REMOTE "mkdir -p $PRODUCT/deb-src"
69     scp IDMETA $REMOTE:$PRODUCT
70     scp deb-src/*.gz deb-src/*.dsc $REMOTE:$PRODUCT/deb-src
71     if $upload; then
72         ssh $REMOTE "cd $PRODUCT; \$HOME/proj/git-tools/id-deb-build/id-pbuild.sh --upload"
73     else
74         ssh $REMOTE "cd $PRODUCT; sudo \$HOME/proj/git-tools/id-deb-build/id-pbuild.sh"
75     fi
76     exit 0
77 fi
78 if test -d deb-src; then
79     cd deb-src
80 fi
81 for f in *.dsc; do
82     if test -f "$f"; then
83         PKG=$f
84     fi
85 done
86 if test -z "$PKG"; then
87     echo "Specify .dsc file"
88     exit 1
89 fi
90 if test ! -e "$PKG"; then
91     echo "${PKG} does not exist"
92     exit 1
93 fi
94 PBUILDER=/usr/sbin/pbuilder
95 PRODUCT=`echo *.dsc|sed 's/_.*//g'`
96 ARCHS="i386 amd64"
97 if grep "Architecture: all" $PKG >/dev/null; then
98     USE_ARCHS=i386
99 else
100     USE_ARCHS=$ARCHS
101 fi
102 echo "Dsc $PKG . Product $PRODUCT"
103 echo "Ubuntu distros: $UBUNTU_DIST"
104 echo "Debian distros: $DEBIAN_DIST"
105 if $upload; then
106     for dist in ${UBUNTU_DIST}; do
107         scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/ubuntu/${dist}
108     done
109     for dist in ${DEBIAN_DIST}; do
110         scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/debian/${dist}
111     done
112     echo ""
113     echo "===================================================="
114     echo "Remember to update APT on ftp.indexdata.dk !!!"
115     echo ""
116     echo "ssh ftp.indexdata.dk"
117     echo "cd ~/proj/git-tools/update-archive"
118     echo "sudo su"
119     echo "./update-archive.sh"
120     echo "===================================================="
121     exit 0
122 fi
123 # remove existing package directories
124 for f in [a-z]*; do
125         if test -d $f; then
126                 rm -fr $f
127         fi
128 done
129 rm -f *.log
130
131 i=0
132 date
133
134 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
135     for arch in ${USE_ARCHS}; do
136         rm -fr ${dist}-${arch}
137         (
138             if test ! -f /var/cache/pbuilder/${dist}-${arch}-base.tgz; then
139                 DIST=$dist ARCH=$arch $PBUILDER create
140             fi
141             DIST=$dist ARCH=$arch $PBUILDER update --override-config
142             DIST=$dist ARCH=$arch $PBUILDER --build $PKG
143             ) >${dist}-${arch}.log 2>&1 &
144         i=`expr $i + 1`
145         if test $i -eq $concurrency; then
146             i=0
147             wait
148         fi
149     done
150 done
151 wait
152 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
153     for arch in ${USE_ARCHS}; do
154         if test -f ${dist}-${arch}/*.dsc; then
155             :
156         else
157             echo "No .dsc file for ${dist}-${arch}"
158             exit 1
159         fi
160     done
161 done
162 date
163 echo "Done"
164 # Local Variables:
165 # mode:shell-script
166 # sh-indentation: 2
167 # sh-basic-offset: 4
168 # End: