automake-ng
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Automake-NG] [PATCH 2/2] [ng] texinfo: take advantage of GNU make featu


From: Stefano Lattarini
Subject: [Automake-NG] [PATCH 2/2] [ng] texinfo: take advantage of GNU make features in several recipes
Date: Wed, 30 May 2012 13:05:46 +0200

* 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 <address@hidden>
---
 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 10f5b36..049d894 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 c15b729..2c94db1 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 <http://www.gnu.org/licenses/>.
 
+## 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%
 
 
-- 
1.7.9.5




reply via email to

[Prev in Thread] Current Thread [Next in Thread]