[PATCH] Hackish IPC to query build architecture
Loïc Minier
lool at dooz.org
Wed Dec 30 16:19:42 UTC 2009
---
pbuilder-buildpackage | 26 ++++++++++++++++++++++++--
pbuilder-buildpackage-funcs | 27 +++++++++++++++++++++++++++
pdebuild | 34 ++++++++++++++++++++++++++++++++--
3 files changed, 83 insertions(+), 4 deletions(-)
diff --git a/pbuilder-buildpackage b/pbuilder-buildpackage
index 293eecf..062620e 100755
--- a/pbuilder-buildpackage
+++ b/pbuilder-buildpackage
@@ -24,6 +24,7 @@ set -e
. /usr/lib/pbuilder/pbuilder-checkparams
. /usr/lib/pbuilder/pbuilder-runhooks
. /usr/lib/pbuilder/pbuilder-buildpackage-funcs
+flip_ipc
PACKAGENAME="$1"
if [ ! -f "$PACKAGENAME" ]; then
@@ -111,13 +112,34 @@ else
exit 1;
fi
+flip_ipc
+while read command; do
+ case "$command" in
+ get_host_arch)
+ $CHROOTEXEC dpkg-architecture -qDEB_HOST_ARCH
+ ;;
+ build)
+ # XXX should call a function instead
+ break
+ ;;
+ *)
+ echo "Invalid command $command"
+ ;;
+ esac
+done
+flip_ipc
+
log "I: Building the package"
executehooks "A"
-DPKG_COMMANDLINE="dpkg-buildpackage -us -uc ${DEBEMAIL:+\"-e$DEBEMAIL\"} $DEBBUILDOPTS"
-
(
+ # close IPC channels in subshell only
+ flip_ipc
+ close_ipc
+
+ DPKG_COMMANDLINE="dpkg-buildpackage -us -uc ${DEBEMAIL:+\"-e$DEBEMAIL\"} $DEBBUILDOPTS"
+
: Build process
if [ -n "$TWICE" ]; then
DPKG_COMMANDLINE="$DPKG_COMMANDLINE && $DPKG_COMMANDLINE"
diff --git a/pbuilder-buildpackage-funcs b/pbuilder-buildpackage-funcs
index 023dbca..f21eee2 100644
--- a/pbuilder-buildpackage-funcs
+++ b/pbuilder-buildpackage-funcs
@@ -104,3 +104,30 @@ function createbuilduser () {
unset LOGNAME || true
fi
}
+
+# use stdout and stdin for IPC and backup the original ones as fd 3 and 4
+open_ipc() {
+ if [ -n "$PBUILDER_IPC" ]; then
+ return
+ fi
+ exec 3>&1 4<&0
+ export PBUILDER_IPC=1
+}
+
+# exchange IPC fds 3 and 4 with stdin and stdout
+flip_ipc() {
+ if [ -z "$PBUILDER_IPC" ]; then
+ return
+ fi
+ exec 5>&3- 3>&1- 1>&5- 5<&4- 4<&0- 0<&5-
+}
+
+# connect original stdin and stdout and close IPC channels
+function close_ipc() {
+ if [ -z "$PBUILDER_IPC" ]; then
+ return
+ fi
+ exec 1>&3- 0<&4-
+ unset PBUILDER_IPC
+}
+
diff --git a/pdebuild b/pdebuild
index f9e79b5..da12efc 100644
--- a/pdebuild
+++ b/pdebuild
@@ -31,7 +31,6 @@ fi;
PKG_SOURCENAME=$(dpkg-parsechangelog|sed -n 's/^Source: //p')
PKG_VERSION=$(dpkg-parsechangelog|sed -n 's/^Version: \(.*:\|\)//p')
-ARCHITECTURE=$(dpkg-architecture -qDEB_HOST_ARCH)
CHANGES="${PKG_SOURCENAME}_${PKG_VERSION}_${ARCHITECTURE}.changes"
if [ -z "${PBUILDER_BUILD_LOGFILE}" ]; then
@@ -43,6 +42,24 @@ fi
export BUILDRESULTUID=$(id -u)
export BUILDRESULTGID=$(id -g)
+# use fd 3 and 4 for IPC
+function open_ipc() {
+ if [ -n "$PBUILDER_IPC" ]; then
+ return
+ fi
+ exec 3>&1 4<&0
+ export PBUILDER_IPC=1
+}
+
+# connect original stdin and stdout and close IPC channels
+function close_ipc() {
+ if [ -z "$PBUILDER_IPC" ]; then
+ return
+ fi
+ exec 1>&3- 0<&4-
+ unset PBUILDER_IPC
+}
+
if [ "${USE_PDEBUILD_INTERNAL}" = 'yes' ]; then
${PBUILDERROOTCMD} ${PDEBUILD_PBUILDER} --execute ${EXTRA_CONFIGFILE[@]/#/--configfile } --bindmounts $(readlink -f ..) "$@" -- /usr/lib/pbuilder/pdebuild-internal ${PWD} --debbuildopts "" --debbuildopts "${DEBBUILDOPTS}" --uid "${BUILDRESULTUID}" --gid "${BUILDRESULTGID}" --pbuildersatisfydepends "$PBUILDERSATISFYDEPENDSCMD"
if [ -d "${BUILDRESULT}" ]; then
@@ -59,7 +76,20 @@ else
log "W: Unmet build-dependency in source"
fi
echo "dpkg-buildpackage -S -us -uc -r${BUILDSOURCEROOTCMD} $DEBBUILDOPTS" | perl -pe 's/(^|\s)-[bB](\s|$)/$1$2/g' | /bin/bash
- ${PBUILDERROOTCMD} ${PDEBUILD_PBUILDER} --build ${EXTRA_CONFIGFILE[@]/#/--configfile } --buildresult "${BUILDRESULT}" --debbuildopts "" --debbuildopts "${DEBBUILDOPTS}" "$@" ../"${PKG_SOURCENAME}_${PKG_VERSION}".dsc
+
+ open_ipc
+ helper() {
+ echo get_host_arch
+ read ARCHITECTURE
+ echo build
+ }
+ d="`mktemp -dt`"
+ fifo="$d/fifo"
+ mkfifo "$fifo"
+ helper <"$fifo" | ${PBUILDERROOTCMD} -C 5 ${PDEBUILD_PBUILDER} --build ${EXTRA_CONFIGFILE[@]/#/--configfile } --buildresult "${BUILDRESULT}" --debbuildopts "" --debbuildopts "${DEBBUILDOPTS}" "$@" ../"${PKG_SOURCENAME}_${PKG_VERSION}".dsc >"$fifo"
+log "W: Got architecture $ARCHITECTURE"
+ rm -rf "$d"
+ close_ipc
fi
# do signing with optional key specifier
--
1.6.3.3
--vtzGhvizbBRQ85DL--
More information about the Pbuilder-maint
mailing list