# Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
# Free Software Foundation, Inc.

# This file is part of GDB.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.

prefix = @prefix@
exec_prefix = @exec_prefix@

host_alias = @host_alias@
target_alias = @target_alias@
program_transform_name = @program_transform_name@
bindir = @bindir@
libdir = @libdir@
tooldir = $(libdir)/$(target_alias)

datadir = @datadir@
localedir = @localedir@
mandir = @mandir@
man1dir = $(mandir)/man1
man2dir = $(mandir)/man2
man3dir = $(mandir)/man3
man4dir = $(mandir)/man4
man5dir = $(mandir)/man5
man6dir = $(mandir)/man6
man7dir = $(mandir)/man7
man8dir = $(mandir)/man8
man9dir = $(mandir)/man9
infodir = @infodir@
datarootdir = @datarootdir@
docdir = @docdir@
htmldir = @htmldir@
pdfdir = @pdfdir@
includedir = @includedir@

# This can be referenced by `LIBINTL' as computed by
# ZW_GNU_GETTEXT_SISTER_DIR.
top_builddir = .

SHELL = @SHELL@
EXEEXT = @EXEEXT@

AWK = @AWK@
LN_S = @LN_S@

INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@

DESTDIR =

AR = @AR@
AR_FLAGS = qv
RANLIB = @RANLIB@
DLLTOOL = @DLLTOOL@
WINDRES = @WINDRES@
MIG = @MIG@

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

PACKAGE = @PACKAGE@
CATALOGS = @CATALOGS@

# If you are compiling with GCC, make sure that either 1) You have the
# fixed include files where GCC can reach them, or 2) You use the
# -traditional flag.  Otherwise the ioctl calls in inflow.c
# will be incorrectly compiled.  The "fixincludes" script in the gcc
# distribution will fix your include files up.
CC=@CC@

# Dependency tracking information.
DEPMODE = @CCDEPMODE@
DEPDIR = @DEPDIR@
depcomp = $(SHELL) $(srcdir)/../depcomp

# Note that these are overridden by GNU make-specific code below if
# GNU make is used.  The overrides implement dependency tracking.
COMPILE.pre = $(CC)
COMPILE.post = -c -o $@
COMPILE = $(COMPILE.pre) $(INTERNAL_CFLAGS) $(COMPILE.post)
POSTCOMPILE = @true

# Directory containing source files.
srcdir = @srcdir@
VPATH = @srcdir@

YACC=@YACC@

# This is used to rebuild ada-lex.c from ada-lex.l.  If the program is
# not defined, but ada-lex.c is present, compilation will continue,
# possibly with a warning.
FLEX = flex

YLWRAP = $(srcdir)/../ylwrap

# where to find makeinfo, preferably one designed for texinfo-2
MAKEINFO=makeinfo

MAKEHTML = $(MAKEINFO) --html
MAKEHTMLFLAGS =

# Set this up with gcc if you have gnu ld and the loader will print out
# line numbers for undefined references.
#CC_LD=gcc -static
CC_LD=$(CC)

# Where is our "include" directory?  Typically $(srcdir)/../include.
# This is essentially the header file directory for the library
# routines in libiberty.
INCLUDE_DIR =  $(srcdir)/../include
INCLUDE_CFLAGS = -I$(INCLUDE_DIR)

# Where is the "-liberty" library?  Typically in ../libiberty.
LIBIBERTY = ../libiberty/libiberty.a

# Where is the BFD library?  Typically in ../bfd.
BFD_DIR = ../bfd
BFD = $(BFD_DIR)/libbfd.a
BFD_SRC = $(srcdir)/$(BFD_DIR)
BFD_CFLAGS = -I$(BFD_DIR) -I$(BFD_SRC)

# Where is the decnumber library?  Typically in ../libdecnumber.
LIBDECNUMBER_DIR = ../libdecnumber
LIBDECNUMBER = $(LIBDECNUMBER_DIR)/libdecnumber.a
LIBDECNUMBER_SRC = $(srcdir)/$(LIBDECNUMBER_DIR)
LIBDECNUMBER_CFLAGS = -I$(LIBDECNUMBER_DIR) -I$(LIBDECNUMBER_SRC)

# Where is the READLINE library?  Typically in ../readline.
READLINE_DIR = ../readline
READLINE_SRC = $(srcdir)/$(READLINE_DIR)
READLINE = @READLINE@
READLINE_DEPS = @READLINE_DEPS@
READLINE_CFLAGS = @READLINE_CFLAGS@

# Where is expat?  This will be empty if expat was not available.
LIBEXPAT = @LIBEXPAT@

WARN_CFLAGS = @WARN_CFLAGS@
WERROR_CFLAGS = @WERROR_CFLAGS@
GDB_WARN_CFLAGS = $(WARN_CFLAGS)
GDB_WERROR_CFLAGS = $(WERROR_CFLAGS)

GDB_WARN_CFLAGS_NO_FORMAT = `echo " $(GDB_WARN_CFLAGS) " | sed "s/ -Wformat-nonliteral / /g"`

RDYNAMIC = @RDYNAMIC@

# Where is the INTL library?  Typically in ../intl.
INTL = @LIBINTL@
INTL_DEPS = @LIBINTL_DEP@
INTL_CFLAGS = @INCINTL@

# Did the user give us a --with-sysroot option?
TARGET_SYSTEM_ROOT = @TARGET_SYSTEM_ROOT@
TARGET_SYSTEM_ROOT_DEFINE = @TARGET_SYSTEM_ROOT_DEFINE@

# Did the user give us a --with-gdb-datadir option?
GDB_DATADIR = @GDB_DATADIR@

# Helper code from gnulib.
LIBGNU = gnulib/libgnu.a
INCGNU = -I$(srcdir)/gnulib -Ignulib

# Generated headers in the gnulib directory.  These must be listed
# so that they are generated before other files are compiled.
GNULIB_H = gnulib/string.h @GNULIB_STDINT_H@

#
# CLI sub directory definitons
#
SUBDIR_CLI_OBS = \
	cli-dump.o \
	cli-decode.o cli-script.o cli-cmds.o cli-setshow.o \
	cli-logging.o \
	cli-interp.o
SUBDIR_CLI_SRCS = \
	cli/cli-dump.c \
	cli/cli-decode.c cli/cli-script.c cli/cli-cmds.c cli/cli-setshow.c \
	cli/cli-logging.c \
	cli/cli-interp.c
SUBDIR_CLI_DEPS =
SUBDIR_CLI_LDFLAGS=
SUBDIR_CLI_CFLAGS=

#
# MI sub directory definitons
#
SUBDIR_MI_OBS = \
	mi-out.o mi-console.o \
	mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \
	mi-cmd-file.o mi-cmd-disas.o mi-symbol-cmds.o mi-cmd-target.o \
	mi-interp.o \
	mi-main.o mi-parse.o mi-getopt.o
SUBDIR_MI_SRCS = \
	mi/mi-out.c mi/mi-console.c \
	mi/mi-cmds.c mi/mi-cmd-env.c \
	mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \
	mi/mi-cmd-file.c mi/mi-cmd-disas.c mi/mi-symbol-cmds.c \
	mi/mi-cmd-target.c mi/mi-interp.c \
	mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c
SUBDIR_MI_DEPS =
SUBDIR_MI_LDFLAGS=
SUBDIR_MI_CFLAGS= \
	-DMI_OUT=1

#
# TUI sub directory definitions
#

# Name of the TUI program
TUI=gdbtui

SUBDIR_TUI_OBS = \
	tui-command.o \
	tui-data.o \
	tui-disasm.o \
	tui-file.o tui.o \
	tui-hooks.o \
	tui-interp.o \
	tui-io.o \
	tui-layout.o \
	tui-out.o \
	tui-regs.o \
	tui-source.o \
	tui-stack.o \
	tui-win.o \
	tui-windata.o \
	tui-wingeneral.o \
	tui-winsource.o
SUBDIR_TUI_SRCS = \
	tui/tui-command.c \
	tui/tui-data.c \
	tui/tui-disasm.c \
	tui/tui-file.c \
	tui/tui-hooks.c \
	tui/tui-interp.c \
	tui/tui-io.c \
	tui/tui-layout.c \
	tui/tui-out.c \
	tui/tui-regs.c \
	tui/tui-source.c \
	tui/tui-stack.c \
	tui/tui-win.c \
	tui/tui-windata.c \
	tui/tui-wingeneral.c \
	tui/tui-winsource.c \
	tui/tui.c
SUBDIR_TUI_DEPS =
SUBDIR_TUI_LDFLAGS=
SUBDIR_TUI_CFLAGS= \
	-DTUI=1

#
# python sub directory definitons
#
SUBDIR_PYTHON_OBS = \
	python.o \
	py-auto-load.o \
	py-block.o \
	py-breakpoint.o \
	py-cmd.o \
	py-frame.o \
	py-function.o \
	py-lazy-string.o \
	py-objfile.o \
	py-param.o \
	py-prettyprint.o \
	py-progspace.o \
	py-symbol.o \
	py-symtab.o \
	py-type.o \
	py-utils.o \
	py-value.o
SUBDIR_PYTHON_SRCS = \
	python/python.c \
	python/py-auto-load.c \
	python/py-block.c \
	python/py-breakpoint.c \
	python/py-cmd.c \
	python/py-frame.c \
	python/py-function.c \
	python/py-lazy-string.c \
	python/py-objfile.c \
	python/py-param.c \
	python/py-prettyprint.c \
	python/py-progspace.c \
	python/py-symbol.c \
	python/py-symtab.c \
	python/py-type.c \
	python/py-utils.c \
	python/py-value.c
SUBDIR_PYTHON_DEPS =
SUBDIR_PYTHON_LDFLAGS=
SUBDIR_PYTHON_CFLAGS=


# Opcodes currently live in one of two places.  Either they are in the
# opcode library, typically ../opcodes, or they are in a header file
# in INCLUDE_DIR.
# Where is the "-lopcodes" library, with (some of) the opcode tables and
# disassemblers?
OPCODES_DIR = ../opcodes
OPCODES_SRC = $(srcdir)/$(OPCODES_DIR)
OPCODES = $(OPCODES_DIR)/libopcodes.a
# Where are the other opcode tables which only have header file
# versions?
OP_INCLUDE = $(INCLUDE_DIR)/opcode
# Some source files like to use #include "opcodes/file.h"
OPCODES_CFLAGS = -I$(OP_INCLUDE) -I$(OPCODES_SRC)/..

# The simulator is usually nonexistent; targets that include one
# should set this to list all the .o or .a files to be linked in.
SIM = @SIM@

WIN32LIBS = @WIN32LIBS@

# Tcl et al cflags and libraries
TCL = @TCL_LIBRARY@
TCL_CFLAGS = @TCL_INCLUDE@
GDBTKLIBS = @GDBTKLIBS@
# Extra flags that the GDBTK files need:
GDBTK_CFLAGS = @GDBTK_CFLAGS@

TK = @TK_LIBRARY@
TK_CFLAGS = @TK_INCLUDE@

X11_CFLAGS = @TK_XINCLUDES@
X11_LDFLAGS =
X11_LIBS =

WIN32LDAPP = @WIN32LDAPP@

LIBGUI = @LIBGUI@
GUI_CFLAGS_X = @GUI_CFLAGS_X@
IDE_CFLAGS=$(GUI_CFLAGS_X) $(IDE_CFLAGS_X)

ALL_TCL_CFLAGS = $(TCL_CFLAGS) $(TK_CFLAGS)

# The version of gdbtk we're building. This should be kept
# in sync with GDBTK_VERSION and friends in gdbtk.h.
GDBTK_VERSION = 1.0
GDBTK_LIBRARY = $(datadir)/insight$(GDBTK_VERSION)

