Package: distcc Version: 3.1-4+b1 Severity: wishlist Tags: patch Attached is a patch to dynamically update the compiler links in /usr/lib/distcc using dpkg triggers instead of hardcoding them in debian/rules.
The patch is based on the trigger handling from ccache. Thanks, Daniel Schaal -- System Information: Debian Release: wheezy/sid APT prefers unstable APT policy: (990, 'unstable'), (103, 'experimental') Architecture: amd64 (x86_64) Kernel: Linux 3.1.4 (SMP w/2 CPU cores) Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages distcc depends on: ii adduser 3.113 ii debconf [debconf-2.0] 1.5.41 ii libavahi-client3 0.6.30-5 ii libavahi-common3 0.6.30-5 ii libc6 2.13-22 ii libpopt0 1.16-1 ii lsb-base 3.2-28 ii netbase 4.47 distcc recommends no packages. Versions of packages distcc suggests: pn ccache 3.1.6-1 pn dbus 1.5.8-1 pn distcc-pump <none> pn distccmon-gnome <none> -- Configuration Files: /etc/distcc/hosts changed [not included] -- debconf information excluded
>From c010705581f04efe27ceab899f8f45b34bb20da7 Mon Sep 17 00:00:00 2001 From: Daniel Schaal <farb...@web.de> Date: Sun, 11 Dec 2011 09:40:59 +0100 Subject: [PATCH] use dpkg triggers to dynamically update compiler links (adapted from ccache) --- debian/distcc.dirs | 1 + debian/distcc.manpages | 1 + debian/distcc.postinst | 23 +++++++++--- debian/distcc.prerm | 7 ++++ debian/distcc.triggers.in | 2 + debian/rules | 20 ++++------- debian/update-distcc-symlinks.8 | 17 +++++++++ debian/update-distcc-symlinks.in | 67 ++++++++++++++++++++++++++++++++++++++ 8 files changed, 120 insertions(+), 18 deletions(-) create mode 100644 debian/distcc.manpages create mode 100644 debian/distcc.prerm create mode 100644 debian/distcc.triggers.in create mode 100644 debian/update-distcc-symlinks.8 create mode 100644 debian/update-distcc-symlinks.in diff --git a/debian/distcc.dirs b/debian/distcc.dirs index edc4b09..5ff6c91 100644 --- a/debian/distcc.dirs +++ b/debian/distcc.dirs @@ -1,4 +1,5 @@ usr/bin +usr/sbin usr/lib/distcc usr/share/doc/distcc usr/share/man/man1 diff --git a/debian/distcc.manpages b/debian/distcc.manpages new file mode 100644 index 0000000..f8283c1 --- /dev/null +++ b/debian/distcc.manpages @@ -0,0 +1 @@ +debian/update-distcc-symlinks.8 diff --git a/debian/distcc.postinst b/debian/distcc.postinst index 4e6bf53..e220209 100644 --- a/debian/distcc.postinst +++ b/debian/distcc.postinst @@ -7,18 +7,24 @@ update_config_file() { db_field=$1 config_field=$2 - + RET=false db_get $db_field if grep -q "^$config_field" $conffile ; then # keep any admin changes, while replacing the variable content - sed "s#^[ ]*$config_field=\".*\"#$config_field=\"$RET\"#" < $conffile > $conffile.new && + sed "s#^[ ]*$config_field=\".*\"#$config_field=\"$RET\"#" < $conffile > $conffile.new && mv $conffile.new $conffile else echo "$config_field=\"$RET\"" >> $conffile fi } +update_symlinks() +{ + echo "Updating symlinks in /usr/lib/distcc ..." + update-distcc-symlinks +} + . /usr/share/debconf/confmodule db_version 2.0 @@ -92,7 +98,7 @@ JOBS="" ZEROCONF="true" EOF fi - + update_config_file distcc/daemon STARTDISTCC update_config_file distcc/daemon-allow ALLOWEDNETS update_config_file distcc/daemon-listen LISTENER @@ -120,16 +126,21 @@ EOF fi db_stop + + update_symlinks ;; + triggered) + update_symlinks + exit 0 + ;; abort-upgrade|abort-remove|abort-deconfigure) ;; - *) echo "postinst called with unknown argument \`$1'" >&2 exit 1 ;; esac - + #DEBHELPER# - + exit 0 diff --git a/debian/distcc.prerm b/debian/distcc.prerm new file mode 100644 index 0000000..b63c4a4 --- /dev/null +++ b/debian/distcc.prerm @@ -0,0 +1,7 @@ +#!/bin/sh + +set -eu + +rm -f /usr/lib/distcc/* 2>/dev/null || true + +#DEBHELPER# diff --git a/debian/distcc.triggers.in b/debian/distcc.triggers.in new file mode 100644 index 0000000..bd5b1ef --- /dev/null +++ b/debian/distcc.triggers.in @@ -0,0 +1,2 @@ +interest /usr/lib/gcc +interest /usr/lib/%DEB_HOST_MULTIARCH%/gcc diff --git a/debian/rules b/debian/rules index 534ccd3..67c33d0 100755 --- a/debian/rules +++ b/debian/rules @@ -9,6 +9,8 @@ # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 +DEB_HOST_MULTIARCH ?= $(shell dpkg-architecure -qDEB_HOST_MULTIARCH) + # This has to be exported to make some magic below work. export DH_OPTIONS @@ -114,18 +116,12 @@ install-arch: install -m755 -d debian/distcc/etc/distcc install -m644 debian/hosts debian/distcc/etc/distcc/hosts - ln -s ../../bin/distcc $(CURDIR)/debian/distcc/usr/lib/distcc/$(DEB_BUILD_GNU_TYPE)-gcc - ln -s ../../bin/distcc $(CURDIR)/debian/distcc/usr/lib/distcc/$(DEB_BUILD_GNU_TYPE)-g++ - set -e; for ver in 2.95 3.0 3.2 3.3 3.4 4.0 4.1 4.2 4.3 4.4; do \ - ln -s ../../bin/distcc $(CURDIR)/debian/distcc/usr/lib/distcc/$(DEB_BUILD_GNU_TYPE)-gcc-$$ver; \ - ln -s ../../bin/distcc $(CURDIR)/debian/distcc/usr/lib/distcc/gcc-$$ver; \ - ln -s ../../bin/distcc $(CURDIR)/debian/distcc/usr/lib/distcc/$(DEB_BUILD_GNU_TYPE)-g++-$$ver; \ - ln -s ../../bin/distcc $(CURDIR)/debian/distcc/usr/lib/distcc/g++-$$ver; \ - done - ln -s ../../bin/distcc $(CURDIR)/debian/distcc/usr/lib/distcc/cc - ln -s ../../bin/distcc $(CURDIR)/debian/distcc/usr/lib/distcc/c++ - ln -s ../../bin/distcc $(CURDIR)/debian/distcc/usr/lib/distcc/gcc - ln -s ../../bin/distcc $(CURDIR)/debian/distcc/usr/lib/distcc/g++ + # shamelessly stolen from ccache + sed s/%DEB_HOST_MULTIARCH%/$(DEB_HOST_MULTIARCH)/ \ + debian/distcc.triggers.in >debian/distcc.triggers + sed s/%DEB_HOST_MULTIARCH%/$(DEB_HOST_MULTIARCH)/ \ + debian/update-distcc-symlinks.in >debian/distcc/usr/sbin/update-distcc-symlinks + chmod +x debian/distcc/usr/sbin/update-distcc-symlinks # rename pump mv $(CURDIR)/debian/tmp/usr/bin/pump $(CURDIR)/debian/tmp/usr/bin/distcc-pump diff --git a/debian/update-distcc-symlinks.8 b/debian/update-distcc-symlinks.8 new file mode 100644 index 0000000..5e16f48 --- /dev/null +++ b/debian/update-distcc-symlinks.8 @@ -0,0 +1,17 @@ +.TH UPDATE-DISTCC-SYMLINKS 8 "2011-11-03" +.SH NAME +update-distcc-symlinks \- update symlinks in /usr/lib/distcc +.SH SYNOPSIS +.B update-distcc-symlinks +.SH DESCRIPTION +\fBupdate-distcc-symlinks\fR creates and removes symlinks in +\fI/usr/lib/distcc\fR. See the \fBdistcc\fR man page for more information. +.P +It is normally not necessary to run \fBupdate-distcc-symlinks\fR by hand as +this is done automatically when compiler packages are removed or +installed. +.SH SEE ALSO +.BR distcc (1) +.SH AUTHOR +This manual page was written by Joel Rosdahl <j...@debian.org> for the +Debian GNU/Linux system. diff --git a/debian/update-distcc-symlinks.in b/debian/update-distcc-symlinks.in new file mode 100644 index 0000000..cda89e1 --- /dev/null +++ b/debian/update-distcc-symlinks.in @@ -0,0 +1,67 @@ +#!/usr/bin/perl + +use strict; +use warnings FATAL => "all"; + +my $distcc_dir = "/usr/lib/distcc"; +my $old_gcc_dir = "/usr/lib/gcc"; +my $new_gcc_dir = "/usr/lib/%DEB_HOST_MULTIARCH%/gcc"; +my %old_symlinks; # Current compiler names in /usr/lib/distcc +my %new_symlinks; # Compiler names that should be in /usr/lib/distcc +my @standard_names = qw(cc c++); + +sub consider { + my ($name) = @_; + if (-x "/usr/bin/$name") { + $new_symlinks{$name} = 1; + } +} + +sub consider_gcc { + my ($prefix, $suffix) = @_; + consider "${prefix}gcc${suffix}"; + consider "${prefix}g++${suffix}"; +} + +# Find existing standard compiler names. +foreach (@standard_names) { + consider $_; +} + +# Find existing GCC variants. +consider_gcc "", ""; +consider_gcc "c89-", ""; +consider_gcc "c99-", ""; +foreach my $dir (<$old_gcc_dir/*>, <$new_gcc_dir/*>) { + (my $kind = $dir) =~ s|.*/||; + consider_gcc "$kind-", ""; + foreach (<$dir/*>) { + if (! -l $_ and -d $_) { + s|.*/||; + consider_gcc "", "-$_"; + consider_gcc "$kind-", "-$_"; + } + } +} + +# Find existing symlinks. +foreach (<$distcc_dir/*>) { + if (-l) { + s|.*/||; + $old_symlinks{$_} = 1; + } +} + +# Remove obsolete symlinks. +foreach (keys %old_symlinks) { + if (! exists $new_symlinks{$_}) { + unlink "$distcc_dir/$_"; + } +} + +# Add missing symlinks. +foreach (keys %new_symlinks) { + if (! exists $old_symlinks{$_}) { + symlink "../../bin/distcc", "$distcc_dir/$_"; + } +} -- 1.7.7.3