# configure.host
#
# This shell script handles all host based configuration for libgfortran.
# It sets various shell variables based on the the host triplet.
# You can modify this shell script without rerunning autoconf/aclocal/etc.
# This file is "sourced", not executed.
#
#
# It uses the following shell variables as set by config.guess:
#   host                The configuration host (full CPU-vendor-OS triplet)
#   host_cpu            The configuration host CPU
#   host_os             The configuration host OS
#
#
# It sets the following shell variables:
#
#   fpu_host            FPU-specific code file, defaults to fpu-generic.
#   tmake_file		A list of machine-description-specific
#			makefile fragments.



# DEFAULTS
fpu_host='fpu-generic'
ieee_support='no'

if test "x${have_fp_enable}" = "xyes" && test "x${have_fp_trap}" = "xyes"; then
  fpu_host='fpu-aix'
  ieee_support='yes'
fi

if test "x${have_fpsetmask}" = "xyes"; then
  fpu_host='fpu-sysv'
  ieee_support='yes'
fi

if test "x${have_feenableexcept}" = "xyes"; then
  fpu_host='fpu-glibc'
  ieee_support='yes'
fi

# x86 asm should be used instead of glibc, since glibc doesn't support
# the x86 denormal exception.
case "${host_cpu}" in
  i?86 | x86_64)
    if test "x${have_soft_float}" = "xyes"; then
      fpu_host='fpu-generic'
    else
      fpu_host='fpu-387'
    fi
    ieee_support='yes'
    ;;
esac

# Some targets require additional compiler options for NaN/Inf.
ieee_flags=
case "${host_cpu}" in
  alpha*)
    ieee_flags="-mieee" ;;
  sh*)
    ieee_flags="-mieee" ;;
esac

tmake_file=
# Other system configury
case "${target}" in

  *-*-aix*)
	# Create AIX-style "FAT" libraries.
	tmake_file="t-aix"
	;;

  *)
	;;

esac

