1132718Skan# configure.ac for GCC
2132718Skan# Process this file with autoconf to generate a configuration script.
3132718Skan
4169689Skan# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
5132718Skan# Free Software Foundation, Inc.
6132718Skan
7132718Skan#This file is part of GCC.
8132718Skan
9132718Skan#GCC is free software; you can redistribute it and/or modify it under
10132718Skan#the terms of the GNU General Public License as published by the Free
11132718Skan#Software Foundation; either version 2, or (at your option) any later
12132718Skan#version.
13132718Skan
14132718Skan#GCC is distributed in the hope that it will be useful, but WITHOUT
15132718Skan#ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16132718Skan#FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17132718Skan#for more details.
18132718Skan
19132718Skan#You should have received a copy of the GNU General Public License
20132718Skan#along with GCC; see the file COPYING.  If not, write to the Free
21169689Skan#Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
22169689Skan#02110-1301, USA.
23132718Skan
24132718Skan# --------------------------------
25132718Skan# Initialization and sanity checks
26132718Skan# --------------------------------
27132718Skan
28169689SkanAC_PREREQ(2.59)
29132718SkanAC_INIT
30132718SkanAC_CONFIG_SRCDIR(tree.c)
31132718SkanAC_CONFIG_HEADER(auto-host.h:config.in)
32132718Skan
33169689Skangcc_version=`cat $srcdir/BASE-VER`
34169689Skan
35132718Skan# Determine the host, build, and target systems
36132718SkanAC_CANONICAL_BUILD
37132718SkanAC_CANONICAL_HOST
38132718SkanAC_CANONICAL_TARGET
39132718Skan
40132718Skan# Determine the noncanonical target name, for directory use.
41169689SkanACX_NONCANONICAL_TARGET
42132718Skan
43132718Skan# Determine the target- and build-specific subdirectories
44132718SkanGCC_TOPLEV_SUBDIRS
45132718Skan
46132718Skan# Set program_transform_name
47132718SkanAC_ARG_PROGRAM
48132718Skan
49132718Skan# Check for bogus environment variables.
50132718Skan# Test if LIBRARY_PATH contains the notation for the current directory
51132718Skan# since this would lead to problems installing/building glibc.
52132718Skan# LIBRARY_PATH contains the current directory if one of the following
53132718Skan# is true:
54132718Skan# - one of the terminals (":" and ";") is the first or last sign
55132718Skan# - two terminals occur directly after each other
56132718Skan# - the path contains an element with a dot in it
57132718SkanAC_MSG_CHECKING(LIBRARY_PATH variable)
58132718Skanchangequote(,)dnl
59132718Skancase ${LIBRARY_PATH} in
60132718Skan  [:\;]* | *[:\;] | *[:\;][:\;]* |  *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
61132718Skan    library_path_setting="contains current directory"
62132718Skan    ;;
63132718Skan  *)
64132718Skan    library_path_setting="ok"
65132718Skan    ;;
66132718Skanesac
67132718Skanchangequote([,])dnl
68132718SkanAC_MSG_RESULT($library_path_setting)
69132718Skanif test "$library_path_setting" != "ok"; then
70132718SkanAC_MSG_ERROR([
71132718Skan*** LIBRARY_PATH shouldn't contain the current directory when
72132718Skan*** building gcc. Please change the environment variable
73132718Skan*** and run configure again.])
74132718Skanfi
75132718Skan
76132718Skan# Test if GCC_EXEC_PREFIX contains the notation for the current directory
77132718Skan# since this would lead to problems installing/building glibc.
78132718Skan# GCC_EXEC_PREFIX contains the current directory if one of the following
79132718Skan# is true:
80132718Skan# - one of the terminals (":" and ";") is the first or last sign
81132718Skan# - two terminals occur directly after each other
82132718Skan# - the path contains an element with a dot in it
83132718SkanAC_MSG_CHECKING(GCC_EXEC_PREFIX variable)
84132718Skanchangequote(,)dnl
85132718Skancase ${GCC_EXEC_PREFIX} in
86132718Skan  [:\;]* | *[:\;] | *[:\;][:\;]* |  *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
87132718Skan    gcc_exec_prefix_setting="contains current directory"
88132718Skan    ;;
89132718Skan  *)
90132718Skan    gcc_exec_prefix_setting="ok"
91132718Skan    ;;
92132718Skanesac
93132718Skanchangequote([,])dnl
94132718SkanAC_MSG_RESULT($gcc_exec_prefix_setting)
95132718Skanif test "$gcc_exec_prefix_setting" != "ok"; then
96132718SkanAC_MSG_ERROR([
97132718Skan*** GCC_EXEC_PREFIX shouldn't contain the current directory when
98132718Skan*** building gcc. Please change the environment variable
99132718Skan*** and run configure again.])
100132718Skanfi
101132718Skan
102132718Skan# -----------
103132718Skan# Directories
104132718Skan# -----------
105132718Skan
106132718Skan# Specify the local prefix
107132718Skanlocal_prefix=
108132718SkanAC_ARG_WITH(local-prefix,
109132718Skan[  --with-local-prefix=DIR specifies directory to put local include],
110132718Skan[case "${withval}" in
111132718Skanyes)	AC_MSG_ERROR(bad value ${withval} given for local include directory prefix) ;;
112132718Skanno)	;;
113132718Skan*)	local_prefix=$with_local_prefix ;;
114132718Skanesac])
115132718Skan
116132718Skan# Default local prefix if it is empty
117132718Skanif test x$local_prefix = x; then
118132718Skan	local_prefix=/usr/local
119132718Skanfi
120132718Skan
121132718Skan# Don't set gcc_gxx_include_dir to gxx_include_dir since that's only
122132718Skan# passed in by the toplevel make and thus we'd get different behavior
123132718Skan# depending on where we built the sources.
124132718Skangcc_gxx_include_dir=
125132718Skan# Specify the g++ header file directory
126132718SkanAC_ARG_WITH(gxx-include-dir,
127132718Skan[  --with-gxx-include-dir=DIR
128132718Skan                          specifies directory to put g++ header files],
129132718Skan[case "${withval}" in
130132718Skanyes)	AC_MSG_ERROR(bad value ${withval} given for g++ include directory) ;;
131132718Skanno)	;;
132132718Skan*)	gcc_gxx_include_dir=$with_gxx_include_dir ;;
133132718Skanesac])
134132718Skan
135169689Skan# This logic must match libstdc++-v3/acinclude.m4:GLIBCXX_EXPORT_INSTALL_INFO.
136132718Skanif test x${gcc_gxx_include_dir} = x; then
137132718Skan  if test x${enable_version_specific_runtime_libs} = xyes; then
138132718Skan    gcc_gxx_include_dir='${libsubdir}/include/c++'
139132718Skan  else
140169689Skan    libstdcxx_incdir='include/c++/$(version)'
141169689Skan    if test x$host != x$target; then
142169689Skan       libstdcxx_incdir="$target_alias/$libstdcxx_incdir"
143169689Skan    fi
144132718Skanchangequote(<<, >>)dnl
145169689Skan    gcc_gxx_include_dir="\$(libsubdir)/\$(unlibsubdir)/..\`echo \$(exec_prefix) | sed -e 's|^\$(prefix)||' -e 's|/[^/]*|/..|g'\`/$libstdcxx_incdir"
146132718Skanchangequote([, ])dnl
147132718Skan  fi
148132718Skanfi
149132718Skan
150132718SkanAC_ARG_WITH(cpp_install_dir,
151132718Skan[  --with-cpp-install-dir=DIR
152132718Skan                          install the user visible C preprocessor in DIR
153132718Skan                          (relative to PREFIX) as well as PREFIX/bin],
154132718Skan[if test x$withval = xyes; then
155132718Skan  AC_MSG_ERROR([option --with-cpp-install-dir requires an argument])
156132718Skanelif test x$withval != xno; then
157132718Skan  cpp_install_dir=$withval
158132718Skanfi])
159132718Skan
160132718Skan# We would like to our source tree to be readonly.  However when releases or
161132718Skan# pre-releases are generated, the flex/bison generated files as well as the 
162132718Skan# various formats of manuals need to be included along with the rest of the
163132718Skan# sources.  Therefore we have --enable-generated-files-in-srcdir to do 
164132718Skan# just that.
165132718Skan
166132718SkanAC_MSG_CHECKING([whether to place generated files in the source directory])
167132718Skan  dnl generated-files-in-srcdir is disabled by default
168132718Skan  AC_ARG_ENABLE(generated-files-in-srcdir, 
169132718Skan[  --enable-generated-files-in-srcdir
170132718Skan                          put copies of generated files in source dir
171132718Skan                          intended for creating source tarballs for users
172132718Skan                          without texinfo bison or flex.],
173132718Skan      generated_files_in_srcdir=$enableval,
174132718Skan      generated_files_in_srcdir=no)
175132718Skan
176132718SkanAC_MSG_RESULT($generated_files_in_srcdir)
177132718Skan
178132718Skanif test "$generated_files_in_srcdir" = "yes"; then
179132718Skan  GENINSRC=''
180132718Skanelse
181132718Skan  GENINSRC='#'
182132718Skanfi
183132718SkanAC_SUBST(GENINSRC)
184132718Skan
185132718Skan# -------------------
186132718Skan# Find default linker
187132718Skan# -------------------
188132718Skan
189132718Skan# With GNU ld
190132718SkanAC_ARG_WITH(gnu-ld,
191132718Skan[  --with-gnu-ld           arrange to work with GNU ld.],
192132718Skangnu_ld_flag="$with_gnu_ld",
193132718Skangnu_ld_flag=no)
194132718Skan
195132718Skan# With pre-defined ld
196132718SkanAC_ARG_WITH(ld,
197132718Skan[  --with-ld               arrange to use the specified ld (full pathname)],
198132718SkanDEFAULT_LINKER="$with_ld")
199132718Skanif test x"${DEFAULT_LINKER+set}" = x"set"; then
200132718Skan  if test ! -x "$DEFAULT_LINKER"; then
201169689Skan    AC_MSG_ERROR([cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER])
202132718Skan  elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
203132718Skan    gnu_ld_flag=yes
204132718Skan  fi
205132718Skan  AC_DEFINE_UNQUOTED(DEFAULT_LINKER,"$DEFAULT_LINKER",
206132718Skan	[Define to enable the use of a default linker.])
207132718Skanfi
208132718Skan
209132718SkanAC_MSG_CHECKING([whether a default linker was specified])
210132718Skanif test x"${DEFAULT_LINKER+set}" = x"set"; then
211132718Skan  if test x"$gnu_ld_flag" = x"no"; then
212132718Skan    AC_MSG_RESULT([yes ($DEFAULT_LINKER)])
213132718Skan  else
214132718Skan    AC_MSG_RESULT([yes ($DEFAULT_LINKER - GNU ld)])
215132718Skan  fi
216132718Skanelse
217132718Skan  AC_MSG_RESULT(no)
218132718Skanfi
219132718Skan
220169689Skan# With demangler in GNU ld
221169689SkanAC_ARG_WITH(demangler-in-ld,
222169689Skan[  --with-demangler-in-ld  try to use demangler in GNU ld.],
223169689Skandemangler_in_ld="$with_demangler_in_ld",
224169689Skandemangler_in_ld=no)
225169689Skan
226132718Skan# ----------------------
227132718Skan# Find default assembler
228132718Skan# ----------------------
229132718Skan
230132718Skan# With GNU as
231132718SkanAC_ARG_WITH(gnu-as,
232132718Skan[  --with-gnu-as           arrange to work with GNU as],
233132718Skangas_flag="$with_gnu_as",
234132718Skangas_flag=no)
235132718Skan
236132718SkanAC_ARG_WITH(as,
237132718Skan[  --with-as               arrange to use the specified as (full pathname)],
238132718SkanDEFAULT_ASSEMBLER="$with_as")
239132718Skanif test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
240132718Skan  if test ! -x "$DEFAULT_ASSEMBLER"; then
241169689Skan    AC_MSG_ERROR([cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER])
242132718Skan  elif $DEFAULT_ASSEMBLER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
243132718Skan    gas_flag=yes
244132718Skan  fi
245132718Skan  AC_DEFINE_UNQUOTED(DEFAULT_ASSEMBLER,"$DEFAULT_ASSEMBLER",
246132718Skan	[Define to enable the use of a default assembler.])
247132718Skanfi
248132718Skan
249132718SkanAC_MSG_CHECKING([whether a default assembler was specified])
250132718Skanif test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
251132718Skan  if test x"$gas_flag" = x"no"; then
252132718Skan    AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER)])
253132718Skan  else
254132718Skan    AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER - GNU as)])
255132718Skan  fi
256132718Skanelse
257132718Skan  AC_MSG_RESULT(no)
258132718Skanfi
259132718Skan
260132718Skan# ---------------
261132718Skan# Find C compiler
262132718Skan# ---------------
263132718Skan
264132718Skan# If a non-executable a.out is present (e.g. created by GNU as above even if
265132718Skan# invoked with -v only), the IRIX 6 native ld just overwrites the existing
266132718Skan# file, even when creating an executable, so an execution test fails.
267132718Skan# Remove possible default executable files to avoid this.
268132718Skan#
269132718Skan# FIXME: This really belongs into AC_PROG_CC and can be removed once
270132718Skan# Autoconf includes it.
271132718Skanrm -f a.out a.exe b.out
272132718Skan
273132718Skan# Find the native compiler
274132718SkanAC_PROG_CC
275169689SkanAM_PROG_CC_C_O
276132718Skan# autoconf is lame and doesn't give us any substitution variable for this.
277132718Skanif eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
278132718Skan  NO_MINUS_C_MINUS_O=yes
279132718Skanelse
280132718Skan  OUTPUT_OPTION='-o $@'
281132718Skanfi
282132718SkanAC_SUBST(NO_MINUS_C_MINUS_O)
283132718SkanAC_SUBST(OUTPUT_OPTION)
284132718Skan
285169689Skan# Remove the -O2: for historical reasons, unless bootstrapping we prefer
286169689Skan# optimizations to be activated explicitly by the toplevel.
287169689Skancase "$CC" in
288169689Skan  */prev-gcc/xgcc*) ;;
289169689Skan  *) CFLAGS=`echo $CFLAGS | sed "s/-O[[s0-9]]* *//" ` ;;
290169689Skanesac
291169689SkanAC_SUBST(CFLAGS)
292169689Skan
293132718Skan# -------------------------
294132718Skan# Check C compiler features
295132718Skan# -------------------------
296132718Skan
297132718SkanAC_PROG_CPP
298132718SkanAC_C_INLINE
299132718Skan
300132718Skan# sizeof(char) is 1 by definition.
301169689SkanAC_CHECK_SIZEOF(void *)
302169689SkanAC_CHECK_SIZEOF(short)
303169689SkanAC_CHECK_SIZEOF(int)
304169689SkanAC_CHECK_SIZEOF(long)
305169689SkanAC_CHECK_TYPES([long long], [AC_CHECK_SIZEOF(long long)])
306169689SkanAC_CHECK_TYPES([__int64], [AC_CHECK_SIZEOF(__int64)])
307132718Skan
308132718Skan# ---------------------
309132718Skan# Warnings and checking
310132718Skan# ---------------------
311132718Skan
312169689Skan# Check $CC warning features (if it's GCC).
313169689Skan# We want to use -pedantic, but we don't want warnings about
314169689Skan# * 'long long'
315169689Skan# * variadic macros
316169689Skan# * overlong strings
317169689Skan# So, we only use -pedantic if we can disable those warnings.
318169689Skan
319169689SkanAC_CACHE_CHECK(
320169689Skan  [whether ${CC} accepts -Wno-long-long],
321169689Skan  [ac_cv_prog_cc_w_no_long_long],
322169689Skan  [save_CFLAGS="$CFLAGS"
323169689Skan  CFLAGS="-Wno-long-long"
324169689Skan  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[]])],
325169689Skan                    [ac_cv_prog_cc_w_no_long_long=yes],
326169689Skan                    [ac_cv_prog_cc_w_no_long_long=no])
327169689Skan  CFLAGS="$save_CFLAGS"
328169689Skan  ])
329169689Skan
330169689SkanAC_CACHE_CHECK(
331169689Skan  [whether ${CC} accepts -Wno-variadic-macros],
332169689Skan  [ac_cv_prog_cc_w_no_variadic_macros],
333169689Skan  [save_CFLAGS="$CFLAGS"
334169689Skan  CFLAGS="-Wno-variadic-macros"
335169689Skan  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[]])],
336169689Skan                    [ac_cv_prog_cc_w_no_variadic_macros=yes],
337169689Skan                    [ac_cv_prog_cc_w_no_variadic_macros=no])
338169689Skan  CFLAGS="$save_CFLAGS"
339169689Skan  ])
340169689Skan
341169689SkanAC_CACHE_CHECK(
342169689Skan  [whether ${CC} accepts -Wno-overlength-strings],
343169689Skan  [ac_cv_prog_cc_w_no_overlength_strings],
344169689Skan  [save_CFLAGS="$CFLAGS"
345169689Skan  CFLAGS="-Wno-overlength-strings"
346169689Skan  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[]])],
347169689Skan                    [ac_cv_prog_cc_w_no_overlength_strings=yes],
348169689Skan                    [ac_cv_prog_cc_w_no_overlength_strings=no])
349169689Skan  CFLAGS="$save_CFLAGS"
350169689Skan  ])
351169689Skan
352132718Skanstrict1_warn=
353169689Skanif test $ac_cv_prog_cc_w_no_long_long = yes \
354169689Skan   && test $ac_cv_prog_cc_w_no_variadic_macros = yes \
355169689Skan   && test $ac_cv_prog_cc_w_no_overlength_strings = yes ; then
356169689Skan  strict1_warn="-pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings"
357132718Skanfi
358169689Skan
359169689Skan# Add -Wold-style-definition if it's accepted
360169689SkanAC_CACHE_CHECK(
361169689Skan  [whether ${CC} accepts -Wold-style-definition],
362169689Skan  [ac_cv_prog_cc_w_old_style_definition],
363169689Skan  [save_CFLAGS="$CFLAGS"
364169689Skan  CFLAGS="-Wold-style-definition"
365169689Skan  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[]])],
366169689Skan                    [ac_cv_prog_cc_w_old_style_definition=yes],
367169689Skan                    [ac_cv_prog_cc_w_old_style_definition=no])
368169689Skan  CFLAGS="$save_CFLAGS"
369169689Skan  ])
370169689Skanif test $ac_cv_prog_cc_w_old_style_definition = yes ; then
371169689Skan  strict1_warn="${strict1_warn} -Wold-style-definition"
372169689Skanfi
373169689Skan
374169689Skan# Add -Wmissing-format-attribute if it's accepted
375169689SkanAC_CACHE_CHECK(
376169689Skan  [whether ${CC} accepts -Wmissing-format-attribute],
377169689Skan  [ac_cv_prog_cc_w_missing_format_attribute],
378169689Skan  [save_CFLAGS="$CFLAGS"
379169689Skan  CFLAGS="-Wmissing-format-attribute"
380169689Skan  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[]])],
381169689Skan                    [ac_cv_prog_cc_w_missing_format_attribute=yes],
382169689Skan                    [ac_cv_prog_cc_w_missing_format_attribute=no])
383169689Skan  CFLAGS="$save_CFLAGS"
384169689Skan  ])
385169689Skanif test $ac_cv_prog_cc_w_missing_format_attribute = yes ; then
386169689Skan  strict1_warn="${strict1_warn} -Wmissing-format-attribute"
387169689Skanfi
388169689Skan
389169689Skan# Enable -Werror, period.
390169689SkanAC_ARG_ENABLE(werror_always, 
391169689Skan[  --enable-werror-always         enable -Werror always], [],
392169689Skan[enable_werror_always=no])
393169689Skanif test x${enable_werror_always} = xyes ; then
394169689Skan  strict1_warn="${strict1_warn} -Werror"
395169689Skan  WERROR=-Werror
396169689Skanfi
397169689Skan
398132718SkanAC_SUBST(strict1_warn)
399132718Skan
400169689Skan# Get C++ compatibility warning flag, if supported.
401169689SkanAC_CACHE_CHECK(
402169689Skan  [whether ${CC} accepts -Wc++-compat],
403169689Skan  [ac_cv_prog_cc_w_cxx_compat],
404169689Skan  [save_CFLAGS="$CFLAGS"
405169689Skan  CFLAGS="-Wc++-compat"
406169689Skan  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[]])],
407169689Skan                    [ac_cv_prog_cc_w_cxx_compat=yes],
408169689Skan                    [ac_cv_prog_cc_w_cxx_compat=no])
409169689Skan  CFLAGS="$save_CFLAGS"
410169689Skan  ])
411169689Skanif test x${ac_cv_prog_cc_w_cxx_compat} = xyes; then
412169689Skan  cxx_compat_warn="-Wc++-compat"
413169689Skanfi
414169689SkanAC_SUBST(cxx_compat_warn)
415169689Skan
416169689Skan
417132718Skan# If the native compiler is GCC, we can enable warnings even in stage1.  
418132718Skan# That's useful for people building cross-compilers, or just running a
419132718Skan# quick `make'.
420132718Skanwarn_cflags=
421132718Skanif test "x$GCC" = "xyes"; then
422132718Skan  warn_cflags='$(GCC_WARN_CFLAGS)'
423132718Skanfi
424132718SkanAC_SUBST(warn_cflags)
425132718Skan
426132718Skan# Enable -Werror in bootstrap stage2 and later.
427169689Skanis_release=
428169689Skanif test x"`cat $srcdir/DEV-PHASE`" != xexperimental; then
429169689Skan  is_release=yes
430169689Skanfi
431132718SkanAC_ARG_ENABLE(werror, 
432132718Skan[  --enable-werror         enable -Werror in bootstrap stage2 and later], [],
433169689Skan[if test x$is_release = x ; then
434169689Skan  # Default to "yes" on development branches.
435169689Skan  enable_werror=yes
436169689Skanelse
437169689Skan  # Default to "no" on release branches.
438169689Skan  enable_werror=no
439169689Skanfi])
440132718Skanif test x$enable_werror = xyes ; then
441132718Skan  WERROR=-Werror
442132718Skanfi
443132718SkanAC_SUBST(WERROR)
444132718Skan
445132718Skan# Enable expensive internal checks
446132718SkanAC_ARG_ENABLE(checking,
447132718Skan[  --enable-checking[=LIST]
448132718Skan			  enable expensive run-time checks.  With LIST,
449132718Skan			  enable only specific categories of checks.
450169689Skan			  Categories are: yes,no,all,none,release.
451169689Skan			  Flags are: assert,fold,gc,gcac,misc,
452169689Skan			  rtlflag,rtl,runtime,tree,valgrind.],
453169689Skan[ac_checking_flags="${enableval}"],[
454169689Skan# Determine the default checks.
455169689Skanif test x$is_release = x ; then
456169689Skan  ac_checking_flags=yes
457169689Skanelse
458169689Skan  ac_checking_flags=release
459169689Skanfi])
460169689Skanac_assert_checking=1
461169689Skanac_checking=
462169689Skanac_fold_checking=
463169689Skanac_gc_checking=
464169689Skanac_gc_always_collect=
465132718Skanac_rtl_checking=
466132718Skanac_rtlflag_checking=
467169689Skanac_runtime_checking=1
468169689Skanac_tree_checking=
469169689Skanac_valgrind_checking=
470169689SkanIFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS="$IFS,"
471169689Skanfor check in $ac_checking_flags
472169689Skando
473169689Skan	case $check in
474169689Skan	# these set all the flags to specific states
475169689Skan	yes)		ac_assert_checking=1 ; ac_checking=1 ;
476169689Skan			ac_fold_checking= ; ac_gc_checking=1 ;
477169689Skan			ac_gc_always_collect= ; ac_rtl_checking= ;
478169689Skan			ac_rtlflag_checking=1 ; ac_runtime_checking=1 ;
479169689Skan			ac_tree_checking=1 ; ac_valgrind_checking= ;;
480169689Skan	no|none)	ac_assert_checking= ; ac_checking= ;
481169689Skan			ac_fold_checking= ; ac_gc_checking= ;
482169689Skan			ac_gc_always_collect= ; ac_rtl_checking= ;
483169689Skan			ac_rtlflag_checking= ; ac_runtime_checking= ;
484169689Skan			ac_tree_checking= ; ac_valgrind_checking= ;;
485169689Skan	all)		ac_assert_checking=1 ; ac_checking=1 ;
486169689Skan			ac_fold_checking=1 ; ac_gc_checking=1 ;
487169689Skan			ac_gc_always_collect=1 ; ac_rtl_checking=1 ;
488169689Skan			ac_rtlflag_checking=1 ; ac_runtime_checking=1 ;
489169689Skan			ac_tree_checking=1 ; ac_valgrind_checking= ;;
490169689Skan	release)	ac_assert_checking=1 ; ac_checking= ;
491169689Skan			ac_fold_checking= ; ac_gc_checking= ;
492169689Skan			ac_gc_always_collect= ; ac_rtl_checking= ;
493169689Skan			ac_rtlflag_checking= ; ac_runtime_checking=1 ;
494169689Skan			ac_tree_checking= ; ac_valgrind_checking= ;;
495169689Skan	# these enable particular checks
496169689Skan	assert) 	ac_assert_checking=1 ;;
497169689Skan	fold)		ac_fold_checking=1 ;;
498169689Skan	gc)		ac_gc_checking=1 ;;
499169689Skan	gcac)		ac_gc_always_collect=1 ;;
500169689Skan	misc)		ac_checking=1 ;;
501169689Skan	rtl)		ac_rtl_checking=1 ;;
502169689Skan	rtlflag)	ac_rtlflag_checking=1 ;;
503169689Skan	runtime)	ac_runtime_checking=1 ;;
504169689Skan	tree)		ac_tree_checking=1 ;;
505169689Skan	valgrind)	ac_valgrind_checking=1 ;;
506169689Skan	*)	AC_MSG_ERROR(unknown check category $check) ;;
507169689Skan	esac
508169689Skandone
509169689SkanIFS="$ac_save_IFS"
510169689Skan
511132718Skannocommon_flag=""
512132718Skanif test x$ac_checking != x ; then
513132718Skan  AC_DEFINE(ENABLE_CHECKING, 1,
514132718Skan[Define if you want more run-time sanity checks.  This one gets a grab
515132718Skan   bag of miscellaneous but relatively cheap checks.])
516132718Skan  nocommon_flag=-fno-common
517132718Skanfi
518132718SkanAC_SUBST(nocommon_flag)
519169689Skanif test x$ac_assert_checking != x ; then
520169689Skan  AC_DEFINE(ENABLE_ASSERT_CHECKING, 1,
521169689Skan[Define if you want assertions enabled.  This is a cheap check.])
522169689Skanfi
523169689SkanGCC_TARGET_TEMPLATE(ENABLE_RUNTIME_CHECKING)
524169689Skanif test x$ac_runtime_checking != x ; then
525169689Skan  AC_DEFINE(ENABLE_RUNTIME_CHECKING, 1,
526169689Skan[Define if you want runtime assertions enabled.  This is a cheap check.])
527169689Skanfi
528132718Skanif test x$ac_tree_checking != x ; then
529132718Skan  AC_DEFINE(ENABLE_TREE_CHECKING, 1,
530132718Skan[Define if you want all operations on trees (the basic data
531132718Skan   structure of the front ends) to be checked for dynamic type safety
532169689Skan   at runtime.  This is moderately expensive.  The tree browser debugging
533169689Skan   routines will also be enabled by this option.
534169689Skan   ])
535169689Skan  TREEBROWSER=tree-browser.o
536132718Skanfi
537169689SkanAC_SUBST(TREEBROWSER)
538132718Skanif test x$ac_rtl_checking != x ; then
539132718Skan  AC_DEFINE(ENABLE_RTL_CHECKING, 1,
540132718Skan[Define if you want all operations on RTL (the basic data structure
541132718Skan   of the optimizer and back end) to be checked for dynamic type safety
542132718Skan   at runtime.  This is quite expensive.])
543132718Skanfi
544132718Skanif test x$ac_rtlflag_checking != x ; then
545132718Skan  AC_DEFINE(ENABLE_RTL_FLAG_CHECKING, 1,
546132718Skan[Define if you want RTL flag accesses to be checked against the RTL
547132718Skan   codes that are supported for each access macro.  This is relatively
548132718Skan   cheap.])
549132718Skanfi
550132718Skanif test x$ac_gc_checking != x ; then
551132718Skan  AC_DEFINE(ENABLE_GC_CHECKING, 1,
552132718Skan[Define if you want the garbage collector to do object poisoning and
553132718Skan   other memory allocation checks.  This is quite expensive.])
554132718Skanfi
555132718Skanif test x$ac_gc_always_collect != x ; then
556132718Skan  AC_DEFINE(ENABLE_GC_ALWAYS_COLLECT, 1,
557132718Skan[Define if you want the garbage collector to operate in maximally
558132718Skan   paranoid mode, validating the entire heap and collecting garbage at
559132718Skan   every opportunity.  This is extremely expensive.])
560132718Skanfi
561132718Skanif test x$ac_fold_checking != x ; then
562132718Skan  AC_DEFINE(ENABLE_FOLD_CHECKING, 1,
563132718Skan[Define if you want fold checked that it never destructs its argument.
564132718Skan   This is quite expensive.])
565132718Skanfi
566132718Skanvalgrind_path_defines=
567132718Skanvalgrind_command=
568132718Skan
569132718Skandnl # This check AC_REQUIREs various stuff, so it *must not* be inside
570132718Skandnl # an if statement.  This was the source of very frustrating bugs
571132718Skandnl # in converting to autoconf 2.5x!
572132718SkanAC_CHECK_HEADER(valgrind.h, have_valgrind_h=yes, have_valgrind_h=no)
573132718Skan
574169689Skanif test x$ac_valgrind_checking != x ; then
575132718Skan  # It is certainly possible that there's valgrind but no valgrind.h.
576132718Skan  # GCC relies on making annotations so we must have both.
577132718Skan  AC_MSG_CHECKING(for VALGRIND_DISCARD in <valgrind/memcheck.h>)
578169689Skan  AC_PREPROC_IFELSE([AC_LANG_SOURCE(
579169689Skan    [[#include <valgrind/memcheck.h>
580132718Skan#ifndef VALGRIND_DISCARD
581132718Skan#error VALGRIND_DISCARD not defined
582169689Skan#endif]])],
583132718Skan  [gcc_cv_header_valgrind_memcheck_h=yes],
584132718Skan  [gcc_cv_header_valgrind_memcheck_h=no])
585132718Skan  AC_MSG_RESULT($gcc_cv_header_valgrind_memcheck_h)
586132718Skan  AC_MSG_CHECKING(for VALGRIND_DISCARD in <memcheck.h>)
587169689Skan  AC_PREPROC_IFELSE([AC_LANG_SOURCE(
588169689Skan    [[#include <memcheck.h>
589132718Skan#ifndef VALGRIND_DISCARD
590132718Skan#error VALGRIND_DISCARD not defined
591169689Skan#endif]])],
592169689Skan  [gcc_cv_header_memcheck_h=yes],
593169689Skan  [gcc_cv_header_memcheck_h=no])
594132718Skan  AC_MSG_RESULT($gcc_cv_header_memcheck_h)
595132718Skan  AM_PATH_PROG_WITH_TEST(valgrind_path, valgrind,
596132718Skan	[$ac_dir/$ac_word --version | grep valgrind- >/dev/null 2>&1])
597132718Skan  if test "x$valgrind_path" = "x" \
598132718Skan    || (test $have_valgrind_h = no \
599132718Skan	&& test $gcc_cv_header_memcheck_h = no \
600132718Skan	&& test $gcc_cv_header_valgrind_memcheck_h = no); then
601132718Skan	AC_MSG_ERROR([*** Can't find both valgrind and valgrind/memcheck.h, memcheck.h or valgrind.h])
602132718Skan  fi
603132718Skan  valgrind_path_defines=-DVALGRIND_PATH='\"'$valgrind_path'\"'
604132718Skan  valgrind_command="$valgrind_path -q"
605132718Skan  AC_DEFINE(ENABLE_VALGRIND_CHECKING, 1,
606132718Skan[Define if you want to run subprograms and generated programs
607132718Skan   through valgrind (a memory checker).  This is extremely expensive.])
608132718Skan  if test $gcc_cv_header_valgrind_memcheck_h = yes; then
609132718Skan    AC_DEFINE(HAVE_VALGRIND_MEMCHECK_H, 1,
610132718Skan	[Define if valgrind's valgrind/memcheck.h header is installed.])
611132718Skan  fi
612132718Skan  if test $gcc_cv_header_memcheck_h = yes; then
613132718Skan    AC_DEFINE(HAVE_MEMCHECK_H, 1,
614132718Skan	[Define if valgrind's memcheck.h header is installed.])
615132718Skan  fi
616132718Skanfi
617132718SkanAC_SUBST(valgrind_path_defines)
618132718SkanAC_SUBST(valgrind_command)
619132718Skan
620169689SkanAC_ARG_ENABLE(mapped-location,
621169689Skan[  --enable-mapped-location   location_t is fileline integer cookie],,
622169689Skanenable_mapped_location=no)
623169689Skan
624169689Skanif test "$enable_mapped_location" = yes ; then
625169689Skan  AC_DEFINE(USE_MAPPED_LOCATION, 1,
626169689Skan[Define if location_t is fileline integer cookie.])
627169689Skanfi
628169689Skan
629132718Skan# Enable code coverage collection
630132718SkanAC_ARG_ENABLE(coverage,
631132718Skan[  --enable-coverage[=LEVEL]
632169689Skan			  enable compiler's code coverage collection.
633132718Skan			  Use to measure compiler performance and locate
634132718Skan			  unused parts of the compiler. With LEVEL, specify
635132718Skan			  optimization. Values are opt, noopt,
636132718Skan			  default is noopt],
637132718Skan[case "${enableval}" in
638169689Skan  yes|noopt)
639169689Skan    coverage_flags="-fprofile-arcs -ftest-coverage -frandom-seed=\$@ -O0"
640169689Skan    ;;
641169689Skan  opt)
642169689Skan    coverage_flags="-fprofile-arcs -ftest-coverage -frandom-seed=\$@ -O2"
643169689Skan    ;;
644169689Skan  no)
645169689Skan    # a.k.a. --disable-coverage
646169689Skan    coverage_flags=""
647169689Skan    ;;
648169689Skan  *)
649169689Skan    AC_MSG_ERROR(unknown coverage setting $enableval)
650169689Skan    ;;
651132718Skanesac],
652132718Skan[coverage_flags=""])
653132718SkanAC_SUBST(coverage_flags)
654132718Skan
655132718SkanAC_ARG_ENABLE(gather-detailed-mem-stats, 
656132718Skan[  --enable-gather-detailed-mem-stats         enable detailed memory allocation stats gathering], [],
657132718Skan[enable_gather_detailed_mem_stats=no])
658132718Skanif test x$enable_gather_detailed_mem_stats = xyes ; then
659132718Skan  AC_DEFINE(GATHER_STATISTICS, 1,
660132718Skan        [Define to enable detailed memory allocation stats gathering.])
661132718Skanfi
662132718Skan
663132718Skan# -------------------------------
664132718Skan# Miscenalleous configure options
665132718Skan# -------------------------------
666132718Skan
667132718Skan# With stabs
668132718SkanAC_ARG_WITH(stabs,
669132718Skan[  --with-stabs            arrange to use stabs instead of host debug format],
670132718Skanstabs="$with_stabs",
671132718Skanstabs=no)
672132718Skan
673132718Skan# Determine whether or not multilibs are enabled.
674132718SkanAC_ARG_ENABLE(multilib,
675132718Skan[  --enable-multilib       enable library support for multiple ABIs],
676132718Skan[], [enable_multilib=yes])
677132718SkanAC_SUBST(enable_multilib)
678132718Skan
679132718Skan# Enable __cxa_atexit for C++.
680132718SkanAC_ARG_ENABLE(__cxa_atexit,
681132718Skan[  --enable-__cxa_atexit   enable __cxa_atexit for C++],
682132718Skan[], [])
683132718Skan
684169689Skan# Enable C extension for decimal float if target supports it.
685169689SkanAC_ARG_ENABLE(decimal-float,
686169689Skan[  --enable-decimal-float  enable decimal float extension to C],
687169689Skan[
688169689Skan  if test x$enablevar = xyes ; then
689169689Skan    case $target in
690169689Skan    powerpc*-*-linux* | i?86*-*-linux*)
691169689Skan      enable_decimal_float=yes
692169689Skan      ;;
693169689Skan    *)
694169689Skan      AC_MSG_WARN(decimal float is not supported for this target, ignored)
695169689Skan      enable_decimal_float=no
696169689Skan      ;;
697169689Skan    esac
698169689Skan  fi
699169689Skan], [enable_decimal_float=no])
700169689Skan
701169689SkanAC_SUBST(enable_decimal_float)
702169689Skan
703169689Skandfp=`if test $enable_decimal_float = yes; then echo 1; else echo 0; fi`
704169689SkanAC_DEFINE_UNQUOTED(ENABLE_DECIMAL_FLOAT, $dfp,
705169689Skan[Define to 1 to enable decimal float extension to C.])
706169689Skan
707132718Skan# Enable threads
708132718Skan# Pass with no value to take the default
709132718Skan# Pass with a value to specify a thread package
710132718SkanAC_ARG_ENABLE(threads,
711132718Skan[  --enable-threads        enable thread usage for target GCC
712132718Skan  --enable-threads=LIB    use LIB thread package for target GCC],,
713169689Skan[enable_threads=''])
714132718Skan
715169689SkanAC_ARG_ENABLE(tls,
716169689Skan[  --enable-tls            enable or disable generation of tls code
717169689Skan                          overriding the assembler check for tls support],
718169689Skan[
719169689Skan  case $enable_tls in
720169689Skan    yes | no) ;;
721169689Skan    *) AC_MSG_ERROR(['$enable_tls' is an invalid value for --enable-tls.
722169689SkanValid choices are 'yes' and 'no'.]) ;;
723169689Skan  esac
724169689Skan], [enable_tls=''])
725169689Skan
726132718SkanAC_ARG_ENABLE(objc-gc,
727132718Skan[  --enable-objc-gc	  enable the use of Boehm's garbage collector with
728132718Skan			  the GNU Objective-C runtime],
729132718Skanif test x$enable_objc_gc = xno; then
730132718Skan	objc_boehm_gc=''
731132718Skanelse
732132718Skan	objc_boehm_gc=1
733132718Skanfi,
734132718Skanobjc_boehm_gc='')
735132718Skan
736132718SkanAC_ARG_WITH(dwarf2,
737132718Skan[  --with-dwarf2           force the default debug format to be DWARF 2],
738132718Skandwarf2="$with_dwarf2",
739132718Skandwarf2=no)
740132718Skan
741132718SkanAC_ARG_ENABLE(shared,
742132718Skan[  --disable-shared        don't provide a shared libgcc],
743132718Skan[
744132718Skan  case $enable_shared in
745132718Skan  yes | no) ;;
746132718Skan  *)
747132718Skan    enable_shared=no
748132718Skan    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
749132718Skan    for pkg in $enableval; do
750132718Skan      if test "X$pkg" = "Xgcc" || test "X$pkg" = "Xlibgcc"; then
751132718Skan        enable_shared=yes
752132718Skan      fi
753132718Skan    done
754132718Skan    IFS="$ac_save_ifs"
755132718Skan    ;;
756132718Skan  esac
757132718Skan], [enable_shared=yes])
758132718SkanAC_SUBST(enable_shared)
759132718Skan
760169689SkanAC_ARG_WITH(build-sysroot, 
761169689Skan  [  --with-build-sysroot=sysroot
762169689Skan                          use sysroot as the system root during the build])
763169689Skan
764132718SkanAC_ARG_WITH(sysroot,
765132718Skan[  --with-sysroot[=DIR] Search for usr/lib, usr/include, et al, within DIR.],
766132718Skan[
767132718Skan case ${with_sysroot} in
768132718Skan yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_noncanonical}/sys-root' ;;
769132718Skan *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
770132718Skan esac
771132718Skan   
772132718Skan TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
773132718Skan CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR)'
774169689Skan	
775132718Skan if test "x$exec_prefix" = xNONE; then
776132718Skan  if test "x$prefix" = xNONE; then
777132718Skan   test_prefix=/usr/local
778132718Skan  else
779132718Skan   test_prefix=$prefix
780132718Skan  fi
781132718Skan else
782132718Skan  test_prefix=$exec_prefix
783132718Skan fi
784132718Skan case ${TARGET_SYSTEM_ROOT} in
785132718Skan "${test_prefix}"|"${test_prefix}/"*|\
786132718Skan '${exec_prefix}'|'${exec_prefix}/'*)
787132718Skan   t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE"
788132718Skan   TARGET_SYSTEM_ROOT_DEFINE="$t"
789132718Skan   ;;
790132718Skan esac
791132718Skan], [
792132718Skan TARGET_SYSTEM_ROOT=
793132718Skan TARGET_SYSTEM_ROOT_DEFINE=
794132718Skan CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
795132718Skan])
796132718SkanAC_SUBST(TARGET_SYSTEM_ROOT)
797132718SkanAC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
798132718SkanAC_SUBST(CROSS_SYSTEM_HEADER_DIR)
799132718Skan
800132718Skan# Build with intermodule optimisations
801132718SkanAC_ARG_ENABLE(intermodule,
802132718Skan[  --enable-intermodule    build the compiler in one step],
803132718Skan[case ${enable_intermodule} in
804132718Skan  yes) onestep="-onestep";;
805132718Skan  *) onestep="";;
806132718Skanesac],
807132718Skan[onestep=""])
808132718SkanAC_SUBST(onestep)
809132718Skan
810169689Skan# Sanity check enable_languages in case someone does not run the toplevel
811169689Skan# configure # script.
812169689SkanAC_ARG_ENABLE(languages,
813169689Skan[  --enable-languages=LIST specify which front-ends to build],
814169689Skan[case ,${enable_languages}, in
815169689Skan       ,,|,yes,)
816169689Skan		# go safe -- we cannot be much sure without the toplevel
817169689Skan		# configure's
818169689Skan		# analysis of which target libs are present and usable
819169689Skan		enable_languages=c
820169689Skan		;;
821169689Skan	 *,all,*)
822169689Skan		AC_MSG_ERROR([only the toplevel supports --enable-languages=all])
823169689Skan		;;
824169689Skan	*,c,*)
825169689Skan		;;
826169689Skan        *)
827169689Skan		enable_languages=c,${enable_languages}
828169689Skan		;;
829169689Skanesac],
830169689Skan[enable_languages=c])
831169689Skan
832169689Skan# Used by documentation targets
833169689SkanAC_SUBST(datarootdir)
834169689SkanAC_SUBST(docdir)
835169689SkanAC_SUBST(htmldir)
836169689Skan
837132718Skan# -------------------------
838132718Skan# Checks for other programs
839132718Skan# -------------------------
840132718Skan
841132718SkanAC_PROG_MAKE_SET
842132718Skan
843132718Skan# Find some useful tools
844132718SkanAC_PROG_AWK
845169689Skan# We need awk to create options.c and options.h.
846132718Skan# Bail out if it's missing.
847132718Skancase ${AWK} in
848132718Skan  "") AC_MSG_ERROR([can't build without awk, bailing out]) ;;
849132718Skanesac
850132718Skan
851132718Skangcc_AC_PROG_LN_S
852169689SkanACX_PROG_LN($LN_S)
853132718SkanAC_PROG_RANLIB
854169689Skancase "${host}" in
855169689Skan*-*-darwin*)
856169689Skan  # By default, the Darwin ranlib will not treat common symbols as
857169689Skan  # definitions when  building the archive table of contents.  Other 
858169689Skan  # ranlibs do that; pass an option to the Darwin ranlib that makes
859169689Skan  # it behave similarly.
860169689Skan  ranlib_flags="-c" 
861169689Skan  ;;
862169689Skan*)
863169689Skan  ranlib_flags=""
864169689Skanesac
865169689SkanAC_SUBST(ranlib_flags)
866169689Skan     
867132718Skangcc_AC_PROG_INSTALL
868132718Skan
869132718Skan# See if cmp has --ignore-initial.
870132718Skangcc_AC_PROG_CMP_IGNORE_INITIAL
871132718Skan
872132718Skan# See if we have the mktemp command.
873132718SkanAC_CHECK_PROG(have_mktemp_command, mktemp, yes, no)
874132718Skan
875169689SkanMISSING="${CONFIG_SHELL-/bin/sh} $srcdir/../missing"
876169689Skan
877169689Skan# See if makeinfo has been installed and is modern enough
878169689Skan# that we can use it.
879169689Skangcc_AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
880132718Skan  [GNU texinfo.* \([0-9][0-9.]*\)],
881169689Skan  [4.[4-9]*])
882132718Skanif test $gcc_cv_prog_makeinfo_modern = no; then
883169689Skan  MAKEINFO="$MISSING makeinfo"
884132718Skan  AC_MSG_WARN([
885132718Skan*** Makeinfo is missing or too old.
886132718Skan*** Info documentation will not be built.])
887132718Skan  BUILD_INFO=
888132718Skanelse
889169689Skan  BUILD_INFO=info
890132718Skanfi
891169689SkanAC_SUBST(BUILD_INFO)
892132718Skan
893132718Skan# Is pod2man recent enough to regenerate manpages?
894132718SkanAC_MSG_CHECKING([for recent Pod::Man])
895132718Skanif (perl -e 'use 1.10 Pod::Man') >/dev/null 2>&1; then
896132718Skan  AC_MSG_RESULT(yes)
897169689Skan  GENERATED_MANPAGES=generated-manpages
898132718Skanelse
899132718Skan  AC_MSG_RESULT(no)
900132718Skan  GENERATED_MANPAGES=
901132718Skanfi
902169689SkanAC_SUBST(GENERATED_MANPAGES)
903132718Skan
904132718Skan# How about lex?
905132718Skandnl Don't use AC_PROG_LEX; we insist on flex.
906132718Skandnl LEXLIB is not useful in gcc.
907169689SkanAC_CHECK_PROGS([FLEX], flex, [$MISSING flex])
908169689Skan
909169689Skan# Bison?
910169689SkanAC_CHECK_PROGS([BISON], bison, [$MISSING bison])
911169689Skan
912169689Skan# Binutils are not build modules, unlike bison/flex/makeinfo.  So we
913169689Skan# check for build == host before using them.
914169689Skan
915169689Skan# NM
916169689Skanif test x${build} = x${host} && test -f $srcdir/../binutils/nm.c \
917169689Skan  && test -d ../binutils ; then
918169689Skan  NM='$(objdir)/../binutils/nm-new'
919132718Skanelse
920169689Skan  AC_CHECK_PROG(NM, nm, nm, ${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing nm)
921132718Skanfi
922132718Skan
923169689Skan# AR
924169689Skanif test x${build} = x${host} && test -f $srcdir/../binutils/ar.c \
925169689Skan  && test -d ../binutils ; then
926169689Skan  AR='$(objdir)/../binutils/ar'
927132718Skanelse
928169689Skan  AC_CHECK_PROG(AR, ar, ar, ${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing ar)
929132718Skanfi
930132718Skan
931169689Skan
932132718Skan# --------------------
933132718Skan# Checks for C headers
934132718Skan# --------------------
935132718Skan
936132718SkanAC_MSG_CHECKING(for GNU C library)
937132718SkanAC_CACHE_VAL(gcc_cv_glibc,
938169689Skan[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
939169689Skan  [[#include <features.h>]], [[
940132718Skan#if ! (defined __GLIBC__ || defined __GNU_LIBRARY__)
941132718Skan#error Not a GNU C library system
942169689Skan#endif]])],
943169689Skan  [gcc_cv_glibc=yes],
944169689Skan  [gcc_cv_glibc=no])])
945132718SkanAC_MSG_RESULT($gcc_cv_glibc)
946132718Skanif test $gcc_cv_glibc = yes; then
947132718Skan  AC_DEFINE(_GNU_SOURCE, 1, [Always define this when using the GNU C Library])
948132718Skanfi
949132718Skan
950132718Skan# Need to reject headers which give warnings, so that the -Werror bootstrap
951132718Skan# works later. *sigh*  This needs to come before all header checks.
952132718SkanAC_PROG_CPP_WERROR
953132718Skan
954132718SkanAC_HEADER_STDC
955132718SkanAC_HEADER_TIME
956169689SkanACX_HEADER_STRING
957132718SkanAC_HEADER_SYS_WAIT
958169689SkanAC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h iconv.h \
959132718Skan		 fcntl.h unistd.h sys/file.h sys/time.h sys/mman.h \
960132718Skan		 sys/resource.h sys/param.h sys/times.h sys/stat.h \
961132718Skan		 direct.h malloc.h langinfo.h ldfcn.h locale.h wchar.h)
962132718Skan
963132718Skan# Check for thread headers.
964132718SkanAC_CHECK_HEADER(thread.h, [have_thread_h=yes], [have_thread_h=])
965132718SkanAC_CHECK_HEADER(pthread.h, [have_pthread_h=yes], [have_pthread_h=])
966132718Skan
967132718Skan# These tests can't be done till we know if we have limits.h.
968132718Skangcc_AC_C_CHAR_BIT
969169689SkanAC_C_BIGENDIAN
970132718Skan
971132718Skan# --------
972132718Skan# UNSORTED
973132718Skan# --------
974132718Skan
975132718Skan# Stage specific cflags for build.
976132718Skanstage1_cflags=
977132718Skancase $build in
978132718Skanvax-*-*)
979132718Skan  if test x$GCC = xyes
980132718Skan  then
981132718Skan    stage1_cflags="-Wa,-J"
982132718Skan  else
983132718Skan    stage1_cflags="-J"
984132718Skan  fi
985132718Skan  ;;
986132718Skanesac
987132718SkanAC_SUBST(stage1_cflags)
988132718Skan
989132718Skan# These libraries may be used by collect2.
990132718Skan# We may need a special search path to get them linked.
991132718SkanAC_CACHE_CHECK(for collect2 libraries, gcc_cv_collect2_libs,
992132718Skan[save_LIBS="$LIBS"
993132718Skanfor libs in '' -lld -lmld \
994132718Skan		'-L/usr/lib/cmplrs/cc2.11 -lmld' \
995132718Skan		'-L/usr/lib/cmplrs/cc3.11 -lmld'
996132718Skando
997132718Skan	LIBS="$libs"
998132718Skan	AC_TRY_LINK_FUNC(ldopen,
999132718Skan		[gcc_cv_collect2_libs="$libs"; break])
1000132718Skandone
1001132718SkanLIBS="$save_LIBS"
1002132718Skantest -z "$gcc_cv_collect2_libs" && gcc_cv_collect2_libs='none required'])
1003132718Skancase $gcc_cv_collect2_libs in
1004132718Skan	"none required")	;;
1005132718Skan	*)	COLLECT2_LIBS=$gcc_cv_collect2_libs ;;
1006132718Skanesac
1007132718SkanAC_SUBST(COLLECT2_LIBS)
1008132718Skan
1009132718Skan# When building Ada code on Alpha, we need exc_resume which is usually in
1010132718Skan# -lexc.  So test for it.
1011132718Skansave_LIBS="$LIBS"
1012132718SkanLIBS=
1013132718SkanAC_SEARCH_LIBS(exc_resume, exc)
1014132718SkanGNAT_LIBEXC="$LIBS"
1015132718SkanLIBS="$save_LIBS"
1016132718SkanAC_SUBST(GNAT_LIBEXC)
1017132718Skan
1018132718Skan# Some systems put ldexp and frexp in libm instead of libc; assume
1019132718Skan# they're both in the same place.  jcf-dump needs them.
1020132718Skansave_LIBS="$LIBS"
1021132718SkanLIBS=
1022132718SkanAC_SEARCH_LIBS(ldexp, m)
1023132718SkanLDEXP_LIB="$LIBS"
1024132718SkanLIBS="$save_LIBS"
1025132718SkanAC_SUBST(LDEXP_LIB)
1026132718Skan
1027132718Skan# Use <inttypes.h> only if it exists,
1028132718Skan# doesn't clash with <sys/types.h>, and declares intmax_t.
1029132718SkanAC_MSG_CHECKING(for inttypes.h)
1030132718SkanAC_CACHE_VAL(gcc_cv_header_inttypes_h,
1031169689Skan[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
1032169689Skan[[#include <sys/types.h>
1033169689Skan#include <inttypes.h>]],
1034169689Skan  [[intmax_t i = -1;]])],
1035132718Skan  [gcc_cv_header_inttypes_h=yes],
1036169689Skan  [gcc_cv_header_inttypes_h=no])])
1037132718SkanAC_MSG_RESULT($gcc_cv_header_inttypes_h)
1038132718Skanif test $gcc_cv_header_inttypes_h = yes; then
1039132718Skan  AC_DEFINE(HAVE_INTTYPES_H, 1,
1040132718Skan	[Define if you have a working <inttypes.h> header file.])
1041132718Skanfi
1042132718Skan
1043132718Skandnl Disabled until we have a complete test for buggy enum bitfields.
1044132718Skandnl gcc_AC_C_ENUM_BF_UNSIGNED
1045132718Skan
1046169689Skandefine(gcc_UNLOCKED_FUNCS, clearerr_unlocked feof_unlocked dnl
1047169689Skan  ferror_unlocked fflush_unlocked fgetc_unlocked fgets_unlocked dnl
1048169689Skan  fileno_unlocked fprintf_unlocked fputc_unlocked fputs_unlocked dnl
1049169689Skan  fread_unlocked fwrite_unlocked getchar_unlocked getc_unlocked dnl
1050169689Skan  putchar_unlocked putc_unlocked)
1051169689SkanAC_CHECK_FUNCS(times clock kill getrlimit setrlimit atoll atoq \
1052169689Skan	sysconf strsignal getrusage nl_langinfo scandir alphasort \
1053169689Skan	gettimeofday mbstowcs wcswidth mmap mincore setlocale \
1054169689Skan	gcc_UNLOCKED_FUNCS)
1055132718Skan
1056132718Skanif test x$ac_cv_func_mbstowcs = xyes; then
1057132718Skan  AC_CACHE_CHECK(whether mbstowcs works, gcc_cv_func_mbstowcs_works,
1058169689Skan[    AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
1059132718Skanint main()
1060132718Skan{
1061132718Skan  mbstowcs(0, "", 0);
1062132718Skan  return 0;
1063169689Skan}]])],
1064169689Skan    [gcc_cv_func_mbstowcs_works=yes],
1065169689Skan    [gcc_cv_func_mbstowcs_works=no],
1066169689Skan    [gcc_cv_func_mbstowcs_works=yes])])
1067132718Skan  if test x$gcc_cv_func_mbstowcs_works = xyes; then
1068132718Skan    AC_DEFINE(HAVE_WORKING_MBSTOWCS, 1,
1069132718Skan  [Define this macro if mbstowcs does not crash when its
1070132718Skan   first argument is NULL.])
1071132718Skan  fi
1072132718Skanfi
1073132718Skan
1074132718SkanAC_CHECK_TYPE(ssize_t, int)
1075132718Skan
1076132718Skan# Try to determine the array type of the second argument of getgroups
1077132718Skan# for the target system (int or gid_t).
1078132718SkanAC_TYPE_GETGROUPS
1079132718Skanif test "${target}" = "${build}"; then
1080132718Skan  TARGET_GETGROUPS_T=$ac_cv_type_getgroups
1081132718Skanelse
1082132718Skan  case "${target}" in
1083132718Skan	# This condition may need some tweaking.  It should include all
1084132718Skan	# targets where the array type of the second argument of getgroups
1085132718Skan	# is int and the type of gid_t is not equivalent to int.
1086132718Skan	*-*-sunos* | *-*-ultrix*)
1087132718Skan		TARGET_GETGROUPS_T=int
1088132718Skan		;;
1089132718Skan	*)
1090132718Skan		TARGET_GETGROUPS_T=gid_t
1091132718Skan		;;
1092132718Skan  esac
1093132718Skanfi
1094132718SkanAC_SUBST(TARGET_GETGROUPS_T)
1095132718Skan
1096132718Skangcc_AC_FUNC_MMAP_BLACKLIST
1097132718Skan
1098132718Skancase "${host}" in
1099132718Skan*-*-*vms*)
1100132718Skan  # Under VMS, vfork works very differently than on Unix. The standard test 
1101132718Skan  # won't work, and it isn't easily adaptable. It makes more sense to
1102132718Skan  # just force it.
1103132718Skan  ac_cv_func_vfork_works=yes
1104132718Skan  ;;
1105132718Skanesac
1106169689SkanAC_FUNC_FORK
1107132718Skan
1108132718SkanAM_ICONV
1109132718Skan# Until we have in-tree GNU iconv:
1110132718SkanLIBICONV_DEP=
1111132718SkanAC_SUBST(LIBICONV_DEP)
1112132718Skan
1113132718SkanAM_LC_MESSAGES
1114132718Skan
1115169689SkanAM_LANGINFO_CODESET
1116169689Skan
1117132718Skan# We will need to find libiberty.h and ansidecl.h
1118132718Skansaved_CFLAGS="$CFLAGS"
1119132718SkanCFLAGS="$CFLAGS -I${srcdir} -I${srcdir}/../include"
1120169689Skangcc_AC_CHECK_DECLS(getenv atol asprintf sbrk abort atof getcwd getwd \
1121169689Skan	strsignal strstr strverscmp \
1122169689Skan	errno snprintf vsnprintf vasprintf malloc realloc calloc \
1123169689Skan	free basename getopt clock getpagesize gcc_UNLOCKED_FUNCS, , ,[
1124132718Skan#include "ansidecl.h"
1125132718Skan#include "system.h"])
1126132718Skan
1127132718Skangcc_AC_CHECK_DECLS(getrlimit setrlimit getrusage, , ,[
1128132718Skan#include "ansidecl.h"
1129132718Skan#include "system.h"
1130132718Skan#ifdef HAVE_SYS_RESOURCE_H
1131132718Skan#include <sys/resource.h>
1132132718Skan#endif
1133132718Skan])
1134132718Skan
1135169689SkanAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1136132718Skan#include "ansidecl.h"
1137132718Skan#include "system.h"
1138132718Skan#ifdef HAVE_SYS_RESOURCE_H
1139132718Skan#include <sys/resource.h>
1140132718Skan#endif
1141169689Skan]], [[rlim_t l = 0;]])],[],[AC_DEFINE([rlim_t],[long],
1142132718Skan[Define to \`long' if <sys/resource.h> doesn't define.])])
1143132718Skan
1144169689Skan# On AIX 5.2, <ldfcn.h> conflicts with <fcntl.h>, as both define incompatible
1145169689Skan# FREAD and FWRITE macros.  Fortunately, for GCC's single usage of ldgetname
1146169689Skan# in collect2.c, <fcntl.h> isn't visible, but the configure test below needs
1147169689Skan# to undef these macros to get the correct value for HAVE_DECL_LDGETNAME.
1148132718Skangcc_AC_CHECK_DECLS(ldgetname, , ,[
1149132718Skan#include "ansidecl.h"
1150132718Skan#include "system.h"
1151132718Skan#ifdef HAVE_LDFCN_H
1152169689Skan#undef FREAD
1153169689Skan#undef FWRITE
1154132718Skan#include <ldfcn.h>
1155132718Skan#endif
1156132718Skan])
1157132718Skan
1158132718Skangcc_AC_CHECK_DECLS(times, , ,[
1159132718Skan#include "ansidecl.h"
1160132718Skan#include "system.h"
1161132718Skan#ifdef HAVE_SYS_TIMES_H
1162132718Skan#include <sys/times.h>
1163132718Skan#endif
1164132718Skan])
1165132718Skan
1166169689Skangcc_AC_CHECK_DECLS(sigaltstack, , ,[
1167169689Skan#include "ansidecl.h"
1168169689Skan#include "system.h"
1169169689Skan#include <signal.h>
1170169689Skan])
1171169689Skan
1172132718Skan# More time-related stuff.
1173132718SkanAC_CACHE_CHECK(for struct tms, ac_cv_struct_tms, [
1174169689SkanAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1175132718Skan#include "ansidecl.h"
1176132718Skan#include "system.h"
1177132718Skan#ifdef HAVE_SYS_TIMES_H
1178132718Skan#include <sys/times.h>
1179132718Skan#endif
1180169689Skan]], [[struct tms tms;]])],[ac_cv_struct_tms=yes],[ac_cv_struct_tms=no])])
1181132718Skanif test $ac_cv_struct_tms = yes; then
1182132718Skan  AC_DEFINE(HAVE_STRUCT_TMS, 1,
1183132718Skan  [Define if <sys/times.h> defines struct tms.])
1184132718Skanfi
1185132718Skan
1186132718Skan# use gcc_cv_* here because this doesn't match the behavior of AC_CHECK_TYPE.
1187132718Skan# revisit after autoconf 2.50.
1188132718SkanAC_CACHE_CHECK(for clock_t, gcc_cv_type_clock_t, [
1189169689SkanAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1190132718Skan#include "ansidecl.h"
1191132718Skan#include "system.h"
1192169689Skan]], [[clock_t x;]])],[gcc_cv_type_clock_t=yes],[gcc_cv_type_clock_t=no])])
1193132718Skanif test $gcc_cv_type_clock_t = yes; then
1194132718Skan  AC_DEFINE(HAVE_CLOCK_T, 1,
1195132718Skan  [Define if <time.h> defines clock_t.])
1196132718Skanfi
1197132718Skan
1198132718Skan# Restore CFLAGS from before the gcc_AC_NEED_DECLARATIONS tests.
1199132718SkanCFLAGS="$saved_CFLAGS"
1200132718Skan
1201132718Skangcc_AC_INITFINI_ARRAY
1202132718Skan
1203132718Skan# mkdir takes a single argument on some systems. 
1204132718Skangcc_AC_FUNC_MKDIR_TAKES_ONE_ARG
1205132718Skan
1206132718Skan# File extensions
1207132718Skanmanext='.1'
1208132718Skanobjext='.o'
1209132718SkanAC_SUBST(manext)
1210132718SkanAC_SUBST(objext)
1211132718Skan
1212132718Skan# With Setjmp/Longjmp based exception handling.
1213132718SkanAC_ARG_ENABLE(sjlj-exceptions,
1214132718Skan[  --enable-sjlj-exceptions
1215132718Skan                          arrange to use setjmp/longjmp exception handling],
1216132718Skan[sjlj=`if test $enableval = yes; then echo 1; else echo 0; fi`
1217132718SkanAC_DEFINE_UNQUOTED(CONFIG_SJLJ_EXCEPTIONS, $sjlj,
1218132718Skan  [Define 0/1 to force the choice for exception handling model.])])
1219132718Skan
1220146895Skan# For platforms with the unwind ABI which includes an unwind library,
1221146895Skan# libunwind, we can choose to use the system libunwind.
1222146895SkanAC_ARG_WITH(system-libunwind,
1223146895Skan[  --with-system-libunwind use installed libunwind])
1224132718Skan
1225169689Skan# config.gcc also contains tests of with_system_libunwind.
1226169689Skanif test x$with_system_libunwind = xyes; then
1227169689Skan        AC_DEFINE(HAVE_GETIPINFO, 1,
1228169689Skan[Define to 1 if system unwind library has _Unwind_GetIPInfo.])
1229169689Skanfi
1230169689Skan
1231132718Skan# --------------------------------------------------------
1232132718Skan# Build, host, and target specific configuration fragments
1233132718Skan# --------------------------------------------------------
1234132718Skan
1235132718Skan# Collect build-machine-specific information.
1236132718Skan. ${srcdir}/config.build
1237132718Skan
1238132718Skan# Collect host-machine-specific information.
1239132718Skan. ${srcdir}/config.host
1240132718Skan
1241132718Skantarget_gtfiles=
1242132718Skan
1243132718Skan# Collect target-machine-specific information.
1244132718Skan. ${srcdir}/config.gcc
1245132718Skan
1246132718Skanextra_objs="${host_extra_objs} ${extra_objs}"
1247132718Skanextra_gcc_objs="${host_extra_gcc_objs} ${extra_gcc_objs}"
1248132718Skan
1249132718Skan# Default the target-machine variables that were not explicitly set.
1250132718Skanif test x"$tm_file" = x
1251132718Skanthen tm_file=$cpu_type/$cpu_type.h; fi
1252132718Skan
1253132718Skanif test x"$extra_headers" = x
1254132718Skanthen extra_headers=; fi
1255132718Skan
1256132718Skanif test x$md_file = x
1257132718Skanthen md_file=$cpu_type/$cpu_type.md; fi
1258132718Skan
1259132718Skanif test x$out_file = x
1260132718Skanthen out_file=$cpu_type/$cpu_type.c; fi
1261132718Skan
1262132718Skanif test x"$tmake_file" = x
1263132718Skanthen tmake_file=$cpu_type/t-$cpu_type
1264132718Skanfi
1265132718Skan
1266132718Skanif test x"$dwarf2" = xyes
1267132718Skanthen tm_file="$tm_file tm-dwarf2.h"
1268132718Skanfi
1269132718Skan
1270132718Skan# Say what files are being used for the output code and MD file.
1271132718Skanecho "Using \`$srcdir/config/$out_file' for machine-specific logic."
1272132718Skanecho "Using \`$srcdir/config/$md_file' as machine description file."
1273132718Skan
1274132718Skan# If any of the xm_file variables contain nonexistent files, warn
1275132718Skan# about them and drop them.
1276132718Skan
1277132718Skanbx=
1278132718Skanfor x in $build_xm_file; do
1279132718Skan  if    test -f $srcdir/config/$x
1280132718Skan  then      bx="$bx $x"
1281132718Skan  else      AC_MSG_WARN($srcdir/config/$x does not exist.)
1282132718Skan  fi
1283132718Skandone
1284132718Skanbuild_xm_file="$bx"
1285132718Skan
1286132718Skanhx=
1287132718Skanfor x in $host_xm_file; do
1288132718Skan  if    test -f $srcdir/config/$x
1289132718Skan  then      hx="$hx $x"
1290132718Skan  else      AC_MSG_WARN($srcdir/config/$x does not exist.)
1291132718Skan  fi
1292132718Skandone
1293132718Skanhost_xm_file="$hx"
1294132718Skan
1295132718Skantx=
1296132718Skanfor x in $xm_file; do
1297132718Skan  if    test -f $srcdir/config/$x
1298132718Skan  then      tx="$tx $x"
1299132718Skan  else      AC_MSG_WARN($srcdir/config/$x does not exist.)
1300132718Skan  fi
1301132718Skandone
1302132718Skanxm_file="$tx"
1303132718Skan
1304132718Skancount=a
1305132718Skanfor f in $tm_file; do
1306132718Skan	count=${count}x
1307132718Skandone
1308132718Skanif test $count = ax; then
1309132718Skan	echo "Using \`$srcdir/config/$tm_file' as target machine macro file."
1310132718Skanelse
1311132718Skan	echo "Using the following target machine macro files:"
1312132718Skan	for f in $tm_file; do
1313132718Skan		echo "	$srcdir/config/$f"
1314132718Skan	done
1315132718Skanfi
1316132718Skan
1317132718Skanif test x$need_64bit_hwint = xyes; then
1318132718Skan	AC_DEFINE(NEED_64BIT_HOST_WIDE_INT, 1,
1319132718Skan[Define to 1 if HOST_WIDE_INT must be 64 bits wide (see hwint.h).])
1320132718Skanfi
1321132718Skan
1322169689Skanif test x$use_long_long_for_widest_fast_int = xyes; then
1323169689Skan	AC_DEFINE(USE_LONG_LONG_FOR_WIDEST_FAST_INT, 1,
1324169689Skan[Define to 1 if the 'long long' (or '__int64') is wider than 'long' but still
1325169689Skanefficiently supported by the host hardware.])
1326169689Skanfi
1327169689Skan
1328132718Skancount=a
1329132718Skanfor f in $host_xm_file; do
1330132718Skan	count=${count}x
1331132718Skandone
1332132718Skanif test $count = a; then
1333132718Skan	:
1334132718Skanelif test $count = ax; then
1335132718Skan	echo "Using \`$srcdir/config/$host_xm_file' as host machine macro file."
1336132718Skanelse
1337132718Skan	echo "Using the following host machine macro files:"
1338132718Skan	for f in $host_xm_file; do
1339132718Skan		echo "	$srcdir/config/$f"
1340132718Skan	done
1341132718Skanfi
1342132718Skanecho "Using ${out_host_hook_obj} for host machine hooks."
1343132718Skan
1344132718Skanif test "$host_xm_file" != "$build_xm_file"; then
1345132718Skan	count=a
1346132718Skan	for f in $build_xm_file; do
1347132718Skan		count=${count}x
1348132718Skan	done
1349132718Skan	if test $count = a; then
1350132718Skan		:
1351132718Skan	elif test $count = ax; then
1352132718Skan		echo "Using \`$srcdir/config/$build_xm_file' as build machine macro file."
1353132718Skan	else
1354132718Skan		echo "Using the following build machine macro files:"
1355132718Skan		for f in $build_xm_file; do
1356132718Skan			echo "	$srcdir/config/$f"
1357132718Skan		done
1358132718Skan	fi
1359132718Skanfi
1360132718Skan
1361169689Skancase ${host} in
1362169689Skan  powerpc*-*-darwin*)
1363169689Skan    AC_CACHE_CHECK([whether mcontext_t fields have underscores],
1364169689Skan      gcc_cv_mcontext_underscores,
1365169689Skan      AC_COMPILE_IFELSE([
1366169689Skan#include <sys/signal.h>
1367169689Skan#include <ucontext.h>
1368169689Skanint main() { mcontext_t m; if (m->ss.srr0) return 0; return 0; }
1369169689Skan],
1370169689Skan	gcc_cv_mcontext_underscores=no, gcc_cv_mcontext_underscores=yes))
1371169689Skan      if test $gcc_cv_mcontext_underscores = yes; then
1372169689Skan        AC_DEFINE(HAS_MCONTEXT_T_UNDERSCORES,,dnl
1373169689Skan          [mcontext_t fields start with __])
1374169689Skan      fi
1375169689Skan    ;;
1376169689Skanesac
1377169689Skan
1378169689Skan# ---------
1379169689Skan# Threading
1380169689Skan# ---------
1381169689Skan
1382132718Skan# Check if a valid thread package
1383169689Skancase ${enable_threads} in
1384132718Skan  "" | no)
1385132718Skan    # No threads
1386132718Skan    target_thread_file='single'
1387132718Skan    ;;
1388132718Skan  yes)
1389132718Skan    # default
1390132718Skan    target_thread_file='single'
1391132718Skan    ;;
1392169689Skan  aix | dce | gnat | irix | posix | posix95 | rtems | \
1393132718Skan  single | solaris | vxworks | win32 )
1394169689Skan    target_thread_file=${enable_threads}
1395132718Skan    ;;
1396132718Skan  *)
1397169689Skan    echo "${enable_threads} is an unknown thread package" 1>&2
1398132718Skan    exit 1
1399132718Skan    ;;
1400132718Skanesac
1401132718Skan
1402132718Skanif test x${thread_file} = x; then
1403132718Skan  # No thread file set by target-specific clauses in config.gcc,
1404132718Skan  # so use file chosen by default logic above
1405132718Skan  thread_file=${target_thread_file}
1406132718Skanfi
1407132718Skan
1408169689Skan# Make gthr-default.h if we have a thread file.
1409169689Skangthread_flags=
1410169689Skanif test $thread_file != single; then
1411169689Skan  rm -f gthr-default.h
1412169689Skan  echo "#include \"gthr-${thread_file}.h\"" > gthr-default.h
1413169689Skan  gthread_flags=-DHAVE_GTHR_DEFAULT
1414169689Skanfi
1415169689SkanAC_SUBST(gthread_flags)
1416169689Skan
1417169689Skan# --------
1418169689Skan# UNSORTED
1419169689Skan# --------
1420169689Skan
1421169689Skanuse_cxa_atexit=no
1422132718Skanif test x$enable___cxa_atexit = xyes || \
1423132718Skan   test x$enable___cxa_atexit = x -a x$default_use_cxa_atexit = xyes; then
1424169689Skan  if test x$host = x$target; then
1425169689Skan    AC_CHECK_FUNC(__cxa_atexit,[use_cxa_atexit=yes],
1426169689Skan	[echo "__cxa_atexit can't be enabled on this target"])
1427169689Skan  else
1428169689Skan    # We can't check for __cxa_atexit when building a cross, so assume
1429169689Skan    # it is available 
1430169689Skan    use_cxa_atexit=yes
1431169689Skan  fi
1432169689Skan  if test x$use_cxa_atexit = xyes; then
1433169689Skan    AC_DEFINE(DEFAULT_USE_CXA_ATEXIT, 2,
1434169689Skan      [Define if you want to use __cxa_atexit, rather than atexit, to
1435169689Skan      register C++ destructors for local statics and global objects.
1436169689Skan      This is essential for fully standards-compliant handling of
1437169689Skan      destructors, but requires __cxa_atexit in libc.])
1438169689Skan  fi
1439132718Skanfi
1440132718Skan
1441169689Skanuse_getipinfo=yes
1442169689Skanif test x$with_system_libunwind = xyes; then
1443169689Skan   if test x$host = x$target; then
1444169689Skan     AC_SEARCH_LIBS(_Unwind_GetIPInfo, unwind,, [use_getipinfo=no])
1445169689Skan   fi
1446169689Skanfi
1447169689SkanGCC_TARGET_TEMPLATE(HAVE_GETIPINFO)
1448169689Skanif test x$use_getipinfo = xyes; then
1449169689Skan   AC_DEFINE(HAVE_GETIPINFO, 1,
1450169689Skan	[Define to 1 if system unwind library has _Unwind_GetIPInfo.])
1451169689Skanelse
1452169689Skan   echo "The system unwind library does not support _Unwind_GetIPInfo."
1453169689Skanfi
1454169689Skan
1455132718Skan# Look for a file containing extra machine modes.
1456132718Skanif test -n "$extra_modes" && test -f $srcdir/config/$extra_modes; then
1457132718Skan  extra_modes_file='$(srcdir)'/config/${extra_modes}
1458132718Skan  AC_SUBST(extra_modes_file)
1459132718Skan  AC_DEFINE_UNQUOTED(EXTRA_MODES_FILE, "config/$extra_modes",
1460132718Skan  [Define to the name of a file containing a list of extra machine modes
1461132718Skan   for this architecture.])
1462132718Skanfi
1463132718Skan
1464169689Skan# Convert extra_options into a form suitable for Makefile use.
1465169689Skanextra_opt_files=
1466169689Skanfor f in $extra_options; do
1467169689Skan  extra_opt_files="$extra_opt_files \$(srcdir)/config/$f"
1468169689Skandone
1469169689SkanAC_SUBST(extra_opt_files)
1470169689Skan
1471132718Skan# auto-host.h is the file containing items generated by autoconf and is
1472132718Skan# the first file included by config.h.
1473132718Skan# If host=build, it is correct to have bconfig include auto-host.h
1474132718Skan# as well.  If host!=build, we are in error and need to do more 
1475132718Skan# work to find out the build config parameters.
1476132718Skanif test x$host = x$build
1477132718Skanthen
1478132718Skan	build_auto=auto-host.h
1479132718Skanelse
1480132718Skan	# We create a subdir, then run autoconf in the subdir.
1481132718Skan	# To prevent recursion we set host and build for the new
1482132718Skan	# invocation of configure to the build for this invocation
1483132718Skan	# of configure. 
1484132718Skan	tempdir=build.$$
1485132718Skan	rm -rf $tempdir
1486132718Skan	mkdir $tempdir
1487132718Skan	cd $tempdir
1488132718Skan	case ${srcdir} in
1489132718Skan	/* | [A-Za-z]:[\\/]* ) realsrcdir=${srcdir};;
1490132718Skan	*) realsrcdir=../${srcdir};;
1491132718Skan	esac
1492132718Skan	saved_CFLAGS="${CFLAGS}"
1493132718Skan	CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
1494132718Skan	${realsrcdir}/configure \
1495169689Skan		--enable-languages=${enable_languages-all} \
1496132718Skan		--target=$target_alias --host=$build_alias --build=$build_alias
1497132718Skan	CFLAGS="${saved_CFLAGS}"
1498132718Skan
1499132718Skan	# We just finished tests for the build machine, so rename
1500132718Skan	# the file auto-build.h in the gcc directory.
1501132718Skan	mv auto-host.h ../auto-build.h
1502132718Skan	cd ..
1503132718Skan	rm -rf $tempdir
1504132718Skan	build_auto=auto-build.h
1505132718Skanfi
1506169689SkanAC_SUBST(build_subdir)
1507132718Skan
1508132718Skantm_file="${tm_file} defaults.h"
1509132718Skantm_p_file="${tm_p_file} tm-preds.h"
1510132718Skanhost_xm_file="auto-host.h ansidecl.h ${host_xm_file}"
1511132718Skanbuild_xm_file="${build_auto} ansidecl.h ${build_xm_file}"
1512132718Skan# We don't want ansidecl.h in target files, write code there in ISO/GNU C.
1513132718Skan# put this back in temporarily.
1514169689Skanxm_file="auto-host.h ansidecl.h ${xm_file}"
1515132718Skan
1516132718Skan# --------
1517132718Skan# UNSORTED
1518132718Skan# --------
1519132718Skan
1520132718Skanchangequote(,)dnl
1521132718Skan# Compile in configure arguments.
1522132718Skanif test -f configargs.h ; then
1523132718Skan	# Being re-configured.
1524132718Skan	gcc_config_arguments=`grep configuration_arguments configargs.h | sed -e 's/.*"\([^"]*\)".*/\1/'`
1525132718Skan	gcc_config_arguments="$gcc_config_arguments : (reconfigured) $TOPLEVEL_CONFIGURE_ARGUMENTS"
1526132718Skanelse
1527132718Skan	gcc_config_arguments="$TOPLEVEL_CONFIGURE_ARGUMENTS"
1528132718Skanfi
1529132718Skan
1530132718Skan# Double all backslashes and backslash all quotes to turn
1531132718Skan# gcc_config_arguments into a C string.
1532132718Skansed -e 's/\\/\\\\/g; s/"/\\"/g' <<EOF >conftest.out
1533132718Skan$gcc_config_arguments
1534132718SkanEOF
1535132718Skangcc_config_arguments_str=`cat conftest.out`
1536132718Skanrm -f conftest.out
1537132718Skan
1538132718Skancat > configargs.h <<EOF
1539132718Skan/* Generated automatically. */
1540132718Skanstatic const char configuration_arguments[] = "$gcc_config_arguments_str";
1541132718Skanstatic const char thread_model[] = "$thread_file";
1542132718Skan
1543132718Skanstatic const struct {
1544132718Skan  const char *name, *value;
1545132718Skan} configure_default_options[] = $configure_default_options;
1546132718SkanEOF
1547132718Skanchangequote([,])dnl
1548132718Skan
1549132718Skan# Internationalization
1550132718SkanZW_GNU_GETTEXT_SISTER_DIR
1551132718Skan
1552132718Skan# If LIBINTL contains LIBICONV, then clear LIBICONV so we don't get
1553132718Skan# -liconv on the link line twice.
1554132718Skancase "$LIBINTL" in *$LIBICONV*)
1555132718Skan	LIBICONV= ;;
1556132718Skanesac
1557132718Skan
1558169689SkanAC_ARG_ENABLE(secureplt,
1559169689Skan[  --enable-secureplt      enable -msecure-plt by default for PowerPC],
1560169689Skan[], [])
1561169689Skan
1562132718Skan# Windows32 Registry support for specifying GCC installation paths.
1563132718SkanAC_ARG_ENABLE(win32-registry,
1564132718Skan[  --disable-win32-registry
1565132718Skan                          disable lookup of installation paths in the
1566132718Skan                          Registry on Windows hosts
1567132718Skan  --enable-win32-registry enable registry lookup (default)
1568132718Skan  --enable-win32-registry=KEY
1569132718Skan                          use KEY instead of GCC version as the last portion
1570132718Skan                          of the registry key],,)
1571169689Skan
1572132718Skancase $host_os in
1573169689Skan  win32 | pe | cygwin* | mingw32* | uwin*)
1574169689Skan    if test "x$enable_win32_registry" != xno; then
1575169689Skan      AC_SEARCH_LIBS(RegOpenKeyExA, advapi32,, [enable_win32_registry=no])
1576169689Skan    fi
1577132718Skan
1578169689Skan    if test "x$enable_win32_registry" != xno; then
1579169689Skan      AC_DEFINE(ENABLE_WIN32_REGISTRY, 1,
1580169689Skan  [Define to 1 if installation paths should be looked up in the Windows
1581169689Skan   Registry. Ignored on non-Windows hosts.])
1582169689Skan
1583169689Skan      if test "x$enable_win32_registry" != xyes \
1584169689Skan         && test "x$enable_win32_registry" != x; then
1585169689Skan	AC_DEFINE_UNQUOTED(WIN32_REGISTRY_KEY, "$enable_win32_registry",
1586169689Skan  [Define to be the last component of the Windows registry key under which
1587169689Skan   to look for installation paths.  The full key used will be 
1588169689Skan   HKEY_LOCAL_MACHINE/SOFTWARE/Free Software Foundation/{WIN32_REGISTRY_KEY}.
1589169689Skan   The default is the GCC version number.])
1590169689Skan      fi
1591169689Skan    fi
1592132718Skan  ;;
1593132718Skanesac
1594132718Skan
1595132718Skan# Get an absolute path to the GCC top-level source directory
1596132718Skanholddir=`${PWDCMD-pwd}`
1597132718Skancd $srcdir
1598132718Skantopdir=`${PWDCMD-pwd}`
1599132718Skancd $holddir
1600132718Skan
1601132718Skan# Conditionalize the makefile for this host machine.
1602132718Skanxmake_file=
1603132718Skanfor f in ${host_xmake_file}
1604132718Skando
1605132718Skan	if test -f ${srcdir}/config/$f
1606132718Skan	then
1607132718Skan		xmake_file="${xmake_file} \$(srcdir)/config/$f"
1608132718Skan	fi
1609132718Skandone
1610132718Skan
1611132718Skan# Conditionalize the makefile for this target machine.
1612132718Skantmake_file_=
1613132718Skanfor f in ${tmake_file}
1614132718Skando
1615132718Skan	if test -f ${srcdir}/config/$f
1616132718Skan	then
1617132718Skan		tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
1618132718Skan	fi
1619132718Skandone
1620132718Skantmake_file="${tmake_file_}"
1621132718Skan
1622132718Skan# If the host doesn't support symlinks, modify CC in
1623132718Skan# FLAGS_TO_PASS so CC="stage1/xgcc -Bstage1/" works.
1624132718Skan# Otherwise, we can use "CC=$(CC)".
1625132718Skanrm -f symtest.tem
1626169689Skancase "$LN_S" in
1627169689Skan	*-s*)
1628169689Skan		cc_set_by_configure="\$(CC)"
1629169689Skan		quoted_cc_set_by_configure="\$(CC)"
1630169689Skan		stage_prefix_set_by_configure="\$(STAGE_PREFIX)"
1631169689Skan		quoted_stage_prefix_set_by_configure="\$(STAGE_PREFIX)"
1632169689Skan		;;
1633169689Skan	*)
1634169689Skan		cc_set_by_configure="\`case '\$(CC)' in stage*) echo '\$(CC)' | sed -e 's|stage|../stage|g';; *) echo '\$(CC)';; esac\`"
1635169689Skan		quoted_cc_set_by_configure="\\\`case '\\\$(CC)' in stage*) echo '\\\$(CC)' | sed -e 's|stage|../stage|g';; *) echo '\\\$(CC)';; esac\\\`"
1636169689Skan		stage_prefix_set_by_configure="\`case '\$(STAGE_PREFIX)' in stage*) echo '\$(STAGE_PREFIX)' | sed -e 's|stage|../stage|g';; *) echo '\$(STAGE_PREFIX)';; esac\`"
1637169689Skan		quoted_stage_prefix_set_by_configure="\\\`case '\\\$(STAGE_PREFIX)' in stage*) echo '\\\$(STAGE_PREFIX)' | sed -e 's|stage|../stage|g';; *) echo '\\\$(STAGE_PREFIX)';; esac\\\`"
1638169689Skan		;;
1639169689Skanesac
1640132718Skan
1641169689Skan# This is a terrible hack which will go away some day.
1642169689Skanhost_cc_for_libada=${CC}
1643169689SkanAC_SUBST(host_cc_for_libada)
1644169689Skan
1645132718Skanout_object_file=`basename $out_file .c`.o
1646132718Skan
1647169689Skantm_file_list="options.h"
1648169689Skantm_include_list="options.h"
1649132718Skanfor f in $tm_file; do
1650132718Skan  case $f in
1651132718Skan    defaults.h )
1652132718Skan       tm_file_list="${tm_file_list} \$(srcdir)/$f"
1653132718Skan       tm_include_list="${tm_include_list} $f"
1654132718Skan       ;;
1655132718Skan    * )
1656132718Skan       tm_file_list="${tm_file_list} \$(srcdir)/config/$f"
1657132718Skan       tm_include_list="${tm_include_list} config/$f"
1658132718Skan       ;;
1659132718Skan  esac
1660132718Skandone
1661132718Skan
1662132718Skantm_p_file_list=
1663132718Skantm_p_include_list=
1664132718Skanfor f in $tm_p_file; do
1665132718Skan  case $f in
1666132718Skan    tm-preds.h )
1667132718Skan       tm_p_file_list="${tm_p_file_list} $f"
1668132718Skan       tm_p_include_list="${tm_p_include_list} $f"
1669132718Skan       ;;
1670132718Skan    * )
1671132718Skan       tm_p_file_list="${tm_p_file_list} \$(srcdir)/config/$f"
1672132718Skan       tm_p_include_list="${tm_p_include_list} config/$f"
1673132718Skan  esac
1674132718Skandone
1675132718Skan
1676132718Skanxm_file_list=
1677132718Skanxm_include_list=
1678132718Skanfor f in $xm_file; do
1679132718Skan  case $f in
1680132718Skan    ansidecl.h )
1681132718Skan       xm_file_list="${xm_file_list} \$(srcdir)/../include/$f"
1682132718Skan       xm_include_list="${xm_include_list} $f"
1683132718Skan       ;;
1684132718Skan    auto-host.h )
1685132718Skan       xm_file_list="${xm_file_list} $f"
1686132718Skan       xm_include_list="${xm_include_list} $f"
1687132718Skan       ;;
1688132718Skan    * )
1689132718Skan       xm_file_list="${xm_file_list} \$(srcdir)/config/$f"
1690132718Skan       xm_include_list="${xm_include_list} config/$f"
1691132718Skan       ;;
1692132718Skan  esac
1693132718Skandone
1694132718Skan
1695132718Skanhost_xm_file_list=
1696132718Skanhost_xm_include_list=
1697132718Skanfor f in $host_xm_file; do
1698132718Skan  case $f in
1699132718Skan    ansidecl.h )
1700132718Skan       host_xm_file_list="${host_xm_file_list} \$(srcdir)/../include/$f"
1701132718Skan       host_xm_include_list="${host_xm_include_list} $f"
1702132718Skan       ;;
1703132718Skan    auto-host.h )
1704132718Skan       host_xm_file_list="${host_xm_file_list} $f"
1705132718Skan       host_xm_include_list="${host_xm_include_list} $f"
1706132718Skan       ;;
1707132718Skan    * )
1708132718Skan       host_xm_file_list="${host_xm_file_list} \$(srcdir)/config/$f"
1709132718Skan       host_xm_include_list="${host_xm_include_list} config/$f"
1710132718Skan       ;;
1711132718Skan  esac
1712132718Skandone
1713132718Skan
1714132718Skanbuild_xm_file_list=
1715132718Skanfor f in $build_xm_file; do
1716132718Skan  case $f in
1717132718Skan    ansidecl.h )
1718132718Skan       build_xm_file_list="${build_xm_file_list} \$(srcdir)/../include/$f"
1719132718Skan       build_xm_include_list="${build_xm_include_list} $f"
1720132718Skan       ;;
1721132718Skan    auto-build.h | auto-host.h )
1722132718Skan       build_xm_file_list="${build_xm_file_list} $f"
1723132718Skan       build_xm_include_list="${build_xm_include_list} $f"
1724132718Skan       ;;
1725132718Skan    * )
1726132718Skan       build_xm_file_list="${build_xm_file_list} \$(srcdir)/config/$f"
1727132718Skan       build_xm_include_list="${build_xm_include_list} config/$f"
1728132718Skan       ;;
1729132718Skan  esac
1730132718Skandone
1731132718Skan
1732259563Spfg# Define macro CROSS_DIRECTORY_STRUCTURE in compilation if this is a
1733259563Spfg# cross-compiler which does not use the native headers and libraries.
1734132718Skan# Also use all.cross instead of all.internal and adjust SYSTEM_HEADER_DIR.
1735132718SkanCROSS=						AC_SUBST(CROSS)
1736132718SkanALL=all.internal				AC_SUBST(ALL)
1737132718SkanSYSTEM_HEADER_DIR='$(NATIVE_SYSTEM_HEADER_DIR)'	AC_SUBST(SYSTEM_HEADER_DIR)
1738169689Skan
1739169689Skanif test "x$with_build_sysroot" != x; then
1740169689Skan  build_system_header_dir=$with_build_sysroot'$(NATIVE_SYSTEM_HEADER_DIR)'
1741169689Skanelse
1742169689Skan  # This value is used, even on a native system, because 
1743169689Skan  # CROSS_SYSTEM_HEADER_DIR is just 
1744169689Skan  # $(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR).
1745169689Skan  build_system_header_dir='$(CROSS_SYSTEM_HEADER_DIR)'
1746169689Skanfi
1747169689Skan
1748132718Skanif test x$host != x$target
1749132718Skanthen
1750259563Spfg	CROSS="-DCROSS_DIRECTORY_STRUCTURE"
1751132718Skan	ALL=all.cross
1752169689Skan	SYSTEM_HEADER_DIR=$build_system_header_dir
1753132718Skan	case "$host","$target" in
1754132718Skan	# Darwin crosses can use the host system's libraries and headers,
1755132718Skan	# because of the fat library support.  Of course, it must be the
1756132718Skan	# same version of Darwin on both sides.  Allow the user to
1757132718Skan	# just say --target=foo-darwin without a version number to mean
1758132718Skan	# "the version on this system".
1759132718Skan	    *-*-darwin*,*-*-darwin*)
1760132718Skan		hostos=`echo $host | sed 's/.*-darwin/darwin/'`
1761132718Skan		targetos=`echo $target | sed 's/.*-darwin/darwin/'`
1762132718Skan		if test $hostos = $targetos -o $targetos = darwin ; then
1763132718Skan		    CROSS=
1764132718Skan		    SYSTEM_HEADER_DIR='$(NATIVE_SYSTEM_HEADER_DIR)'
1765132718Skan		    with_headers=yes
1766132718Skan		fi
1767132718Skan		;;
1768132718Skan
1769132718Skan	    i?86-*-*,x86_64-*-* \
1770132718Skan	    | powerpc*-*-*,powerpc64*-*-*)
1771132718Skan		CROSS="$CROSS -DNATIVE_CROSS" ;;
1772132718Skan	esac
1773132718Skanelif test "x$TARGET_SYSTEM_ROOT" != x; then
1774169689Skan        SYSTEM_HEADER_DIR=$build_system_header_dir 
1775132718Skanfi
1776132718Skan
1777132718Skan# If this is a cross-compiler that does not
1778132718Skan# have its own set of headers then define
1779132718Skan# inhibit_libc
1780132718Skan
1781132718Skan# If this is using newlib, without having the headers available now,
1782132718Skan# then define inhibit_libc in LIBGCC2_CFLAGS.
1783132718Skan# This prevents libgcc2 from containing any code which requires libc
1784132718Skan# support.
1785169689Skaninhibit_libc=false
1786132718Skanif { { test x$host != x$target && test "x$with_sysroot" = x ; } ||
1787132718Skan       test x$with_newlib = xyes ; } &&
1788132718Skan     { test "x$with_headers" = x || test "x$with_headers" = xno ; } ; then
1789169689Skan       inhibit_libc=true
1790132718Skanfi
1791132718SkanAC_SUBST(inhibit_libc)
1792132718Skan
1793132718Skan# When building gcc with a cross-compiler, we need to adjust things so
1794132718Skan# that the generator programs are still built with the native compiler.
1795132718Skan# Also, we cannot run fixincludes or fix-header.
1796132718Skan
1797132718Skan# These are the normal (build=host) settings:
1798132718SkanCC_FOR_BUILD='$(CC)'		AC_SUBST(CC_FOR_BUILD)
1799132718SkanBUILD_CFLAGS='$(ALL_CFLAGS)'	AC_SUBST(BUILD_CFLAGS)
1800132718SkanSTMP_FIXINC=stmp-fixinc		AC_SUBST(STMP_FIXINC)
1801132718Skan
1802132718Skan# Possibly disable fixproto, on a per-target basis.
1803132718Skancase ${use_fixproto} in
1804132718Skan  no)
1805132718Skan    STMP_FIXPROTO=
1806132718Skan    ;;
1807132718Skan  yes)
1808132718Skan    STMP_FIXPROTO=stmp-fixproto
1809132718Skan    ;;
1810132718Skanesac
1811132718SkanAC_SUBST(STMP_FIXPROTO)
1812132718Skan
1813132718Skan# And these apply if build != host, or we are generating coverage data
1814132718Skanif test x$build != x$host || test "x$coverage_flags" != x
1815132718Skanthen
1816132718Skan    BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
1817132718Skan
1818132718Skan    if test "x$TARGET_SYSTEM_ROOT" = x; then
1819169689Skan	if test "x$STMP_FIXPROTO" != x; then
1820169689Skan	  STMP_FIXPROTO=stmp-install-fixproto
1821169689Skan	fi
1822132718Skan    fi
1823132718Skanfi
1824132718Skan
1825132718Skan# Expand extra_headers to include complete path.
1826132718Skan# This substitutes for lots of t-* files.
1827132718Skanextra_headers_list=
1828132718Skan# Prepend $(srcdir)/config/${cpu_type}/ to every entry in extra_headers.
1829132718Skanfor file in ${extra_headers} ; do
1830132718Skan  extra_headers_list="${extra_headers_list} \$(srcdir)/config/${cpu_type}/${file}"
1831132718Skandone
1832132718Skan
1833169689Skan# Define collect2 in Makefile.
1834169689Skancase $host_can_use_collect2 in
1835169689Skan  no) collect2= ;;
1836169689Skan  *) collect2='collect2$(exeext)' ;;
1837169689Skanesac
1838169689SkanAC_SUBST([collect2])
1839169689Skan
1840132718Skan# Add a definition of USE_COLLECT2 if system wants one.
1841132718Skancase $use_collect2 in
1842132718Skan  no) use_collect2= ;;
1843132718Skan  "") ;;
1844132718Skan  *) 
1845132718Skan    host_xm_defines="${host_xm_defines} USE_COLLECT2"
1846132718Skan    xm_defines="${xm_defines} USE_COLLECT2"
1847169689Skan    case $host_can_use_collect2 in
1848169689Skan      no)
1849169689Skan        AC_MSG_ERROR([collect2 is required but cannot be built on this system])
1850169689Skan        ;;
1851169689Skan    esac
1852132718Skan    ;;
1853132718Skanesac
1854132718Skan
1855169689Skan# ---------------------------
1856169689Skan# Assembler & linker features
1857169689Skan# ---------------------------
1858169689Skan
1859132718Skan# Identify the assembler which will work hand-in-glove with the newly
1860132718Skan# built GCC, so that we can examine its features.  This is the assembler
1861132718Skan# which will be driven by the driver program.
1862132718Skan#
1863132718Skan# If build != host, and we aren't building gas in-tree, we identify a
1864132718Skan# build->target assembler and hope that it will have the same features
1865132718Skan# as the host->target assembler we'll be using.
1866132718Skangcc_cv_gas_major_version=
1867132718Skangcc_cv_gas_minor_version=
1868132718Skangcc_cv_as_gas_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gas
1869169689Skan
1870169689Skanm4_pattern_allow([AS_FOR_TARGET])dnl
1871169689SkanAS_VAR_SET_IF(gcc_cv_as,, [
1872132718Skanif test -x "$DEFAULT_ASSEMBLER"; then
1873132718Skan	gcc_cv_as="$DEFAULT_ASSEMBLER"
1874169689Skanelif test -f $gcc_cv_as_gas_srcdir/configure.in \
1875169689Skan     && test -f ../gas/Makefile \
1876169689Skan     && test x$build = x$host; then
1877169689Skan	gcc_cv_as=../gas/as-new$build_exeext
1878169689Skanelif test -x as$build_exeext; then
1879132718Skan	# Build using assembler in the current directory.
1880169689Skan	gcc_cv_as=./as$build_exeext
1881169689Skanelif test -x $AS_FOR_TARGET; then
1882169689Skan        gcc_cv_as="$AS_FOR_TARGET"
1883169689Skanelse
1884169689Skan        AC_PATH_PROG(gcc_cv_as, $AS_FOR_TARGET)
1885169689Skanfi])
1886169689Skan
1887169689SkanORIGINAL_AS_FOR_TARGET=$gcc_cv_as
1888169689SkanAC_SUBST(ORIGINAL_AS_FOR_TARGET)
1889169689Skan
1890169689SkanAC_MSG_CHECKING(what assembler to use)
1891169689Skanif test "$gcc_cv_as" = ../gas/as-new$build_exeext; then
1892169689Skan  # Single tree build which includes gas.  We want to prefer it
1893169689Skan  # over whatever linker top-level may have detected, since
1894169689Skan  # we'll use what we're building after installation anyway.
1895169689Skan  AC_MSG_RESULT(newly built gas)
1896132718Skan  in_tree_gas=yes
1897132718Skan  _gcc_COMPUTE_GAS_VERSION
1898132718Skan  in_tree_gas_is_elf=no
1899132718Skan  if grep 'obj_format = elf' ../gas/Makefile > /dev/null \
1900132718Skan     || (grep 'obj_format = multi' ../gas/Makefile \
1901132718Skan         && grep 'extra_objects =.* obj-elf' ../gas/Makefile) > /dev/null
1902132718Skan  then
1903132718Skan    in_tree_gas_is_elf=yes
1904132718Skan  fi
1905169689Skanelse
1906169689Skan  AC_MSG_RESULT($gcc_cv_as)
1907169689Skan  in_tree_gas=no
1908132718Skanfi
1909132718Skan
1910132718Skan# Identify the linker which will work hand-in-glove with the newly
1911132718Skan# built GCC, so that we can examine its features.  This is the linker
1912132718Skan# which will be driven by the driver program.
1913132718Skan#
1914132718Skan# If build != host, and we aren't building gas in-tree, we identify a
1915132718Skan# build->target linker and hope that it will have the same features
1916132718Skan# as the host->target linker we'll be using.
1917132718Skangcc_cv_gld_major_version=
1918132718Skangcc_cv_gld_minor_version=
1919132718Skangcc_cv_ld_gld_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/ld
1920132718Skangcc_cv_ld_bfd_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/bfd
1921169689Skan
1922169689SkanAS_VAR_SET_IF(gcc_cv_ld,, [
1923132718Skanif test -x "$DEFAULT_LINKER"; then
1924132718Skan	gcc_cv_ld="$DEFAULT_LINKER"
1925169689Skanelif test -f $gcc_cv_ld_gld_srcdir/configure.in \
1926169689Skan     && test -f ../ld/Makefile \
1927169689Skan     && test x$build = x$host; then
1928169689Skan	gcc_cv_ld=../ld/ld-new$build_exeext
1929169689Skanelif test -x collect-ld$build_exeext; then
1930132718Skan	# Build using linker in the current directory.
1931169689Skan	gcc_cv_ld=./collect-ld$build_exeext
1932169689Skanelif test -x $LD_FOR_TARGET; then
1933169689Skan        gcc_cv_ld="$LD_FOR_TARGET"
1934169689Skanelse
1935169689Skan        AC_PATH_PROG(gcc_cv_ld, $LD_FOR_TARGET)
1936169689Skanfi])
1937169689Skan
1938169689SkanORIGINAL_LD_FOR_TARGET=$gcc_cv_ld
1939169689SkanAC_SUBST(ORIGINAL_LD_FOR_TARGET)
1940169689Skan
1941169689SkanAC_MSG_CHECKING(what linker to use)
1942169689Skanif test "$gcc_cv_ld" = ../ld/ld-new$build_exeext; then
1943169689Skan	# Single tree build which includes ld.  We want to prefer it
1944169689Skan	# over whatever linker top-level may have detected, since
1945169689Skan	# we'll use what we're building after installation anyway.
1946169689Skan	AC_MSG_RESULT(newly built ld)
1947132718Skan	in_tree_ld=yes
1948132718Skan	in_tree_ld_is_elf=no
1949132718Skan	if (grep 'EMUL = .*elf' ../ld/Makefile \
1950169689Skan	    || grep 'EMUL = .*linux' ../ld/Makefile \
1951169689Skan	    || grep 'EMUL = .*lynx' ../ld/Makefile) > /dev/null; then
1952132718Skan	  in_tree_ld_is_elf=yes
1953132718Skan	fi
1954132718Skan	for f in $gcc_cv_ld_bfd_srcdir/configure $gcc_cv_ld_gld_srcdir/configure $gcc_cv_ld_gld_srcdir/configure.in $gcc_cv_ld_gld_srcdir/Makefile.in
1955132718Skan	do
1956132718Skanchangequote(,)dnl
1957169689Skan		gcc_cv_gld_version=`sed -n -e 's/^[ 	]*\(VERSION=[0-9]*\.[0-9]*.*\)/\1/p' < $f`
1958132718Skan		if test x$gcc_cv_gld_version != x; then
1959132718Skan			break
1960132718Skan		fi
1961132718Skan	done
1962132718Skan	gcc_cv_gld_major_version=`expr "$gcc_cv_gld_version" : "VERSION=\([0-9]*\)"`
1963132718Skan	gcc_cv_gld_minor_version=`expr "$gcc_cv_gld_version" : "VERSION=[0-9]*\.\([0-9]*\)"`
1964132718Skanchangequote([,])dnl
1965169689Skanelse
1966169689Skan	AC_MSG_RESULT($gcc_cv_ld)
1967169689Skan	in_tree_ld=no
1968132718Skanfi
1969132718Skan
1970132718Skan# Figure out what nm we will be using.
1971132718Skangcc_cv_binutils_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/binutils
1972169689SkanAS_VAR_SET_IF(gcc_cv_nm,, [
1973169689Skanif test -f $gcc_cv_binutils_srcdir/configure.in \
1974169689Skan     && test -f ../binutils/Makefile \
1975169689Skan     && test x$build = x$host; then
1976169689Skan	gcc_cv_nm=../binutils/nm-new$build_exeext
1977169689Skanelif test -x nm$build_exeext; then
1978169689Skan	gcc_cv_nm=./nm$build_exeext
1979169689Skanelif test -x $NM_FOR_TARGET; then
1980169689Skan        gcc_cv_nm="$NM_FOR_TARGET"
1981169689Skanelse
1982169689Skan        AC_PATH_PROG(gcc_cv_nm, $NM_FOR_TARGET)
1983169689Skanfi])
1984169689Skan
1985132718SkanAC_MSG_CHECKING(what nm to use)
1986169689Skanif test "$gcc_cv_nm" = ../binutils/nm-new$build_exeext; then
1987132718Skan	# Single tree build which includes binutils.
1988169689Skan	AC_MSG_RESULT(newly built nm)
1989132718Skan	in_tree_nm=yes
1990132718Skanelse
1991169689Skan	AC_MSG_RESULT($gcc_cv_nm)
1992169689Skan	in_tree_nm=no
1993132718Skanfi
1994132718Skan
1995169689SkanORIGINAL_NM_FOR_TARGET=$gcc_cv_nm
1996169689SkanAC_SUBST(ORIGINAL_NM_FOR_TARGET)
1997169689Skan
1998132718Skan# Figure out what objdump we will be using.
1999169689SkanAS_VAR_SET_IF(gcc_cv_objdump,, [
2000169689Skanif test -f $gcc_cv_binutils_srcdir/configure.in \
2001169689Skan     && test -f ../binutils/Makefile \
2002169689Skan     && test x$build = x$host; then
2003169689Skan	# Single tree build which includes binutils.
2004169689Skan	gcc_cv_objdump=../binutils/objdump$build_exeext
2005169689Skanelif test -x objdump$build_exeext; then
2006169689Skan	gcc_cv_objdump=./objdump$build_exeext
2007169689Skanelif test -x $OBJDUMP_FOR_TARGET; then
2008169689Skan        gcc_cv_objdump="$OBJDUMP_FOR_TARGET"
2009169689Skanelse
2010169689Skan        AC_PATH_PROG(gcc_cv_objdump, $OBJDUMP_FOR_TARGET)
2011169689Skanfi])
2012169689Skan
2013132718SkanAC_MSG_CHECKING(what objdump to use)
2014169689Skanif test "$gcc_cv_objdump" = ../binutils/objdump$build_exeext; then
2015132718Skan	# Single tree build which includes binutils.
2016169689Skan	AC_MSG_RESULT(newly built objdump)
2017169689Skanelif test x$gcc_cv_objdump = x; then
2018169689Skan	AC_MSG_RESULT(not found)
2019132718Skanelse
2020169689Skan	AC_MSG_RESULT($gcc_cv_objdump)
2021132718Skanfi
2022132718Skan
2023132718Skan# Figure out what assembler alignment features are present.
2024132718Skangcc_GAS_CHECK_FEATURE([.balign and .p2align], gcc_cv_as_balign_and_p2align,
2025132718Skan [2,6,0],,
2026132718Skan[.balign 4
2027132718Skan.p2align 2],,
2028132718Skan[AC_DEFINE(HAVE_GAS_BALIGN_AND_P2ALIGN, 1,
2029132718Skan  [Define if your assembler supports .balign and .p2align.])])
2030132718Skan
2031132718Skangcc_GAS_CHECK_FEATURE([.p2align with maximum skip], gcc_cv_as_max_skip_p2align,
2032132718Skan [2,8,0],,
2033132718Skan [.p2align 4,,7],,
2034132718Skan[AC_DEFINE(HAVE_GAS_MAX_SKIP_P2ALIGN, 1,
2035132718Skan  [Define if your assembler supports specifying the maximum number
2036132718Skan   of bytes to skip when using the GAS .p2align command.])])
2037132718Skan
2038132718Skangcc_GAS_CHECK_FEATURE([working .subsection -1], gcc_cv_as_subsection_m1,
2039132718Skan [elf,2,9,0],,
2040132718Skan [conftest_label1: .word 0
2041132718Skan.subsection -1
2042132718Skanconftest_label2: .word 0
2043132718Skan.previous],
2044132718Skan [if test x$gcc_cv_nm != x; then
2045132718Skan    $gcc_cv_nm conftest.o | grep conftest_label1 > conftest.nm1
2046132718Skan    $gcc_cv_nm conftest.o | grep conftest_label2 | sed -e 's/label2/label1/' > conftest.nm2
2047132718Skan    if cmp conftest.nm1 conftest.nm2 > /dev/null 2>&1
2048132718Skan    then :
2049132718Skan    else gcc_cv_as_subsection_m1=yes
2050132718Skan    fi
2051132718Skan    rm -f conftest.nm1 conftest.nm2
2052132718Skan  fi],
2053132718Skan [AC_DEFINE(HAVE_GAS_SUBSECTION_ORDERING, 1,
2054132718Skan  [Define if your assembler supports .subsection and .subsection -1 starts
2055132718Skan   emitting at the beginning of your section.])])
2056132718Skan
2057132718Skangcc_GAS_CHECK_FEATURE([.weak], gcc_cv_as_weak,
2058132718Skan [2,2,0],,
2059132718Skan [	.weak foobar],,
2060132718Skan[AC_DEFINE(HAVE_GAS_WEAK, 1, [Define if your assembler supports .weak.])])
2061132718Skan
2062169689Skangcc_GAS_CHECK_FEATURE([.weakref], gcc_cv_as_weakref,
2063169689Skan [2,17,0],,
2064169689Skan [	.weakref foobar, barfnot],,
2065169689Skan[AC_DEFINE(HAVE_GAS_WEAKREF, 1, [Define if your assembler supports .weakref.])])
2066169689Skan
2067146895Skangcc_GAS_CHECK_FEATURE([.nsubspa comdat], gcc_cv_as_nsubspa_comdat,
2068146895Skan [2,15,91],,
2069146895Skan [	.SPACE $TEXT$
2070146895Skan	.NSUBSPA $CODE$,COMDAT],,
2071146895Skan[AC_DEFINE(HAVE_GAS_NSUBSPA_COMDAT, 1, [Define if your assembler supports .nsubspa comdat option.])])
2072146895Skan
2073132718Skan# .hidden needs to be supported in both the assembler and the linker,
2074132718Skan# because GNU LD versions before 2.12.1 have buggy support for STV_HIDDEN.
2075132718Skan# This is irritatingly difficult to feature test for; we have to check the
2076132718Skan# date string after the version number.  If we've got an in-tree
2077132718Skan# ld, we don't know its patchlevel version, so we set the baseline at 2.13
2078132718Skan# to be safe.
2079132718Skan# The gcc_GAS_CHECK_FEATURE call just sets a cache variable.
2080132718Skangcc_GAS_CHECK_FEATURE([.hidden], gcc_cv_as_hidden,
2081132718Skan [elf,2,13,0],,
2082132718Skan[	.hidden foobar
2083132718Skanfoobar:])
2084132718Skan
2085132718SkanAC_CACHE_CHECK(linker for .hidden support, gcc_cv_ld_hidden,
2086132718Skan[if test $in_tree_ld = yes ; then
2087132718Skan  gcc_cv_ld_hidden=no
2088132718Skan  if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 13 -o "$gcc_cv_gld_major_version" -gt 2 \
2089132718Skan     && test $in_tree_ld_is_elf = yes; then
2090132718Skan     gcc_cv_ld_hidden=yes
2091132718Skan  fi
2092132718Skanelse
2093132718Skan  gcc_cv_ld_hidden=yes
2094132718Skan  ld_ver=`$gcc_cv_ld --version 2>/dev/null | sed 1q`
2095132718Skan  if echo "$ld_ver" | grep GNU > /dev/null; then
2096132718Skanchangequote(,)dnl
2097132718Skan    ld_vers=`echo $ld_ver | sed -n \
2098132718Skan	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \
2099132718Skan	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \
2100132718Skan	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \
2101132718Skan	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\)[	 ].*$,\1,p' \
2102132718Skan	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)[	 ].*$,\1,p' \
2103169689Skan	-e 's,^.*[ 	 ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)[ 	].*$,\1,p' \
2104169689Skan	-e 's,^.*[	 ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)[	 -].*$,\1,p'`
2105132718Skan    ld_date=`echo $ld_ver | sed -n 's,^.*\([2-9][0-9][0-9][0-9]\)[-]*\([01][0-9]\)[-]*\([0-3][0-9]\).*$,\1\2\3,p'`
2106169689Skan    ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
2107169689Skan    ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
2108169689Skan    ld_vers_patch=`expr "$ld_vers" : '[0-9]*\.[0-9]*\.\([0-9]*\)'`
2109132718Skan    if test 0"$ld_date" -lt 20020404; then
2110132718Skan      if test -n "$ld_date"; then
2111132718Skan	# If there was date string, but was earlier than 2002-04-04, fail
2112132718Skan	gcc_cv_ld_hidden=no
2113132718Skan      elif test -z "$ld_vers"; then
2114132718Skan	# If there was no date string nor ld version number, something is wrong
2115132718Skan	gcc_cv_ld_hidden=no
2116132718Skan      else
2117132718Skan	test -z "$ld_vers_patch" && ld_vers_patch=0
2118132718Skan	if test "$ld_vers_major" -lt 2; then
2119132718Skan	  gcc_cv_ld_hidden=no
2120132718Skan	elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 12; then
2121132718Skan	  gcc_cv_ld_hidden="no"
2122132718Skan	elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -eq 12 -a "$ld_vers_patch" -eq 0; then
2123132718Skan	  gcc_cv_ld_hidden=no
2124132718Skan	fi
2125132718Skan      fi
2126132718Skanchangequote([,])dnl
2127132718Skan    fi
2128132718Skan  else
2129132718Skan    case "${target}" in
2130132718Skan      hppa64*-*-hpux* | ia64*-*-hpux*)
2131132718Skan	gcc_cv_ld_hidden=yes
2132132718Skan	;;
2133132718Skan      *)
2134132718Skan	gcc_cv_ld_hidden=no
2135132718Skan	;;
2136132718Skan    esac
2137132718Skan  fi
2138132718Skanfi])
2139132718Skanlibgcc_visibility=no
2140132718SkanAC_SUBST(libgcc_visibility)
2141169689SkanGCC_TARGET_TEMPLATE([HAVE_GAS_HIDDEN])
2142132718Skanif test $gcc_cv_as_hidden = yes && test $gcc_cv_ld_hidden = yes; then
2143132718Skan  libgcc_visibility=yes
2144132718Skan  AC_DEFINE(HAVE_GAS_HIDDEN, 1,
2145132718Skan  [Define if your assembler and linker support .hidden.])
2146132718Skanfi
2147132718Skan
2148132718Skan# Check if we have .[us]leb128, and support symbol arithmetic with it.
2149132718Skangcc_GAS_CHECK_FEATURE([.sleb128 and .uleb128], gcc_cv_as_leb128,
2150132718Skan  [elf,2,11,0],,
2151132718Skan[	.data
2152132718Skan	.uleb128 L2 - L1
2153132718SkanL1:
2154132718Skan	.uleb128 1280
2155132718Skan	.sleb128 -1010
2156132718SkanL2:],
2157132718Skan [# GAS versions before 2.11 do not support uleb128,
2158132718Skan  # despite appearing to.
2159132718Skan  # ??? There exists an elf-specific test that will crash
2160132718Skan  # the assembler.  Perhaps it's better to figure out whether
2161132718Skan  # arbitrary sections are supported and try the test.
2162132718Skan  as_ver=`$gcc_cv_as --version 2>/dev/null | sed 1q`
2163132718Skan  if echo "$as_ver" | grep GNU > /dev/null; then
2164132718Skanchangequote(,)dnl
2165132718Skan    as_ver=`echo $as_ver | sed -e 's/GNU assembler \([0-9.][0-9.]*\).*/\1/'`
2166132718Skan    as_major=`echo $as_ver | sed 's/\..*//'`
2167132718Skan    as_minor=`echo $as_ver | sed 's/[^.]*\.\([0-9]*\).*/\1/'`
2168132718Skanchangequote([,])dnl
2169132718Skan    if test $as_major -eq 2 && test $as_minor -lt 11
2170132718Skan    then :
2171132718Skan    else gcc_cv_as_leb128=yes
2172132718Skan    fi
2173132718Skan  fi],
2174132718Skan  [AC_DEFINE(HAVE_AS_LEB128, 1,
2175132718Skan    [Define if your assembler supports .sleb128 and .uleb128.])])
2176132718Skan
2177132718Skan# GAS versions up to and including 2.11.0 may mis-optimize
2178132718Skan# .eh_frame data.
2179132718Skangcc_GAS_CHECK_FEATURE(eh_frame optimization, gcc_cv_as_eh_frame,
2180132718Skan  [elf,2,12,0],,
2181132718Skan[	.text
2182132718Skan.LFB1:
2183132718Skan	.4byte	0
2184132718Skan.L1:
2185132718Skan	.4byte	0
2186132718Skan.LFE1:
2187132718Skan	.section	.eh_frame,"aw",@progbits
2188132718Skan__FRAME_BEGIN__:
2189132718Skan	.4byte	.LECIE1-.LSCIE1
2190132718Skan.LSCIE1:
2191132718Skan	.4byte	0x0
2192132718Skan	.byte	0x1
2193132718Skan	.ascii "z\0"
2194132718Skan	.byte	0x1
2195132718Skan	.byte	0x78
2196132718Skan	.byte	0x1a
2197132718Skan	.byte	0x0
2198132718Skan	.byte	0x4
2199132718Skan	.4byte	1
2200132718Skan	.p2align 1
2201132718Skan.LECIE1:
2202132718Skan.LSFDE1:
2203132718Skan	.4byte	.LEFDE1-.LASFDE1
2204132718Skan.LASFDE1:
2205132718Skan	.4byte	.LASFDE1-__FRAME_BEGIN__
2206132718Skan	.4byte	.LFB1
2207132718Skan	.4byte	.LFE1-.LFB1
2208132718Skan	.byte	0x4
2209132718Skan	.4byte	.LFE1-.LFB1
2210132718Skan	.byte	0x4
2211132718Skan	.4byte	.L1-.LFB1
2212132718Skan.LEFDE1:],
2213132718Skan[  dnl # For autoconf 2.5x, must protect trailing spaces with @&t@.
2214132718Skancat > conftest.lit <<EOF
2215132718Skan 0000 10000000 00000000 017a0001 781a0004  .........z..x...
2216132718Skan 0010 01000000 12000000 18000000 00000000  ................
2217132718Skan 0020 08000000 04080000 0044               .........D      @&t@
2218132718SkanEOF
2219132718Skancat > conftest.big <<EOF
2220132718Skan 0000 00000010 00000000 017a0001 781a0004  .........z..x...
2221132718Skan 0010 00000001 00000012 00000018 00000000  ................
2222132718Skan 0020 00000008 04000000 0844               .........D      @&t@
2223132718SkanEOF
2224132718Skan  # If the assembler didn't choke, and we can objdump,
2225132718Skan  # and we got the correct data, then succeed.
2226169689Skan  # The text in the here-document typically retains its unix-style line
2227169689Skan  # endings, while the output of objdump will use host line endings.
2228169689Skan  # Therefore, use diff -b for the comparisons.
2229132718Skan  if test x$gcc_cv_objdump != x \
2230132718Skan  && $gcc_cv_objdump -s -j .eh_frame conftest.o 2>/dev/null \
2231132718Skan     | tail -3 > conftest.got \
2232169689Skan  && { diff -b conftest.lit conftest.got > /dev/null 2>&1 \
2233169689Skan    || diff -b conftest.big conftest.got > /dev/null 2>&1; }
2234132718Skan  then
2235132718Skan    gcc_cv_as_eh_frame=yes
2236132718Skan  elif AC_TRY_COMMAND($gcc_cv_as -o conftest.o --traditional-format /dev/null); then
2237132718Skan    gcc_cv_as_eh_frame=buggy
2238132718Skan  else
2239132718Skan    # Uh oh, what do we do now?
2240132718Skan    gcc_cv_as_eh_frame=no
2241132718Skan  fi])
2242132718Skan
2243132718Skanif test $gcc_cv_as_eh_frame = buggy; then
2244132718Skan  AC_DEFINE(USE_AS_TRADITIONAL_FORMAT, 1,
2245132718Skan  [Define if your assembler mis-optimizes .eh_frame data.])
2246132718Skanfi
2247132718Skan
2248132718Skangcc_GAS_CHECK_FEATURE(section merging support, gcc_cv_as_shf_merge,
2249132718Skan [elf,2,12,0], [--fatal-warnings],
2250132718Skan [.section .rodata.str, "aMS", @progbits, 1])
2251169689Skanif test $gcc_cv_as_shf_merge = no; then
2252169689Skan  gcc_GAS_CHECK_FEATURE(section merging support, gcc_cv_as_shf_merge,
2253169689Skan    [elf,2,12,0], [--fatal-warnings],
2254169689Skan    [.section .rodata.str, "aMS", %progbits, 1])
2255169689Skanfi
2256132718SkanAC_DEFINE_UNQUOTED(HAVE_GAS_SHF_MERGE,
2257132718Skan  [`if test $gcc_cv_as_shf_merge = yes; then echo 1; else echo 0; fi`],
2258132718Skan[Define 0/1 if your assembler supports marking sections with SHF_MERGE flag.])
2259132718Skan
2260169689Skangcc_GAS_CHECK_FEATURE(COMDAT group support, gcc_cv_as_comdat_group,
2261169689Skan [elf,2,16,0], [--fatal-warnings],
2262169689Skan [.section .text,"axG",@progbits,.foo,comdat])
2263169689Skanif test $gcc_cv_as_comdat_group = yes; then
2264169689Skan  gcc_cv_as_comdat_group_percent=no
2265169689Skanelse
2266169689Skan gcc_GAS_CHECK_FEATURE(COMDAT group support, gcc_cv_as_comdat_group_percent,
2267169689Skan   [elf,2,16,0], [--fatal-warnings],
2268169689Skan   [.section .text,"axG",%progbits,.foo,comdat])
2269169689Skanfi
2270169689Skanif test $in_tree_ld != yes && test x"$ld_vers" != x; then
2271169689Skan  comdat_group=yes
2272169689Skan  if test 0"$ld_date" -lt 20050308; then
2273169689Skan    if test -n "$ld_date"; then
2274169689Skan      # If there was date string, but was earlier than 2005-03-08, fail
2275169689Skan      comdat_group=no
2276169689Skan    elif test "$ld_vers_major" -lt 2; then
2277169689Skan      comdat_group=no
2278169689Skan    elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 16; then
2279169689Skan      comdat_group=no
2280169689Skan    fi
2281169689Skan  fi
2282169689Skanelse
2283169689Skan  # assume linkers other than GNU ld don't support COMDAT group
2284169689Skan  comdat_group=no
2285169689Skanfi
2286169689Skanif test $comdat_group = no; then
2287169689Skan  gcc_cv_as_comdat_group=no
2288169689Skan  gcc_cv_as_comdat_group_percent=no
2289169689Skanfi
2290169689SkanAC_DEFINE_UNQUOTED(HAVE_COMDAT_GROUP,
2291169689Skan  [`if test $gcc_cv_as_comdat_group = yes || test $gcc_cv_as_comdat_group_percent = yes; then echo 1; else echo 0; fi`],
2292169689Skan[Define 0/1 if your assembler and linker support COMDAT groups.])
2293169689Skan
2294132718Skan# Thread-local storage - the check is heavily parametrized.
2295132718Skanconftest_s=
2296132718Skantls_first_major=
2297132718Skantls_first_minor=
2298132718Skantls_as_opt=
2299132718Skancase "$target" in
2300132718Skanchangequote(,)dnl
2301132718Skan  alpha*-*-*)
2302132718Skan    conftest_s='
2303132718Skan	.section ".tdata","awT",@progbits
2304132718Skanfoo:	.long	25
2305132718Skan	.text
2306132718Skan	ldq	$27,__tls_get_addr($29)		!literal!1
2307132718Skan	lda	$16,foo($29)			!tlsgd!1
2308132718Skan	jsr	$26,($27),__tls_get_addr	!lituse_tlsgd!1
2309132718Skan	ldq	$27,__tls_get_addr($29)		!literal!2
2310132718Skan	lda	$16,foo($29)			!tlsldm!2
2311132718Skan	jsr	$26,($27),__tls_get_addr	!lituse_tlsldm!2
2312132718Skan	ldq	$1,foo($29)			!gotdtprel
2313132718Skan	ldah	$2,foo($29)			!dtprelhi
2314132718Skan	lda	$3,foo($2)			!dtprello
2315132718Skan	lda	$4,foo($29)			!dtprel
2316132718Skan	ldq	$1,foo($29)			!gottprel
2317132718Skan	ldah	$2,foo($29)			!tprelhi
2318132718Skan	lda	$3,foo($2)			!tprello
2319132718Skan	lda	$4,foo($29)			!tprel'
2320132718Skan	tls_first_major=2
2321132718Skan	tls_first_minor=13
2322132718Skan	tls_as_opt=--fatal-warnings
2323132718Skan	;;
2324169689Skan  frv*-*-*)
2325169689Skan    conftest_s='
2326169689Skan	.section ".tdata","awT",@progbits
2327169689Skanx:      .long   25
2328169689Skan        .text
2329169689Skan        call    #gettlsoff(x)'
2330169689Skan	tls_first_major=2
2331169689Skan	tls_first_minor=14
2332169689Skan	;;
2333169689Skan  hppa*-*-linux*)
2334169689Skan    conftest_s='
2335169689Skant1:	.reg	%r20
2336169689Skant2:	.reg	%r21
2337169689Skangp:	.reg	%r19
2338169689Skan	.section ".tdata","awT",@progbits
2339169689Skanfoo:	.long	25
2340169689Skan	.text
2341169689Skan	.align	4
2342169689Skan	addil LT%foo-$tls_gdidx$,gp
2343169689Skan	ldo RT%foo-$tls_gdidx$(%r1),%arg0
2344169689Skan	b __tls_get_addr
2345169689Skan	nop 		
2346169689Skan	addil LT%foo-$tls_ldidx$,gp
2347169689Skan	b __tls_get_addr
2348169689Skan	ldo RT%foo-$tls_ldidx$(%r1),%arg0
2349169689Skan	addil LR%foo-$tls_dtpoff$,%ret0
2350169689Skan	ldo RR%foo-$tls_dtpoff$(%r1),%t1
2351169689Skan	mfctl %cr27,%t1 		
2352169689Skan	addil LT%foo-$tls_ieoff$,gp
2353169689Skan	ldw RT%foo-$tls_ieoff$(%r1),%t2
2354169689Skan	add %t1,%t2,%t3 		
2355169689Skan	mfctl %cr27,%t1 		
2356169689Skan	addil LR%foo-$tls_leoff$,%t1
2357169689Skan	ldo RR%foo-$tls_leoff$(%r1),%t2'
2358169689Skan	tls_first_major=2
2359169689Skan	tls_first_minor=15
2360169689Skan	tls_as_opt=--fatal-warnings
2361169689Skan	;;
2362169689Skan  arm*-*-*)
2363169689Skan    conftest_s='
2364169689Skan	.section ".tdata","awT",%progbits
2365169689Skanfoo:	.long	25
2366169689Skan	.text
2367169689Skan.word foo(gottpoff)
2368169689Skan.word foo(tpoff)
2369169689Skan.word foo(tlsgd)
2370169689Skan.word foo(tlsldm)
2371169689Skan.word foo(tlsldo)'
2372169689Skan	tls_first_major=2
2373169689Skan	tls_first_minor=17
2374169689Skan	;;
2375132718Skan  i[34567]86-*-*)
2376132718Skan    conftest_s='
2377132718Skan	.section ".tdata","awT",@progbits
2378132718Skanfoo:	.long	25
2379132718Skan	.text
2380132718Skan	movl	%gs:0, %eax
2381132718Skan	leal	foo@TLSGD(,%ebx,1), %eax
2382132718Skan	leal	foo@TLSLDM(%ebx), %eax
2383132718Skan	leal	foo@DTPOFF(%eax), %edx
2384132718Skan	movl	foo@GOTTPOFF(%ebx), %eax
2385132718Skan	subl	foo@GOTTPOFF(%ebx), %eax
2386132718Skan	addl	foo@GOTNTPOFF(%ebx), %eax
2387132718Skan	movl	foo@INDNTPOFF, %eax
2388132718Skan	movl	$foo@TPOFF, %eax
2389132718Skan	subl	$foo@TPOFF, %eax
2390132718Skan	leal	foo@NTPOFF(%ecx), %eax'
2391132718Skan	tls_first_major=2
2392132718Skan	tls_first_minor=14
2393132718Skan	tls_as_opt=--fatal-warnings
2394132718Skan	;;
2395132718Skan  x86_64-*-*)
2396132718Skan    conftest_s='
2397132718Skan	.section ".tdata","awT",@progbits
2398132718Skanfoo:	.long	25
2399132718Skan	.text
2400132718Skan	movq	%fs:0, %rax
2401132718Skan	leaq	foo@TLSGD(%rip), %rdi
2402132718Skan	leaq	foo@TLSLD(%rip), %rdi
2403132718Skan	leaq	foo@DTPOFF(%rax), %rdx
2404132718Skan	movq	foo@GOTTPOFF(%rip), %rax
2405132718Skan	movq	$foo@TPOFF, %rax'
2406132718Skan	tls_first_major=2
2407132718Skan	tls_first_minor=14
2408132718Skan	tls_as_opt=--fatal-warnings
2409132718Skan	;;
2410132718Skan  ia64-*-*)
2411132718Skan    conftest_s='
2412132718Skan	.section ".tdata","awT",@progbits
2413132718Skanfoo:	data8	25
2414132718Skan	.text
2415132718Skan	addl	r16 = @ltoff(@dtpmod(foo#)), gp
2416132718Skan	addl	r17 = @ltoff(@dtprel(foo#)), gp
2417132718Skan	addl	r18 = @ltoff(@tprel(foo#)), gp
2418132718Skan	addl	r19 = @dtprel(foo#), gp
2419132718Skan	adds	r21 = @dtprel(foo#), r13
2420132718Skan	movl	r23 = @dtprel(foo#)
2421132718Skan	addl	r20 = @tprel(foo#), gp
2422132718Skan	adds	r22 = @tprel(foo#), r13
2423132718Skan	movl	r24 = @tprel(foo#)'
2424132718Skan	tls_first_major=2
2425132718Skan	tls_first_minor=13
2426132718Skan	tls_as_opt=--fatal-warnings
2427132718Skan	;;
2428169689Skan  mips*-*-*)
2429169689Skan    conftest_s='
2430169689Skan	.section .tdata,"awT",@progbits
2431169689Skanx:
2432169689Skan	.word 2
2433169689Skan	.text
2434169689Skan	addiu $4, $28, %tlsgd(x)
2435169689Skan	addiu $4, $28, %tlsldm(x)
2436169689Skan	lui $4, %dtprel_hi(x)
2437169689Skan	addiu $4, $4, %dtprel_lo(x)
2438169689Skan	lw $4, %gottprel(x)($28)
2439169689Skan	lui $4, %tprel_hi(x)
2440169689Skan	addiu $4, $4, %tprel_lo(x)'
2441169689Skan	tls_first_major=2
2442169689Skan	tls_first_minor=16
2443169689Skan	tls_as_opt='-32 --fatal-warnings'
2444169689Skan	;;
2445132718Skan  powerpc-*-*)
2446132718Skan    conftest_s='
2447132718Skan	.section ".tdata","awT",@progbits
2448132718Skan	.align 2
2449132718Skanld0:	.space 4
2450132718Skanld1:	.space 4
2451132718Skanx1:	.space 4
2452132718Skanx2:	.space 4
2453132718Skanx3:	.space 4
2454132718Skan	.text
2455132718Skan	addi 3,31,ld0@got@tlsgd
2456132718Skan	bl __tls_get_addr
2457132718Skan	addi 3,31,x1@got@tlsld
2458132718Skan	bl __tls_get_addr
2459132718Skan	addi 9,3,x1@dtprel
2460132718Skan	addis 9,3,x2@dtprel@ha
2461132718Skan	addi 9,9,x2@dtprel@l
2462132718Skan	lwz 9,x3@got@tprel(31)
2463132718Skan	add 9,9,x@tls
2464132718Skan	addi 9,2,x1@tprel
2465132718Skan	addis 9,2,x2@tprel@ha
2466132718Skan	addi 9,9,x2@tprel@l'
2467132718Skan	tls_first_major=2
2468132718Skan	tls_first_minor=14
2469132718Skan	tls_as_opt="-a32 --fatal-warnings"
2470132718Skan	;;
2471132718Skan  powerpc64-*-*)
2472132718Skan    conftest_s='
2473132718Skan	.section ".tdata","awT",@progbits
2474132718Skan	.align 3
2475132718Skanld0:	.space 8
2476132718Skanld1:	.space 8
2477132718Skanx1:	.space 8
2478132718Skanx2:	.space 8
2479132718Skanx3:	.space 8
2480132718Skan	.text
2481132718Skan	addi 3,2,ld0@got@tlsgd
2482132718Skan	bl .__tls_get_addr
2483132718Skan	nop
2484132718Skan	addi 3,2,ld1@toc
2485132718Skan	bl .__tls_get_addr
2486132718Skan	nop
2487132718Skan	addi 3,2,x1@got@tlsld
2488132718Skan	bl .__tls_get_addr
2489132718Skan	nop
2490132718Skan	addi 9,3,x1@dtprel
2491132718Skan	bl .__tls_get_addr
2492132718Skan	nop
2493132718Skan	addis 9,3,x2@dtprel@ha
2494132718Skan	addi 9,9,x2@dtprel@l
2495132718Skan	bl .__tls_get_addr
2496132718Skan	nop
2497132718Skan	ld 9,x3@got@dtprel(2)
2498132718Skan	add 9,9,3
2499132718Skan	bl .__tls_get_addr
2500132718Skan	nop'
2501132718Skan	tls_first_major=2
2502132718Skan	tls_first_minor=14
2503132718Skan	tls_as_opt="-a64 --fatal-warnings"
2504132718Skan	;;
2505132718Skan  s390-*-*)
2506132718Skan    conftest_s='
2507132718Skan	.section ".tdata","awT",@progbits
2508132718Skanfoo:	.long	25
2509132718Skan	.text
2510132718Skan	.long	foo@TLSGD
2511132718Skan	.long	foo@TLSLDM
2512132718Skan	.long	foo@DTPOFF
2513132718Skan	.long	foo@NTPOFF
2514132718Skan	.long	foo@GOTNTPOFF
2515132718Skan	.long	foo@INDNTPOFF
2516132718Skan	l	%r1,foo@GOTNTPOFF(%r12)
2517132718Skan	l	%r1,0(%r1):tls_load:foo
2518132718Skan	bas	%r14,0(%r1,%r13):tls_gdcall:foo
2519132718Skan	bas	%r14,0(%r1,%r13):tls_ldcall:foo'
2520132718Skan	tls_first_major=2
2521132718Skan	tls_first_minor=14
2522132718Skan	tls_as_opt="-m31 --fatal-warnings"
2523132718Skan	;;
2524132718Skan  s390x-*-*)
2525132718Skan    conftest_s='
2526132718Skan	.section ".tdata","awT",@progbits
2527132718Skanfoo:	.long	25
2528132718Skan	.text
2529132718Skan	.quad	foo@TLSGD
2530132718Skan	.quad	foo@TLSLDM
2531132718Skan	.quad	foo@DTPOFF
2532132718Skan	.quad	foo@NTPOFF
2533132718Skan	.quad	foo@GOTNTPOFF
2534132718Skan	lg	%r1,foo@GOTNTPOFF(%r12)
2535132718Skan	larl	%r1,foo@INDNTPOFF
2536132718Skan	brasl	%r14,__tls_get_offset@PLT:tls_gdcall:foo
2537132718Skan	brasl	%r14,__tls_get_offset@PLT:tls_ldcall:foo'
2538132718Skan	tls_first_major=2
2539132718Skan	tls_first_minor=14
2540132718Skan	tls_as_opt="-m64 -Aesame --fatal-warnings"
2541132718Skan	;;
2542132718Skan  sh-*-* | sh[34]-*-*)
2543132718Skan    conftest_s='
2544132718Skan	.section ".tdata","awT",@progbits
2545132718Skanfoo:	.long	25
2546132718Skan	.text
2547132718Skan	.long	foo@TLSGD
2548132718Skan	.long	foo@TLSLDM
2549132718Skan	.long	foo@DTPOFF
2550132718Skan	.long	foo@GOTTPOFF
2551132718Skan	.long	foo@TPOFF'
2552132718Skan	tls_first_major=2
2553132718Skan	tls_first_minor=13
2554132718Skan	tls_as_opt=--fatal-warnings
2555132718Skan	;;
2556132718Skan  sparc*-*-*)
2557132718Skan    case "$target" in
2558169689Skan      sparc*-sun-solaris2.[56789]*)
2559169689Skan	# TLS was introduced in the Solaris 9 4/04 release but
2560169689Skan	# we do not enable it by default on Solaris 9 either.
2561169689Skan	if test "x$enable_tls" = xyes ; then
2562169689Skan	  on_solaris=yes
2563169689Skan	else
2564169689Skan	  enable_tls=no;
2565169689Skan	fi
2566169689Skan	;;
2567132718Skan      sparc*-sun-solaris2.*)
2568132718Skan	on_solaris=yes
2569132718Skan	;;
2570132718Skan      *)
2571132718Skan	on_solaris=no
2572132718Skan	;;
2573132718Skan    esac
2574132718Skan    if test x$on_solaris = xyes && test x$gas_flag = xno; then
2575132718Skan      conftest_s='
2576132718Skan	.section ".tdata",#alloc,#write,#tls
2577132718Skanfoo:	.long	25
2578132718Skan	.text
2579132718Skan	sethi	%tgd_hi22(foo), %o0
2580132718Skan	add	%o0, %tgd_lo10(foo), %o1
2581132718Skan	add	%l7, %o1, %o0, %tgd_add(foo)
2582132718Skan	call	__tls_get_addr, %tgd_call(foo)
2583132718Skan	sethi	%tldm_hi22(foo), %l1
2584132718Skan	add	%l1, %tldm_lo10(foo), %l2
2585132718Skan	add	%l7, %l2, %o0, %tldm_add(foo)
2586132718Skan	call	__tls_get_addr, %tldm_call(foo)
2587132718Skan	sethi	%tldo_hix22(foo), %l3
2588132718Skan	xor	%l3, %tldo_lox10(foo), %l4
2589132718Skan	add	%o0, %l4, %l5, %tldo_add(foo)
2590132718Skan	sethi	%tie_hi22(foo), %o3
2591132718Skan	add	%o3, %tie_lo10(foo), %o3
2592132718Skan	ld	[%l7 + %o3], %o2, %tie_ld(foo)
2593132718Skan	add	%g7, %o2, %o4, %tie_add(foo)
2594132718Skan	sethi	%tle_hix22(foo), %l1
2595132718Skan	xor	%l1, %tle_lox10(foo), %o5
2596132718Skan	ld	[%g7 + %o5], %o1'
2597132718Skan	tls_first_major=0
2598132718Skan	tls_first_minor=0
2599132718Skan    else
2600132718Skan      conftest_s='
2601132718Skan	.section ".tdata","awT",@progbits
2602132718Skanfoo:	.long	25
2603132718Skan	.text
2604132718Skan	sethi	%tgd_hi22(foo), %o0
2605132718Skan	add	%o0, %tgd_lo10(foo), %o1
2606132718Skan	add	%l7, %o1, %o0, %tgd_add(foo)
2607132718Skan	call	__tls_get_addr, %tgd_call(foo)
2608132718Skan	sethi	%tldm_hi22(foo), %l1
2609132718Skan	add	%l1, %tldm_lo10(foo), %l2
2610132718Skan	add	%l7, %l2, %o0, %tldm_add(foo)
2611132718Skan	call	__tls_get_addr, %tldm_call(foo)
2612132718Skan	sethi	%tldo_hix22(foo), %l3
2613132718Skan	xor	%l3, %tldo_lox10(foo), %l4
2614132718Skan	add	%o0, %l4, %l5, %tldo_add(foo)
2615132718Skan	sethi	%tie_hi22(foo), %o3
2616132718Skan	add	%o3, %tie_lo10(foo), %o3
2617132718Skan	ld	[%l7 + %o3], %o2, %tie_ld(foo)
2618132718Skan	add	%g7, %o2, %o4, %tie_add(foo)
2619132718Skan	sethi	%tle_hix22(foo), %l1
2620132718Skan	xor	%l1, %tle_lox10(foo), %o5
2621132718Skan	ld	[%g7 + %o5], %o1'
2622132718Skan	tls_first_major=2
2623132718Skan	tls_first_minor=14
2624132718Skan	tls_as_opt="-32 --fatal-warnings"
2625132718Skan      fi
2626132718Skan	;;
2627132718Skanchangequote([,])dnl
2628132718Skanesac
2629169689Skanset_have_as_tls=no
2630169689Skanif test "x$enable_tls" = xno ; then
2631169689Skan  : # TLS explicitly disabled.
2632169689Skanelif test "x$enable_tls" = xyes ; then
2633169689Skan  set_have_as_tls=yes # TLS explicitly enabled.
2634169689Skanelif test -z "$tls_first_major"; then
2635132718Skan  : # If we don't have a check, assume no support.
2636132718Skanelse
2637132718Skan  gcc_GAS_CHECK_FEATURE(thread-local storage support, gcc_cv_as_tls,
2638132718Skan  [$tls_first_major,$tls_first_minor,0], [$tls_as_opt], [$conftest_s],,
2639169689Skan  [set_have_as_tls=yes])
2640132718Skanfi
2641169689Skanif test $set_have_as_tls = yes ; then
2642169689Skan  AC_DEFINE(HAVE_AS_TLS, 1,
2643169689Skan	    [Define if your assembler supports thread-local storage.])
2644169689Skanfi
2645132718Skan
2646132718Skan# Target-specific assembler checks.
2647132718Skan
2648169689SkanAC_MSG_CHECKING(linker -Bstatic/-Bdynamic option)
2649169689Skangcc_cv_ld_static_dynamic=no
2650169689Skanif test $in_tree_ld = yes ; then
2651169689Skan  if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 10; then
2652169689Skan    gcc_cv_ld_static_dynamic=yes
2653169689Skan  fi
2654169689Skanelif test x$gcc_cv_ld != x; then
2655169689Skan	# Check if linker supports -Bstatic/-Bdynamic option
2656169689Skan	if $gcc_cv_ld --help 2>/dev/null | grep -- -Bstatic > /dev/null \
2657169689Skan	  && $gcc_cv_ld --help 2>/dev/null | grep -- -Bdynamic > /dev/null; then
2658169689Skan		gcc_cv_ld_static_dynamic=yes
2659169689Skan	fi
2660169689Skanfi
2661169689Skanif test x"$gcc_cv_ld_static_dynamic" = xyes; then
2662169689Skan	AC_DEFINE(HAVE_LD_STATIC_DYNAMIC, 1,
2663169689Skan[Define if your linker supports -Bstatic/-Bdynamic option.])
2664169689Skanfi
2665169689SkanAC_MSG_RESULT($gcc_cv_ld_static_dynamic)
2666169689Skan
2667169689Skanif test x"$demangler_in_ld" = xyes; then
2668169689Skan  AC_MSG_CHECKING(linker --demangle support)
2669169689Skan  gcc_cv_ld_demangle=no
2670169689Skan  if test $in_tree_ld = yes; then
2671169689Skan    if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 14 -o "$gcc_cv_gld_major_version" -gt 2; then \
2672169689Skan      gcc_cv_ld_demangle=yes
2673169689Skan    fi
2674169689Skan  elif test x$gcc_cv_ld != x -a x"$gnu_ld" = xyes; then
2675169689Skan    # Check if the GNU linker supports --demangle option
2676169689Skan    if $gcc_cv_ld --help 2>/dev/null | grep no-demangle > /dev/null; then
2677169689Skan      gcc_cv_ld_demangle=yes
2678169689Skan    fi
2679169689Skan  fi
2680169689Skan  if test x"$gcc_cv_ld_demangle" = xyes; then
2681169689Skan    AC_DEFINE(HAVE_LD_DEMANGLE, 1,
2682169689Skan[Define if your linker supports --demangle option.])
2683169689Skan  fi
2684169689Skan  AC_MSG_RESULT($gcc_cv_ld_demangle)
2685169689Skanfi
2686169689Skan
2687132718Skancase "$target" in
2688132718Skan  # All TARGET_ABI_OSF targets.
2689132718Skan  alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*)
2690132718Skan    gcc_GAS_CHECK_FEATURE([explicit relocation support],
2691132718Skan	gcc_cv_as_alpha_explicit_relocs, [2,12,0],,
2692132718Skan[	.set nomacro
2693132718Skan	.text
2694132718Skan	extbl	$3, $2, $3	!lituse_bytoff!1
2695132718Skan	ldq	$2, a($29)	!literal!1
2696132718Skan	ldq	$4, b($29)	!literal!2
2697132718Skan	ldq_u	$3, 0($2)	!lituse_base!1
2698132718Skan	ldq	$27, f($29)	!literal!5
2699132718Skan	jsr	$26, ($27), f	!lituse_jsr!5
2700132718Skan	ldah	$29, 0($26)	!gpdisp!3
2701132718Skan	lda	$0, c($29)	!gprel
2702132718Skan	ldah	$1, d($29)	!gprelhigh
2703132718Skan	lda	$1, d($1)	!gprellow
2704132718Skan	lda	$29, 0($29)	!gpdisp!3],,
2705132718Skan    [AC_DEFINE(HAVE_AS_EXPLICIT_RELOCS, 1,
2706132718Skan  [Define if your assembler supports explicit relocations.])])
2707161651Skan    gcc_GAS_CHECK_FEATURE([jsrdirect relocation support],
2708161651Skan	gcc_cv_as_alpha_jsrdirect_relocs, [2,16,90],,
2709161651Skan[	.set nomacro
2710161651Skan	.text
2711161651Skan	ldq	$27, a($29)	!literal!1
2712161651Skan	jsr	$26, ($27), a	!lituse_jsrdirect!1],,
2713161651Skan    [AC_DEFINE(HAVE_AS_JSRDIRECT_RELOCS, 1,
2714161651Skan  [Define if your assembler supports the lituse_jsrdirect relocation.])])
2715132718Skan    ;;
2716132718Skan
2717132718Skan  cris-*-*)
2718132718Skan    gcc_GAS_CHECK_FEATURE([-no-mul-bug-abort option],
2719132718Skan      gcc_cv_as_cris_no_mul_bug,[2,15,91],
2720132718Skan      [-no-mul-bug-abort], [.text],,
2721132718Skan      [AC_DEFINE(HAVE_AS_NO_MUL_BUG_ABORT_OPTION, 1,
2722132718Skan		[Define if your assembler supports the -no-mul-bug-abort option.])])
2723132718Skan    ;;
2724132718Skan
2725132718Skan  sparc*-*-*)
2726132718Skan    gcc_GAS_CHECK_FEATURE([.register], gcc_cv_as_sparc_register_op,,,
2727132718Skan      [.register %g2, #scratch],,
2728132718Skan      [AC_DEFINE(HAVE_AS_REGISTER_PSEUDO_OP, 1,
2729132718Skan		[Define if your assembler supports .register.])])
2730132718Skan
2731132718Skan    gcc_GAS_CHECK_FEATURE([-relax option], gcc_cv_as_sparc_relax,,
2732132718Skan      [-relax], [.text],,
2733132718Skan      [AC_DEFINE(HAVE_AS_RELAX_OPTION, 1,
2734132718Skan		[Define if your assembler supports -relax option.])])
2735132718Skan
2736132718Skan    gcc_GAS_CHECK_FEATURE([unaligned pcrel relocs],
2737132718Skan      gcc_cv_as_sparc_ua_pcrel,,
2738132718Skan      [-K PIC],
2739132718Skan[.text
2740132718Skanfoo:
2741132718Skan	nop
2742132718Skan.data
2743132718Skan.align 4
2744132718Skan.byte 0
2745132718Skan.uaword %r_disp32(foo)],
2746132718Skan      [if test x$gcc_cv_ld != x \
2747132718Skan       && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
2748132718Skan	 gcc_cv_as_sparc_ua_pcrel=yes
2749132718Skan       fi
2750132718Skan       rm -f conftest],
2751132718Skan      [AC_DEFINE(HAVE_AS_SPARC_UA_PCREL, 1,
2752132718Skan		[Define if your assembler and linker support unaligned PC relative relocs.])
2753132718Skan
2754132718Skan      gcc_GAS_CHECK_FEATURE([unaligned pcrel relocs against hidden symbols],
2755132718Skan	gcc_cv_as_sparc_ua_pcrel_hidden,,
2756132718Skan	[-K PIC],
2757132718Skan[.data
2758132718Skan.align 4
2759132718Skan.byte 0x31
2760132718Skan.uaword %r_disp32(foo)
2761132718Skan.byte 0x32, 0x33, 0x34
2762132718Skan.global foo
2763132718Skan.hidden foo
2764132718Skanfoo:
2765132718Skan.skip 4],
2766132718Skan	[if test x$gcc_cv_ld != x && test x$gcc_cv_objdump != x \
2767132718Skan	 && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1 \
2768132718Skan	 && $gcc_cv_objdump -s -j .data conftest 2> /dev/null \
2769132718Skan	    | grep ' 31000000 07323334' > /dev/null 2>&1; then
2770132718Skan	    if $gcc_cv_objdump -R conftest 2> /dev/null \
2771132718Skan	       | grep 'DISP32' > /dev/null 2>&1; then
2772132718Skan		:
2773132718Skan	    else
2774132718Skan		gcc_cv_as_sparc_ua_pcrel_hidden=yes
2775132718Skan	    fi
2776132718Skan	 fi
2777132718Skan	 rm -f conftest],
2778132718Skan	 [AC_DEFINE(HAVE_AS_SPARC_UA_PCREL_HIDDEN, 1,
2779132718Skan		   [Define if your assembler and linker support unaligned PC relative relocs against hidden symbols.])])
2780132718Skan    ]) # unaligned pcrel relocs
2781132718Skan
2782132718Skan    gcc_GAS_CHECK_FEATURE([offsetable %lo()],
2783132718Skan      gcc_cv_as_sparc_offsetable_lo10,,
2784132718Skan      [-xarch=v9],
2785132718Skan[.text
2786132718Skan	or %g1, %lo(ab) + 12, %g1
2787132718Skan	or %g1, %lo(ab + 12), %g1],
2788132718Skan      [if test x$gcc_cv_objdump != x \
2789132718Skan       && $gcc_cv_objdump -s -j .text conftest.o 2> /dev/null \
2790132718Skan          | grep ' 82106000 82106000' > /dev/null 2>&1; then
2791146895Skan	 gcc_cv_as_sparc_offsetable_lo10=yes
2792132718Skan       fi],
2793132718Skan       [AC_DEFINE(HAVE_AS_OFFSETABLE_LO10, 1,
2794132718Skan	         [Define if your assembler supports offsetable %lo().])])
2795132718Skan    ;;
2796132718Skan
2797132718Skanchangequote(,)dnl
2798132718Skan  i[34567]86-*-* | x86_64-*-*)
2799132718Skanchangequote([,])dnl
2800169689Skan    case $target_os in
2801169689Skan      cygwin* | pe | mingw32*)
2802169689Skan	# Used for DWARF 2 in PE
2803169689Skan	gcc_GAS_CHECK_FEATURE([.secrel32 relocs],
2804169689Skan	  gcc_cv_as_ix86_pe_secrel32,
2805169689Skan	  [2,15,91],,
2806169689Skan[.text
2807169689Skanfoo:	nop
2808169689Skan.data
2809169689Skan	.secrel32 foo],
2810169689Skan	  [if test x$gcc_cv_ld != x \
2811169689Skan	   && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1; then
2812169689Skan	     gcc_cv_as_ix86_pe_secrel32=yes
2813169689Skan	   fi
2814169689Skan	   rm -f conftest],
2815169689Skan	  [AC_DEFINE(HAVE_GAS_PE_SECREL32_RELOC, 1,
2816169689Skan	    [Define if your assembler and linker support 32-bit section relative relocs via '.secrel32 label'.])])
2817169689Skan	;;
2818169689Skan    esac
2819169689Skan
2820132718Skan    gcc_GAS_CHECK_FEATURE([filds and fists mnemonics],
2821132718Skan       gcc_cv_as_ix86_filds_fists,
2822132718Skan      [2,9,0],, [filds mem; fists mem],,
2823132718Skan      [AC_DEFINE(HAVE_GAS_FILDS_FISTS, 1,
2824132718Skan        [Define if your assembler uses the new HImode fild and fist notation.])])
2825132718Skan
2826132718Skan    gcc_GAS_CHECK_FEATURE([cmov syntax],
2827132718Skan      gcc_cv_as_ix86_cmov_sun_syntax,,,
2828132718Skan      [cmovl.l %edx, %eax],,
2829132718Skan      [AC_DEFINE(HAVE_AS_IX86_CMOV_SUN_SYNTAX, 1,
2830132718Skan        [Define if your assembler supports the Sun syntax for cmov.])])
2831132718Skan
2832169689Skan    gcc_GAS_CHECK_FEATURE([ffreep mnemonic],
2833169689Skan      gcc_cv_as_ix86_ffreep,,,
2834169689Skan      [ffreep %st(1)],,
2835169689Skan      [AC_DEFINE(HAVE_AS_IX86_FFREEP, 1,
2836169689Skan        [Define if your assembler supports the ffreep mnemonic.])])
2837169689Skan
2838132718Skan    # This one is used unconditionally by i386.[ch]; it is to be defined
2839132718Skan    # to 1 if the feature is present, 0 otherwise.
2840132718Skan    gcc_GAS_CHECK_FEATURE([GOTOFF in data],
2841132718Skan        gcc_cv_as_ix86_gotoff_in_data, [2,11,0],,
2842132718Skan[	.text
2843132718Skan.L0:
2844132718Skan	nop
2845132718Skan	.data
2846132718Skan	.long .L0@GOTOFF])
2847132718Skan    AC_DEFINE_UNQUOTED(HAVE_AS_GOTOFF_IN_DATA,
2848132718Skan      [`if test $gcc_cv_as_ix86_gotoff_in_data = yes; then echo 1; else echo 0; fi`],
2849132718Skan      [Define true if the assembler supports '.long foo@GOTOFF'.])
2850132718Skan    ;;
2851132718Skan
2852132718Skan  ia64*-*-*)
2853132718Skan    gcc_GAS_CHECK_FEATURE([ltoffx and ldxmov relocs],
2854132718Skan	gcc_cv_as_ia64_ltoffx_ldxmov_relocs, [2,14,0],,
2855132718Skan[	.text
2856132718Skan	addl r15 = @ltoffx(x#), gp
2857132718Skan	;;
2858132718Skan	ld8.mov r16 = [[r15]], x#],,
2859132718Skan    [AC_DEFINE(HAVE_AS_LTOFFX_LDXMOV_RELOCS, 1,
2860132718Skan	  [Define if your assembler supports ltoffx and ldxmov relocations.])])
2861132718Skan
2862132718Skan    ;;
2863132718Skan
2864132718Skan  powerpc*-*-*)
2865132718Skan    case $target in
2866169689Skan      *-*-aix*) conftest_s='	.machine "pwr5"
2867169689Skan	.csect .text[[PR]]
2868132718Skan	mfcr 3,128';;
2869169689Skan      *-*-darwin*)
2870169689Skan	gcc_GAS_CHECK_FEATURE([.machine directive support],
2871169689Skan	  gcc_cv_as_machine_directive,,,
2872169689Skan	  [	.machine ppc7400])
2873169689Skan	if test x$gcc_cv_as_machine_directive != xyes; then
2874169689Skan	  echo "*** This target requires an assembler supporting \".machine\"" >&2
2875169689Skan	  echo you can get it from: ftp://gcc.gnu.org/pub/gcc/infrastructure/cctools-528.5.dmg >&2
2876169689Skan	  test x$build = x$target && exit 1
2877169689Skan	fi
2878169689Skan	conftest_s='	.text
2879132718Skan	mfcr r3,128';;
2880169689Skan      *) conftest_s='	.machine power4
2881169689Skan	.text
2882132718Skan	mfcr 3,128';;
2883132718Skan    esac
2884132718Skan
2885132718Skan    gcc_GAS_CHECK_FEATURE([mfcr field support],
2886132718Skan      gcc_cv_as_powerpc_mfcrf, [2,14,0],,
2887132718Skan      [$conftest_s],,
2888132718Skan      [AC_DEFINE(HAVE_AS_MFCRF, 1,
2889132718Skan	  [Define if your assembler supports mfcr field.])])
2890169689Skan
2891169689Skan    case $target in
2892169689Skan      *-*-aix*) conftest_s='	.machine "pwr5"
2893169689Skan	.csect .text[[PR]]
2894169689Skan	popcntb 3,3';;
2895169689Skan      *) conftest_s='	.machine power5
2896169689Skan	.text
2897169689Skan	popcntb 3,3';;
2898169689Skan    esac
2899169689Skan
2900169689Skan    gcc_GAS_CHECK_FEATURE([popcntb support],
2901169689Skan      gcc_cv_as_powerpc_popcntb, [2,17,0],,
2902169689Skan      [$conftest_s],,
2903169689Skan      [AC_DEFINE(HAVE_AS_POPCNTB, 1,
2904169689Skan	  [Define if your assembler supports popcntb field.])])
2905169689Skan
2906169689Skan    case $target in
2907169689Skan      *-*-aix*) conftest_s='	.machine "pwr5x"
2908169689Skan	.csect .text[[PR]]
2909169689Skan	frin 1,1';;
2910169689Skan      *) conftest_s='	.machine power5
2911169689Skan	.text
2912169689Skan	frin 1,1';;
2913169689Skan    esac
2914169689Skan
2915169689Skan    gcc_GAS_CHECK_FEATURE([fp round support],
2916169689Skan      gcc_cv_as_powerpc_fprnd, [2,17,0],,
2917169689Skan      [$conftest_s],,
2918169689Skan      [AC_DEFINE(HAVE_AS_FPRND, 1,
2919169689Skan	  [Define if your assembler supports fprnd.])])
2920169689Skan
2921169689Skan    case $target in
2922169689Skan      *-*-aix*) conftest_s='	.csect .text[[PR]]
2923169689SkanLCF..0:
2924169689Skan	addis 11,30,_GLOBAL_OFFSET_TABLE_-LCF..0@ha';;
2925169689Skan      *-*-darwin*)
2926169689Skan	conftest_s='	.text
2927169689SkanLCF0:
2928169689Skan	addis r11,r30,_GLOBAL_OFFSET_TABLE_-LCF0@ha';;
2929169689Skan      *) conftest_s='	.text
2930169689Skan.LCF0:
2931169689Skan	addis 11,30,_GLOBAL_OFFSET_TABLE_-.LCF0@ha';;
2932169689Skan    esac
2933169689Skan
2934169689Skan    gcc_GAS_CHECK_FEATURE([rel16 relocs],
2935169689Skan      gcc_cv_as_powerpc_rel16, [2,17,0], -a32,
2936169689Skan      [$conftest_s],,
2937169689Skan      [AC_DEFINE(HAVE_AS_REL16, 1,
2938169689Skan	  [Define if your assembler supports R_PPC_REL16 relocs.])])
2939132718Skan    ;;
2940132718Skan
2941132718Skan  mips*-*-*)
2942132718Skan    gcc_GAS_CHECK_FEATURE([explicit relocation support],
2943132718Skan      gcc_cv_as_mips_explicit_relocs, [2,14,0],,
2944132718Skan[	lw $4,%gp_rel(foo)($4)],,
2945132718Skan      [if test x$target_cpu_default = x
2946132718Skan       then target_cpu_default=MASK_EXPLICIT_RELOCS
2947132718Skan       else target_cpu_default="($target_cpu_default)|MASK_EXPLICIT_RELOCS"
2948132718Skan       fi])
2949169689Skan    ;;
2950169689Skanesac
2951132718Skan
2952169689Skan# Mips and HP-UX need the GNU assembler.
2953169689Skan# Linux on IA64 might be able to use the Intel assembler.
2954169689Skan
2955169689Skancase "$target" in
2956169689Skan  mips*-*-* | *-*-hpux* )
2957169689Skan    if test x$gas_flag = xyes \
2958169689Skan       || test x"$host" != x"$build" \
2959169689Skan       || test ! -x "$gcc_cv_as" \
2960169689Skan       || "$gcc_cv_as" -v < /dev/null 2>&1 | grep GNU > /dev/null; then
2961169689Skan      :
2962169689Skan    else
2963169689Skan      echo "*** This configuration requires the GNU assembler" >&2
2964169689Skan      exit 1
2965169689Skan    fi
2966132718Skan    ;;
2967132718Skanesac
2968169689Skan
2969132718Skan# ??? Not all targets support dwarf2 debug_line, even within a version
2970132718Skan# of gas.  Moreover, we need to emit a valid instruction to trigger any
2971132718Skan# info to the output file.  So, as supported targets are added to gas 2.11,
2972132718Skan# add some instruction here to (also) show we expect this might work.
2973132718Skan# ??? Once 2.11 is released, probably need to add first known working
2974132718Skan# version to the per-target configury.
2975132718Skancase "$target" in
2976132718Skan  i?86*-*-* | mips*-*-* | alpha*-*-* | powerpc*-*-* | sparc*-*-* | m68*-*-* \
2977132718Skan  | x86_64*-*-* | hppa*-*-* | arm*-*-* | strongarm*-*-* | xscale*-*-* \
2978169689Skan  | xstormy16*-*-* | cris-*-* | xtensa-*-* | bfin-*-* | score*-*-*)
2979132718Skan    insn="nop"
2980132718Skan    ;;
2981132718Skan  ia64*-*-* | s390*-*-*)
2982132718Skan    insn="nop 0"
2983132718Skan    ;;
2984132718Skan  mmix-*-*)
2985132718Skan    insn="swym 0"
2986132718Skan    ;;
2987132718Skanesac
2988132718Skanif test x"$insn" != x; then
2989132718Skan conftest_s="\
2990132718Skan	.file 1 \"conftest.s\"
2991132718Skan	.loc 1 3 0
2992132718Skan	$insn"
2993132718Skan gcc_GAS_CHECK_FEATURE([dwarf2 debug_line support],
2994132718Skan  gcc_cv_as_dwarf2_debug_line,
2995132718Skan  [elf,2,11,0],, [$conftest_s],
2996169689Skan  [if test x$gcc_cv_objdump != x \
2997169689Skan   && $gcc_cv_objdump -h conftest.o 2> /dev/null \
2998169689Skan      | grep debug_line > /dev/null 2>&1; then
2999132718Skan     gcc_cv_as_dwarf2_debug_line=yes
3000132718Skan   fi])
3001132718Skan
3002132718Skan# The .debug_line file table must be in the exact order that
3003132718Skan# we specified the files, since these indices are also used
3004132718Skan# by DW_AT_decl_file.  Approximate this test by testing if
3005132718Skan# the assembler bitches if the same index is assigned twice.
3006132718Skan gcc_GAS_CHECK_FEATURE([buggy dwarf2 .file directive],
3007132718Skan  gcc_cv_as_dwarf2_file_buggy,,,
3008132718Skan[	.file 1 "foo.s"
3009132718Skan	.file 1 "bar.s"])
3010132718Skan
3011132718Skan if test $gcc_cv_as_dwarf2_debug_line = yes \
3012132718Skan && test $gcc_cv_as_dwarf2_file_buggy = no; then
3013132718Skan	AC_DEFINE(HAVE_AS_DWARF2_DEBUG_LINE, 1,
3014132718Skan  [Define if your assembler supports dwarf2 .file/.loc directives,
3015132718Skan   and preserves file table indices exactly as given.])
3016132718Skan fi
3017132718Skan
3018132718Skan gcc_GAS_CHECK_FEATURE([--gdwarf2 option],
3019132718Skan  gcc_cv_as_gdwarf2_flag,
3020132718Skan  [elf,2,11,0], [--gdwarf2], [$insn],,
3021132718Skan  [AC_DEFINE(HAVE_AS_GDWARF2_DEBUG_FLAG, 1,
3022132718Skan[Define if your assembler supports the --gdwarf2 option.])])
3023132718Skan
3024132718Skan gcc_GAS_CHECK_FEATURE([--gstabs option],
3025132718Skan  gcc_cv_as_gstabs_flag,
3026132718Skan  [elf,2,11,0], [--gstabs], [$insn],
3027132718Skan  [# The native Solaris 9/Intel assembler doesn't understand --gstabs
3028132718Skan   # and warns about it, but still exits successfully.  So check for
3029132718Skan   # this.
3030132718Skan   if AC_TRY_COMMAND([$gcc_cv_as --gstabs -o conftest.o conftest.s 2>&1 | grep -i warning > /dev/null])
3031132718Skan   then :
3032132718Skan   else gcc_cv_as_gstabs_flag=yes
3033132718Skan   fi],
3034132718Skan  [AC_DEFINE(HAVE_AS_GSTABS_DEBUG_FLAG, 1,
3035132718Skan[Define if your assembler supports the --gstabs option.])])
3036132718Skanfi
3037132718Skan
3038132718SkanAC_MSG_CHECKING(linker read-only and read-write section mixing)
3039132718Skangcc_cv_ld_ro_rw_mix=unknown
3040132718Skanif test $in_tree_ld = yes ; then
3041132718Skan  if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 10 -o "$gcc_cv_gld_major_version" -gt 2 \
3042132718Skan     && test $in_tree_ld_is_elf = yes; then
3043132718Skan    gcc_cv_ld_ro_rw_mix=read-write
3044132718Skan  fi
3045132718Skanelif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x ; then
3046132718Skan  echo '.section myfoosect, "a"' > conftest1.s
3047132718Skan  echo '.section myfoosect, "aw"' > conftest2.s
3048132718Skan  echo '.byte 1' >> conftest2.s
3049132718Skan  echo '.section myfoosect, "a"' > conftest3.s
3050132718Skan  echo '.byte 0' >> conftest3.s
3051132718Skan  if $gcc_cv_as -o conftest1.o conftest1.s > /dev/null 2>&1 \
3052132718Skan     && $gcc_cv_as -o conftest2.o conftest2.s > /dev/null 2>&1 \
3053132718Skan     && $gcc_cv_as -o conftest3.o conftest3.s > /dev/null 2>&1 \
3054132718Skan     && $gcc_cv_ld -shared -o conftest1.so conftest1.o \
3055132718Skan	conftest2.o conftest3.o > /dev/null 2>&1; then
3056132718Skan    gcc_cv_ld_ro_rw_mix=`$gcc_cv_objdump -h conftest1.so \
3057132718Skan			 | sed -e '/myfoosect/!d' -e N`
3058132718Skan    if echo "$gcc_cv_ld_ro_rw_mix" | grep CONTENTS > /dev/null; then
3059132718Skan      if echo "$gcc_cv_ld_ro_rw_mix" | grep READONLY > /dev/null; then
3060132718Skan	gcc_cv_ld_ro_rw_mix=read-only
3061132718Skan      else
3062132718Skan	gcc_cv_ld_ro_rw_mix=read-write
3063132718Skan      fi
3064132718Skan    fi
3065132718Skan  fi
3066132718Skanchangequote(,)dnl
3067132718Skan  rm -f conftest.* conftest[123].*
3068132718Skanchangequote([,])dnl
3069132718Skanfi
3070132718Skanif test x$gcc_cv_ld_ro_rw_mix = xread-write; then
3071132718Skan	AC_DEFINE(HAVE_LD_RO_RW_SECTION_MIXING, 1,
3072132718Skan  [Define if your linker links a mix of read-only
3073132718Skan   and read-write sections into a read-write section.])
3074132718Skanfi
3075132718SkanAC_MSG_RESULT($gcc_cv_ld_ro_rw_mix)
3076132718Skan
3077132718SkanAC_MSG_CHECKING(linker PT_GNU_EH_FRAME support)
3078132718Skangcc_cv_ld_eh_frame_hdr=no
3079132718Skanif test $in_tree_ld = yes ; then
3080132718Skan  if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 \
3081132718Skan     && test $in_tree_ld_is_elf = yes; then
3082132718Skan    gcc_cv_ld_eh_frame_hdr=yes
3083132718Skan  fi
3084132718Skanelif test x$gcc_cv_ld != x; then
3085132718Skan	# Check if linker supports --eh-frame-hdr option
3086132718Skan	if $gcc_cv_ld --help 2>/dev/null | grep eh-frame-hdr > /dev/null; then
3087132718Skan		gcc_cv_ld_eh_frame_hdr=yes
3088132718Skan	fi
3089132718Skanfi
3090169689SkanGCC_TARGET_TEMPLATE([HAVE_LD_EH_FRAME_HDR])
3091132718Skanif test x"$gcc_cv_ld_eh_frame_hdr" = xyes; then
3092132718Skan	AC_DEFINE(HAVE_LD_EH_FRAME_HDR, 1,
3093132718Skan[Define if your linker supports --eh-frame-hdr option.])
3094132718Skanfi
3095132718SkanAC_MSG_RESULT($gcc_cv_ld_eh_frame_hdr)
3096132718Skan
3097132718SkanAC_MSG_CHECKING(linker position independent executable support)
3098132718Skangcc_cv_ld_pie=no
3099132718Skanif test $in_tree_ld = yes ; then
3100132718Skan  if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 15 -o "$gcc_cv_gld_major_version" -gt 2 \
3101132718Skan     && test $in_tree_ld_is_elf = yes; then
3102132718Skan    gcc_cv_ld_pie=yes
3103132718Skan  fi
3104132718Skanelif test x$gcc_cv_ld != x; then
3105132718Skan	# Check if linker supports -pie option
3106132718Skan	if $gcc_cv_ld --help 2>/dev/null | grep -- -pie > /dev/null; then
3107132718Skan		gcc_cv_ld_pie=yes
3108132718Skan	fi
3109132718Skanfi
3110132718Skanif test x"$gcc_cv_ld_pie" = xyes; then
3111132718Skan	AC_DEFINE(HAVE_LD_PIE, 1,
3112132718Skan[Define if your linker supports -pie option.])
3113132718Skanfi
3114132718SkanAC_MSG_RESULT($gcc_cv_ld_pie)
3115132718Skan
3116169689Skan# --------
3117169689Skan# UNSORTED
3118169689Skan# --------
3119169689Skan
3120169689SkanAC_CACHE_CHECK(linker --as-needed support,
3121169689Skangcc_cv_ld_as_needed,
3122169689Skan[gcc_cv_ld_as_needed=no
3123146895Skanif test $in_tree_ld = yes ; then
3124169689Skan  if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 \
3125169689Skan     && test $in_tree_ld_is_elf = yes; then
3126169689Skan    gcc_cv_ld_as_needed=yes
3127146895Skan  fi
3128146895Skanelif test x$gcc_cv_ld != x; then
3129169689Skan	# Check if linker supports --as-needed and --no-as-needed options
3130169689Skan	if $gcc_cv_ld --help 2>/dev/null | grep as-needed > /dev/null; then
3131169689Skan		gcc_cv_ld_as_needed=yes
3132146895Skan	fi
3133146895Skanfi
3134169689Skan])
3135169689Skanif test x"$gcc_cv_ld_as_needed" = xyes; then
3136169689Skan	AC_DEFINE(HAVE_LD_AS_NEEDED, 1,
3137169689Skan[Define if your linker supports --as-needed and --no-as-needed options.])
3138146895Skanfi
3139146895Skan
3140169689Skancase "$target:$tm_file" in
3141169689Skan  powerpc64*-*-linux* | powerpc*-*-linux*rs6000/biarch64.h*)
3142169689Skan    AC_CACHE_CHECK(linker support for omitting dot symbols,
3143169689Skan    gcc_cv_ld_no_dot_syms,
3144169689Skan    [gcc_cv_ld_no_dot_syms=no
3145132718Skan    if test $in_tree_ld = yes ; then
3146169689Skan      if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2; then
3147169689Skan        gcc_cv_ld_no_dot_syms=yes
3148132718Skan      fi
3149169689Skan    elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
3150169689Skan      cat > conftest1.s <<EOF
3151169689Skan	.text
3152169689Skan	bl .foo
3153169689SkanEOF
3154169689Skan      cat > conftest2.s <<EOF
3155169689Skan	.section ".opd","aw"
3156169689Skan	.align 3
3157169689Skan	.globl foo
3158169689Skan	.type foo,@function
3159169689Skanfoo:
3160169689Skan	.quad .LEfoo,.TOC.@tocbase,0
3161169689Skan	.text
3162169689Skan.LEfoo:
3163169689Skan	blr
3164169689Skan	.size foo,.-.LEfoo
3165169689SkanEOF
3166169689Skan      if $gcc_cv_as -a64 -o conftest1.o conftest1.s > /dev/null 2>&1 \
3167169689Skan         && $gcc_cv_as -a64 -o conftest2.o conftest2.s > /dev/null 2>&1 \
3168169689Skan         && $gcc_cv_ld -melf64ppc -o conftest conftest1.o conftest2.o > /dev/null 2>&1; then
3169169689Skan        gcc_cv_ld_no_dot_syms=yes
3170132718Skan      fi
3171169689Skan      rm -f conftest conftest1.o conftest2.o conftest1.s conftest2.s
3172132718Skan    fi
3173132718Skan    ])
3174169689Skan    if test x"$gcc_cv_ld_no_dot_syms" = xyes; then
3175169689Skan      AC_DEFINE(HAVE_LD_NO_DOT_SYMS, 1,
3176169689Skan    [Define if your PowerPC64 linker only needs function descriptor syms.])
3177132718Skan    fi
3178132718Skan    ;;
3179132718Skanesac
3180132718Skan
3181169689SkanAC_CACHE_CHECK(linker --sysroot support,
3182169689Skan  gcc_cv_ld_sysroot,
3183169689Skan  [gcc_cv_ld_sysroot=no
3184169689Skan  if test $in_tree_ld = yes ; then
3185169689Skan      if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 ; then
3186169689Skan        gcc_cv_ld_sysroot=yes
3187169689Skan      fi
3188169689Skan  elif test x$gcc_cv_ld != x; then 
3189169689Skan    if $gcc_cv_ld --help 2>/dev/null | grep sysroot > /dev/null; then
3190169689Skan      gcc_cv_ld_sysroot=yes
3191169689Skan    fi
3192169689Skan  fi])
3193169689Skanif test x"$gcc_cv_ld_sysroot" = xyes; then
3194169689Skan  AC_DEFINE(HAVE_LD_SYSROOT, 1,
3195169689Skan  [Define if your linker supports --sysroot.])
3196169689Skanfi	  
3197169689Skan
3198132718Skanif test x$with_sysroot = x && test x$host = x$target \
3199132718Skan   && test "$prefix" != "/usr" && test "x$prefix" != "x$local_prefix" ; then
3200132718Skan  AC_DEFINE_UNQUOTED(PREFIX_INCLUDE_DIR, "$prefix/include",
3201132718Skan[Define to PREFIX/include if cpp should also search that directory.])
3202132718Skanfi
3203132718Skan
3204169689Skan# Test for stack protector support in target C library.
3205169689Skancase "$target" in
3206169689Skan  *-*-linux*)
3207169689Skan    AC_CACHE_CHECK(__stack_chk_fail in target GNU C library,
3208169689Skan      gcc_cv_libc_provides_ssp,
3209169689Skan      [gcc_cv_libc_provides_ssp=no
3210169689Skan      if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
3211169689Skan	if test "x$with_sysroot" = x; then
3212169689Skan	  glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
3213169689Skan	elif test "x$with_sysroot" = xyes; then
3214169689Skan	  glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
3215132718Skan	else
3216169689Skan	  glibc_header_dir="${with_sysroot}/usr/include"
3217132718Skan	fi
3218169689Skan      else
3219169689Skan	glibc_header_dir=/usr/include
3220169689Skan      fi
3221169689Skan      # glibc 2.4 and later provides __stack_chk_fail and
3222169689Skan      # either __stack_chk_guard, or TLS access to stack guard canary.
3223169689Skan      if test -f $glibc_header_dir/features.h \
3224169689Skan	 && $EGREP '^@<:@ 	@:>@*#[ 	]*define[ 	]+__GNU_LIBRARY__[ 	]+([1-9][0-9]|[6-9])' \
3225169689Skan	    $glibc_header_dir/features.h > /dev/null; then
3226169689Skan	if $EGREP '^@<:@ 	@:>@*#[ 	]*define[ 	]+__GLIBC__[ 	]+([1-9][0-9]|[3-9])' \
3227169689Skan	   $glibc_header_dir/features.h > /dev/null; then
3228169689Skan	  gcc_cv_libc_provides_ssp=yes
3229169689Skan	elif $EGREP '^@<:@ 	@:>@*#[ 	]*define[ 	]+__GLIBC__[ 	]+2' \
3230169689Skan	     $glibc_header_dir/features.h > /dev/null \
3231169689Skan	     && $EGREP '^@<:@ 	@:>@*#[ 	]*define[ 	]+__GLIBC_MINOR__[ 	]+([1-9][0-9]|[4-9])' \
3232169689Skan	     $glibc_header_dir/features.h > /dev/null; then
3233169689Skan	  gcc_cv_libc_provides_ssp=yes
3234132718Skan	fi
3235169689Skan      fi]) ;;
3236169689Skan  *) gcc_cv_libc_provides_ssp=no ;;
3237169689Skanesac
3238169689Skanif test x$gcc_cv_libc_provides_ssp = xyes; then
3239169689Skan  AC_DEFINE(TARGET_LIBC_PROVIDES_SSP, 1,
3240169689Skan	    [Define if your target C library provides stack protector support])
3241132718Skanfi
3242132718Skan
3243169689Skan# Check if TFmode long double should be used by default or not.
3244169689Skan# Some glibc targets used DFmode long double, but with glibc 2.4
3245169689Skan# and later they can use TFmode.
3246169689Skancase "$target" in
3247169689Skan  powerpc*-*-*gnu* | \
3248169689Skan  sparc*-*-linux* | \
3249169689Skan  s390*-*-linux* | \
3250169689Skan  alpha*-*-linux*)
3251169689Skan    AC_ARG_WITH(long-double-128,
3252169689Skan[  --with-long-double-128  Use 128-bit long double by default.],
3253169689Skan      gcc_cv_target_ldbl128="$with_long_double_128",
3254169689Skan      [gcc_cv_target_ldbl128=no
3255169689Skan      if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
3256169689Skan	if test "x$with_sysroot" = x; then
3257169689Skan	  glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
3258169689Skan	elif test "x$with_sysroot" = xyes; then
3259169689Skan	  glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
3260169689Skan	else
3261169689Skan	  glibc_header_dir="${with_sysroot}/usr/include"
3262169689Skan	fi
3263169689Skan      else
3264169689Skan	glibc_header_dir=/usr/include
3265169689Skan      fi
3266132718Skanchangequote(,)dnl
3267169689Skan      grep '^[ 	]*#[ 	]*define[ 	][ 	]*__LONG_DOUBLE_MATH_OPTIONAL' \
3268169689Skan        $glibc_header_dir/bits/wordsize.h > /dev/null 2>&1 \
3269169689Skan      && gcc_cv_target_ldbl128=yes
3270132718Skanchangequote([,])dnl
3271169689Skan      ])
3272169689Skan    ;;
3273169689Skanesac
3274169689Skanif test x$gcc_cv_target_ldbl128 = xyes; then
3275169689Skan  AC_DEFINE(TARGET_DEFAULT_LONG_DOUBLE_128, 1,
3276169689Skan	    [Define if TFmode long double should be the default])
3277132718Skanfi
3278132718Skan
3279132718Skan# Find out what GC implementation we want, or may, use.
3280132718SkanAC_ARG_WITH(gc,
3281169689Skan[  --with-gc={page,zone}   choose the garbage collection mechanism to use
3282132718Skan                          with the compiler],
3283132718Skan[case "$withval" in
3284169689Skan  page)
3285132718Skan    GGC=ggc-$withval
3286132718Skan    ;;
3287169689Skan  zone)
3288169689Skan    GGC=ggc-$withval
3289169689Skan    AC_DEFINE(GGC_ZONE, 1, [Define if the zone collector is in use])
3290169689Skan    ;;
3291132718Skan  *)
3292132718Skan    AC_MSG_ERROR([$withval is an invalid option to --with-gc])
3293132718Skan    ;;
3294132718Skanesac],
3295132718Skan[GGC=ggc-page])
3296132718SkanAC_SUBST(GGC)
3297132718Skanecho "Using $GGC for garbage collection."
3298132718Skan
3299132718Skan# Use the system's zlib library.
3300132718Skanzlibdir=-L../zlib
3301132718Skanzlibinc="-I\$(srcdir)/../zlib"
3302132718SkanAC_ARG_WITH(system-zlib,
3303132718Skan[  --with-system-zlib      use installed libz],
3304132718Skanzlibdir=
3305132718Skanzlibinc=
3306132718Skan)
3307132718SkanAC_SUBST(zlibdir)
3308132718SkanAC_SUBST(zlibinc)
3309132718Skan
3310132718Skandnl Very limited version of automake's enable-maintainer-mode
3311132718Skan
3312132718SkanAC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
3313132718Skan  dnl maintainer-mode is disabled by default
3314132718Skan  AC_ARG_ENABLE(maintainer-mode,
3315132718Skan[  --enable-maintainer-mode
3316132718Skan                          enable make rules and dependencies not useful
3317132718Skan                          (and sometimes confusing) to the casual installer],
3318132718Skan      maintainer_mode=$enableval,
3319132718Skan      maintainer_mode=no)
3320132718Skan
3321132718SkanAC_MSG_RESULT($maintainer_mode)
3322132718Skan
3323132718Skanif test "$maintainer_mode" = "yes"; then
3324132718Skan  MAINT=''
3325132718Skanelse
3326132718Skan  MAINT='#'
3327132718Skanfi
3328132718SkanAC_SUBST(MAINT)dnl
3329132718Skan
3330169689Skan# --------------
3331169689Skan# Language hooks
3332169689Skan# --------------
3333169689Skan
3334132718Skan# Make empty files to contain the specs and options for each language.
3335132718Skan# Then add #include lines to for a compiler that has specs and/or options.
3336132718Skan
3337169689Skansubdirs=
3338132718Skanlang_opt_files=
3339132718Skanlang_specs_files=
3340132718Skanlang_tree_files=
3341132718Skan# These (without "all_") are set in each config-lang.in.
3342132718Skan# `language' must be a single word so is spelled singularly.
3343132718Skanall_languages=
3344132718Skanall_boot_languages=
3345132718Skanall_compilers=
3346132718Skanall_stagestuff=
3347169689Skanall_outputs='Makefile gccbug mklibgcc libada-mk'
3348132718Skan# List of language makefile fragments.
3349132718Skanall_lang_makefrags=
3350132718Skan# List of language subdirectory makefiles.  Deprecated.
3351132718Skanall_lang_makefiles=
3352132718Skan# Files for gengtype
3353132718Skanall_gtfiles="$target_gtfiles"
3354132718Skan# Files for gengtype with language
3355132718Skanall_gtfiles_files_langs=
3356132718Skanall_gtfiles_files_files=
3357132718Skan
3358169689Skan# These are the languages that are set in --enable-languages,
3359169689Skan# and are available in the GCC tree.
3360169689Skanall_selected_languages=
3361169689Skan
3362132718Skan# Add the language fragments.
3363132718Skan# Languages are added via two mechanisms.  Some information must be
3364132718Skan# recorded in makefile variables, these are defined in config-lang.in.
3365132718Skan# We accumulate them and plug them into the main Makefile.
3366132718Skan# The other mechanism is a set of hooks for each of the main targets
3367132718Skan# like `clean', `install', etc.
3368132718Skan
3369132718Skanlanguage_hooks="Make-hooks"
3370132718Skan
3371169689Skanfor lang in ${srcdir}/*/config-lang.in
3372132718Skando
3373169689Skanchangequote(,)dnl
3374169689Skan	test "$lang" = "${srcdir}/*/config-lang.in" && continue
3375169689Skan
3376169689Skan        lang_alias=`sed -n -e 's,^language=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^language=\([^   ]*\).*$,\1,p' $lang`
3377169689Skan        if test "x$lang_alias" = x
3378169689Skan        then
3379169689Skan              echo "$lang doesn't set \$language." 1>&2
3380169689Skan              exit 1
3381169689Skan        fi
3382169689Skan        subdir="`echo $lang | sed -e 's,^.*/\([^/]*\)/config-lang.in$,\1,'`"
3383169689Skan        subdirs="$subdirs $subdir"
3384169689Skan        case ",$enable_languages," in
3385169689Skan        *,$lang_alias,*)
3386169689Skan            all_selected_languages="$all_selected_languages $lang_alias"
3387169689Skan	    if test -f $srcdir/$subdir/lang-specs.h; then
3388169689Skan	        lang_specs_files="$lang_specs_files $srcdir/$subdir/lang-specs.h"
3389169689Skan	    fi
3390169689Skan	    ;;
3391169689Skan        esac
3392169689Skanchangequote([,])dnl
3393169689Skan
3394169689Skan	language=
3395169689Skan	boot_language=
3396169689Skan	compilers=
3397169689Skan	stagestuff=
3398169689Skan	outputs=
3399169689Skan	gtfiles=
3400169689Skan	subdir_requires=
3401169689Skan	. ${srcdir}/$subdir/config-lang.in
3402169689Skan	if test "x$language" = x
3403169689Skan	then
3404169689Skan		echo "${srcdir}/$subdir/config-lang.in doesn't set \$language." 1>&2
3405169689Skan		exit 1
3406169689Skan	fi
3407169689Skan
3408169689Skan	ok=:
3409169689Skan        case ",$enable_languages," in
3410169689Skan        	*,$lang_alias,*) ;;
3411169689Skan		*)
3412169689Skan			for i in $subdir_requires; do
3413169689Skan				test -f "${srcdir}/$i/config-lang.in" && continue
3414169689Skan				ok=false
3415169689Skan				break
3416169689Skan			done
3417169689Skan		;;
3418169689Skan	esac
3419169689Skan	$ok || continue
3420169689Skan
3421169689Skan	all_lang_makefrags="$all_lang_makefrags \$(srcdir)/$subdir/Make-lang.in"
3422169689Skan	if test -f $srcdir/$subdir/lang.opt; then
3423169689Skan	    lang_opt_files="$lang_opt_files $srcdir/$subdir/lang.opt"
3424169689Skan	fi
3425169689Skan	if test -f $srcdir/$subdir/$subdir-tree.def; then
3426169689Skan	    lang_tree_files="$lang_tree_files $srcdir/$subdir/$subdir-tree.def"
3427169689Skan	fi
3428169689Skan	if test -f ${srcdir}/$subdir/Makefile.in
3429169689Skan		then all_lang_makefiles="$subdir/Makefile"
3430169689Skan	fi
3431169689Skan	all_languages="$all_languages $language"
3432169689Skan	if test "x$boot_language" = xyes
3433169689Skan	then
3434169689Skan		all_boot_languages="$all_boot_languages $language"
3435169689Skan	fi
3436169689Skan	all_compilers="$all_compilers $compilers"
3437169689Skan	all_stagestuff="$all_stagestuff $stagestuff"
3438169689Skan	all_outputs="$all_outputs $outputs"
3439169689Skan	all_gtfiles="$all_gtfiles $gtfiles"
3440169689Skan	for f in $gtfiles
3441169689Skan	do
3442169689Skan		all_gtfiles_files_langs="$all_gtfiles_files_langs ${subdir} "
3443169689Skan		all_gtfiles_files_files="$all_gtfiles_files_files ${f} "
3444169689Skan	done
3445132718Skandone
3446132718Skan
3447132718Skan# Pick up gtfiles for c
3448132718Skangtfiles=
3449169689Skansubdir="c"
3450132718Skan. ${srcdir}/c-config-lang.in
3451132718Skanall_gtfiles="$all_gtfiles $gtfiles"
3452132718Skanfor f in $gtfiles
3453132718Skando
3454169689Skan        all_gtfiles_files_langs="$all_gtfiles_files_langs ${subdir} "
3455132718Skan        all_gtfiles_files_files="$all_gtfiles_files_files ${f} "
3456132718Skandone
3457132718Skan
3458132718Skancheck_languages=
3459169689Skanfor language in $all_selected_languages
3460132718Skando
3461169689Skan	check_languages="$check_languages check-$language"
3462132718Skandone
3463132718Skan
3464132718Skan# We link each language in with a set of hooks, reached indirectly via
3465169689Skan# lang.${target}.  Only do so for selected languages.
3466132718Skan
3467132718Skanrm -f Make-hooks
3468132718Skantouch Make-hooks
3469169689Skantarget_list="all.cross start.encap rest.encap tags \
3470169689Skan	install-common install-man install-info dvi pdf html \
3471132718Skan	uninstall info man srcextra srcman srcinfo \
3472132718Skan	mostlyclean clean distclean maintainer-clean \
3473132718Skan	stage1 stage2 stage3 stage4 stageprofile stagefeedback"
3474169689Skan
3475132718Skanfor t in $target_list
3476132718Skando
3477132718Skan	x=
3478169689Skan	for lang in $all_selected_languages
3479132718Skan	do
3480169689Skan		x="$x $lang.$t"
3481132718Skan	done
3482132718Skan	echo "lang.$t: $x" >> Make-hooks
3483132718Skandone
3484132718Skan
3485169689Skan# --------
3486169689Skan# UNSORTED
3487169689Skan# --------
3488169689Skan
3489132718Skan# Create .gdbinit.
3490132718Skan
3491132718Skanecho "dir ." > .gdbinit
3492132718Skanecho "dir ${srcdir}" >> .gdbinit
3493132718Skanif test x$gdb_needs_out_file_path = xyes
3494132718Skanthen
3495132718Skan	echo "dir ${srcdir}/config/"`dirname ${out_file}` >> .gdbinit
3496132718Skanfi
3497132718Skanif test "x$subdirs" != x; then
3498132718Skan	for s in $subdirs
3499132718Skan	do
3500132718Skan		echo "dir ${srcdir}/$s" >> .gdbinit
3501132718Skan	done
3502132718Skanfi
3503132718Skanecho "source ${srcdir}/gdbinit.in" >> .gdbinit
3504132718Skan
3505132718Skan# If $(exec_prefix) exists and is not the same as $(prefix), then compute an
3506132718Skan# absolute path for gcc_tooldir based on inserting the number of up-directory
3507132718Skan# movements required to get from $(exec_prefix) to $(prefix) into the basic
3508132718Skan# $(libsubdir)/@(unlibsubdir) based path.
3509132718Skan# Don't set gcc_tooldir to tooldir since that's only passed in by the toplevel
3510132718Skan# make and thus we'd get different behavior depending on where we built the
3511132718Skan# sources.
3512132718Skanif test x$exec_prefix = xNONE -o x$exec_prefix = x$prefix; then
3513132718Skan    gcc_tooldir='$(libsubdir)/$(unlibsubdir)/../$(target_noncanonical)'
3514132718Skanelse
3515132718Skanchangequote(<<, >>)dnl
3516132718Skan# An explanation of the sed strings:
3517132718Skan#  -e 's|^\$(prefix)||'   matches and eliminates 'prefix' from 'exec_prefix'
3518132718Skan#  -e 's|/$||'            match a trailing forward slash and eliminates it
3519132718Skan#  -e 's|^[^/]|/|'        forces the string to start with a forward slash (*)
3520132718Skan#  -e 's|/[^/]*|../|g'    replaces each occurrence of /<directory> with ../
3521132718Skan#
3522132718Skan# (*) Note this pattern overwrites the first character of the string
3523132718Skan# with a forward slash if one is not already present.  This is not a
3524132718Skan# problem because the exact names of the sub-directories concerned is
3525132718Skan# unimportant, just the number of them matters.
3526132718Skan#
3527132718Skan# The practical upshot of these patterns is like this:
3528132718Skan#
3529132718Skan#  prefix     exec_prefix        result
3530132718Skan#  ------     -----------        ------
3531132718Skan#   /foo        /foo/bar          ../
3532132718Skan#   /foo/       /foo/bar          ../
3533132718Skan#   /foo        /foo/bar/         ../
3534132718Skan#   /foo/       /foo/bar/         ../
3535132718Skan#   /foo        /foo/bar/ugg      ../../
3536132718Skan#
3537132718Skan    dollar='$$'
3538132718Skan    gcc_tooldir="\$(libsubdir)/\$(unlibsubdir)/\`echo \$(exec_prefix) | sed -e 's|^\$(prefix)||' -e 's|/\$(dollar)||' -e 's|^[^/]|/|' -e 's|/[^/]*|../|g'\`\$(target_noncanonical)"
3539132718Skanchangequote([, ])dnl
3540132718Skanfi
3541132718SkanAC_SUBST(gcc_tooldir)
3542132718SkanAC_SUBST(dollar)
3543132718Skan
3544132718Skan# Find a directory in which to install a shared libgcc.
3545132718Skan
3546132718SkanAC_ARG_ENABLE(version-specific-runtime-libs,
3547132718Skan[  --enable-version-specific-runtime-libs
3548132718Skan                          specify that runtime libraries should be
3549132718Skan                          installed in a compiler-specific directory])
3550132718Skan
3551132718SkanAC_ARG_WITH(slibdir,
3552169689Skan[  --with-slibdir=DIR      shared libraries in DIR [[LIBDIR]]],
3553132718Skanslibdir="$with_slibdir",
3554132718Skanif test "${enable_version_specific_runtime_libs+set}" = set; then
3555132718Skan  slibdir='$(libsubdir)'
3556132718Skanelif test "$host" != "$target"; then
3557132718Skan  slibdir='$(build_tooldir)/lib'
3558132718Skanelse
3559132718Skan  slibdir='$(libdir)'
3560132718Skanfi)
3561132718SkanAC_SUBST(slibdir)
3562132718Skan
3563132718Skanobjdir=`${PWDCMD-pwd}`
3564132718SkanAC_SUBST(objdir)
3565132718Skan
3566169689SkanAC_ARG_WITH(datarootdir,
3567169689Skan[  --with-datarootdir=DIR  Use DIR as the data root [[PREFIX/share]]],
3568169689Skandatarootdir="\${prefix}/$with_datarootdir",
3569169689Skandatarootdir='$(prefix)/share')
3570169689SkanAC_SUBST(datarootdir)
3571169689Skan
3572169689SkanAC_ARG_WITH(docdir,
3573169689Skan[  --with-docdir=DIR       Install documentation in DIR [[DATAROOTDIR]]],
3574169689Skandocdir="\${prefix}/$with_docdir",
3575169689Skandocdir='$(datarootdir)')
3576169689SkanAC_SUBST(docdir)
3577169689Skan
3578169689SkanAC_ARG_WITH(htmldir,
3579169689Skan[  --with-htmldir=DIR      html documentation in in DIR [[DOCDIR]]],
3580169689Skanhtmldir="\${prefix}/$with_htmldir",
3581169689Skanhtmldir='$(docdir)')
3582169689SkanAC_SUBST(htmldir)
3583169689Skan
3584132718Skan# Substitute configuration variables
3585132718SkanAC_SUBST(subdirs)
3586132718SkanAC_SUBST(srcdir)
3587132718SkanAC_SUBST(all_boot_languages)
3588132718SkanAC_SUBST(all_compilers)
3589132718SkanAC_SUBST(all_gtfiles)
3590132718SkanAC_SUBST(all_gtfiles_files_langs)
3591132718SkanAC_SUBST(all_gtfiles_files_files)
3592132718SkanAC_SUBST(all_lang_makefrags)
3593132718SkanAC_SUBST(all_lang_makefiles)
3594132718SkanAC_SUBST(all_languages)
3595169689SkanAC_SUBST(all_selected_languages)
3596132718SkanAC_SUBST(all_stagestuff)
3597132718SkanAC_SUBST(build_exeext)
3598132718SkanAC_SUBST(build_install_headers_dir)
3599132718SkanAC_SUBST(build_xm_file_list)
3600132718SkanAC_SUBST(build_xm_include_list)
3601132718SkanAC_SUBST(build_xm_defines)
3602132718SkanAC_SUBST(check_languages)
3603132718SkanAC_SUBST(cc_set_by_configure)
3604132718SkanAC_SUBST(quoted_cc_set_by_configure)
3605132718SkanAC_SUBST(cpp_install_dir)
3606132718SkanAC_SUBST(xmake_file)
3607132718SkanAC_SUBST(tmake_file)
3608132718SkanAC_SUBST(extra_gcc_objs)
3609132718SkanAC_SUBST(extra_headers_list)
3610132718SkanAC_SUBST(extra_objs)
3611132718SkanAC_SUBST(extra_parts)
3612132718SkanAC_SUBST(extra_passes)
3613132718SkanAC_SUBST(extra_programs)
3614132718SkanAC_SUBST(float_h_file)
3615132718SkanAC_SUBST(gcc_config_arguments)
3616132718SkanAC_SUBST(gcc_gxx_include_dir)
3617132718SkanAC_SUBST(host_exeext)
3618132718SkanAC_SUBST(host_xm_file_list)
3619132718SkanAC_SUBST(host_xm_include_list)
3620132718SkanAC_SUBST(host_xm_defines)
3621132718SkanAC_SUBST(out_host_hook_obj)
3622132718SkanAC_SUBST(install)
3623132718SkanAC_SUBST(lang_opt_files)
3624132718SkanAC_SUBST(lang_specs_files)
3625132718SkanAC_SUBST(lang_tree_files)
3626132718SkanAC_SUBST(local_prefix)
3627132718SkanAC_SUBST(md_file)
3628132718SkanAC_SUBST(objc_boehm_gc)
3629132718SkanAC_SUBST(out_file)
3630132718SkanAC_SUBST(out_object_file)
3631132718SkanAC_SUBST(stage_prefix_set_by_configure)
3632132718SkanAC_SUBST(quoted_stage_prefix_set_by_configure)
3633132718SkanAC_SUBST(thread_file)
3634132718SkanAC_SUBST(tm_file_list)
3635132718SkanAC_SUBST(tm_include_list)
3636132718SkanAC_SUBST(tm_defines)
3637132718SkanAC_SUBST(tm_p_file_list)
3638132718SkanAC_SUBST(tm_p_include_list)
3639132718SkanAC_SUBST(xm_file_list)
3640132718SkanAC_SUBST(xm_include_list)
3641132718SkanAC_SUBST(xm_defines)
3642132718SkanAC_SUBST(c_target_objs)
3643132718SkanAC_SUBST(cxx_target_objs)
3644132718SkanAC_SUBST(target_cpu_default)
3645132718Skan
3646132718SkanAC_SUBST_FILE(language_hooks)
3647132718Skan
3648132718Skan# Echo link setup.
3649132718Skanif test x${build} = x${host} ; then
3650132718Skan  if test x${host} = x${target} ; then
3651132718Skan    echo "Links are now set up to build a native compiler for ${target}." 1>&2
3652132718Skan  else
3653132718Skan    echo "Links are now set up to build a cross-compiler" 1>&2
3654132718Skan    echo " from ${host} to ${target}." 1>&2
3655132718Skan  fi
3656132718Skanelse
3657132718Skan  if test x${host} = x${target} ; then
3658132718Skan    echo "Links are now set up to build (on ${build}) a native compiler" 1>&2
3659132718Skan    echo " for ${target}." 1>&2
3660132718Skan  else
3661132718Skan    echo "Links are now set up to build (on ${build}) a cross-compiler" 1>&2
3662132718Skan    echo " from ${host} to ${target}." 1>&2
3663132718Skan  fi
3664132718Skanfi
3665132718Skan
3666169689SkanAC_ARG_VAR(GMPLIBS,[How to link GMP])
3667169689SkanAC_ARG_VAR(GMPINC,[How to find GMP include files])
3668169689Skan
3669132718Skan# Configure the subdirectories
3670132718Skan# AC_CONFIG_SUBDIRS($subdirs)
3671132718Skan
3672132718Skan# Create the Makefile
3673132718Skan# and configure language subdirectories
3674132718SkanAC_CONFIG_FILES($all_outputs)
3675132718Skan
3676132718SkanAC_CONFIG_COMMANDS([default],
3677132718Skan[
3678132718Skancase ${CONFIG_HEADERS} in
3679132718Skan  *auto-host.h:config.in*)
3680132718Skan  echo > cstamp-h ;;
3681132718Skanesac
3682132718Skan# Make sure all the subdirs exist.
3683169689Skanfor d in $subdirs doc build
3684132718Skando
3685132718Skan    test -d $d || mkdir $d
3686132718Skandone
3687132718Skan# If the host supports symlinks, point stage[1234] at ../stage[1234] so
3688132718Skan# bootstrapping and the installation procedure can still use
3689132718Skan# CC="stage1/xgcc -Bstage1/".  If the host doesn't support symlinks,
3690132718Skan# FLAGS_TO_PASS has been modified to solve the problem there.
3691132718Skan# This is virtually a duplicate of what happens in configure.lang; we do
3692132718Skan# an extra check to make sure this only happens if ln -s can be used.
3693169689Skancase "$LN_S" in
3694169689Skan  *-s*)
3695169689Skan    for d in ${subdirs} ; do
3696132718Skan	STARTDIR=`${PWDCMD-pwd}`
3697132718Skan	cd $d
3698132718Skan	for t in stage1 stage2 stage3 stage4 stageprofile stagefeedback include
3699132718Skan	do
3700132718Skan		rm -f $t
3701169689Skan		$LN_S ../$t $t 2>/dev/null
3702132718Skan	done
3703132718Skan	cd $STARTDIR
3704169689Skan    done
3705169689Skan  ;;
3706169689Skanesac
3707132718Skan], 
3708169689Skan[subdirs='$subdirs'])
3709132718SkanAC_OUTPUT
3710