summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/chroot-tools/hooks-distcc.sh69
1 files changed, 20 insertions, 49 deletions
diff --git a/src/chroot-tools/hooks-distcc.sh b/src/chroot-tools/hooks-distcc.sh
index d65fd1e..b19c223 100644
--- a/src/chroot-tools/hooks-distcc.sh
+++ b/src/chroot-tools/hooks-distcc.sh
@@ -1,5 +1,5 @@
#!/hint/bash -euE -o pipefail
-# Copyright (C) 2013, 2017 Luke Shumaker <lukeshu@parabola.nu>
+# Copyright (C) 2013, 2017-2018 Luke Shumaker <lukeshu@parabola.nu>
#
# License: GNU GPLv2+
#
@@ -29,10 +29,10 @@ _distcc_check() {
# From previous versions
"$home/.makepkg.conf"
"$copydir/run/distcc-tool.pid"
+ "$copydir/run/distcc-tool-idaemon.pid"
# From this version
"$copydir/bin/distcc-tool"
- "$copydir/run/distcc-tool-idaemon.pid"
"$copydir/run/distcc-tool-odaemon.pid"
"$home/.config/pacman/makepkg.conf"
"$home/.ssh/config"
@@ -50,26 +50,6 @@ _distcc_check() {
fi
}
-_distcc_start_idaemon() {
- (
- set -C
- echo $BASHPID >/run/distcc-tool-idaemon.pid || exit 0
- trap 'jobs -p | xargs -r kill --' EXIT
- /bin/distcc-tool idaemon "$@" &
- wait
- ) &>/dev/null &
-}
-
-_distcc_stop_idaemon() {
- if [[ -f /run/distcc-tool-idaemon.pid ]]; then
- local idaemon
- idaemon=$(< /run/distcc-tool-idaemon.pid) || exit
- kill -- "$idaemon" || exit
-
- rm -f -- /run/distcc-tool-idaemon.pid
- fi
-}
-
distcc_start_odaemon() {
local copydir=$1
@@ -89,32 +69,24 @@ distcc_start_odaemon() {
local _distcc_tool; _distcc_tool="$(librelib chroot/distcc-tool)"
install -m755 "$_distcc_tool" "$copydir/bin/distcc-tool"
- mkdir -p "$home/.config/pacman"
- {
- declare -f _distcc_start_idaemon
- declare -f _distcc_stop_idaemon
- printf '%s\n' \
- '_discc_start_idaemon "$DISTCC_HOSTS"' \
- 'trap _distcc_stop_idaemon EXIT' \
- 'DISTCC_HOSTS="$(/bin/distcc-tool rewrite "$DISTCC_HOSTS")"'
- } > "$home/.config/pacman/makepkg.conf"
-
- mkdir -p "$home/.ssh"
- printf '%s\n' \
- 'Host *' \
- ' ProxyCommand /bin/distcc-tool client %h %p' \
- > "$home/.ssh/config"
-
- (
- echo $BASHPID >"$copydir"/run/distcc-tool-odaemon.pid
+ local DISTCC_HOSTS
+ DISTCC_HOSTS="$(get_var makepkg DISTCC_HOSTS '')"
+ local rewritten_DISTCC_HOSTS
+ rewritten_DISTCC_HOSTS=$("$_distcc_tool" rewrite "${DISTCC_HOSTS:-}")
+
+ install -Dm644 /dev/stdin "$home/.config/pacman/makepkg.conf" <<-eot
trap 'jobs -p | xargs -r kill --' EXIT
- "$_distcc_tool" odaemon "$copydir" &
- wait
- # Redirecting to /dev/null here is important,
- # because otherwise our stdout/stderr are
- # connected to the caller's `|& indent` and
- # that'll end up waiting for us.
- ) &>/dev/null &
+ /bin/distcc-tool idaemon ${DISTCC_HOSTS@Q} </dev/null &>/dev/null &
+ DISTCC_HOSTS=${rewritten_DISTCC_HOSTS@Q}
+ eot
+
+ install -Dm644 /dev/stdin "$home/.ssh/config" <<-'eot'
+ Host *
+ ProxyCommand /bin/distcc-tool client %h %p
+ eot
+
+ "$_distcc_tool" odaemon "$copydir" </dev/null &>/dev/null &
+ echo $! > "$copydir/run/distcc-tool-odaemon.pid"
fi
}
@@ -137,7 +109,6 @@ distcc_stop_odaemon() {
"$home/.config/pacman/makepkg.conf" \
"$home/.ssh/config" \
"$copydir/bin/distcc-tool" \
- "$copydir/run/distcc-tool-odaemon.pid" \
- "$copydir/run/distcc-tool-idaemon.pid"
+ "$copydir/run/distcc-tool-odaemon.pid"
fi
}