X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=dh;h=775e94921d90b64a39d89f391fcaf2a6f18b7aeb;hb=17bf50c840dcbc9cece5b6a18ed0fe1574bf99a0;hp=35fedbb02b9892ec8510d440d9f9d9a8eb7f6c69;hpb=c7884d638fdf67ae987fdcca9c7384f06fb7cd3c;p=debhelper.git diff --git a/dh b/dh index 35fedbb..775e949 100755 --- a/dh +++ b/dh @@ -11,7 +11,7 @@ use Debian::Debhelper::Dh_Lib; =head1 SYNOPSIS -B sequence [B<--with> I[,I,...]] [B<--until> I] [B<--before> I] [B<--after> I] [B<--remaining>] [S>] +B sequence [B<--with> I[,I,...]] [B<--list>] [B<--until> I] [B<--before> I] [B<--after> I] [B<--remaining>] [S>] =head1 DESCRIPTION @@ -41,6 +41,13 @@ override target can then run the command with additional options, or run entirely different commands instead. (Note that to use this feature, you should Build-Depend on debhelper 7.0.50 or above.) +dh passes --parallel to dh_auto_* commands if it detects being run by the +C command, but a job server of the parent I +(presumably debian/rules) is not reachable. Nonetheless, it is highly +recommended to pass --parallel/-j option to dh explicitly to indicate that a +source package supports parallel building. See L for more information. + =head1 OPTIONS =over 4 @@ -58,6 +65,10 @@ the sequence addon interface. The inverse of --with, disables using the given addon. +=item B<--list>, B<-l> + +List all available addons. + =item B<--until> I Run commands in the sequence until and including I, then stop. @@ -179,6 +190,16 @@ sequence addons like this: %: dh --with quilt $@ +Here is an example of overriding where the dh_auto_* commands find +the package's source, for a package where the source is located in a +subdirectory. It also forces use of perl's Module::Build build system, +which can be necessary if debhelper wrongly detects that the package +uses MakeMaker. + + #!/usr/bin/make -f + %: + dh --sourcedirectory=src --buildsystem=perl_build $@ + =cut # Stash this away before init modifies it. @@ -187,6 +208,11 @@ 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"; + +# Disable complaints about unknown options for both dh and the commands +# it runs. This is done because dh accepts and passes on options that may +# be specific to only some debhelper commands. +$ENV{DH_IGNORE_UNKNOWN_OPTIONS}=1; init(options => { "until=s" => \$dh{UNTIL}, @@ -201,9 +227,23 @@ init(options => { my ($option,$value)=@_; @{$dh{WITH}} = grep { $_ ne $value } @{$dh{WITH}}; }, + "l" => \$dh{LIST}, + "list" => \$dh{LIST}, + "j:i" => \$dh{PARALLEL}, + "parallel:i" => \$dh{PARALLEL}, }); inhibit_log(); +# If make was using a jobserver, but it is not available, clean out +# MAKEFLAGS so that further make invocations can start a new job +# server. +if (is_make_jobserver_unavailable()) { + clean_jobserver_makeflags(); + # Implicitly enable parallel (no maximum) if a value was not previously + # specified. + $dh{PARALLEL} = 0 unless defined $dh{PARALLEL}; +} + # Definitions of sequences. my %sequences; $sequences{build} = [qw{ @@ -232,7 +272,6 @@ $sequences{install} = [@{$sequences{build}}, qw{ dh_installcatalogs dh_installcron dh_installdebconf - dh_installcatalogs dh_installemacsen dh_installifupdown dh_installinfo @@ -272,6 +311,9 @@ $sequences{binary} = [@{$sequences{install}}, qw{ }, @b]; $sequences{'binary-arch'} = [@{$sequences{binary}}]; +# Additional command options +my %command_opts; + # sequence addon interface sub _insert { my $offset=shift; @@ -307,12 +349,61 @@ sub remove_command { } } +sub add_command { + my $command=shift; + my $sequence=shift; + unshift @{$sequences{$sequence}}, $command; +} +sub add_command_options { + my $command=shift; + push @{$command_opts{$command}}, @_; +} +sub remove_command_options { + my $command=shift; + if (@_) { + # Remove only specified options + if (my $opts = $command_opts{$command}) { + foreach my $opt (@_) { + $opts = [ grep { $_ ne $opt } @$opts ]; + } + $command_opts{$command} = $opts; + } + } + else { + # Clear all additional options + delete $command_opts{$command}; + } +} + +if ($dh{LIST}) { + my %addons; + + for my $inc (@INC) { + eval q{use File::Spec}; + my $path = File::Spec->catdir($inc, "Debian/Debhelper/Sequence"); + if (-d $path) { + for my $module_path (glob "$path/*.pm") { + my $name = basename($module_path); + $name =~ s/\.pm$//; + $name =~ s/_/-/g; + $addons{$name} = 1; + } + } + } + + for my $name (sort keys %addons) { + print "$name\n"; + } + + exit 0; +} + foreach my $addon (@{$dh{WITH}}) { my $mod="Debian::Debhelper::Sequence::$addon"; $mod=~s/-/_/g; eval "use $mod"; if ($@) { - error("--with $addon not supported or failed to load module $mod"); + error("unable to load addon $addon: $@"); } } @@ -359,7 +450,12 @@ while (@ARGV_orig) { shift @ARGV_orig; next; } - elsif ($opt =~ /^--?(no-act|remaining|(after|until|before|with|without)=)/) { + elsif ($opt =~ /^--?(no-act|remaining|(after|until|before|with|without|parallel)=)/) { + next; + } + elsif ($opt =~ /^(-j|--parallel)$/) { + # Argument to -j/--parallel is optional. + shift @ARGV_orig if @ARGV_orig > 0 && $ARGV_orig[0] =~ /^\d+$/; next; } push @options, $opt; @@ -440,6 +536,12 @@ sub run { # to prevent them from being acted on. push @options, map { "-N$_" } @exclude; + # Pass --parallel to dh_auto_* commands. + if (defined $dh{PARALLEL} && $dh{PARALLEL} != 1 + && $command =~ /^dh_auto_/) { + push @options, "--parallel" . ($dh{PARALLEL} > 1 ? "=$dh{PARALLEL}" : ""); + } + # Check for override targets in debian/rules and # run them instead of running the command directly. my $override_command; @@ -447,10 +549,14 @@ sub run { $override_command=$command; # This passes the options through to commands called # inside the target. - $ENV{DH_INTERNAL_OPTIONS}=join(" ", @options); + $ENV{DH_INTERNAL_OPTIONS}=join("\x1e", @options); $command="debian/rules"; @options="override_".$override_command; } + else { + # Pass additional command options if any + unshift @options, @{$command_opts{$command}} if exists $command_opts{$command}; + } # 3 space indent lines the command being run up under the # sequence name after "dh ".