1#! /bin/sh
2
3# Build some of the Autoconf test files.
4
5# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
6# Foundation, Inc.
7
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2, or (at your option)
11# any later version.
12
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16# GNU General Public License for more details.
17
18# You should have received a copy of the GNU General Public License
19# along with this program; if not, write to the Free Software
20# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21# 02110-1301, USA.
22
23# If we fail, clean up, but touch the output files.  We probably failed
24# because we used some non-portable tool.
25
26as_me=`echo "$0" | sed 's,.*[\\/],,'`
27
28trap 'echo "'"$as_me"': failed." >&2
29      rm -f acdefuns audefuns requires *.tat
30      trap "" 0
31      exit 1' \
32     0 1 2 15
33
34# If ever something goes wrong, fail, so that the trap is launched.
35set -e
36
37# We need arguments.
38test $# != 0
39
40# We need these arguments.
41src="$@"
42
43# Set locale to C so that `sort' behaves in a uniform way.
44LANGUAGE=C; export LANGUAGE
45LANG=C; export LANG
46LC_ALL=C export LC_ALL
47
48
49# requires
50# --------
51# Get the list of macros that are required: there is little interest
52# in testing them since they will be run by the guy who requires them.
53sed -n 's/dnl.*//;s/.*AC_REQUIRE(\[*\([a-zA-Z0-9_]*\).*$/\1/p' $src |
54  sort -u >requires
55
56
57# exclude_list
58# ------------
59# Macros which must not be checked at all (not with AT_CHECK_MACRO nor
60# AT_CHECK_AU_MACRO).
61exclude_list='
62	# Not a macro name at all.
63	/^$/ {next}
64
65	# Not macros, just mapping from old variable name to a new one.
66	/^ac_cv_prog_(gcc|gxx|g77)$/ {next}
67'
68
69
70# ac_exclude_list
71# ---------------
72# We try to test all the Autoconf macros with AT_CHECK_MACRO to check
73# for syntax problems, etc.  Not every macros can be run without
74# arguments, and some are already tested elsewhere.  AC_EXCLUDE_LIST
75# filters out the macros we don't want to test.
76ac_exclude_list='
77	# Internal macros are used elsewhere.
78	/^_?_AC_/ {next}
79
80	# Used in many places.
81	/^AC_.*_IFELSE$/ {next}
82	/^AC_LANG/ {next}
83	/^AC_RUN_LOG$/ {next}
84	/^AC_TRY/ {next}
85
86	# Need an argument.
87	/^AC_(CANONICALIZE|PREFIX_PROGRAM|PREREQ)$/ {next}
88	/^AC_(SEARCH_LIBS|REPLACE_FUNCS)$/ {next}
89	/^AC_(CACHE_CHECK|COMPUTE)_INT$/ {next}
90
91	# Performed in the semantics tests.
92	/^AC_CHECK_(ALIGNOF|DECL|FILE|FUNC|HEADER|LIB|MEMBER|PROG|SIZEOF|(TARGET_)?TOOL|TYPE)S?$/ {next}
93
94	# Fail when the source does not exist.
95	/^AC_CONFIG/ {next}
96
97	# AU defined to nothing.
98	/^AC_(CYGWIN|CYGWIN32|EMXOS2|MING32|EXEEXT|OBJEXT)$/ {next}
99
100	# Produce "= val" because $1, the variable used to store the result,
101	# is empty.
102	/^AC_(F77|FC)_FUNC$/ {next}
103	/^AC_FC_SRCEXT$/ {next}
104	/^AC_PATH_((TARGET_)?TOOL|PROG)S?$/ {next}
105
106	# Requires the current language to be Fortran, not C.
107	/^AC_FC_FREEFORM$/ {next}
108
109	# Is a number.
110	/^AC_FD_CC$/ {next}
111
112	# Obsolete, but needs to be AC_DEFUNed.
113	/^AC_FOREACH$/ {next}
114
115	# Require a file that is not shipped with Autoconf.  But it should.
116	/^AC_FUNC_(GETLOADAVG|FNMATCH_GNU)$/ {next}
117	/^AC_REPLACE_FNMATCH$/ {next}
118
119	# Obsolete, checked in semantics.
120	/^AC_FUNC_WAIT3$/ {next}
121	/^AC_SYS_RESTARTABLE_SYSCALLS$/ {next}
122
123	# Not intended to be invoked at the top level.
124	/^AC_INCLUDES_DEFAULT$/ {next}
125
126	# AC_INIT includes all the AC_INIT macros.
127	# There is an infinite m4 recursion if AC_INIT is used twice.
128	/^AC_INIT/ {next}
129
130	# Checked in semantics.
131	/^AC_(PROG_CC|C_CONST|C_VOLATILE)$/ {next}
132	/^AC_PATH_XTRA$/ {next}
133
134	# Requires a working C++ compiler, which is not a given.
135	/^AC_PROG_CXX_C_O$/ {next}
136
137	# Already tested by AT_CHECK_MACRO.
138	/^AC_OUTPUT$/ {next}
139'
140
141
142# ac_exclude_script
143# -----------------
144# Build a single awk script out of the above.
145ac_exclude_script="$exclude_list $ac_exclude_list {print}"
146
147
148# au_exclude_list
149# ---------------
150# Check all AU_DEFUN'ed macros with AT_CHECK_AU_MACRO, except these.
151au_exclude_list='
152	# Empty.
153	/^AC_(C_CROSS|PROG_CC_STDC)$/ {next}
154
155	# Use AC_REQUIRE.
156	/^AC_(CYGWIN|MINGW32|EMXOS2)$/ {next}
157
158	# Already in configure.ac.
159	/^AC_(INIT|OUTPUT)$/ {next}
160
161	# AC_LANG_SAVE needs user interaction to be removed.
162	# AC_LANG_RESTORE cannot be used alone.
163	/^AC_LANG_(SAVE|RESTORE)$/ {next}
164
165	# Need arguments and are tested elsewhere.
166	/^AC_(LINK_FILES|PREREQ)$/ {next}
167'
168
169# au_exclude_script
170# -----------------
171# Build a single awk script out of the above.
172au_exclude_script="$exclude_list $au_exclude_list {print}"
173
174
175## ------------------------- ##
176## Creating the test files.  ##
177## ------------------------- ##
178
179for file in $src
180do
181  base=`echo "$file" | sed 's,.*[\\/],,;s/\..*//'`
182  # Get the list of macros which are defined in Autoconf level.
183  # Get rid of the macros we are not interested in.
184  sed -n -e 's/^AC_DEFUN(\[*\([a-zA-Z0-9_]*\).*$/\1/p' \
185	 -e 's/^AC_DEFUN_ONCE(\[*\([a-zA-Z0-9_]*\).*$/\1/p' $file |
186    awk "$ac_exclude_script" |
187    sort -u >acdefuns
188
189  # Get the list of macros which are defined in Autoupdate level.
190  sed -n 's/^AU_DEFUN(\[*\([a-zA-Z][a-zA-Z0-9_]*\).*$/\1/p' $file |
191    awk "$au_exclude_script" |
192    sort -u >audefuns
193
194  # Filter out required macros.
195  {
196    sed 's/^ *//' <<MK_EOF
197    # Generated by $as_me.			-*- Autotest -*-
198
199    ## --------------------- ##
200    ## Do not edit by hand.  ##
201    ## --------------------- ##
202
203    # Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
204
205    AT_BANNER([Testing autoconf/$base macros.])
206
207MK_EOF
208
209    echo "# Modern macros."
210    comm -23 acdefuns requires | sed 's/.*/AT_CHECK_MACRO([&])/'
211    echo
212    echo "# Obsolete macros."
213    comm -23 audefuns requires | sed 's/.*/AT_CHECK_AU_MACRO([&])/'
214  } >ac$base.tat
215
216  # In one atomic step so that if something above fails, the trap
217  # preserves the old version of the file.  If there is nothing to
218  # check, output /rien du tout/[1].
219  if grep AT_CHECK ac$base.tat >/dev/null 2>&1; then
220    mv -f ac$base.tat ac$base.at
221  else
222    rm -f ac$base.tat ac$base.at
223    touch ac$base.at
224  fi
225  # Help people not to update these files by hand.
226  chmod a-w ac$base.at
227done
228
229rm -f acdefuns audefuns requires
230
231trap '' 0
232exit 0
233
234# [1] En franc,ais dans le texte.
235