X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=dh;h=35fedbb02b9892ec8510d440d9f9d9a8eb7f6c69;hb=1cdb8b8fd1faa5688cde5e96c994ff2a8ae6ae4e;hp=7cba15610e39fd806187c0934cbe34b3d04bce9d;hpb=e7ab4dca7d240f48a51960a6978c05d2f5aa7a97;p=debhelper.git diff --git a/dh b/dh index 7cba156..35fedbb 100755 --- a/dh +++ b/dh @@ -11,7 +11,7 @@ use Debian::Debhelper::Dh_Lib; =head1 SYNOPSIS -B sequence [B<--with> I] [B<--until> I] [B<--before> I] [B<--after> I] [B<--remaining>] [S>] +B sequence [B<--with> I[,I,...]] [B<--until> I] [B<--before> I] [B<--after> I] [B<--remaining>] [S>] =head1 DESCRIPTION @@ -45,13 +45,18 @@ you should Build-Depend on debhelper 7.0.50 or above.) =over 4 -=item B<--with> I +=item B<--with> I[,I,...] Add the debhelper commands specified by the given addon to appropriate places in the sequence of commands that is run. This option can be repeated more -than once, and is used when there is a third-party package that provides -debhelper commands. See "SEQUENCE ADDONS" below for documentation about what -such packages should do to be supported by --with. +than once, or multiple addons can be listed, separated by commas. +This is used when there is a third-party package that provides +debhelper commands. See the PROGRAMMING file for documentation about +the sequence addon interface. + +=item B<--without> I + +The inverse of --with, disables using the given addon. =item B<--until> I @@ -82,28 +87,6 @@ search for a command in the sequence exactly matching the name, to avoid any ambiguity. If there are multiple substring matches, the last one in the sequence will be used. -=head1 SEQUENCE ADDONS - -When B<--with> I is used, dh loads the perl module -Debian::Debhelper::Sequence::I. Two functions are provided to let -the module add its commands to sequences: - -=over 4 - -=item Debian::Debhelper::Dh_Lib::insert_before(existing_command, new_command) - -Insert I in sequences before I. - -=item Debian::Debhelper::Dh_Lib::insert_after(existing_command, new_command) - -Insert I in sequences after I. - -=item Debian::Debhelper::Dh_Lib::remove_command(existing_command) - -Remove I from the list of commands to run. - -=back - =cut sub command_pos { @@ -189,11 +172,22 @@ default. This is how to use dh_pycentral instead. %: dh --with python-central $@ +To patch your package using quilt, you can tell dh to use quilt's dh +sequence addons like this: + + #!/usr/bin/make -f + %: + dh --with quilt $@ + =cut # Stash this away before init modifies it. my @ARGV_orig=@ARGV; +# python-support is enabled by default, at least for now +# (and comes first so python-central loads later and can disable it). +unshift @ARGV, "--with=python-support"; + init(options => { "until=s" => \$dh{UNTIL}, "after=s" => \$dh{AFTER}, @@ -201,7 +195,11 @@ init(options => { "remaining" => \$dh{REMAINING}, "with=s" => sub { my ($option,$value)=@_; - push @{$dh{WITH}},$value; + push @{$dh{WITH}},split(",", $value); + }, + "without=s" => sub { + my ($option,$value)=@_; + @{$dh{WITH}} = grep { $_ ne $value } @{$dh{WITH}}; }, }); inhibit_log(); @@ -249,12 +247,11 @@ $sequences{install} = [@{$sequences{build}}, qw{ dh_installudev dh_installwm dh_installxfonts + dh_bugfiles dh_lintian - dh_desktop dh_gconf dh_icons dh_perl - dh_scrollkeeper dh_usrlocal dh_link @@ -275,9 +272,6 @@ $sequences{binary} = [@{$sequences{install}}, qw{ }, @b]; $sequences{'binary-arch'} = [@{$sequences{binary}}]; -# --with python-support is enabled by default, at least for now -unshift @{$dh{WITH}}, "python-support"; - # sequence addon interface sub _insert { my $offset=shift; @@ -361,11 +355,11 @@ elsif ($sequence eq 'binary-indep') { while (@ARGV_orig) { my $opt=shift @ARGV_orig; next if $opt eq $sequence; - if ($opt =~ /^--?(after|until|before|with)$/) { + if ($opt =~ /^--?(after|until|before|with|without)$/) { shift @ARGV_orig; next; } - elsif ($opt =~ /^--?(no-act|remaining|(after|until|before|with)=)/) { + elsif ($opt =~ /^--?(no-act|remaining|(after|until|before|with|without)=)/) { next; } push @options, $opt; @@ -375,7 +369,7 @@ while (@ARGV_orig) { my %logged; my %startpoint; foreach my $package (@packages) { - my @log=loadlog($package); + my @log=load_log($package, \%logged); if ($dh{AFTER}) { # Run commands in the sequence that come after the # specified command. @@ -385,7 +379,7 @@ foreach my $package (@packages) { # no commands remain to run after it, communicating to # future dh instances that the specified command should not # be run again. - writelog($sequence[$startpoint{$package}-1], $package); + write_log($sequence[$startpoint{$package}-1], $package); } elsif ($dh{REMAINING}) { # Start at the beginning so all remaining commands will get @@ -442,6 +436,10 @@ sub run { my @exclude=@{shift()}; my @options=@_; + # If some packages are excluded, add flags + # to prevent them from being acted on. + push @options, map { "-N$_" } @exclude; + # Check for override targets in debian/rules and # run them instead of running the command directly. my $override_command; @@ -453,11 +451,6 @@ sub run { $command="debian/rules"; @options="override_".$override_command; } - else { - # If some packages are excluded, add flags - # to prevent them from being acted on. - push @options, map { "-N$_" } @exclude; - } # 3 space indent lines the command being run up under the # sequence name after "dh ". @@ -477,32 +470,17 @@ sub run { # Need to handle logging for overriden commands here, # because the actual debhelper command may not have # been run by the rules file target. - my %packages=map { $_ => 1 } @packages; - map { delete $packages{$_} } @exclude; - writelog($override_command, keys %packages); + # (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; + write_log($override_command, keys %packages); + } } } } -sub loadlog { - my $package=shift; - my $ext=pkgext($package); - - my @log; - open(LOG, "<", "debian/${ext}debhelper.log") || return; - while () { - chomp; - push @log, $_; - $logged{$package}{$_}=1; - } - close LOG; - return @log; -} - -sub writelog { - Debian::Debhelper::Dh_Lib::write_log(@_); -} - { my %targets; my $rules_parsed; @@ -515,7 +493,7 @@ sub rules_explicit_target { if (! $rules_parsed) { my $processing_targets = 0; my $not_a_target = 0; - open(MAKE, "LANG=C make -Rrnpsf debian/rules debhelper-fail-me 2>/dev/null |"); + open(MAKE, "LC_ALL=C make -Rrnpsf debian/rules debhelper-fail-me 2>/dev/null |"); while () { if ($processing_targets) { if (/^# Not a target:/) {