Home | History | Annotate | Line # | Download | only in lib
      1 # Freeze M4 files.
      2 
      3 # Copyright (C) 2002, 2004, 2006-2012 Free Software Foundation, Inc.
      4 
      5 # This program is free software: you can redistribute it and/or modify
      6 # it under the terms of the GNU General Public License as published by
      7 # the Free Software Foundation, either version 3 of the License, or
      8 # (at your option) any later version.
      9 
     10 # This program is distributed in the hope that it will be useful,
     11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 # GNU General Public License for more details.
     14 
     15 # You should have received a copy of the GNU General Public License
     16 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
     17 
     18 
     19 ## ----------------- ##
     20 ## Freeze M4 files.  ##
     21 ## ----------------- ##
     22 
     23 SUFFIXES = .m4 .m4f
     24 
     25 AUTOM4TE_CFG = $(top_builddir)/lib/autom4te.cfg
     26 $(AUTOM4TE_CFG): $(top_srcdir)/lib/autom4te.in
     27 	cd $(top_builddir)/lib && $(MAKE) $(AM_MAKEFLAGS) autom4te.cfg
     28 
     29 # Do not use AUTOM4TE here, since maint.mk (my-distcheck)
     30 # checks if we are independent of Autoconf by defining AUTOM4TE (and
     31 # others) to `false'.  Autoconf provides autom4te, so that doesn't
     32 # apply to us.
     33 MY_AUTOM4TE =									\
     34 	autom4te_perllibdir='$(top_srcdir)'/lib					\
     35 	AUTOM4TE_CFG='$(AUTOM4TE_CFG)'         $(top_builddir)/bin/autom4te	\
     36 		-B '$(top_builddir)'/lib -B '$(top_srcdir)'/lib        # keep ` '
     37 
     38 # When processing the file with diversion disabled, there must be no
     39 # output but comments and empty lines.
     40 # If freezing produces output, something went wrong: a bad `divert',
     41 # or an improper paren etc.
     42 # It may happen that the output does not end with an end of line, hence
     43 # force an end of line when reporting errors.
     44 .m4.m4f:
     45 	$(MY_AUTOM4TE)				\
     46 		--language=$*			\
     47 		--freeze			\
     48 		--output=$@
     49 
     50 # Factor the dependencies between all the frozen files.
     51 # Some day we should explain to Automake how to use autom4te to compute
     52 # the dependencies...
     53 src_libdir   = $(top_srcdir)/lib
     54 build_libdir = $(top_builddir)/lib
     55 
     56 m4f_dependencies = $(top_builddir)/bin/autom4te $(AUTOM4TE_CFG)
     57 
     58 # For parallel builds.
     59 $(build_libdir)/m4sugar/version.m4:
     60 	cd $(build_libdir)/m4sugar && $(MAKE) $(AM_MAKEFLAGS) version.m4
     61 
     62 m4sugar_m4f_dependencies =			\
     63 	$(m4f_dependencies)			\
     64 	$(src_libdir)/m4sugar/m4sugar.m4	\
     65 	$(build_libdir)/m4sugar/version.m4
     66 
     67 m4sh_m4f_dependencies =				\
     68 	$(m4sugar_m4f_dependencies)		\
     69 	$(src_libdir)/m4sugar/m4sh.m4
     70 
     71 autotest_m4f_dependencies =			\
     72 	$(m4sh_m4f_dependencies)		\
     73 	$(src_libdir)/autotest/autotest.m4	\
     74 	$(src_libdir)/autotest/general.m4	\
     75 	$(src_libdir)/autotest/specific.m4
     76 
     77 autoconf_m4f_dependencies =			\
     78 	$(m4sh_m4f_dependencies)		\
     79 	$(src_libdir)/autoconf/autoscan.m4	\
     80 	$(src_libdir)/autoconf/general.m4	\
     81 	$(src_libdir)/autoconf/autoheader.m4	\
     82 	$(src_libdir)/autoconf/autoupdate.m4	\
     83 	$(src_libdir)/autoconf/autotest.m4	\
     84 	$(src_libdir)/autoconf/status.m4	\
     85 	$(src_libdir)/autoconf/oldnames.m4	\
     86 	$(src_libdir)/autoconf/specific.m4	\
     87 	$(src_libdir)/autoconf/lang.m4		\
     88 	$(src_libdir)/autoconf/c.m4		\
     89 	$(src_libdir)/autoconf/fortran.m4	\
     90 	$(src_libdir)/autoconf/erlang.m4	\
     91 	$(src_libdir)/autoconf/go.m4		\
     92 	$(src_libdir)/autoconf/functions.m4	\
     93 	$(src_libdir)/autoconf/headers.m4	\
     94 	$(src_libdir)/autoconf/types.m4		\
     95 	$(src_libdir)/autoconf/libs.m4		\
     96 	$(src_libdir)/autoconf/programs.m4	\
     97 	$(src_libdir)/autoconf/autoconf.m4
     98 
     99 
    100 ## --------------------------- ##
    101 ## Run ETAGS on some M4 code.  ##
    102 ## --------------------------- ##
    103 
    104 ETAGS_FOR_M4 = \
    105   --lang=none \
    106   --regex='/\(m4_define\|define\)(\[\([^]]*\)\]/\2/'
    107 
    108 ETAGS_FOR_M4SUGAR = \
    109   $(ETAGS_FOR_M4) \
    110   --regex='/m4_defun(\[\([^]]*\)\]/\1/'
    111 
    112 ETAGS_FOR_AUTOCONF = \
    113   $(ETAGS_FOR_M4SUGAR) \
    114   --regex='/\(A[CU]_DEFUN\|AU_ALIAS\)(\[\([^]]*\)\]/\2/' \
    115   --regex='/AN_\(FUNCTION\|HEADER\|IDENTIFIER\|LIBRARY\|MAKEVAR\|PROGRAM\)(\[\([^]]*\)\]/\2/'
    116 
    117 
    118 ## -------------------------------- ##
    119 ## Looking for forbidden patterns.  ##
    120 ## -------------------------------- ##
    121 
    122 check-forbidden-patterns:
    123 	@if (cd $(srcdir) && \
    124 	    $(GREP) $(forbidden_patterns) $(forbidden_patterns_files)) \
    125 	    >forbidden.log; then \
    126 	  echo "ERROR: forbidden patterns were found:" >&2; \
    127 	  sed "s|^|$*.m4: |" <forbidden.log >&2; \
    128 	  echo >&2; \
    129 	  exit 1; \
    130 	else \
    131 	  rm -f forbidden.log; \
    132 	fi
    133