diff options
-rw-r--r-- | Debian/Debhelper/Dh_Getopt.pm | 5 | ||||
-rw-r--r-- | debhelper.pod | 16 | ||||
-rwxr-xr-x | dh | 272 | ||||
-rwxr-xr-x | dh_builddeb | 2 | ||||
-rwxr-xr-x | examples/rules.arch (renamed from examples/rules) | 2 |
5 files changed, 286 insertions, 11 deletions
diff --git a/Debian/Debhelper/Dh_Getopt.pm b/Debian/Debhelper/Dh_Getopt.pm index 6f95dd35..0b105244 100644 --- a/Debian/Debhelper/Dh_Getopt.pm +++ b/Debian/Debhelper/Dh_Getopt.pm @@ -176,6 +176,11 @@ sub parseopts { "language=s" => \$options{LANGUAGE}, + "until=s" => \$options{UNTIL}, + "before=s" => \$options{BEFORE}, + "after=s" => \$options{AFTER}, + "remaining" => \$options{REMAINING}, + "<>" => \&NonOption, ); diff --git a/debhelper.pod b/debhelper.pod index b67ec950..8b5e883c 100644 --- a/debhelper.pod +++ b/debhelper.pod @@ -17,9 +17,8 @@ policy changes, and packages that use them will require only a rebuild to comply with the new policy. A typical debian/rules file that uses debhelper will call several debhelper -commands in sequence. Debhelper commands are all named with a "dh_" prefix. -Examples of rules files that use debhelper are in -F</usr/share/doc/debhelper/examples/> +commands in sequence, or use L<dh(1)> to automate this process. Examples of +rules files that use debhelper are in F</usr/share/doc/debhelper/examples/> To create a new debian package using debhelper, you can just copy one of the sample rules files and edit it by hand. Or you can try the dh-make @@ -184,9 +183,6 @@ B<-a>, B<-i>, B<-p>, and B<-s> parameters. These parameters are cumulative. If none are given, debhelper programs default to acting on all packages listed in the control file. -See F</usr/share/doc/debhelper/examples/rules.multi> for an example of how to -use this in a package that generates multiple binary packages. - =head2 Automatic generation of debian install scripts Some debhelper commands will automatically generate parts of debian @@ -256,9 +252,9 @@ introduced. You tell debhelper which compatibility level it should use, and it modifies its behavior in various ways. Tell debhelper what compatibility level to use by writing a number to -debian/compat. For example, to turn on V5 mode: +debian/compat. For example, to turn on V7 mode: - % echo 5 > debian/compat + % echo 7 > debian/compat Unless otherwise indicated, all debhelper documentation assumes that you are using the most recent compatibility level, and in most cases does not @@ -443,9 +439,9 @@ Once your package uses debhelper to build, be sure to add debhelper to your Build-Depends line in debian/control. You should build-depend on a version of debhelper equal to (or greater than) the debhelper compatibility level your package uses. So if your package used -compatibility level 6: +compatibility level 7: - Build-Depends: debhelper (>= 6) + Build-Depends: debhelper (>= 7) =head1 ENVIRONMENT @@ -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 diff --git a/dh_builddeb b/dh_builddeb index dcc5af56..466b248b 100755 --- a/dh_builddeb +++ b/dh_builddeb @@ -2,7 +2,7 @@ =head1 NAME -dh_builddeb - build debian packages +dh_builddeb - build debian binary packages =cut diff --git a/examples/rules b/examples/rules.arch index e4619828..0324ef5d 100755 --- a/examples/rules +++ b/examples/rules.arch @@ -1,6 +1,8 @@ #!/usr/bin/make -f # Sample debian/rules that uses debhelper. # This file is public domain software, originally written by Joey Hess. +# +# This version is for packages that are architecture dependent. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 |