#    Makefile template for Configure for simulator common directory
#    Copyright (C) 1996, 1997, 2007, 2008, 2009, 2010, 2011
#    Free Software Foundation, Inc.
# 
# 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/>.

default: all

VPATH = @srcdir@
srcdir = @srcdir@
srcroot = $(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)

datarootdir = @datarootdir@
datadir = @datadir@
mandir = @mandir@
man1dir = $(mandir)/man1
infodir = @infodir@
includedir = @includedir@

SHELL = /bin/sh

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

CC = @CC@
CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
SIM_CFLAGS = @sim_cflags@

# These are used to rebuild nltvals.def.
CPP_FOR_TARGET = @CPP_FOR_TARGET@
TARGET_SUBDIR = @TARGET_SUBDIR@

HDEFINES = @HDEFINES@
TDEFINES =

CONFIG_CFLAGS = @DEFS@ $(SIM_CFLAGS) $(HDEFINES) $(TDEFINES)
CSEARCH = -I. -I$(srcdir) -I$(srcroot)/include
ALL_CFLAGS = $(CFLAGS) $(CONFIG_CFLAGS) $(CSEARCH)
BUILD_CFLAGS = -g -O $(CSEARCH)

AR = @AR@
AR_FLAGS = rc
RANLIB = @RANLIB@
MAKEINFO = makeinfo

.NOEXPORT:
MAKEOVERRIDES=

all:

# Generate nltvals.def for newlib/libgloss using devo and build tree.
# This file is shipped with distributions so we build in the source dir.
# Use `make headers' to rebuild.
# Note: If gdb releases begin to contain target header files (not a good idea,
# but if they did ...), targ-vals.def coud be generated at build time.
# An alternative is to slurp in the tables at runtime.
.PHONY: headers
headers:
	rootme=`pwd` ; \
	cd $(srcdir) ; \
	rm -f nltvals.new ; \
	$(SHELL) $(srcdir)/gennltvals.sh $(SHELL) $(srcroot) "$(CPP_FOR_TARGET)" > nltvals.new ; \
	$(SHELL) $(srcroot)/move-if-change nltvals.new nltvals.def

.c.o:
	$(CC) -c $< $(ALL_CFLAGS)

check:

info:
clean-info:
install-info:

tags etags: TAGS

# Macros like EXTERN_SIM_CORE confuse tags.
# And the sim-n-foo.h files create functions that can't be found either.
TAGS: force
	cd $(srcdir) && \
	etags --regex '/^\([a-z_]+\) (/\1/' --regex '/^.*\/[*] TAGS: .*/' \
		*.c *.h

clean:
	rm -f *.[oa] *~ core

distclean mostlyclean maintainer-clean realclean: clean
	rm -f TAGS
	rm -f Makefile config.cache config.log config.status
	rm -f cconfig.h config.h stamp-h

# Dummy target to force execution of dependent targets.
force:

# Copy the files into directories where they will be run.
install: install-man

install-man: installdirs
	n=`echo run | sed '$(program_transform_name)'`; \
	$(INSTALL_DATA) $(srcdir)/run.1 $(DESTDIR)$(man1dir)/$$n.1

installdirs:
	$(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(man1dir)

Makefile: Makefile.in config.status
	$(SHELL) ./config.status

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

config.h: stamp-h ; @true
stamp-h: config.in config.status
	CONFIG_FILES= CONFIG_HEADERS=config.h:config.in $(SHELL) ./config.status
