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