X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=topgit.git;a=blobdiff_plain;f=debian%2Ftg2quilt.mk;h=671dc04a8b6f6c5d1b0a089405f5719ad4824aa5;hp=0444aab18918ba7b463860a35a830deef1c22f72;hb=40d5fd8c81f74ef6e7e5e6e51bf21d0493487c32;hpb=200b39c0f80396f1f7f66c8b33f6adf87ff6edf4 diff --git a/debian/tg2quilt.mk b/debian/tg2quilt.mk index 0444aab..671dc04 100644 --- a/debian/tg2quilt.mk +++ b/debian/tg2quilt.mk @@ -5,10 +5,15 @@ # a quilt series. # # It is intended to be included from debian/rules files of TopGit-using -# packages, like so: +# packages after including the quilt rules, like so: # +# include /usr/share/quilt/quilt.make # -include /usr/share/topgit/tg2quilt.mk # +# The leading dash is necessary for make not to die when the file is not +# installed. TopGit is not a build dependency (and does not need to be), and +# if the package is not installed, debian/rules can still be used normally. +# # The snippet exports the following targets. These targets only perform the # describe behaviour when invoked from a TopGit repository (`tg summary -t` # returns a non-empty set); used outside, they simply output informational @@ -33,6 +38,9 @@ # removed. This means that edits to the series file are # likely to vanish. # +# tg-cleanexport: recreates the debian/patches directory from scratch, using +# tg-rmdir and tg-export. +# # tg-forceclean: cleans the source tree, just like the debian/rules clean # target, and forcefully removes the debian/patches # directory in doing so. Yes, *force*-fully. WHAM! @@ -41,31 +49,43 @@ # that tg-export is automatically invoked before quilt gets a chance to patch # or unpatch the tree. # -# The PATCHES_DIR variable can be set before including the file to override +# The QUILT_PATCH_DIR variable can be set before including the file to override # the default debian/patches location. # -# Copyright © 2008 martin f. krafft -# Released under terms of the the Artistic Licence 2.0. +# More information, particularly for people working on TopGit-using packages, +# can be found in /usr/share/doc/topgit/HOWTO-tg2quilt.gz . +# +# Copyright © 2008 martin f. krafft Released under terms +# of the the Artistic Licence 2.0. # ifeq ($(shell tg summary -t),) # This is not a TopGit branch, so just blubber a bit. - tg-export tg-clean tg-forceclean tg-rmdir: + tg-export tg-clean tg-forceclean tg-rmdir tg-cleanexport: @echo "E: The $@ target only works from a TopGit repository." >&2 else # We are in a TopGit branch, so let the fun begin. -PATCHES_DIR ?= debian/patches +ifdef PATCHES_DIR + DUMMY := $(warning W: The $$PATCHES_DIR variable is deprecated, please use $$QUILT_PATCH_DIR instead.) + DUMMY := $(warning W: Sleeping for 10 seconds so you can read this!) + DUMMY := $(shell sleep 10) + QUILT_PATCH_DIR := $(PATCHES_DIR) +endif + +QUILT_PATCH_DIR ?= debian/patches +QUILT_STAMPFN ?= patch # Hook tg-export into quilt's make(1) snippet such that it gets executed # before quilt patches or unpatches. -debian/stamp-patched: tg-export +$(QUILT_STAMPFN): tg-export unpatch: __tg-temp-export __tg-temp-export: @echo "Exporting TopGit branches to series so that quilt can clean up..." >&2 - $(MAKE) $(MAKEFLAGS) -f debian/rules tg-export + $(MAKE) --no-print-directory -f debian/rules tg-export +.PHONY: __tg-temp-export # Set some tg-export-specific variables, e.g. default TG_BRANCHES to all # TopGit branches @@ -75,13 +95,13 @@ tg-export: __TG_COMMA := , tg-export: __TG_EMPTY := tg-export: __TG_SPACE := $(__TG_EMPTY) $(__TG_EMPTY) -ifeq ($(wildcard $(PATCHES_DIR)/series),) +ifeq ($(wildcard $(QUILT_PATCH_DIR)/series),) # The series file does not exist, so we proceed normally # tg-export will not work if the target dir already exists, so try to remove # it by calling tg-rmdir tg-export: tg-rmdir - tg export -b $(subst $(__TG_SPACE),$(__TG_COMMA),$(TG_BRANCHES)) --quilt $(PATCHES_DIR) + tg export -b $(subst $(__TG_SPACE),$(__TG_COMMA),$(TG_BRANCHES)) --quilt $(QUILT_PATCH_DIR) else # The series file already exists, so assume there is nothing to do. tg-export: @@ -90,39 +110,43 @@ else @echo "I: (you can ignore this message during a \`tg-clean\` run.)" >&2 endif -ifeq ($(wildcard $(PATCHES_DIR)),) +ifeq ($(wildcard $(QUILT_PATCH_DIR)),) # No patch directory, so nothing to do: tg-rmdir: @true else # There is a patch directory, let's try to clean it out: - tg-rmdir: __TG_FILES := $(shell find $(PATCHES_DIR) -type f -a -not -path \*/series \ + tg-rmdir: __TG_FILES := $(shell find $(QUILT_PATCH_DIR) -type f -a -not -path \*/series \ | xargs grep -l '^tg:') tg-rmdir: # remove all files whose contents matches /^tg:/ - test -n "$(__TG_FILES)" && rm $(__TG_FILES) || : - # remove the series file - test -f $(PATCHES_DIR)/series && rm $(PATCHES_DIR)/series || : + rm -f $(__TG_FILES) + # remove the series file + rm -f $(QUILT_PATCH_DIR)/series # try to remove directories - find $(PATCHES_DIR) -type d | tac | xargs rmdir 2>/dev/null || : + find $(QUILT_PATCH_DIR) -depth -type d -empty -execdir rmdir {} + # fail if the directory could not be removed and still exists - @test ! -d $(PATCHES_DIR) || { \ - echo "E: $(PATCHES_DIR) contains non-TopGit-generated files:" >&2; \ - find $(PATCHES_DIR) -type f -printf 'E: %P\n' >&2; \ + @test ! -d $(QUILT_PATCH_DIR) || { \ + echo "E: $(QUILT_PATCH_DIR) contains non-TopGit-generated files:" >&2; \ + find $(QUILT_PATCH_DIR) -type f -printf 'E: %P\n' >&2; \ false; \ } endif # Make sure that we try to clean up the patches directory last tg-clean: clean - $(MAKE) $(MAKEFLAGS) -f debian/rules tg-rmdir + $(MAKE) --no-print-directory -f debian/rules tg-rmdir tg-forceclean: clean - test -d debian/patches && rm -r $(PATCHES_DIR) || : + test -d $(QUILT_PATCH_DIR) && rm -r $(QUILT_PATCH_DIR) || : + +tg-cleanexport: tg-rmdir + $(MAKE) --no-print-directory -f debian/rules tg-export endif .PHONY: tg-clean tg-export tg-forceclean tg-rmdir # vim:ft=make:ts=8:noet +# -*- Makefile -*-, you silly Emacs! (shamelessly stolen from quilt)