# Makefile for GNU C compiler.
#   Copyright (C) 1987, 1988, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
#   1998, 1999, 2000, 2001, 2002 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 2, 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 COPYING.  If not, write to
#the Free Software Foundation, 59 Temple Place - Suite 330,
#Boston MA 02111-1307, USA.

# The targets for external use include:
# all, doc, proto, install, install-cross, install-cross-rest,
# uninstall, TAGS, mostlyclean, clean, distclean, maintainer-clean,
# stage1, stage2, stage3, stage4.

# This is the default target.
all:

# Suppress smart makes who think they know how to automake Yacc files
.y.c:

# Directory where sources are, from where we are.
srcdir = @srcdir@
VPATH = @srcdir@

# Pointer to the GCC Project website
website=http://gcc.gnu.org

# Variables that exist for you to override.
# See below for how to change them for certain systems.

# List of language subdirectories.
# This is overridden by configure.
SUBDIRS =@subdirs@

# Selection of languages to be made.
# This is overridden by configure.
CONFIG_LANGUAGES = @all_languages@
LANGUAGES = c gcov$(exeext) $(CONFIG_LANGUAGES)

# Selection of languages to be made during stage1 build.
# This is overridden by configure.
BOOT_LANGUAGES = c @all_boot_languages@

# Various ways of specifying flags for compilations:
# CFLAGS is for the user to override to, e.g., do a cross build with -O2.
# For recursive  bootstrap builds CFLAGS is used to pass in STAGE1_CFLAGS
# or BOOT_CFLAGS
# STAGE1_CFLAGS is set by configure on some targets or passed from toplevel
# and sets the CFLAGS passed to stage1 of a bootstrap compilation.
# BOOT_CFLAGS is the value of CFLAGS to pass to the stage2, stage3 and stage4
# bootstrap compilations.
# XCFLAGS is used for most compilations but not when using the GCC just built.
# TCFLAGS is used for compilations with the GCC just built.
XCFLAGS =
TCFLAGS =
CFLAGS = -g
STAGE1_CFLAGS = -g @stage1_cflags@
BOOT_CFLAGS = -g -O2

# The warning flags are separate from BOOT_CFLAGS because people tend to
# override optimization flags and we'd like them to still have warnings
# turned on.  These flags are also used to pass other stage dependent
# flags from configure.  The user is free to explicitly turn these flags
# off if they wish.
# LOOSE_WARN are the warning flags to use when compiling something
# which is only compiled with gcc, such as libgcc and the frontends
# other than C.
# STRICT_WARN and STRICT2_WARN are the additional warning flags to
# apply to the back end and the C front end, which may be compiled
# with other compilers.  This is partially controlled by configure in
# stage1, as not all versions of gcc understand -Wno-long-long.
LOOSE_WARN = -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
STRICT_WARN = -Wtraditional @strict1_warn@
STRICT2_WARN = -Wtraditional -pedantic -Wno-long-long

# This is how we control whether or not the additional warnings are applied.
.-warn = $(STRICT_WARN)
GCC_WARN_CFLAGS = $(LOOSE_WARN) $($(@D)-warn)

# All warnings have to be shut off in stage1 if the compiler used then
# isn't gcc; configure determines that.  WARN_CFLAGS will be either
# $(GCC_WARN_CFLAGS), or nothing.
WARN_CFLAGS = @warn_cflags@

# These exists to be overridden by the x-* and t-* files, respectively.
X_CFLAGS =
T_CFLAGS =

X_CPPFLAGS =
T_CPPFLAGS =

AWK = @AWK@
CC = @CC@
BISON = @BISON@
BISONFLAGS =
FLEX = @FLEX@
FLEXFLAGS =
AR = ar
AR_FLAGS = rc
DLLTOOL = dlltool
RANLIB = @RANLIB@
SHELL = /bin/sh
# on sysV, define this as cp.
INSTALL = @INSTALL@
# Some systems may be missing symbolic links, regular links, or both.
# Allow configure to check this and use "ln -s", "ln", or "cp" as appropriate.
LN=@LN@
LN_S=@LN_S@
# These permit overriding just for certain files.
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL@
MAKEINFO = @MAKEINFO@
MAKEINFOFLAGS =
TEXI2DVI = texi2dvi
TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl
POD2MAN = pod2man --center="GNU" --release="gcc-$(version)"
# For GNUmake: let us decide what gets passed to recursive makes.
MAKEOVERRIDES =
@SET_MAKE@
# Some compilers can't handle cc -c blah.c -o foo/blah.o.
# In stage2 and beyond, we force this to "-o $@" since we know we're using gcc.
OUTPUT_OPTION = @OUTPUT_OPTION@

# Some versions of `touch' (such as the version on Solaris 2.8)
# do not correctly set the timestamp due to buggy versions of `utime'
# in the kernel.  So, we use `echo' instead.
STAMP = echo timestamp >

# This is where we get zlib from.  zlibdir is -L../zlib and zlibinc is
# -I../zlib, unless we were configured with --with-system-zlib, in which
# case both are empty.
ZLIB = @zlibdir@ -lz
ZLIBINC = @zlibinc@

# Substitution type for target's getgroups 2nd arg.
TARGET_GETGROUPS_T = @TARGET_GETGROUPS_T@

# Target to use when installing include directory.  Either
# install-headers-tar, install-headers-cpio or install-headers-cp.
INSTALL_HEADERS_DIR = @build_install_headers_dir@

# Header files that are made available under the same name
# to programs compiled with GCC.
USER_H = $(srcdir)/ginclude/stdarg.h $(srcdir)/ginclude/stddef.h \
    $(srcdir)/ginclude/varargs.h \
    $(srcdir)/ginclude/stdbool.h $(srcdir)/ginclude/iso646.h \
    $(EXTRA_HEADERS)

# The GCC to use for compiling libgcc.a, enquire, and crt*.o.
# Usually the one we just built.
# Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
GCC_FOR_TARGET = ./xgcc -B./ -B$(build_tooldir)/bin/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include

# This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
# It omits XCFLAGS, and specifies -B./.
# It also specifies -isystem ./include to find, e.g., stddef.h.
GCC_CFLAGS=$(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(LOOSE_WARN) -isystem ./include $(TCFLAGS)

# Sed command to transform gcc to installed name.  Overwritten by configure.
program_transform_name = @program_transform_name@
program_transform_cross_name = s,^,$(target_alias)-,

build_canonical = @build_canonical@
host_canonical = @host_canonical@

# Tools to use when building a cross-compiler.
# These are used because `configure' appends `cross-make'
# to the makefile when making a cross-compiler.

# Use the tools from the build tree, if they are available.

# objdir is set by configure.
objdir = @objdir@

AR_FOR_TARGET = ` \
  if [ -f $(objdir)/../binutils/ar ] ; then \
    echo $(objdir)/../binutils/ar ; \
  else \
    if [ "$(host_canonical)" = "$(target)" ] ; then \
      echo ar; \
    else \
       t='$(program_transform_cross_name)'; echo ar | sed -e $$t ; \
    fi; \
  fi`
AR_FLAGS_FOR_TARGET =
AR_CREATE_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) rc
AR_EXTRACT_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) x
RANLIB_FOR_TARGET = ` \
  if [ -f $(objdir)/../binutils/ranlib ] ; then \
    echo $(objdir)/../binutils/ranlib ; \
  else \
    if [ "$(host_canonical)" = "$(target)" ] ; then \
      echo ranlib; \
    else \
       t='$(program_transform_cross_name)'; echo ranlib | sed -e $$t ; \
    fi; \
  fi`
RANLIB_TEST_FOR_TARGET = \
  [ -f $(RANLIB_FOR_TARGET) ] \
  || ( [ "$(host_canonical)" = "$(target)" ] \
       && [ -f /usr/bin/ranlib -o -f /bin/ranlib ] )
NM_FOR_TARGET = ` \
  if [ -f ./nm ] ; then \
    echo ./nm ; \
  elif [ -f $(objdir)/../binutils/nm-new ] ; then \
    echo $(objdir)/../binutils/nm-new ; \
  else \
    if [ "$(host_canonical)" = "$(target)" ] ; then \
      echo nm; \
    else \
       t='$(program_transform_cross_name)'; echo nm | sed -e $$t ; \
    fi; \
  fi`

# Where to find some libiberty headers.
HASHTAB_H   = $(srcdir)/../include/hashtab.h
OBSTACK_H   = $(srcdir)/../include/obstack.h
SPLAY_TREE_H= $(srcdir)/../include/splay-tree.h
FIBHEAP_H   = $(srcdir)/../include/fibheap.h

# Default native SYSTEM_HEADER_DIR, to be overridden by targets.
NATIVE_SYSTEM_HEADER_DIR = /usr/include
# Default cross SYSTEM_HEADER_DIR, to be overridden by targets.
CROSS_SYSTEM_HEADER_DIR = $(build_tooldir)/sys-include

# autoconf sets SYSTEM_HEADER_DIR to one of the above.
SYSTEM_HEADER_DIR = @SYSTEM_HEADER_DIR@

# Control whether to run fixproto and fixincludes.
STMP_FIXPROTO = @STMP_FIXPROTO@
STMP_FIXINC = @STMP_FIXINC@

# Test to see whether <limits.h> exists in the system header files.
LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ]

target=@target@
target_alias=@target_alias@
xmake_file=@dep_host_xmake_file@
tmake_file=@dep_tmake_file@
out_file=$(srcdir)/config/@out_file@
out_object_file=@out_object_file@
md_file=$(srcdir)/config/@md_file@
tm_p_file_list=@tm_p_file_list@
tm_p_file=@tm_p_file@
build_xm_file_list=@build_xm_file_list@
build_xm_file=@build_xm_file@
build_xm_defines=@build_xm_defines@
host_xm_file_list=@host_xm_file_list@
host_xm_file=@host_xm_file@
host_xm_defines=@host_xm_defines@
xm_file=@xm_file@
xm_defines=@xm_defines@
lang_specs_files=@lang_specs_files@
lang_options_files=@lang_options_files@
lang_tree_files=@lang_tree_files@
target_cpu_default=@target_cpu_default@
GCC_THREAD_FILE=@thread_file@
OBJC_BOEHM_GC=@objc_boehm_gc@
GTHREAD_FLAGS=@gthread_flags@
# Be prepared for gcc2 merges.
gcc_version=@gcc_version@
gcc_version_trigger=@gcc_version_trigger@
version=$(gcc_version)
mainversion=`grep version_string $(srcdir)/version.c | sed -e 's/.*\"\([0-9]*\.[0-9]*\).*/\1/'`

# Common prefix for installation directories.
# NOTE: This directory must exist when you start installation.
prefix = @prefix@
# Directory in which to put localized header files. On the systems with
# gcc as the native cc, `local_prefix' may not be `prefix' which is
# `/usr'.
# NOTE: local_prefix *should not* default from prefix.
local_prefix = @local_prefix@
# Directory in which to put host dependent programs and libraries
exec_prefix = @exec_prefix@
# Directory in which to put the executable for the command `gcc'
bindir = @bindir@
# Directory in which to put the directories used by the compiler.
libdir = @libdir@
# Directory in which the compiler finds executables, libraries, etc.
libsubdir = $(libdir)/gcc-lib/$(target_alias)/$(version)
# Used to produce a relative $(gcc_tooldir) in gcc.o
unlibsubdir = ../../..
# Directory in which to find other cross-compilation tools and headers.
dollar = @dollar@
# Used in install-cross.
gcc_tooldir = @gcc_tooldir@
# Used to install the shared libgcc.
slibdir = @slibdir@
# Since gcc_tooldir does not exist at build-time, use -B$(build_tooldir)/bin/
build_tooldir = $(exec_prefix)/$(target_alias)
# Directory in which the compiler finds target-independent g++ includes.
gcc_gxx_include_dir = @gcc_gxx_include_dir@
# Directory to search for site-specific includes.
local_includedir = $(local_prefix)/include
includedir = $(prefix)/include
# where the info files go
infodir = @infodir@
# Where cpp should go besides $prefix/bin if necessary
cpp_install_dir = @cpp_install_dir@
# where the locale files go
datadir = @datadir@
localedir = $(datadir)/locale
# Extension (if any) to put in installed man-page filename.
man1ext = .1
man7ext = .7
objext = .o
exeext = @host_exeext@
build_exeext = @build_exeext@

# Directory in which to put man pages.
mandir = @mandir@
man1dir = $(mandir)/man1
man7dir = $(mandir)/man7
# Dir for temp files.
tmpdir = /tmp

# Top build directory, relative to here.
top_builddir = .

# Whether we were configured with NLS.
USE_NLS = @USE_NLS@

# Internationalization library.
INTLLIBS = @INTLLIBS@
INTLDEPS = @INTLDEPS@

# Character encoding conversion library.
LIBICONV = @LIBICONV@

# List of internationalization subdirectories.
INTL_SUBDIRS = intl

# The GC method to be used on this system.
GGC=@GGC@.o

# If a supplementary library is being used for the GC.
GGC_LIB=

# libgcc.a may be built directly or via stmp-multilib,
# and installed likewise.  Overridden by t-fragment.
LIBGCC = libgcc.a
INSTALL_LIBGCC = install-libgcc

# Options to use when compiling libgcc2.a.
#
LIBGCC2_DEBUG_CFLAGS = -g
LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED @inhibit_libc@

# Additional options to use when compiling libgcc2.a.
# Some targets override this to -isystem include
LIBGCC2_INCLUDES =

# Additional target-dependent options for compiling libgcc2.a.
TARGET_LIBGCC2_CFLAGS =

# Options to use when compiling crtbegin/end.
CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
  -finhibit-size-directive -fno-inline-functions -fno-exceptions

# Additional sources to handle exceptions; overridden on ia64.
LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
  $(srcdir)/unwind-sjlj.c
LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h

# nm flags to list global symbols in libgcc object files.
SHLIB_NM_FLAGS = -pg

# List of extra executables that should be compiled for this target machine
# that are used for compiling from source code to object code.
# The rules for compiling them should be in the t-* file for the machine.
EXTRA_PASSES =@extra_passes@

# Like EXTRA_PASSES, but these are used when linking.
EXTRA_PROGRAMS = @extra_programs@

# List of extra object files that should be compiled for this target machine.
# The rules for compiling them should be in the t-* file for the machine.
EXTRA_PARTS = @extra_parts@

# List of extra object files that should be compiled and linked with
# compiler proper (cc1, cc1obj, cc1plus).
EXTRA_OBJS = @extra_objs@

# List of extra object files that should be compiled and linked with
# the gcc driver.
EXTRA_GCC_OBJS =@host_extra_gcc_objs@

# List of additional header files to install.
# Often this is edited directly by `configure'.
EXTRA_HEADERS =@extra_headers_list@

# It is convenient for configure to add the assignment at the beginning,
# so don't override it here.
USE_COLLECT2 = collect2$(exeext)

# List of extra C and assembler files to add to static and shared libgcc2.
# Assembler files should have names ending in `.asm'.
LIB2FUNCS_EXTRA =

# List of extra C and assembler files to add to static libgcc2.
# Assembler files should have names ending in `.asm'.
LIB2FUNCS_STATIC_EXTRA =

# Handle cpp installation.
INSTALL_CPP=
UNINSTALL_CPP=

# We do not try to build float.h anymore.  Let configure select the
# appropriate pre-built float.h file for the target.
FLOAT_H=@float_h_file@

# Program to convert libraries.
LIBCONVERT =

# Control whether header files are installed.
INSTALL_HEADERS=install-headers

# Control whether Info documentation is built and installed.
BUILD_INFO = @BUILD_INFO@

# Control whether manpages generated by texi2pod.pl can be rebuilt.
GENERATED_MANPAGES = @GENERATED_MANPAGES@

# Additional directories of header files to run fixincludes on.
# These should be directories searched automatically by default
# just as /usr/include is.
# *Do not* use this for directories that happen to contain
# header files, but are not searched automatically by default.
# On most systems, this is empty.
OTHER_FIXINCLUDES_DIRS=

# A list of all the language-specific executables.
# This is overridden by configure.
COMPILERS = cc1$(exeext) @all_compilers@

# List of things which should already be built whenever we try to use xgcc
# to compile anything (without linking).
GCC_PASSES=xgcc$(exeext) cc1$(exeext) cpp0$(exeext) specs $(EXTRA_PASSES)

# List of things which should already be built whenever we try to use xgcc
# to link anything.
GCC_PARTS=$(GCC_PASSES) $(LIBGCC) $(EXTRA_PROGRAMS) $(USE_COLLECT2) $(EXTRA_PARTS)

# Directory to link to, when using the target `maketest'.
DIR = ../gcc

# Flags to use when cross-building GCC.
# Prefix to apply to names of object files when using them
# to run on the machine we are compiling on.
HOST_PREFIX = @HOST_PREFIX@
# Prefix to apply to names of object files when compiling them
# to run on the machine we are compiling on.
# The default for this variable is chosen to keep these rules
# out of the way of the other rules for compiling the same source files.
HOST_PREFIX_1 = @HOST_PREFIX_1@
# Native compiler for the build machine and its switches.
HOST_CC = @HOST_CC@
HOST_CFLAGS= @HOST_CFLAGS@ -DGENERATOR_FILE

# Native linker and preprocessor flags.  For x-fragment overrides.
HOST_LDFLAGS=$(LDFLAGS)
HOST_CPPFLAGS=$(ALL_CPPFLAGS)

# Actual name to use when installing a native compiler.
GCC_INSTALL_NAME = `echo gcc|sed '$(program_transform_name)'`
GCC_TARGET_INSTALL_NAME = $(target_alias)-`echo gcc|sed '$(program_transform_name)'`
CPP_INSTALL_NAME = `echo cpp|sed '$(program_transform_name)'`
PROTOIZE_INSTALL_NAME = `echo protoize|sed '$(program_transform_name)'`
UNPROTOIZE_INSTALL_NAME = `echo unprotoize|sed '$(program_transform_name)'`
GCOV_INSTALL_NAME = `echo gcov|sed '$(program_transform_name)'`
GCCBUG_INSTALL_NAME = `echo gccbug|sed '$(program_transform_name)'`

# Actual name to use when installing a cross-compiler.
GCC_CROSS_NAME = `echo gcc|sed '$(program_transform_cross_name)'`
CPP_CROSS_NAME = `echo cpp|sed '$(program_transform_cross_name)'`
PROTOIZE_CROSS_NAME = `echo protoize|sed '$(program_transform_cross_name)'`
UNPROTOIZE_CROSS_NAME = `echo unprotoize|sed '$(program_transform_cross_name)'`

# Set by autoconf to "all.internal" for a native build, or
# "all.cross" to build a cross compiler.
ALL = @ALL@

# Setup the testing framework, if you have one
EXPECT = `if [ -f $${rootme}/../expect/expect ] ; then \
            echo $${rootme}/../expect/expect ; \
          else echo expect ; fi`

RUNTEST = `if [ -f $${srcdir}/../dejagnu/runtest ] ; then \
	       echo $${srcdir}/../dejagnu/runtest ; \
	    else echo runtest; fi`
RUNTESTFLAGS =

# Extra symbols for fixproto to define when parsing headers.
FIXPROTO_DEFINES =

# Extra flags to use when compiling crt{begin,end}.o.
CRTSTUFF_T_CFLAGS =

# Extra flags to use when compiling [m]crt0.o.
CRT0STUFF_T_CFLAGS =

# "t" or nothing, for building multilibbed versions of, say, crtbegin.o.
T =

# Should T contain a `=', libgcc.mk will make T_TARGET, setting
# $(T_TARGET) to the name of the actual target filename.
T_TARGET =
T_TARGET : $(T_TARGET)

# End of variables for you to override.

# Definition of `all' is here so that new rules inserted by sed
# do not specify the default target.
# The real definition is under `all.internal' (for native compilers)
# or `all.cross' (for cross compilers).
all: all.indirect

# This tells GNU Make version 3 not to put all variables in the environment.
.NOEXPORT:

# GCONFIG_H lists the config files that the generator files depend on, while
# CONFIG_H lists the the ones ordinary gcc files depend on, which includes
# several files generated by those generators.
GCONFIG_H = config.h $(host_xm_file_list)
HCONFIG_H = hconfig.h $(build_xm_file_list)
CONFIG_H = $(GCONFIG_H) insn-constants.h insn-flags.h
TCONFIG_H = tconfig.h $(xm_file_list)
TARGET_H = target.h
HOOKS_H = hooks.h
TARGET_DEF_H = target-def.h $(HOOKS_H)
TM_P_H = tm_p.h $(tm_p_file_list) tm-preds.h

MACHMODE_H = machmode.h machmode.def
RTL_BASE_H = rtl.h rtl.def $(MACHMODE_H)
RTL_H = $(RTL_BASE_H) genrtl.h
PARAMS_H = params.h params.def
TREE_H = tree.h real.h tree.def $(MACHMODE_H) tree-check.h version.h builtins.def
BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h
DEMANGLE_H = $(srcdir)/../include/demangle.h
RECOG_H = recog.h
EXPR_H = expr.h
OPTABS_H = optabs.h insn-codes.h
REGS_H = regs.h varray.h $(MACHMODE_H)
INTEGRATE_H = integrate.h varray.h
LOOP_H = loop.h varray.h bitmap.h
GCC_H = gcc.h version.h
GGC_H = ggc.h varray.h
TIMEVAR_H = timevar.h timevar.def
INSN_ATTR_H = insn-attr.h $(srcdir)/insn-addr.h $(srcdir)/varray.h
C_COMMON_H = c-common.h $(SPLAY_TREE_H)
C_TREE_H = c-tree.h $(C_COMMON_H)
SYSTEM_H = system.h hwint.h $(srcdir)/../include/libiberty.h
PREDICT_H = predict.h predict.def
CPPLIB_H = cpplib.h line-map.h

