# The subdir makefiles created by config.status.
SUBDIR_MAKEFILES_IN = @SUBDIR_MAKEFILES_IN@
-SUBDIR_MAKEFILES = `echo $(SUBDIR_MAKEFILES_IN:.in=) | sed 's|$(srcdir)/||g'`
+SUBDIR_MAKEFILES = $(patsubst ${srcdir}/%,%,${SUBDIR_MAKEFILES_IN:.in=})
# Subdirectories to install, and where they'll go. lib-src's and nt's
# makefiles know how to install them, so we don't do that here.
# etc. to be built without running into similar recursion problems.
MAKEFILE_NAME = Makefile
$(MAKEFILE_NAME): config.status $(srcdir)/src/config.in \
- $(srcdir)/Makefile.in $(SUBDIR_MAKEFILES_IN) $(srcdir)/src/lisp.mk
+ $(srcdir)/Makefile.in $(SUBDIR_MAKEFILES_IN)
MAKE='$(MAKE)' ./config.status
# Don't erase these files if make is interrupted while refreshing them.
install-arch-dep: src install-arch-indep install-etcdoc install-$(NTDIR)
umask 022; ${MKDIR_P} "$(DESTDIR)${bindir}"
$(MAKE) -C lib-src install
- if test "${ns_self_contained}" = "no"; then \
- ${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} "$(DESTDIR)${bindir}/$(EMACSFULL)" || exit 1 ; \
- chmod 1755 "$(DESTDIR)${bindir}/$(EMACSFULL)" || true; \
- if test "x${NO_BIN_LINK}" = x; then \
- rm -f "$(DESTDIR)${bindir}/$(EMACS)" ; \
- cd "$(DESTDIR)${bindir}" && $(LN_S_FILEONLY) $(EMACSFULL) $(EMACS); \
- fi; \
- else \
- subdir=${ns_appresdir}/site-lisp; \
- ${write_subdir} || exit 1; \
- rm -rf ${ns_appresdir}/share; \
- fi
+ifeq (${ns_self_contained},no)
+ ${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} "$(DESTDIR)${bindir}/$(EMACSFULL)"
+ -chmod 755 "$(DESTDIR)${bindir}/$(EMACSFULL)"
+ifndef NO_BIN_LINK
+ rm -f "$(DESTDIR)${bindir}/$(EMACS)"
+ cd "$(DESTDIR)${bindir}" && $(LN_S_FILEONLY) $(EMACSFULL) $(EMACS)
+endif
+else
+ subdir=${ns_appresdir}/site-lisp && ${write_subdir}
+ rm -rf ${ns_appresdir}/share
+endif
### Windows-specific install target for installing programs produced
### in nt/, and its Posix do-nothing shadow.
$(foreach dir,$(clean_dirs),$(eval $(call submake_template,$(dir),clean)))
clean: $(clean_dirs:=_clean)
- for dir in test/automated; do \
+ for dir in test/automated admin/charsets; do \
[ ! -d $$dir ] || $(MAKE) -C $$dir clean; \
done
-rm -f *.tmp etc/*.tmp*
$(foreach dir,$(distclean_dirs),$(eval $(call submake_template,$(dir),distclean)))
+maybeclean_dirs = test/automated admin/grammars admin/unidata admin/charsets
+
distclean: $(distclean_dirs:=_distclean)
- for dir in test/automated admin/grammars admin/unidata; do \
+ for dir in ${maybeclean_dirs}; do \
[ ! -d $$dir ] || $(MAKE) -C $$dir distclean; \
done
${top_distclean}
$(foreach dir,$(distclean_dirs),$(eval $(call submake_template,$(dir),bootstrap-clean)))
bootstrap-clean: $(distclean_dirs:=_bootstrap-clean)
- for dir in test/automated admin/grammars admin/unidata; do \
+ for dir in ${maybeclean_dirs}; do \
[ ! -d $$dir ] || $(MAKE) -C $$dir bootstrap-clean; \
done
[ ! -f config.log ] || mv -f config.log config.log~
$(foreach dir,$(maintainer_clean_dirs),$(eval $(call submake_template,$(dir),maintainer-clean)))
maintainer-clean: bootstrap-clean $(maintainer_clean_dirs:=_maintainer-clean)
- for dir in test/automated admin/grammars admin/unidata; do \
+ for dir in ${maybeclean_dirs}; do \
[ ! -d $$dir ] || $(MAKE) -C $$dir maintainer-clean; \
done
${top_maintainer_clean}
### it deletes backup and autosave files too.
### Note that we abuse this in some subdirectories (eg leim),
### to delete some generated files that are slow to rebuild.
-$(foreach dir,$(SUBDIR),$(eval $(call submake_template,$(dir),extraclean)))
+extraclean_dirs = ${NTDIR} lib-src src leim \
+ admin/charsets admin/grammars admin/unidata
+
+$(foreach dir,$(extraclean_dirs),$(eval $(call submake_template,$(dir),extraclean)))
-## FIXME this is busted because most of these do not have extraclean rules.
-extraclean: $(SUBDIR:=_extraclean)
+extraclean: $(extraclean_dirs:=_extraclean)
${top_maintainer_clean}
-rm -f config-tmp-*
-rm -f *~ \#*
DOCS = $(DVIS) $(HTMLS) $(INFOS) $(PDFS) $(PSS)
$(DOCS):
- t=$@; IFS=-; set $$t; IFS=; $(MAKE) -C doc/$$1 $$2
+ $(MAKE) -C doc/$(subst -, ,$@)
.PHONY: $(DOCS) docs pdf ps
.PHONY: info dvi dist check html info-real info-dir check-info
## Install non .info forms of the documentation.
## TODO add etc/refcards.
$(INSTALL_DOC):
- t=$@; IFS=-; set $$t; IFS=; $(MAKE) -C doc/$$2 $$1-$$3
+ $(MAKE) -C doc/$(subst -, install-,$(subst install-,,$@))
.PHONY: $(INSTALL_DOC) install-doc
.PHONY: install-dvi install-html install-pdf install-ps
UNINSTALL_DOC = $(UNINSTALL_DVI) $(UNINSTALL_HTML) $(UNINSTALL_PDF) $(UNINSTALL_PS)
$(UNINSTALL_DOC):
- t=$@; IFS=-; set $$t; IFS=; $(MAKE) -C doc/$$2 $$1-$$3
+ $(MAKE) -C doc/$(subst -, uninstall-,$(subst uninstall-,,$@))
.PHONY: $(UNINSTALL_DOC) uninstall-doc
.PHONY: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps
$(MAKE) MAKEFILE_NAME=force-Makefile force-Makefile
$(MAKE) all
-.PHONY: ChangeLog change-history change-history-commit
-.PHONY: master-branch-is-current no-ChangeLog unchanged-history-files
-
-# The newest revision that should not appear in the generated ChangeLog.
-gen_origin = 2c1b8604946efbcd8ec5dd6c6dda7541ce4fc3c0
-
-# Convert git commit log to ChangeLog file. make-dist uses this.
-ChangeLog:
- $(AM_V_GEN)distprefix=$(distprefix) srcprefix=$(srcdir)/ \
- $(srcdir)/build-aux/gitlog-to-emacslog $(gen_origin)
+.PHONY: ChangeLog change-history change-history-commit change-history-nocommit
+.PHONY: master-branch-is-current unchanged-history-files
+CHANGELOG = ChangeLog
+emacslog = build-aux/gitlog-to-emacslog
# The ChangeLog history files are called ChangeLog.1, ChangeLog.2, ...,
# ChangeLog.$(CHANGELOG_HISTORY_INDEX_MAX). $(CHANGELOG_N) stands for
# the newest (highest-numbered) ChangeLog history file.
CHANGELOG_HISTORY_INDEX_MAX = 2
CHANGELOG_N = ChangeLog.$(CHANGELOG_HISTORY_INDEX_MAX)
+# Convert git commit log to ChangeLog file. make-dist uses this.
+# I guess this is PHONY so it always updates?
+ChangeLog:
+ $(AM_V_GEN)cd $(srcdir) && \
+ ./$(emacslog) -o $(CHANGELOG) -n $(CHANGELOG_HISTORY_INDEX_MAX)
+
# Check that we are in a good state for changing history.
-no-ChangeLog:
- test ! -f ChangeLog
master-branch-is-current:
git branch | grep -q '^\* master$$'
unchanged-history-files:
- x=$$(git diff-files --name-only $(CHANGELOG_N) Makefile.in) && \
+ x=$$(git diff-files --name-only $(CHANGELOG_N) $(emacslog)) && \
test -z "$$x"
+# Regular expression that matches the newest commit covered by a ChangeLog.
+new_commit_regexp = ^commit [0123456789abcdef]* (inclusive)
+
# Copy newer commit messages to the start of the ChangeLog history file,
# and consider them to be older.
-change-history: no-ChangeLog master-branch-is-current unchanged-history-files \
- ChangeLog
- (sed '/^;; [L]ocal Variables:/,$$d' <ChangeLog && cat $(CHANGELOG_N)) \
- >$(CHANGELOG_N).tmp
- new_origin=$$(git log --pretty=format:%H HEAD^!) && \
- sed 's/^\(gen_origin *= *\).*/\1'"$$new_origin/" \
- <Makefile.in >Makefile.in.tmp
+change-history-nocommit: master-branch-is-current unchanged-history-files
+ -rm -f ChangeLog.tmp
+ $(MAKE) ChangeLog CHANGELOG=ChangeLog.tmp
+ sed '/^This file records repository revisions/,$$d' \
+ ChangeLog.tmp >$(CHANGELOG_N).tmp
+ new_commit_line=`grep '$(new_commit_regexp)' ChangeLog.tmp` && \
+ sed 's/$(new_commit_regexp).*/'"$$new_commit_line/" \
+ $(CHANGELOG_N) >>$(CHANGELOG_N).tmp
+ rm ChangeLog.tmp
mv $(CHANGELOG_N).tmp $(CHANGELOG_N)
- mv Makefile.in.tmp Makefile.in
+
+change-history: change-history-nocommit
$(MAKE) $@-commit
# If 'make change-history' fails because the newest ChangeLog history
# file contains invalid text, fix the file by hand and then run
# 'make change-history-commit'.
change-history-commit:
- git commit -m'; make $@' $(CHANGELOG_N) Makefile.in
+ git commit -m'; make $@' $(CHANGELOG_N) $(emacslog)
.PHONY: check-declare