]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh
Improve handling of logging in override targets
[debhelper.git] / dh
diff --git a/dh b/dh
index f267a326825b3f71a4770f5966361d43fddaa963..9e6fa04e65d8d1e3dde932690d6f0c232576a94b 100755 (executable)
--- a/dh
+++ b/dh
@@ -16,13 +16,15 @@ B<dh> I<sequence> [B<--with> I<addon>[B<,>I<addon> ...]] [B<--list>] [B<--until>
 =head1 DESCRIPTION
 
 B<dh> runs a sequence of debhelper commands. The supported I<sequence>s
-correspond to the targets of a F<debian/rules> file: B<build>, B<clean>,
+correspond to the targets of a F<debian/rules> file: B<build-arch>,
+B<build-indep>, B<build>, B<clean>, B<install-indep>, B<install-arch>,
 B<install>, B<binary-arch>, B<binary-indep>, and B<binary>.
 
-Commands in the B<binary-indep> sequence are passed the B<-i> option to ensure
-they only work on binary independent packages, and commands in the
-B<binary-arch> sequences are passed the B<-a> option to ensure they only work
-on architecture dependent packages.
+Commands in the B<build-indep>, B<install-indep> and B<binary-indep>
+sequences are passed the B<-i> option to ensure they only work on
+architecture independent packages, and commands in the B<build-arch>,
+B<install-arch> and B<binary-arch> sequences are passed the B<-a>
+option to ensure they only work on architecture dependent packages.
 
 If F<debian/rules> contains a target with a name like B<override_>I<dh_command>,
 then when it would normally run I<dh_command>, B<dh> will instead call that
@@ -233,7 +235,7 @@ L<dh_listpackages(1)> to test what is being built. For example:
        
        override_dh_fixperms:
                dh_fixperms
-       ifneq (,$(findstring foo, $(shell dh_listpackages)))
+       ifneq (,$(filter foo, $(shell dh_listpackages)))
                chmod 4755 debian/foo/usr/bin/foo
        endif
 
@@ -322,12 +324,14 @@ $sequences{build} = [qw{
        dh_auto_build
        dh_auto_test
 }],
+$sequences{'build-indep'} = [@{$sequences{build}}];
+$sequences{'build-arch'} = [@{$sequences{build}}];
 $sequences{clean} = [qw{
        dh_testdir
        dh_auto_clean
        dh_clean
 }];
-$sequences{install} = [@{$sequences{build}}, qw{
+my @i = qw{
        dh_testroot
        dh_prep
        dh_installdirs
@@ -366,20 +370,24 @@ $sequences{install} = [@{$sequences{build}}, qw{
        dh_link
        dh_compress
        dh_fixperms
-}];
+};
+$sequences{'install'} = [@{$sequences{build}}, @i];
+$sequences{'install-indep'} = [@{$sequences{'build-indep'}}, @i];
+$sequences{'install-arch'} = [@{$sequences{'build-arch'}}, @i];
+my @ba=qw{
+       dh_strip
+       dh_makeshlibs
+       dh_shlibdeps
+};
 my @b=qw{
        dh_installdeb
        dh_gencontrol
        dh_md5sums
        dh_builddeb
 };
-$sequences{'binary-indep'} = [@{$sequences{install}}, @b];
-$sequences{binary} = [@{$sequences{install}}, qw{
-       dh_strip
-       dh_makeshlibs
-       dh_shlibdeps
-}, @b];
-$sequences{'binary-arch'} = [@{$sequences{binary}}];
+$sequences{binary} = [@{$sequences{install}}, @ba, @b];
+$sequences{'binary-indep'} = [@{$sequences{'install-indep'}}, @b];
+$sequences{'binary-arch'} = [@{$sequences{'install-arch'}}, @ba, @b];
 
 # Additional command options
 my %command_opts;
@@ -514,14 +522,18 @@ my @packages=@{$dh{DOPACKAGES}};
 # Get the options to pass to commands in the sequence.
 # Filter out options intended only for this program.
 my @options;
-if ($sequence eq 'binary-arch') {
+if ($sequence eq 'build-arch' ||
+    $sequence eq 'install-arch' ||
+    $sequence eq 'binary-arch') {
        push @options, "-a";
        # as an optimisation, remove from the list any packages
        # that are not arch dependent
        my %arch_packages = map { $_ => 1 } getpackages("arch");
        @packages = grep { $arch_packages{$_} } @packages;
 }
-elsif ($sequence eq 'binary-indep') {
+elsif ($sequence eq 'build-indep' ||
+       $sequence eq 'install-indep' ||
+       $sequence eq 'binary-indep') {
        push @options, "-i";
        # ditto optimisation for arch indep
        my %indep_packages = map { $_ => 1 } getpackages("indep");
@@ -635,6 +647,7 @@ sub run {
                        # This passes the options through to commands called
                        # inside the target.
                        $ENV{DH_INTERNAL_OPTIONS}=join("\x1e", @options);
+                       $ENV{DH_INTERNAL_OVERRIDE}=$command;
                        $command="debian/rules";
                        @options="override_".$override_command;
                }
@@ -655,10 +668,11 @@ sub run {
        else {
                print "   ", "# Skipping ", $override_command, " - empty override", "\n";
        }
-
+                               
        if (! $dh{NO_ACT}) {
                if (defined $command) {
                        my $ret=system($command, @options);
+                       
                        if ($ret >> 8 != 0) {
                                exit $ret >> 8;
                        }
@@ -668,17 +682,19 @@ sub run {
                }
 
                if (defined $override_command) {
-                       delete $ENV{DH_INTERNAL_OPTIONS};
-                       # Need to handle logging for overriden commands here,
-                       # because the actual debhelper command may not have
-                       # been run by the rules file target.
+                       # Update log for overridden command now that it has
+                       # finished successfully.
                        # (But avoid logging for dh_clean since it removes
                        # the log earlier.)
                        if ($override_command ne 'dh_clean') {
                                my %packages=map { $_ => 1 } @packages;
                                map { delete $packages{$_} } @exclude;
+                               commit_override_log(keys %packages);
                                write_log($override_command, keys %packages);
                        }
+
+                       delete $ENV{DH_INTERNAL_OPTIONS};
+                       delete $ENV{DH_INTERNAL_OVERRIDE};
                }
        }
 }