]> git.donarmstrong.com Git - debhelper.git/commitdiff
initial version of dh, with option parsing and sequences in place
authorJoey Hess <joey@kodama.kitenet.net>
Wed, 23 Apr 2008 23:14:56 +0000 (19:14 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Wed, 23 Apr 2008 23:14:56 +0000 (19:14 -0400)
Debian/Debhelper/Dh_Getopt.pm
debhelper.pod
dh [new file with mode: 0755]
dh_builddeb
examples/rules [deleted file]
examples/rules.arch [new file with mode: 0755]

index 6f95dd35bf844c4f77757059d92d7440fac7409a..0b105244c012b9ee0d0ea2874df776a219077414 100644 (file)
@@ -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,
        );
 
index b67ec950f77ddb3eb3980ffec03e644cb968f58a..8b5e883c3fef6a4a080f2378901759e827071b80 100644 (file)
@@ -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 (executable)
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
index dcc5af56832283d19ca77270d9b7bc7b24894cb7..466b248bf82b58ad9d989409e7e586b61541bd2e 100755 (executable)
@@ -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
deleted file mode 100755 (executable)
index e461982..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/usr/bin/make -f
-# Sample debian/rules that uses debhelper.
-# This file is public domain software, originally written by Joey Hess. 
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-build: build-stamp
-build-stamp:
-       dh_testdir
-
-       # Add here commands to compile the package.
-       #$(MAKE)
-
-       touch build-stamp
-
-clean:
-       dh_testdir
-       dh_testroot
-       rm -f build-stamp
-
-       # Add here commands to clean up after the build process.
-       #$(MAKE) clean
-       #$(MAKE) distclean
-
-       dh_clean
-
-install: build
-       dh_testdir
-       dh_testroot
-       dh_clean -k
-       dh_installdirs
-
-       # Add here commands to install the package into debian/<packagename>
-       #$(MAKE) prefix=`pwd`/debian/`dh_listpackages`/usr install
-
-# Build architecture-independent files here.
-binary-indep: build install
-# We have nothing to do by default.
-
-# Build architecture-dependent files here.
-binary-arch: build install
-       dh_testdir
-       dh_testroot
-       dh_installchangelogs
-       dh_installdocs
-       dh_installexamples
-#      dh_install
-#      dh_installmenu
-#      dh_installdebconf       
-#      dh_installlogrotate
-#      dh_installemacsen
-#      dh_installcatalogs
-#      dh_installpam
-#      dh_installmime
-#      dh_installinit
-#      dh_installcron
-#      dh_installinfo
-#      dh_installwm
-#      dh_installudev
-#      dh_lintian
-#      dh_undocumented
-       dh_installman
-       dh_link
-       dh_strip
-       dh_compress
-       dh_fixperms
-#      dh_perl
-#      dh_python
-#      dh_makeshlibs
-       dh_installdeb
-       dh_shlibdeps
-       dh_gencontrol
-       dh_md5sums
-       dh_builddeb
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install
diff --git a/examples/rules.arch b/examples/rules.arch
new file mode 100755 (executable)
index 0000000..0324ef5
--- /dev/null
@@ -0,0 +1,80 @@
+#!/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
+
+build: build-stamp
+build-stamp:
+       dh_testdir
+
+       # Add here commands to compile the package.
+       #$(MAKE)
+
+       touch build-stamp
+
+clean:
+       dh_testdir
+       dh_testroot
+       rm -f build-stamp
+
+       # Add here commands to clean up after the build process.
+       #$(MAKE) clean
+       #$(MAKE) distclean
+
+       dh_clean
+
+install: build
+       dh_testdir
+       dh_testroot
+       dh_clean -k
+       dh_installdirs
+
+       # Add here commands to install the package into debian/<packagename>
+       #$(MAKE) prefix=`pwd`/debian/`dh_listpackages`/usr install
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+       dh_testdir
+       dh_testroot
+       dh_installchangelogs
+       dh_installdocs
+       dh_installexamples
+#      dh_install
+#      dh_installmenu
+#      dh_installdebconf       
+#      dh_installlogrotate
+#      dh_installemacsen
+#      dh_installcatalogs
+#      dh_installpam
+#      dh_installmime
+#      dh_installinit
+#      dh_installcron
+#      dh_installinfo
+#      dh_installwm
+#      dh_installudev
+#      dh_lintian
+#      dh_undocumented
+       dh_installman
+       dh_link
+       dh_strip
+       dh_compress
+       dh_fixperms
+#      dh_perl
+#      dh_python
+#      dh_makeshlibs
+       dh_installdeb
+       dh_shlibdeps
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install