xref: /netbsd-src/external/gpl3/autoconf/dist/lib/freeze.mk (revision d874e91932377fc40d53f102e48fc3ee6f4fe9de)
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
23SUFFIXES = .m4 .m4f
24
25AUTOM4TE_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.
33MY_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...
53src_libdir   = $(top_srcdir)/lib
54build_libdir = $(top_builddir)/lib
55
56m4f_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
62m4sugar_m4f_dependencies =			\
63	$(m4f_dependencies)			\
64	$(src_libdir)/m4sugar/m4sugar.m4	\
65	$(build_libdir)/m4sugar/version.m4
66
67m4sh_m4f_dependencies =				\
68	$(m4sugar_m4f_dependencies)		\
69	$(src_libdir)/m4sugar/m4sh.m4
70
71autotest_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
77autoconf_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
104ETAGS_FOR_M4 = \
105  --lang=none \
106  --regex='/\(m4_define\|define\)(\[\([^]]*\)\]/\2/'
107
108ETAGS_FOR_M4SUGAR = \
109  $(ETAGS_FOR_M4) \
110  --regex='/m4_defun(\[\([^]]*\)\]/\1/'
111
112ETAGS_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
122check-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