ig-pbuild.sh more clear on warnings and tips
[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 D0=`dirname $0`
62 ID_DEB_BUILD=`cd $D0; pwd`
63 PBUILDROOT=${ID_DEB_BUILD}/id-pbuild-root.sh
64 if test ! -x $PBUILDROOT; then
65     echo "$PBUILDROOT not found"
66     exit 1
67 fi
68
69 MKDEBSRC=${ID_DEB_BUILD}/id-mk-deb-src.sh
70 if test ! -x $MKDEBSRC; then
71     echo "$MKDEBSRC not found"
72     exit 1
73 fi
74
75 if $upload; then
76     cd deb-src
77 else
78     if test "${SUDO_USER}"; then
79         if test ! -d deb-src; then
80             $MKDEBSRC
81         fi
82     else
83         if test -d deb-src; then
84             rm -rf deb-src
85             if test $? -ne 0; then
86                 echo "deb-src could not be removed. Remove deb-src manually"
87                 exit 1
88             fi
89         fi
90         $MKDEBSRC
91     fi
92     cd deb-src
93 fi
94
95 for f in *.dsc; do
96     if test -f "$f"; then
97         PKG=$f
98     fi
99 done
100 if test -z "$PKG"; then
101     echo "Specify .dsc file"
102     exit 1
103 fi
104 if test ! -e "$PKG"; then
105     echo "${PKG} does not exist"
106     exit 1
107 fi
108 if test -z "$PRODUCT"; then
109     PRODUCT=`echo *.dsc|sed 's/_.*//g'`
110 fi
111 ARCHS="i386 amd64"
112 if grep "Architecture: all" $PKG >/dev/null; then
113     USE_ARCHS=i386
114 else
115     USE_ARCHS=$ARCHS
116 fi
117 echo "Dsc $PKG . Product $PRODUCT"
118 echo "Ubuntu distros: $UBUNTU_DIST"
119 echo "Debian distros: $DEBIAN_DIST"
120 if test "${SUDO_USER}"; then
121     echo "Running as sudo."
122     echo "Tip: You can avoid it by adding the following in /etc/sudoers"
123     echo "${SUDO_USER} ALL=NOPASSWD: ${ID_DEB_BUILD}/id-pbuild-root.sh"
124     HOME_EXPORT=/home/${SUDO_USER}
125 else
126     sudo -k
127     HOME_EXPORT=$HOME
128 fi
129 if test ! -f ${HOME_EXPORT}/.pbuilderrc; then
130     echo "${HOME_EXPORT}/.pbuilderrc missing"
131     exit 1
132 fi
133
134 if $upload; then
135     for dist in ${UBUNTU_DIST}; do
136         scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/ubuntu/${dist}
137     done
138     for dist in ${DEBIAN_DIST}; do
139         scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/debian/${dist}
140     done
141     echo ""
142     echo "===================================================="
143     echo "Remember to update APT on ftp.indexdata.dk !!!"
144     echo ""
145     echo "ssh ftp.indexdata.dk"
146     echo "cd ~/proj/git-tools/update-archive"
147     echo "sudo su"
148     echo "./update-archive.sh"
149     echo "===================================================="
150     exit 0
151 fi
152 rm -f *.log
153
154 # call our privileged wrapper to clean the directories, no --dsc option
155 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
156     for arch in ${USE_ARCHS}; do
157         sudo -n $PBUILDROOT --home=${HOME_EXPORT} --dist=$dist --arch=$arch
158         if test $? -ne 0; then
159             echo "FAILED"
160             echo "Run id-pbuild.sh using sudo or add yourself to /etc/sudoers:"
161             echo "${USER} ALL=NOPASSWD: ${ID_DEB_BUILD}/id-pbuild-root.sh"
162             exit 1
163         fi
164     done
165 done
166
167 # call our privileged wrapper to do the real work, with --dsc option
168 i=0
169 date
170 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
171     for arch in ${USE_ARCHS}; do
172         sudo -n $PBUILDROOT --home=${HOME_EXPORT} \
173             --dist=$dist --arch=$arch --dsc=$PKG >${dist}-${arch}.log 2>&1 &
174         i=`expr $i + 1`
175         if test $i -eq $concurrency; then
176             i=0
177             wait
178             if test -f ${dist}-${arch}/*.dsc; then
179                 :
180             else
181                 echo "FAILED: No .dsc file for ${dist}-${arch}"
182                 exit 1
183             fi
184         fi
185     done
186 done
187 wait
188 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
189     for arch in ${USE_ARCHS}; do
190         if test -f ${dist}-${arch}/*.dsc; then
191             :
192         else
193             echo "FAILED: No .dsc file for ${dist}-${arch}"
194             exit 1
195         fi
196     done
197 done
198 date
199 echo "Done"
200 # Local Variables:
201 # mode:shell-script
202 # sh-indentation: 2
203 # sh-basic-offset: 4
204 # End: