aboutsummaryrefslogtreecommitdiff
path: root/pbuilder-buildpackage
blob: ebcf7143055b6e9f97ccf8e740e965dd63097e78 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#! /bin/bash
#   pbuilder -- personal Debian package builder
#   Copyright (C) 2001,2002 Junichi Uekawa
#
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program; if not, write to the Free Software
#   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

export LANG=C
export LC_ALL=C
set -e


. /usr/lib/pbuilder/pbuilder-checkparams
. /usr/lib/pbuilder/pbuilder-runhooks
. /usr/lib/pbuilder/pbuilder-buildpackage-funcs


PACKAGENAME="$1"
if [ ! -f "$PACKAGENAME" ]; then
    echo "Command line parameter [$PACKAGENAME] is not a valid .dsc file name" >&2
    exit 1;
fi;

if [ -n "$BUILDUSERNAME" -a -n "$BUILDUSERID" ]; then
    SUTOUSER="HOME=/tmp/buildd su $BUILDUSERNAME -- "
    DEBBUILDOPTS="$DEBBUILDOPTS -rfakeroot"
    EXTRAPACKAGES="${EXTRAPACKAGES} fakeroot"
    echo "I: using fakeroot in build."
else
    # run the build in root
    SUTOUSER=""
    BUILDUSERID=0
    BUILDUSERNAME=root
fi

showbuildbanner '$Id'
echobacktime
extractbuildplace 
loadhooks
createbuilduser

echo Copying source file
copydsc "$PACKAGENAME" "$BUILDPLACE/tmp/buildd"
executehooks "D"

echo Extracting source
if ! $CHROOTEXEC /bin/bash -c "( cd tmp/buildd; chown $BUILDUSERNAME:$BUILDUSERNAME ../buildd *; $SUTOUSER /usr/bin/dpkg-source -x $(basename $PACKAGENAME) )"; then
    echo "pbuilder: Failed extracting the source" >&2 
    umountproc_cleanbuildplace
    exit 1;
fi

recover_aptcache
echo "Installing the build-deps"
checkbuilddep
save_aptcache

echo " -> Building the package"
export PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin"

executehooks "A"

if [ -z "$DEBEMAIL" ]; then
    DPKG_COMMANDLINE="cd tmp/buildd/*/; $SUTOUSER dpkg-buildpackage -us -uc $DEBBUILDOPTS"
else
    DPKG_COMMANDLINE="cd tmp/buildd/*/;  $SUTOUSER dpkg-buildpackage -us -uc  \"-m$DEBEMAIL\" $DEBBUILDOPTS"
fi

(
    : Build process
    $CHROOTEXEC /bin/bash -c "${DPKG_COMMANDLINE}"
) &
BUILD_PID=$!
if [ -n "${TIMEOUT_TIME}" ]; then
    ( 
	: Timeout process
	sleep "${TIMEOUT_TIME}"
	echo " -> Terminating build process due to timeout "
	kill ${BUILD_PID} || true
    ) & # timeout process
    KILL_WAIT_PID="kill $! || true; echo \"  -> Terminate timeout process\"; "
else
    KILL_WAIT_PID=""
fi

if ! wait ${BUILD_PID}; then
    trap umountproc_cleanbuildplace exit
    eval ${KILL_WAIT_PID}
    echo "pbuilder: Failed autobuilding of package" >&2
    executehooks "C"
    exit 1;
else
    eval ${KILL_WAIT_PID}
    # build was successful
fi

trap umountproc_cleanbuildplace exit
executehooks "B"
trap cleanbuildplace exit
umountproc

if [ -n "${BUILDRESULT}" ]; then
    mkdir -p "${BUILDRESULT}"
    if [ -d "${BUILDRESULT}" ]; then
	if [ -n "${BUILDRESULTUID}" ]; then
	    chown "${BUILDRESULTUID}" "${BUILDPLACE}"/tmp/buildd/*
	fi
	if [ -n "${BUILDRESULTGID}" ]; then
	    chgrp "${BUILDRESULTGID}" "${BUILDPLACE}"/tmp/buildd/*
	fi
	cp -p "${BUILDPLACE}"/tmp/buildd/* "${BUILDRESULT}" 2>/dev/null || true
    else
	echo "E: BUILDRESULT=[$BUILDRESULT] is not a directory." >&2
    fi
fi

echobacktime