From 042e1321b539cb1f474bd1bee2238c16e2a463a4 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Wed, 30 May 2012 10:23:03 +0200 Subject: [PATCH] [ng] texinfo: take advantage of GNU make features in several recipes * lib/am/texibuild.am: In a recipe, use $(@D) instead of extracting the directory component from '$@' with echo+sed. * lib/am/texinfos.am (am__create_installdir): New private helper variable. Rewrite several rules to take advantage of it and of GNU make automatic variables (like $^) and builtins (like $(and), $(addprefix), $(notdir)). Add a workaround for a misfeature of the Automake parser/preprocessor that might sometimes prevent us from using the '$^' automatic variable correctly in our recipe. Signed-off-by: Stefano Lattarini --- lib/am/texibuild.am | 2 +- lib/am/texinfos.am | 188 ++++++++++++++++---------------------------- 2 files changed, 70 insertions(+), 120 deletions(-) diff --git a/lib/am/texibuild.am b/lib/am/texibuild.am index 10f5b3694..049d894fc 100644 --- a/lib/am/texibuild.am +++ b/lib/am/texibuild.am @@ -44,7 +44,7 @@ rc=$$?; \ ## Beware that backup info files might come from a subdirectory. ?INSRC? $(am__cd) $(srcdir) && \ - $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ + $$restore $$backupdir/* $(@D); \ fi; \ rm -rf $$backupdir; exit $$rc diff --git a/lib/am/texinfos.am b/lib/am/texinfos.am index c15b729ad..2c94db19f 100644 --- a/lib/am/texinfos.am +++ b/lib/am/texinfos.am @@ -15,6 +15,9 @@ ## You should have received a copy of the GNU General Public License ## along with this program. If not, see . +## FIXME: this should probably be moved to header-vars.am ... +am__create_installdir = $(if $(and $1,$^),$(MKDIR_P) $(DESTDIR)$1,@:) + ## ----------- ## ## Variables. ## ## ----------- ## @@ -133,29 +136,25 @@ if %?LOCAL-TEXIS% include inst-vars.am -install-dvi-am: $(DVIS) - @$(NORMAL_INSTALL) - @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ - done - -install-html-am: $(HTMLS) +## FIXME: Extra indirection required because Automake proprocessing groups +## FIXME: dependencies for a given '*-am' together, so that we might end up +## FIXME: in our genereated Makefile with something like: +## FIXME: +## FIXME: install-pdf-am: $(PDFS) install-pdf-local +## FIXME: ... [RECIPE] ... +## FIXME: +## FIXME: which would cause a huge mess with our usages of '$^' in the recipes. + +install-dvi-am: am--install-dvi +install-ps-am: am--install-ps +install-pdf-am: am--install-pdf +install-info-am: am--install-info +install-html-am: am--install-html + +am--install-html: $(HTMLS) @$(NORMAL_INSTALL) + $(call am__create_installdir,$(htmldir)) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ - fi; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ @@ -180,76 +179,62 @@ install-html-am: $(HTMLS) $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } -install-info-am: $(INFO_DEPS) +am--install-info: $(INFO_DEPS) @$(NORMAL_INSTALL) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ - fi; \ + $(call am__create_installdir,$(infodir)) + @list='$(and $(infodir),$^)'; test -n "$$list" || exit 0; \ for file in $$list; do \ -## Strip possible $(srcdir) prefix. - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - esac; \ - if test -f $$file; then d=.; else d=$(srcdir); fi; \ - for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9]; do \ - if test -f $$ifile; then \ - echo "$$ifile"; \ - else : ; fi; \ + for ifile in $$file $$file-[0-9] $$file-[0-9][0-9]; do \ + test ! -f $$ifile || echo "$$ifile"; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done + $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; \ + done @$(POST_INSTALL) - @if $(am__can_run_installinfo); then \ - list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ - for file in $$list; do \ -## Strip directory - relfile=`echo "$$file" | sed 's|^.*/||'`; \ + @$(am__can_run_installinfo) || exit 0; \ + rellist='$(notdir $(and $(infodir),$^))'; \ + test -n "$$rellist" || exit 0; \ + for relfile in $$rellist; do \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ ## Run ":" after install-info in case install-info fails. We really ## don't care about failures here, because they can be spurious. For ## instance if you don't have a dir file, install-info will fail. I ## think instead it should create a new dir file for you. This bug ## causes the "make distcheck" target to fail reliably. - echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ -## Use "|| :" here because Sun make passes -e to sh; if install-info -## fails then we'd fail if we used ";". - install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ - done; \ - else : ; fi + install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ + done; \ -install-pdf-am: $(PDFS) +am--install-dvi: $(DVIS) @$(NORMAL_INSTALL) - @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ + $(call am__create_installdir,$(dvidir)) + @list='$(and $(dvidir),$^)'; test -n "$$list" || exit 0; \ + for p in $$list; do echo "$$p"; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ + done + +am--install-pdf: $(PDFS) + @$(NORMAL_INSTALL) + $(call am__create_installdir,$(pdfdir)) + @list='$(and $(pdfdir),$^)'; test -n "$$list" || exit 0; \ + for p in $$list; do echo "$$p"; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done + $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; \ + done -install-ps-am: $(PSS) +am--install-ps: $(PSS) @$(NORMAL_INSTALL) - @list='$(PSS)'; test -n "$(psdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ + $(call am__create_installdir,$(psdir)) + @list='$(and $(psdir),$^)'; test -n "$$list" || exit 0; \ + for p in $$list; do echo "$$p"; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done + $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; \ + done else ! %?LOCAL-TEXIS% install-dvi-am: @@ -274,22 +259,20 @@ if %?LOCAL-TEXIS% uninstall-dvi-am: @$(NORMAL_UNINSTALL) - @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ - rm -f "$(DESTDIR)$(dvidir)/$$f"; \ - done + $(if $(and $(DVIS),$(dvidir)),rm -f $(addprefix '$(DESTDIR)$(dvidir)'/,$(notdir $(DVIS)))) + +uninstall-pdf-am: + @$(NORMAL_UNINSTALL) + $(if $(and $(PDFS),$(pdfdir)),rm -f $(addprefix '$(DESTDIR)$(pdfdir)'/,$(notdir $(PDFS)))) + +uninstall-ps-am: + @$(NORMAL_UNINSTALL) + $(if $(and $(PSS),$(psdir)),rm -f $(addprefix '$(DESTDIR)$(psdir)'/,$(notdir $(PSS)))) uninstall-html-am: @$(NORMAL_UNINSTALL) - @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ -## $f can be a directory, hence the -r. - echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ - rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ - done +## The HTML 'files' can be directories actually, hence the '-r'. + $(if $(and $(HTMLS),$(htmldir)),rm -rf $(addprefix '$(DESTDIR)$(htmldir)'/,$(notdir $(HTMLS)))) uninstall-info-am: @$(PRE_UNINSTALL) @@ -318,46 +301,13 @@ uninstall-info-am: else :; fi); \ done -uninstall-pdf-am: - @$(NORMAL_UNINSTALL) - @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ - rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ - done - -uninstall-ps-am: - @$(NORMAL_UNINSTALL) - @list='$(PSS)'; test -n "$(psdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ - rm -f "$(DESTDIR)$(psdir)/$$f"; \ - done endif %?LOCAL-TEXIS% if %?LOCAL-TEXIS% .PHONY: dist-info dist-info: $(INFO_DEPS) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; \ - for base in $$list; do \ -## Strip possible $(srcdir) prefix. - case $$base in \ - $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ - esac; \ - if test -f $$base; then d=.; else d=$(srcdir); fi; \ - base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ - for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ - if test -f $$file; then \ -## Strip leading '$$d/'. - relfile=`expr "$$file" : "$$d/\(.*\)"`; \ - test -f "$(distdir)/$$relfile" || \ - cp -p $$file "$(distdir)/$$relfile"; \ - else :; fi; \ - done; \ - done + @$(foreach f,$(foreach x,$^,$(wildcard $x $x-[0-9] $x-[0-9][0-9])), \ + cp -p $f $(distdir)/$(patsubst $(srcdir)/%,%,$f);) endif %?LOCAL-TEXIS% -- 2.47.2