summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@kodama.kitenet.net>2008-04-23 19:14:56 -0400
committerJoey Hess <joey@kodama.kitenet.net>2008-04-23 19:14:56 -0400
commit26f1964c1dec6991f12ef19cde2974bc6abdbb18 (patch)
treeaf2c9f42578bf5924390f92e830b53cde71d3d14
parent709cc5dfd66b5c061327d6fc6cb6b2df55c18d4e (diff)
initial version of dh, with option parsing and sequences in place
-rw-r--r--Debian/Debhelper/Dh_Getopt.pm5
-rw-r--r--debhelper.pod16
-rwxr-xr-xdh272
-rwxr-xr-xdh_builddeb2
-rwxr-xr-xexamples/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 6f95dd3..0b10524 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 b67ec95..8b5e883 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
diff --git a/dh b/dh
new file mode 100755
index 0000000..e5a43a9
--- /dev/null
+++ b/dh
@@ -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 dcc5af5..466b248 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 e461982..0324ef5 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