From: Joey Hess Date: Wed, 23 Apr 2008 23:14:56 +0000 (-0400) Subject: initial version of dh, with option parsing and sequences in place X-Git-Tag: 7.0.0~16 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=26f1964c1dec6991f12ef19cde2974bc6abdbb18;p=debhelper.git initial version of dh, with option parsing and sequences in place --- 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 +commands in sequence, or use L to automate this process. Examples of +rules files that use debhelper are in F 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 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 sequence [B<--until> I] [B<--before> I] [B<--after> I] [B<--remaining> [S>] + +=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 + +Run commands in the sequence until and including I, then stop. + +=item B<--before> I + +Run commands in the sequence before I, then stop. + +=item B<--after> I + +Run commands in the sequence that come after I. + +=item B<--remaining> + +Run all commands in the sequence that have yet to be run. + +=head1 COMMAND SPECIFICATON + +I 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/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, 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 + +This program is a part of debhelper. + +=head1 AUTHOR + +Joey Hess + +=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 deleted file mode 100755 index e461982..0000000 --- a/examples/rules +++ /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/ - #$(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 index 0000000..0324ef5 --- /dev/null +++ b/examples/rules.arch @@ -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/ + #$(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