quilt/Makefile.in

455 lines
13 KiB
Makefile
Raw Normal View History

2022-12-06 14:41:56 +08:00
PACKAGE := @PACKAGE_NAME@
VERSION := @PACKAGE_VERSION@
RELEASE := @PACKAGE_RELEASE@
PACKAGE_TARNAME := @PACKAGE_TARNAME@
PACKAGE_BUGREPORT := @PACKAGE_BUGREPORT@
prefix := @prefix@
exec_prefix := @exec_prefix@
bindir := @bindir@
datarootdir := @datarootdir@
datadir := @datadir@
docdir := @docdir@
mandir := @mandir@
localedir := $(datadir)/locale
emacsdir := $(datadir)/emacs/site-lisp
etcdir := @sysconfdir@
INSTALL := @INSTALL@
POD2MAN := @POD2MAN@
COLUMN := @COLUMN@
GETOPT := @GETOPT@
CP := @CP@
DATE := @DATE@
PERL := @PERL@
BASH := @BASH@
SHELL:= @BASH@ # It does not work if dash is used as a shell, for example
GREP := @GREP@
TAIL := @TAIL@
TR := @TR@
SED := @SED@
AWK := @AWK@
FIND := @FIND@
XARGS := @XARGS@
DIFF := @DIFF@
PATCH := @PATCH@
MKTEMP := @MKTEMP@
MSGMERGE := @MSGMERGE@
MSGFMT := @MSGFMT@
XGETTEXT := @XGETTEXT@
MSGUNIQ := @MSGUNIQ@
MSGCAT := @MSGCAT@
DIFFSTAT := @DIFFSTAT@
RPMBUILD := @RPMBUILD@
SENDMAIL := @SENDMAIL@
MD5SUM := @MD5SUM@
7Z := @P7ZIP@
USE_NLS := @USE_NLS@
STAT_HARDLINK := @STAT_HARDLINK@
PATCH_WRAPPER := @PATCH_WRAPPER@
COMPAT_SYMLINKS := @COMPAT_SYMLINKS@
COMPAT_PROGRAMS := @COMPAT_PROGRAMS@
default: all
#-----------------------------------------------------------------------
DIRT += $(shell $(FIND) . -name '*~')
DIRT += $(shell $(FIND) . -name '.\#*')
SRC += COPYING AUTHORS TODO Makefile.in configure.ac \
config/install-sh quilt.spec.in NEWS \
bash_completion quilt.quiltrc aclocal.m4 git-desc
DIRT += quilt.spec
DIRT += $(PACKAGE)-*.tar.gz
DIRT += $(PACKAGE)-*.tar.gz.sig
DIRT += $(PACKAGE)-*.tar.bz2
BIN_IN := quilt guards
BIN_SRC := $(BIN_IN:%=%.in)
BIN := $(BIN_IN)
SRC += $(BIN_SRC:%=bin/%) bin/patch-wrapper.in
DIRT += $(BIN_IN:%=bin/%) bin/patch-wrapper
QUILT_IN := $(patsubst quilt/%.in,%,$(wildcard quilt/*.in))
QUILT_SRC := $(QUILT_IN:%=%.in)
QUILT := $(QUILT_IN)
SRC += $(QUILT_SRC:%=quilt/%)
DIRT += $(QUILT_IN:%=quilt/%)
SCRIPTS_IN := patchfns inspect-wrapper dependency-graph edmail \
remove-trailing-ws backup-files
SCRIPTS_SRC := $(SCRIPTS_IN:%=%.in)
SCRIPTS := $(SCRIPTS_IN)
SRC += $(SCRIPTS_SRC:%=quilt/scripts/%)
SRC += quilt/scripts/utilfns
DIRT += $(SCRIPTS_IN:%=quilt/scripts/%)
COMPAT := $(COMPAT_PROGRAMS:%=compat/%) $(COMPAT_SYMLINKS:%=compat/%)
SRC += $(wildcard compat/*.in) $(wildcard compat/*.sh)
DIRT += $(patsubst %.in,%,$(wildcard compat/*.in)) $(COMPAT_SYMLINKS:%=compat/%)
LIB_SRC := quilt.el
SRC += $(LIB_SRC:%=lib/%)
DOC_IN := README quilt.1
DOC_SRC := $(DOC_IN:%=doc/%.in)
DOC := $(DOC_IN)
SRC += $(DOC_SRC)
SRC += doc/main.tex doc/quilt.pdf doc/Makefile \
doc/README.MAIL doc/README.EMACS
DIRT += $(DOC_IN:%=doc/%) doc/reference
MAN1 := doc/quilt.1
ifneq ($(POD2MAN),)
MAN1 += doc/guards.1
DIRT += doc/guards.1
endif
LINGUAS := fr de ja ru
PO := quilt.pot $(LINGUAS:%=%.po)
SRC += $(PO:%=po/%)
DIRT += po/*.mo po/*~
SRC += $(wildcard test/*.test) test/run test/test.quiltrc
NON_EXEC_IN := doc/quilt.1 doc/README quilt/scripts/patchfns quilt/scripts/utilfns
GIT_DESC := $(shell ./git-desc | sed -e 's:^v::')
# Tests are sorted to make it easier to compare the results between runs
TESTS := $(sort $(wildcard test/*.test))
ifeq ($(PATCH_WRAPPER),)
TESTS := $(filter-out test/patch-wrapper.test,$(TESTS))
endif
DIRT += test/.depend $(wildcard test/.*.ok)
# Settings for running the uninstalled version of quilt in the source tree:
PATH := $(CURDIR)/bin:$(CURDIR)/compat:$(PATH)
QUILT_DIR := $(CURDIR)/quilt
QUILTRC := $(CURDIR)/test/test.quiltrc
export QUILT_DIR QUILTRC
#-----------------------------------------------------------------------
all : configure scripts compat $(DOC:%=doc/%) $(MAN1) mofiles
ifeq ($(USE_NLS),yes)
mofiles : $(LINGUAS:%=po/%.mo)
else
mofiles :
endif
%.mo : %.po
$(MSGFMT) --statistics -o $@ $<
%.po : po/quilt.pot
$(MSGMERGE) -o $@ $@ $^
updatepo : $(PO:%=po/%)
scripts : $(BIN:%=bin/%) $(QUILT:%=quilt/%) \
$(SCRIPTS:%=quilt/scripts/%) \
$(if $(PATCH_WRAPPER),bin/patch-wrapper)
dist : clean $(PACKAGE)-$(VERSION).tar.gz
publish : dist
gpg --detach-sign --use-agent $(PACKAGE)-$(VERSION).tar.gz
scp $(PACKAGE)-$(VERSION).tar.gz{,.sig} \
dl.sv.nongnu.org:/releases/quilt/
snapshot : $(PACKAGE)-$(GIT_DESC).tar.bz2
rpm rpmbuild : $(PACKAGE)-$(VERSION).tar.gz
$(RPMBUILD) -ta $<
po/quilt.pot: $(filter-out doc/quilt.1.in doc/README.in, \
$(wildcard */*.in) $(wildcard */*/*.in))
rm -f po/quilt.pot; touch po/quilt.pot
for file in $+ ; do \
if test -n "`$(SED) -ne '1{ /@BASH''@/p }' $$file`" \
-o "$$file" = quilt/scripts/patchfns.in; then \
$(BASH) --dump-po-strings $$file ; \
elif test -n "`$(SED) -ne '1{ /@PERL''@/p }' $$file`"; then \
$(XGETTEXT) --from-code=UTF-8 --omit-header --language=Perl \
--keyword=_ -o - $$file; \
else \
echo "Don't know how to handle $$file" >&2 ; \
exit 1; \
fi \
done \
|$(MSGUNIQ) \
|$(MSGCAT) --force-po -F - $@ -o $@
doc/README : doc/README.in doc/reference
@echo "README.in -> README"
@while read line; do \
case "$$line" in \
'@REFERENCE''@') \
cat doc/reference \
;; \
*) \
echo $$line \
;; \
esac ; \
done 2>&1 < $< > $@
doc/quilt.1: doc/quilt.1.in doc/reference $(COMPAT)
@echo "quilt.1.in -> quilt.1"
@while read line; do \
case "$$line" in \
'@REFERENCE''@') \
$(SED) -e 's/^quilt \([^ ]*\)\(.*\)/.IP "\\fB\1\\fP\2 " 4/' \
-e $$'s/^ \\(-[^\t]*\\)\t\\?/.IP " \\1" 8\\\n/' \
-e $$'s/^ \t\\?//' \
< doc/reference \
;; \
*@DOCSUBDIR@*) \
echo "$$line" | \
$(SED) -e 's:@DOCSUBDIR''@:$(docdir):g' \
;; \
*) \
echo "$$line" \
;; \
esac; \
done < $< 2>&1 > $@
doc/reference : bin/quilt $(QUILT:%=quilt/%) quilt/scripts/patchfns quilt/scripts/utilfns $(COMPAT)
@unset LANG LC_MESSAGES LC_CTYPE LC_ALL; \
for i in $(sort $(QUILT)); \
do \
echo; \
QUILT_PC=.fake_pc quilt $$i -h; \
echo; \
done | \
$(SED) -e 's/\$$EDITOR ([^)]*)/$$EDITOR/' \
-e '/^$$/!s/^/ /' \
-e 's/^ Usage: *//' > $@
doc/guards.1 : bin/guards
$(POD2MAN) $< > $@
$(PACKAGE)-$(VERSION).tar.gz : $(SRC) configure $(PACKAGE).spec
rm -f $(PACKAGE)-$(VERSION) $@
ln -s . $(PACKAGE)-$(VERSION)
tar chf - $(+:%=$(PACKAGE)-$(VERSION)/%) | gzip -9 > $@
rm -f $(PACKAGE)-$(VERSION)
@echo "File $@ created."
$(PACKAGE)-$(GIT_DESC).tar.bz2 : $(SRC) configure $(PACKAGE).spec
rm -f $(PACKAGE)-$(GIT_DESC) $@
ln -s . $(PACKAGE)-$(GIT_DESC)
tar chf - $(+:%=$(PACKAGE)-$(GIT_DESC)/%) | bzip2 -9 > $@
rm -f $(PACKAGE)-$(GIT_DESC)
@echo "File $@ created."
$(PACKAGE).spec : $(PACKAGE).spec.in NEWS Makefile
@echo "Generating spec file" ; \
set -e ; \
changelog="`sed \
-e 's/^Version \([0-9.]*\) (\(.*\))/* \2 - upstream\n- Update to version \1/' \
-e 's/^ -/ +/' < NEWS`" ; \
$(AWK) '{ gsub(/@VERSION''@/, "$(VERSION)") ; \
gsub(/@RELEASE''@/, "$(RELEASE)") ; \
gsub(/@CHANGELOG''@/, changelog) ; \
print }' changelog="$$changelog" $< > $@
$(patsubst %.in,%,$(wildcard bin/*.in quilt/*.in quilt/scripts/*.in)) :: Makefile
% :: %.in
@echo "$< -> $@" >&2
@$(SED) -e 's:@QUILT_DIR''@:$(datadir)/$(PACKAGE):g' \
-e 's:@PERL''@:$(PERL):g' \
-e 's:@BASH''@:$(BASH):g' \
-e 's:@PATCH''@:$(PATCH):g' \
-e 's:@STAT_HARDLINK''@:$(STAT_HARDLINK):g' \
-e 's:@VERSION''@:$(VERSION):g' \
-e 's:@ETCDIR''@:$(etcdir):g' \
-e 's:@LOCALEDIR''@:$(localedir):g' \
-e 's:@DOCSUBDIR''@:$(docdir):g' \
-e '/^### Local Variables:/Q' \
$< > $@
@$(if $(filter $@,$(NON_EXEC_IN)),,chmod +x $@)
configure : configure.ac aclocal.m4
autoconf
@echo "Please run ./configure"
@false
Makefile : Makefile.in configure
@echo "Please run ./configure"
@false
compat_leftover := $(filter-out $(COMPAT),$(shell $(FIND) compat -type f -perm -0100))
.PHONY :: compat
compat :: $(COMPAT)
$(if $(compat_leftover),rm -f $(compat_leftover))
# VIRTUAL_SYMLINKS creates a shell script that operates similar to
# a symbolic link. It is used to workaround the way make treats
# symlinks as targets.
# Usage: $(call VIRTUAL_SYMLINK, source, target)
define VIRTUAL_SYMLINK
@echo "Generating $(strip $(1)) wrapper" >&2;
@printf "#!%s\nexec %s "'"$$@"'"\n" $(BASH) $(strip $(1)) > $(2);
endef
# Rule to create compat/<binary> for each binary in $(COMPAT_SYMLINKS)
$(COMPAT_SYMLINKS:%=compat/%) :: Makefile
$(call VIRTUAL_SYMLINK, \
$($(shell echo $@ | $(AWK) '{split($$1, ar, "/"); print toupper(ar[2])}')), \
$(strip $@))
@chmod +x $(strip $@)
install-main :: scripts
$(INSTALL) -d $(BUILD_ROOT)$(bindir)
$(INSTALL) -m 755 $(BIN:%=bin/%) $(BUILD_ROOT)$(bindir)/
$(INSTALL) -d $(BUILD_ROOT)$(datadir)/$(PACKAGE)
$(INSTALL) -m 755 $(QUILT:%=quilt/%) $(BUILD_ROOT)$(datadir)/$(PACKAGE)/
$(INSTALL) -d $(BUILD_ROOT)$(datadir)/$(PACKAGE)/scripts
$(INSTALL) -m 755 $(patsubst %,quilt/scripts/%, \
$(filter-out patchfns,$(SCRIPTS))) \
$(BUILD_ROOT)$(datadir)/$(PACKAGE)/scripts
$(INSTALL) -m 644 quilt/scripts/patchfns quilt/scripts/utilfns \
$(BUILD_ROOT)$(datadir)/$(PACKAGE)/scripts
ifneq ($(PATCH_WRAPPER),)
$(INSTALL) -d $(BUILD_ROOT)$(datadir)/$(PACKAGE)/wrapper
$(INSTALL) -m 755 bin/patch-wrapper \
$(BUILD_ROOT)$(datadir)/$(PACKAGE)/wrapper/patch
endif
$(INSTALL) -d $(BUILD_ROOT)$(docdir)/
$(INSTALL) -m 644 doc/README \
$(BUILD_ROOT)$(docdir)/
$(INSTALL) -m 644 doc/quilt.pdf doc/README.MAIL \
$(BUILD_ROOT)$(docdir)/
$(INSTALL) -d $(BUILD_ROOT)$(mandir)/man1
$(INSTALL) -m 644 $(MAN1) $(BUILD_ROOT)$(mandir)/man1/
$(INSTALL) -d $(BUILD_ROOT)$(etcdir)
$(INSTALL) -d $(BUILD_ROOT)$(etcdir)/bash_completion.d
$(INSTALL) -m 644 bash_completion \
$(BUILD_ROOT)$(etcdir)/bash_completion.d/quilt
$(INSTALL) -m 644 quilt.quiltrc $(BUILD_ROOT)$(etcdir)/
$(INSTALL) -d $(BUILD_ROOT)$(emacsdir)/
$(INSTALL) -m 644 lib/quilt.el $(BUILD_ROOT)$(emacsdir)/
install-compat: install-compat1 $(COMPAT_SYMLINKS:%=install-compat-symlink-%)
install-compat-symlink-% :: install-compat1
ln -sf $($(shell echo $* | $(AWK) '{print toupper($$1)}')) \
$(BUILD_ROOT)$(datadir)/$(PACKAGE)/compat/$*
install-compat1:
rm -rf $(BUILD_ROOT)$(datadir)/$(PACKAGE)/compat
ifneq ($(COMPAT_PROGRAMS)$(COMPAT_SYMLINKS),)
$(INSTALL) -d $(BUILD_ROOT)$(datadir)/$(PACKAGE)/compat
ifneq ($(COMPAT_PROGRAMS),)
$(INSTALL) -m 755 $(COMPAT_PROGRAMS:%=compat/%) \
$(BUILD_ROOT)$(datadir)/$(PACKAGE)/compat
endif
endif
install: install-main install-compat
uninstall ::
rm -rf $(BIN:%=$(BUILD_ROOT)$(bindir)/%) \
$(BUILD_ROOT)$(datadir)/$(PACKAGE) \
$(patsubst %,$(BUILD_ROOT)$(mandir)/man1/%, \
$(notdir $(MAN1))) \
$(BUILD_ROOT)$(etcdir)/bash_completion.d/quilt \
$(BUILD_ROOT)$(etcdir)/quilt.quiltrc \
$(BUILD_ROOT)$(docdir)/ \
$(BUILD_ROOT)$(emacsdir)/quilt.el
check: $(TESTS:test/%.test=test/.%.ok)
check-all: $(TESTS:test/%.test=check-%)
check-% : test/.%.ok
@/bin/true
# Only include the test suite dependencies when required
ifneq ($(findstring test,$(MAKECMDGOALS))$(findstring check,$(MAKECMDGOALS)),)
-include test/.depend
endif # (test|check)
test/.patch-wrapper.ok : bin/patch-wrapper
# Include a run-time generated list of dependencies for each test case
test/.depend : Makefile $(TESTS)
@( printf "%s : bin/quilt quilt/scripts/patchfns quilt/scripts/utilfns quilt/scripts/backup-files $(COMPAT)\n" $(TESTS); \
$(AWK) 'sub(/.*\$$ *quilt /, "") \
{ print FILENAME, ":", "quilt/"$$1}' $(TESTS); \
$(AWK) 'sub(/.*\<quilt_command /, "") && ($$1 !~ /[^a-z]/) \
{ print FILENAME, ":", "quilt/"$$1 }' quilt/*.in; \
$(AWK) 'sub(/.*\$$ *%{QUILT_DIR}\/scripts\//, "") \
{ print FILENAME, ":", "quilt/scripts/"$$1 }' $(TESTS); \
) | sort -u | $(SED) -re 's:^test/(.*)\.test:test/.\1.ok:' \
-e 's:quilt/graph:quilt/graph quilt/scripts/dependency-graph:' \
-e 's:quilt/mail:quilt/mail quilt/scripts/edmail:' \
-e 's:quilt/refresh:quilt/refresh quilt/scripts/remove-trailing-ws:' \
-e 's:quilt/setup:quilt/setup quilt/scripts/inspect-wrapper:' \
> $@
ifneq ($(shell . $(QUILTRC) ; echo $$QUILT_PATCHES_PREFIX),)
CHECK_ENV := P=patches/; _P=../patches/; export P _P;
endif
CHECK_ENV += QUILT_PC=.pc; export QUILT_PC;
# Each tests dependencies are stored in test/.depend
ifneq ($(findstring check-,$(MAKECMDGOALS)),)
test/.%.ok : test/%.test test/run test/test.quiltrc FORCE
else
test/.%.ok : test/%.test test/run test/test.quiltrc
endif
@LANG=C; LC_ALL=C; \
export LANG LC_ALL; \
unset POSIXLY_CORRECT; \
$(CHECK_ENV) \
cd $(@D); \
./run -q $(<F)
@touch $@
clean :
rm -f $(DIRT)
distclean : clean
rm -f config.log config.status Makefile
rm -rf autom4te.cache/
ifeq ($(USE_NLS),yes)
install-main ::
for lang in $(LINGUAS) ; do \
dir=$(BUILD_ROOT)$(localedir)/$$lang/LC_MESSAGES; \
$(INSTALL) -d $$dir; \
$(INSTALL) -m 644 po/$$lang.mo \
$$dir/quilt.mo ; \
done
uninstall ::
for lang in $(LINGUAS) ; do \
dir=$(BUILD_ROOT)$(localedir)/$$lang/LC_MESSAGES; \
rm -f $$dir/quilt.mo ; \
done
endif
.PHONY :: all install uninstall clean distclean updatepo
# Clear the suffix list
.SUFFIXES:
.SUFFIXES: .c .o .in
# Bad gmake, never *ever* try to get a file out of source control by yourself.
%: %,v
%: RCS/%,v
%: RCS/%
%: s.%
%: SCCS/s.%
FORCE: