13
13
localedir := $(datadir)/locale
14
14
etcdir := $(subst /usr/etc,/etc,$(prefix)/etc)
16
QUILT_DIR = $(datadir)/$(PACKAGE)
17
SCRIPTS_DIR = $(QUILT_DIR)/scripts
18
LIB_DIR = $(libdir)/$(PACKAGE)
20
16
INSTALL := @INSTALL@
33
MSGMERGE := @MSGMERGE@
35
XGETTEXT := @XGETTEXT@
29
38
DIFFSTAT := @DIFFSTAT@
30
39
RPMBUILD := @RPMBUILD@
40
SENDMAIL := @SENDMAIL@
43
PATCH_WRAPPER := @PATCH_WRAPPER@
46
CPPFLAGS += @CPPFLAGS@ @DEFS@
52
LIBOBJS := $(filter $(patsubst lib/%.c,lib/%.o,$(wildcard lib/*.c)), $(patsubst %,lib/%,@LIBOBJS@))
39
CFLAGS := @CFLAGS@ -Wall
57
COMPAT_SYMLINKS := @COMPAT_SYMLINKS@
58
COMPAT_PROGRAMS := @COMPAT_PROGRAMS@
41
ISODATE := $(shell date +%Y-%m-%d)
43
62
#-----------------------------------------------------------------------
44
DIRT += $(shell find -name '*~')
45
DIRT += $(shell find -name '.\#*')
63
DIRT += $(shell $(FIND) . -name '*~')
64
DIRT += $(shell $(FIND) . -name '.\#*')
47
SRC += COPYING AUTHORS TODO BUGS Makefile.in \
48
configure.ac config/install-sh \
49
quilt.spec.in quilt.changes \
50
bash_completion quilt.quiltrc
66
SRC += COPYING AUTHORS TODO Makefile.in configure.ac \
67
config/install-sh quilt.spec.in quilt.changes \
68
bash_completion quilt.quiltrc aclocal.m4
53
71
BIN_IN := quilt guards
54
72
BIN_SRC := $(BIN_IN:%=%.in)
56
SRC += $(BIN_SRC:%=bin/%)
57
DIRT += $(BIN_IN:%=bin/%)
59
QUILT_IN := add applied delete diff edit files fold fork graph grep \
60
import mail new next patches pop previous push refresh remove \
61
series setup snapshot top unapplied upgrade
74
SRC += $(BIN_SRC:%=bin/%) bin/patch-wrapper.in
75
DIRT += $(BIN_IN:%=bin/%) bin/patch-wrapper
77
QUILT_IN := $(patsubst quilt/%.in,%,$(wildcard quilt/*.in))
63
78
QUILT_SRC := $(QUILT_IN:%=%.in)
64
79
QUILT := $(QUILT_IN)
65
80
SRC += $(QUILT_SRC:%=quilt/%)
66
81
DIRT += $(QUILT_IN:%=quilt/%)
68
SCRIPTS_IN := patchfns parse-patch inspect dependency-graph edmail
83
SCRIPTS_IN := patchfns parse-patch inspect dependency-graph edmail \
69
86
SCRIPTS_SRC := $(SCRIPTS_IN:%=%.in)
70
87
SCRIPTS := $(SCRIPTS_IN)
71
SRC += $(SCRIPTS_SRC:%=scripts/%)
72
DIRT += $(SCRIPTS_IN:%=scripts/%)
88
SRC += $(SCRIPTS_SRC:%=quilt/scripts/%)
89
DIRT += $(SCRIPTS_IN:%=quilt/scripts/%)
91
COMPAT := $(COMPAT_PROGRAMS:%=compat/%) $(COMPAT_SYMLINKS:%=compat/%)
92
SRC += $(wildcard compat/*.in) $(wildcard compat/*.sh)
93
DIRT += $(patsubst %.in,%,$(wildcard compat/*.in)) $(COMPAT_SYMLINKS:%=compat/%)
74
95
LIB_SRC := backup-files.c
96
LIB := backup-files$(EXEEXT)
76
97
SRC += $(LIB_SRC:%=lib/%)
77
DIRT += lib/backup-files lib/backup-files.o
98
DIRT += lib/backup-files$(EXEEXT) $(LIB_SRC:%.c=lib/%.o)
80
101
DOC_SRC := $(DOC_IN:%=doc/%.in)
83
SRC += doc/main.tex doc/quilt.pdf doc/Makefile \
84
doc/sample.quiltrc doc/quilt.1.in \
104
SRC += doc/main.tex doc/quilt.pdf doc/Makefile doc/quilt.1.in \
86
106
DIRT += $(DOC_IN:%=doc/%) doc/quilt.1
88
108
MAN1 := bin/guards.1 doc/quilt.1
91
#DEBIAN := changelog control copyright rules
93
#SRC += $(DEBIAN:%=debian/%)
95
111
LINGUAS := fr de ja
96
PO := Makefile quilt.pot $(LINGUAS:%=%.po)
112
PO := quilt.pot $(LINGUAS:%=%.po)
97
113
SRC += $(PO:%=po/%)
114
DIRT += po/*.mo po/*~
100
SRC += $(wildcard test/*.test) test/run
116
SRC += $(wildcard test/*.test) test/run test/test.quiltrc
101
117
SRC += changes2changelog
119
NON_EXEC_IN := doc/quilt.1 doc/README quilt/scripts/patchfns
121
ISODATE := $(shell date +%Y-%m-%d)
123
TESTS := $(wildcard test/*.test)
124
DIRT += test/.depend $(wildcard test/.*.ok)
126
# Settings for running the uninstalled version of quilt in the source tree:
127
PATH := $(CURDIR)/bin:$(CURDIR)/compat:$(PATH)
128
QUILT_DIR := $(CURDIR)/quilt
129
QUILT_LIB := $(CURDIR)/lib
130
QUILTRC := $(CURDIR)/test/test.quiltrc
131
export QUILT_DIR QUILT_LIB QUILTRC
103
133
#-----------------------------------------------------------------------
106
$(MAKE_NLS) -C po all BUILD_ROOT=$(BUILD_ROOT)
108
scripts : $(BIN:%=bin/%) $(QUILT:%=quilt/%) $(SCRIPTS:%=scripts/%) \
109
$(LIB:%=lib/%) $(DOC:%=doc/%) $(MAN1)
111
$(QUILT:%=quilt/%) : $(SCRIPTS:%=scripts/%)
135
all : configure scripts compat $(DOC:%=doc/%) $(MAN1) mofiles
137
$(LIB:%=lib/%) :: $(LIBOBJS)
139
ifeq ($(USE_NLS),yes)
140
mofiles : $(LINGUAS:%=po/%.mo)
146
$(MSGFMT) --statistics -o $@ $<
149
$(MSGMERGE) -o $@ $@ $^
151
scripts : $(BIN:%=bin/%) $(QUILT:%=quilt/%) \
152
$(SCRIPTS:%=quilt/scripts/%) $(LIB:%=lib/%) \
153
$(if $(PATCH_WRAPPER),bin/patch-wrapper)
113
155
dist : clean $(PACKAGE)-$(VERSION).tar.gz
117
159
rpm rpmbuild : $(PACKAGE)-$(VERSION).tar.gz
118
160
$(RPMBUILD) -ta $<
120
doc/README : doc/README.in
162
po/quilt.pot: $(filter-out debian/control.in doc/quilt.1.in \
163
doc/README.in, $(wildcard */*.in) \
164
$(wildcard */*/*.in))
165
rm -f po/quilt.pot; touch po/quilt.pot
166
for file in $+ ; do \
167
if test -n "`$(SED) -ne '1{ /@BASH''@/p }' $$file`"; then \
168
$(BASH) --dump-po-strings $$file ; \
169
elif test -n "`$(SED) -ne '1{ /@PERL''@/p }' $$file`"; then \
170
$(XGETTEXT) --from-code=UTF-8 --omit-header --language=Perl \
171
--keyword=_ -o - $$file; \
173
echo "Don't know how to handle $$file" >&2 ; \
178
|$(MSGCAT) --force-po -F - $@ -o $@
180
doc/README : doc/README.in $(QUILT:%=quilt/%) $(COMPAT)
121
181
@echo "README.in -> README"
122
@while read line; do \
125
$(MAKE) -s reference |egrep -v '^make'\
182
@while read line; do \
185
$(MAKE) -s reference \
131
191
done 2>&1 < $< > $@
133
doc/quilt.1: doc/quilt.1.in $(QUILT:%=quilt/%)
193
doc/quilt.1: doc/quilt.1.in $(QUILT:%=quilt/%) $(COMPAT)
134
194
@echo "quilt.1.in -> quilt.1"
136
while read line; do \
139
for cmd in $(sort $(QUILT:%=quilt/%)) ; do \
140
(bash -c ". scripts/patchfns ; LC_ALL=C . $$here/$$cmd -h")| \
141
sed -e 's/Usage: quilt //' \
142
-e 's/^\([^ ]*\)/\\fB\1\\fP/' \
143
-e 's/^/.IP "/' -e 's/$$/ " 4/' | \
146
(bash -c ". scripts/patchfns ; LC_ALL=C . $$here/$$cmd -h")| \
147
grep -v 'Usage: quilt' | \
149
-e $$'s/\t/\\\n/' | \
150
sed -e 's/^\(-.*\)$$/.IP " \1" 8/';\
195
while read line; do \
198
$(MAKE) -s reference | \
199
$(SED) -e 's/^quilt \([^ ]*\)\(.*\)/.IP "\\fB\1\\fP\2 " 4/' \
200
-e $$'s/^ \\(-[^\t]*\\)\t\\?/.IP " \\1" 8\\\n/' \
160
209
.PHONY :: reference
161
reference : $(QUILT:%=quilt/%) scripts/patchfns
163
for i in $(filter-out scripts/patchfns,$+); \
166
(bash -c ". scripts/patchfns ; cd $$dir ;LC_ALL=C . $$i -h"); \
169
sed -e '/^Usage:/{s/^Usage: \?//;b}' -e '/^$$/!s/^/ /'
210
reference : $(QUILT:%=quilt/%) quilt/scripts/patchfns compat
211
@unset LANG LC_MESSAGES LC_CTYPE LC_ALL; \
218
$(SED) -e 's/\$$EDITOR ([^)]*)/$$EDITOR/' \
171
222
bin/guards.1 : bin/guards
172
mkdir -p $$(dirname $@)
175
225
$(PACKAGE)-$(VERSION).tar.gz : $(SRC) configure $(PACKAGE).spec
176
226
rm -f $(PACKAGE)-$(VERSION) $@
179
229
rm -f $(PACKAGE)-$(VERSION)
180
230
@echo "File $@ created."
182
$(PACKAGE)-$(ISODATE).tar.bz2 : $(SRC) configure $(PACKAGE).spec
232
$(PACKAGE)-$(ISODATE).tar.bz2 : configure $(PACKAGE).spec
183
233
rm -f $(PACKAGE)-$(ISODATE) $@
184
234
ln -s . $(PACKAGE)-$(ISODATE)
185
235
tar chf - $(+:%=$(PACKAGE)-$(ISODATE)/%) | bzip2 -9 > $@
186
236
rm -f $(PACKAGE)-$(ISODATE)
187
237
@echo "File $@ created."
189
configure : configure.ac
239
$(PACKAGE).spec : $(PACKAGE).spec.in $(PACKAGE).changes Makefile
240
@echo "Generating spec file" ; \
242
changelog="`./changes2changelog $(PACKAGE).changes`" ; \
243
$(AWK) '{ gsub(/@VERSION''@/, "$(VERSION)") ; \
244
gsub(/@RELEASE''@/, "$(RELEASE)") ; \
245
gsub(/@CHANGELOG''@/, changelog) ; \
246
print }' changelog="$$changelog" $< > $@
248
$(patsubst %.in,%,$(wildcard bin/*.in quilt/*.in quilt/scripts/*.in)) :: Makefile
251
@$(SED) -e 's:@QUILT_LIB''@:$(libdir)/$(PACKAGE):g' \
252
-e 's:@QUILT_DIR''@:$(datadir)/$(PACKAGE):g' \
253
-e 's:@PERL''@:$(PERL):g' \
254
-e 's:@BASH''@:$(BASH):g' \
255
-e 's:@PATCH''@:$(PATCH):g' \
256
-e 's:@VERSION''@:$(VERSION):g' \
257
-e 's:@RELEASE''@:$(RELEASE):g' \
258
-e 's:@LOCALEDIR''@:$(localedir):g' \
259
-e 's:@DOCSUBDIR''@:$(docdir)/$(PACKAGE)-$(VERSION):g' \
261
@$(if $(filter-out $<,$(NON_EXEC_IN)),chmod +x $@)
263
lib/backup-files.o :: Makefile
265
configure : configure.ac aclocal.m4
192
$(PACKAGE).spec : $(PACKAGE).spec.in $(PACKAGE).changes Makefile \
194
@echo "Generating spec file"
195
@sed -e 's/^\(Version:[ \t]*\).*/\1$(VERSION)/' \
196
-e 's/^\(Release:[ \t]\).*/\1$(RELEASE)/' \
198
@./changes2changelog $(PACKAGE).changes \
199
| scripts/parse-patch -u changelog $@
203
@sed -e 's:@LIB''@:$(LIB_DIR):g' \
204
-e 's:@QUILT''@:$(QUILT_DIR):g' \
205
-e 's:@SCRIPTS''@:$(SCRIPTS_DIR):g' \
206
-e 's:@PERL''@:$(PERL):g' \
207
-e 's:@BASH''@:$(BASH):g' \
208
-e 's:@SED''@:$(SED):g' \
209
-e 's:@AWK''@:$(AWK):g' \
210
-e 's:@DIFF''@:$(DIFF):g' \
211
-e 's:@PATCH''@:$(PATCH):g' \
212
-e 's:@MKTEMP''@:$(MKTEMP):g' \
213
-e 's:@PACKAGE_BUGREPORT''@:$(PACKAGE_BUGREPORT):g' \
214
-e 's:@VERSION''@:$(VERSION):g' \
215
-e 's:@RELEASE''@:$(RELEASE):g' \
216
-e 's:@RPMBUILD''@:$(RPMBUILD):g' \
217
-e 's:@DIFFSTAT''@:$(DIFFSTAT):g' \
218
-e 's:@MTA''@:$(MTA):g' \
219
-e 's:@LOCALEDIR''@:$(localedir):g' \
220
-e 's:@DOCSUBDIR''@:$(docdir)/$(PACKAGE)-$(VERSION):g' \
222
@chmod --reference=$< $@
224
Makefile : Makefile.in
225
@echo "Please run ./configure by hand"
229
@INSTALL@ -d $(BUILD_ROOT)$(bindir)
230
@INSTALL@ -m 755 $(BIN:%=bin/%) $(BUILD_ROOT)$(bindir)/
232
@INSTALL@ -d $(BUILD_ROOT)$(QUILT_DIR)
233
@INSTALL@ -m 755 $(QUILT:%=quilt/%) $(BUILD_ROOT)$(QUILT_DIR)/
235
@INSTALL@ -d $(BUILD_ROOT)$(SCRIPTS_DIR)
236
@INSTALL@ -m 755 $(filter-out scripts/patchfns, \
237
$(SCRIPTS:%=scripts/%)) \
238
$(BUILD_ROOT)$(SCRIPTS_DIR)
239
@INSTALL@ -m 644 scripts/patchfns $(BUILD_ROOT)$(SCRIPTS_DIR)
241
@INSTALL@ -d $(BUILD_ROOT)$(LIB_DIR)
242
@INSTALL@ -m 755 -s $(LIB:%=lib/%) $(BUILD_ROOT)$(LIB_DIR)/
244
@INSTALL@ -d $(BUILD_ROOT)$(docdir)/$(PACKAGE)-$(VERSION)/
245
@INSTALL@ -m 644 doc/README \
246
$(BUILD_ROOT)$(docdir)/$(PACKAGE)-$(VERSION)/
247
@INSTALL@ -m 644 doc/quilt.pdf doc/README.MAIL \
248
$(BUILD_ROOT)$(docdir)/$(PACKAGE)-$(VERSION)/
250
@INSTALL@ -d $(BUILD_ROOT)$(mandir)/man1
251
@INSTALL@ -m 644 $(MAN1) $(BUILD_ROOT)$(mandir)/man1/
253
$(MAKE_NLS) -C po install BUILD_ROOT=$(BUILD_ROOT) \
254
LINGUAS="$(LINGUAS)" localedir=$(localedir)
256
@INSTALL@ -d $(BUILD_ROOT)$(etcdir)
257
@INSTALL@ -d $(BUILD_ROOT)$(etcdir)/bash_completion.d
258
@INSTALL@ -m 644 bash_completion $(BUILD_ROOT)$(etcdir)/bash_completion.d/quilt
259
@INSTALL@ -m 644 quilt.quiltrc $(BUILD_ROOT)$(etcdir)/
267
@echo "Please run ./configure"
270
Makefile : Makefile.in configure
271
@echo "Please run ./configure"
274
compat_leftover := $(filter-out $(COMPAT),$(shell $(FIND) compat -maxdepth 1 -type f -perm +111))
278
$(if $(compat_leftover),rm -f $(compat_leftover))
280
# VIRTUAL_SYMLINKS creates a shell script that operates similar to
281
# a symbolic link. It is used to workaround the way make treats
282
# symlinks as targets.
283
# Usage: $(call VIRTUAL_SYMLINK, source, target)
284
define VIRTUAL_SYMLINK
285
@echo "Generating $(strip $(1)) wrapper" >&2;
286
@printf "#!%s\nexec %s "'"$$@"'"\n" $(BASH) $(strip $(1)) > $(2);
289
# Rule to create compat/<binary> for each binary in $(COMPAT_SYMLINKS)
290
$(COMPAT_SYMLINKS:%=compat/%) :: Makefile
291
$(call VIRTUAL_SYMLINK, \
292
$($(shell echo $@ | $(AWK) '{split($$1, ar, "/"); print toupper(ar[2])}')), \
294
@chmod +x $(strip $@)
296
install-main :: scripts
297
$(INSTALL) -d $(BUILD_ROOT)$(bindir)
298
$(INSTALL) -m 755 $(BIN:%=bin/%) $(BUILD_ROOT)$(bindir)/
300
$(INSTALL) -d $(BUILD_ROOT)$(datadir)/$(PACKAGE)
301
$(INSTALL) -m 755 $(QUILT:%=quilt/%) $(BUILD_ROOT)$(datadir)/$(PACKAGE)/
303
$(INSTALL) -d $(BUILD_ROOT)$(datadir)/$(PACKAGE)/scripts
304
$(INSTALL) -m 755 $(patsubst %,quilt/scripts/%, \
305
$(filter-out patchfns,$(SCRIPTS))) \
306
$(BUILD_ROOT)$(datadir)/$(PACKAGE)/scripts
307
$(INSTALL) -m 644 quilt/scripts/patchfns \
308
$(BUILD_ROOT)$(datadir)/$(PACKAGE)/scripts
309
ifneq ($(PATCH_WRAPPER),)
310
$(INSTALL) -d $(BUILD_ROOT)$(datadir)/$(PACKAGE)/wrapper
311
$(INSTALL) -m 755 bin/patch-wrapper \
312
$(BUILD_ROOT)$(datadir)/$(PACKAGE)/wrapper/patch
315
$(INSTALL) -d $(BUILD_ROOT)$(libdir)/$(PACKAGE)
316
$(INSTALL) -m 755 $(LIB:%=lib/%) $(BUILD_ROOT)$(libdir)/$(PACKAGE)/
318
$(INSTALL) -d $(BUILD_ROOT)$(docdir)/$(PACKAGE)-$(VERSION)/
319
$(INSTALL) -m 644 doc/README \
320
$(BUILD_ROOT)$(docdir)/$(PACKAGE)-$(VERSION)/
321
$(INSTALL) -m 644 doc/quilt.pdf doc/README.MAIL \
322
$(BUILD_ROOT)$(docdir)/$(PACKAGE)-$(VERSION)/
324
$(INSTALL) -d $(BUILD_ROOT)$(mandir)/man1
325
$(INSTALL) -m 644 $(MAN1) $(BUILD_ROOT)$(mandir)/man1/
327
$(INSTALL) -d $(BUILD_ROOT)$(etcdir)
328
$(INSTALL) -d $(BUILD_ROOT)$(etcdir)/bash_completion.d
329
$(INSTALL) -m 644 bash_completion \
330
$(BUILD_ROOT)$(etcdir)/bash_completion.d/quilt
331
$(INSTALL) -m 644 quilt.quiltrc $(BUILD_ROOT)$(etcdir)/
333
install-compat: install-compat1 $(COMPAT_SYMLINKS:%=install-compat-symlink-%)
334
install-compat-symlink-% :: install-compat1
335
ln -sf $($(shell echo $* | $(AWK) '{print toupper($$1)}')) \
336
$(BUILD_ROOT)$(datadir)/$(PACKAGE)/compat/$*
339
rm -rf $(BUILD_ROOT)$(datadir)/$(PACKAGE)/compat
340
ifneq ($(COMPAT_PROGRAMS)$(COMPAT_SYMLINKS),)
341
$(INSTALL) -d $(BUILD_ROOT)$(datadir)/$(PACKAGE)/compat
342
ifneq ($(COMPAT_PROGRAMS),)
343
$(INSTALL) -m 755 $(COMPAT_PROGRAMS:%=compat/%) \
344
$(BUILD_ROOT)$(datadir)/$(PACKAGE)/compat
348
install: install-main install-compat
351
rm -rf $(BIN:%=$(BUILD_ROOT)$(bindir)/%) \
352
$(BUILD_ROOT)$(libdir)/$(PACKAGE) \
353
$(BUILD_ROOT)$(datadir)/$(PACKAGE) \
354
$(patsubst %,$(BUILD_ROOT)$(mandir)/man1/%, \
356
$(BUILD_ROOT)$(etcdir)/bash_completion.d/quilt \
357
$(BUILD_ROOT)$(etcdir)/quilt.quiltrc \
358
$(BUILD_ROOT)$(docdir)/$(PACKAGE)-$(VERSION)/
360
check: $(TESTS:test/%.test=test/.%.ok)
361
check-all: $(TESTS:test/%.test=check-%)
366
# Only include the test suite dependencies when required
367
ifneq ($(findstring test,$(MAKECMDGOALS))$(findstring check,$(MAKECMDGOALS)),)
368
-include test/.depend
371
quilt/refresh :: quilt/scripts/remove-trailing-ws
372
quilt/mail :: quilt/scripts/edmail
373
test/.patch-wrapper.ok : bin/patch-wrapper
375
# Include a run-time generated list of dependencies for each test case
376
test/.depend : Makefile $(TESTS)
377
@( printf "%s : bin/quilt quilt/scripts/patchfns $(LIB:%=lib/%) $(COMPAT)\n" $(TESTS); \
378
$(AWK) 'sub(/.*\$$ *quilt /, "") \
379
{ print FILENAME, ":", "quilt/"$$1}' $(TESTS); \
380
$(AWK) 'sub(/.*\<quilt_command /, "") && ($$1 !~ /[^a-z]/) \
381
{ print FILENAME, ":", "quilt/"$$1 }' quilt/*.in; \
382
) | sort -u | $(SED) -re 's:^test/(.*)\.test:test/.\1.ok:' > $@
384
ifneq ($(shell . $(QUILTRC) ; echo $$QUILT_PATCHES_PREFIX),)
385
CHECK_ENV := P=patches/; _P=../patches/; export P _P
388
# Each tests dependencies are stored in test/.depend
389
ifneq ($(findstring check-,$(MAKECMDGOALS)),)
390
test/.%.ok : test/%.test FORCE
392
test/.%.ok : test/%.test
265
405
distclean : clean
266
406
rm -f config.log config.status Makefile
267
407
rm -rf autom4te.cache/
409
ifeq ($(USE_NLS),yes)
411
for lang in $(LINGUAS) ; do \
412
dir=$(BUILD_ROOT)$(localedir)/$$lang/LC_MESSAGES; \
414
install -m 644 po/$$lang.mo \
419
for lang in $(LINGUAS) ; do \
420
dir=$(BUILD_ROOT)$(localedir)/$$lang/LC_MESSAGES; \
421
rm -f $$dir/quilt.mo ; \
425
.PHONY :: all install uninstall clean distclean
427
# Clear the suffix list
430
# Bad gmake, never *ever* try to get a file out of source control by yourself.