3 ### Build a Debian package on an sbuild server.
5 ### (c) 2016 Mark Wooding
8 ###----- Licensing notice ---------------------------------------------------
10 ### This program is free software; you can redistribute it and/or modify
11 ### it under the terms of the GNU General Public License as published by
12 ### the Free Software Foundation; either version 2 of the License, or
13 ### (at your option) any later version.
15 ### This program is distributed in the hope that it will be useful,
16 ### but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ### GNU General Public License for more details.
20 ### You should have received a copy of the GNU General Public License
21 ### along with this program; if not, write to the Free Software Foundation,
22 ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 ###--------------------------------------------------------------------------
29 fail
() { echo >&2 "$prog: $*"; exit 1; }
30 usage
() { echo "usage: $prog [-ain] [-k KEYID] [-t TARGET] HOST"; }
31 fail_usage
() { usage
>&2; exit 1; }
33 ###--------------------------------------------------------------------------
36 bogusp
=nil noactp
=nil signp
=nil
38 while getopts "haik:nt:" opt
; do
45 -h Show this help text.
46 -a Build only architecture-dependent packages.
47 -i Build only architecture-neutral packages.
48 -k KEYID Sign the result using KEYID.
49 -n Don't actually do the build.
50 -t TARGET Build in TARGET build environment.
54 a
) buildopts
="${buildopts+$buildopts }-a" ;;
55 i
) buildopts
="${buildopts+$buildopts }-i" ;;
56 k
) signp
=t keyid
=$OPTARG ;;
57 n
) buildopts
="${buildopts+$buildopts }-n" noactp
=t
;;
58 t
) buildopts
="${buildopts+$buildopts }-t$OPTARG" ;;
62 shift $
(( $OPTIND - 1 ))
67 case $bogusp in t
) fail_usage
;; esac
68 case $noactp in t
) signp
=nil
;; esac
70 ###--------------------------------------------------------------------------
73 ## Figure out the package name and version number.
75 while read tag value
; do
77 Source
:) pkg
=$value ;;
78 Version
:) ver
=$value ;;
81 $(dpkg-parsechangelog)
83 case ${pkg+t} in t
) ;; *) fail
"can't figure out the package name" ;; esac
84 case ${ver+t} in t
) ;; *) fail
"can't figure out the package version" ;; esac
86 ## Build a Debian source package. Don't sign anything yet. That will happen
87 ## at the end, all in one go.
88 dpkg-buildpackage
-S
-uc
-us
91 [ -f
"$dsc" ] || fail
"where is my \`.dsc' file?"
93 ## Actually do the build. Get a build directory assigned by the server,
94 ## upload the sources, run the build, and collect the results.
95 builddir
=$
(ssh "$host" mdw-sbuild-server dir
"$pkg/$ver")
96 dcmd rsync
-a
"$dsc" "$host:$builddir/"
97 set +e
; ssh "$host" mdw-sbuild-server
$buildopts build
"$builddir"
99 rsync
-a
"$host:$builddir/" .
/
100 case $rc in 0) ;; *) exit $rc ;; esac
102 ## Merge the change files together, and maybe sign the result.
103 chchch
=${pkg}_
${ver}_source.changes
104 for i
in "${pkg}_${ver}"_
*.changes
; do
105 case " $chchch " in *" $i "*) ;; *) chchch
="$chchch $i" ;; esac
107 mergechanges
-f
$chchch
110 t
) debsign
-k
"$keyid" "${pkg}_${ver}_multi.changes" ;;