Package: debhelper Version: 8.0.0 Severity: normal Tags: patch I have attached a patch to add support for build-arch and build-indep targets to the example rules files.
Additionally (not in the patch), I noticed that there is a great deal of similarity between the rules.arch, rules.indep and rules.multi files. Is there actually a need for these three separate files rather than simply having a single one (based on rules.multi)? The multi rules file is hardly more complex than the single binary rules files, having all the same targets, and it's not like maintaining a package making a single binary is any different from one containing multiple binaries. In fact, encouraging use of the multi-rules file from the start makes things much simpler down the line, when a maintainer needs to add additional packages and finds that they need to refactor stuff. The unused -arch or -indep targets will simply do nothing until required. Also, given its much simpler nature, and reduction of long term maintenance burden on Debian when we want to make archive-wide updates due to Policy changes, is the tiny rules file being promoted as the "recommended way" to use debhelper? Should it be? (Either that, or cdbs w/ debhelper.) Thanks, Roger -- System Information: Debian Release: squeeze/sid APT prefers unstable APT policy: (550, 'unstable'), (400, 'experimental') Architecture: amd64 (x86_64) Kernel: Linux 2.6.36-trunk-amd64 (SMP w/4 CPU cores) Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages debhelper depends on: ii binutils 2.20.1-15 The GNU assembler, linker and bina ii dpkg-dev 1.15.8.6 Debian package development tools ii file 5.04-5 Determines file type using "magic" ii html2text 1.3.2a-15 advanced HTML to text converter ii man-db 2.5.7-6 on-line manual pager ii perl 5.10.1-16 Larry Wall's Practical Extraction ii perl-base 5.10.1-16 minimal Perl system ii po-debconf 1.0.16+nmu1 tool for managing templates file t debhelper recommends no packages. Versions of packages debhelper suggests: ii dh-make 0.55 tool that converts source archives -- no debconf information
>From 5bae1f9768c355be4cfbfd34ca0879f0d8ac350d Mon Sep 17 00:00:00 2001 From: Roger Leigh <rle...@debian.org> Date: Thu, 25 Nov 2010 10:36:28 +0000 Subject: [PATCH] examples: Update examples to use build-arch and build-indep targets Add build-arch and build-indep targets to all rules files. The existing build target depends upon both of these targets. Add corresponding install-arch and install-indep targets. Existing binary-arch and binary-indep targets use new rules in place of old build and install targets. Additional changes are to give better guidance as to best practice in writing scripts and makefiles. Example install command uses: - DESTDIR in place of prefix (much less broken where prefix is not present in variables such as $(sysconfdir) and $(localstatedir), for example). - $(CURDIR) used in place of `pwd` (more efficient, no external command is run). - Uses $$(dh_listpackages) in place of `dh_listpackages` (more robust if changed in the future, given the broken quoting behaviour of backquotes). Stamp files touch "$@" rather than the stamp file name (more robust if the target name changes). Trailing whitespace cleaned up. rules.multi2 was deleted. Its pattern rule to build individual packages does not work with separate build-arch and build-indep targets, because it requires us to know if the package is architecture dependent or independent. This could probably be accomplished using some quite complex shell functions to run and parse the output of dh_listpackages. But given the lack of need for this functionality (dpkg-buildpackage doesn't make use of it, and it's not mentioned in Policy), I removed it. Signed-off-by: Roger Leigh <rle...@debian.org> --- examples/rules.arch | 40 ++++++++++++++------ examples/rules.indep | 40 ++++++++++++++------ examples/rules.multi | 62 +++++++++++++++++++++--------- examples/rules.multi2 | 98 ------------------------------------------------- 4 files changed, 99 insertions(+), 141 deletions(-) delete mode 100755 examples/rules.multi2 diff --git a/examples/rules.arch b/examples/rules.arch index adfc385..66d1f79 100755 --- a/examples/rules.arch +++ b/examples/rules.arch @@ -1,25 +1,37 @@ #!/usr/bin/make -f # Sample debian/rules that uses debhelper. -# This file is public domain software, originally written by Joey Hess. +# 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: +build-indep: build-indep-stamp +build-indep-stamp: +# We have nothing to do by default. +# dh_testdir + + # Add here commands to compile the architecture independent + # parts of the package. + #$(MAKE) doc + +# touch "$@" + +build-arch: build-arch-stamp +build-arch-stamp: dh_testdir - # Add here commands to compile the package. + # Add here commands to compile the architecture dependent + # parts of the package. #$(MAKE) - touch build-stamp + touch "$@" clean: dh_testdir dh_testroot - rm -f build-stamp + rm -f build-indep-stamp build-arch-stamp # Add here commands to clean up after the build process. #$(MAKE) clean @@ -27,21 +39,24 @@ clean: dh_clean -install: build +install-indep: build-indep +# We have nothing to do by default. + +install-arch: build-arch dh_testdir dh_testroot dh_prep dh_installdirs # Add here commands to install the package into debian/<packagename> - #$(MAKE) prefix=`pwd`/debian/`dh_listpackages`/usr install + #$(MAKE) DESTDIR=$(CURDIR)/debian/$$(dh_listpackages) install # Build architecture-independent files here. -binary-indep: build install +binary-indep: build-indep install-indep # We have nothing to do by default. # Build architecture-dependent files here. -binary-arch: build install +binary-arch: build-arch install-arch dh_testdir dh_testroot dh_installchangelogs @@ -49,7 +64,7 @@ binary-arch: build install dh_installexamples # dh_install # dh_installmenu -# dh_installdebconf +# dh_installdebconf # dh_installlogrotate # dh_installemacsen # dh_installcatalogs @@ -76,5 +91,6 @@ binary-arch: build install dh_md5sums dh_builddeb +build: build-indep build-arch binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install +.PHONY: build-indep build-arch build clean binary-indep binary-arch binary install-indep install-arch diff --git a/examples/rules.indep b/examples/rules.indep index 831365a..a3ebf53 100755 --- a/examples/rules.indep +++ b/examples/rules.indep @@ -1,5 +1,5 @@ #!/usr/bin/make -f -# Sample debian/rules that uses debhelper. +# 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 independent. @@ -7,19 +7,31 @@ # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 -build: build-stamp -build-stamp: +build-indep: build-indep-stamp +build-indep-stamp: dh_testdir - # Add here commands to compile the package. + # Add here commands to compile the architecture independent + # parts of the package. #$(MAKE) - touch build-stamp + touch "$@" + +build-arch: build-arch-stamp +build-arch-stamp: +# We have nothing to do by default. +# dh_testdir + + # Add here commands to compile the architecture dependent + # parts of the package. + #$(MAKE) + +# touch "$@" clean: dh_testdir dh_testroot - rm -f build-stamp + rm -f build-indep-stamp build-arch-stamp # Add here commands to clean up after the build process. #$(MAKE) clean @@ -27,17 +39,20 @@ clean: dh_clean -install: build +install-indep: build-indep dh_testdir dh_testroot dh_prep dh_installdirs - # Add here commands to install the package into debian/<packagename>. - #$(MAKE) prefix=`pwd`/debian/`dh_listpackages`/usr install + # Add here commands to install the package into debian/<packagename> + #$(MAKE) DESTDIR=$(CURDIR)/debian/$$(dh_listpackages) install + +install-arch: build-arch +# We have nothing to do by default. # Build architecture-independent files here. -binary-indep: build install +binary-indep: build-indep install-indep dh_testdir dh_testroot dh_installchangelogs @@ -69,8 +84,9 @@ binary-indep: build install dh_builddeb # Build architecture-dependent files here. -binary-arch: build install +binary-arch: build-arch install-arch # We have nothing to do by default. +build: build-indep build-arch binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install +.PHONY: build-indep build-arch build clean binary-indep binary-arch binary install-indep install-arch diff --git a/examples/rules.multi b/examples/rules.multi index 78d6279..31ff954 100755 --- a/examples/rules.multi +++ b/examples/rules.multi @@ -1,27 +1,38 @@ #!/usr/bin/make -f -# Sample debian/rules that uses debhelper. +# Sample debian/rules that uses debhelper. # This file is public domain software, originally written by Joey Hess. # # This version is for a hypothetical package that builds an # architecture-dependant package, as well as an architecture-independent # package. -# Uncomment this to turn on verbose mode. +# Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 -build: build-stamp -build-stamp: +build-indep: build-indep-stamp +build-indep-stamp: dh_testdir - # Add here commands to compile the package. + # Add here commands to compile the architecture independent + # parts of the package. + #$(MAKE) doc + + touch "$@" + +build-arch: build-arch-stamp +build-arch-stamp: + dh_testdir + + # Add here commands to compile the architecture dependent + # parts of the package. #$(MAKE) - touch build-stamp + touch "$@" clean: dh_testdir dh_testroot - rm -f build-stamp + rm -f build-indep-stamp build-arch-stamp # Add here commands to clean up after the build process. #$(MAKE) clean @@ -29,20 +40,32 @@ clean: dh_clean -install: -install: build - dh_testdir - dh_testroot - dh_prep - dh_installdirs +install-indep: build-indep + dh_testdir -i + dh_testroot -i + dh_prep -i + dh_installdirs -i + + # Add here commands to install the architecture independent + # parts of the package into debian/tmp. + #$(MAKE) DESTDIR=$(CURDIR)/debian/tmp install-docs + + dh_install -i + +install-arch: build-arch + dh_testdir -a + dh_testroot -a + dh_prep -a + dh_installdirs -a - # Add here commands to install the package into debian/tmp. - #$(MAKE) prefix=`pwd`/debian/tmp/usr install + # Add here commands to install the architecture dependent + # parts of the package into debian/tmp. + #$(MAKE) DESTDIR=$(CURDIR)/debian/tmp install - dh_install + dh_install -a # Build architecture-independent files here. -binary-indep: build install +binary-indep: build-indep install-indep dh_testdir -i dh_testroot -i dh_installchangelogs -i @@ -74,7 +97,7 @@ binary-indep: build install dh_builddeb -i # Build architecture-dependent files here. -binary-arch: build install +binary-arch: build-arch install-arch dh_testdir -a dh_testroot -a dh_installchangelogs -a @@ -108,5 +131,6 @@ binary-arch: build install dh_md5sums -a dh_builddeb -a +build: build-indep build-arch binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install +.PHONY: build-indep build-arch build clean binary-indep binary-arch binary install-indep install-arch diff --git a/examples/rules.multi2 b/examples/rules.multi2 deleted file mode 100755 index ae5a9ca..0000000 --- a/examples/rules.multi2 +++ /dev/null @@ -1,98 +0,0 @@ -#!/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 a multibinary package. It also allows you to build any -# of the binary packages independantly, via binary-<package> targets. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -# This has to be exported to make some magic below work. -export DH_OPTIONS - -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: DH_OPTIONS= -install: build - dh_testdir - dh_testroot - dh_prep - dh_installdirs - - # Add here commands to install the package into debian/tmp. - #$(MAKE) prefix=`pwd`/debian/tmp/usr install - - dh_install - -# This single target is used to build all the packages, all at once, or -# one at a time. So keep in mind: any options passed to commands here will -# affect _all_ packages. Anything you want to only affect one package -# should be put in another target, such as the install target. -binary-common: - dh_testdir - dh_testroot - dh_installchangelogs - dh_installdocs - dh_installexamples - dh_installmenu -# dh_installdebconf -# dh_installlogrotate -# dh_installemacsen -# dh_installcatalogs -# dh_installpam -# dh_installmime -# dh_installinit -# dh_installman -# dh_installcron -# dh_installinfo -# dh_installwm -# dh_installudev -# dh_lintian -# dh_bugfiles -# dh_undocumented - dh_strip - dh_link - dh_compress - dh_fixperms -# dh_perl -# dh_makeshlibs - dh_installdeb - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -# Build architecture independant packages using the common target. -binary-indep: build install -# (Uncomment this next line if you have such packages.) -# $(MAKE) -f debian/rules DH_OPTIONS=-i binary-common - -# Build architecture dependant packages using the common target. -binary-arch: build install - $(MAKE) -f debian/rules DH_OPTIONS=-a binary-common - -# Any other binary targets build just one binary package at a time. -binary-%: build install - make -f debian/rules binary-common DH_OPTIONS=-p$* - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary-common binary install -- 1.7.2.3