diff options
Diffstat (limited to 'dh')
-rwxr-xr-x | dh | 272 |
1 files changed, 272 insertions, 0 deletions
@@ -0,0 +1,272 @@ +#!/usr/bin/perl -w + +=head1 NAME + +dh - debhelper command sequencer + +=cut + +use strict; +use Debian::Debhelper::Dh_Lib; + +=head1 SYNOPSIS + +B<dh> sequence [B<--until> I<cmd>] [B<--before> I<cmd>] [B<--after> I<cmd>] [B<--remaining> [S<I<debhelper options>>] + +=head1 DESCRIPTION + +dh runs a sequence of debhelper commands. The supported sequences +correspond to the targets of a debian/rules file: "build", "clean", +"install", "binary-arch", "binary-indep", and "binary". + +Commands in the binary-indep sequence are passed the "-i" option to ensure +they only work on binary independent packages, and commands in the +binary-arch sequences are passed the "-a" option to ensure they only work +on architecture dependent packages. + +Options passed to dh are passed on to each command it runs. This can be +used to set an option like "-v" or "-X" or "-N", as well as for more +specialised options. + +Each debhelper command will record when it's successfully run in +debian/package.log.debhelper. (Which dh_clean deletes.) So dh can tell +which commands have already been run, for which packages, and skip running +those commands again. + +Each time dh is run, it examines the log, and finds the last logged command +that is in the specified sequence. It then continues with the next command +in the sequence. The B<--until>, B<--before>, B<--after>, and B<--remaining> +options can override this behavior. + +=head1 OPTIONS + +=over 4 + +=item B<--until> I<cmd> + +Run commands in the sequence until and including I<cmd>, then stop. + +=item B<--before> I<cmd> + +Run commands in the sequence before I<cmd>, then stop. + +=item B<--after> I<cmd> + +Run commands in the sequence that come after I<cmd>. + +=item B<--remaining> + +Run all commands in the sequence that have yet to be run. + +=head1 COMMAND SPECIFICATON + +I<cmd> can be a full name of a debhelper command, or a substring. It'll first +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 EXAMPLES + +To see what commands are included in a sequence, without actually doing +anything: + + dh binary-arch -n + +This is a very simple rules file, for packages where the default seqences of +commands work with no additional options. + + #!/usr/bin/make -f + %: + dh %@ + +This is a simple rules file that is a good starting place for customisation. +(It's also available in F</usr/share/doc/debhelper/examples/rules.simple> + + #!/usr/bin/make -f + + build: + dh build + + clean: + dh clean + + install: build + dh install + + binary-arch: install + dh binary-arch + + binary-indep: install + dh binary-indep + + binary: binary-arch binary-indep + +Often you'll want to pass an option to ./configure. This uses dh to run all +commands before L<dh_auto_configure(1)>, then runs that command by hand, +and then finished up by running the rest of the sequence. You could also +run ./configure by hand, instead of bothering with using dh_auto_configure. +And if necessary, you can add commands to run automake, etc here too. + + build: + dh build --before configure + dh_auto_configure --kitchen-sink=yes + dh build --after configure + +Here's how to skip two automated in a row (configure and build), and +instead run the commands by hand. + + build: + dh build --before configure + ./mondoconfig + make universe-explode-in-delight + dh build --after build + +Another common case is wanting to run some code manually after a particular +debhelper command is run. + + binary-arch: install + dh binary-arch --until dh_fixperms + # dh_fixperms has run, now override it for one program + chmod 4755 debian/foo/usr/bin/foo + # and continue + dh binary-arch --after dh_fixperms + +It's also fine to run debhelper commands before starting the dh sequence. +Just be sure to use the B<--remaining> option to ensure that commands +that normally come before those in the sequence are still run. + + binary-arch: install + dh_strip -X foo + dh_fixperms -X bar + dh binary-arch --remaining + +=cut + +# Stash this away before init modifies it. +my @ARGV_orig=@ARGV; + +init(); + +# Definitions of sequences. +my %sequences; +$sequences{build} = [qw{ + dh_testdir + dh_auto_configure + dh_auto_build + dh_auto_test +}], +$sequences{clean} = [qw{ + dh_testdir + dh_auto_clean + dh_clean +}]; +$sequences{install} = [@{$sequences{build}}, "dh_testroot", "dh_clean -k", qw{ + dh_installdirs + dh_auto_install + + dh_install + dh_installdocs + dh_installchangelogs + dh_installexamples + dh_installman + + dh_installcatalogs + dh_installcron + dh_installdebconf + dh_installcatalogs + dh_installemacsen + dh_installifupdown + dh_installinfo + dh_installinit + dh_installmenu + dh_installmime + dh_installmodules + dh_installpam + dh_installppp + dh_installudev + dh_installwm + dh_installxfonts + dh_lintian + dh_desktop + dh_gconf + dh_icons + dh_logcheck + dh_logrotate + dh_perl + dh_python + dh_scrollkeeper + dh_uselocal + + dh_link + dh_compress + dh_fixperms +}]; +my @b=qw{ + 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}}]; + +# Sequence parameter. +if (! @ARGV) { + error "specify a sequence to run"; +} +my $sequence=shift; +if (! exists $sequences{$sequence}) { + error "Unknown sequence $sequence (chose from: ". + join(" ", sort keys %sequences).")"; +} + +# 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') { + push @options, "-a"; +} +elsif ($sequence eq 'binary-indep') { + push @options, "-i"; +} +while (@ARGV_orig) { + my $opt=shift @ARGV_orig; + next if $opt eq $sequence; + if ($opt =~ /^--?(after|until|before)$/) { + shift @ARGV_orig; + next; + } + elsif ($opt =~ /^--?(remaining|(after|until|before)=)/) { + next; + } + push @options, $opt; +} + +@options=grep { + $_ ne $sequence && !/^--?(before|after|remaining)$/ +} @options; + +foreach my $cmd (@{$sequences{$sequence}}) { + print "$cmd @options\n"; +} + +foreach my $package (@{$dh{DOPACKAGES}}) { + my $tmp=tmpdir($package); + my $ext=pkgext($package); +} + +=head1 SEE ALSO + +L<debhelper(7)> + +This program is a part of debhelper. + +=head1 AUTHOR + +Joey Hess <joeyh@debian.org> + +=cut |