# GCC build-specific configuration file.
# Copyright (C) 1997-2013 Free Software Foundation, Inc.

#This file is part of GCC.

#GCC is free software; you can redistribute it and/or modify it under
#the terms of the GNU General Public License as published by the Free
#Software Foundation; either version 3, or (at your option) any later
#version.

#GCC is distributed in the hope that it will be useful, but WITHOUT
#ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
#FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
#for more details.

#You should have received a copy of the GNU General Public License
#along with GCC; see the file COPYING3.  If not see
#<http://www.gnu.org/licenses/>.

# This is the GCC build-specific configuration file
# where a configuration type is mapped to different system-specific
# definitions and files.  This is invoked by the autoconf-generated
# configure script.  Putting it in a separate shell file lets us skip
# running autoconf when modifying build-specific information.

# This file switches on the shell variable ${build}.  As much of this
# as possible should be replaced with autoconf tests in the future.

# This file sets the following shell variables for use by the
# autoconf-generated configure script:
#
#  build_xm_defines	List of macros to define when compiling for the
#			build machine.
#
#  build_xm_file	List of files to include when compiling for the
#			build machine.
#
#  build_install_headers_dir
#			Target to use when installing header files.
#
#  build_exeext		Set to the suffix, if the build machine requires
#			executables to have a file name suffix.

# Default settings.
build_xm_file=
build_xm_defines=
build_exeext=
build_install_headers_dir=install-headers-tar
build_file_translate=

# System-specific settings.
case $build in
  hppa1.0-*-hpux1[01]* | \
  hppa*64*-*-hpux11* | \
  hppa1.1-*-hpux11* | \
  hppa2*-*-hpux11* )
    build_install_headers_dir=install-headers-cpio
    ;;
  i370-*-opened* | i370-*-mvs* )
    # IBM 360/370/390 Architecture
    build_xm_defines='FATAL_EXIT_CODE=12'
    ;;
  i[34567]86-*-cygwin* )
    build_xm_file=i386/xm-cygwin.h
    build_exeext=.exe
    ;;
  i[34567]86-*-mingw32* | x86_64-*-mingw*)
    build_xm_file=i386/xm-mingw32.h
    build_exeext=.exe
    t=`(CMD //c echo /c) 2>/dev/null`
    case $t in ?:*)
      build_file_translate="CMD //c"
      ;;
    esac
    ;;
  i[34567]86-pc-msdosdjgpp*)
    build_xm_file=i386/xm-djgpp.h
    build_exeext=.exe
    ;;
  i[34567]86-*-sco3.2v5*) 
    # 80386 running SCO Open Server 5
    build_install_headers_dir=install-headers-cpio
    ;;
  i[34567]86-sequent-ptx4* | i[34567]86-sequent-sysv4* )
    build_install_headers_dir=install-headers-cpio
    ;;
  i[34567]86-*-sysv4*) 
    # Intel x86 running system V r4
    build_install_headers_dir=install-headers-cpio
    ;;
  i[34567]86-*-udk*) 
    # Intel x86 on SCO UW/OSR5 Dev Kit
    build_install_headers_dir=install-headers-cpio
    ;;
  i[34567]86-*-uwin*)
    build_exeext=.exe
    ;;
  i386-*-vsta) 
    # Intel 80386's running VSTa kernel
    ;;
  m68000-hp-hpux* | m68k-hp-hpux*) 
    # HP 9000 series 300
    build_install_headers_dir=install-headers-cpio
    ;;
  *-*-sysv*)
    # All other System V variants.
    build_install_headers_dir=install-headers-cpio
    ;;
  *-*-*vms*)
    # All OpenVMS targets.
    build_xm_file="vms/xm-vms.h"
    build_exeext=.exe
    build_install_headers_dir=install-headers-cp
    ;;
esac

