#Copyright (C) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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 $(DEPRECATED_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".
