# GCC build-specific configuration file.
# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2007, 2008, 2009, 2010
# 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
  alpha64-dec-*vms*)
    build_xm_file="vms/xm-vms.h vms/xm-vms64.h"
    build_exeext=.exe
    build_install_headers_dir=install-headers-cp
    prefix=/gnu
    local_prefix=/gnu/local
    ;;
  alpha*-dec-*vms*)
    build_xm_file="vms/xm-vms.h"
    build_exeext=.exe
    build_install_headers_dir=install-headers-cp
    prefix=/gnu
    local_prefix=/gnu/local
    ;;
  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* | i[34567]86-*-pe )
    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
    ;;
  ia64-hp-*vms*)
    build_xm_file="vms/xm-vms.h vms/xm-vms64.h"
    build_exeext=.exe
    build_install_headers_dir=install-headers-cp
    prefix=/gnu
    local_prefix=/gnu/local
    ;;
  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
    ;;
esac