# sed inserts variable overrides after the following line.
####target overrides
@target_overrides@

####host overrides
@host_overrides@
#
# Now figure out from those variables how to compile and link.

all.indirect: $(ALL)

# IN_GCC distinguishes between code compiled into GCC itself and other
# programs built during a bootstrap.
# autoconf inserts -DCROSS_COMPILE if we are building a cross compiler.
INTERNAL_CFLAGS = -DIN_GCC @CROSS@

# This is the variable actually used when we compile.
# If you change this line, you probably also need to change the definition
# of HOST_CFLAGS in build-make to match.
ALL_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) \
  $(CFLAGS) $(WARN_CFLAGS) $(XCFLAGS) @DEFS@

# Likewise.
ALL_CPPFLAGS = $(CPPFLAGS) $(X_CPPFLAGS) $(T_CPPFLAGS)

# Build and host support libraries.  FORBUILD is either
# .. or ../$(build_alias) depending on whether host != build.
LIBIBERTY = ../libiberty/libiberty.a
BUILD_LIBIBERTY = @FORBUILD@/libiberty/libiberty.a

# Dependencies on the intl and portability libraries.
LIBDEPS= $(INTLDEPS) $(LIBIBERTY)

# Likewise, for use in the tools that must run on this machine
# even if we are cross-building GCC.
HOST_LIBDEPS= $(BUILD_LIBIBERTY)

# How to link with both our special library facilities
# and the system's installed libraries.
LIBS =	$(INTLLIBS) @LIBS@ $(LIBIBERTY)

# Likewise, for use in the tools that must run on this machine
# even if we are cross-building GCC.
HOST_LIBS = $(BUILD_LIBIBERTY)

HOST_RTL = $(HOST_PREFIX)rtl.o read-rtl.o $(HOST_PREFIX)bitmap.o \
		$(HOST_PREFIX)ggc-none.o gensupport.o

HOST_PRINT = $(HOST_PREFIX)print-rtl.o
HOST_ERRORS = $(HOST_PREFIX)errors.o

# Specify the directories to be searched for header files.
# Both . and srcdir are used, in that order,
# so that *config.h will be found in the compilation
# subdirectory rather than in the source directory.
# -I$(@D) and -I$(srcdir)/$(@D) cause the subdirectory of the file
# currently being compiled, in both source trees, to be examined as well.
INCLUDES = -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \
	   -I$(srcdir)/config -I$(srcdir)/../include

# Always use -I$(srcdir)/config when compiling.
.c.o:
	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)

# This tells GNU make version 3 not to export all the variables
# defined in this file into the environment.
.NOEXPORT:
#
# Support for additional languages (other than c and objc).
# ??? objc can be supported this way too (leave for later).

# These next lines are overridden by configure.
LANG_MAKEFILES = @all_lang_makefiles@
LANG_STAGESTUFF = @all_stagestuff@

# Flags to pass to recursive makes.
# CC is set by configure.  Hosts without symlinks need special handling
# because we need CC="stage1/xgcc -Bstage1/" to work in the language
# subdirectories.
# ??? The choices here will need some experimenting with.
ORDINARY_FLAGS_TO_PASS = \
	"AR_FLAGS_FOR_TARGET=$(AR_FLAGS_FOR_TARGET)" \
	"AR_CREATE_FOR_TARGET=$(AR_CREATE_FOR_TARGET)" \
	"AR_EXTRACT_FOR_TARGET=$(AR_EXTRACT_FOR_TARGET)" \
	"AR_FOR_TARGET=$(AR_FOR_TARGET)" \
	"BISON=$(BISON)" \
	"BISONFLAGS=$(BISONFLAGS)" \
	"CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
	"GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
	"LDFLAGS=$(LDFLAGS)" \
	"FLEX=$(FLEX)" \
	"FLEXFLAGS=$(FLEXFLAGS)" \
	"LN=$(LN)" \
	"LN_S=$(LN_S)" \
	"MAKEINFO=$(MAKEINFO)" \
	"MAKEINFOFLAGS=$(MAKEINFOFLAGS)" \
	"MAKEOVERRIDES=" \
	"RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET)" \
	"RANLIB_TEST_FOR_TARGET=$(RANLIB_TEST_FOR_TARGET)" \
	"SHELL=$(SHELL)" \
	"exeext=$(exeext)" \
	"build_exeext=$(build_exeext)" \
	"objext=$(objext)" \
	"exec_prefix=$(exec_prefix)" \
	"prefix=$(prefix)" \
	"local_prefix=$(local_prefix)" \
	"gxx_include_dir=$(gcc_gxx_include_dir)" \
	"build_tooldir=$(build_tooldir)" \
	"gcc_tooldir=$(gcc_tooldir)" \
	"bindir=$(bindir)" \
	"libsubdir=$(libsubdir)" \
	"datadir=$(datadir)" \
	"localedir=$(localedir)"
FLAGS_TO_PASS = $(ORDINARY_FLAGS_TO_PASS) "CC=@cc_set_by_configure@" \
	"STAGE_PREFIX=@stage_prefix_set_by_configure@"
PREPEND_DOTDOT_TO_RELATIVE_PATHS = sed \
	-e 's|^ *[^ /][^ /]*/|%&|' \
	-e 's| -B| -B%|g' \
	-e 's|% *[^- /]|%&|g' \
	-e 's|%% *|../|g' \
	-e 's|%||g'
SUBDIR_FLAGS_TO_PASS = $(ORDINARY_FLAGS_TO_PASS) \
	"CC=`echo @quoted_cc_set_by_configure@ | $(PREPEND_DOTDOT_TO_RELATIVE_PATHS)`" \
	"STAGE_PREFIX=`echo @quoted_stage_prefix_set_by_configure@ | $(PREPEND_DOTDOT_TO_RELATIVE_PATHS)`"
#
# Lists of files for various purposes.

# Target specific, C specific object file
C_TARGET_OBJS=@c_target_objs@

# Target specific, C++ specific object file
CXX_TARGET_OBJS=@cxx_target_objs@

# Language-specific object files for C and Objective C.
C_AND_OBJC_OBJS = attribs.o c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o \
  c-convert.o c-aux-info.o c-common.o c-format.o c-semantics.o \
  c-objc-common.o libcpp.a $(C_TARGET_OBJS)

# Language-specific object files for C.
C_OBJS = c-parse.o c-lang.o $(C_AND_OBJC_OBJS)

# Language-independent object files.

OBJS = alias.o bb-reorder.o bitmap.o builtins.o caller-save.o calls.o	\
 cfg.o cfganal.o cfgbuild.o cfgcleanup.o cfglayout.o cfgloop.o cfgrtl.o \
 combine.o conflict.o convert.o cse.o cselib.o dbxout.o debug.o dependence.o \
 df.o diagnostic.o doloop.o dominance.o dwarf2asm.o dwarf2out.o dwarfout.o \
 emit-rtl.o except.o explow.o expmed.o expr.o final.o flow.o 		\
 fold-const.o function.o gcse.o genrtl.o ggc-common.o global.o graph.o	\
 haifa-sched.o hash.o hashtable.o hooks.o ifcvt.o insn-attrtab.o insn-emit.o \
 insn-extract.o insn-opinit.o insn-output.o insn-peep.o insn-recog.o	\
 integrate.o intl.o jump.o  langhooks.o lcm.o lists.o local-alloc.o 	\
 loop.o mbchar.o optabs.o params.o predict.o print-rtl.o print-tree.o	\
 profile.o real.o recog.o reg-stack.o regclass.o regmove.o regrename.o	\
 reload.o reload1.o reorg.o resource.o rtl.o rtlanal.o rtl-error.o	\
 sbitmap.o sched-deps.o sched-ebb.o sched-rgn.o sched-vis.o sdbout.o	\
 sibcall.o simplify-rtx.o ssa.o ssa-ccp.o ssa-dce.o stmt.o	\
 stor-layout.o stringpool.o timevar.o toplev.o tree.o tree-dump.o 	\
 tree-inline.o unroll.o varasm.o varray.o version.o vmsdbgout.o xcoffout.o \
 $(GGC) $(out_object_file) $(EXTRA_OBJS)

BACKEND = main.o libbackend.a

# GEN files are listed separately, so they can be built before doing parallel
#  makes for cc1 or cc1plus.  Otherwise sequent parallel make attempts to load
#  them before rtl.o is compiled.
GEN= genemit$(build_exeext) genoutput$(build_exeext) genrecog$(build_exeext) \
 genextract$(build_exeext) genflags$(build_exeext) gencodes$(build_exeext)   \
 genconfig$(build_exeext) genpeep$(build_exeext) gengenrtl$(build_exeext)    \
 gencheck$(build_exeext) genpreds$(build_exeext) genconstants$(build_exeext)

# Files to be copied away after each stage in building.
STAGESTUFF = *$(objext) insn-flags.h insn-config.h insn-codes.h \
 insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \
 insn-attr.h insn-attrtab.c insn-opinit.c insn-constants.h tm-preds.h \
 tree-check.h \
 s-flags s-config s-codes s-mlib s-under s-genrtl \
 s-output s-recog s-emit s-extract s-peep s-check \
 s-attr s-attrtab s-opinit s-preds s-constants s-crt0 \
 genemit$(build_exeext) genoutput$(build_exeext) genrecog$(build_exeext) \
 genextract$(build_exeext) genflags$(build_exeext) gencodes$(build_exeext) \
 genconfig$(build_exeext) genpeep$(build_exeext) genattrtab$(build_exeext) \
 genattr$(build_exeext) genopinit$(build_exeext) gengenrtl$(build_exeext) \
 gencheck$(build_exeext) genpreds$(build_exeext) genconstants$(build_exeext) \
 genrtl.c genrtl.h \
 xgcc$(exeext) cpp$(exeext) cc1$(exeext) cpp0$(exeext) $(EXTRA_PASSES) \
 $(EXTRA_PARTS) $(EXTRA_PROGRAMS) gcc-cross$(exeext) cc1obj$(exeext) \
 enquire$(exeext) protoize$(exeext) unprotoize$(exeext) \
 specs collect2$(exeext) $(USE_COLLECT2) underscore.c tradcpp0$(exeext) \
 gcov$(exeext) *.[0-9][0-9].* *.[si] libcpp.a libbackend.a libgcc.mk \
 $(LANG_STAGESTUFF)

# Library members defined in libgcc2.c.
# Variable length limited to 255 charactes when passed to a shell script.
LIB2FUNCS_1 = _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 _ffsdi2 _clz \
    _cmpdi2 _ucmpdi2 _floatdidf _floatdisf _fixunsdfsi _fixunssfsi \
    _fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi _fixxfdi _fixunsxfdi

LIB2FUNCS_2 = _floatdixf _fixunsxfsi _fixtfdi _fixunstfdi _floatditf \
    _clear_cache _trampoline __main _exit _absvsi2 _absvdi2 _addvsi3 \
    _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors

# Defined in libgcc2.c, included only in the static library.
LIB2FUNCS_ST = _eprintf _bb __gcc_bcmp

FPBIT_FUNCS = _pack_sf _unpack_sf _addsub_sf _mul_sf _div_sf \
    _fpcmp_parts_sf _compare_sf _eq_sf _ne_sf _gt_sf _ge_sf \
    _lt_sf _le_sf _unord_sf _si_to_sf _sf_to_si _negate_sf _make_sf \
    _sf_to_df _thenan_sf _sf_to_usi _usi_to_sf

DPBIT_FUNCS = _pack_df _unpack_df _addsub_df _mul_df _div_df \
    _fpcmp_parts_df _compare_df _eq_df _ne_df _gt_df _ge_df \
    _lt_df _le_df _unord_df _si_to_df _df_to_si _negate_df _make_df \
    _df_to_sf _thenan_df _df_to_usi _usi_to_df

# These might cause a divide overflow trap and so are compiled with
# unwinder info.
LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4

#
# Language makefile fragments.

# The following targets define the interface between us and the languages.
#
# all.cross, start.encap, rest.encap,
# info, dvi,
# install-normal, install-common, install-info, install-man,
# uninstall,
# mostlyclean, clean, distclean, extraclean, maintainer-clean,
# stage1, stage2, stage3, stage4
#
# Each language is linked in with a series of hooks (since we can't use `::'
# targets).  The name of each hooked is "lang.${target_name}" (eg: lang.info).
# Configure computes and adds these here.

####language hooks
@language_hooks@

# sed inserts language fragments after the following line.
####language fragments
@language_fragments@

# End of language makefile fragments.
#
# The only suffixes we want for implicit rules are .c and .o, so clear
# the list and add them.  This speeds up GNU Make, and allows -r to work.
# For i18n support, we also need .gmo, .po, .pox.
.SUFFIXES:
.SUFFIXES: .c .o .po .pox .gmo 

Makefile: $(srcdir)/Makefile.in config.status $(srcdir)/version.c \
   $(xmake_file) $(tmake_file) $(LANG_MAKEFILES)
	$(SHELL) $(srcdir)/configure.frag $(srcdir) "$(SUBDIRS)" \
		"$(xmake_file)" "$(tmake_file)"
	cp config.status config.run
	LANGUAGES="$(CONFIG_LANGUAGES)" $(SHELL) config.run
	rm -f config.run

config.h: cs-config.h ; @true
hconfig.h: cs-hconfig.h ; @true
tconfig.h: cs-tconfig.h ; @true
tm_p.h: cs-tm_p.h ; @true

cs-config.h: Makefile
	HEADERS="$(host_xm_file)" DEFINES="$(host_xm_defines)" \
	TARGET_CPU_DEFAULT="$(target_cpu_default)" \
	$(SHELL) $(srcdir)/mkconfig.sh config.h

cs-hconfig.h: Makefile
	HEADERS="$(build_xm_file)" DEFINES="$(build_xm_defines)" \
	TARGET_CPU_DEFAULT="$(target_cpu_default)" \
	$(SHELL) $(srcdir)/mkconfig.sh hconfig.h

cs-tconfig.h: Makefile
	HEADERS="$(xm_file)" DEFINES="$(xm_defines)" \
	TARGET_CPU_DEFAULT="" \
	$(SHELL) $(srcdir)/mkconfig.sh tconfig.h

cs-tm_p.h: Makefile
	HEADERS="$(tm_p_file)" DEFINES="" TARGET_CPU_DEFAULT="" \
	$(SHELL) $(srcdir)/mkconfig.sh tm_p.h

# Don't automatically run autoconf, since configure.in might be accidentally
# newer than configure.  Also, this writes into the source directory which
# might be on a read-only file system.  If configured for maintainer mode
# then do allow autoconf to be run.

$(srcdir)/configure: @MAINT@ $(srcdir)/configure.in
	(cd $(srcdir) && autoconf)

gccbug:	$(srcdir)/gccbug.in
	CONFIG_FILES=gccbug CONFIG_HEADERS= ./config.status

mklibgcc: $(srcdir)/mklibgcc.in
	CONFIG_FILES=mklibgcc CONFIG_HEADERS= ./config.status

# cstamp-h.in controls rebuilding of config.in.
# It is named cstamp-h.in and not stamp-h.in so the mostlyclean rule doesn't
# delete it.  A stamp file is needed as autoheader won't update the file if
# nothing has changed.
# It remains in the source directory and is part of the distribution.
# This follows what is done in shellutils, fileutils, etc.
# "echo timestamp" is used instead of touch to be consistent with other
# packages that use autoconf (??? perhaps also to avoid problems with patch?).
# ??? Newer versions have a maintainer mode that may be useful here.

# Don't run autoheader automatically either.
# Only run it if maintainer mode is enabled.
@MAINT@ $(srcdir)/config.in: $(srcdir)/cstamp-h.in
@MAINT@ $(srcdir)/cstamp-h.in: $(srcdir)/configure.in $(srcdir)/acconfig.h
@MAINT@	(cd $(srcdir) && autoheader)
@MAINT@	@rm -f $(srcdir)/cstamp-h.in
@MAINT@	echo timestamp > $(srcdir)/cstamp-h.in
auto-host.h: cstamp-h ; @true
cstamp-h: config.in config.status
	CONFIG_HEADERS=auto-host.h:config.in LANGUAGES="$(CONFIG_LANGUAGES)" $(SHELL) config.status

# Really, really stupid make features, such as SUN's KEEP_STATE, may force
# a target to build even if it is up-to-date.  So we must verify that
# config.status does not exist before failing.
config.status: $(srcdir)/configure $(srcdir)/config.gcc version.c
	@if [ ! -f config.status ] ; then \
	  echo You must configure gcc.  Look at http://gcc.gnu.org/install/ for details.; \
	  false; \
	else \
	  LANGUAGES="$(CONFIG_LANGUAGES)" $(SHELL) config.status --recheck; \
	fi

all.internal: start.encap rest.encap doc
# This is what to compile if making a cross-compiler.
# Note that we can compile enquire using the cross-compiler just built,
# although we can't run it on this machine.
all.cross: native gcc-cross cpp$(exeext) specs \
	$(LIBGCC) $(EXTRA_PARTS) lang.all.cross doc
# This is what must be made before installing GCC and converting libraries.
start.encap: native xgcc$(exeext) cpp$(exeext) specs \
	xlimits.h lang.start.encap
# These can't be made until after GCC can run.
rest.encap: $(STMP_FIXPROTO) $(LIBGCC) $(EXTRA_PARTS) lang.rest.encap
# This is what is made with the host's compiler
# whether making a cross compiler or not.
native: config.status auto-host.h intl.all build-@POSUB@ $(LANGUAGES) \
	$(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2)

# Define the names for selecting languages in LANGUAGES.
C c: cc1$(exeext) tradcpp0$(exeext)
PROTO: proto

# Tell GNU make these are phony targets.
.PHONY: C c PROTO proto

# On the target machine, finish building a cross compiler.
# This does the things that can't be done on the host machine.
rest.cross: $(LIBGCC) specs

# Recompile all the language-independent object files.
# This is used only if the user explicitly asks for it.
compilations: $(BACKEND)

# Like libcpp.a, this archive is strictly for the host.
libbackend.a: $(OBJS)
	-rm -rf libbackend.a
	$(AR) $(AR_FLAGS) libbackend.a $(OBJS)
	-$(RANLIB) libbackend.a

# We call this executable `xgcc' rather than `gcc'
# to avoid confusion if the current directory is in the path
# and CC is `gcc'.  It is renamed to `gcc' when it is installed.
xgcc$(exeext): gcc.o gccspec.o version.o intl.o prefix.o \
   version.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ gcc.o gccspec.o intl.o \
	  prefix.o version.o $(EXTRA_GCC_OBJS) $(LIBS)

# cpp is to cpp0 as gcc is to cc1.
# The only difference from xgcc is that it's linked with cppspec.o
# instead of gccspec.o.
cpp$(exeext): gcc.o cppspec.o version.o intl.o prefix.o \
   version.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ gcc.o cppspec.o intl.o \
	  prefix.o version.o $(EXTRA_GCC_OBJS) $(LIBS)

# Dump a specs file to make -B./ read these specs over installed ones.
specs: xgcc$(exeext)
	$(GCC_FOR_TARGET) -dumpspecs > tmp-specs
	mv tmp-specs specs

# We do want to create an executable named `xgcc', so we can use it to
# compile libgcc2.a.
# Also create gcc-cross, so that install-common will install properly.
gcc-cross: xgcc$(exeext)
	cp xgcc$(exeext) gcc-cross$(exeext)

cc1$(exeext): $(C_OBJS) $(BACKEND) $(LIBDEPS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cc1$(exeext) \
		$(C_OBJS) $(BACKEND) $(LIBS)

# Build the version of limits.h that we will install.
xlimits.h: glimits.h limitx.h limity.h
	if $(LIMITS_H_TEST) ; then \
	  cat $(srcdir)/limitx.h $(srcdir)/glimits.h $(srcdir)/limity.h > tmp-xlimits.h; \
	else \
	  cat $(srcdir)/glimits.h > tmp-xlimits.h; \
	fi
	mv tmp-xlimits.h xlimits.h
#
# Build libgcc.a.

LIB2ADD = $(LIB2FUNCS_EXTRA)
LIB2ADD_ST = $(LIB2FUNCS_STATIC_EXTRA)

libgcc.mk: config.status Makefile mklibgcc $(LIB2ADD) $(LIB2ADD_ST) xgcc$(exeext)
	objext='$(objext)' \
	LIB1ASMFUNCS='$(LIB1ASMFUNCS)' \
	LIB2FUNCS_1='$(LIB2FUNCS_1)' \
	LIB2FUNCS_2='$(LIB2FUNCS_2)' \
	LIB2FUNCS_ST='$(LIB2FUNCS_ST)' \
	LIB2ADD='$(LIB2ADD)' \
	LIB2ADD_ST='$(LIB2ADD_ST)' \
	LIB2ADDEH='$(LIB2ADDEH)' \
	LIB2ADDEHDEP='$(LIB2ADDEHDEP)' \
	FPBIT='$(FPBIT)' \
	FPBIT_FUNCS='$(FPBIT_FUNCS)' \
	LIB2_DIVMOD_FUNCS='$(LIB2_DIVMOD_FUNCS)' \
	DPBIT='$(DPBIT)' \
	DPBIT_FUNCS='$(DPBIT_FUNCS)' \
	MULTILIBS=`$(GCC_FOR_TARGET) --print-multi-lib` \
	EXTRA_MULTILIB_PARTS='$(EXTRA_MULTILIB_PARTS)' \
	SHLIB_LINK='$(SHLIB_LINK)' \
	SHLIB_INSTALL='$(SHLIB_INSTALL)' \
	SHLIB_EXT='$(SHLIB_EXT)' \
	SHLIB_MULTILIB='$(SHLIB_MULTILIB)' \
	SHLIB_MKMAP='$(SHLIB_MKMAP)' \
	SHLIB_MKMAP_OPTS='$(SHLIB_MKMAP_OPTS)' \
	SHLIB_MAPFILES='$(SHLIB_MAPFILES)' \
	SHLIB_NM_FLAGS='$(SHLIB_NM_FLAGS)' \
	SHLIB_SLIBDIR_SUFFIXES='$(SHLIB_SLIBDIR_SUFFIXES)' \
	mkinstalldirs='$(SHELL) $(srcdir)/mkinstalldirs' \
	  $(SHELL) mklibgcc > tmp-libgcc.mk
	mv tmp-libgcc.mk libgcc.mk

# All the things that might cause us to want to recompile bits of libgcc.
LIBGCC_DEPS = $(GCC_PASSES) $(LANGUAGES) stmp-int-hdrs $(STMP_FIXPROTO) \
	libgcc.mk $(srcdir)/libgcc2.c $(TCONFIG_H) \
	$(MACHMODE_H) longlong.h gbl-ctors.h config.status stmp-int-hdrs \
	tsystem.h $(FPBIT) $(DPBIT) $(LIB2ADD) $(LIB2ADD_ST) $(LIB2ADDEH) \
	$(LIB2ADDEHDEP) $(EXTRA_PARTS) $(srcdir)/config/$(LIB1ASMSRC)

libgcc.a: $(LIBGCC_DEPS)
	$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
	  HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
	  AR_FOR_TARGET="$(AR_FOR_TARGET)" \
	  AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \
	  AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \
	  CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
	  RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \
	  RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \
	  NM_FOR_TARGET="$(NM_FOR_TARGET)" AWK="$(AWK)" \
	  LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \
	  INCLUDES="$(INCLUDES)" \
	  CONFIG_H="$(TCONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \
	  LIB1ASMSRC='$(LIB1ASMSRC)' \
	  MAKEOVERRIDES= \
	  -f libgcc.mk all

# Use the genmultilib shell script to generate the information the gcc
# driver program needs to select the library directory based on the
# switches.
multilib.h: s-mlib; @true
s-mlib: $(srcdir)/genmultilib Makefile
	if test @enable_multilib@ = yes; then \
	  $(SHELL) $(srcdir)/genmultilib \
	    "$(MULTILIB_OPTIONS)" \
	    "$(MULTILIB_DIRNAMES)" \
	    "$(MULTILIB_MATCHES)" \
	    "$(MULTILIB_EXCEPTIONS)" \
	    "$(MULTILIB_EXTRA_OPTS)" \
	    "$(MULTILIB_EXCLUSIONS)" \
	    > tmp-mlib.h; \
	else \
	  $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' > tmp-mlib.h; \
	fi
	$(SHELL) $(srcdir)/move-if-change tmp-mlib.h multilib.h
	$(STAMP) s-mlib

# Build multiple copies of libgcc.a, one for each target switch.
stmp-multilib: $(LIBGCC_DEPS)
	$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
	  HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
	  AR_FOR_TARGET="$(AR_FOR_TARGET)" \
	  AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \
	  AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \
	  CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
	  RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \
	  RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \
	  NM_FOR_TARGET="$(NM_FOR_TARGET)" AWK="$(AWK)" \
	  LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \
	  INCLUDES="$(INCLUDES)" \
	  CONFIG_H="$(CONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \
	  LIB1ASMSRC='$(LIB1ASMSRC)' \
	  MAKEOVERRIDES= \
	  -f libgcc.mk all
	$(STAMP) stmp-multilib

# Compile two additional files that are linked with every program
# linked using GCC on systems using COFF or ELF, for the sake of C++
# constructors.
$(T)crtbegin.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
  gbl-ctors.h stmp-int-hdrs tsystem.h
	$(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \
	  @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN \
	  -o $(T)crtbegin$(objext)

$(T)crtend.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
  gbl-ctors.h stmp-int-hdrs tsystem.h
	$(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \
	  @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_END \
	  -o $(T)crtend$(objext)

# These are versions of crtbegin and crtend for shared libraries.
$(T)crtbeginS.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
  gbl-ctors.h stmp-int-hdrs tsystem.h
	$(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS_S) \
	  @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFS_O \
	  -o $(T)crtbeginS$(objext)

$(T)crtendS.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
  gbl-ctors.h stmp-int-hdrs tsystem.h
	$(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS_S) \
	  @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_END -DCRTSTUFFS_O \
	  -o $(T)crtendS$(objext)

# This is a version of crtbegin for -static links.
$(T)crtbeginT.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
  gbl-ctors.h stmp-int-hdrs tsystem.h
	$(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \
	  @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFT_O \
	  -o $(T)crtbeginT$(objext)

# Compile the start modules crt0.o and mcrt0.o that are linked with
# every program
crt0.o: s-crt0 ; @true
mcrt0.o: s-crt0; @true

s-crt0:	$(CRT0_S) $(MCRT0_S) $(GCC_PASSES) $(CONFIG_H)
	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(CRT0STUFF_T_CFLAGS) \
	  -o crt0.o -c $(CRT0_S)
	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(CRT0STUFF_T_CFLAGS) \
	  -o mcrt0.o -c $(MCRT0_S)
	$(STAMP) s-crt0
#
# Compiling object files from source files.

# Note that dependencies on obstack.h are not written
# because that file is not part of GCC.

# C language specific files.

c-errors.o: c-errors.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) flags.h \
    diagnostic.h $(TM_P_H)
c-parse.o : $(srcdir)/c-parse.c $(CONFIG_H) $(TREE_H) c-lex.h $(GGC_H) intl.h \
    $(C_TREE_H) input.h flags.h $(SYSTEM_H) toplev.h output.h $(CPPLIB_H)
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
	       -c $(srcdir)/c-parse.c $(OUTPUT_OPTION)

$(srcdir)/c-parse.c: $(srcdir)/c-parse.y
	cd $(srcdir) && \
	if $(BISON) $(BISONFLAGS) -o c-p$$$$.c c-parse.y; then \
	  test -f c-p$$$$.output && mv -f c-p$$$$.output c-parse.output ; \
	  mv -f c-p$$$$.c c-parse.c ; \
	else \
	  rm -f c-p$$$$.* ; \
	  false ; \
	fi

$(srcdir)/c-parse.y: c-parse.in
	echo '/*WARNING: This file is automatically generated!*/' >tmp-c-parse.y
	sed -e "/^ifobjc$$/,/^end ifobjc$$/d" \
	  -e "/^ifc$$/d" -e "/^end ifc$$/d" \
	  $(srcdir)/c-parse.in >>tmp-c-parse.y
	$(SHELL) $(srcdir)/move-if-change tmp-c-parse.y $(srcdir)/c-parse.y

c-decl.o : c-decl.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) $(C_TREE_H) \
    $(GGC_H) $(TARGET_H) c-lex.h flags.h function.h output.h $(EXPR_H) \
    debug.h toplev.h intl.h $(TM_P_H) tree-inline.h $(TIMEVAR_H) c-pragma.h
c-typeck.o : c-typeck.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
    $(TARGET_H) flags.h intl.h output.h $(EXPR_H) $(RTL_H) toplev.h $(TM_P_H)
c-lang.o : c-lang.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
    langhooks.h langhooks-def.h
c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) c-lex.h \
    debug.h $(C_TREE_H) \
    c-pragma.h input.h intl.h flags.h toplev.h output.h \
    mbchar.h $(CPPLIB_H) $(EXPR_H) $(TM_P_H)
c-objc-common.o : c-objc-common.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) \
    $(C_TREE_H) $(RTL_H) insn-config.h integrate.h $(EXPR_H) $(C_TREE_H) \
    flags.h toplev.h tree-inline.h diagnostic.h integrate.h $(VARRAY_H) \
    $(GGC_H)
c-aux-info.o : c-aux-info.c  $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
    flags.h toplev.h
c-convert.o : c-convert.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h toplev.h
c-pragma.o: c-pragma.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) function.h \
    c-pragma.h toplev.h output.h $(GGC_H) $(TM_P_H) $(C_COMMON_H)
mbchar.o: mbchar.c $(CONFIG_H) $(SYSTEM_H) mbchar.h
graph.o: graph.c $(CONFIG_H) $(SYSTEM_H) toplev.h flags.h output.h $(RTL_H) \
    function.h hard-reg-set.h $(BASIC_BLOCK_H) graph.h
sbitmap.o: sbitmap.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h hard-reg-set.h \
    $(BASIC_BLOCK_H)

COLLECT2_OBJS = collect2.o tlink.o hash.o intl.o underscore.o version.o
COLLECT2_LIBS = @COLLECT2_LIBS@
collect2$(exeext): $(COLLECT2_OBJS) $(LIBDEPS)
# Don't try modifying collect2 (aka ld) in place--it might be linking this.
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o T$@ \
		$(COLLECT2_OBJS) $(LIBS) $(COLLECT2_LIBS)
	mv -f T$@ $@

collect2.o : collect2.c $(CONFIG_H) $(SYSTEM_H) gstab.h intl.h \
	$(OBSTACK_H) $(DEMANGLE_H) collect2.h version.h
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES)  \
	-DTARGET_MACHINE=\"$(target_alias)\" \
	-c $(srcdir)/collect2.c $(OUTPUT_OPTION)

tlink.o: tlink.c $(DEMANGLE_H) hash.h $(CONFIG_H) $(SYSTEM_H) collect2.h intl.h
hash.o: hash.c hash.h $(SYSTEM_H) toplev.h $(GCONFIG_H)
	$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)

underscore.c: s-under ; @true

s-under: $(GCC_PASSES)
	echo "int xxy_us_dummy;" >tmp-dum.c
	$(GCC_FOR_TARGET) -S tmp-dum.c
	echo '/*WARNING: This file is automatically generated!*/' >tmp-under.c
	if grep _xxy_us_dummy tmp-dum.s > /dev/null ; then \
	  echo "int prepends_underscore = 1;" >>tmp-under.c; \
	else \
	  echo "int prepends_underscore = 0;" >>tmp-under.c; \
	fi
	$(SHELL) $(srcdir)/move-if-change tmp-under.c underscore.c
	-rm -f tmp-dum.c tmp-dum.s
	$(STAMP) s-under

# A file used by all variants of C.

c-common.o : c-common.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(OBSTACK_H) \
	$(C_COMMON_H) flags.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \
	$(EXPR_H) $(TM_P_H) builtin-types.def builtin-attrs.def $(TARGET_H) \
	diagnostic.h tree-inline.h

# A file used by all variants of C and some other languages.

attribs.o : attribs.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(OBSTACK_H) flags.h \
	toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) $(EXPR_H) $(TM_P_H) \
	builtin-types.def $(TARGET_H)

c-format.o : c-format.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) \
	$(C_COMMON_H) flags.h toplev.h intl.h diagnostic.h

c-semantics.o : c-semantics.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
	c-lex.h flags.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \
	$(EXPR_H)

# Language-independent files.

DRIVER_DEFINES = \
  -DSTANDARD_STARTFILE_PREFIX=\"$(unlibsubdir)/\" \
  -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-lib/\" \
  -DDEFAULT_TARGET_VERSION=\"$(version)\" \
  -DDEFAULT_TARGET_MACHINE=\"$(target_alias)\" \
  -DSTANDARD_BINDIR_PREFIX=\"$(bindir)/\" \
  -DTOOLDIR_BASE_PREFIX=\"$(unlibsubdir)/../\" \
  `test "X$${SHLIB_LINK}" = "X" || test "@enable_shared@" != "yes" || echo "-DENABLE_SHARED_LIBGCC"` \
  `test "X$${SHLIB_MULTILIB}" = "X" || echo "-DNO_SHARED_LIBGCC_MULTILIB"`

gcc.o: gcc.c $(CONFIG_H) $(SYSTEM_H) intl.h multilib.h \
    Makefile $(lang_specs_files) specs.h prefix.h $(GCC_H)
	(SHLIB_LINK='$(SHLIB_LINK)' \
	SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  $(DRIVER_DEFINES) \
  -c $(srcdir)/gcc.c $(OUTPUT_OPTION))

gccspec.o: gccspec.c $(CONFIG_H) $(SYSTEM_H) $(GCC_H)
	(SHLIB_LINK='$(SHLIB_LINK)' \
	SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  $(DRIVER_DEFINES) \
  -c $(srcdir)/gccspec.c $(OUTPUT_OPTION))

cppspec.o: cppspec.c $(CONFIG_H) $(SYSTEM_H) $(GCC_H)

tree-check.h: s-check ; @true
s-check : gencheck$(build_exeext) $(srcdir)/move-if-change
	./gencheck$(build_exeext) > tmp-check.h
	$(SHELL) $(srcdir)/move-if-change tmp-check.h tree-check.h
	$(STAMP) s-check

gencheck$(build_exeext) : gencheck.o $(HOST_LIBDEPS)
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	 gencheck.o $(HOST_LIBS)

gencheck.o : gencheck.c gencheck.h tree.def $(HCONFIG_H) $(SYSTEM_H) \
             $(lang_tree_files)
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
	  $(srcdir)/gencheck.c $(OUTPUT_OPTION)

gencheck.h : s-gencheck ; @true
s-gencheck : Makefile
	ltf="$(lang_tree_files)"; for f in $$ltf; do \
	    echo "#include \"$$f\""; \
	done | sed 's|$(srcdir)/||' > tmp-gencheck.h
	$(SHELL) $(srcdir)/move-if-change tmp-gencheck.h gencheck.h
	$(STAMP) s-gencheck

options.h : s-options ; @true
s-options : Makefile
	lof="$(lang_options_files)"; for f in $$lof; do \
	    echo "#include \"$$f\""; \
	done | sed 's|$(srcdir)/||' > tmp-options.h
	$(SHELL) $(srcdir)/move-if-change tmp-options.h options.h
	$(STAMP) s-options

specs.h : s-specs ; @true
s-specs : Makefile
	lsf="$(lang_specs_files)"; for f in $$lsf; do \
	    echo "#include \"$$f\""; \
	done | sed 's|$(srcdir)/||' > tmp-specs.h
	$(SHELL) $(srcdir)/move-if-change tmp-specs.h specs.h
	$(STAMP) s-specs

dumpvers: dumpvers.c

version.o: version.c version.h

ggc-common.o: ggc-common.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) \
	flags.h $(GGC_H) varray.h hash.h $(HASHTAB_H) $(TM_P_H)

ggc-simple.o: ggc-simple.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
	$(GGC_H) varray.h $(TIMEVAR_H) $(TM_P_H)

ggc-page.o: ggc-page.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
	toplev.h $(GGC_H) varray.h $(TIMEVAR_H) $(TM_P_H)

stringpool.o: stringpool.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(OBSTACK_H) \
	flags.h toplev.h

hashtable.o: hashtable.c hashtable.h $(CONFIG_H) $(SYSTEM_H) $(OBSTACK_H)

line-map.o: line-map.c line-map.h intl.h $(CONFIG_H) $(SYSTEM_H)

ggc-none.o: ggc-none.c $(GCONFIG_H) $(SYSTEM_H) $(GGC_H)
	$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)

prefix.o: prefix.c $(CONFIG_H) $(SYSTEM_H) Makefile prefix.h
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
	-DPREFIX=\"$(prefix)\" \
	  -c $(srcdir)/prefix.c $(OUTPUT_OPTION)

convert.o: convert.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h convert.h toplev.h

langhooks.o : langhooks.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) toplev.h \
   tree-inline.h $(RTL_H) insn-config.h integrate.h langhooks.h \
   langhooks-def.h flags.h
tree.o : tree.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h function.h toplev.h \
   $(GGC_H) $(HASHTAB_H) $(TARGET_H) output.h $(TM_P_H) langhooks.h
tree-dump.o: tree-dump.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
   flags.h langhooks.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \
   $(EXPR_H) $(SPLAY_TREE_H) tree-dump.h
tree-inline.o : tree-inline.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) \
   expr.h flags.h params.h input.h insn-config.h $(INTEGRATE_H) \
   $(VARRAY_H) $(HASHTAB_H) $(SPLAY_TREE_H) toplev.h langhooks.h \
   $(C_COMMON_H) tree-inline.h
print-tree.o : print-tree.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(GGC_H) \
   langhooks.h
stor-layout.o : stor-layout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h \
   function.h $(EXPR_H) $(RTL_H) toplev.h $(GGC_H) $(TM_P_H) $(TARGET_H)
fold-const.o : fold-const.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h \
   toplev.h $(HASHTAB_H) $(EXPR_H) $(RTL_H) $(GGC_H) $(TM_P_H)
diagnostic.o : diagnostic.c diagnostic.h real.h diagnostic.def \
   $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(TM_P_H) flags.h $(GGC_H) \
   input.h toplev.h intl.h
toplev.o : toplev.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) function.h \
   flags.h xcoffout.h input.h $(INSN_ATTR_H) output.h diagnostic.h \
   debug.h insn-config.h intl.h $(RECOG_H) Makefile toplev.h \
   dwarf2out.h sdbout.h dbxout.h $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) \
   graph.h $(LOOP_H) except.h $(REGS_H) $(TIMEVAR_H) $(lang_options_files) \
   ssa.h $(PARAMS_H) $(TM_P_H) reload.h dwarf2asm.h $(TARGET_H) halfpic.h \
   langhooks.h insn-flags.h options.h
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
	  -DTARGET_NAME=\"$(target_alias)\" \
	  -c $(srcdir)/toplev.c $(OUTPUT_OPTION)
main.o : main.c $(CONFIG_H) $(SYSTEM_H) toplev.h

rtl-error.o: rtl-error.c system.h $(RTL_H) $(INSN_ATTR_H) insn-config.h \
   input.h toplev.h intl.h diagnostic.h $(CONFIG_H)

rtl.o : rtl.c $(GCONFIG_H) $(SYSTEM_H) $(RTL_H) real.h $(GGC_H) errors.h
	$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)

print-rtl.o : print-rtl.c $(GCONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) \
    hard-reg-set.h $(BASIC_BLOCK_H)
	$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)

rtlanal.o : rtlanal.c $(CONFIG_H) $(SYSTEM_H) toplev.h $(RTL_H) hard-reg-set.h $(TM_P_H)
errors.o : errors.c $(GCONFIG_H) $(SYSTEM_H) errors.h
	$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)

varasm.o : varasm.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \
   function.h $(EXPR_H) hard-reg-set.h $(REGS_H) $(OBSTACK_H) \
   output.h c-pragma.h toplev.h xcoffout.h debug.h $(GGC_H) $(TM_P_H) \
   $(HASHTAB_H) $(TARGET_H) langhooks.h
function.o : function.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
   function.h $(EXPR_H) libfuncs.h $(REGS_H) hard-reg-set.h \
   insn-config.h $(RECOG_H) output.h toplev.h except.h hash.h $(GGC_H) $(TM_P_H)
stmt.o : stmt.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h function.h  \
   insn-config.h hard-reg-set.h $(EXPR_H) libfuncs.h except.h \
   $(LOOP_H) $(RECOG_H) toplev.h output.h varray.h $(GGC_H) $(TM_P_H)
except.o : except.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
   except.h function.h $(EXPR_H) libfuncs.h integrate.h \
   insn-config.h hard-reg-set.h $(BASIC_BLOCK_H) output.h \
   dwarf2asm.h dwarf2out.h toplev.h $(HASHTAB_H) intl.h $(GGC_H)
expr.o : expr.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h function.h \
   $(REGS_H) $(EXPR_H) $(OPTABS_H) libfuncs.h insn-attr.h insn-config.h \
   $(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \
   except.h reload.h $(GGC_H) langhooks.h intl.h $(TM_P_H)
builtins.o : builtins.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
   $(TARGET_H) function.h $(REGS_H) $(EXPR_H) $(OPTABS_H) insn-config.h \
   $(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \
   except.h $(TM_P_H) $(PREDICT_H) libfuncs.h
calls.o : calls.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h $(EXPR_H) \
   libfuncs.h $(REGS_H) toplev.h output.h function.h $(TIMEVAR_H) $(TM_P_H)
expmed.o : expmed.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h  \
   insn-config.h $(EXPR_H) $(OPTABS_H) $(RECOG_H) real.h \
   toplev.h $(TM_P_H)
explow.o : explow.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
   hard-reg-set.h insn-config.h $(EXPR_H) $(OPTABS_H) $(RECOG_H) \
   toplev.h function.h ggc.h $(TM_P_H)
optabs.o : optabs.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h  \
   insn-config.h $(EXPR_H) $(OPTABS_H) libfuncs.h $(RECOG_H) reload.h \
   toplev.h $(GGC_H) real.h $(TM_P_H) except.h
dbxout.o : dbxout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \
    $(REGS_H) debug.h $(TM_P_H) $(TARGET_H) function.h langhooks.h \
   insn-config.h reload.h gstab.h xcoffout.h output.h dbxout.h toplev.h
debug.o : debug.c $(CONFIG_H) $(SYSTEM_H)
sdbout.o : sdbout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \
   function.h $(EXPR_H) output.h hard-reg-set.h $(REGS_H) real.h \
   insn-config.h $(OBSTACK_H) xcoffout.h c-pragma.h ggc.h \
   sdbout.h toplev.h $(TM_P_H) except.h debug.h
dwarfout.o : dwarfout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) dwarf.h \
   flags.h insn-config.h reload.h output.h toplev.h $(TM_P_H) \
   debug.h langhooks.h
dwarf2out.o : dwarf2out.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) dwarf2.h \
   debug.h flags.h insn-config.h reload.h output.h diagnostic.h \
   hard-reg-set.h $(REGS_H) $(EXPR_H) libfuncs.h toplev.h dwarf2out.h varray.h \
   $(GGC_H) except.h dwarf2asm.h $(TM_P_H) langhooks.h
dwarf2asm.o : dwarf2asm.c $(CONFIG_H) $(SYSTEM_H) flags.h $(RTL_H) $(TREE_H) \
   output.h dwarf2asm.h $(TM_P_H)
vmsdbgout.o : vmsdbgout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \
   output.h vmsdbg.h debug.h langhooks.h
xcoffout.o : xcoffout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) xcoffout.h \
   flags.h toplev.h output.h dbxout.h $(GGC_H)
emit-rtl.o : emit-rtl.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
   function.h $(REGS_H) insn-config.h $(RECOG_H) real.h $(GGC_H) \
   $(EXPR_H) $(srcdir)/../include/obstack.h hard-reg-set.h bitmap.h toplev.h \
   $(HASHTAB_H) $(TM_P_H) debug.h langhooks.h
real.o : real.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) toplev.h $(TM_P_H)
integrate.o : integrate.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
   debug.h $(INTEGRATE_H) insn-config.h $(EXPR_H) real.h $(REGS_H) \
   intl.h function.h output.h $(RECOG_H) except.h toplev.h $(LOOP_H) \
   $(PARAMS_H) $(TM_P_H) $(TARGET_H)
jump.o : jump.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h hard-reg-set.h $(REGS_H) \
   insn-config.h $(RECOG_H) $(EXPR_H) real.h except.h function.h \
   toplev.h $(INSN_ATTR_H) $(TM_P_H) reload.h $(PREDICT_H)

simplify-rtx.o : simplify-rtx.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) \
   hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
   output.h function.h $(GGC_H) $(OBSTACK_H) $(TM_P_H)
cselib.o : cselib.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) \
   hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
   output.h function.h cselib.h $(GGC_H) $(OBSTACK_H) $(TM_P_H)
cse.o : cse.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) hard-reg-set.h flags.h \
   real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h output.h function.h \
   $(BASIC_BLOCK_H) $(GGC_H) $(TM_P_H)
gcse.o : gcse.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) hard-reg-set.h \
   flags.h real.h insn-config.h ggc.h $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) \
   function.h output.h toplev.h $(TM_P_H) $(PARAMS_H) except.h
sibcall.o : sibcall.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) function.h \
   hard-reg-set.h flags.h insn-config.h $(RECOG_H) $(BASIC_BLOCK_H)
resource.o : resource.c $(CONFIG_H) $(RTL_H) hard-reg-set.h $(SYSTEM_H) \
   $(BASIC_BLOCK_H) $(REGS_H) flags.h output.h resource.h function.h toplev.h \
   $(INSN_ATTR_H) except.h $(PARAMS_H) $(TM_P_H)
lcm.o : lcm.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) hard-reg-set.h flags.h \
   real.h insn-config.h $(INSN_ATTR_H) $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) \
   $(TM_P_H) df.h
ssa.o : ssa.c $(CONFIG_H) $(SYSTEM_H) $(REGS_H) varray.h $(EXPR_H) \
   hard-reg-set.h flags.h function.h real.h insn-config.h $(RECOG_H)	\
   $(BASIC_BLOCK_H) output.h ssa.h
ssa-dce.o : ssa-dce.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) hard-reg-set.h \
   $(BASIC_BLOCK_H) ssa.h insn-config.h $(RECOG_H) output.h
ssa-ccp.o : ssa-ccp.c $(CONFIG_H) system.h $(RTL_H) hard-reg-set.h \
    $(BASIC_BLOCK_H) ssa.h insn-config.h $(RECOG_H) output.h \
    errors.h $(GGC_H) df.h function.h
df.o : df.c $(CONFIG_H) system.h $(RTL_H) insn-config.h $(RECOG_H) \
   function.h $(REGS_H) $(OBSTACK_H) hard-reg-set.h $(BASIC_BLOCK_H) df.h \
   $(FIBHEAP_H)
conflict.o : conflict.c $(CONFIG_H) $(SYSTEM_H) $(OBSTACK_H) $(HASHTAB_H) \
   $(RTL_H) hard-reg-set.h $(BASIC_BLOCK_H)
profile.o : profile.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
   insn-config.h output.h $(REGS_H) $(EXPR_H) function.h \
   gcov-io.h toplev.h $(GGC_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TARGET_H)
loop.o : loop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h $(LOOP_H) \
   insn-config.h $(REGS_H) hard-reg-set.h $(RECOG_H) $(EXPR_H) \
   real.h $(PREDICT_H) $(BASIC_BLOCK_H) function.h \
   toplev.h varray.h except.h cselib.h $(OPTABS_H) $(TM_P_H)
doloop.o : doloop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h $(LOOP_H) \
   $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TM_P_H) toplev.h
unroll.o : unroll.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) insn-config.h function.h \
   $(INTEGRATE_H) $(REGS_H) $(RECOG_H) flags.h $(EXPR_H) $(LOOP_H) toplev.h \
   hard-reg-set.h varray.h $(BASIC_BLOCK_H) $(TM_P_H) $(PREDICT_H)
flow.o : flow.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h insn-config.h \
   $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
   function.h except.h $(EXPR_H) ssa.h $(GGC_H) $(TM_P_H)
cfg.o : cfg.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h insn-config.h \
   $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
   function.h except.h $(GGC_H) $(TM_P_H)
cfgrtl.o : cfgrtl.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h insn-config.h \
   $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
   function.h except.h $(GGC_H) $(TM_P_H)
cfganal.o : cfganal.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(BASIC_BLOCK_H) \
   hard-reg-set.h insn-config.h $(RECOG_H) $(GGC_H) $(TM_P_H)
cfgbuild.o : cfgbuild.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h insn-config.h \
   $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
   function.h except.h $(GGC_H) 
cfgcleanup.o : cfgcleanup.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TIMEVAR_H)\
   $(BASIC_BLOCK_H) hard-reg-set.h output.h flags.h $(RECOG_H) toplev.h \
   $(GGC_H) insn-config.h cselib.h $(TARGET_H) $(TM_P_H)
cfgloop.o : cfgloop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
   $(BASIC_BLOCK_H) hard-reg-set.h
dominance.o : dominance.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) hard-reg-set.h \
   $(BASIC_BLOCK_H)
combine.o : combine.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h function.h \
   insn-config.h $(INSN_ATTR_H) $(REGS_H) $(EXPR_H) \
   $(BASIC_BLOCK_H) $(RECOG_H) real.h hard-reg-set.h toplev.h $(TM_P_H)
regclass.o : regclass.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) hard-reg-set.h flags.h \
   $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(RECOG_H) reload.h real.h \
   toplev.h function.h output.h $(GGC_H) $(TM_P_H) $(EXPR_H)
local-alloc.o : local-alloc.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h \
   $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h $(RECOG_H) \
   output.h function.h $(INSN_ATTR_H) toplev.h  except.h $(TM_P_H)
bitmap.o : bitmap.c $(GCONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h $(BASIC_BLOCK_H) \
   $(REGS_H)
	$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
global.o : global.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h reload.h function.h \
   $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h output.h toplev.h \
   $(TM_P_H)
varray.o : varray.c $(CONFIG_H) $(SYSTEM_H) varray.h $(RTL_H) $(TREE_H) bitmap.h \
   errors.h
reload.o : reload.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h output.h \
   $(EXPR_H) $(OPTABS_H) reload.h $(RECOG_H) hard-reg-set.h insn-config.h \
   $(REGS_H) function.h real.h toplev.h $(TM_P_H)
reload1.o : reload1.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) real.h flags.h \
   $(EXPR_H) $(OPTABS_H) reload.h $(REGS_H) hard-reg-set.h insn-config.h \
   $(BASIC_BLOCK_H) $(RECOG_H) output.h function.h toplev.h cselib.h $(TM_P_H) \
   except.h $(TREE_H)
caller-save.o : caller-save.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h \
   $(REGS_H) hard-reg-set.h insn-config.h $(BASIC_BLOCK_H) function.h \
   $(RECOG_H) reload.h $(EXPR_H) toplev.h $(TM_P_H)
reorg.o : reorg.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) conditions.h hard-reg-set.h \
   $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(INSN_ATTR_H) except.h \
   $(RECOG_H) function.h flags.h output.h $(EXPR_H) toplev.h $(PARAMS_H) $(TM_P_H)
alias.o : alias.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h hard-reg-set.h \
   $(BASIC_BLOCK_H) $(REGS_H) toplev.h output.h $(EXPR_H) \
   $(GGC_H) function.h cselib.h $(TREE_H) $(TM_P_H) langhooks.h
regmove.o : regmove.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) insn-config.h \
   $(RECOG_H) output.h $(REGS_H) hard-reg-set.h flags.h function.h \
   $(EXPR_H) $(BASIC_BLOCK_H) toplev.h $(TM_P_H) except.h reload.h
haifa-sched.o : haifa-sched.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) sched-int.h \
   $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \
   $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) $(TARGET_H)
sched-deps.o : sched-deps.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) sched-int.h \
   $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \
   $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h cselib.h $(PARAMS_H) $(TM_P_H)
sched-rgn.o : sched-rgn.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) sched-int.h \
   $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \
   $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H)
sched-ebb.o : sched-ebb.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) sched-int.h \
   $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \
   $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H)
sched-vis.o : sched-vis.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) sched-int.h \
   hard-reg-set.h $(BASIC_BLOCK_H) $(INSN_ATTR_H) $(REGS_H) $(TM_P_H)
final.o : final.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h intl.h \
   $(REGS_H) $(RECOG_H) conditions.h insn-config.h $(INSN_ATTR_H) function.h \
   real.h output.h hard-reg-set.h except.h debug.h xcoffout.h \
   toplev.h reload.h dwarf2out.h $(BASIC_BLOCK_H) $(TM_P_H) $(TARGET_H) $(EXPR_H)
recog.o : recog.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) function.h $(BASIC_BLOCK_H) \
   $(REGS_H) $(RECOG_H) $(EXPR_H) hard-reg-set.h flags.h insn-config.h \
   $(INSN_ATTR_H) real.h toplev.h output.h reload.h $(TM_P_H)
reg-stack.o : reg-stack.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) $(RECOG_H) \
   $(REGS_H) hard-reg-set.h flags.h insn-config.h toplev.h reload.h \
   varray.h function.h $(TM_P_H)
predict.o: predict.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
   insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \
   $(RECOG_H) function.h except.h $(EXPR_H) $(TM_P_H) $(PREDICT_H)
lists.o: lists.c $(CONFIG_H) $(SYSTEM_H) toplev.h $(RTL_H) $(GGC_H)
bb-reorder.o : bb-reorder.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) \
   flags.h $(BASIC_BLOCK_H) hard-reg-set.h output.h cfglayout.h $(TARGET_H)
cfglayout.o : cfglayout.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) \
   insn-config.h $(BASIC_BLOCK_H) hard-reg-set.h output.h function.h \
   cfglayout.h
timevar.o : timevar.c $(CONFIG_H) $(SYSTEM_H) $(TIMEVAR_H) flags.h intl.h
regrename.o : regrename.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) insn-config.h \
   $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h $(RECOG_H) function.h \
   resource.h $(OBSTACK_H) flags.h $(TM_P_H)
ifcvt.o : ifcvt.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) toplev.h \
   flags.h insn-config.h function.h $(RECOG_H) $(BASIC_BLOCK_H) $(EXPR_H) \
   output.h except.h $(TM_P_H)
dependence.o : dependence.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) \
   $(C_COMMON_H) flags.h varray.h $(EXPR_H)
params.o : params.c $(CONFIG_H) $(SYSTEM_H) $(PARAMS_H) toplev.h
hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) $(HOOKS_H)

$(out_object_file): $(out_file) $(CONFIG_H) $(TREE_H) $(GGC_H) \
   $(RTL_H) $(REGS_H) hard-reg-set.h real.h insn-config.h conditions.h \
   output.h $(INSN_ATTR_H) $(SYSTEM_H) toplev.h $(TARGET_H) libfuncs.h \
   $(TARGET_DEF_H) function.h sched-int.h $(TM_P_H) $(EXPR_H) $(OPTABS_H) \
   langhooks.h
	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
		$(out_file) $(OUTPUT_OPTION)

# Build auxiliary files that support ecoff format.
mips-tfile: mips-tfile.o version.o $(LIBDEPS)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ mips-tfile.o version.o $(LIBS)

mips-tfile.o : mips-tfile.c $(CONFIG_H) $(RTL_H) $(SYSTEM_H) version.h

mips-tdump: mips-tdump.o version.o $(LIBDEPS)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ mips-tdump.o version.o $(LIBS)

mips-tdump.o : mips-tdump.c $(CONFIG_H) $(RTL_H) $(SYSTEM_H)

# Build file to support OSF/rose half-pic format.
halfpic.o: halfpic.c $(CONFIG_H) $(RTL_H) $(TREE_H) $(SYSTEM_H) halfpic.h

#
# Generate header and source files from the machine description,
# and compile them.

.PRECIOUS: insn-config.h insn-flags.h insn-codes.h insn-constants.h \
  insn-emit.c insn-recog.c insn-extract.c insn-output.c insn-peep.c \
  insn-attr.h insn-attrtab.c

# The following pair of rules has this effect:
# genconfig is run only if the md has changed since genconfig was last run;
# but the file insn-config.h is touched only when its contents actually change.

# Each of the other insn-* files is handled by a similar pair of rules.

# This causes an anomaly in the results of make -n
# because insn-* is older than s-*
# and thus make -n thinks that insn-* will be updated
# and force recompilation of things that depend on it.
# We use move-if-change precisely to avoid such recompilation.
# But there is no way to teach make -n that it will be avoided.

# Each of the insn-*.[ch] rules has a semicolon at the end,
# for otherwise the system Make on SunOS 4.1 never tries
# to recompile insn-*.o.  To avoid problems and extra noise from
# versions of make which don't like empty commands (nothing after the
# trailing `;'), we call true for each.

insn-config.h: s-config ; @true
s-config : $(md_file) genconfig$(build_exeext) $(srcdir)/move-if-change
	./genconfig$(build_exeext) $(md_file) > tmp-config.h
	$(SHELL) $(srcdir)/move-if-change tmp-config.h insn-config.h
	$(STAMP) s-config

insn-flags.h: s-flags ; @true
s-flags : $(md_file) genflags$(build_exeext) $(srcdir)/move-if-change
	./genflags$(build_exeext) $(md_file) > tmp-flags.h
	$(SHELL) $(srcdir)/move-if-change tmp-flags.h insn-flags.h
	$(STAMP) s-flags

insn-codes.h: s-codes ; @true
s-codes : $(md_file) gencodes$(build_exeext) $(srcdir)/move-if-change
	./gencodes$(build_exeext) $(md_file) > tmp-codes.h
	$(SHELL) $(srcdir)/move-if-change tmp-codes.h insn-codes.h
	$(STAMP) s-codes

insn-constants.h: s-constants ; @true
s-constants : $(md_file) genconstants$(build_exeext) $(srcdir)/move-if-change
	./genconstants$(build_exeext) $(md_file) > tmp-constants.h
	$(SHELL) $(srcdir)/move-if-change tmp-constants.h insn-constants.h
	$(STAMP) s-constants

insn-emit.o : insn-emit.c $(CONFIG_H) $(RTL_H) $(EXPR_H) real.h output.h \
  insn-config.h $(OPTABS_H) $(SYSTEM_H) reload.h $(RECOG_H) toplev.h \
  function.h flags.h hard-reg-set.h resource.h $(TM_P_H)
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-emit.c \
	  $(OUTPUT_OPTION)

insn-emit.c: s-emit ; @true
s-emit : $(md_file) genemit$(build_exeext) $(srcdir)/move-if-change
	./genemit$(build_exeext) $(md_file) > tmp-emit.c
	$(SHELL) $(srcdir)/move-if-change tmp-emit.c insn-emit.c
	$(STAMP) s-emit

insn-recog.o : insn-recog.c $(CONFIG_H) $(RTL_H) insn-config.h $(RECOG_H) \
  real.h output.h flags.h $(SYSTEM_H) function.h hard-reg-set.h resource.h \
  $(TM_P_H) toplev.h reload.h
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-recog.c \
	  $(OUTPUT_OPTION)

insn-recog.c: s-recog ; @true
s-recog : $(md_file) genrecog$(build_exeext) $(srcdir)/move-if-change
	./genrecog$(build_exeext) $(md_file) > tmp-recog.c
	$(SHELL) $(srcdir)/move-if-change tmp-recog.c insn-recog.c
	$(STAMP) s-recog

insn-opinit.o : insn-opinit.c $(CONFIG_H) $(RTL_H) \
  insn-config.h flags.h $(RECOG_H) $(EXPR_H) $(OPTABS_H) reload.h $(SYSTEM_H)
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-opinit.c \
	  $(OUTPUT_OPTION)

insn-opinit.c: s-opinit ; @true
s-opinit : $(md_file) genopinit$(build_exeext) $(srcdir)/move-if-change
	./genopinit$(build_exeext) $(md_file) > tmp-opinit.c
	$(SHELL) $(srcdir)/move-if-change tmp-opinit.c insn-opinit.c
	$(STAMP) s-opinit

insn-extract.o : insn-extract.c $(CONFIG_H) $(RTL_H) $(SYSTEM_H) toplev.h \
  insn-config.h $(RECOG_H)
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-extract.c \
	  $(OUTPUT_OPTION)

insn-extract.c: s-extract ; @true
s-extract : $(md_file) genextract$(build_exeext) $(srcdir)/move-if-change
	./genextract$(build_exeext) $(md_file) > tmp-extract.c
	$(SHELL) $(srcdir)/move-if-change tmp-extract.c insn-extract.c
	$(STAMP) s-extract

insn-peep.o : insn-peep.c $(CONFIG_H) $(RTL_H) $(REGS_H) output.h real.h \
	$(SYSTEM_H) insn-config.h $(RECOG_H) except.h function.h $(TM_P_H)
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-peep.c \
	  $(OUTPUT_OPTION)

insn-peep.c: s-peep ; @true
s-peep : $(md_file) genpeep$(build_exeext) $(srcdir)/move-if-change
	./genpeep$(build_exeext) $(md_file) > tmp-peep.c
	$(SHELL) $(srcdir)/move-if-change tmp-peep.c insn-peep.c
	$(STAMP) s-peep

insn-attrtab.o : insn-attrtab.c $(CONFIG_H) $(RTL_H) $(REGS_H) real.h \
    output.h $(INSN_ATTR_H) insn-config.h $(SYSTEM_H) toplev.h $(RECOG_H) \
	$(TM_P_H) flags.h
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-attrtab.c \
	  $(OUTPUT_OPTION)

insn-attr.h: s-attr ; @true
s-attr : $(md_file) genattr$(build_exeext) $(srcdir)/move-if-change
	./genattr$(build_exeext) $(md_file) > tmp-attr.h
	$(SHELL) $(srcdir)/move-if-change tmp-attr.h insn-attr.h
	$(STAMP) s-attr

insn-attrtab.c: s-attrtab ; @true
s-attrtab : $(md_file) genattrtab$(build_exeext) $(srcdir)/move-if-change
	./genattrtab$(build_exeext) $(md_file) > tmp-attrtab.c
	$(SHELL) $(srcdir)/move-if-change tmp-attrtab.c insn-attrtab.c
	$(STAMP) s-attrtab

insn-output.o : insn-output.c $(CONFIG_H) $(RTL_H) $(GGC_H) $(REGS_H) real.h \
    conditions.h hard-reg-set.h insn-config.h $(INSN_ATTR_H) $(EXPR_H) \
    output.h $(RECOG_H) function.h $(SYSTEM_H) toplev.h flags.h \
    insn-codes.h $(TM_P_H)
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c \
	  $(OUTPUT_OPTION)

insn-output.c: s-output ; @true
s-output : $(md_file) genoutput$(build_exeext) $(srcdir)/move-if-change
	./genoutput$(build_exeext) $(md_file) > tmp-output.c
	$(SHELL) $(srcdir)/move-if-change tmp-output.c insn-output.c
	$(STAMP) s-output

genrtl.o : genrtl.c $(CONFIG_H) $(RTL_H) $(SYSTEM_H) $(GGC_H)
genrtl.c genrtl.h : s-genrtl
	@true	# force gnu make to recheck modification times.

s-genrtl: gengenrtl$(build_exeext) $(srcdir)/move-if-change $(RTL_BASE_H)
	./gengenrtl$(build_exeext) -h > tmp-genrtl.h
	$(SHELL) $(srcdir)/move-if-change tmp-genrtl.h genrtl.h
	./gengenrtl$(build_exeext) > tmp-genrtl.c
	$(SHELL) $(srcdir)/move-if-change tmp-genrtl.c genrtl.c
	$(STAMP) s-genrtl

tm-preds.h: s-preds; @true

s-preds: genpreds$(build_exeext) $(srcdir)/move-if-change
	./genpreds$(build_exeext) > tmp-preds.h
	$(SHELL) $(srcdir)/move-if-change tmp-preds.h tm-preds.h
	$(STAMP) s-preds

#
# Compile the programs that generate insn-* from the machine description.
# They are compiled with $(HOST_CC), and associated libraries,
# since they need to run on this machine
# even if GCC is being compiled to run on some other machine.

# $(CONFIG_H) is omitted from the deps of the gen*.o
# because these programs don't really depend on anything
# about the target machine.  They do depend on config.h itself,
# since that describes the host machine.

read-rtl.o: read-rtl.c $(HCONFIG_H) $(SYSTEM_H) $(RTL_H) \
  $(OBSTACK_H) $(HASHTAB_H)
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/read-rtl.c $(OUTPUT_OPTION)

gensupport.o: gensupport.c $(RTL_H) $(OBSTACK_H) $(SYSTEM_H) errors.h gensupport.h
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gensupport.c $(OUTPUT_OPTION)

genconfig$(build_exeext) : genconfig.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	  genconfig.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS)

genconfig.o : genconfig.c $(RTL_H) $(HCONFIG_H) \
  $(SYSTEM_H) errors.h gensupport.h
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genconfig.c $(OUTPUT_OPTION)

genflags$(build_exeext) : genflags.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	 genflags.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS)

genflags.o : genflags.c $(RTL_H) $(OBSTACK_H) $(HCONFIG_H) \
  $(SYSTEM_H) errors.h gensupport.h
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genflags.c $(OUTPUT_OPTION)

gencodes$(build_exeext) : gencodes.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	 gencodes.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS)

gencodes.o : gencodes.c $(RTL_H) $(HCONFIG_H) \
  $(SYSTEM_H) errors.h gensupport.h
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gencodes.c $(OUTPUT_OPTION)

genconstants$(build_exeext) : genconstants.o $(HOST_RTL) $(HOST_ERRORS) $(HOST_LIBDEPS)
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	 genconstants.o $(HOST_RTL) $(HOST_ERRORS) $(HOST_LIBS)

genconstants.o : genconstants.c $(RTL_H) $(HCONFIG_H) $(SYSTEM_H) errors.h
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genconstants.c $(OUTPUT_OPTION)

genemit$(build_exeext) : genemit.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	 genemit.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS)

genemit.o : genemit.c $(RTL_H) $(HCONFIG_H) $(SYSTEM_H) errors.h gensupport.h
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genemit.c $(OUTPUT_OPTION)

genopinit$(build_exeext) : genopinit.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	 genopinit.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS)

genopinit.o : genopinit.c $(RTL_H) $(HCONFIG_H) \
  $(SYSTEM_H) errors.h gensupport.h
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genopinit.c $(OUTPUT_OPTION)

genrecog$(build_exeext) : genrecog.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	 genrecog.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS)

genrecog.o : genrecog.c $(RTL_H) $(HCONFIG_H) \
  $(SYSTEM_H) errors.h gensupport.h
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genrecog.c $(OUTPUT_OPTION)

genextract$(build_exeext) : genextract.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	 genextract.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS)

genextract.o : genextract.c $(RTL_H) $(HCONFIG_H) \
  $(SYSTEM_H) insn-config.h errors.h gensupport.h
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genextract.c $(OUTPUT_OPTION)

genpeep$(build_exeext) : genpeep.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	 genpeep.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS)

genpeep.o : genpeep.c $(RTL_H) $(HCONFIG_H) $(SYSTEM_H) errors.h gensupport.h
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genpeep.c $(OUTPUT_OPTION)

genattr$(build_exeext) : genattr.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	 genattr.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS)

genattr.o : genattr.c $(RTL_H) $(HCONFIG_H) $(SYSTEM_H) errors.h gensupport.h
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattr.c $(OUTPUT_OPTION)

genattrtab$(build_exeext) : genattrtab.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	 genattrtab.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS)

genattrtab.o : genattrtab.c $(RTL_H) $(OBSTACK_H) $(HCONFIG_H) \
  $(SYSTEM_H) errors.h $(GGC_H) gensupport.h
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattrtab.c $(OUTPUT_OPTION)

genoutput$(build_exeext) : genoutput.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	 genoutput.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS)

genoutput.o : genoutput.c $(RTL_H) $(HCONFIG_H) \
  $(SYSTEM_H) errors.h gensupport.h
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genoutput.c $(OUTPUT_OPTION)

gengenrtl$(build_exeext) : gengenrtl.o $(HOST_LIBDEPS)
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	 gengenrtl.o $(HOST_LIBS)

gengenrtl.o : gengenrtl.c $(RTL_BASE_H) $(HCONFIG_H) $(SYSTEM_H) real.h
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gengenrtl.c $(OUTPUT_OPTION)

genpreds$(build_exeext) : genpreds.o $(HOST_LIBDEPS)
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	 genpreds.o $(HOST_LIBS)

genpreds.o : genpreds.c $(RTL_BASE_H) $(HCONFIG_H) $(SYSTEM_H)
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genpreds.c $(OUTPUT_OPTION)

#
# Compile the libraries to be used by gen*.
# If we are not cross-building, gen* use the same .o's that cc1 will use,
# and HOST_PREFIX_1 is `loser-', just to ensure these rules don't conflict
# with the rules for rtl.o, etc.
$(HOST_PREFIX_1)rtl.o: $(srcdir)/rtl.c $(HCONFIG_H) $(SYSTEM_H) $(RTL_H) \
  real.h $(GGC_H) errors.h
	rm -f $(HOST_PREFIX)rtl.c
	sed -e 's/config[.]h/hconfig.h/' $(srcdir)/rtl.c > $(HOST_PREFIX)rtl.c
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)rtl.c $(OUTPUT_OPTION)

$(HOST_PREFIX_1)print-rtl.o: $(srcdir)/print-rtl.c $(HCONFIG_H) \
  $(RTL_H) $(TREE_H) hard-reg-set.h $(BASIC_BLOCK_H)
	rm -f $(HOST_PREFIX)print-rtl.c
	sed -e 's/config[.]h/hconfig.h/' $(srcdir)/print-rtl.c > $(HOST_PREFIX)print-rtl.c
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)print-rtl.c $(OUTPUT_OPTION)

$(HOST_PREFIX_1)bitmap.o: $(srcdir)/bitmap.c $(HCONFIG_H) $(SYSTEM_H) $(RTL_H) \
  flags.h $(BASIC_BLOCK_H) $(REGS_H)
	rm -f $(HOST_PREFIX)bitmap.c
	sed -e 's/config[.]h/hconfig.h/' $(srcdir)/bitmap.c > $(HOST_PREFIX)bitmap.c
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)bitmap.c $(OUTPUT_OPTION)

$(HOST_PREFIX_1)errors.o: errors.c $(HCONFIG_H) $(SYSTEM_H) errors.h
	rm -f $(HOST_PREFIX)errors.c
	sed -e 's/config[.]h/hconfig.h/' $(srcdir)/errors.c > $(HOST_PREFIX)errors.c
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)errors.c $(OUTPUT_OPTION)

$(HOST_PREFIX_1)ggc-none.o: ggc-none.c $(HCONFIG_H) $(SYSTEM_H) $(GCC_H)
	rm -f $(HOST_PREFIX)ggc-none.c
	sed -e 's/config[.]h/hconfig.h/' $(srcdir)/ggc-none.c > $(HOST_PREFIX)ggc-none.c
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)ggc-none.c $(OUTPUT_OPTION)

#
# Remake internationalization support.
intl.o: intl.c $(CONFIG_H) system.h intl.h Makefile
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
	  -DLOCALEDIR=\"$(localedir)\" \
	  -c $(srcdir)/intl.c $(OUTPUT_OPTION)

$(top_builddir)/intl/libintl.a: intl.all

intl.all intl.install intl.uninstall \
  intl.mostlyclean intl.clean intl.distclean intl.maintainer-clean:
	@for d in $(INTL_SUBDIRS); do \
	  target=`expr $@ : 'intl.\(.*\)'` && \
	  echo "(cd $$d && $(MAKE) $$target)" && \
	  (cd $$d && AWK='$(AWK)' $(MAKE) $(SUBDIR_FLAGS_TO_PASS) $$target); \
	  if [ $$? -eq 0 ] ; then true ; else exit 1 ; fi ; \
	done

# intl.all and intl.install need config.h to exist, and the files it includes.
# (FIXME: intl/*.c shouldn't need to see insn-foo.h!)
intl.all intl.install: config.h insn-flags.h insn-constants.h

# Make-lang.in should add dependencies of po-generated on any generated
# files which need to be scanned by gettext (usually Yacc-generated parsers).
po-generated: c-parse.c tradcif.c

#
# Remake cpp and protoize.

PREPROCESSOR_DEFINES = \
  -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
  -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \
  -DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_alias)\" \
  -DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \
  -DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \
  -DCROSS_INCLUDE_DIR=\"$(gcc_tooldir)/sys-include\" \
  -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\"

LIBCPP_OBJS =	cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o \
		cpphash.o cpperror.o cppinit.o cppdefault.o \
		hashtable.o line-map.o mkdeps.o prefix.o version.o mbchar.o

LIBCPP_DEPS =	$(CPPLIB_H) cpphash.h line-map.h hashtable.h intl.h \
		$(OBSTACK_H) $(SYSTEM_H)

# Most of the other archives built/used by this makefile are for
# targets.  This one is strictly for the host.
libcpp.a: $(LIBCPP_OBJS)
	-rm -rf libcpp.a
	$(AR) $(AR_FLAGS) libcpp.a $(LIBCPP_OBJS)
	-$(RANLIB) libcpp.a

cpp0$(exeext): cppmain.o intl.o libcpp.a $(LIBDEPS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cpp0$(exeext) cppmain.o \
	intl.o libcpp.a $(LIBS)

cppmain.o:  cppmain.c  $(CONFIG_H) $(CPPLIB_H) intl.h $(SYSTEM_H)

cpperror.o: cpperror.c $(CONFIG_H) $(LIBCPP_DEPS)
cppexp.o:   cppexp.c   $(CONFIG_H) $(LIBCPP_DEPS)
cpplex.o:   cpplex.c   $(CONFIG_H) $(LIBCPP_DEPS) mbchar.h
cppmacro.o: cppmacro.c $(CONFIG_H) $(LIBCPP_DEPS)
cpplib.o:   cpplib.c   $(CONFIG_H) $(LIBCPP_DEPS)
cpphash.o:  cpphash.c  $(CONFIG_H) $(LIBCPP_DEPS)
cppfiles.o: cppfiles.c $(CONFIG_H) $(LIBCPP_DEPS) $(SPLAY_TREE_H) mkdeps.h
cppinit.o:  cppinit.c  $(CONFIG_H) $(LIBCPP_DEPS) cppdefault.h \
		mkdeps.h prefix.h version.h except.h

cppdefault.o: cppdefault.c $(CONFIG_H) $(SYSTEM_H) cppdefault.h Makefile
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
	  $(PREPROCESSOR_DEFINES) \
	  -c $(srcdir)/cppdefault.c $(OUTPUT_OPTION)

mkdeps.o: mkdeps.c $(CONFIG_H) $(SYSTEM_H) mkdeps.h

# The traditional mode preprocessor, a separate program for ease of
# maintenance.  Some code is shared with the ISO-C cpp.
tradcpp0$(exeext): tradcpp.o tradcif.o cppdefault.o version.o intl.o \
        mkdeps.o $(LIBDEPS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o tradcpp0$(exeext) \
	tradcpp.o tradcif.o mkdeps.o cppdefault.o version.o intl.o $(LIBS)

tradcpp.o: tradcpp.c $(CONFIG_H) $(SYSTEM_H) version.h cppdefault.h tradcpp.h
tradcif.o: $(srcdir)/tradcif.c $(CONFIG_H) $(SYSTEM_H) tradcpp.h

$(srcdir)/tradcif.c: $(srcdir)/tradcif.y
	(cd $(srcdir) && $(BISON) $(BISONFLAGS) -o tr$$$$.c tradcif.y && \
	mv -f tr$$$$.c tradcif.c)

# Note for the stamp targets, we run the program `true' instead of
# having an empty command (nothing following the semicolon).

proto: config.status protoize$(exeext) unprotoize$(exeext) SYSCALLS.c.X

PROTO_OBJS = intl.o version.o cppdefault.o

protoize$(exeext): protoize.o $(PROTO_OBJS) $(LIBDEPS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ protoize.o $(PROTO_OBJS) $(LIBS)

unprotoize$(exeext): unprotoize.o $(PROTO_OBJS) $(LIBDEPS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ unprotoize.o $(PROTO_OBJS) $(LIBS)

protoize.o: protoize.c $(srcdir)/../include/getopt.h $(CONFIG_H) $(SYSTEM_H) \
   Makefile version.h
	(SHLIB_LINK='$(SHLIB_LINK)' \
	SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \
	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
	  $(DRIVER_DEFINES) \
	  $(srcdir)/protoize.c $(OUTPUT_OPTION))

unprotoize.o: protoize.c $(srcdir)/../include/getopt.h \
   $(CONFIG_H) $(SYSTEM_H) Makefile version.h
	(SHLIB_LINK='$(SHLIB_LINK)' \
	SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \
	$(CC) -c -DUNPROTOIZE $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
	  $(DRIVER_DEFINES) \
	  $(srcdir)/protoize.c $(OUTPUT_OPTION))

# This info describes the target machine, so compile with GCC just built.
SYSCALLS.c.X: $(srcdir)/sys-types.h $(srcdir)/sys-protos.h $(GCC_PASSES) \
   stmp-int-hdrs
	-rm -f SYSCALLS.c tmp-SYSCALLS.s
	sed -e s/TARGET_GETGROUPS_T/$(TARGET_GETGROUPS_T)/ \
	  $(srcdir)/sys-types.h $(srcdir)/sys-protos.h > SYSCALLS.c
	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
	  -aux-info $@ -S -o tmp-SYSCALLS.s SYSCALLS.c
	-rm -f SYSCALLS.c tmp-SYSCALLS.s


test-protoize-simple: ./protoize ./unprotoize $(GCC_PASSES)
	-rm -f tmp-proto.[cso]
	cp $(srcdir)/protoize.c tmp-proto.c
	chmod u+w tmp-proto.c
	./protoize -N -B ./ -x getopt.h -c "-B./ -Wall -Wwrite-strings \
	  $(GCC_CFLAGS) $(INCLUDES) \
	  -DGCC_INCLUDE_DIR=0 \
	  -DGPLUSPLUS_INCLUDE_DIR=0 \
	  -DCROSS_INCLUDE_DIR=0 \
	  -DTOOL_INCLUDE_DIR=0 \
	  -DSTANDARD_EXEC_PREFIX=0 \
	  -DDEFAULT_TARGET_MACHINE=0 \
	  -DDEFAULT_TARGET_VERSION=0" tmp-proto.c
	@echo '**********' Expect 400 lines of differences.
	-diff $(srcdir)/protoize.c tmp-proto.c > tmp-proto.diff
	-wc -l tmp-proto.diff
	./unprotoize -N -x getopt.h -c "-B./ -Wall -Wwrite-strings \
	  $(GCC_CFLAGS) $(INCLUDES) \
	  -DGCC_INCLUDE_DIR=0 \
	  -DGPLUSPLUS_INCLUDE_DIR=0 \
	  -DCROSS_INCLUDE_DIR=0 \
	  -DTOOL_INCLUDE_DIR=0 \
	  -DSTANDARD_EXEC_PREFIX=0 \
	  -DDEFAULT_TARGET_MACHINE=0 \
	  -DDEFAULT_TARGET_VERSION=0" tmp-proto.c
	@echo Expect zero differences.
	diff $(srcdir)/protoize.c tmp-proto.c | cat
	-rm -f tmp-proto.[cs] tmp-proto$(objext)

gcov.o: gcov.c gcov-io.h intl.h $(SYSTEM_H) $(CONFIG_H)

# Only one of 'gcov' or 'gcov.exe' is actually built, depending
# upon whether $(exeext) is empty or not.
GCOV_OBJS = gcov.o intl.o version.o
gcov$(exeext): $(GCOV_OBJS) $(LIBDEPS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) $(GCOV_OBJS) $(LIBS) -o $@
#
# Build the include directory.  The stamp files are stmp-* rather than
# s-* so that mostlyclean does not force the include directory to
# be rebuilt.

# Build the include directory including float.h (which no longer depends upon
# enquire).
stmp-int-hdrs: $(STMP_FIXINC) $(USER_H) xlimits.h
# Copy in the headers provided with gcc.
# The sed command gets just the last file name component;
# this is necessary because VPATH could add a dirname.
# Using basename would be simpler, but some systems don't have it.
# The touch command is here to workaround an AIX/Linux NFS bug.
	-if [ -d include ] ; then true; else mkdir include; chmod a+rx include; fi
	for file in .. $(USER_H); do \
	  if [ X$$file != X.. ]; then \
	    realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
	    $(STAMP) include/$$realfile; \
	    rm -f include/$$realfile; \
	    cp $$file include; \
	    chmod a+r include/$$realfile; \
	  fi; \
	done
	rm -f include/limits.h
	cp xlimits.h include/limits.h
	chmod a+r include/limits.h
	rm -f include/float.h
	if [ x$(FLOAT_H) != xMakefile.in ]; then \
	  cp $(srcdir)/config/$(FLOAT_H) include/float.h && \
	  chmod a+r include/float.h; \
	else :; fi
# Install the README
	rm -f include/README
	cp $(srcdir)/README-fixinc include/README
	chmod a+r include/README
	$(STAMP) $@

# fixinc.sh depends on this, not on specs directly.
# The idea is to make sure specs gets built, but not rerun fixinc.sh
# after each stage just because specs' mtime has changed.
specs.ready: specs
	-if [ -f specs.ready ] ; then \
		true; \
	else \
		$(STAMP) specs.ready; \
	fi

FIXINCSRCDIR=$(srcdir)/fixinc
fixinc.sh: $(FIXINCSRCDIR)/mkfixinc.sh $(FIXINCSRCDIR)/fixincl.c \
	$(FIXINCSRCDIR)/procopen.c $(FIXINCSRCDIR)/gnu-regex.c \
	$(FIXINCSRCDIR)/server.c $(FIXINCSRCDIR)/gnu-regex.h \
	$(FIXINCSRCDIR)/server.h $(FIXINCSRCDIR)/inclhack.def specs.ready
	(MAKE="$(MAKE)"; srcdir=`cd $(srcdir)/fixinc && pwd` ; \
	CC="$(HOST_CC)"; CFLAGS="$(HOST_CFLAGS)"; LDFLAGS="$(HOST_LDFLAGS)"; \
	WARN_CFLAGS="$(WARN_CFLAGS)"; \
	export MAKE srcdir CC CFLAGS LDFLAGS WARN_CFLAGS; cd ./fixinc && \
	$(SHELL) $${srcdir}/mkfixinc.sh $(build_canonical) $(target))

# Build fixed copies of system files.
stmp-fixinc: fixinc.sh gsyslimits.h
	rm -rf include; mkdir include
	-chmod a+rx include
	(TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); pwd`; \
	SHELL='$(SHELL)' ;\
	export TARGET_MACHINE srcdir SHELL ; \
	$(SHELL) ./fixinc.sh `pwd`/include $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS); \
	rm -f include/syslimits.h; \
	if [ -f include/limits.h ]; then \
	  mv include/limits.h include/syslimits.h; \
	else \
	  cp $(srcdir)/gsyslimits.h include/syslimits.h; \
	fi; \
	chmod a+r include/syslimits.h)
# If $(SYSTEM_HEADER_DIR) is $(build_tooldir)/sys-include, and
# that directory exists, then make sure that $(libsubdir) exists.
# This is because cpp is compiled to find $(gcc_tooldir)/include via
# $(libsubdir)/$(unlibsubdir), which will only work if $(libsubdir)
# exists.
# ??? Better would be to use -isystem $(build_tooldir)/sys-include,
# but fixincludes does not take such arguments.
	if [ "$(SYSTEM_HEADER_DIR)" = "$(build_tooldir)/sys-include" ] \
	   && [ -d $(build_tooldir)/sys-include ]; then \
	  if [ -d $(libdir) ] ; then true ; else mkdir $(libdir) ; fi; \
	  if [ -d $(libdir)/gcc-lib ] ; then true ; else mkdir $(libdir)/gcc-lib; fi; \
	  if [ -d $(libdir)/gcc-lib/$(target_alias) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target_alias) ; fi; \
	  if [ -d $(libdir)/gcc-lib/$(target_alias)/$(version) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target_alias)/$(version) ; fi; \
	else true; fi
	$(STAMP) stmp-fixinc

# Files related to the fixproto script.
# gen-protos and fix-header are compiled with HOST_CC, but they are only
# used in native and host-x-target builds, so it's safe to link them with
# libiberty.a.

deduced.h: $(GCC_PASSES) $(srcdir)/scan-types.sh stmp-int-hdrs
	if [ -d $(SYSTEM_HEADER_DIR) ]; \
	then \
	  CC="$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) -I. -I$(srcdir) -isystem include -isystem ${SYSTEM_HEADER_DIR}"; \
	  export CC; \
	  $(SHELL) $(srcdir)/scan-types.sh "$(srcdir)" >tmp-deduced.h; \
	  mv tmp-deduced.h deduced.h; \
	else \
	  $(STAMP) deduced.h; \
	fi

GEN_PROTOS_OBJS = gen-protos.o scan.o
gen-protos$(build_exeext): $(GEN_PROTOS_OBJS)
	${HOST_CC} $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
	  $(GEN_PROTOS_OBJS) $(HOST_LIBS)

gen-protos.o: gen-protos.c scan.h $(HCONFIG_H) $(SYSTEM_H)
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gen-protos.c $(OUTPUT_OPTION)

scan.o: scan.c scan.h $(HCONFIG_H) $(SYSTEM_H)
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/scan.c $(OUTPUT_OPTION)

xsys-protos.h: $(GCC_PASSES) $(srcdir)/sys-protos.h deduced.h gen-protos$(build_exeext) Makefile
	sed -e s/TARGET_GETGROUPS_T/$(TARGET_GETGROUPS_T)/ \
	  deduced.h $(srcdir)/sys-protos.h > tmp-fixtmp.c
	mv tmp-fixtmp.c fixtmp.c
	$(GCC_FOR_TARGET) fixtmp.c -w -U__SIZE_TYPE__ -U__PTRDIFF_TYPE__ -U__WCHAR_TYPE__ -E \
	  | sed -e 's/	/ /g' -e 's/ *(/ (/g' -e 's/ [ ]*/ /g' -e 's/( )/()/' \
	  | ./gen-protos >xsys-protos.hT
	mv xsys-protos.hT xsys-protos.h
	rm -rf fixtmp.c

# This is nominally a 'build' program, but it's run only when host==build,
# so we can (indeed, must) use $(LIBDEPS) and $(LIBS).
fix-header$(build_exeext): fix-header.o scan-decls.o scan.o xsys-protos.h \
           $(LIBDEPS) libcpp.a
	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ fix-header.o \
	   scan-decls.o scan.o libcpp.a $(LIBS)

fix-header.o: fix-header.c $(OBSTACK_H) scan.h \
	xsys-protos.h $(HCONFIG_H) $(SYSTEM_H) $(CPPLIB_H)
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/fix-header.c $(OUTPUT_OPTION)

scan-decls.o: scan-decls.c scan.h $(CPPLIB_H) $(HCONFIG_H) $(SYSTEM_H)
	$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/scan-decls.c $(OUTPUT_OPTION)

# stmp-fixproto depends on this, not on fix-header directly.
# The idea is to make sure fix-header gets built,
# but not rerun fixproto after each stage
# just because fix-header's mtime has changed.
fixhdr.ready: fix-header$(build_exeext)
	-if [ -f fixhdr.ready ] ; then \
		true; \
	else \
		$(STAMP) fixhdr.ready; \
	fi

# stmp-int-headers is to make sure fixincludes has already finished.
# The if statement is so that we don't run fixproto a second time
# if it has already been run on the files in `include'.
stmp-fixproto: fixhdr.ready fixproto stmp-int-hdrs
	if [ -f include/fixed ] ; then true; \
	else \
	  : This line works around a 'make' bug in BSDI 1.1.; \
	  FIXPROTO_DEFINES="$(FIXPROTO_DEFINES)"; export FIXPROTO_DEFINES; \
	  mkinstalldirs="$(SHELL) $(srcdir)/mkinstalldirs"; \
	    export mkinstalldirs; \
	  if [ -d $(SYSTEM_HEADER_DIR) ] ; then \
	    $(SHELL) ${srcdir}/fixproto include include $(SYSTEM_HEADER_DIR); \
	    if [ $$? -eq 0 ] ; then true ; else exit 1 ; fi ; \
	  else true; fi; \
	  $(STAMP) include/fixed; \
	fi
	$(STAMP) stmp-fixproto
#
# Remake the info files.

docdir = $(srcdir)/doc

doc: $(BUILD_INFO) $(GENERATED_MANPAGES) gccbug
info: $(docdir)/cpp.info $(docdir)/gcc.info $(docdir)/gccint.info lang.info $(docdir)/cppinternals.info

$(docdir)/cpp.info: $(docdir)/cpp.texi $(docdir)/include/fdl.texi \
  $(docdir)/cppenv.texi $(docdir)/cppopts.texi
	cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/cpp.info doc/cpp.texi

$(docdir)/gcc.info: $(docdir)/gcc.texi $(docdir)/include/gcc-common.texi \
	 $(docdir)/frontends.texi $(docdir)/standards.texi \
	 $(docdir)/invoke.texi $(docdir)/extend.texi $(docdir)/md.texi \
	 $(docdir)/objc.texi $(docdir)/gcov.texi $(docdir)/trouble.texi \
	 $(docdir)/bugreport.texi $(docdir)/service.texi \
	 $(docdir)/contribute.texi $(docdir)/vms.texi \
	 $(docdir)/include/funding.texi $(docdir)/gnu.texi \
	 $(docdir)/include/gpl.texi $(docdir)/include/fdl.texi \
	 $(docdir)/contrib.texi $(docdir)/cppenv.texi $(docdir)/cppopts.texi
	cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/gcc.info doc/gcc.texi

$(docdir)/gccint.info: $(docdir)/gccint.texi \
	 $(docdir)/include/gcc-common.texi $(docdir)/contribute.texi \
	 $(docdir)/makefile.texi $(docdir)/configterms.texi \
	 $(docdir)/portability.texi $(docdir)/interface.texi \
	 $(docdir)/passes.texi $(docdir)/c-tree.texi \
	 $(docdir)/rtl.texi $(docdir)/md.texi $(docdir)/tm.texi \
	 $(docdir)/hostconfig.texi $(docdir)/fragments.texi \
	 $(docdir)/configfiles.texi $(docdir)/collect2.texi \
	 $(docdir)/headerdirs.texi $(docdir)/include/funding.texi \
	 $(docdir)/gnu.texi $(docdir)/include/gpl.texi \
	 $(docdir)/include/fdl.texi $(docdir)/contrib.texi \
	 $(docdir)/languages.texi $(docdir)/sourcebuild.texi
	cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/gccint.info doc/gccint.texi

$(docdir)/cppinternals.info: $(docdir)/cppinternals.texi
	cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/cppinternals.info \
		doc/cppinternals.texi

dvi: gcc.dvi gccint.dvi cpp.dvi lang.dvi cppinternals.dvi

# This works with GNU Make's default rule.
cpp.dvi: $(docdir)/cpp.texi $(docdir)/include/fdl.texi \
	$(docdir)/cppenv.texi $(docdir)/cppopts.texi
	$(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/cpp.texi

gcc.dvi: $(docdir)/gcc.texi $(docdir)/include/gcc-common.texi \
	 $(docdir)/frontends.texi $(docdir)/standards.texi \
	 $(docdir)/invoke.texi $(docdir)/extend.texi $(docdir)/md.texi \
	 $(docdir)/objc.texi $(docdir)/gcov.texi $(docdir)/trouble.texi \
	 $(docdir)/bugreport.texi $(docdir)/service.texi \
	 $(docdir)/contribute.texi $(docdir)/vms.texi \
	 $(docdir)/include/funding.texi $(docdir)/gnu.texi \
	 $(docdir)/include/gpl.texi $(docdir)/include/fdl.texi \
	 $(docdir)/contrib.texi $(docdir)/cppenv.texi $(docdir)/cppopts.texi
	$(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/gcc.texi

gccint.dvi: $(docdir)/gccint.texi \
	 $(docdir)/include/gcc-common.texi $(docdir)/contribute.texi \
	 $(docdir)/makefile.texi $(docdir)/configterms.texi \
	 $(docdir)/portability.texi $(docdir)/interface.texi \
	 $(docdir)/passes.texi $(docdir)/c-tree.texi \
	 $(docdir)/rtl.texi $(docdir)/md.texi $(docdir)/tm.texi \
	 $(docdir)/hostconfig.texi $(docdir)/fragments.texi \
	 $(docdir)/configfiles.texi $(docdir)/collect2.texi \
	 $(docdir)/headerdirs.texi $(docdir)/include/funding.texi \
	 $(docdir)/gnu.texi $(docdir)/include/gpl.texi \
	 $(docdir)/include/fdl.texi $(docdir)/contrib.texi \
	 $(docdir)/languages.texi $(docdir)/sourcebuild.texi
	$(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/gccint.texi

cppinternals.dvi: $(docdir)/cppinternals.texi
	$(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/cppinternals.texi

generated-manpages: $(docdir)/gcov.1 $(docdir)/cpp.1 $(docdir)/gcc.1 \
	 $(docdir)/gfdl.7 $(docdir)/gpl.7 $(docdir)/fsf-funding.7 \
	 lang.generated-manpages

$(docdir)/gcov.1: $(docdir)/gcov.texi
	$(STAMP) $(docdir)/gcov.1
	-$(TEXI2POD) $(docdir)/gcov.texi > gcov.pod
	-($(POD2MAN) --section=1 gcov.pod > $(docdir)/gcov.1.T$$$$ && \
		mv -f $(docdir)/gcov.1.T$$$$ $(docdir)/gcov.1) || \
		(rm -f $(docdir)/gcov.1.T$$$$ && exit 1)
	-rm -f gcov.pod

$(docdir)/cpp.1: $(docdir)/cpp.texi $(docdir)/cppenv.texi \
  $(docdir)/cppopts.texi
	$(STAMP) $(docdir)/cpp.1
	-$(TEXI2POD) $(docdir)/cpp.texi > cpp.pod
	-($(POD2MAN) --section=1 cpp.pod > $(docdir)/cpp.1.T$$$$ && \
		mv -f $(docdir)/cpp.1.T$$$$ $(docdir)/cpp.1) || \
		(rm -f $(docdir)/cpp.1.T$$$$ && exit 1)
	-rm -f cpp.pod

$(docdir)/gcc.1: $(docdir)/invoke.texi $(docdir)/cppenv.texi \
  $(docdir)/cppopts.texi
	$(STAMP) $(docdir)/gcc.1
	-$(TEXI2POD) $(docdir)/invoke.texi > gcc.pod
	-($(POD2MAN) --section=1 gcc.pod > $(docdir)/gcc.1.T$$$$ && \
		mv -f $(docdir)/gcc.1.T$$$$ $(docdir)/gcc.1) || \
		(rm -f $(docdir)/gcc.1.T$$$$ && exit 1)
	-rm -f gcc.pod

$(docdir)/gfdl.7: $(docdir)/include/fdl.texi
	$(STAMP) $(docdir)/gfdl.7
	-$(TEXI2POD) $(docdir)/include/fdl.texi > gfdl.pod
	-($(POD2MAN) --section=7 gfdl.pod > $(docdir)/gfdl.7.T$$$$ && \
		mv -f $(docdir)/gfdl.7.T$$$$ $(docdir)/gfdl.7) || \
		(rm -f $(docdir)/gfdl.7.T$$$$ && exit 1)
	-rm -f gfdl.pod

$(docdir)/gpl.7: $(docdir)/include/gpl.texi
	$(STAMP) $(docdir)/gpl.7
	-$(TEXI2POD) $(docdir)/include/gpl.texi > gpl.pod
	-($(POD2MAN) --section=7 gpl.pod > $(docdir)/gpl.7.T$$$$ && \
		mv -f $(docdir)/gpl.7.T$$$$ $(docdir)/gpl.7) || \
		(rm -f $(docdir)/gpl.7.T$$$$ && exit 1)
	-rm -f gpl.pod

$(docdir)/fsf-funding.7: $(docdir)/include/funding.texi
	$(STAMP) $(docdir)/fsf-funding.7
	-$(TEXI2POD) $(docdir)/include/funding.texi > fsf-funding.pod
	-($(POD2MAN) --section=7 fsf-funding.pod \
		> $(docdir)/fsf-funding.7.T$$$$ && \
	    mv -f $(docdir)/fsf-funding.7.T$$$$ $(docdir)/fsf-funding.7) || \
	    (rm -f $(docdir)/fsf-funding.7.T$$$$ && exit 1)
	-rm -f fsf-funding.pod

#
# Deletion of files made during compilation.
# There are four levels of this:
#   `mostlyclean', `clean', `distclean' and `maintainer-clean'.
# `mostlyclean' is useful while working on a particular type of machine.
# It deletes most, but not all, of the files made by compilation.
# It does not delete libgcc.a or its parts, so it won't have to be recompiled.
# `clean' deletes everything made by running `make all'.
# `distclean' also deletes the files made by config.
# `maintainer-clean' also deletes everything that could be regenerated
# automatically, except for `configure'.
# We remove as much from the language subdirectories as we can
# (less duplicated code).

INTL_MOSTLYCLEAN = intl.mostlyclean
mostlyclean: $(INTL_MOSTLYCLEAN) lang.mostlyclean
	-rm -f $(STAGESTUFF)
	-rm -rf libgcc
# Delete the temporary source copies for cross compilation.
	-rm -f $(HOST_PREFIX_1)rtl.c $(HOST_PREFIX_1)print-rtl.c
	-rm -f $(HOST_PREFIX_1)bitmap.c $(HOST_PREFIX_1)errors.c
	-rm -f $(HOST_PREFIX_1)ggc-none.c
# Delete the temp files made in the course of building libgcc.a.
	-rm -f xlimits.h
# Delete other built files.
	-rm -f t-float.h-cross xsys-protos.hT
# Delete the stamp and temporary files.
	-rm -f s-* tmp-* stamp-* stmp-*
	-rm -f */stamp-* */tmp-*
# Delete debugging dump files.
	-rm -f *.[0-9][0-9].* */*.[0-9][0-9].*
# Delete some files made during installation.
	-rm -f specs float.h-* enquire SYSCALLS.c.X SYSCALLS.c
	-rm -f collect collect2 mips-tfile mips-tdump
# Delete files generated for fixproto
	-rm -rf fix-header$(build_exeext) xsys-protos.h deduced.h tmp-deduced.h \
	  gen-protos$(build_exeext) fixproto.list fixtmp.* fixhdr.ready
# Delete files generated for fixincl
	-rm -rf fixincl fixinc.sh specs.ready
	(cd fixinc && $(MAKE) clean)
# Delete unwanted output files from TeX.
	-rm -f *.toc *.log *.vr *.fn *.cp *.tp *.ky *.pg
	-rm -f */*.toc */*.log */*.vr */*.fn */*.cp */*.tp */*.ky */*.pg
# Delete sorted indices we don't actually use.
	-rm -f gcc.vrs gcc.kys gcc.tps gcc.pgs gcc.fns
# Delete core dumps.
	-rm -f core */core

# Delete all files made by compilation
# that don't exist in the distribution.
INTL_CLEAN = intl.clean
clean: mostlyclean $(INTL_CLEAN) lang.clean
	-rm -f libgcc.a libgcc_eh.a libgcc_s$(SHLIB_EXT) libgcc_s$(SHLIB_EXT).1
	-rm -f config.h tconfig.h hconfig.h tm_p.h
	-rm -f cs-*
	-rm -rf libgcc
	-rm -f *.dvi
	-rm -f */*.dvi
# Delete the include directory.
	-rm -rf include
# Delete files used by the "multilib" facility (including libgcc subdirs).
	-rm -f multilib.h tmpmultilib*
	-if [ "x$(MULTILIB_DIRNAMES)" != x ] ; then \
	  rm -rf $(MULTILIB_DIRNAMES); \
	else if [ "x$(MULTILIB_OPTIONS)" != x ] ; then \
	  rm -rf `echo $(MULTILIB_OPTIONS) | sed -e 's/\// /g'`; \
	fi ; fi
	-rm -fr stage1 stage2 stage3 stage4
# Delete stamps of bootstrap stages
	-rm -f stage?_*
	-rm -f clean?_*
	-rm -f stage_last

# Delete all files that users would normally create
# while building and installing GCC.
INTL_DISTCLEAN = intl.distclean
distclean: clean $(INTL_DISTCLEAN) lang.distclean
	-rm -f auto-host.h auto-build.h
	-rm -f cstamp-h
	-rm -f config.status config.run config.cache config.bak
	-rm -f Make-lang Make-hooks Make-host Make-target
	-rm -f Makefile specs.h options.h gencheck.h *.oaux
	-rm -f gthr-default.h
	-rm -f */stage1 */stage2 */stage3 */stage4 */include
	-rm -f c-parse.output
	-rm -f *.asm
	-rm -f float.h
	-rm -f site.exp site.bak testsuite/site.exp testsuite/site.bak
	-rm -f testsuite/{gcc,g++}.{log,sum}
	-rm -f intl/libintl.h libintl.h
	-rm -f cxxmain.c
	-rm -f mklibgcc gccbug .gdbinit configargs.h
	-rm -f gcov.pod
	-rm -f fixinc/Makefile
	-rmdir ada cp f java objc fixinc intl po 2>/dev/null

# Delete anything likely to be found in the source directory
# that shouldn't be in the distribution.
extraclean: distclean lang.extraclean
	-rm -rf =* ./"#"* *~* config/=* config/"#"* config/*~*
	-rm -f patch* *.orig *.rej config/patch* config/*.orig config/*.rej
	-rm -f config/*/=* config/*/"#"* config/*/*~*
	-rm -f config/*/*.orig config/*/*.rej
	-rm -f *.dvi *.ps *.oaux *.d *.[zZ] *.gz
	-rm -f *.tar *.xtar *diff *.diff.* *.tar.* *.xtar.* *diffs
	-rm -f *lose config/*lose config/*/*lose
	-rm -f *.s *.s[0-9] *.i config/ChangeLog
	-rm -f y.tab.c yacc.*
	-rm -f */=* */"#"* */*~*
	-rm -f */patch* */*.orig */*.rej
	-rm -f */*.dvi */*.oaux */*.d */*.[zZ] */*.gz
	-rm -f */*.tar */*.xtar */*diff */*.diff.* */*.tar.* */*.xtar.* */*diffs
	-rm -f */*lose */*.s */*.s[0-9] */*.i

# Get rid of every file that's generated from some other file, except for `configure'.
# Most of these files ARE PRESENT in the GCC distribution.
# We define INTL_DISTCLEAN, INTL_CLEAN & INTL_MOSTLYCLEAN to be empty in the
# submake, so that we don't descend into intl after its makefile has been
# removed.
maintainer-clean:
	@echo 'This command is intended for maintainers to use; it'
	@echo 'deletes files that may need special tools to rebuild.'
	$(MAKE) INTL_DISTCLEAN= INTL_CLEAN= INTL_MOSTLYCLEAN= \
		intl.maintainer-clean lang.maintainer-clean distclean
	-rm -f c-parse.y c-parse.c c-parse.output TAGS
	-rm -f cpp.??s cpp.*aux
	-rm -f gcc.??s gcc.*aux
	-rm -f $(docdir)/cpp.info* $(docdir)/gcc.info* $(docdir)/gccint.info*
	-rm -f $(docdir)/cppinternals.info*
	-rm -f $(docdir)/gcov.1 $(docdir)/cpp.1 $(docdir)/gcc.1
	-rm -f $(docdir)/fsf-funding.7 $(docdir)/gfdl.7 $(docdir)/gpl.7
#
# Entry points `install' and `uninstall'.
# Also use `install-collect2' to install collect2 when the config files don't.

# Copy the compiler files into directories where they will be run.
# Install the driver last so that the window when things are
# broken is small.
install: install-common $(INSTALL_HEADERS) $(INSTALL_LIBGCC) \
    $(INSTALL_CPP) install-man install-info intl.install install-@POSUB@ \
    lang.install-normal install-driver

# Handle cpp installation.
install-cpp: cpp$(exeext)
	-if [ -f gcc-cross$(exeext) ] ; then \
	  rm -f $(bindir)/$(CPP_CROSS_NAME)$(exeext); \
	  $(INSTALL_PROGRAM) -m 755 cpp$(exeext) $(bindir)/$(CPP_CROSS_NAME)$(exeext); \
	  if [ x$(cpp_install_dir) != x ]; then \
	    rm -f $(prefix)/$(cpp_install_dir)/$(CPP_CROSS_NAME)$(exeext); \
	    $(INSTALL_PROGRAM) -m 755 cpp$(exeext) $(prefix)/$(cpp_install_dir)/$(CPP_CROSS_NAME)$(exeext); \
	  else true; fi; \
	else \
	  rm -f $(bindir)/$(CPP_INSTALL_NAME)$(exeext); \
	  $(INSTALL_PROGRAM) -m 755 cpp$(exeext) $(bindir)/$(CPP_INSTALL_NAME)$(exeext); \
	  if [ x$(cpp_install_dir) != x ]; then \
	    rm -f $(prefix)/$(cpp_install_dir)/$(CPP_INSTALL_NAME)$(exeext); \
	    $(INSTALL_PROGRAM) -m 755 cpp$(exeext) $(prefix)/$(cpp_install_dir)/$(CPP_INSTALL_NAME)$(exeext); \
	  else true; fi; \
	fi

uninstall-cpp:
	-rm -f $(bindir)/$(CPP_INSTALL_NAME)$(exeext)
	-rm -f $(bindir)/$(CPP_CROSS_NAME)$(exeext)
	-if [ x$(cpp_install_dir) != x ]; then \
	  rm -f $(prefix)/$(cpp_install_dir)/$(CPP_INSTALL_NAME)$(exeext); \
	  rm -f $(prefix)/$(cpp_install_dir)/$(CPP_CROSS_NAME)$(exeext); \
	else true; fi

# Create the installation directories.
installdirs:
	-if [ -d $(prefix) ] ; then true ; else mkdir $(prefix) ; chmod a+rx $(prefix) ; fi
	-if [ -d $(exec_prefix) ] ; then true ; else mkdir $(exec_prefix) ; chmod a+rx $(exec_prefix) ; fi
	-if [ -d $(libdir) ] ; then true ; else mkdir $(libdir) ; chmod a+rx $(libdir) ; fi
	-if [ -d $(libdir)/gcc-lib ] ; then true ; else mkdir $(libdir)/gcc-lib ; chmod a+rx $(libdir)/gcc-lib ; fi
# This dir isn't currently searched by cpp.
#	-if [ -d $(libdir)/gcc-lib/include ] ; then true ; else mkdir $(libdir)/gcc-lib/include ; chmod a+rx $(libdir)/gcc-lib/include ; fi
	-fdir= ; for dir in `echo $(libsubdir) | tr '/' ' '`; do \
	  fdir=$${fdir}/$${dir}; \
	  if [ -d $${fdir} ] ; then true ; else mkdir $${fdir}; chmod a+rx $${fdir}; fi ; \
	done
	-if [ -d $(bindir) ] ; then true ; else mkdir $(bindir) ; chmod a+rx $(bindir) ; fi
	-if [ -d $(includedir) ] ; then true ; else mkdir $(includedir) ; chmod a+rx $(includedir) ; fi
	-if [ -d $(infodir) ] ; then true ; else mkdir $(infodir) ; chmod a+rx $(infodir) ; fi
	-if [ -d $(slibdir) ] ; then true ; else mkdir $(slibdir) ; chmod a+rx $(slibdir) ; fi
# We don't use mkdir -p to create the parents of man1dir,
# because some systems don't support it.
# Instead, we use this technique to create the immediate parent of man1dir.
	-parent=`echo $(man1dir)|sed -e 's@/[^/]*$$@@'`; \
	if [ -d $$parent ] ; then true ; else mkdir $$parent ; chmod a+rx $$parent ; fi
	-if [ -d $(man1dir) ] ; then true ; else mkdir $(man1dir) ; chmod a+rx $(man1dir) ; fi
	-if [ -d $(man7dir) ] ; then true ; else mkdir $(man7dir) ; chmod a+rx $(man7dir) ; fi

# Install the compiler executables built during cross compilation.
install-common: native $(EXTRA_PARTS) lang.install-common
	for file in $(COMPILERS); do \
	  if [ -f $$file ] ; then \
	    rm -f $(libsubdir)/$$file; \
	    $(INSTALL_PROGRAM) $$file $(libsubdir)/$$file; \
	  else true; \
	  fi; \
	done
	for file in $(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2) ..; do \
	  if [ x"$$file" != x.. ]; then \
	    rm -f $(libsubdir)/$$file; \
	    $(INSTALL_PROGRAM) $$file $(libsubdir)/$$file; \
	  else true; fi; \
	done
	for file in $(EXTRA_PARTS) ..; do \
	  if [ x"$$file" != x.. ]; then \
	    rm -f $(libsubdir)/$$file; \
	    $(INSTALL_DATA) $$file $(libsubdir)/$$file; \
	    chmod a-x $(libsubdir)/$$file; \
	  else true; fi; \
	done
# Don't mess with specs if it doesn't exist yet.
	-if [ -f specs ] ; then \
	  rm -f $(libsubdir)/specs; \
	  $(INSTALL_DATA) specs $(libsubdir)/specs; \
	  chmod a-x $(libsubdir)/specs; \
	fi
# Install protoize if it was compiled.
	-if [ -f protoize$(exeext) ]; \
	then \
	    if [ -f gcc-cross$(exeext) ] ; then \
		rm -f $(bindir)/$(PROTOIZE_CROSS_NAME)$(exeext); \
		$(INSTALL_PROGRAM) protoize$(exeext) $(bindir)/$(PROTOIZE_CROSS_NAME)$(exeext); \
		rm -f $(bindir)/$(UNPROTOIZE_CROSS_NAME)$(exeext); \
		$(INSTALL_PROGRAM) unprotoize$(exeext) $(bindir)/$(UNPROTOIZE_CROSS_NAME)$(exeext); \
	    else \
		rm -f $(bindir)/$(PROTOIZE_INSTALL_NAME)$(exeext); \
		$(INSTALL_PROGRAM) protoize$(exeext) $(bindir)/$(PROTOIZE_INSTALL_NAME)$(exeext); \
		rm -f $(bindir)/$(UNPROTOIZE_INSTALL_NAME)$(exeext); \
		$(INSTALL_PROGRAM) unprotoize$(exeext) $(bindir)/$(UNPROTOIZE_INSTALL_NAME)$(exeext); \
	    fi ; \
	    rm -f $(libsubdir)/SYSCALLS.c.X; \
	    $(INSTALL_DATA) SYSCALLS.c.X $(libsubdir)/SYSCALLS.c.X; \
	    chmod a-x $(libsubdir)/SYSCALLS.c.X; \
	fi
	-rm -f $(libsubdir)/cpp0$(exeext)
	$(INSTALL_PROGRAM) cpp0$(exeext) $(libsubdir)/cpp0$(exeext)
	-rm -f $(libsubdir)/tradcpp0$(exeext)
	$(INSTALL_PROGRAM) tradcpp0$(exeext) $(libsubdir)/tradcpp0$(exeext)
# Install gcov if it was compiled.
	-if [ -f gcov$(exeext) ]; \
	then \
	    rm -f $(bindir)/gcov$(exeext); \
	    $(INSTALL_PROGRAM) gcov$(exeext) $(bindir)/$(GCOV_INSTALL_NAME)$(exeext); \
	fi
	$(INSTALL_SCRIPT) gccbug $(bindir)/$(GCCBUG_INSTALL_NAME)

# Install the driver program as $(target_alias)-gcc
# and also as either gcc (if native) or $(gcc_tooldir)/bin/gcc.
install-driver: installdirs xgcc$(exeext)
	-if [ -f gcc-cross$(exeext) ] ; then \
	  rm -f $(bindir)/$(GCC_CROSS_NAME)$(exeext); \
	  $(INSTALL_PROGRAM) gcc-cross$(exeext) $(bindir)/$(GCC_CROSS_NAME)$(exeext); \
	  if [ -d $(gcc_tooldir)/bin/. ] ; then \
	    rm -f $(gcc_tooldir)/bin/gcc$(exeext); \
	    $(INSTALL_PROGRAM) gcc-cross$(exeext) $(gcc_tooldir)/bin/gcc$(exeext); \
	  else true; fi; \
	else \
	  rm -f $(bindir)/$(GCC_INSTALL_NAME)$(exeext); \
	  $(INSTALL_PROGRAM) xgcc$(exeext) $(bindir)/$(GCC_INSTALL_NAME)$(exeext); \
	  rm -f $(bindir)/$(target_alias)-gcc-1$(exeext); \
	  $(LN) $(bindir)/$(GCC_INSTALL_NAME)$(exeext) $(bindir)/$(target_alias)-gcc-1$(exeext); \
	  mv $(bindir)/$(target_alias)-gcc-1$(exeext) $(bindir)/$(GCC_TARGET_INSTALL_NAME)$(exeext); \
	fi

# Install the info files.
# $(INSTALL_DATA) might be a relative pathname, so we can't cd into srcdir
# to do the install.
install-info: doc installdirs lang.install-info
	-rm -f $(infodir)/cpp.info* $(infodir)/gcc.info*
	-rm -f $(infodir)/cppinternals.info* $(infodir)/gccint.info*
	if [ -f $(docdir)/gcc.info ]; then \
	  for f in $(docdir)/cpp.info* $(docdir)/gcc.info* \
		$(docdir)/cppinternals.info* $(docdir)/gccint.info*; do \
	    realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
	    $(INSTALL_DATA) $$f $(infodir)/$$realfile; \
	  done; \
	else true; fi
	-if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
	  if [ -f $(infodir)/dir ] ; then \
	    for f in cpp.info gcc.info gccint.info cppinternals.info; do \
		if [ -f $(infodir)/$$f ]; then \
		  install-info --dir-file=$(infodir)/dir $(infodir)/$$f; \
		else true; fi; \
	    done; \
	  else true; fi; \
	else true; fi;
	-chmod a-x $(infodir)/cpp.info* $(infodir)/gcc.info*
	-chmod a-x $(infodir)/cppinternals.info* $(infodir)/gccint.info*

# Install the man pages.
install-man: installdirs $(GENERATED_MANPAGES) lang.install-man
	-if [ -f gcc-cross$(exeext) ] ; then \
	  rm -f $(man1dir)/$(GCC_CROSS_NAME)$(man1ext); \
	  $(INSTALL_DATA) $(docdir)/gcc.1 $(man1dir)/$(GCC_CROSS_NAME)$(man1ext); \
	  chmod a-x $(man1dir)/$(GCC_CROSS_NAME)$(man1ext); \
	else \
	  rm -f $(man1dir)/$(GCC_INSTALL_NAME)$(man1ext); \
	  $(INSTALL_DATA) $(docdir)/gcc.1 $(man1dir)/$(GCC_INSTALL_NAME)$(man1ext); \
	  chmod a-x $(man1dir)/$(GCC_INSTALL_NAME)$(man1ext); \
	fi
	-rm -f $(man1dir)/cpp$(man1ext)
	-$(INSTALL_DATA) $(docdir)/cpp.1 $(man1dir)/cpp$(man1ext)
	-chmod a-x $(man1dir)/cpp$(man1ext)
	-rm -f $(man1dir)/gcov$(man1ext)
	-$(INSTALL_DATA) $(docdir)/gcov.1 $(man1dir)/gcov$(man1ext)
	-chmod a-x $(man1dir)/gcov$(man1ext)
	-rm -f $(man7dir)/fsf-funding$(man7ext)
	-$(INSTALL_DATA) $(docdir)/fsf-funding.7 $(man7dir)/fsf-funding$(man7ext)
	-chmod a-x $(man7dir)/fsf-funding$(man7ext)
	-rm -f $(man7dir)/gfdl$(man7ext)
	-$(INSTALL_DATA) $(docdir)/gfdl.7 $(man7dir)/gfdl$(man7ext)
	-chmod a-x $(man7dir)/gfdl$(man7ext)
	-rm -f $(man7dir)/gpl$(man7ext)
	-$(INSTALL_DATA) $(docdir)/gpl.7 $(man7dir)/gpl$(man7ext)
	-chmod a-x $(man7dir)/gpl$(man7ext)

# Install the library.
install-libgcc: libgcc.mk libgcc.a installdirs
	if $(RANLIB_TEST_FOR_TARGET); then \
	  r_f_t=$(RANLIB_FOR_TARGET); \
	else \
	  r_f_t=: ; \
	fi; \
	$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
	  HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
	  AR_FOR_TARGET="$(AR_FOR_TARGET)" \
	  AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \
	  AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \
	  CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
	  RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \
	  NM_FOR_TARGET="$(NM_FOR_TARGET)" AWK="$(AWK)" \
	  LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \
	  INCLUDES="$(INCLUDES)" \
	  CONFIG_H="$(TCONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \
	  LIB1ASMSRC='$(LIB1ASMSRC)' \
	  MAKEOVERRIDES= \
	  INSTALL_DATA="$(INSTALL_DATA)" \
	  RANLIB_FOR_TARGET="$$r_f_t" \
	  libsubdir="$(libsubdir)" \
	  slibdir="$(slibdir)" \
	  -f libgcc.mk install

# Install multiple versions of libgcc.a.
install-multilib: stmp-multilib installdirs
	if $(RANLIB_TEST_FOR_TARGET); then \
	  r_f_t=$(RANLIB_FOR_TARGET); \
	else \
	  r_f_t=: ; \
	fi; \
	$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
	  HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
	  AR_FOR_TARGET="$(AR_FOR_TARGET)" \
	  AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \
	  AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \
	  CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
	  RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \
	  NM_FOR_TARGET="$(NM_FOR_TARGET)" AWK="$(AWK)" \
	  LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \
	  INCLUDES="$(INCLUDES)" \
	  CONFIG_H="$(CONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \
	  LIB1ASMSRC='$(LIB1ASMSRC)' \
	  MAKEOVERRIDES= \
	  INSTALL_DATA="$(INSTALL_DATA)" \
	  RANLIB_FOR_TARGET="$$r_f_t" \
	  libsubdir="$(libsubdir)" \
	  slibdir="$(slibdir)" \
	  -f libgcc.mk install

# Install all the header files built in the include subdirectory.
install-headers: $(INSTALL_HEADERS_DIR)
# Fix symlinks to absolute paths in the installed include directory to
# point to the installed directory, not the build directory.
# Don't need to use LN_S here since we really do need ln -s and no substitutes.
	-files=`cd $(libsubdir)/include; find . -type l -print 2>/dev/null`; \
	if [ $$? -eq 0 ]; then \
	  dir=`cd include; pwd`; \
	  for i in $$files; do \
	    dest=`ls -ld $(libsubdir)/include/$$i | sed -n 's/.*-> //p'`; \
	    if expr "$$dest" : "$$dir.*" > /dev/null; then \
	      rm -f $(libsubdir)/include/$$i; \
	      ln -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(libsubdir)/include/$$i; \
	    fi; \
	  done; \
	fi

# Create or recreate the gcc private include file directory.
install-include-dir: installdirs
	-rm -rf $(libsubdir)/include
	mkdir $(libsubdir)/include
	-chmod a+rx $(libsubdir)/include

# Install the include directory using tar.
install-headers-tar: stmp-int-hdrs $(STMP_FIXPROTO) install-include-dir
# We use `pwd`/include instead of just include to problems with CDPATH
# Unless a full pathname is provided, some shells would print the new CWD,
# found in CDPATH, corrupting the output.  We could just redirect the
# output of `cd', but some shells lose on redirection within `()'s
	(cd `pwd`/include ; \
	 tar -cf - .; exit 0) | (cd $(libsubdir)/include; tar xpf - )
# /bin/sh on some systems returns the status of the first tar,
# and that can lose with GNU tar which always writes a full block.
# So use `exit 0' to ignore its exit status.

# Install the include directory using cpio.
install-headers-cpio: stmp-int-hdrs $(STMP_FIXPROTO) install-include-dir
# See discussion about the use of `pwd` above
	cd `pwd`/include ; \
	find . -print | cpio -pdum $(libsubdir)/include

# Install the include directory using cp.
install-headers-cp: stmp-int-hdrs $(STMP_FIXPROTO) install-include-dir
	cp -p -r include $(libsubdir)

# Use this target to install the program `collect2' under the name `collect2'.
install-collect2: collect2 installdirs
	$(INSTALL_PROGRAM) collect2$(exeext) $(libsubdir)/collect2$(exeext)
# Install the driver program as $(libsubdir)/gcc for collect2.
	$(INSTALL_PROGRAM) xgcc$(exeext) $(libsubdir)/gcc$(exeext)

# Cancel installation by deleting the installed files.
uninstall: intl.uninstall lang.uninstall $(UNINSTALL_CPP)
	-rm -rf $(libsubdir)
	-rm -rf $(bindir)/$(GCC_INSTALL_NAME)$(exeext)
	-rm -rf $(bindir)/$(GCC_CROSS_NAME)$(exeext)
	-rm -rf $(bindir)/$(PROTOIZE_INSTALL_NAME)$(exeext)
	-rm -rf $(bindir)/$(PROTOIZE_CROSS_NAME)$(exeext)
	-rm -rf $(bindir)/$(UNPROTOIZE_INSTALL_NAME)$(exeext)
	-rm -rf $(bindir)/$(UNPROTOIZE_CROSS_NAME)$(exeext)
	-rm -rf $(bindir)/$(GCOV_INSTALL_NAME)$(exeext)
	-rm -rf $(man1dir)/$(GCC_INSTALL_NAME)$(man1ext)
	-rm -rf $(man1dir)/$(GCC_CROSS_NAME)$(man1ext)
	-rm -rf $(man1dir)/cpp$(man1ext)
	-rm -rf $(man1dir)/protoize$(man1ext)
	-rm -rf $(man1dir)/unprotoize$(man1ext)
	-rm -f $(infodir)/cpp.info* $(infodir)/gcc.info*
	-rm -f $(infodir)/cppinternals.info* $(infodir)/gccint.info*
#
# These targets are for the dejagnu testsuites. The file site.exp
# contains global variables that all the testsuites will use.

# Set to $(target_alias)/ for cross.
target_subdir = @target_subdir@

site.exp: ./config.status Makefile
	@echo "Making a new config file..."
	-@rm -f ./tmp?
	@$(STAMP) site.exp
	-@mv site.exp site.bak
	@echo "## these variables are automatically generated by make ##" > ./tmp0
	@echo "# Do not edit here. If you wish to override these values" >> ./tmp0
	@echo "# add them to the last section" >> ./tmp0
	@echo "set rootme \"`pwd`\"" >> ./tmp0
	@echo "set srcdir \"`cd ${srcdir}; pwd`\"" >> ./tmp0
	@echo "set host_triplet $(host_canonical)" >> ./tmp0
	@echo "set build_triplet $(build_canonical)" >> ./tmp0
	@echo "set target_triplet $(target)" >> ./tmp0
	@echo "set target_alias $(target_alias)" >> ./tmp0
# CFLAGS is set even though it's empty to show we reserve the right to set it.
	@echo "set CFLAGS \"\"" >> ./tmp0
	@echo "set CXXFLAGS \"-I$(objdir)/../$(target_subdir)libio -I\$$srcdir/../libg++/src -I\$$srcdir/../libio -I\$$srcdir/../libstdc++ -I\$$srcdir/../libstdc++/stl -L$(objdir)/../$(target_subdir)libg++ -L$(objdir)/../$(target_subdir)libstdc++\"" >> ./tmp0
	@echo "set TESTING_IN_BUILD_TREE 1" >> ./tmp0
	@echo "set HAVE_LIBSTDCXX_V3 1" >> ./tmp0
# If newlib has been configured, we need to pass -B to gcc so it can find
# newlib's crt0.o if it exists.  This will cause a "path prefix not used"
# message if it doesn't, but the testsuite is supposed to ignore the message -
# it's too difficult to tell when to and when not to pass -B (not all targets
# have crt0's).  We could only add the -B if ../newlib/crt0.o exists, but that
# seems like too selective a test.
# ??? Another way to solve this might be to rely on linker scripts.  Then
# theoretically the -B won't be needed.
# We also need to pass -L ../ld so that the linker can find ldscripts.
	@if [ -d $(objdir)/../$(target_subdir)newlib ] ; then \
	  echo "set newlib_cflags \"-I$(objdir)/../$(target_subdir)newlib/targ-include -I\$$srcdir/../newlib/libc/include\"" >> ./tmp0; \
	  echo "set newlib_ldflags \"-B$(objdir)/../$(target_subdir)newlib/\"" >> ./tmp0; \
	  echo "append CFLAGS \" \$$newlib_cflags\"" >> ./tmp0; \
	  echo "append CXXFLAGS \" \$$newlib_cflags\"" >> ./tmp0; \
	  echo "append LDFLAGS \" \$$newlib_ldflags\"" >> ./tmp0; \
	else true; \
	fi
	@if [ -d $(objdir)/../ld ] ; then \
	  echo "append LDFLAGS \" -L$(objdir)/../ld\"" >> ./tmp0; \
	else true; \
	fi
	echo "set tmpdir $(objdir)/testsuite" >> ./tmp0
	@echo "set srcdir \"\$${srcdir}/testsuite\"" >> ./tmp0
	@echo "## All variables above are generated by configure. Do Not Edit ##" >> ./tmp0
	@cat ./tmp0 > site.exp
	@cat site.bak | sed \
		-e '1,/^## All variables above are.*##/ d' >> site.exp
	-@rm -f ./tmp?

CHECK_TARGETS = check-gcc check-fixinc @check_languages@

check-c++ : check-g++
check-f77 : check-g77
check-java :

check-fixinc :
	if (autogen --ver=v) > /dev/null 2>&1 ; \
	then cd fixinc && $(MAKE) check ; \
	else true ; fi

check: $(CHECK_TARGETS)

# The idea is to parallelize testing of multilibs, for example:
#   make -j3 check-gcc//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu}
# will run 3 concurrent sessions of check-gcc, eventually testing
# all 10 combinations.  GNU make is required, as is a shell that expands
# alternations within braces.
check-gcc//% check-g++//% check-g77//% check-objc//%: site.exp
	target=`echo "$@" | sed 's,//.*,,'`; \
	variant=`echo "$@" | sed 's,^[^/]*//,,'`; \
	vardots=`echo "$$variant" | sed 's,/,.,g'`; \
	$(MAKE) TESTSUITEDIR="testsuite.$$vardots" \
	  RUNTESTFLAGS="--target_board=$$variant $(RUNTESTFLAGS)" \
	  "$$target"

TESTSUITEDIR = testsuite

$(TESTSUITEDIR)/site.exp: site.exp
	test -d $(TESTSUITEDIR) || mkdir $(TESTSUITEDIR)
	-rm -f $@
	sed '/set tmpdir/ s|testsuite|$(TESTSUITEDIR)|' < site.exp > $@

check-g++: $(TESTSUITEDIR)/site.exp
	-(rootme=`pwd`; export rootme; \
	srcdir=`cd ${srcdir}; pwd` ; export srcdir ; \
	cd $(TESTSUITEDIR); \
	EXPECT=${EXPECT} ; export EXPECT ; \
	if [ -f $${rootme}/../expect/expect ] ; then  \
	   TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; pwd` ; \
	    export TCL_LIBRARY ; fi ; \
	$(RUNTEST) --tool g++ $(RUNTESTFLAGS))

check-gcc: $(TESTSUITEDIR)/site.exp
	-(rootme=`pwd`; export rootme; \
	srcdir=`cd ${srcdir}; pwd` ; export srcdir ; \
	cd $(TESTSUITEDIR); \
	EXPECT=${EXPECT} ; export EXPECT ; \
	if [ -f $${rootme}/../expect/expect ] ; then  \
	   TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; pwd` ; \
	   export TCL_LIBRARY ; fi ; \
	$(RUNTEST) --tool gcc $(RUNTESTFLAGS))

check-g77: $(TESTSUITEDIR)/site.exp
	-(rootme=`pwd`; export rootme; \
	srcdir=`cd ${srcdir}; pwd` ; export srcdir ; \
	cd $(TESTSUITEDIR); \
	EXPECT=${EXPECT} ; export EXPECT ; \
	if [ -f $${rootme}/../expect/expect ] ; then  \
	   TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; pwd` ; \
	   export TCL_LIBRARY ; fi ; \
	$(RUNTEST) --tool g77 $(RUNTESTFLAGS))

check-objc: $(TESTSUITEDIR)/site.exp
	-(rootme=`pwd`; export rootme; \
	srcdir=`cd ${srcdir}; pwd` ; export srcdir ; \
	cd $(TESTSUITEDIR); \
	EXPECT=${EXPECT} ; export EXPECT ; \
	if [ -f $${rootme}/../expect/expect ] ; then  \
	   TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; pwd` ; \
	    export TCL_LIBRARY ; fi ; \
	$(RUNTEST) --tool objc $(RUNTESTFLAGS))

check-consistency: testsuite/site.exp
	-rootme=`pwd`; export rootme; \
	srcdir=`cd ${srcdir}; pwd` ; export srcdir ; \
	cd testsuite; \
	EXPECT=${EXPECT} ; export EXPECT ; \
	if [ -f $${rootme}/../expect/expect ] ; then  \
	   TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; pwd` ; \
	   export TCL_LIBRARY ; fi ; \
	$(RUNTEST) --tool consistency $(RUNTESTFLAGS)

# These exist for maintenance purposes.

# Update the tags table.
TAGS: force
	(cd $(srcdir);							\
	mkdir tmp-tags;							\
	mv -f c-parse.[ch] =*.[chy] tmp-tags;				\
	etags *.y *.h *.c;						\
	mv tmp-tags/* .;						\
	rmdir tmp-tags)

# A list of files to be destroyed during "lean" builds.
VOL_FILES=`echo $(BACKEND) $(OBJS) $(C_OBJS) $(LIBCPP_OBJS) *.c *.h gen*`

# Flags to pass to stage2 and later recursive makes.  Note that the
# WARN_CFLAGS setting can't be to the expansion of GCC_WARN_CFLAGS in
# the context of the stage_x rule.
STAGE2_FLAGS_TO_PASS = \
	CFLAGS="$(BOOT_CFLAGS)" \
	LDFLAGS="$(BOOT_LDFLAGS)" \
	WARN_CFLAGS="\$$(GCC_WARN_CFLAGS)" \
	STRICT_WARN="$(STRICT2_WARN)" \
	libdir=$(libdir) \
	LANGUAGES="$(LANGUAGES)" \
	MAKEOVERRIDES= \
	OUTPUT_OPTION="-o \$$@"

# Only build the C compiler for stage1, because that is the only one that
# we can guarantee will build with the native compiler, and also it is the
# only thing useful for building stage2. STAGE1_CFLAGS (via CFLAGS),
# MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them
# overrideable (for a bootstrap build stage1 also builds gcc.info).
stage1_build:
	$(MAKE) CC="$(CC)" libdir=$(libdir) LANGUAGES="$(BOOT_LANGUAGES)" \
		CFLAGS="$(STAGE1_CFLAGS)" MAKEINFO="$(MAKEINFO)" \
		MAKEINFOFLAGS="$(MAKEINFOFLAGS)"
	$(STAMP) stage1_build
	echo stage1_build > stage_last

stage1_copy: stage1_build
	$(MAKE) stage1
	$(STAMP) stage1_copy
	echo stage2_build > stage_last

stage2_build: stage1_copy
	$(MAKE) CC="stage1/xgcc$(exeext) -Bstage1/ -B$(build_tooldir)/bin/" \
		 STAGE_PREFIX=stage1/ \
		 $(STAGE2_FLAGS_TO_PASS)
	$(STAMP) stage2_build
	echo stage2_build > stage_last

stage2_copy: stage2_build
	$(MAKE) stage2
	$(STAMP) stage2_copy
	echo stage3_build > stage_last

stage3_build: stage2_copy
	$(MAKE) CC="stage2/xgcc$(exeext) -Bstage2/ -B$(build_tooldir)/bin/" \
		 STAGE_PREFIX=stage2/ \
		 $(STAGE2_FLAGS_TO_PASS)
	$(STAMP) stage3_build
	echo stage3_build > stage_last

# For bootstrap4:
stage3_copy: stage3_build
	$(MAKE) stage3
	$(STAMP) stage3_copy
	echo stage4_build > stage_last

stage4_build: stage3_copy
	$(MAKE) CC="stage3/xgcc$(exeext) -Bstage3/ -B$(build_tooldir)/bin/" \
		 STAGE_PREFIX=stage3/ \
		 $(STAGE2_FLAGS_TO_PASS)
	$(STAMP) stage4_build
	echo stage4_build > stage_last

# Additional steps for *-lean targets:
clean_s1: stage1_copy
	-(cd stage1 && rm -f $(VOL_FILES))
	$(STAMP) clean_s1

clean_s2: stage2_copy
	-rm -rf stage1
	$(STAMP) clean_s2

# The various entry points for bootstrapping.

bootstrap: stage3_build
	@echo
	@echo Bootstrap complete - make \"quickstrap\" to redo last build,
	@echo \"restage1\" through \"restage3\" to rebuild specific stages,
	@echo or \"cleanstrap\" to redo the bootstrap from scratch.

bootstrap-lean : clean_s1 clean_s2 stage3_build
	@echo
	@echo Bootstrap complete - make \"quickstrap\" to redo last build,
	@echo or \"cleanstrap\" to redo the bootstrap from scratch.

bootstrap2: bootstrap

bootstrap2-lean : bootstrap-lean

bootstrap3 bootstrap3-lean: bootstrap

bootstrap4 bootstrap4-lean: stage4_build

unstage1 unstage2 unstage3 unstage4:
	-set -vx; stage=`echo $@ | sed -e 's/un//'`; \
	rm -f $$stage/as$(exeext); \
	rm -f $$stage/ld$(exeext); \
	rm -f $$stage/collect-ld$(exeext); \
	if test -d $$stage; then \
	  mv $$stage/* . 2>/dev/null; \
	  for i in `cd $$stage; echo *` ; do \
	    if test -d $$stage/$$i; then \
	      mv $$stage/$$i/* $$i/. 2>/dev/null; \
	    else \
	      mv $$stage/$$i .; \
	    fi; \
	  done \
	fi ; \
	rm -f $${stage}_build $${stage}_copy ;\
	echo $${stage}_build > stage_last

restage1: unstage1
	$(MAKE) stage1_build

restage2: unstage2
	$(MAKE) LANGUAGES="$(LANGUAGES)" stage2_build

restage3: unstage3
	$(MAKE) LANGUAGES="$(LANGUAGES)" stage3_build

restage4: unstage4
	$(MAKE) LANGUAGES="$(LANGUAGES)" stage4_build

bubblestrap:
	if test -f stage3_build; then true; else \
	  echo; echo You must \"make bootstrap\" first.; \
	  exit 1; \
	fi
	for i in stage3 \
		unstage1 stage1_build stage1_copy \
		unstage2 stage2_build stage2_copy \
		unstage3 stage3_build ; \
	do \
	  $(MAKE) LANGUAGES="$(LANGUAGES)" $$i || exit 1 ; \
	done

quickstrap:
	if test -f stage_last ; then \
	  LAST=`cat stage_last`; rm $$LAST; $(MAKE) LANGUAGES="$(LANGUAGES)" $$LAST; \
	else \
	  $(MAKE) stage1_build; \
	fi

cleanstrap:
	-$(MAKE) clean
	$(MAKE) LANGUAGES="$(LANGUAGES)" bootstrap

# Compare the object files in the current directory with those in the
# stage2 directory.

# ./ avoids bug in some versions of tail.
compare compare3 compare4 compare-lean compare3-lean compare4-lean: force
	-rm -f .bad_compare
	case "$@" in compare | compare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^compare\([0-9][0-9]*\).*,\1,'` ;; esac; \
	for file in *$(objext); do \
	  tail +16c ./$$file > tmp-foo1; \
	  tail +16c stage$$stage/$$file > tmp-foo2 \
	    && (cmp tmp-foo1 tmp-foo2 > /dev/null 2>&1 || echo $$file differs >> .bad_compare) || true; \
	done
	case "$@" in compare | compare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^compare\([0-9][0-9]*\).*,\1,'` ;; esac; \
	for dir in tmp-foo intl $(SUBDIRS); do \
	  if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \
	    for file in $$dir/*$(objext); do \
	      tail +16c ./$$file > tmp-foo1; \
	      tail +16c stage$$stage/$$file > tmp-foo2 \
	        && (cmp tmp-foo1 tmp-foo2 > /dev/null 2>&1 || echo $$file differs >> .bad_compare) || true; \
	    done; \
	  else true; fi; \
	done
	-rm -f tmp-foo*
	case "$@" in compare | compare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^compare\([0-9][0-9]*\).*,\1,'` ;; esac; \
	if [ -f .bad_compare ]; then \
	  echo "Bootstrap comparison failure!"; \
	  cat .bad_compare; \
	  exit 1; \
	else \
	  case "$@" in \
	    *-lean ) rm -rf stage$$stage ;; \
	    *) ;; \
	  esac; true; \
	fi

# Compare the object files in the current directory with those in the
# stage2 directory.  Use gnu cmp (diffutils v2.4 or later) to avoid
# running tail and the overhead of twice copying each object file.

gnucompare gnucompare3 gnucompare4 gnucompare-lean gnucompare3-lean gnucompare4-lean: force
	-rm -f .bad_compare
	case "$@" in gnucompare | gnucompare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^gnucompare\([0-9][0-9]*\).*,\1,'` ;; esac; \
	for file in *$(objext); do \
	  (cmp --ignore-initial=16 $$file stage$$stage/$$file > /dev/null 2>&1 || echo $$file differs >> .bad_compare) || true; \
	done
	case "$@" in gnucompare | gnucompare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^gnucompare\([0-9][0-9]*\).*,\1,'` ;; esac; \
	for dir in tmp-foo intl $(SUBDIRS); do \
	  if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \
	    for file in $$dir/*$(objext); do \
	      (cmp --ignore-initial=16 $$file stage$$stage/$$file > /dev/null 2>&1 || echo $$file differs >> .bad_compare) || true; \
	    done; \
	  else true; fi; \
	done
	case "$@" in gnucompare | gnucompare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^gnucompare\([0-9][0-9]*\).*,\1,'` ;; esac; \
	if [ -f .bad_compare ]; then \
	  echo "Bootstrap comparison failure!"; \
	  cat .bad_compare; \
	  exit 1; \
	else \
	  case "$@" in \
	    *-lean ) rm -rf stage$$stage ;; \
	  esac; true; \
	fi

# Copy the object files from a particular stage into a subdirectory.
stage1-start:
	-if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
	$(MAKE) -f libgcc.mk libgcc-stage-start stage=stage1
	-for dir in intl $(SUBDIRS) ; \
	 do \
	   if [ -d stage1/$$dir ] ; then true ; else mkdir stage1/$$dir ; fi ; \
	 done
	-mv $(STAGESTUFF) stage1
	-mv intl/*$(objext) stage1/intl
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
# dir will work properly.
	-if [ -f as$(exeext) ] ; then (cd stage1 && $(LN_S) ../as$(exeext) .) ; else true ; fi
	-if [ -f ld$(exeext) ] ; then (cd stage1 && $(LN_S) ../ld$(exeext) .) ; else true ; fi
	-if [ -f collect-ld$(exeext) ] ; then (cd stage1 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
	-rm -f stage1/libgcc.a stage1/libgcc_eh.a
	-cp libgcc.a stage1
	-if $(RANLIB_TEST_FOR_TARGET) ; then \
	  $(RANLIB_FOR_TARGET) stage1/libgcc.a; \
	else true; fi
	-if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage1; \
	  if $(RANLIB_TEST_FOR_TARGET) ; then \
	   $(RANLIB_FOR_TARGET) stage1/libgcc_eh.a; \
	  else true; fi; fi
	-for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
	  cp stage1/$${f} . ; \
	else true; \
	fi; done
stage1: force stage1-start lang.stage1

stage2-start:
	-if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
	$(MAKE) -f libgcc.mk libgcc-stage-start stage=stage2
	-for dir in intl $(SUBDIRS) ; \
	 do \
	   if [ -d stage2/$$dir ] ; then true ; else mkdir stage2/$$dir ; fi ; \
	 done
	-mv $(STAGESTUFF) stage2
	-mv intl/*$(objext) stage2/intl
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
# dir will work properly.
	-if [ -f as$(exeext) ] ; then (cd stage2 && $(LN_S) ../as$(exeext) .) ; else true ; fi
	-if [ -f ld$(exeext) ] ; then (cd stage2 && $(LN_S) ../ld$(exeext) .) ; else true ; fi
	-if [ -f collect-ld$(exeext) ] ; then (cd stage2 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
	-rm -f stage2/libgcc.a stage2/libgcc_eh.a
	-cp libgcc.a stage2
	-if $(RANLIB_TEST_FOR_TARGET) ; then \
	  $(RANLIB_FOR_TARGET) stage2/libgcc.a; \
	else true; fi
	-if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage2; \
	  if $(RANLIB_TEST_FOR_TARGET) ; then \
	   $(RANLIB_FOR_TARGET) stage2/libgcc_eh.a; \
	  else true; fi; fi
	-for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
	  cp stage2/$${f} . ; \
	else true; \
	fi; done
stage2: force stage2-start lang.stage2

stage3-start:
	-if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
	$(MAKE) -f libgcc.mk libgcc-stage-start stage=stage3
	-for dir in intl $(SUBDIRS) ; \
	 do \
	   if [ -d stage3/$$dir ] ; then true ; else mkdir stage3/$$dir ; fi ; \
	 done
	-mv $(STAGESTUFF) stage3
	-mv intl/*$(objext) stage3/intl
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
# dir will work properly.
	-if [ -f as$(exeext) ] ; then (cd stage3 && $(LN_S) ../as$(exeext) .) ; else true ; fi
	-if [ -f ld$(exeext) ] ; then (cd stage3 && $(LN_S) ../ld$(exeext) .) ; else true ; fi
	-if [ -f collect-ld$(exeext) ] ; then (cd stage3 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
	-rm -f stage3/libgcc.a stage3/libgcc_eh.a
	-cp libgcc.a stage3
	-if $(RANLIB_TEST_FOR_TARGET) ; then \
	  $(RANLIB_FOR_TARGET) stage3/libgcc.a; \
	else true; fi
	-if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage3; \
	  if $(RANLIB_TEST_FOR_TARGET) ; then \
	   $(RANLIB_FOR_TARGET) stage3/libgcc_eh.a; \
	  else true; fi; fi
	-for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
	  cp stage3/$${f} . ; \
	else true; \
	fi; done
stage3: force stage3-start lang.stage3

stage4-start:
	-if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
	$(MAKE) -f libgcc.mk libgcc-stage-start stage=stage4
	-for dir in intl $(SUBDIRS) ; \
	 do \
	   if [ -d stage4/$$dir ] ; then true ; else mkdir stage4/$$dir ; fi ; \
	 done
	-mv $(STAGESTUFF) stage4
	-mv intl/*$(objext) stage4/intl
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
# dir will work properly.
	-if [ -f as$(exeext) ] ; then (cd stage4 && $(LN_S) ../as$(exeext) .) ; else true ; fi
	-if [ -f ld$(exeext) ] ; then (cd stage4 && $(LN_S) ../ld$(exeext) .) ; else true ; fi
	-if [ -f collect-ld$(exeext) ] ; then (cd stage4 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
	-rm -f stage4/libgcc.a stage4/libgcc_eh.a
	-cp libgcc.a stage4
	-if $(RANLIB_TEST_FOR_TARGET) ; then \
	  $(RANLIB_FOR_TARGET) stage4/libgcc.a; \
	else true; fi
	-if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage4; \
	  if $(RANLIB_TEST_FOR_TARGET) ; then \
	   $(RANLIB_FOR_TARGET) stage4/libgcc_eh.a; \
	  else true; fi; fi
	-for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
	  cp stage4/$${f} . ; \
	else true; \
	fi; done
stage4: force stage4-start lang.stage4

# Copy just the executable files from a particular stage into a subdirectory,
# and delete the object files.  Use this if you're just verifying a version
# that is pretty sure to work, and you are short of disk space.
risky-stage1: stage1
	-$(MAKE) clean

risky-stage2: stage2
	-$(MAKE) clean

risky-stage3: stage3
	-$(MAKE) clean

risky-stage4: stage4
	-$(MAKE) clean

#In GNU Make, ignore whether `stage*' exists.
.PHONY: stage1 stage2 stage3 stage4 clean maintainer-clean TAGS bootstrap
.PHONY: risky-stage1 risky-stage2 risky-stage3 risky-stage4

force:

# ---
# The enquire rules are still useful for building new float-anything.h.
# Special flags for compiling enquire.
# We disable optimization to make floating point more reliable.
ENQUIRE_CFLAGS = -DNO_MEM -DNO_LONG_DOUBLE_IO -O0
ENQUIRE_LDFLAGS = $(LDFLAGS)

# Enquire target (This is a variable so that a target can choose not to
# build it.)
ENQUIRE = enquire

# Test to see whether <float.h> exists in the system header files,
# and is not derived from GCC.
FLOAT_H_TEST = \
  [ -f $(SYSTEM_HEADER_DIR)/float.h ] && \
  if grep 'ifndef _FLOAT_H___' $(SYSTEM_HEADER_DIR)/float.h >/dev/null; \
  then false; \
  else :; fi
# We pretend to not having a usable <float.h>, hence disable the FLOAT_H_TEST
# to ensure, we're emitting a full blown <float.h> ourselves.
FLOAT_H_TEST = false

# Used to compile enquire with standard cc, but have forgotten why.
# Let's try with GCC.
enquire: enquire.o $(GCC_PARTS)
	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ENQUIRE_LDFLAGS) enquire.o -o $@
enquire.o: $(srcdir)/enquire.c $(GCC_PASSES) stmp-int-hdrs
	if $(FLOAT_H_TEST); then \
	  rm -f include/float.h; \
	  SYS_FLOAT_H_WRAP=1; \
	else :; \
	  SYS_FLOAT_H_WRAP=0; \
	fi; \
	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) $(ENQUIRE_CFLAGS) \
	  -DSYS_FLOAT_H_WRAP=$$SYS_FLOAT_H_WRAP \
	  -I. -c $(srcdir)/enquire.c $(OUTPUT_OPTION)

# Create float.h source for the native machine.
# Make it empty if we can use the system float.h without changes.
float.h-nat: enquire
	-./enquire -f > tmp-float.h
	grep '#define [^_]' tmp-float.h >/dev/null || true > tmp-float.h
	mv tmp-float.h float.h-nat

# Create a dummy float.h source for a cross-compiler.
# ??? This isn't used anymore.  Should we create config/float-unkn.h
# and make that the default float_format in configure?
float.h-cross:
	echo "#ifndef	__GCC_FLOAT_NOT_NEEDED" > t-float.h-cross
	echo "#error float.h values not known for cross-compiler" >> t-float.h-cross
	echo "#endif" >> t-float.h-cross
	mv t-float.h-cross float.h-cross

# Rules for generating translated message descriptions.
# Disabled by autoconf if the tools are not available.

XGETTEXT = @XGETTEXT@
GMSGFMT = @GMSGFMT@
MSGMERGE = msgmerge

PACKAGE = @PACKAGE@
CATALOGS = @CATALOGS@

.PHONY: build- install- build-po install-po update-po 

# Dummy rules to deal with dependencies produced by use of
# "build-@POSUB@" and "install-@POSUB@" above, when NLS is disabled.
build-: ; @true
install-: ; @true

build-po: $(CATALOGS)

# This notation should be acceptable to all Make implementations used
# by people who are interested in updating .po files.
update-po: $(CATALOGS:.gmo=.pox)

# N.B. We do not attempt to copy these into $(srcdir).  The snapshot
# script does that.
.po.gmo:
	-test -d po || mkdir po
	$(GMSGFMT) --statistics -o $@ $<

# The new .po has to be gone over by hand, so we deposit it into
# build/po with a different extension.
# If build/po/$(PACKAGE).pot exists, use it (it was just created),
# else use the one in srcdir.
.po.pox:
	-test -d po || mkdir po
	$(MSGMERGE) $< `if test -f po/$(PACKAGE).pot; \
			then echo po/$(PACKAGE).pot; \
			else echo $(srcdir)/po/$(PACKAGE).pot; fi` -o $@

# This rule has to look for .gmo modules in both srcdir and
# the cwd, and has to check that we actually have a catalog
# for each language, in case they weren't built or included
# with the distribution.
install-po:
	$(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$(datadir)
	for cat in $(CATALOGS); do \
	  lang=`basename $$cat | sed 's/\.gmo$$//'`; \
	  if [ -f $$cat ]; then :; \
	  elif [ -f $(srcdir)/$$cat ]; then cat=$(srcdir)/$$cat; \
	  else continue; \
	  fi; \
	  dir=$(localedir)/$$lang/LC_MESSAGES; \
	  echo $(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$$dir; \
	  $(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$$dir || exit 1; \
	  echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
	  $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
	done

# Rule for regenerating the message template (gcc.pot).
# Instead of forcing everyone to edit POTFILES.in, which proved impractical,
# this rule has no dependencies and always regenerates gcc.pot.  This is
# relatively harmless since the .po files do not directly depend on it.
# Note that exgettext has an awk script embedded in it which requires a
# fairly modern (POSIX-compliant) awk.
# The .pot file is left in the build directory.
$(PACKAGE).pot: po/$(PACKAGE).pot
po/$(PACKAGE).pot: force
	-test -d po || mkdir po
	$(MAKE) po-generated
	AWK=$(AWK) $(SHELL) $(srcdir)/po/exgettext \
		$(XGETTEXT) $(PACKAGE) $(srcdir)