# Gdbtk requires an absolute path to the source directory or
# the testsuite won't run properly.
GDBTK_SRC_DIR = @GDBTK_SRC_DIR@

SUBDIR_GDBTK_OBS = \
	gdbtk.o gdbtk-bp.o gdbtk-cmds.o gdbtk-hooks.o gdbtk-interp.o \
	gdbtk-register.o gdbtk-stack.o gdbtk-varobj.o gdbtk-wrapper.o
SUBDIR_GDBTK_SRCS = \
	gdbtk/generic/gdbtk.c gdbtk/generic/gdbtk-bp.c \
	gdbtk/generic/gdbtk-cmds.c gdbtk/generic/gdbtk-hooks.c \
	gdbtk/generic/gdbtk-interp.c \
	gdbtk/generic/gdbtk-register.c gdbtk/generic/gdbtk-stack.c \
	gdbtk/generic/gdbtk-varobj.c gdbtk/generic/gdbtk-wrapper.c \
	gdbtk/generic/gdbtk-main.c
SUBDIR_GDBTK_DEPS = $(LIBGUI) $(TCL_DEPS) $(TK_DEPS)
SUBDIR_GDBTK_LDFLAGS=
SUBDIR_GDBTK_CFLAGS= -DGDBTK

CONFIG_OBS= @CONFIG_OBS@
CONFIG_SRCS= @CONFIG_SRCS@
CONFIG_DEPS= @CONFIG_DEPS@
CONFIG_LDFLAGS = @CONFIG_LDFLAGS@
ENABLE_CFLAGS= @ENABLE_CFLAGS@
CONFIG_ALL= @CONFIG_ALL@
CONFIG_CLEAN= @CONFIG_CLEAN@
CONFIG_INSTALL = @CONFIG_INSTALL@
CONFIG_UNINSTALL = @CONFIG_UNINSTALL@

# -I. for config files.
# -I$(srcdir) for gdb internal headers.
# -I$(srcdir)/config for more generic config files.

# It is also possible that you will need to add -I/usr/include/sys if
# your system doesn't have fcntl.h in /usr/include (which is where it
# should be according to Posix).
DEFS = @DEFS@
GDB_CFLAGS = -I. -I$(srcdir) -I$(srcdir)/common -I$(srcdir)/config \
	-DLOCALEDIR="\"$(localedir)\"" $(DEFS)

# MH_CFLAGS, if defined, has host-dependent CFLAGS from the config directory.
GLOBAL_CFLAGS = $(MH_CFLAGS)

PROFILE_CFLAGS = @PROFILE_CFLAGS@

# CFLAGS is specifically reserved for setting from the command line
# when running make.  I.E.  "make CFLAGS=-Wmissing-prototypes".
CFLAGS = @CFLAGS@

# Set by configure, for e.g. expat.
INTERNAL_CPPFLAGS = @CPPFLAGS@

# Need to pass this to testsuite for "make check".  Probably should be
# consistent with top-level Makefile.in and gdb/testsuite/Makefile.in
# so "make check" has the same result no matter where it is run.
CXXFLAGS = -g -O

# INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros.
INTERNAL_CFLAGS_BASE = \
	$(CFLAGS) $(GLOBAL_CFLAGS) $(PROFILE_CFLAGS) \
	$(GDB_CFLAGS) $(OPCODES_CFLAGS) $(READLINE_CFLAGS) \
	$(BFD_CFLAGS) $(INCLUDE_CFLAGS) $(LIBDECNUMBER_CFLAGS) \
	$(INTL_CFLAGS) $(INCGNU) $(ENABLE_CFLAGS) $(INTERNAL_CPPFLAGS)
INTERNAL_WARN_CFLAGS = $(INTERNAL_CFLAGS_BASE) $(GDB_WARN_CFLAGS)
INTERNAL_CFLAGS = $(INTERNAL_WARN_CFLAGS) $(GDB_WERROR_CFLAGS)

# LDFLAGS is specifically reserved for setting from the command line
# when running make.
LDFLAGS = @LDFLAGS@

# Profiling options need to go here to work.
# I think it's perfectly reasonable for a user to set -pg in CFLAGS
# and have it work; that's why CFLAGS is here.
# PROFILE_CFLAGS is _not_ included, however, because we use monstartup.
INTERNAL_LDFLAGS = $(CFLAGS) $(GLOBAL_CFLAGS) $(MH_LDFLAGS) $(LDFLAGS) $(CONFIG_LDFLAGS)

# If your system is missing alloca(), or, more likely, it's there but
# it doesn't work, then refer to libiberty.

# Libraries and corresponding dependencies for compiling gdb.
# {X,T}M_CLIBS, defined in *config files, have host- and target-dependent libs.
# LIBIBERTY appears twice on purpose.
# If you have the Cygnus libraries installed,
# you can use 'CLIBS=$(INSTALLED_LIBS)' 'CDEPS='
INSTALLED_LIBS=-lbfd -lreadline -lopcodes -liberty -ldecnumber \
	$(XM_CLIBS) $(NAT_CLIBS) $(GDBTKLIBS) @LIBS@ \
	-lintl -liberty $(LIBGNU)
CLIBS = $(SIM) $(READLINE) $(OPCODES) $(BFD) $(INTL) $(LIBIBERTY) $(LIBDECNUMBER) \
	$(XM_CLIBS) $(NAT_CLIBS) $(GDBTKLIBS) @LIBS@ \
	$(LIBEXPAT) \
	$(LIBIBERTY) $(WIN32LIBS) $(LIBGNU)
CDEPS = $(XM_CDEPS) $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE_DEPS) \
	$(OPCODES) $(INTL_DEPS) $(LIBIBERTY) $(CONFIG_DEPS) $(LIBGNU)

ADD_FILES = $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
ADD_DEPS = $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)

DIST=gdb

LINT=/usr/5bin/lint
LINTFLAGS= $(GDB_CFLAGS) $(OPCODES_CFLAGS) $(READLINE_CFLAGS) \
	$(BFD_CFLAGS) $(INCLUDE_CFLAGS) \
	$(INTL_CFLAGS)

RUNTEST = runtest
RUNTESTFLAGS=

# XML files to build in to GDB.
XMLFILES = $(srcdir)/features/gdb-target.dtd $(srcdir)/features/xinclude.dtd \
	$(srcdir)/features/library-list.dtd $(srcdir)/features/osdata.dtd \
	$(srcdir)/features/threads.dtd

# This is ser-unix.o for any system which supports a v7/BSD/SYSV/POSIX
# interface to the serial port.  Hopefully if get ported to OS/2, VMS,
# etc., then there will be (as part of the C library or perhaps as
# part of libiberty) a POSIX interface.  But at least for now the
# host-dependent makefile fragment might need to use something else
# besides ser-unix.o
SER_HARDWIRE = @SER_HARDWIRE@

# The `remote' debugging target is supported for most architectures,
# but not all (e.g. 960)
REMOTE_OBS = remote.o dcache.o tracepoint.o ax-general.o ax-gdb.o remote-fileio.o

# This is remote-sim.o if a simulator is to be linked in.
SIM_OBS = @SIM_OBS@

# Target-dependent object files.
TARGET_OBS = @TARGET_OBS@

# All target-dependent objects files that require 64-bit CORE_ADDR
# (used with --enable-targets=all --enable-64-bit-bfd).
ALL_64_TARGET_OBS = \
	alphabsd-tdep.o alphafbsd-tdep.o alpha-linux-tdep.o alpha-mdebug-tdep.o \
	alphanbsd-tdep.o alphaobsd-tdep.o alpha-osf1-tdep.o alpha-tdep.o \
	amd64fbsd-tdep.o amd64-darwin-tdep.o amd64-dicos-tdep.o \
	amd64-linux-tdep.o amd64nbsd-tdep.o \
	amd64obsd-tdep.o amd64-sol2-tdep.o amd64-tdep.o amd64-windows-tdep.o \
	ia64-linux-tdep.o ia64-tdep.o \
	mips64obsd-tdep.o \
	sparc64fbsd-tdep.o sparc64-linux-tdep.o sparc64nbsd-tdep.o \
	sparc64obsd-tdep.o sparc64-sol2-tdep.o sparc64-tdep.o

# All other target-dependent objects files (used with --enable-targets=all).
ALL_TARGET_OBS = \
	armbsd-tdep.o arm-linux-tdep.o arm-symbian-tdep.o \
	armnbsd-tdep.o armobsd-tdep.o \
	arm-tdep.o arm-wince-tdep.o \
	avr-tdep.o \
	cris-tdep.o \
	dicos-tdep.o \
	frv-linux-tdep.o frv-tdep.o \
	h8300-tdep.o \
	hppabsd-tdep.o hppanbsd-tdep.o hppaobsd-tdep.o \
	hppa-hpux-tdep.o hppa-linux-tdep.o hppa-tdep.o \
	i386bsd-tdep.o i386-cygwin-tdep.o i386fbsd-tdep.o i386gnu-tdep.o \
	i386-linux-tdep.o i386nbsd-tdep.o i386-nto-tdep.o i386obsd-tdep.o \
	i386-sol2-tdep.o i386-tdep.o i387-tdep.o \
	i386-dicos-tdep.o i386-darwin-tdep.o \
	iq2000-tdep.o \
	linux-tdep.o \
	lm32-tdep.o \
	m32c-tdep.o \
	m32r-linux-tdep.o m32r-tdep.o \
	m68hc11-tdep.o \
	m68kbsd-tdep.o m68klinux-tdep.o m68k-tdep.o \
	m88k-tdep.o \
	mep-tdep.o \
	microblaze-tdep.o microblaze-linux-tdep.o \
	mips-irix-tdep.o mips-linux-tdep.o \
	mipsnbsd-tdep.o mips-tdep.o \
	mn10300-linux-tdep.o mn10300-tdep.o \
	moxie-tdep.o \
	mt-tdep.o \
	nto-tdep.o \
	ppc-linux-tdep.o ppcnbsd-tdep.o ppcobsd-tdep.o ppc-sysv-tdep.o \
	rs6000-aix-tdep.o rs6000-tdep.o \
	s390-tdep.o \
	score-tdep.o \
	sh64-tdep.o sh-linux-tdep.o shnbsd-tdep.o sh-tdep.o \
	sparc-linux-tdep.o sparcnbsd-tdep.o sparcobsd-tdep.o \
	sparc-sol2-tdep.o sparc-tdep.o \
	spu-tdep.o spu-multiarch.o solib-spu.o \
	v850-tdep.o \
	vaxnbsd-tdep.o vaxobsd-tdep.o vax-tdep.o \
	xstormy16-tdep.o \
	xtensa-config.o xtensa-tdep.o xtensa-linux-tdep.o \
	glibc-tdep.o \
	bsd-uthread.o \
	nbsd-tdep.o obsd-tdep.o \
	sol2-tdep.o \
	solib-frv.o solib-irix.o solib-svr4.o solib-target.o \
	solib-som.o solib-pa64.o solib-darwin.o \
	dbug-rom.o dink32-rom.o ppcbug-rom.o m32r-rom.o dsrec.o monitor.o \
	remote-m32r-sdi.o \
	xcoffread.o \
	symfile-mem.o \
	corelow.o \
	windows-tdep.o \
	linux-record.o

# Host-dependent makefile fragment comes in here.
@host_makefile_frag@
# End of host-dependent makefile fragment

FLAGS_TO_PASS = \
	"prefix=$(prefix)" \
	"exec_prefix=$(exec_prefix)" \
	"infodir=$(infodir)" \
	"datarootdir=$(datarootdir)" \
	"docdir=$(docdir)" \
	"htmldir=$(htmldir)" \
	"pdfdir=$(pdfdir)" \
	"libdir=$(libdir)" \
	"mandir=$(mandir)" \
	"datadir=$(datadir)" \
	"includedir=$(includedir)" \
	"against=$(against)" \
	"DESTDIR=$(DESTDIR)" \
	"AR=$(AR)" \
	"AR_FLAGS=$(AR_FLAGS)" \
	"CC=$(CC)" \
	"CFLAGS=$(CFLAGS)" \
	"CXX=$(CXX)" \
	"CXXFLAGS=$(CXXFLAGS)" \
	"DLLTOOL=$(DLLTOOL)" \
	"LDFLAGS=$(LDFLAGS)" \
	"RANLIB=$(RANLIB)" \
	"MAKEINFO=$(MAKEINFO)" \
	"MAKEHTML=$(MAKEHTML)" \
	"MAKEHTMLFLAGS=$(MAKEHTMLFLAGS)" \
	"INSTALL=$(INSTALL)" \
	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
	"INSTALL_DATA=$(INSTALL_DATA)" \
	"RUNTEST=$(RUNTEST)" \
	"RUNTESTFLAGS=$(RUNTESTFLAGS)"

# Flags that we pass when building the testsuite.

# empty for native, $(target_alias)/ for cross
target_subdir = @target_subdir@

CC_FOR_TARGET = ` \
  if [ -f $${rootme}/../gcc/xgcc ] ; then \
    if [ -f $${rootme}/../$(target_subdir)newlib/Makefile ] ; then \
      echo $${rootme}/../gcc/xgcc -B$${rootme}/../gcc/ -idirafter $${rootme}/$(target_subdir)newlib/targ-include -idirafter $${rootsrc}/../$(target_subdir)newlib/libc/include -nostdinc -B$${rootme}/../$(target_subdir)newlib/; \
    else \
      echo $${rootme}/../gcc/xgcc -B$${rootme}/../gcc/; \
    fi; \
  else \
    if [ "$(host_canonical)" = "$(target_canonical)" ] ; then \
      echo $(CC); \
    else \
      t='$(program_transform_name)'; echo gcc | sed -e '' $$t; \
    fi; \
  fi`

CXX = gcc
CXX_FOR_TARGET = ` \
  if [ -f $${rootme}/../gcc/xgcc ] ; then \
    if [ -f $${rootme}/../$(target_subdir)newlib/Makefile ] ; then \
      echo $${rootme}/../gcc/xgcc -B$${rootme}/../gcc/ -idirafter $${rootme}/$(target_subdir)newlib/targ-include -idirafter $${rootsrc}/../$(target_subdir)newlib/libc/include -nostdinc -B$${rootme}/../$(target_subdir)newlib/; \
    else \
      echo $${rootme}/../gcc/xgcc -B$${rootme}/../gcc/; \
    fi; \
  else \
    if [ "$(host_canonical)" = "$(target_canonical)" ] ; then \
      echo $(CXX); \
    else \
      t='$(program_transform_name)'; echo gcc | sed -e '' $$t; \
    fi; \
  fi`

# The use of $$(x_FOR_TARGET) reduces the command line length by not
# duplicating the lengthy definition.
TARGET_FLAGS_TO_PASS = \
	"prefix=$(prefix)" \
	"exec_prefix=$(exec_prefix)" \
	"against=$(against)" \
	'CC=$$(CC_FOR_TARGET)' \
	"CC_FOR_TARGET=$(CC_FOR_TARGET)" \
	"CFLAGS=$(CFLAGS)" \
	'CXX=$$(CXX_FOR_TARGET)' \
	"CXX_FOR_TARGET=$(CXX_FOR_TARGET)" \
	"CXXFLAGS=$(CXXFLAGS)" \
	"INSTALL=$(INSTALL)" \
	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
	"INSTALL_DATA=$(INSTALL_DATA)" \
	"MAKEINFO=$(MAKEINFO)" \
	"MAKEHTML=$(MAKEHTML)" \
	"RUNTEST=$(RUNTEST)" \
	"RUNTESTFLAGS=$(RUNTESTFLAGS)" \
	"FORCE_PARALLEL=$(FORCE_PARALLEL)"

# All source files that go into linking GDB.
# Links made at configuration time should not be specified here, since
# SFILES is used in building the distribution archive.

SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \
	addrmap.c \
	auxv.c ax-general.c ax-gdb.c \
	bcache.c \
	bfd-target.c \
	block.c blockframe.c breakpoint.c buildsym.c \
	c-exp.y c-lang.c c-typeprint.c c-valprint.c \
	charset.c cli-out.c coffread.c coff-pe-read.c \
	complaints.c completer.c corefile.c \
	cp-abi.c cp-support.c cp-namespace.c cp-valprint.c \
	d-lang.c d-valprint.c \
	cp-name-parser.y \
	dbxread.c demangle.c dictionary.c disasm.c doublest.c dummy-frame.c \
	dwarf2expr.c dwarf2loc.c dwarf2read.c dwarf2-frame.c \
	elfread.c environ.c eval.c event-loop.c event-top.c \
	exceptions.c expprint.c \
	f-exp.y f-lang.c f-typeprint.c f-valprint.c filesystem.c \
	findcmd.c findvar.c frame.c frame-base.c frame-unwind.c \
	gdbarch.c arch-utils.c gdbtypes.c gnu-v2-abi.c gnu-v3-abi.c \
	inf-loop.c \
	infcall.c \
	infcmd.c inflow.c infrun.c \
	inline-frame.c \
	interps.c \
	jv-exp.y jv-lang.c jv-valprint.c jv-typeprint.c \
	language.c linespec.c \
	m2-exp.y m2-lang.c m2-typeprint.c m2-valprint.c \
	macrotab.c macroexp.c macrocmd.c macroscope.c main.c maint.c \
	mdebugread.c memattr.c mem-break.c minsyms.c mipsread.c memory-map.c \
	mi/mi-common.c \
	objc-exp.y objc-lang.c \
	objfiles.c osabi.c observer.c osdata.c \
	p-exp.y p-lang.c p-typeprint.c p-valprint.c parse.c printcmd.c \
	proc-service.list progspace.c \
	prologue-value.c psymtab.c \
	regcache.c reggroups.c remote.c remote-fileio.c reverse.c \
	scm-exp.c scm-lang.c scm-valprint.c \
	sentinel-frame.c \
	serial.c ser-base.c ser-unix.c \
	solib.c solib-null.c source.c \
	stabsread.c stack.c std-regs.c symfile.c symfile-mem.c symmisc.c \
	symtab.c \
	target.c target-descriptions.c target-memory.c \
	thread.c top.c tracepoint.c \
	trad-frame.c \
	tramp-frame.c \
	typeprint.c \
	ui-out.c utils.c ui-file.h ui-file.c \
	user-regs.c \
	valarith.c valops.c valprint.c value.c varobj.c vec.c \
	wrapper.c \
	xml-tdesc.c xml-support.c \
	inferior.c gdb_usleep.c \
	record.c gcore.c \
	jit.c \
	xml-syscall.c \

LINTFILES = $(SFILES) $(YYFILES) $(CONFIG_SRCS) init.c

# Header files that need to have srcdir added.  Note that in the cases
# where we use a macro like $(gdbcmd_h), things are carefully arranged
# so that each .h file is listed exactly once (M-x tags-search works
# wrong if TAGS has files twice).  Because this is tricky to get
# right, it is probably easiest just to list .h files here directly.

HFILES_NO_SRCDIR = osf-share/cma_debug_client.h	\
osf-share/HP800/cma_thread_io.h osf-share/cma_sequence.h \
osf-share/cma_mutex.h osf-share/cma_semaphore_defs.h \
osf-share/cma_list.h osf-share/cma_handle.h osf-share/cma_stack.h \
osf-share/cma_util.h osf-share/RIOS/cma_thread_io.h \
osf-share/cma_errors.h osf-share/cma_tcb_defs.h osf-share/cma_attr.h \
osf-share/cma_stack_int.h osf-share/cma_init.h \
osf-share/cma_deb_core.h osf-share/AT386/cma_thread_io.h \
osf-share/cma_sched.h proc-utils.h arm-tdep.h ax-gdb.h ppcnbsd-tdep.h \
cli-out.h gdb_expat.h breakpoint.h infcall.h obsd-tdep.h \
exec.h m32r-tdep.h osabi.h gdbcore.h solib-som.h \
i386bsd-nat.h xml-support.h xml-tdesc.h alphabsd-tdep.h gdb_obstack.h \
ia64-tdep.h ada-lang.h varobj.h frv-tdep.h nto-tdep.h serial.h \
c-lang.h d-lang.h frame.h event-loop.h block.h cli/cli-setshow.h	\
cli/cli-decode.h cli/cli-cmds.h cli/cli-dump.h \
cli/cli-script.h macrotab.h symtab.h version.h gnulib/wchar.in.h \
gnulib/string.in.h gnulib/str-two-way.h gnulib/extra/link-warning.h \
gnulib/stdint.in.h remote.h gdb.h sparc-nat.h gdbserver/win32-low.h \
gdbserver/i387-fp.h gdbserver/server.h gdbserver/terminal.h \
gdbserver/mem-break.h gdbserver/wincecompat.h gdbserver/target.h \
gdbserver/linux-low.h gdbserver/gdb_proc_service.h \
gdbserver/regcache.h gdbthread.h dwarf2-frame.h nbsd-nat.h dcache.h \
amd64-nat.h s390-tdep.h arm-linux-tdep.h exceptions.h macroscope.h \
gdbarch.h bsd-uthread.h gdb_thread_db.h gdb_stat.h memory-map.h	\
mdebugread.h m88k-tdep.h stabsread.h hppa-linux-offsets.h linux-fork.h \
ser-unix.h scm-lang.h inf-ptrace.h terminal.h ui-out.h frame-base.h \
f-lang.h dwarf2loc.h value.h sparc-tdep.h defs.h target-descriptions.h \
objfiles.h vec.h disasm.h mips-tdep.h ser-base.h \
gdb_curses.h bfd-target.h memattr.h inferior.h ax.h dummy-frame.h \
inflow.h fbsd-nat.h libunwind-frame.h completer.h inf-ttrace.h \
solib-target.h gdb_vfork.h alpha-tdep.h dwarf2expr.h \
m2-lang.h stack.h charset.h addrmap.h command.h solist.h source.h \
target.h prologue-value.h cp-abi.h tui/tui-hooks.h tui/tui.h \
tui/tui-file.h tui/tui-command.h tui/tui-disasm.h tui/tui-wingeneral.h \
tui/tui-windata.h tui/tui-data.h tui/tui-win.h tui/tui-stack.h \
tui/tui-winsource.h tui/tui-regs.h tui/tui-io.h tui/tui-layout.h \
tui/tui-source.h xcoffsolib.h sol2-tdep.h gregset.h sh-tdep.h \
expression.h score-tdep.h gdb_select.h ser-tcp.h buildsym.h valprint.h \
call-cmds.h typeprint.h mi/mi-getopt.h mi/mi-parse.h mi/mi-console.h \
mi/mi-out.h mi/mi-main.h mi/mi-common.h mi/mi-cmds.h linux-nat.h \
complaints.h gdb_proc_service.h gdb_regex.h xtensa-tdep.h inf-loop.h \
gdb_wait.h gdb_assert.h solib.h ppc-tdep.h cp-support.h glibc-tdep.h \
interps.h auxv.h gdbcmd.h tramp-frame.h mipsnbsd-tdep.h	\
amd64-linux-tdep.h linespec.h i387-tdep.h mn10300-tdep.h \
sparc64-tdep.h monitor.h ppcobsd-tdep.h srec.h solib-pa64.h \
coff-pe-read.h parser-defs.h gdb_ptrace.h mips-linux-tdep.h \
m68k-tdep.h spu-tdep.h jv-lang.h environ.h solib-irix.h amd64-tdep.h \
doublest.h regset.h hppa-tdep.h ppc-linux-tdep.h rs6000-tdep.h \
gdb_locale.h gdb_dirent.h arch-utils.h trad-frame.h gnu-nat.h \
language.h nbsd-tdep.h wrapper.h solib-svr4.h \
macroexp.h ui-file.h regcache.h gdb_string.h tracepoint.h i386-tdep.h \
inf-child.h p-lang.h event-top.h gdbtypes.h scm-tags.h user-regs.h \
regformats/regdef.h config/alpha/nm-osf3.h  config/i386/nm-i386gnu.h \
config/i386/nm-fbsd.h config/i386/nm-linux.h \
config/nm-nto.h config/sparc/nm-sol2.h config/nm-linux.h \
config/rs6000/nm-rs6000.h top.h bsd-kvm.h gdb-stabs.h reggroups.h \
annotate.h sim-regno.h dictionary.h dfp.h main.h frame-unwind.h	\
remote-fileio.h i386-linux-tdep.h vax-tdep.h objc-lang.h \
sentinel-frame.h bcache.h symfile.h windows-tdep.h linux-tdep.h \
gdb_usleep.h jit.h xml-syscall.h ada-operator.inc microblaze-tdep.h \
psymtab.h psympriv.h

# Header files that already have srcdir in them, or which are in objdir.

HFILES_WITH_SRCDIR = ../bfd/bfd.h


# GDB "info" files, which should be included in their entirety
INFOFILES = gdb.info*

REMOTE_EXAMPLES = m68k-stub.c i386-stub.c sparc-stub.c rem-multi.shar

# {X,T,NAT}DEPFILES are something of a pain in that it's hard to
# default their values the way we do for SER_HARDWIRE; in the future
# maybe much of the stuff now in {X,T,NAT}DEPFILES will go into other
# variables analogous to SER_HARDWIRE which get defaulted in this
# Makefile.in

DEPFILES = $(TARGET_OBS) $(SER_HARDWIRE) $(NATDEPFILES) \
	   $(REMOTE_OBS) $(SIM_OBS)

SOURCES = $(SFILES) $(ALLDEPFILES) $(YYFILES) $(CONFIG_SRCS)
# Don't include YYFILES (*.c) because we already include *.y in SFILES,
# and it's more useful to see it in the .y file.
TAGFILES_NO_SRCDIR = $(SFILES) $(HFILES_NO_SRCDIR) $(ALLDEPFILES) \
	$(CONFIG_SRCS)
TAGFILES_WITH_SRCDIR = $(HFILES_WITH_SRCDIR)

COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
	version.o \
	annotate.o \
	addrmap.o \
	auxv.o \
	bfd-target.o \
	blockframe.o breakpoint.o findvar.o regcache.o \
	charset.o disasm.o dummy-frame.o dfp.o \
	source.o value.o eval.o valops.o valarith.o valprint.o printcmd.o \
	block.o symtab.o psymtab.o symfile.o symmisc.o linespec.o dictionary.o \
	infcall.o \
	infcmd.o infrun.o \
	expprint.o environ.o stack.o thread.o \
	exceptions.o \
	filesystem.o \
	inf-child.o \
	interps.o \
	main.o \
	macrotab.o macrocmd.o macroexp.o macroscope.o \
	mi-common.o \
	event-loop.o event-top.o inf-loop.o completer.o \
	gdbarch.o arch-utils.o gdbtypes.o osabi.o copying.o \
	memattr.o mem-break.o target.o parse.o language.o buildsym.o \
	findcmd.o \
	std-regs.o \
	signals.o \
	exec.o reverse.o \
	bcache.o objfiles.o observer.o minsyms.o maint.o demangle.o \
	dbxread.o coffread.o coff-pe-read.o \
	dwarf2read.o mipsread.o stabsread.o corefile.o \
	dwarf2expr.o dwarf2loc.o dwarf2-frame.o \
	ada-lang.o c-lang.o d-lang.o f-lang.o objc-lang.o \
	ada-tasks.o \
	ui-out.o cli-out.o \
	varobj.o vec.o wrapper.o \
	jv-lang.o jv-valprint.o jv-typeprint.o \
	m2-lang.o p-lang.o p-typeprint.o p-valprint.o \
	scm-exp.o scm-lang.o scm-valprint.o \
	sentinel-frame.o \
	complaints.o typeprint.o \
	ada-typeprint.o c-typeprint.o f-typeprint.o m2-typeprint.o \
	ada-valprint.o c-valprint.o cp-valprint.o d-valprint.o f-valprint.o \
	m2-valprint.o \
	serial.o mdebugread.o top.o utils.o \
	ui-file.o \
	user-regs.o \
	frame.o frame-unwind.o doublest.o \
	frame-base.o \
	inline-frame.o \
	gnu-v2-abi.o gnu-v3-abi.o cp-abi.o cp-support.o \
	cp-namespace.o \
	reggroups.o regset.o \
	trad-frame.o \
	tramp-frame.o \
	solib.o solib-null.o \
	prologue-value.o memory-map.o xml-support.o xml-syscall.o \
	target-descriptions.o target-memory.o xml-tdesc.o xml-builtin.o \
	inferior.o osdata.o gdb_usleep.o record.o gcore.o \
	jit.o progspace.o

# Definitions for the syscall's XML files and dir
XML_SYSCALLS_DIR = syscalls/
XML_SYSCALLS_FILES = gdb-syscalls.dtd \
		     ppc-linux.xml ppc64-linux.xml \
		     i386-linux.xml amd64-linux.xml \
		     sparc-linux.xml sparc64-linux.xml

TSOBS = inflow.o

SUBDIRS = @subdirs@
CLEANDIRS = $(SUBDIRS) gnulib

# For now, shortcut the "configure GDB for fewer languages" stuff.
YYFILES = c-exp.c \
	cp-name-parser.c \
	objc-exp.c \
	ada-lex.c \
	ada-exp.c \
	jv-exp.c \
	f-exp.c m2-exp.c p-exp.c
YYOBJ = c-exp.o \
	cp-name-parser.o \
	objc-exp.o \
	ada-exp.o \
	jv-exp.o \
	f-exp.o m2-exp.o p-exp.o

# Things which need to be built when making a distribution.

DISTSTUFF = $(YYFILES)


# All generated files which can be included by another file.
generated_files = config.h observer.h observer.inc ada-lex.c \
	$(GNULIB_H) $(NAT_GENERATED_FILES)

.c.o:
	$(COMPILE) $<
	$(POSTCOMPILE)

all: gdb$(EXEEXT) $(CONFIG_ALL) xml-syscall-copy
	@$(MAKE) $(FLAGS_TO_PASS) DO=all "DODIRS=`echo $(SUBDIRS) | sed 's/testsuite//'`" subdir_do
.PHONY: all-tui
all-tui: $(TUI)$(EXEEXT)

# This is needed for running GDB from the build directory
.PHONY: xml-syscall-copy
xml-syscall-copy:
	if [ "`cd $(srcdir) && pwd`" != "`pwd`" ] ; then \
	  mkdir -p ./$(XML_SYSCALLS_DIR) ; \
	  list='$(XML_SYSCALLS_FILES)' ; \
 	  for file in $$list ; do \
	    f=$(srcdir)/$(XML_SYSCALLS_DIR)/$$file ; \
	    if test -f $$f ; then \
	      $(INSTALL_DATA) $$f \
	    	  ./$(XML_SYSCALLS_DIR) ; \
	    fi ; \
	  done ; \
	fi ;

# This target is responsible for properly installing the syscalls'
# XML files in the system.
.PHONY: xml-syscall-install
xml-syscall-install:
	$(SHELL) $(srcdir)/../mkinstalldirs \
		$(DESTDIR)$(GDB_DATADIR)/$(XML_SYSCALLS_DIR) ; \
	list='$(XML_SYSCALLS_FILES)' ; \
	for file in $$list ; do \
	  f=$(srcdir)/$(XML_SYSCALLS_DIR)/$$file ; \
	  if test -f $$f ; then \
	    $(INSTALL_DATA) $$f \
	    	$(DESTDIR)$(GDB_DATADIR)/$(XML_SYSCALLS_DIR) ; \
	  fi ; \
	done ;

installcheck:

# The check target can not use subdir_do, because subdir_do does not
# use TARGET_FLAGS_TO_PASS.
check: force
	@if [ -f testsuite/Makefile ]; then \
	  rootme=`pwd`; export rootme; \
	  rootsrc=`cd $(srcdir); pwd`; export rootsrc; \
	  cd testsuite; \
	  $(MAKE) $(TARGET_FLAGS_TO_PASS) check; \
	else true; fi

# The idea is to parallelize testing of multilibs, for example:
#   make -j3 check//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu}
# will run 3 concurrent sessions of check, eventually testing all 10
# combinations.  GNU make is required for the % pattern to work, as is
# a shell that expands alternations within braces.  If GNU make is not
# used, this rule will harmlessly fail to match.  Used FORCE_PARALLEL to
# prevent serialized checking due to the passed RUNTESTFLAGS.
# FIXME: use config.status --config not --version, when available.
check//%: force
	@if [ -f testsuite/config.status ]; then \
	  rootme=`pwd`; export rootme; \
	  rootsrc=`cd $(srcdir); pwd`; export rootsrc; \
	  target=`echo "$@" | sed 's,//.*,,'`; \
	  variant=`echo "$@" | sed 's,^[^/]*//,,'`; \
	  vardots=`echo "$$variant" | sed 's,/,.,g'`; \
	  testdir=testsuite.$$vardots; \
	  if [ ! -f $$testdir/Makefile ] && [ -f testsuite/config.status ]; then \
	    configargs=`cd testsuite && ./config.status --version | \
	      sed -n -e 's,"$$,,' -e 's,^ *with options ",,p'`; \
	    $(SHELL) $(srcdir)/../mkinstalldirs $$testdir && \
	    (cd $$testdir && \
	     eval $(SHELL) "\"\$$rootsrc/testsuite/configure\" $$configargs" \
			   "\"--srcdir=\$$rootsrc/testsuite\"" \
	     ); \
	  else :; fi && cd $$testdir && \
	  $(MAKE) $(TARGET_FLAGS_TO_PASS) \
	    RUNTESTFLAGS="--target_board=$$variant $(RUNTESTFLAGS)" \
	    FORCE_PARALLEL=$(if $(FORCE_PARALLEL),1,$(if $(RUNTESTFLAGS),,1)) \
	    "$$target"; \
	else true; fi

info install-info clean-info dvi pdf install-pdf html install-html: force
	@$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do

gdb.z:gdb.1
	nroff -man $(srcdir)/gdb.1 | col -b > gdb.t
	pack gdb.t ; rm -f gdb.t
	mv gdb.t.z gdb.z

# Traditionally "install" depends on "all".  But it may be useful
# not to; for example, if the user has made some trivial change to a
# source file and doesn't care about rebuilding or just wants to save the
# time it takes for make to check that all is up to date.
# install-only is intended to address that need.
install: all install-only 

# The "install-only" target also installs the syscalls' XML files in
# the system.
install-only: $(CONFIG_INSTALL) xml-syscall-install
	transformed_name=`t='$(program_transform_name)'; \
			  echo gdb | sed -e "$$t"` ; \
		if test "x$$transformed_name" = x; then \
		  transformed_name=gdb ; \
		else \
		  true ; \
		fi ; \
		$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir) ; \
		$(INSTALL_PROGRAM) gdb$(EXEEXT) \
			$(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \
		$(SHELL) $(srcdir)/../mkinstalldirs \
			$(DESTDIR)$(man1dir) ; \
		$(INSTALL_DATA) $(srcdir)/gdb.1 \
			$(DESTDIR)$(man1dir)/$$transformed_name.1
	@$(MAKE) DO=install "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do
.PHONY: install-tui
install-tui:
	transformed_name=`t='$(program_transform_name)'; \
			  echo $(TUI) | sed -e "$$t"` ; \
		if test "x$$transformed_name" = x; then \
		  transformed_name=$(TUI) ; \
		else \
		  true ; \
		fi ; \
		$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir) ; \
		$(INSTALL_PROGRAM) $(TUI)$(EXEEXT) \
			$(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \
		$(SHELL) $(srcdir)/../mkinstalldirs \
			$(DESTDIR)$(man1dir) ; \
		$(INSTALL_DATA) $(srcdir)/gdb.1 \
			$(DESTDIR)$(man1dir)/$$transformed_name.1


uninstall: force $(CONFIG_UNINSTALL)
	transformed_name=`t='$(program_transform_name)'; \
			  echo gdb | sed -e $$t` ; \
		if test "x$$transformed_name" = x; then \
		  transformed_name=gdb ; \
		else \
		  true ; \
		fi ; \
		rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \
		      $(DESTDIR)$(man1dir)/$$transformed_name.1
	@$(MAKE) DO=uninstall "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do
.PHONY: uninstall-tui
uninstall-tui:
	transformed_name=`t='$(program_transform_name)'; \
			  echo $(TUI) | sed -e $$t` ; \
		if test "x$$transformed_name" = x; then \
		  transformed_name=$(TUI) ; \
		else \
		  true ; \
		fi ; \
		rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \
		      $(DESTDIR)$(man1dir)/$$transformed_name.1

# The C++ name parser can be built standalone for testing.
test-cp-name-parser.o: cp-name-parser.c
	$(COMPILE) -DTEST_CPNAMES cp-name-parser.c
	$(POSTCOMPILE)

test-cp-name-parser$(EXEEXT): test-cp-name-parser.o $(LIBIBERTY)
	$(CC_LD) $(INTERNAL_LDFLAGS) -o test-cp-name-parser$(EXEEXT) \
		test-cp-name-parser.o $(LIBIBERTY)

# We do this by grepping through sources.  If that turns out to be too slow,
# maybe we could just require every .o file to have an initialization routine
# of a given name (top.o -> _initialize_top, etc.).
#
# Formatting conventions:  The name of the _initialize_* routines must start
# in column zero, and must not be inside #if.
#
# Note that the set of files with init functions might change, or the names
# of the functions might change, so this files needs to depend on all the
# object files that will be linked into gdb.

# FIXME: There is a problem with this approach - init.c may force
# unnecessary files to be linked in.

# FIXME: cagney/2002-06-09: gdb/564: gdb/563: Force the order so that
# the first call is to _initialize_gdbtypes (implemented by explicitly
# putting that function's name first in the init.l-tmp file).  This is
# a hack to ensure that all the architecture dependant global
# builtin_type_* variables are initialized before anything else
# (per-architecture code is called in the same order that it is
# registered).  The ``correct fix'' is to have all the builtin types
# made part of the architecture and initialize them on-demand (using
# gdbarch_data) just like everything else.  The catch is that other
# modules still take the address of these builtin types forcing them
# to be variables, sigh!

# NOTE: cagney/2003-03-18: The sed pattern ``s|^\([^ /]...'' is
# anchored on the first column and excludes the ``/'' character so
# that it doesn't add the $(srcdir) prefix to any file that already
# has an absolute path.  It turns out that $(DEC)'s True64 make
# automatically adds the $(srcdir) prefixes when it encounters files
# in sub-directories such as cli/ and mi/.

# NOTE: cagney/2004-02-08: The ``case "$$fs" in'' eliminates
# duplicates.  Files in the gdb/ directory can end up appearing in
# COMMON_OBS (as a .o file) and CONFIG_SRCS (as a .c file).

INIT_FILES = $(COMMON_OBS) $(TSOBS) $(CONFIG_SRCS)
init.c: $(INIT_FILES)
	@echo Making init.c
	@rm -f init.c-tmp init.l-tmp
	@touch init.c-tmp
	@echo gdbtypes > init.l-tmp
	@-LANG=C ; export LANG ; \
	LC_ALL=C ; export LC_ALL ; \
	echo $(INIT_FILES) | \
	tr ' ' '\012' | \
	sed \
	    -e '/^gdbtypes.[co]$$/d' \
	    -e '/^init.[co]$$/d' \
	    -e '/xdr_ld.[co]$$/d' \
	    -e '/xdr_ptrace.[co]$$/d' \
	    -e '/xdr_rdb.[co]$$/d' \
	    -e '/udr.[co]$$/d' \
	    -e '/udip2soc.[co]$$/d' \
	    -e '/udi2go32.[co]$$/d' \
	    -e '/version.[co]$$/d' \
	    -e '/^[a-z0-9A-Z_]*_[SU].[co]$$/d' \
	    -e '/[a-z0-9A-Z_]*-exp.tab.[co]$$/d' \
	    -e 's/\.[co]$$/.c/' \
	    -e 's,signals\.c,common/signals\.c,' \
	    -e 's|^\([^  /][^     ]*\)|$(srcdir)/\1|g' | \
	while read f; do \
	    sed -n -e 's/^_initialize_\([a-z_0-9A-Z]*\).*/\1/p' $$f 2>/dev/null; \
	done | \
	while read f; do \
	    case " $$fs " in \
	        *" $$f "* ) ;; \
	        * ) echo $$f ; fs="$$fs $$f";; \
            esac; \
	done >> init.l-tmp
	@echo '/* Do not modify this file.  */' >>init.c-tmp
	@echo '/* It is created automatically by the Makefile.  */'>>init.c-tmp
	@echo '#include "defs.h"      /* For initialize_file_ftype.  */' >>init.c-tmp
	@echo '#include "call-cmds.h" /* For initialize_all_files.  */' >>init.c-tmp
	@sed -e 's/\(.*\)/extern initialize_file_ftype _initialize_\1;/' <init.l-tmp >>init.c-tmp
	@echo 'void' >>init.c-tmp
	@echo 'initialize_all_files (void)' >>init.c-tmp
	@echo '{' >>init.c-tmp
	@sed -e 's/\(.*\)/  _initialize_\1 ();/' <init.l-tmp >>init.c-tmp
	@echo '}' >>init.c-tmp
	@rm init.l-tmp
	@mv init.c-tmp init.c

.PRECIOUS: init.c

# Removing the old gdb first works better if it is running, at least on SunOS.
gdb$(EXEEXT): gdb.o libgdb.a $(ADD_DEPS) $(CDEPS) $(TDEPLIBS)
	rm -f gdb$(EXEEXT)
	$(CC_LD) $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \
		-o gdb$(EXEEXT) gdb.o libgdb.a \
		$(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES)

$(TUI)$(EXEEXT): tui-main.o libgdb.a $(ADD_DEPS) $(CDEPS) $(TDEPLIBS)
	rm -f $(TUI)$(EXEEXT)
	$(CC_LD) $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \
		-o $(TUI)$(EXEEXT) tui-main.o libgdb.a \
		$(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES)

# Convenience rule to handle recursion.
$(LIBGNU) $(GNULIB_H): all-lib
all-lib: gnulib/Makefile
	@$(MAKE) $(FLAGS_TO_PASS) DO=all DODIRS=gnulib subdir_do
.PHONY: all-lib

# Create a library of the gdb object files and build GDB by linking
# against that.
#
# init.o is very important.  It pulls in the rest of GDB.
LIBGDB_OBS= $(COMMON_OBS) $(TSOBS) $(ADD_FILES) init.o
libgdb.a: $(LIBGDB_OBS)
	-rm -f libgdb.a
	$(AR) q libgdb.a $(LIBGDB_OBS)
	$(RANLIB) libgdb.a

# This is useful when debugging GDB, because some Unix's don't let you run GDB
# on itself without copying the executable.  So "make gdb1" will make
# gdb and put a copy in gdb1, and you can run it with "gdb gdb1".
# Removing gdb1 before the copy is the right thing if gdb1 is open
# in another process.
gdb1$(EXEEXT): gdb$(EXEEXT)
	rm -f gdb1$(EXEEXT)
	cp gdb$(EXEEXT) gdb1$(EXEEXT)

# Put the proper machine-specific files first, so M-. on a machine
# specific routine gets the one for the correct machine.  (FIXME: those
# files go in twice; we should be removing them from the main list).

# TAGS depends on all the files that go into it so you can rebuild TAGS
# with `make TAGS' and not have to say `rm TAGS' first.

GDB_NM_FILE = @GDB_NM_FILE@
TAGS: $(DEPFILES) $(TAGFILES_NO_SRCDIR) $(TAGFILES_WITH_SRCDIR)
	@echo Making TAGS
	@etags $(srcdir)/$(GDB_NM_FILE) \
	`(for i in $(DEPFILES) $(TAGFILES_NO_SRCDIR); do \
		echo $(srcdir)/$$i ; \
	done ; for i in $(TAGFILES_WITH_SRCDIR); do \
		echo $$i ; \
	done) | sed -e 's/\.o$$/\.c/'` \
	`find $(srcdir)/config -name '*.h' -print`

tags: TAGS

