id-pbuild.sh calls id-mk-deb-src.sh automatically
[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.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         -*)
51             do_help=yes
52             ;;
53     esac
54     shift
55 done
56
57 if test "$do_help" = "yes"; then
58     usage 1 1>&2
59 fi
60
61 PBUILDROOT=`dirname $0`/id-pbuild-root.sh
62 if test ! -x $PBUILDROOT; then
63     echo "$PBUILDROOT not found"
64     exit 1
65 fi
66
67 MKDEBSRC=`dirname $0`/id-mk-deb-src.sh
68 if test ! -x $MKDEBSRC; then
69     echo "$MKDEBSRC not found"
70     exit 1
71 fi
72
73 if test -d deb-src; then
74     cd deb-src
75 else
76     $MKDEBSRC
77 fi
78
79 if test -d deb-src; then
80     cd deb-src
81 fi
82
83 for f in *.dsc; do
84     if test -f "$f"; then
85         PKG=$f
86     fi
87 done
88 if test -z "$PKG"; then
89     echo "Specify .dsc file"
90     exit 1
91 fi
92 if test ! -e "$PKG"; then
93     echo "${PKG} does not exist"
94     exit 1
95 fi
96 if test -z "$PRODUCT"; then
97     PRODUCT=`echo *.dsc|sed 's/_.*//g'`
98 fi
99 ARCHS="i386 amd64"
100 if grep "Architecture: all" $PKG >/dev/null; then
101     USE_ARCHS=i386
102 else
103     USE_ARCHS=$ARCHS
104 fi
105 echo "Dsc $PKG . Product $PRODUCT"
106 echo "Ubuntu distros: $UBUNTU_DIST"
107 echo "Debian distros: $DEBIAN_DIST"
108 if $upload; then
109     for dist in ${UBUNTU_DIST}; do
110         scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/ubuntu/${dist}
111     done
112     for dist in ${DEBIAN_DIST}; do
113         scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/debian/${dist}
114     done
115     echo ""
116     echo "===================================================="
117     echo "Remember to update APT on ftp.indexdata.dk !!!"
118     echo ""
119     echo "ssh ftp.indexdata.dk"
120     echo "cd ~/proj/git-tools/update-archive"
121     echo "sudo su"
122     echo "./update-archive.sh"
123     echo "===================================================="
124     exit 0
125 fi
126 rm -f *.log
127
128 # call our privileged wrapper to clean the directories, no --dsc option
129 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
130     for arch in ${USE_ARCHS}; do
131         sudo -n $PBUILDROOT --dist=$dist --arch=$arch
132     done
133 done
134
135 # call our privileged wrapper to do the real work, with --dsc option
136 i=0
137 date
138 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
139     for arch in ${USE_ARCHS}; do
140         sudo -n $PBUILDROOT \
141             --dist=$dist --arch=$arch --dsc=$PKG >${dist}-${arch}.log 2>&1 &
142         i=`expr $i + 1`
143         if test $i -eq $concurrency; then
144             i=0
145             wait
146             if test -f ${dist}-${arch}/*.dsc; then
147                 :
148             else
149                 echo "No .dsc file for ${dist}-${arch}"
150                 exit 1
151             fi
152         fi
153     done
154 done
155 wait
156 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
157     for arch in ${USE_ARCHS}; do
158         if test -f ${dist}-${arch}/*.dsc; then
159             :
160         else
161             echo "No .dsc file for ${dist}-${arch}"
162             exit 1
163         fi
164     done
165 done
166 date
167 echo "Done"
168 # Local Variables:
169 # mode:shell-script
170 # sh-indentation: 2
171 # sh-basic-offset: 4
172 # End: