#Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999
#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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

srcdir = @srcdir@
VPATH = @srcdir@

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@
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@
htmldir = $(prefix)/html
includedir = @includedir@

SHELL = @SHELL@

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

CC_FOR_TARGET = ` \
  if [ -f ../../gcc/xgcc ] ; then \
    echo ../../gcc/xgcc -B../../gcc/; \
  else \
    t='$(program_transform_name)'; echo gcc | sed -e '' $$t; \
  fi`

NLMCONV_FOR_TARGET = ` \
  if [ -f ../../binutils/nlmconv ] ; then \
    echo ../../binutils/nlmconv; \
  else \
    t='$(program_transform_name)'; echo nlmconv | sed -e '' $$t; \
  fi`

# All the includes used for CFLAGS and for lint.
INCLUDE_CFLAGS = -I. -I${srcdir}

# CFLAGS is specifically reserved for setting from the command line
# when running make.  I.E.  "make CFLAGS=-Wmissing-prototypes".
CFLAGS = -g
# INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros.
INTERNAL_CFLAGS = ${CFLAGS} ${INCLUDE_CFLAGS} ${USER_CFLAGS} 
LDFLAGS = $(CFLAGS)

# Perhaps should come from parent Makefile
VERSION = gdbserve-4.12
DIST=gdb

# target-dependent makefile fragment come in here.
@target_makefile_frag@
# End target-dependent makefile fragment

# All source files that go into linking GDB remote server.

DEPFILES = $(GDBSERVE_DEPFILES)

SOURCES = $(ALLDEPFILES)
TAGFILES = $(SOURCES) ${HFILES} ${ALLPARAM} ${POSSLIBS} 

# Prevent Sun make from putting in the machine type.  Setting
# TARGET_ARCH to nothing works for SunOS 3, 4.0, but not for 4.1.
.c.o:
	${CC_FOR_TARGET} -c ${INTERNAL_CFLAGS} $<

.S.o:
	${CC_FOR_TARGET} -c ${INTERNAL_CFLAGS} $<

all: gdbserve.nlm

# 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
install-only: 
	$(INSTALL) gdbserve.nlm $(bindir)/gdbserve.nlm

uninstall: force
	rm -f $(bindir)/gdbserve.nlm

installcheck:
check:
info dvi:
install-info:
clean-info:
html:
install-html:

gdbserve.nlm:	gdbserve.O $(srcdir)/gdbserve.def
	${NLMCONV_FOR_TARGET} -T $(srcdir)/gdbserve.def

gdbserve.O: prelude.o gdbserve.o $(TDEPFILES)
	${CC_FOR_TARGET} $(LDFLAGS) -r -o gdbserve.O prelude.o gdbserve.o ${TDEPFILES}

# Put the proper machine-specific files first, so M-. on a machine
# specific routine gets the one for the correct machine.
# The xyzzy stuff below deals with empty DEPFILES
TAGS:	${TAGFILES}
	etags `find ${srcdir}/../config -name $(TM_FILE) -print` \
	  `find ${srcdir}/../config -name ${XM_FILE} -print` \
	  `find ${srcdir}/../config -name ${NAT_FILE} -print` \
	  `for i in yzzy ${DEPFILES}; do \
	     if [ x$$i != xyzzy ]; then \
	       echo ${srcdir}/$$i | sed -e 's/\.o$$/\.c/' ; \
	     fi; \
	   done` \
	  ${TAGFILES}
tags: TAGS

clean:
	rm -f *.o ${ADD_FILES} *~
	rm -f gdbserve.O gdbserve.nlm core make.log

distclean: clean TAGS
	rm -f config.log config.cache config.status
	rm -f Makefile

maintainer-clean realclean: clean
	rm -f TAGS
	rm -f config.log config.cache config.status
	rm -f Makefile

Makefile: Makefile.in config.status @target_makefile_frag_path@
	$(SHELL) config.status

config.status: configure
	$(SHELL) config.status --recheck

force:

# 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=

# This is the end of "Makefile.in".
