Ccing Roger since I am shortly leaving for Debconf and will be traveling for the next 4 days.
Thomas Preud'homme wrote:
> Since debhelper 8.9.1, debhelper fails to run install sequence in compat 9:
> debian/rules binary directly starts running dh_strip, skipping notably all the
> dh_[auto_]install helpers. It seems that optimize_sequence is the culprit here
> since the change
>
> -my @sequence=optimize_sequence(@{$sequences{$sequence}});
> +my @sequence=@{$sequences{$sequence}};
>
> make the bug disappear.
Analysis: This is caused by the rules file having an explicit build target.
dh expands "binary" to these targets:
debian/rules install
debian/rules binary-arch
debian/rules binary-indep
optimize_sequence expands them to this list of commands:
install =>
debian/rules build # to be run directly
dh_testroot dh_prep
dh_installdirs dh_auto_install dh_install dh_installdocs
dh_installchangelogs dh_installexamples dh_installman dh_installcatalogs
dh_installcron dh_installdebconf dh_installemacsen dh_installifupdown
dh_installinfo dh_installinit dh_installmenu dh_installmime
dh_installmodules dh_installlogcheck dh_installlogrotate dh_installpam
dh_installppp dh_installudev dh_installwm dh_installxfonts
dh_installgsettings dh_bugfiles dh_ucf dh_lintian dh_gconf dh_icons
dh_perl dh_usrlocal dh_link dh_compress dh_fixperms
install-arch => build-arch =>
dh_testdir dh_auto_configure dh_auto_build dh_auto_test <-- MARK
install-indep => build-indep => (optimised away)
binary-arch =>
dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb
dh_gencontrol dh_md5sums dh_builddeb
binary-indep => (optimised away)
Now since the last command run by the build target was dh_auto_test,
dh starts from that in the above list as marked, which skips all the install
target's commands. (This skipping to last command run is required for
various --before --after stuff IIRC.)
When there is no explicit build target, the command list instead starts
with the build-arch sequence (containing dh_auto_test), and so debhelper
only skips that and gets right to dh_installdirs etc as expected.
So the problem is that the explicit build target, coupled with
install-arch being inserted later (as a dependency of the install target),
results in a badly ordered sequence.
Hmm, one possible fix could be to make it realize that an explicit build
target should mean it does not need to add build-arch as a dependency
for install-indep. Instead it should just be able to add the explit
build target as a dependency,
diff --git a/dh b/dh
index 443d934..8d73add 100755
--- a/dh
+++ b/dh
@@ -447,8 +447,14 @@ if (! compat(8)) {
# run standard sequence (this is faster)
$sequences{build} = [@bd];
}
- $sequences{'install-indep'} = [rules("build-indep"), @i];
- $sequences{'install-arch'} = [rules("build-arch"), @i];
+ if (rules_explicit_target('build')) {
+ $sequences{'install-indep'} = [rules("build"), @i];
+ $sequences{'install-arch'} = [rules("build"), @i];
+ }
+ else {
+ $sequences{'install-indep'} = [rules("build-indep"), @i];
+ $sequences{'install-arch'} = [rules("build-arch"), @i];
+ }
if (rules_explicit_target('install-arch') ||
rules_explicit_target('install-indep')) {
# run sequences separately
The only problem I see with this offhand is that if the package has
explicit build, build-arch, and build-indep, install-arch will result
in build-indep being run.
--
see shy jo
signature.asc
Description: Digital signature

