Blame lib/freeze.mk

Packit 47b4ca
# Freeze M4 files.
Packit 47b4ca
Packit 47b4ca
# Copyright (C) 2002, 2004, 2006-2012 Free Software Foundation, Inc.
Packit 47b4ca
Packit 47b4ca
# This program is free software: you can redistribute it and/or modify
Packit 47b4ca
# it under the terms of the GNU General Public License as published by
Packit 47b4ca
# the Free Software Foundation, either version 3 of the License, or
Packit 47b4ca
# (at your option) any later version.
Packit 47b4ca
Packit 47b4ca
# This program is distributed in the hope that it will be useful,
Packit 47b4ca
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 47b4ca
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 47b4ca
# GNU General Public License for more details.
Packit 47b4ca
Packit 47b4ca
# You should have received a copy of the GNU General Public License
Packit 47b4ca
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
## ----------------- ##
Packit 47b4ca
## Freeze M4 files.  ##
Packit 47b4ca
## ----------------- ##
Packit 47b4ca
Packit 47b4ca
SUFFIXES = .m4 .m4f
Packit 47b4ca
Packit 47b4ca
AUTOM4TE_CFG = $(top_builddir)/lib/autom4te.cfg
Packit 47b4ca
$(AUTOM4TE_CFG): $(top_srcdir)/lib/autom4te.in
Packit 47b4ca
	cd $(top_builddir)/lib && $(MAKE) $(AM_MAKEFLAGS) autom4te.cfg
Packit 47b4ca
Packit 47b4ca
# Do not use AUTOM4TE here, since maint.mk (my-distcheck)
Packit 47b4ca
# checks if we are independent of Autoconf by defining AUTOM4TE (and
Packit 47b4ca
# others) to `false'.  Autoconf provides autom4te, so that doesn't
Packit 47b4ca
# apply to us.
Packit 47b4ca
MY_AUTOM4TE =									\
Packit 47b4ca
	autom4te_perllibdir='$(top_srcdir)'/lib					\
Packit 47b4ca
	AUTOM4TE_CFG='$(AUTOM4TE_CFG)'         $(top_builddir)/bin/autom4te	\
Packit 47b4ca
		-B '$(top_builddir)'/lib -B '$(top_srcdir)'/lib        # keep ` '
Packit 47b4ca
Packit 47b4ca
# When processing the file with diversion disabled, there must be no
Packit 47b4ca
# output but comments and empty lines.
Packit 47b4ca
# If freezing produces output, something went wrong: a bad `divert',
Packit 47b4ca
# or an improper paren etc.
Packit 47b4ca
# It may happen that the output does not end with an end of line, hence
Packit 47b4ca
# force an end of line when reporting errors.
Packit 47b4ca
.m4.m4f:
Packit 47b4ca
	$(MY_AUTOM4TE)				\
Packit 47b4ca
		--language=$*			\
Packit 47b4ca
		--freeze			\
Packit 47b4ca
		--output=$@
Packit 47b4ca
Packit 47b4ca
# Factor the dependencies between all the frozen files.
Packit 47b4ca
# Some day we should explain to Automake how to use autom4te to compute
Packit 47b4ca
# the dependencies...
Packit 47b4ca
src_libdir   = $(top_srcdir)/lib
Packit 47b4ca
build_libdir = $(top_builddir)/lib
Packit 47b4ca
Packit 47b4ca
m4f_dependencies = $(top_builddir)/bin/autom4te $(AUTOM4TE_CFG)
Packit 47b4ca
Packit 47b4ca
# For parallel builds.
Packit 47b4ca
$(build_libdir)/m4sugar/version.m4:
Packit 47b4ca
	cd $(build_libdir)/m4sugar && $(MAKE) $(AM_MAKEFLAGS) version.m4
Packit 47b4ca
Packit 47b4ca
m4sugar_m4f_dependencies =			\
Packit 47b4ca
	$(m4f_dependencies)			\
Packit 47b4ca
	$(src_libdir)/m4sugar/m4sugar.m4	\
Packit 47b4ca
	$(build_libdir)/m4sugar/version.m4
Packit 47b4ca
Packit 47b4ca
m4sh_m4f_dependencies =				\
Packit 47b4ca
	$(m4sugar_m4f_dependencies)		\
Packit 47b4ca
	$(src_libdir)/m4sugar/m4sh.m4
