# Makefile for GNU compilers.
#
#   Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.

#This file is part of GNU CC.

#GNU CC 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.

#GNU CC 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 GNU CC; see the file COPYING.  If not, write to
#the Free Software Foundation, 59 Temple Place - Suite 330,
#Boston, MA 02111-1307, USA.

# The makefile built from this file lives in the fixinc subdirectory.
# Its purpose is to build the any-platforms fixinc.sh script.

SHELL=/bin/sh

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

FL_LIST = $(CFLAGS) $(CPPFLAGS) $(WARN_CFLAGS)
FIXINC_DEFS = -DIN_GCC -DHAVE_CONFIG_H $(FL_LIST) $(INCLUDES)

# Directory where sources are, from where we are.
srcdir = @srcdir@
VPATH = $(srcdir)
subdir = fixinc

# End of variables for you to override.

default : all

# Now figure out from those variables how to compile and link.

# Specify the directories to be searched for header files.
# Both . and srcdir are used, in that order.
#
INCLUDES = -I. -I.. -I$(srcdir) -I$(srcdir)/.. \
-I$(srcdir)/../config -I$(srcdir)/../../include

# Always use -I$(srcdir)/config when compiling.
.c.o:
	$(CC) -c $(FIXINC_DEFS) $<

# The only suffixes we want for implicit rules are .c and .o.
.SUFFIXES:
.SUFFIXES: .c .o

#

## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
##
##  Makefile for constructing the "best" include fixer we can
##
## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

LIBERTY = ../../libiberty/libiberty.a

ALLOBJ = fixincl.o fixtests.o fixfixes.o server.o procopen.o \
      gnu-regex.o fixlib.o

TESTOBJ = fixincl.o fixlib.o fixtests.o gnu-regex.o
FIXOBJ  = fixfixes.o fixlib.o gnu-regex.o

HDR = server.h gnu-regex.h fixlib.h machname.h
FI  = fixincl@build_exeext@
AF  = applyfix@build_exeext@

all : $(TARGETS)
gen : $(srcdir)/fixincl.x

oneprocess : full-stamp
twoprocess : test-stamp $(AF)

full-stamp : $(ALLOBJ) $(LIBERTY)
	$(CC) $(FIXINC_DEFS) $(LDFLAGS) -o $(FI) $(ALLOBJ) $(LIBERTY)
	$(STAMP) $@

test-stamp : $(TESTOBJ) $(LIBERTY)
	$(CC) $(FIXINC_DEFS) $(LDFLAGS) -o $(FI) $(TESTOBJ) $(LIBERTY)
	$(STAMP) $@

$(AF): $(FIXOBJ) $(LIBERTY)
	$(CC) $(FIXINC_DEFS) $(LDFLAGS) -o $@ $(FIXOBJ) $(LIBERTY)

$(ALLOBJ)   : $(HDR)
fixincl.o   : fixincl.c  $(srcdir)/fixincl.x
fixtests.o  : fixtests.c
fixfixes.o  : fixfixes.c $(srcdir)/fixincl.x
server.o    : server.c
procopen.o  : procopen.c
gnu-regex.o : gnu-regex.c
fixlib.o    : fixlib.c

#  'machname.h' is built in the build directory.
#  'fixincl.x' in the source dir.
#
machname.h: ../specs
	$(SHELL) $(srcdir)/genfixes $@

$(srcdir)/fixincl.x: @MAINT@ fixincl.tpl inclhack.def
	cd $(srcdir) ; $(SHELL) ./genfixes $@

clean:
	rm -f *.o *-stamp $(AF) $(FI) machname.h *~

maintainer-clean : clean
	rm -f $(srcdir)/fixincl.x

#  Build the executable and copy up into gcc dir.
#  We still copy the script because we still have alternative scripts.
#
install-bin : $(TARGETS)
	./fixincl -v < /dev/null
	@if [ -f ../fixinc.sh ] ; then rm -f ../fixinc.sh || \
	    mv -f ../fixinc.sh ../fixinc.sh.$$ || exit 1 ; else : ; fi
	@cp $(srcdir)/fixincl.sh ../fixinc.sh
	chmod 755 ../fixinc.sh

Makefile: Makefile.in ../config.status
	cd .. \
	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \
	  $(SHELL) ./config.status

check : $(TARGETS)
	autogen -T $(srcdir)/check.tpl $(srcdir)/inclhack.def
	$(SHELL) ./check.sh $(srcdir)/tests/base
	@rm -f ./check.sh
