1169689Skandnl See whether we need a declaration for a function.
2169689Skandnl The result is highly dependent on the INCLUDES passed in, so make sure
3169689Skandnl to use a different cache variable name in this macro if it is invoked
4169689Skandnl in a different context somewhere else.
5169689Skandnl gcc_AC_CHECK_DECL(SYMBOL,
6169689Skandnl 	[ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, INCLUDES]]])
7169689SkanAC_DEFUN([gcc_AC_CHECK_DECL],
8169689Skan[AC_MSG_CHECKING([whether $1 is declared])
9169689SkanAC_CACHE_VAL(gcc_cv_have_decl_$1,
10169689Skan[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$4],
11169689Skan[#ifndef $1
12169689Skanchar *(*pfn) = (char *(*)) $1 ;
13169689Skan#endif])], eval "gcc_cv_have_decl_$1=yes", eval "gcc_cv_have_decl_$1=no")])
14169689Skanif eval "test \"`echo '$gcc_cv_have_decl_'$1`\" = yes"; then
15169689Skan  AC_MSG_RESULT(yes) ; ifelse([$2], , :, [$2])
16169689Skanelse
17169689Skan  AC_MSG_RESULT(no) ; ifelse([$3], , :, [$3])
18169689Skanfi
19169689Skan])dnl
20169689Skan
21169689Skandnl Check multiple functions to see whether each needs a declaration.
22169689Skandnl Arrange to define HAVE_DECL_<FUNCTION> to 0 or 1 as appropriate.
23169689Skandnl gcc_AC_CHECK_DECLS(SYMBOLS,
24169689Skandnl 	[ACTION-IF-NEEDED [, ACTION-IF-NOT-NEEDED [, INCLUDES]]])
25169689SkanAC_DEFUN([gcc_AC_CHECK_DECLS],
26169689Skan[AC_FOREACH([gcc_AC_Func], [$1],
27169689Skan  [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_[]gcc_AC_Func),
28169689Skan  [Define to 1 if we found a declaration for ']gcc_AC_Func[', otherwise
29169689Skan   define to 0.])])dnl
30169689Skanfor ac_func in $1
31169689Skando
32169689Skan  ac_tr_decl=AS_TR_CPP([HAVE_DECL_$ac_func])
33169689Skangcc_AC_CHECK_DECL($ac_func,
34169689Skan  [AC_DEFINE_UNQUOTED($ac_tr_decl, 1) $2],
35169689Skan  [AC_DEFINE_UNQUOTED($ac_tr_decl, 0) $3],
36169689Skandnl It is possible that the include files passed in here are local headers
37169689Skandnl which supply a backup declaration for the relevant prototype based on
38169689Skandnl the definition of (or lack of) the HAVE_DECL_ macro.  If so, this test
39169689Skandnl will always return success.  E.g. see libiberty.h's handling of
40169689Skandnl `basename'.  To avoid this, we define the relevant HAVE_DECL_ macro to
41169689Skandnl 1 so that any local headers used do not provide their own prototype
42169689Skandnl during this test.
43169689Skan#undef $ac_tr_decl
44169689Skan#define $ac_tr_decl 1
45169689Skan  $4
46169689Skan)
47169689Skandone
48169689Skan])
49169689Skan
50169689Skandnl 'make compare' can be significantly faster, if cmp itself can
51169689Skandnl skip bytes instead of using tail.  The test being performed is
52169689Skandnl "if cmp --ignore-initial=2 t1 t2 && ! cmp --ignore-initial=1 t1 t2"
53169689Skandnl but we need to sink errors and handle broken shells.  We also test
54169689Skandnl for the parameter format "cmp file1 file2 skip1 skip2" which is
55169689Skandnl accepted by cmp on some systems.
56169689SkanAC_DEFUN([gcc_AC_PROG_CMP_IGNORE_INITIAL],
57169689Skan[AC_CACHE_CHECK([for cmp's capabilities], gcc_cv_prog_cmp_skip,
58169689Skan[ echo abfoo >t1
59169689Skan  echo cdfoo >t2
60169689Skan  gcc_cv_prog_cmp_skip=slowcompare
61169689Skan  if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then
62169689Skan    if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then
63169689Skan      :
64169689Skan    else
65169689Skan      gcc_cv_prog_cmp_skip=gnucompare
66169689Skan    fi
67169689Skan  fi
68169689Skan  if test $gcc_cv_prog_cmp_skip = slowcompare ; then
69169689Skan    if cmp t1 t2 2 2 > /dev/null 2>&1; then
70169689Skan      if cmp t1 t2 1 1 > /dev/null 2>&1; then
71169689Skan        :
72169689Skan      else
73169689Skan        gcc_cv_prog_cmp_skip=fastcompare
74169689Skan      fi
75169689Skan    fi
76169689Skan  fi
77169689Skan  rm t1 t2
78169689Skan])
79169689Skanmake_compare_target=$gcc_cv_prog_cmp_skip
80169689SkanAC_SUBST(make_compare_target)
81169689Skan])
82169689Skan
83169689Skandnl See if symbolic links work and if not, try to substitute either hard links or simple copy.
84169689SkanAC_DEFUN([gcc_AC_PROG_LN_S],
85169689Skan[AC_MSG_CHECKING(whether ln -s works)
86169689SkanAC_CACHE_VAL(gcc_cv_prog_LN_S,
87169689Skan[rm -f conftestdata_t
88169689Skanecho >conftestdata_f
89169689Skanif ln -s conftestdata_f conftestdata_t 2>/dev/null
90169689Skanthen
91169689Skan  gcc_cv_prog_LN_S="ln -s"
92169689Skanelse
93169689Skan  if ln conftestdata_f conftestdata_t 2>/dev/null
94169689Skan  then
95169689Skan    gcc_cv_prog_LN_S=ln
96169689Skan  else
97169689Skan    if cp -p conftestdata_f conftestdata_t 2>/dev/null
98169689Skan    then
99169689Skan      gcc_cv_prog_LN_S="cp -p"
100169689Skan    else
101169689Skan      gcc_cv_prog_LN_S=cp
102169689Skan    fi
103169689Skan  fi
104169689Skanfi
105169689Skanrm -f conftestdata_f conftestdata_t
106169689Skan])dnl
107169689SkanLN_S="$gcc_cv_prog_LN_S"
108169689Skanif test "$gcc_cv_prog_LN_S" = "ln -s"; then
109169689Skan  AC_MSG_RESULT(yes)
110169689Skanelse
111169689Skan  if test "$gcc_cv_prog_LN_S" = "ln"; then
112169689Skan    AC_MSG_RESULT([no, using ln])
113169689Skan  else
114169689Skan    AC_MSG_RESULT([no, and neither does ln, so using $gcc_cv_prog_LN_S])
115169689Skan  fi
116169689Skanfi
117169689SkanAC_SUBST(LN_S)dnl
118169689Skan])
119169689Skan
120169689Skandnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead
121169689Skandnl of the usual 2.
122169689SkanAC_DEFUN([gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG],
123169689Skan[AC_CACHE_CHECK([if mkdir takes one argument], gcc_cv_mkdir_takes_one_arg,
124169689Skan[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
125169689Skan#include <sys/types.h>
126169689Skan#ifdef HAVE_SYS_STAT_H
127169689Skan# include <sys/stat.h>
128169689Skan#endif
129169689Skan#ifdef HAVE_UNISTD_H
130169689Skan# include <unistd.h>
131169689Skan#endif
132169689Skan#ifdef HAVE_DIRECT_H
133169689Skan# include <direct.h>
134169689Skan#endif], [mkdir ("foo", 0);])],
135169689Skan        gcc_cv_mkdir_takes_one_arg=no, gcc_cv_mkdir_takes_one_arg=yes)])
136169689Skanif test $gcc_cv_mkdir_takes_one_arg = yes ; then
137169689Skan  AC_DEFINE(MKDIR_TAKES_ONE_ARG, 1, [Define if host mkdir takes a single argument.])
138169689Skanfi
139169689Skan])
140169689Skan
141169689SkanAC_DEFUN([gcc_AC_PROG_INSTALL],
142169689Skan[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
143169689Skan# Find a good install program.  We prefer a C program (faster),
144169689Skan# so one script is as good as another.  But avoid the broken or
145169689Skan# incompatible versions:
146169689Skan# SysV /etc/install, /usr/sbin/install
147169689Skan# SunOS /usr/etc/install
148169689Skan# IRIX /sbin/install
149169689Skan# AIX /bin/install
150169689Skan# AFS /usr/afsws/bin/install, which mishandles nonexistent args
151169689Skan# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
152169689Skan# ./install, which can be erroneously created by make from ./install.sh.
153169689SkanAC_MSG_CHECKING(for a BSD compatible install)
154169689Skanif test -z "$INSTALL"; then
155169689SkanAC_CACHE_VAL(ac_cv_path_install,
156169689Skan[  IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS="${IFS}:"
157169689Skan  for ac_dir in $PATH; do
158169689Skan    # Account for people who put trailing slashes in PATH elements.
159169689Skan    case "$ac_dir/" in
160169689Skan    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
161169689Skan    *)
162169689Skan      # OSF1 and SCO ODT 3.0 have their own names for install.
163169689Skan      for ac_prog in ginstall scoinst install; do
164169689Skan        if test -f $ac_dir/$ac_prog; then
165169689Skan	  if test $ac_prog = install &&
166169689Skan            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
167169689Skan	    # AIX install.  It has an incompatible calling convention.
168169689Skan	    # OSF/1 installbsd also uses dspmsg, but is usable.
169169689Skan	    :
170169689Skan	  else
171169689Skan	    ac_cv_path_install="$ac_dir/$ac_prog -c"
172169689Skan	    break 2
173169689Skan	  fi
174169689Skan	fi
175169689Skan      done
176169689Skan      ;;
177169689Skan    esac
178169689Skan  done
179169689Skan  IFS="$ac_save_IFS"
180169689Skan])dnl
181169689Skan  if test "${ac_cv_path_install+set}" = set; then
182169689Skan    INSTALL="$ac_cv_path_install"
183169689Skan  else
184169689Skan    # As a last resort, use the slow shell script.  We don't cache a
185169689Skan    # path for INSTALL within a source directory, because that will
186169689Skan    # break other packages using the cache if that directory is
187169689Skan    # removed, or if the path is relative.
188169689Skan    INSTALL="$ac_install_sh"
189169689Skan  fi
190169689Skanfi
191169689Skandnl We do special magic for INSTALL instead of AC_SUBST, to get
192169689Skandnl relative paths right.
193169689SkanAC_MSG_RESULT($INSTALL)
194169689SkanAC_SUBST(INSTALL)dnl
195169689Skan
196169689Skan# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
197169689Skan# It thinks the first close brace ends the variable substitution.
198169689Skantest -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
199169689SkanAC_SUBST(INSTALL_PROGRAM)dnl
200169689Skan
201169689Skantest -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
202169689SkanAC_SUBST(INSTALL_DATA)dnl
203169689Skan])
204169689Skan
205169689Skan# mmap(2) blacklisting.  Some platforms provide the mmap library routine
206169689Skan# but don't support all of the features we need from it.
207169689SkanAC_DEFUN([gcc_AC_FUNC_MMAP_BLACKLIST],
208169689Skan[
209169689SkanAC_CHECK_HEADER([sys/mman.h],
210169689Skan		[gcc_header_sys_mman_h=yes], [gcc_header_sys_mman_h=no])
211169689SkanAC_CHECK_FUNC([mmap], [gcc_func_mmap=yes], [gcc_func_mmap=no])
212169689Skanif test "$gcc_header_sys_mman_h" != yes \
213169689Skan || test "$gcc_func_mmap" != yes; then
214169689Skan   gcc_cv_func_mmap_file=no
215169689Skan   gcc_cv_func_mmap_dev_zero=no
216169689Skan   gcc_cv_func_mmap_anon=no
217169689Skanelse
218169689Skan   AC_CACHE_CHECK([whether read-only mmap of a plain file works], 
219169689Skan  gcc_cv_func_mmap_file,
220169689Skan  [# Add a system to this blacklist if 
221169689Skan   # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a
222169689Skan   # memory area containing the same data that you'd get if you applied
223169689Skan   # read() to the same fd.  The only system known to have a problem here
224169689Skan   # is VMS, where text files have record structure.
225169689Skan   case "$host_os" in
226169689Skan     vms* | ultrix*) 
227169689Skan        gcc_cv_func_mmap_file=no ;;
228169689Skan     *)
229169689Skan        gcc_cv_func_mmap_file=yes;;
230169689Skan   esac])
231169689Skan   AC_CACHE_CHECK([whether mmap from /dev/zero works],
232169689Skan  gcc_cv_func_mmap_dev_zero,
233169689Skan  [# Add a system to this blacklist if it has mmap() but /dev/zero
234169689Skan   # does not exist, or if mmapping /dev/zero does not give anonymous
235169689Skan   # zeroed pages with both the following properties:
236169689Skan   # 1. If you map N consecutive pages in with one call, and then
237169689Skan   #    unmap any subset of those pages, the pages that were not
238169689Skan   #    explicitly unmapped remain accessible.
239169689Skan   # 2. If you map two adjacent blocks of memory and then unmap them
240169689Skan   #    both at once, they must both go away.
241169689Skan   # Systems known to be in this category are Windows (all variants),
242169689Skan   # VMS, and Darwin.
243169689Skan   case "$host_os" in
244169689Skan     vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00)
245169689Skan        gcc_cv_func_mmap_dev_zero=no ;;
246169689Skan     *)
247169689Skan        gcc_cv_func_mmap_dev_zero=yes;;
248169689Skan   esac])
249169689Skan
250169689Skan   # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for.
251169689Skan   AC_CACHE_CHECK([for MAP_ANON(YMOUS)], gcc_cv_decl_map_anon,
252169689Skan    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
253169689Skan[#include <sys/types.h>
254169689Skan#include <sys/mman.h>
255169689Skan#include <unistd.h>
256169689Skan
257169689Skan#ifndef MAP_ANONYMOUS
258169689Skan#define MAP_ANONYMOUS MAP_ANON
259169689Skan#endif
260169689Skan],
261169689Skan[int n = MAP_ANONYMOUS;])],
262169689Skan    gcc_cv_decl_map_anon=yes,
263169689Skan    gcc_cv_decl_map_anon=no)])
264169689Skan
265169689Skan   if test $gcc_cv_decl_map_anon = no; then
266169689Skan     gcc_cv_func_mmap_anon=no
267169689Skan   else
268169689Skan     AC_CACHE_CHECK([whether mmap with MAP_ANON(YMOUS) works],
269169689Skan     gcc_cv_func_mmap_anon,
270169689Skan  [# Add a system to this blacklist if it has mmap() and MAP_ANON or
271169689Skan   # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
272169689Skan   # doesn't give anonymous zeroed pages with the same properties listed
273169689Skan   # above for use of /dev/zero.
274169689Skan   # Systems known to be in this category are Windows, VMS, and SCO Unix.
275169689Skan   case "$host_os" in
276169689Skan     vms* | cygwin* | pe | mingw* | sco* | udk* )
277169689Skan        gcc_cv_func_mmap_anon=no ;;
278169689Skan     *)
279169689Skan        gcc_cv_func_mmap_anon=yes;;
280169689Skan   esac])
281169689Skan   fi
282169689Skanfi
283169689Skan
284169689Skanif test $gcc_cv_func_mmap_file = yes; then
285169689Skan  AC_DEFINE(HAVE_MMAP_FILE, 1,
286169689Skan	    [Define if read-only mmap of a plain file works.])
287169689Skanfi
288169689Skanif test $gcc_cv_func_mmap_dev_zero = yes; then
289169689Skan  AC_DEFINE(HAVE_MMAP_DEV_ZERO, 1,
290169689Skan	    [Define if mmap of /dev/zero works.])
291169689Skanfi
292169689Skanif test $gcc_cv_func_mmap_anon = yes; then
293169689Skan  AC_DEFINE(HAVE_MMAP_ANON, 1,
294169689Skan	    [Define if mmap with MAP_ANON(YMOUS) works.])
295169689Skanfi
296169689Skan])
297169689Skan
298169689Skandnl Locate a program and check that its version is acceptable.
299169689Skandnl AC_PROG_CHECK_VER(var, name, version-switch,
300169689Skandnl                  version-extract-regexp, version-glob)
301169689SkanAC_DEFUN([gcc_AC_CHECK_PROG_VER],
302169689Skan[AC_REQUIRE([gcc_AC_BUILD_EXEEXT])
303169689SkanAC_CHECK_PROG([$1], [$2], [$2])
304169689Skanif test -n "[$]$1"; then
305169689Skan  # Found it, now check the version.
306169689Skan  AC_CACHE_CHECK(for modern $2, gcc_cv_prog_$2_modern,
307169689Skan[changequote(<<,>>)dnl
308169689Skan  ac_prog_version=`<<$>>$1 $3 2>&1 |
309169689Skan                   sed -n 's/^.*patsubst(<<$4>>,/,\/).*$/\1/p'`
310169689Skanchangequote([,])dnl
311169689Skan  echo "configure:__oline__: version of $2 is $ac_prog_version" >&AS_MESSAGE_LOG_FD
312169689Skanchangequote(<<,>>)dnl
313169689Skan  case $ac_prog_version in
314169689Skan    '')     gcc_cv_prog_$2_modern=no;;
315169689Skan    <<$5>>)
316169689Skan            gcc_cv_prog_$2_modern=yes;;
317169689Skan    *)      gcc_cv_prog_$2_modern=no;;
318169689Skan  esac
319169689Skanchangequote([,])dnl
320169689Skan])
321169689Skanelse
322169689Skan  gcc_cv_prog_$2_modern=no
323169689Skanfi
324169689Skan])
325169689Skan
326169689Skandnl Determine if enumerated bitfields are unsigned.   ISO C says they can 
327169689Skandnl be either signed or unsigned.
328169689Skandnl
329169689SkanAC_DEFUN([gcc_AC_C_ENUM_BF_UNSIGNED],
330169689Skan[AC_CACHE_CHECK(for unsigned enumerated bitfields, gcc_cv_enum_bf_unsigned,
331169689Skan[AC_RUN_IFELSE([AC_LANG_SOURCE([#include <stdlib.h>
332169689Skanenum t { BLAH = 128 } ;
333169689Skanstruct s_t { enum t member : 8; } s ;
334169689Skanint main(void)
335169689Skan{            
336169689Skan        s.member = BLAH;
337169689Skan        if (s.member < 0) exit(1);
338169689Skan        exit(0);
339169689Skan
340169689Skan}])], gcc_cv_enum_bf_unsigned=yes, gcc_cv_enum_bf_unsigned=no, gcc_cv_enum_bf_unsigned=yes)])
341169689Skanif test $gcc_cv_enum_bf_unsigned = yes; then
342169689Skan  AC_DEFINE(ENUM_BITFIELDS_ARE_UNSIGNED, 1,
343169689Skan    [Define if enumerated bitfields are treated as unsigned values.])
344169689Skanfi])
345169689Skan
346169689Skandnl Probe number of bits in a byte.
347169689Skandnl Note C89 requires CHAR_BIT >= 8.
348169689Skandnl
349169689SkanAC_DEFUN([gcc_AC_C_CHAR_BIT],
350169689Skan[AC_CACHE_CHECK(for CHAR_BIT, gcc_cv_decl_char_bit,
351169689Skan[AC_EGREP_CPP(found,
352169689Skan[#ifdef HAVE_LIMITS_H
353169689Skan#include <limits.h>
354169689Skan#endif
355169689Skan#ifdef CHAR_BIT
356169689Skanfound
357169689Skan#endif], gcc_cv_decl_char_bit=yes, gcc_cv_decl_char_bit=no)
358169689Skan])
359169689Skanif test $gcc_cv_decl_char_bit = no; then
360169689Skan  AC_CACHE_CHECK(number of bits in a byte, gcc_cv_c_nbby,
361169689Skan[i=8
362169689Skan gcc_cv_c_nbby=
363169689Skan while test $i -lt 65; do
364169689Skan   AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,
365169689Skan     [switch(0) {
366169689Skan  case (unsigned char)((unsigned long)1 << $i) == ((unsigned long)1 << $i):
367169689Skan  case (unsigned char)((unsigned long)1<<($i-1)) == ((unsigned long)1<<($i-1)):
368169689Skan  ; }])],
369169689Skan     [gcc_cv_c_nbby=$i; break])
370169689Skan   i=`expr $i + 1`
371169689Skan done
372169689Skan test -z "$gcc_cv_c_nbby" && gcc_cv_c_nbby=failed
373169689Skan])
374169689Skanif test $gcc_cv_c_nbby = failed; then
375169689Skan  AC_MSG_ERROR(cannot determine number of bits in a byte)
376169689Skanelse
377169689Skan  AC_DEFINE_UNQUOTED(CHAR_BIT, $gcc_cv_c_nbby,
378169689Skan  [Define as the number of bits in a byte, if \`limits.h' doesn't.])
379169689Skanfi
380169689Skanfi])
381169689Skan
382169689SkanAC_DEFUN([gcc_AC_INITFINI_ARRAY],
383169689Skan[AC_ARG_ENABLE(initfini-array,
384169689Skan	[  --enable-initfini-array	use .init_array/.fini_array sections],
385169689Skan	[], [
386169689SkanAC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support,
387169689Skan		 gcc_cv_initfini_array, [dnl
388169689Skan  AC_RUN_IFELSE([AC_LANG_SOURCE([
389169689Skanstatic int x = -1;
390169689Skanint main (void) { return x; }
391169689Skanint foo (void) { x = 0; }
392169689Skanint (*fp) (void) __attribute__ ((section (".init_array"))) = foo;])],
393169689Skan	     [gcc_cv_initfini_array=yes], [gcc_cv_initfini_array=no],
394169689Skan	     [gcc_cv_initfini_array=no])])
395169689Skan  enable_initfini_array=$gcc_cv_initfini_array
396169689Skan])
397169689Skanif test $enable_initfini_array = yes; then
398169689Skan  AC_DEFINE(HAVE_INITFINI_ARRAY, 1,
399169689Skan    [Define .init_array/.fini_array sections are available and working.])
400169689Skanfi])
401169689Skan
402169689Skandnl # _gcc_COMPUTE_GAS_VERSION
403169689Skandnl # Used by gcc_GAS_VERSION_GTE_IFELSE
404169689Skandnl #
405169689Skandnl # WARNING:
406169689Skandnl # gcc_cv_as_gas_srcdir must be defined before this.
407169689Skandnl # This gross requirement will go away eventually.
408169689SkanAC_DEFUN([_gcc_COMPUTE_GAS_VERSION],
409169689Skan[gcc_cv_as_bfd_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/bfd
410169689Skanfor f in $gcc_cv_as_bfd_srcdir/configure \
411169689Skan         $gcc_cv_as_gas_srcdir/configure \
412169689Skan         $gcc_cv_as_gas_srcdir/configure.in \
413169689Skan         $gcc_cv_as_gas_srcdir/Makefile.in ; do
414169689Skan  gcc_cv_gas_version=`sed -n -e 's/^[[ 	]]*\(VERSION=[[0-9]]*\.[[0-9]]*.*\)/\1/p' < $f`
415169689Skan  if test x$gcc_cv_gas_version != x; then
416169689Skan    break
417169689Skan  fi
418169689Skandone
419169689Skangcc_cv_gas_major_version=`expr "$gcc_cv_gas_version" : "VERSION=\([[0-9]]*\)"`
420169689Skangcc_cv_gas_minor_version=`expr "$gcc_cv_gas_version" : "VERSION=[[0-9]]*\.\([[0-9]]*\)"`
421169689Skangcc_cv_gas_patch_version=`expr "$gcc_cv_gas_version" : "VERSION=[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)"`
422169689Skancase $gcc_cv_gas_patch_version in
423169689Skan  "") gcc_cv_gas_patch_version="0" ;;
424169689Skanesac
425169689Skangcc_cv_gas_vers=`expr \( \( $gcc_cv_gas_major_version \* 1000 \) \
426169689Skan			    + $gcc_cv_gas_minor_version \) \* 1000 \
427169689Skan			    + $gcc_cv_gas_patch_version`
428169689Skan]) []dnl # _gcc_COMPUTE_GAS_VERSION
429169689Skan
430169689Skandnl # gcc_GAS_VERSION_GTE_IFELSE([elf,] major, minor, patchlevel,
431169689Skandnl #                     [command_if_true = :], [command_if_false = :])
432169689Skandnl # Check to see if the version of GAS is greater than or
433169689Skandnl # equal to the specified version.
434169689Skandnl #
435169689Skandnl # The first ifelse() shortens the shell code if the patchlevel
436169689Skandnl # is unimportant (the usual case).  The others handle missing
437169689Skandnl # commands.  Note that the tests are structured so that the most
438169689Skandnl # common version number cases are tested first.
439169689SkanAC_DEFUN([_gcc_GAS_VERSION_GTE_IFELSE],
440169689Skan[ifelse([$1], elf,
441169689Skan [if test $in_tree_gas_is_elf = yes \
442169689Skan  &&],
443169689Skan [if]) test $gcc_cv_gas_vers -ge `expr \( \( $2 \* 1000 \) + $3 \) \* 1000 + $4`
444169689Skan  then dnl
445169689Skanifelse([$5],,:,[$5])[]dnl
446169689Skanifelse([$6],,,[
447169689Skan  else $6])
448169689Skanfi])
449169689Skan
450169689SkanAC_DEFUN([gcc_GAS_VERSION_GTE_IFELSE],
451169689Skan[AC_REQUIRE([_gcc_COMPUTE_GAS_VERSION])dnl
452169689Skanifelse([$1], elf, [_gcc_GAS_VERSION_GTE_IFELSE($@)],
453169689Skan                  [_gcc_GAS_VERSION_GTE_IFELSE(,$@)])])
454169689Skan
455169689Skandnl gcc_GAS_CHECK_FEATURE(description, cv, [[elf,]major,minor,patchlevel],
456169689Skandnl [extra switches to as], [assembler input],
457169689Skandnl [extra testing logic], [command if feature available])
458169689Skandnl
459169689Skandnl Checks for an assembler feature.  If we are building an in-tree
460169689Skandnl gas, the feature is available if the associated assembler version
461169689Skandnl is greater than or equal to major.minor.patchlevel.  If not, then
462169689Skandnl ASSEMBLER INPUT is fed to the assembler and the feature is available
463169689Skandnl if assembly succeeds.  If EXTRA TESTING LOGIC is not the empty string,
464169689Skandnl then it is run instead of simply setting CV to "yes" - it is responsible
465169689Skandnl for doing so, if appropriate.
466169689SkanAC_DEFUN([gcc_GAS_CHECK_FEATURE],
467169689Skan[AC_CACHE_CHECK([assembler for $1], [$2],
468169689Skan [[$2]=no
469169689Skan  ifelse([$3],,,[dnl
470169689Skan  if test $in_tree_gas = yes; then
471169689Skan    gcc_GAS_VERSION_GTE_IFELSE($3, [[$2]=yes])
472169689Skan  el])if test x$gcc_cv_as != x; then
473169689Skan    echo ifelse(m4_substr([$5],0,1),[$], "[$5]", '[$5]') > conftest.s
474169689Skan    if AC_TRY_COMMAND([$gcc_cv_as $4 -o conftest.o conftest.s >&AS_MESSAGE_LOG_FD])
475169689Skan    then
476169689Skan	ifelse([$6],, [$2]=yes, [$6])
477169689Skan    else
478169689Skan      echo "configure: failed program was" >&AS_MESSAGE_LOG_FD
479169689Skan      cat conftest.s >&AS_MESSAGE_LOG_FD
480169689Skan    fi
481169689Skan    rm -f conftest.o conftest.s
482169689Skan  fi])
483169689Skanifelse([$7],,,[dnl
484169689Skanif test $[$2] = yes; then
485169689Skan  $7
486169689Skanfi])])
487169689Skan
488169689Skandnl GCC_TARGET_TEMPLATE(KEY)
489169689Skandnl ------------------------
490169689Skandnl Define KEY as a valid configure key on the target machine.
491169689Skan
492169689Skanm4_define([GCC_TARGET_TEMPLATE],
493169689Skan[m4_define([GCC_TARGET_TEMPLATE($1)],[])])
494169689Skan
495169689Skandnl AH_TEMPLATE(KEY, DESCRIPTION)
496169689Skandnl -----------------------------
497169689Skandnl Issue an autoheader template for KEY, i.e., a comment composed of
498169689Skandnl DESCRIPTION (properly wrapped), and then #undef KEY.  Redefinition
499169689Skandnl of the macro in autoheader.m4, to support definition of only a few
500169689Skandnl keys while compiling target libraries.
501169689Skan
502169689Skanm4_define([AH_TEMPLATE],
503169689Skan[AH_VERBATIM([$1],m4_text_wrap([$2 */], [   ], [/* ])
504169689Skanm4_ifdef([GCC_TARGET_TEMPLATE($1)],[],[#ifndef USED_FOR_TARGET
505169689Skan])[#undef $1]m4_ifdef([GCC_TARGET_TEMPLATE($1)],[],[
506169689Skan#endif
507169689Skan]))])
508169689Skan
509169689Skandnl Make sure that build_exeext is looked for
510169689SkanAC_DEFUN([gcc_AC_BUILD_EXEEXT], [
511169689Skanac_executable_extensions="$build_exeext"])
512169689Skan
513