clean mostlyclean: $(CONFIG_CLEAN)
	@$(MAKE) $(FLAGS_TO_PASS) DO=clean "DODIRS=$(CLEANDIRS)" subdir_do
	rm -f *.o *.a $(ADD_FILES) *~ init.c-tmp init.l-tmp version.c-tmp
	rm -f init.c version.c
	rm -f gdb$(EXEEXT) core make.log
	rm -f gdb[0-9]$(EXEEXT)
	rm -f test-cp-name-parser$(EXEEXT)
	rm -f xml-builtin.c stamp-xml
	rm -f $(DEPDIR)/*

.PHONY: clean-tui
clean-tui:
	rm -f $(TUI)$(EXEEXT)

# This used to depend on c-exp.c m2-exp.c TAGS
# I believe this is wrong; the makefile standards for distclean just
# describe removing files; the only sort of "re-create a distribution"
# functionality described is if the distributed files are unmodified.
# NB: While GDBSERVER might be configured on native systems, it isn't
# always included in SUBDIRS.  Remove the gdbserver files explicitly.
distclean: clean
	@$(MAKE) $(FLAGS_TO_PASS) DO=distclean "DODIRS=$(CLEANDIRS)" subdir_do
	rm -f gdbserver/config.status gdbserver/config.log
	rm -f gdbserver/tm.h gdbserver/xm.h gdbserver/nm.h
	rm -f gdbserver/Makefile gdbserver/config.cache
	rm -f nm.h config.status config.h stamp-h .gdbinit
	rm -f y.output yacc.acts yacc.tmp y.tab.h
	rm -f config.log config.cache
	rm -f Makefile
	rm -rf $(DEPDIR)

maintainer-clean: local-maintainer-clean do-maintainer-clean distclean
realclean: maintainer-clean

local-maintainer-clean:
	@echo "This command is intended for maintainers to use;"
	@echo "it deletes files that may require special tools to rebuild."
	rm -f c-exp.c \
		cp-name-parser.c \
		ada-lex.c ada-exp.c \
	        objc-exp.c \
		jv-exp.tab \
		f-exp.c m2-exp.c p-exp.c
	rm -f TAGS $(INFOFILES)
	rm -f $(YYFILES)
	rm -f nm.h config.status

do-maintainer-clean:
	@$(MAKE) $(FLAGS_TO_PASS) DO=maintainer-clean "DODIRS=$(CLEANDIRS)" \
		subdir_do

diststuff: $(DISTSTUFF) $(PACKAGE).pot $(CATALOGS)
	cd doc; $(MAKE) $(MFLAGS) diststuff

subdir_do: force
	@for i in $(DODIRS); do \
		if [ -f ./$$i/Makefile ] ; then \
			if (cd ./$$i; \
				$(MAKE) $(FLAGS_TO_PASS) $(DO)) ; then true ; \
			else exit 1 ; fi ; \
		else true ; fi ; \
	done

Makefile: Makefile.in config.status @frags@
	# Regenerate the Makefile and the tm.h / nm.h links.
	CONFIG_FILES="Makefile" \
	  CONFIG_COMMANDS= \
	  CONFIG_HEADERS= \
	  $(SHELL) config.status

gnulib/Makefile: gnulib/Makefile.in gnulib/Makefile.in config.status @frags@
	CONFIG_FILES="gnulib/Makefile" \
	  CONFIG_COMMANDS="depfiles" \
	  CONFIG_HEADERS= \
	  CONFIG_LINKS= \
	  $(SHELL) config.status

config.h: stamp-h ; @true
stamp-h: $(srcdir)/config.in config.status
	CONFIG_HEADERS=config.h:config.in \
	  CONFIG_COMMANDS="default depdir" \
	  CONFIG_FILES= \
	  CONFIG_LINKS= \
	  $(SHELL) config.status

config.status: $(srcdir)/configure configure.tgt configure.host
	$(SHELL) config.status --recheck

ACLOCAL = aclocal
ACLOCAL_AMFLAGS = -I gnulib/m4
aclocal_m4_deps = \
	configure.ac \
	gnulib/m4/extensions.m4 \
	gnulib/m4/gnulib-common.m4 \
	gnulib/m4/gnulib-comp.m4 \
	gnulib/m4/include_next.m4 \
	gnulib/m4/longlong.m4 \
	gnulib/m4/memchr.m4 \
	gnulib/m4/memcmp.m4 \
	gnulib/m4/memmem.m4 \
	gnulib/m4/onceonly_2_57.m4 \
	gnulib/m4/stdint.m4 \
	gnulib/m4/string_h.m4 \
	gnulib/m4/wchar.m4 \
	../config/extensions.m4 \
	../config/lead-dot.m4 \
	../config/proginstall.m4 \
	../bfd/bfd.m4 \
	../config/acinclude.m4 \
	../config/override.m4 \
	../config/gettext-sister.m4 \
	../config/lib-ld.m4 \
	../config/lib-prefix.m4 \
	../config/lib-link.m4 \
	../config/acx.m4 \
	../config/tcl.m4 \
	../config/depstand.m4 \
	../config/lcmessage.m4 \
	../config/codeset.m4

$(srcdir)/aclocal.m4: @MAINTAINER_MODE_TRUE@ $(aclocal_m4_deps)
	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)

AUTOCONF = autoconf
configure_deps = $(srcdir)/configure.ac $(srcdir)/aclocal.m4
$(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(configure_deps)
	cd $(srcdir) && $(AUTOCONF)

AUTOHEADER = autoheader
$(srcdir)/config.in: @MAINTAINER_MODE_TRUE@ $(configure_deps)
	cd $(srcdir) && $(AUTOHEADER)
	rm -f stamp-h
	touch $@

# automatic rebuilding in automake-generated Makefiles requires
# this rule in the toplevel Makefile, which, with GNU make, causes
# the desired updates through the implicit regeneration of the Makefile
# and all of its prerequisites.
am--refresh:
	@:

force:

# Documentation!
# GDB QUICK REFERENCE (TeX dvi file, CM fonts)
doc/refcard.dvi:
	cd doc; $(MAKE) refcard.dvi $(FLAGS_TO_PASS)

# GDB QUICK REFERENCE (PostScript output, common PS fonts)
doc/refcard.ps:
	cd doc; $(MAKE) refcard.ps $(FLAGS_TO_PASS)

# GDB MANUAL: TeX dvi file
doc/gdb.dvi:
	cd doc; $(MAKE) gdb.dvi $(FLAGS_TO_PASS)

# GDB MANUAL: info file
doc/gdb.info:
	cd doc; $(MAKE) gdb.info $(FLAGS_TO_PASS)

# Make copying.c from COPYING
$(srcdir)/copying.c: @MAINTAINER_MODE_TRUE@ $(srcdir)/../COPYING3 $(srcdir)/copying.awk
	awk -f $(srcdir)/copying.awk \
		< $(srcdir)/../COPYING3 > $(srcdir)/copying.tmp
	mv $(srcdir)/copying.tmp $(srcdir)/copying.c

version.c: Makefile version.in
	rm -f version.c-tmp version.c
	echo '#include "version.h"' >> version.c-tmp
	echo 'const char version[] = "'"`sed q ${srcdir}/version.in`"'";' >> version.c-tmp
	echo 'const char host_name[] = "$(host_alias)";' >> version.c-tmp
	echo 'const char target_name[] = "$(target_alias)";' >> version.c-tmp
	mv version.c-tmp version.c

observer.h: observer.sh doc/observer.texi
	${srcdir}/observer.sh h ${srcdir}/doc/observer.texi observer.h

observer.inc: observer.sh doc/observer.texi
	${srcdir}/observer.sh inc ${srcdir}/doc/observer.texi observer.inc

lint: $(LINTFILES)
	$(LINT) $(INCLUDE_CFLAGS) $(LINTFLAGS) $(LINTFILES) \
	   `echo $(DEPFILES) $(CONFIG_OBS) | sed 's/\.o /\.c /g'`

gdb.cxref: $(SFILES)
	cxref -I. $(SFILES) >gdb.cxref

force_update:

# GNU Make has an annoying habit of putting *all* the Makefile variables
# into the environment, unless you include this target as a circumvention.
# Rumor is that this will be fixed (and this target can be removed)
# in GNU Make 4.0.
.NOEXPORT:

# GNU Make 3.63 has a different problem: it keeps tacking command line
# overrides onto the definition of $(MAKE).  This variable setting
# will remove them.
MAKEOVERRIDES=

ALLDEPFILES = \
	aix-thread.c \
	alpha-nat.c alphabsd-nat.c alpha-linux-nat.c \
	alpha-tdep.c alpha-mdebug-tdep.c \
	alpha-linux-tdep.c alpha-osf1-tdep.c \
	alphabsd-tdep.c alphafbsd-tdep.c alphanbsd-tdep.c alphaobsd-tdep.c \
	amd64-nat.c amd64-tdep.c \
	amd64bsd-nat.c amd64fbsd-nat.c amd64fbsd-tdep.c \
	amd64nbsd-nat.c amd64nbsd-tdep.c \
	amd64obsd-nat.c amd64obsd-tdep.c \
	amd64-darwin-tdep.c \
	amd64-dicos-tdep.c \
	amd64-linux-nat.c amd64-linux-tdep.c \
	amd64-sol2-tdep.c \
	arm-linux-nat.c arm-linux-tdep.c arm-symbian-tdep.c arm-tdep.c \
	armnbsd-nat.c armbsd-tdep.c armnbsd-tdep.c armobsd-tdep.c \
	avr-tdep.c \
	bsd-uthread.c bsd-kvm.c \
	core-regset.c corelow.c \
	dcache.c dicos-tdep.c darwin-nat.c \
	exec.c \
	fbsd-nat.c \
	fork-child.c \
	glibc-tdep.c \
	go32-nat.c h8300-tdep.c \
	hppa-tdep.c hppa-hpux-tdep.c hppa-hpux-nat.c \
	hppa-linux-tdep.c hppa-linux-nat.c \
	hppabsd-nat.c hppabsd-tdep.c \
	hppaobsd-tdep.c \
	hppanbsd-nat.c hppanbsd-tdep.c \
	i386-tdep.c i386-linux-nat.c \
	i386v4-nat.c i386-cygwin-tdep.c \
	i386bsd-nat.c i386bsd-tdep.c i386fbsd-nat.c i386fbsd-tdep.c \
	i386nbsd-nat.c i386nbsd-tdep.c i386obsd-nat.c i386obsd-tdep.c \
	i387-tdep.c \
	i386-darwin-tdep.c i386-darwin-nat.c \
	i386-dicos-tdep.c \
	i386-linux-tdep.c i386-nat.c \
	i386-sol2-nat.c i386-sol2-tdep.c \
	i386gnu-nat.c i386gnu-tdep.c \
	ia64-linux-nat.c ia64-linux-tdep.c ia64-tdep.c \
	inf-ptrace.c inf-ttrace.c \
	irix5-nat.c \
	libunwind-frame.c \
	linux-fork.c \
	linux-tdep.c \
	linux-record.c \
	lm32-tdep.c \
	m68hc11-tdep.c \
	m32r-tdep.c \
	m32r-linux-nat.c m32r-linux-tdep.c \
	m68k-tdep.c \
	m68kbsd-nat.c m68kbsd-tdep.c \
	m68klinux-nat.c m68klinux-tdep.c \
	m88k-tdep.c m88kbsd-nat.c \
	microblaze-tdep.c microblaze-linux-tdep.c \
	mingw-hdep.c \
	mips-linux-nat.c mips-linux-tdep.c \
	mips-irix-tdep.c \
	mips-tdep.c \
	mipsnbsd-nat.c mipsnbsd-tdep.c \
	mips64obsd-nat.c mips64obsd-tdep.c \
	nbsd-nat.c nbsd-tdep.c obsd-tdep.c \
	solib-osf.c \
	solib-target.c \
	somread.c solib-som.c \
	posix-hdep.c \
	ppc-sysv-tdep.c ppc-linux-nat.c ppc-linux-tdep.c \
	ppcnbsd-nat.c ppcnbsd-tdep.c \
	ppcobsd-nat.c ppcobsd-tdep.c \
	procfs.c \
	remote-m32r-sdi.c remote-mips.c \
	remote-sim.c \
	dcache.c \
	rs6000-nat.c rs6000-tdep.c \
	s390-tdep.c s390-nat.c \
	score-tdep.c \
	ser-go32.c ser-pipe.c ser-tcp.c ser-mingw.c \
	sh-tdep.c sh64-tdep.c shnbsd-tdep.c shnbsd-nat.c \
	sol2-tdep.c \
	solib-irix.c solib-svr4.c solib-sunos.c \
	sparc-linux-nat.c sparc-linux-tdep.c \
	sparc-sol2-nat.c sparc-sol2-tdep.c sparc64-sol2-tdep.c \
	sparc-nat.c sparc-tdep.c sparc64-linux-nat.c sparc64-linux-tdep.c \
	sparc64-nat.c sparc64-tdep.c sparc64fbsd-nat.c sparc64fbsd-tdep.c \
	sparc64nbsd-nat.c sparc64nbsd-tdep.c sparc64obsd-tdep.c \
	sparcnbsd-nat.c sparcnbsd-tdep.c sparcobsd-tdep.c \
	spu-linux-nat.c spu-tdep.c spu-multiarch.c solib-spu.c \
	v850-tdep.c \
	vax-nat.c vax-tdep.c vaxbsd-nat.c vaxnbsd-tdep.c \
	windows-nat.c windows-tdep.c \
	xcoffread.c xcoffsolib.c \
	xstormy16-tdep.c \
	xtensa-tdep.c xtensa-config.c \
	xtensa-linux-tdep.c xtensa-linux-nat.c xtensa-xtregs.c

# Some files need explicit build rules (due to -Werror problems) or due
# to sub-directory fun 'n' games.

hpux-thread.o: $(srcdir)/hpux-thread.c
	$(COMPILE) -I$(srcdir)/osf-share -I$(srcdir)/osf-share/HP800 \
		-I/usr/include/dce $(srcdir)/hpux-thread.c
	$(POSTCOMPILE)

# main.o needs an explicit build rule to get TARGET_SYSTEM_ROOT and BINDIR.
main.o: $(srcdir)/main.c
	$(COMPILE) $(TARGET_SYSTEM_ROOT_DEFINE) -DBINDIR=\"$(bindir)\" $(srcdir)/main.c
	$(POSTCOMPILE)

# FIXME: cagney/2003-08-10: "monitor.c" gets -Wformat-nonliteral
# errors.  It turns out that that is the least of monitor.c's
# problems.  The function print_vsprintf appears to be using
# va_arg(long) to extract CORE_ADDR parameters - something that
# definitly will not work.  "monitor.c" needs to be rewritten so that
# it doesn't use format strings and instead uses callbacks.
monitor.o: $(srcdir)/monitor.c
	$(COMPILE.pre) $(INTERNAL_WARN_CFLAGS) $(COMPILE.post) $(srcdir)/monitor.c
	$(POSTCOMPILE)

# Do not try to build "printcmd.c" with -Wformat-nonliteral.  It manually
# checks format strings.
printcmd.o: $(srcdir)/printcmd.c
	$(COMPILE.pre) $(INTERNAL_CFLAGS_BASE) $(GDB_WARN_CFLAGS_NO_FORMAT) \
		$(GDB_WERROR_CFLAGS) $(COMPILE.post) $(srcdir)/printcmd.c
	$(POSTCOMPILE)

# Message files.  Based on code in gcc/Makefile.in.

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

.SUFFIXES: .po .gmo .pox .pot
.PHONY: all-po install-po uninstall-po clean-po update-po $(PACKAGE).pot

all-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)
	cats="$(CATALOGS)"; for cat in $$cats; 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
uninstall-po:
	cats="$(CATALOGS)"; for cat in $$cats; 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; \
	  rm -f $(DESTDIR)$$dir/$(PACKAGE).mo; \
	done
# Delete po/*.gmo only if we are not building in the source directory.
clean-po:
	-if [ ! -f Makefile.in ]; then rm -f po/*.gmo; fi

# Rule for regenerating the message template (gdb.pot).  Instead of
# forcing everyone to edit POTFILES.in, which proved impractical, this
# rule has no dependencies and always regenerates gdb.pot.  This is
# relatively harmless since the .po files do not directly depend on
# it.  The .pot file is left in the build directory.  Since GDB's
# Makefile lacks a cannonical list of sources (missing xm, tm and nm
# files) force this rule.
$(PACKAGE).pot: po/$(PACKAGE).pot
po/$(PACKAGE).pot: force
	-test -d po || mkdir po
	sh -e $(srcdir)/po/gdbtext $(XGETTEXT) $(PACKAGE) . $(srcdir)


#
# YACC/LEX dependencies
#
# LANG-exp.c is generated in objdir from LANG-exp.y if it doesn't
# exist in srcdir, then compiled in objdir to LANG-exp.o.  If we
# said LANG-exp.c rather than ./c-exp.c some makes would
# sometimes re-write it into $(srcdir)/c-exp.c.  Remove bogus
# decls for malloc/realloc/free which conflict with everything else.
# Strictly speaking c-exp.c should therefore depend on
# Makefile.in, but that was a pretty big annoyance.

.SUFFIXES: .y .l
.y.c:
	$(SHELL) $(YLWRAP) $< y.tab.c $@.tmp -- $(YACC) $(YFLAGS)
	-sed -e '/extern.*malloc/d' \
	     -e '/extern.*realloc/d' \
	     -e '/extern.*free/d' \
	     -e '/include.*malloc.h/d' \
	     -e 's/\([^x]\)malloc/\1xmalloc/g' \
	     -e 's/\([^x]\)realloc/\1xrealloc/g' \
	     -e 's/\([ \t;,(]\)free\([ \t]*[&(),]\)/\1xfree\2/g' \
	     -e 's/\([ \t;,(]\)free$$/\1xfree/g' \
	     -e '/^#line.*y.tab.c/d' \
	  < $@.tmp > $@.new
	-rm $@.tmp
	mv $@.new ./$*.c
.l.c:
	if [ "$(FLEX)" ] && $(FLEX) --version >/dev/null 2>&1; then \
	    $(FLEX) -o$@ $< && \
	    rm -f $@.new && \
	    sed -e '/extern.*malloc/d' \
	        -e '/extern.*realloc/d' \
	        -e '/extern.*free/d' \
	        -e '/include.*malloc.h/d' \
	        -e 's/\([^x]\)malloc/\1xmalloc/g' \
	        -e 's/\([^x]\)realloc/\1xrealloc/g' \
	        -e 's/\([ \t;,(]\)free\([ \t]*[&(),]\)/\1xfree\2/g' \
	        -e 's/\([ \t;,(]\)free$$/\1xfree/g' \
		-e 's/yy_flex_xrealloc/yyxrealloc/g' \
	      < $@ > $@.new && \
	    rm -f $@ && \
	    mv $@.new $@; \
	elif [ -f $@ ]; then \
	    echo "Warning: $*.c older than $*.l and flex not available."; \
	else \
	    echo "$@ missing and flex not available."; \
	    false; \
	fi

.PRECIOUS: ada-exp.c ada-lex.c
.PRECIOUS: c-exp.c
.PRECIOUS: f-exp.c
.PRECIOUS: jv-exp.c
.PRECIOUS: m2-exp.c
.PRECIOUS: objc-exp.c
.PRECIOUS: p-exp.c

# XML rules

xml-builtin.c: stamp-xml; @true
stamp-xml: $(srcdir)/features/feature_to_c.sh Makefile $(XMLFILES)
	rm -f xml-builtin.tmp
	AWK="$(AWK)" \
	  $(SHELL) $(srcdir)/features/feature_to_c.sh \
	  xml-builtin.tmp $(XMLFILES)
	$(SHELL) $(srcdir)/../move-if-change xml-builtin.tmp xml-builtin.c
	echo stamp > stamp-xml

.PRECIOUS: xml-builtin.c

#
# gdb/cli/ dependencies
#
# Need to explicitly specify the compile rule as make will do nothing
# or try to compile the object file into the sub-directory.

cli-cmds.o: $(srcdir)/cli/cli-cmds.c
	$(COMPILE) $(srcdir)/cli/cli-cmds.c
	$(POSTCOMPILE)

cli-decode.o: $(srcdir)/cli/cli-decode.c
	$(COMPILE) $(srcdir)/cli/cli-decode.c
	$(POSTCOMPILE)

cli-dump.o: $(srcdir)/cli/cli-dump.c
	$(COMPILE) $(srcdir)/cli/cli-dump.c
	$(POSTCOMPILE)

cli-interp.o: $(srcdir)/cli/cli-interp.c
	$(COMPILE) $(srcdir)/cli/cli-interp.c
	$(POSTCOMPILE)

cli-logging.o: $(srcdir)/cli/cli-logging.c
	$(COMPILE) $(srcdir)/cli/cli-logging.c
	$(POSTCOMPILE)

cli-script.o: $(srcdir)/cli/cli-script.c
	$(COMPILE) $(srcdir)/cli/cli-script.c
	$(POSTCOMPILE)

cli-setshow.o: $(srcdir)/cli/cli-setshow.c
	$(COMPILE) $(srcdir)/cli/cli-setshow.c
	$(POSTCOMPILE)


#
# GDBTK sub-directory
#
# Need to explicitly specify the compile rule as make will do nothing
# or try to compile the object file into the mi directory.

all-gdbtk: insight$(EXEEXT)

install-gdbtk:
	transformed_name=`t='$(program_transform_name)'; \
		  echo insight | sed -e $$t` ; \
	if test "x$$transformed_name" = x; then \
	  transformed_name=insight ; \
	else \
	  true ; \
	fi ; \
	$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir); \
	$(INSTALL_PROGRAM) insight$(EXEEXT) \
		$(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \
	$(SHELL) $(srcdir)/../mkinstalldirs \
		$(DESTDIR)$(GDBTK_LIBRARY) ; \
	$(SHELL) $(srcdir)/../mkinstalldirs \
		$(DESTDIR)$(libdir)/insight$(GDBTK_VERSION) ; \
	$(INSTALL_DATA) $(srcdir)/gdbtk/plugins/plugins.tcl \
		$(DESTDIR)$(libdir)/insight$(GDBTK_VERSION)/plugins.tcl ; \
	$(SHELL) $(srcdir)/../mkinstalldirs \
		$(DESTDIR)$(GDBTK_LIBRARY)/images \
		$(DESTDIR)$(GDBTK_LIBRARY)/images2 ; \
	$(SHELL) $(srcdir)/../mkinstalldirs \
		$(DESTDIR)$(GDBTK_LIBRARY)/help \
		$(DESTDIR)$(GDBTK_LIBRARY)/help/images \
		$(DESTDIR)$(GDBTK_LIBRARY)/help/trace ; \
	cd $(srcdir)/gdbtk/library ; \
	for i in *.tcl *.itcl *.ith *.itb images/*.gif images2/*.gif images/icons.txt images2/icons.txt tclIndex help/*.html  help/trace/*.html help/trace/index.toc help/images/*.gif help/images/*.png; \
	  do \
		$(INSTALL_DATA) $$i $(DESTDIR)$(GDBTK_LIBRARY)/$$i ; \
	  done ;

uninstall-gdbtk:
	transformed_name=`t='$(program_transform_name)'; \
		  echo insight | sed -e $$t` ; \
	if test "x$$transformed_name" = x; then \
		transformed_name=insight ; \
	else \
		true ; \
	fi ; \
	rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \
	rm -rf $(DESTDIR)$(GDBTK_LIBRARY)

clean-gdbtk:
	rm -f insight$(EXEEXT)

# Removing the old gdb first works better if it is running, at least on SunOS.
insight$(EXEEXT): gdbtk-main.o libgdb.a $(ADD_DEPS) \
		$(CDEPS) $(TDEPLIBS)
	rm -f insight$(EXEEXT)
	$(CC_LD) $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \
		-o insight$(EXEEXT) gdbtk-main.o libgdb.a \
		$(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES)

gdbres.o: $(srcdir)/gdbtk/gdb.rc $(srcdir)/gdbtk/gdbtool.ico
	$(WINDRES) --include $(srcdir)/gdbtk $(srcdir)/gdbtk/gdb.rc gdbres.o

all_gdbtk_cflags = $(IDE_CFLAGS) $(ITCL_CFLAGS) \
		$(ITK_CFLAGS) $(TCL_CFLAGS) $(TK_CFLAGS) $(X11_CFLAGS) \
		$(GDBTK_CFLAGS) \
		-DGDBTK_LIBRARY=\"$(GDBTK_LIBRARY)\" \
		-DSRC_DIR=\"$(GDBTK_SRC_DIR)\"

gdbtk.o: $(srcdir)/gdbtk/generic/gdbtk.c
	$(COMPILE) $(all_gdbtk_cflags) $(srcdir)/gdbtk/generic/gdbtk.c
	$(POSTCOMPILE)

gdbtk-bp.o: $(srcdir)/gdbtk/generic/gdbtk-bp.c
	$(COMPILE) $(all_gdbtk_cflags) $(srcdir)/gdbtk/generic/gdbtk-bp.c
	$(POSTCOMPILE)

gdbtk-cmds.o: $(srcdir)/gdbtk/generic/gdbtk-cmds.c
	$(COMPILE) $(all_gdbtk_cflags) $(srcdir)/gdbtk/generic/gdbtk-cmds.c
	$(POSTCOMPILE)

gdbtk-hooks.o: $(srcdir)/gdbtk/generic/gdbtk-hooks.c
	$(COMPILE) $(all_gdbtk_cflags) $(srcdir)/gdbtk/generic/gdbtk-hooks.c
	$(POSTCOMPILE)

gdbtk-interp.o: $(srcdir)/gdbtk/generic/gdbtk-interp.c
	$(COMPILE) $(all_gdbtk_cflags) $(srcdir)/gdbtk/generic/gdbtk-interp.c
	$(POSTCOMPILE)

gdbtk-main.o: $(srcdir)/gdbtk/generic/gdbtk-main.c
	$(COMPILE) $(all_gdbtk_cflags) $(srcdir)/gdbtk/generic/gdbtk-main.c
	$(POSTCOMPILE)

gdbtk-register.o: $(srcdir)/gdbtk/generic/gdbtk-register.c
	$(COMPILE) $(all_gdbtk_cflags) $(srcdir)/gdbtk/generic/gdbtk-register.c
	$(POSTCOMPILE)

gdbtk-stack.o: $(srcdir)/gdbtk/generic/gdbtk-stack.c
	$(COMPILE) $(all_gdbtk_cflags) $(srcdir)/gdbtk/generic/gdbtk-stack.c
	$(POSTCOMPILE)

gdbtk-varobj.o: $(srcdir)/gdbtk/generic/gdbtk-varobj.c
	$(COMPILE) $(all_gdbtk_cflags) $(srcdir)/gdbtk/generic/gdbtk-varobj.c
	$(POSTCOMPILE)

gdbtk-wrapper.o: $(srcdir)/gdbtk/generic/gdbtk-wrapper.c
	$(COMPILE) $(all_gdbtk_cflags) $(srcdir)/gdbtk/generic/gdbtk-wrapper.c
	$(POSTCOMPILE)


#
# gdb/mi/ dependencies
#
# Need to explicitly specify the compile rule as make will do nothing
# or try to compile the object file into the sub-directory.

mi-cmd-break.o: $(srcdir)/mi/mi-cmd-break.c
	$(COMPILE) $(srcdir)/mi/mi-cmd-break.c
	$(POSTCOMPILE)

mi-cmd-disas.o: $(srcdir)/mi/mi-cmd-disas.c
	$(COMPILE) $(srcdir)/mi/mi-cmd-disas.c
	$(POSTCOMPILE)

mi-cmd-env.o: $(srcdir)/mi/mi-cmd-env.c
	$(COMPILE) $(srcdir)/mi/mi-cmd-env.c
	$(POSTCOMPILE)

mi-cmd-file.o: $(srcdir)/mi/mi-cmd-file.c
	$(COMPILE) $(srcdir)/mi/mi-cmd-file.c
	$(POSTCOMPILE)

mi-cmds.o: $(srcdir)/mi/mi-cmds.c
	$(COMPILE) $(srcdir)/mi/mi-cmds.c
	$(POSTCOMPILE)

mi-cmd-stack.o: $(srcdir)/mi/mi-cmd-stack.c
	$(COMPILE) $(srcdir)/mi/mi-cmd-stack.c
	$(POSTCOMPILE)

mi-cmd-target.o: $(srcdir)/mi/mi-cmd-target.c
	$(COMPILE) $(srcdir)/mi/mi-cmd-target.c
	$(POSTCOMPILE)

mi-cmd-var.o: $(srcdir)/mi/mi-cmd-var.c
	$(COMPILE) $(srcdir)/mi/mi-cmd-var.c
	$(POSTCOMPILE)

mi-console.o: $(srcdir)/mi/mi-console.c
	$(COMPILE) $(srcdir)/mi/mi-console.c
	$(POSTCOMPILE)

mi-getopt.o: $(srcdir)/mi/mi-getopt.c
	$(COMPILE) $(srcdir)/mi/mi-getopt.c
	$(POSTCOMPILE)

mi-interp.o: $(srcdir)/mi/mi-interp.c
	$(COMPILE) $(srcdir)/mi/mi-interp.c
	$(POSTCOMPILE)

mi-main.o: $(srcdir)/mi/mi-main.c
	$(COMPILE) $(srcdir)/mi/mi-main.c
	$(POSTCOMPILE)

mi-out.o: $(srcdir)/mi/mi-out.c
	$(COMPILE) $(srcdir)/mi/mi-out.c
	$(POSTCOMPILE)

mi-parse.o: $(srcdir)/mi/mi-parse.c
	$(COMPILE) $(srcdir)/mi/mi-parse.c
	$(POSTCOMPILE)

mi-symbol-cmds.o: $(srcdir)/mi/mi-symbol-cmds.c
	$(COMPILE) $(srcdir)/mi/mi-symbol-cmds.c
	$(POSTCOMPILE)

mi-common.o: $(srcdir)/mi/mi-common.c
	$(COMPILE) $(srcdir)/mi/mi-common.c
	$(POSTCOMPILE)

#
# gdb/common/ dependencies
#
# Need to explicitly specify the compile rule as make will do nothing
# or try to compile the object file into the sub-directory.

signals.o: $(srcdir)/common/signals.c
	$(COMPILE) $(srcdir)/common/signals.c
	$(POSTCOMPILE)

#
# gdb/tui/ dependencies
#
# Need to explicitly specify the compile rule as make will do nothing
# or try to compile the object file into the sub-directory.

tui.o: $(srcdir)/tui/tui.c
	$(COMPILE) $(srcdir)/tui/tui.c
	$(POSTCOMPILE)

tui-command.o: $(srcdir)/tui/tui-command.c
	$(COMPILE) $(srcdir)/tui/tui-command.c
	$(POSTCOMPILE)

tui-data.o: $(srcdir)/tui/tui-data.c
	$(COMPILE) $(srcdir)/tui/tui-data.c
	$(POSTCOMPILE)

tui-disasm.o: $(srcdir)/tui/tui-disasm.c
	$(COMPILE) $(srcdir)/tui/tui-disasm.c
	$(POSTCOMPILE)

tui-file.o: $(srcdir)/tui/tui-file.c
	$(COMPILE) $(srcdir)/tui/tui-file.c
	$(POSTCOMPILE)

tui-hooks.o: $(srcdir)/tui/tui-hooks.c
	$(COMPILE) $(srcdir)/tui/tui-hooks.c
	$(POSTCOMPILE)

tui-interp.o: $(srcdir)/tui/tui-interp.c
	$(COMPILE) $(srcdir)/tui/tui-interp.c
	$(POSTCOMPILE)

tui-io.o: $(srcdir)/tui/tui-io.c
	$(COMPILE) $(srcdir)/tui/tui-io.c
	$(POSTCOMPILE)

tui-layout.o: $(srcdir)/tui/tui-layout.c
	$(COMPILE) $(srcdir)/tui/tui-layout.c
	$(POSTCOMPILE)

tui-main.o: $(srcdir)/tui/tui-main.c
	$(COMPILE) $(srcdir)/tui/tui-main.c
	$(POSTCOMPILE)

tui-out.o: $(srcdir)/tui/tui-out.c
	$(COMPILE) $(srcdir)/tui/tui-out.c
	$(POSTCOMPILE)

tui-regs.o: $(srcdir)/tui/tui-regs.c
	$(COMPILE) $(srcdir)/tui/tui-regs.c
	$(POSTCOMPILE)

tui-source.o: $(srcdir)/tui/tui-source.c
	$(COMPILE) $(srcdir)/tui/tui-source.c
	$(POSTCOMPILE)

tui-stack.o: $(srcdir)/tui/tui-stack.c
	$(COMPILE) $(srcdir)/tui/tui-stack.c
	$(POSTCOMPILE)

tui-win.o: $(srcdir)/tui/tui-win.c
	$(COMPILE) $(srcdir)/tui/tui-win.c
	$(POSTCOMPILE)

tui-windata.o: $(srcdir)/tui/tui-windata.c
	$(COMPILE) $(srcdir)/tui/tui-windata.c
	$(POSTCOMPILE)

tui-wingeneral.o: $(srcdir)/tui/tui-wingeneral.c
	$(COMPILE) $(srcdir)/tui/tui-wingeneral.c
	$(POSTCOMPILE)

tui-winsource.o: $(srcdir)/tui/tui-winsource.c
	$(COMPILE) $(srcdir)/tui/tui-winsource.c
	$(POSTCOMPILE)

#
# gdb/python/ dependencies
#
# Need to explicitly specify the compile rule as make will do nothing
# or try to compile the object file into the sub-directory.

# Flags needed to compile Python code
PYTHON_CFLAGS=@PYTHON_CFLAGS@

python.o: $(srcdir)/python/python.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python.c
	$(POSTCOMPILE)

py-auto-load.o: $(srcdir)/python/py-auto-load.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-auto-load.c
	$(POSTCOMPILE)

py-block.o: $(srcdir)/python/py-block.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-block.c
	$(POSTCOMPILE)

py-breakpoint.o: $(srcdir)/python/py-breakpoint.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-breakpoint.c
	$(POSTCOMPILE)

py-cmd.o: $(srcdir)/python/py-cmd.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-cmd.c
	$(POSTCOMPILE)

py-frame.o: $(srcdir)/python/py-frame.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-frame.c
	$(POSTCOMPILE)

py-function.o: $(srcdir)/python/py-function.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-function.c
	$(POSTCOMPILE)

py-lazy-string.o: $(srcdir)/python/py-lazy-string.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-lazy-string.c
	$(POSTCOMPILE)

py-objfile.o: $(srcdir)/python/py-objfile.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-objfile.c
	$(POSTCOMPILE)

py-param.o: $(srcdir)/python/py-param.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-param.c
	$(POSTCOMPILE)

py-prettyprint.o: $(srcdir)/python/py-prettyprint.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-prettyprint.c
	$(POSTCOMPILE)

py-progspace.o: $(srcdir)/python/py-progspace.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-progspace.c
	$(POSTCOMPILE)

py-symbol.o: $(srcdir)/python/py-symbol.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-symbol.c
	$(POSTCOMPILE)

py-symtab.o: $(srcdir)/python/py-symtab.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-symtab.c
	$(POSTCOMPILE)

py-type.o: $(srcdir)/python/py-type.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-type.c
	$(POSTCOMPILE)

py-utils.o: $(srcdir)/python/py-utils.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-utils.c
	$(POSTCOMPILE)

py-value.o: $(srcdir)/python/py-value.c
	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/py-value.c
	$(POSTCOMPILE)

#
# Dependency tracking.  Most of this is conditional on GNU Make being
# found by configure; if GNU Make is not found, we fall back to a
# simpler scheme.
#

@GMAKE_TRUE@ifeq ($(DEPMODE),depmode=gcc3)
# Note that we put the dependencies into a .Tpo file, then move them
# into place if the compile succeeds.  We need this because gcc does
# not atomically write the dependency output file.
@GMAKE_TRUE@override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
@GMAKE_TRUE@	-MF $(DEPDIR)/$(basename $(@F)).Tpo
@GMAKE_TRUE@override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
@GMAKE_TRUE@	$(DEPDIR)/$(basename $(@F)).Po
@GMAKE_TRUE@else
@GMAKE_TRUE@override COMPILE.pre = source='$<' object='$@' libtool=no \
@GMAKE_TRUE@	DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC)
# depcomp handles atomicity for us, so we don't need a postcompile
# step.
@GMAKE_TRUE@override POSTCOMPILE =
@GMAKE_TRUE@endif

# A list of all the objects we might care about in this build, for
# dependency tracking.
all_object_files = gdb.o tui-main.o $(LIBGDB_OBS) gdbtk-main.o \
	test-cp-name-parser.o

# Ensure that generated files are created early.  Use order-only
# dependencies if available.  They require GNU make 3.80 or newer,
# and the .VARIABLES variable was introduced at the same time.
@GMAKE_TRUE@ifdef .VARIABLES
@GMAKE_TRUE@$(all_object_files): | $(generated_files)
@GMAKE_TRUE@else
$(all_object_files) : $(generated_files)
@GMAKE_TRUE@endif

# Dependencies.
@GMAKE_TRUE@-include $(patsubst %.o, $(DEPDIR)/%.Po, $(all_object_files))

### end of the gdb Makefile.in.