Packit 47b4ca
Packit 47b4ca
autotest_m4f_dependencies =			\
Packit 47b4ca
	$(m4sh_m4f_dependencies)		\
Packit 47b4ca
	$(src_libdir)/autotest/autotest.m4	\
Packit 47b4ca
	$(src_libdir)/autotest/general.m4	\
Packit 47b4ca
	$(src_libdir)/autotest/specific.m4
Packit 47b4ca
Packit 47b4ca
autoconf_m4f_dependencies =			\
Packit 47b4ca
	$(m4sh_m4f_dependencies)		\
Packit 47b4ca
	$(src_libdir)/autoconf/autoscan.m4	\
Packit 47b4ca
	$(src_libdir)/autoconf/general.m4	\
Packit 47b4ca
	$(src_libdir)/autoconf/autoheader.m4	\
Packit 47b4ca
	$(src_libdir)/autoconf/autoupdate.m4	\
Packit 47b4ca
	$(src_libdir)/autoconf/autotest.m4	\
Packit 47b4ca
	$(src_libdir)/autoconf/status.m4	\
Packit 47b4ca
	$(src_libdir)/autoconf/oldnames.m4	\
Packit 47b4ca
	$(src_libdir)/autoconf/specific.m4	\
Packit 47b4ca
	$(src_libdir)/autoconf/lang.m4		\
Packit 47b4ca
	$(src_libdir)/autoconf/c.m4		\
Packit 47b4ca
	$(src_libdir)/autoconf/fortran.m4	\
Packit 47b4ca
	$(src_libdir)/autoconf/erlang.m4	\
Packit 47b4ca
	$(src_libdir)/autoconf/go.m4		\
Packit 47b4ca
	$(src_libdir)/autoconf/functions.m4	\
Packit 47b4ca
	$(src_libdir)/autoconf/headers.m4	\
Packit 47b4ca
	$(src_libdir)/autoconf/types.m4		\
Packit 47b4ca
	$(src_libdir)/autoconf/libs.m4		\
Packit 47b4ca
	$(src_libdir)/autoconf/programs.m4	\
Packit 47b4ca
	$(src_libdir)/autoconf/autoconf.m4
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
## --------------------------- ##
Packit 47b4ca
## Run ETAGS on some M4 code.  ##
Packit 47b4ca
## --------------------------- ##
Packit 47b4ca
Packit 47b4ca
ETAGS_FOR_M4 = \
Packit 47b4ca
  --lang=none \
Packit 47b4ca
  --regex='/\(m4_define\|define\)(\[\([^]]*\)\]/\2/'
Packit 47b4ca
Packit 47b4ca
ETAGS_FOR_M4SUGAR = \
Packit 47b4ca
  $(ETAGS_FOR_M4) \
Packit 47b4ca
  --regex='/m4_defun(\[\([^]]*\)\]/\1/'
Packit 47b4ca
Packit 47b4ca
ETAGS_FOR_AUTOCONF = \
Packit 47b4ca
  $(ETAGS_FOR_M4SUGAR) \
Packit 47b4ca
  --regex='/\(A[CU]_DEFUN\|AU_ALIAS\)(\[\([^]]*\)\]/\2/' \
Packit 47b4ca
  --regex='/AN_\(FUNCTION\|HEADER\|IDENTIFIER\|LIBRARY\|MAKEVAR\|PROGRAM\)(\[\([^]]*\)\]/\2/'
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
## -------------------------------- ##
Packit 47b4ca
## Looking for forbidden patterns.  ##
Packit 47b4ca
## -------------------------------- ##
Packit 47b4ca
Packit 47b4ca
check-forbidden-patterns:
Packit 47b4ca
	@if (cd $(srcdir) && \
Packit 47b4ca
	    $(GREP) $(forbidden_patterns) $(forbidden_patterns_files)) \
Packit 47b4ca
	    >forbidden.log; then \
Packit 47b4ca
	  echo "ERROR: forbidden patterns were found:" >&2; \
Packit 47b4ca
	  sed "s|^|$*.m4: |" <forbidden.log >&2; \
Packit 47b4ca
	  echo >&2; \
Packit 47b4ca
	  exit 1; \
Packit 47b4ca
	else \
Packit 47b4ca
	  rm -f forbidden.log; \
Packit 47b4ca
	fi