Rename this script
[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 is invoked with sudo.
5 #
6 # In order to avoid having to type-in the password for it, you might
7 # use something like this in sudoers 
8 #  user ALL=NOPASSWD,SETENV: /usr/sbin/pbuilder
9 # where user is your username.
10
11 usage()
12 {
13     cat <<EOF
14 Usage: id-pbuild-all.sh [OPTIONS]
15 Options:
16         [--debian=distros]
17         [--ubuntu=distros]
18         [--upload]
19         [--concurrency=N]
20 EOF
21     exit $1
22 }
23
24 # things that might be set by options
25 upload=false
26 do_help=false
27 concurrency=4
28
29 if test -f IDMETA; then
30     . ./IDMETA
31 fi
32 while test $# -gt 0; do
33     case "$1" in
34         -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
35         *) optarg= ;;
36     esac
37     
38     case $1 in
39         --ubuntu=*)
40             UBUNTU_DIST=$optarg
41             ;;
42         --debian=*)
43             DEBIAN_DIST=$optarg
44             ;;
45         --concurrency=*)
46             concurrency=$optarg
47             ;;
48         --upload)
49             upload=true
50             ;;
51         -*)
52             do_help=yes
53             ;;
54     esac
55     shift
56 done
57
58 if test "$do_help" = "yes"; then
59     usage 1 1>&2
60 fi
61
62 if test -d deb-src; then
63     cd deb-src
64 fi
65 for f in *.dsc; do
66     if test -f "$f"; then
67         PKG=$f
68     fi
69 done
70 if test -z "$PKG"; then
71     echo "Specify .dsc file"
72     exit 1
73 fi
74 if test ! -e "$PKG"; then
75     echo "${PKG} does not exist"
76     exit 1
77 fi
78 PBUILDER=/usr/sbin/pbuilder
79 PRODUCT=`echo *.dsc|sed 's/_.*//g'`
80 ARCHS="i386 amd64"
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 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
100     for arch in ${ARCHS}; do
101         rm -fr ${dist}-${arch}
102         (
103             if test ! -f /var/cache/pbuilder/${dist}-${arch}-base.tgz; then
104                 sudo DIST=$dist ARCH=$arch $PBUILDER create
105             fi
106             for f in `find /var/cache/pbuilder/${dist}-${arch}-base.tgz -ctime +7`; do
107                 sudo DIST=$dist ARCH=$arch $PBUILDER update --override-config
108             done
109             sudo DIST=$dist ARCH=$arch $PBUILDER --build $PKG
110             ) >${dist}-${arch}.log 2>&1 &
111         i=`expr $i + 1`
112         if test $i -eq $concurrency; then
113             i=0
114             wait
115         fi
116     done
117 done
118 wait
119 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
120     for arch in ${ARCHS}; do
121         if test -f ${dist}-${arch}/*.dsc; then
122             :
123         else
124             echo "No .dsc file for ${dist}-${arch}"
125             exit 1
126         fi
127     done
128 done
129 date
130 echo "Done"
131 # Local Variables:
132 # mode:shell-script
133 # sh-indentation: 2
134 # sh-basic-offset: 4
135 # End: