# Autoconf M4 include file defining utility macros for complex Canadian# cross builds.dnl ####dnl # _GCC_TOPLEV_NONCANONICAL_BUILDdnl # $build_alias or canonical $build if blank.dnl # Used when we would use $build_alias, but empty is not OK.AC_DEFUN([_GCC_TOPLEV_NONCANONICAL_BUILD],[AC_REQUIRE([AC_CANONICAL_BUILD]) []dnlcase ${build_alias} in"") build_noncanonical=${build} ;;*) build_noncanonical=${build_alias} ;;esac]) []dnl # _GCC_TOPLEV_NONCANONICAL_BUILDdnl ####dnl # _GCC_TOPLEV_NONCANONICAL_HOSTdnl # $host_alias, or $build_noncanonical if blank.dnl # Used when we would use $host_alias, but empty is not OK.AC_DEFUN([_GCC_TOPLEV_NONCANONICAL_HOST],[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnlcase ${host_alias} in"") host_noncanonical=${build_noncanonical} ;;*) host_noncanonical=${host_alias} ;;esac]) []dnl # _GCC_TOPLEV_NONCANONICAL_HOSTdnl ####dnl # _GCC_TOPLEV_NONCANONICAL_TARGETdnl # $target_alias or $host_noncanonical if blank.dnl # Used when we would use $target_alias, but empty is not OK.AC_DEFUN([_GCC_TOPLEV_NONCANONICAL_TARGET],[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_HOST]) []dnlcase ${target_alias} in"") target_noncanonical=${host_noncanonical} ;;*) target_noncanonical=${target_alias} ;;esac]) []dnl # _GCC_TOPLEV_NONCANONICAL_TARGETdnl ####dnl # ACX_NONCANONICAL_BUILDdnl # Like underscored version, but AC_SUBST's.AC_DEFUN([ACX_NONCANONICAL_BUILD],[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnlAC_SUBST(build_noncanonical)]) []dnl # ACX_NONCANONICAL_BUILDdnl ####dnl # ACX_NONCANONICAL_HOSTdnl # Like underscored version, but AC_SUBST's.AC_DEFUN([ACX_NONCANONICAL_HOST],[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_HOST]) []dnlAC_SUBST(host_noncanonical)]) []dnl # ACX_NONCANONICAL_HOSTdnl ####dnl # ACX_NONCANONICAL_TARGETdnl # Like underscored version, but AC_SUBST's.AC_DEFUN([ACX_NONCANONICAL_TARGET],[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_TARGET]) []dnlAC_SUBST(target_noncanonical)]) []dnl # ACX_NONCANONICAL_TARGETdnl ####dnl # GCC_TOPLEV_SUBDIRSdnl # GCC & friends build 'build', 'host', and 'target' tools. These mustdnl # be separated into three well-known subdirectories of the build directory:dnl # build_subdir, host_subdir, and target_subdir. The values are determineddnl # here so that they can (theoretically) be changed in the future. Theydnl # were previously reproduced across many different files.dnl #dnl # This logic really amounts to very little with autoconf 2.13; it willdnl # amount to a lot more with autoconf 2.5x.AC_DEFUN([GCC_TOPLEV_SUBDIRS],[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_TARGET]) []dnlAC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl# Prefix 'build-' so this never conflicts with target_subdir.build_subdir="build-${build_noncanonical}"# --srcdir=. covers the toplevel, while "test -d" covers the subdirectoriesif ( test $srcdir = . && test -d gcc ) \|| test -d $srcdir/../host-${host_noncanonical}; thenhost_subdir="host-${host_noncanonical}"elsehost_subdir=.fi# No prefix.target_subdir=${target_noncanonical}AC_SUBST([build_subdir]) []dnlAC_SUBST([host_subdir]) []dnlAC_SUBST([target_subdir]) []dnl]) []dnl # GCC_TOPLEV_SUBDIRS##### _NCN_TOOL_PREFIXES: Some stuff that oughtta be done in AC_CANONICAL_SYSTEM# or AC_INIT.# These demand that AC_CANONICAL_SYSTEM be called beforehand.AC_DEFUN([_NCN_TOOL_PREFIXES],[ncn_tool_prefix=test -n "$host_alias" && ncn_tool_prefix=$host_alias-ncn_target_tool_prefix=test -n "$target_alias" && ncn_target_tool_prefix=$target_alias-]) []dnl # _NCN_TOOL_PREFIXES##### NCN_STRICT_CHECK_TOOLS(variable, progs-to-check-for,[value-if-not-found],[path])# Like plain AC_CHECK_TOOLS, but require prefix if build!=target.AC_DEFUN([NCN_STRICT_CHECK_TOOLS],[AC_REQUIRE([_NCN_TOOL_PREFIXES]) []dnlfor ncn_progname in $2; doif test -n "$ncn_tool_prefix"; thenAC_CHECK_PROG([$1], [${ncn_tool_prefix}${ncn_progname}],[${ncn_tool_prefix}${ncn_progname}], , [$4])fiif test -z "$ac_cv_prog_$1" && test $build = $host ; thenAC_CHECK_PROG([$1], [${ncn_progname}], [${ncn_progname}], , [$4])fitest -n "$ac_cv_prog_$1" && breakdoneif test -z "$ac_cv_prog_$1" ; thenifelse([$3],[], [set dummy $2if test $build = $host ; then$1="[$]2"else$1="${ncn_tool_prefix}[$]2"fi], [$1="$3"])fi]) []dnl # NCN_STRICT_CHECK_TOOLS##### NCN_STRICT_CHECK_TARGET_TOOLS(variable, progs-to-check-for,[value-if-not-found],[path])# Like CVS Autoconf AC_CHECK_TARGET_TOOLS, but require prefix if build!=target.AC_DEFUN([NCN_STRICT_CHECK_TARGET_TOOLS],[AC_REQUIRE([_NCN_TOOL_PREFIXES]) []dnlfor ncn_progname in $2; doif test -n "$ncn_target_tool_prefix"; thenAC_CHECK_PROG([$1], [${ncn_target_tool_prefix}${ncn_progname}],[${ncn_target_tool_prefix}${ncn_progname}], , [$4])fiif test -z "$ac_cv_prog_$1" && test $build = $target ; thenAC_CHECK_PROG([$1], [${ncn_progname}], [${ncn_progname}], , [$4])fitest -n "$ac_cv_prog_$1" && breakdoneif test -z "$ac_cv_prog_$1" ; thenifelse([$3],[], [set dummy $2if test $build = $target ; then$1="[$]2"else$1="${ncn_target_tool_prefix}[$]2"fi], [$1="$3"])fi]) []dnl # NCN_STRICT_CHECK_TARGET_TOOLS#### AC_PROG_CPP_WERROR# Used for autoconf 2.5x to force AC_PREPROC_IFELSE to reject code which# triggers warnings from the preprocessor. Will be in autoconf 2.58.# For now, using this also overrides header checks to use only the# preprocessor (matches 2.13 behavior; matching 2.58's behavior is a# bit harder from here).# Eventually autoconf will default to checking headers with the compiler# instead, and we'll have to do this differently.AC_DEFUN([AC_PROG_CPP_WERROR],[AC_REQUIRE([AC_PROG_CPP])dnlm4_define([AC_CHECK_HEADER],m4_defn([_AC_CHECK_HEADER_OLD]))ac_c_preproc_warn_flag=yes])# AC_PROG_CPP_WERROR# Test for GNAT.# We require the gnatbind program, and a compiler driver that# understands Ada. We use the user's CC setting, already found.## Sets the shell variable have_gnat to yes or no as appropriate, and# substitutes GNATBIND.AC_DEFUN([ACX_PROG_GNAT],[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])AC_REQUIRE([AC_PROG_CC])AC_CHECK_TOOL(GNATBIND, gnatbind, no)AC_CACHE_CHECK([whether compiler driver understands Ada],acx_cv_cc_gcc_supports_ada,[cat >conftest.adb <<EOFprocedure conftest is begin null; end conftest;EOFacx_cv_cc_gcc_supports_ada=no# There is a bug in old released versions of GCC which causes the# driver to exit successfully when the appropriate language module# has not been installed. This is fixed in 2.95.4, 3.0.2, and 3.1.# Therefore we must check for the error message as well as an# unsuccessful exit.# Other compilers, like HP Tru64 UNIX cc, exit successfully when# given a .adb file, but produce no object file. So we must check# if an object file was really produced to guard against this.errors=`(${CC} -c conftest.adb) 2>&1 || echo failure`if test x"$errors" = x && test -f conftest.$ac_objext; thenacx_cv_cc_gcc_supports_ada=yesfirm -f conftest.*])if test x$GNATBIND != xno && test x$acx_cv_cc_gcc_supports_ada != xno; thenhave_gnat=yeselsehave_gnat=nofi])dnl 'make compare' can be significantly faster, if cmp itself candnl skip bytes instead of using tail. The test being performed isdnl "if cmp --ignore-initial=2 t1 t2 && ! cmp --ignore-initial=1 t1 t2"dnl but we need to sink errors and handle broken shells. We also testdnl for the parameter format "cmp file1 file2 skip1 skip2" which isdnl accepted by cmp on some systems.AC_DEFUN([ACX_PROG_CMP_IGNORE_INITIAL],[AC_CACHE_CHECK([how to compare bootstrapped objects], gcc_cv_prog_cmp_skip,[ echo abfoo >t1echo cdfoo >t2gcc_cv_prog_cmp_skip='tail +16c $$f1 > tmp-foo1; tail +16c $$f2 > tmp-foo2; cmp tmp-foo1 tmp-foo2'if cmp t1 t2 2 2 > /dev/null 2>&1; thenif cmp t1 t2 1 1 > /dev/null 2>&1; then:elsegcc_cv_prog_cmp_skip='cmp $$f1 $$f2 16 16'fifiif cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; thenif cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then:elsegcc_cv_prog_cmp_skip='cmp --ignore-initial=16 $$f1 $$f2'fifirm t1 t2])do_compare="$gcc_cv_prog_cmp_skip"AC_SUBST(do_compare)])dnl See whether we can include both string.h and strings.h.AC_DEFUN([ACX_HEADER_STRING],[AC_CACHE_CHECK([whether string.h and strings.h may both be included],gcc_cv_header_string,[AC_TRY_COMPILE([#include <string.h>#include <strings.h>], , gcc_cv_header_string=yes, gcc_cv_header_string=no)])if test $gcc_cv_header_string = yes; thenAC_DEFINE(STRING_WITH_STRINGS, 1, [Define if you can safely include both <string.h> and <strings.h>.])fi])dnl See if stdbool.h properly defines bool and true/false.dnl Check whether _Bool is built-in.AC_DEFUN([ACX_HEADER_STDBOOL],[AC_CACHE_CHECK([for working stdbool.h],ac_cv_header_stdbool_h,[AC_TRY_COMPILE([#include <stdbool.h>],[bool foo = false;],ac_cv_header_stdbool_h=yes, ac_cv_header_stdbool_h=no)])if test $ac_cv_header_stdbool_h = yes; thenAC_DEFINE(HAVE_STDBOOL_H, 1,[Define if you have a working <stdbool.h> header file.])fiAC_CACHE_CHECK(for built-in _Bool, gcc_cv_c__bool,[AC_TRY_COMPILE(,[_Bool foo;],gcc_cv_c__bool=yes, gcc_cv_c__bool=no)])if test $gcc_cv_c__bool = yes; thenAC_DEFINE(HAVE__BOOL, 1, [Define if the \`_Bool' type is built-in.])fi])dnl See if hard links work and if not, try to substitute $1 or simple copy.AC_DEFUN([ACX_PROG_LN],[AC_MSG_CHECKING(whether ln works)AC_CACHE_VAL(acx_cv_prog_LN,[rm -f conftestdata_techo >conftestdata_fif ln conftestdata_f conftestdata_t 2>/dev/nullthenacx_cv_prog_LN=lnelseacx_cv_prog_LN=nofirm -f conftestdata_f conftestdata_t])dnlif test $acx_cv_prog_LN = no; thenLN="ifelse([$1],,cp,[$1])"AC_MSG_RESULT([no, using $LN])elseLN="$acx_cv_prog_LN"AC_MSG_RESULT(yes)fiAC_SUBST(LN)dnl])dnl GCC_TARGET_TOOL(PROGRAM, TARGET-VAR, HOST-VAR, IN-TREE-TOOL, LANGUAGE)AC_DEFUN([GCC_TARGET_TOOL],[AC_MSG_CHECKING(where to find the target $1)if test "x${build}" != "x${host}" ; then# Canadian cross, just use what we foundAC_MSG_RESULT(pre-installed)elseifelse([$4],,,[ok=yescase " ${configdirs} " in*" patsubst([$4], [/.*], []) "*) ;;*) ok=no ;;esacifelse([$5],,,[case ,${enable_languages}, in*,$5,*) ;;*) ok=no ;;esac])if test $ok = yes; then# An in-tree tool is available and we can use it$2='$$r/$(HOST_SUBDIR)/$4'AC_MSG_RESULT(just compiled)el])if test "x$target" = "x$host"; then# We can use an host tool$2='$($3)'AC_MSG_RESULT(host tool)else# We need a cross toolAC_MSG_RESULT(pre-installed)fifi])