# Makefile for GNU CHILL compiler runtime library.
#   Copyright (C) 1987, 88, 90-94, 1998, 1999 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.  */

# This was cribbed from the libf2c, libiberty and libstdc++ Makefile.in
# files.  Some of this stuff may be unnecessary and worthless.

SHELL = /bin/sh

#### Start of system configuration section. ####

srcdir = @srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
target_alias = @target_alias@
gcc_version = @gcc_version@
gcc_version_trigger = @gcc_version_trigger@

libdir = $(exec_prefix)/lib
libsubdir = $(libdir)/gcc-lib/$(target_alias)/$(gcc_version)

# Multilib support variables.
MULTISRCTOP =
MULTIBUILDTOP =
MULTIDIRS =
MULTISUBDIR =
MULTIDO = true
MULTICLEAN = true

# Not configured per top-level version, since that doesn't get passed
# down at configure time, but overrridden by the top-level install
# target.
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@

AR = @AR@
AR_FLAGS = rc

RANLIB = @RANLIB@

CC = @CC@
CFLAGS = @CFLAGS@
ALL_CFLAGS = -I. -I$(srcdir) $(CPPFLAGS) $(DEFS) $(CFLAGS)

.SUFFIXES:
.SUFFIXES: .c .o

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

# Lists of required functions for each archive.

LIBOBJS1 = allgmem.o allmem.o allocate.o cause.o exhstack.o exh.o retmem.o \
	   unhex.o unhex1.o rtsdummy.o terminate.o

IOOBJS = basicio.o chillstdio.o delete.o eoln.o existing.o format.o getassoc.o \
	 gettextaccess.o gettextindex.o gettextrecord.o getusage.o \
	 indexable.o ioerror.o isassociated.o outoffile.o readable.o \
	 readrecord.o sequencible.o settextaccess.o settextindex.o \
	 settextrecord.o variable.o writeable.o writerecord.o

PSOBJS = andps.o cardps.o concatps.o copyps.o diffps.o eqps.o ffsetclrps.o \
	ffsetps.o flsetclrps.o flsetps.o inbitstr.o inps.o leps.o ltps.o \
	neps.o notps.o orps.o setbitps.o setbits.o sliceps.o xorps.o

STROBJS = concatstr.o eqstr.o ltstr.o memmove.o

TIMEOBJS = abstime.o inttime.o waituntil.o remaintime.o convdurrtstime.o \
	   checkcycle.o

TASKOBJS = continue.o delaycase.o printbuffer.o printevent.o queuelength.o \
	   sendbuffer.o waitbuffer.o

OBJS = $(LIBOBJS1) $(IOOBJS) $(PSOBJS) $(STROBJS) $(TIMEOBJS) $(TASKOBJS)

libchill.a: $(OBJS)
	$(AR) $(AR_FLAGS) $@ $(OBJS)
	$(RANLIB) $@

allgmem.o: allgmem.c rtltypes.h
allmem.o: allmem.c rtltypes.h
allocate.o: allocate.c rtltypes.h
cause.o: cause.c
exhstack.o: exhstack.c rtltypes.h
exh.o: exh.c rtltypes.h
retmem.o: retmem.c
unhex.o: unhex.c
unhex1.o: unhex1.c
rtsdummy.o: rtsdummy.c rtltypes.h
terminate.o: terminate.c rtltypes.h
basicio.o: basicio.c fileio.h
chillstdio.o: chillstdio.c iomodes.h
delete.o: delete.c fileio.h
eoln.o: eoln.c fileio.h
existing.o: existing.c fileio.h
format.o: format.c bitstring.h auxtypes.h iomodes.h format.h fileio.h ioerror.h
getassoc.o: getassoc.c fileio.h
gettextaccess.o: gettextaccess.c fileio.h
gettextindex.o: gettextindex.c fileio.h
gettextrecord.o: gettextrecord.c fileio.h
getusage.o: getusage.c fileio.h
indexable.o: indexable.c fileio.h
ioerror.o: ioerror.c
isassociated.o: isassociated.c fileio.h
outoffile.o: outoffile.c fileio.h
readable.o: readable.c fileio.h
readrecord.o: readrecord.c fileio.h
sequencible.o: sequencible.c fileio.h
settextaccess.o: settextaccess.c fileio.h
settextindex.o: settextindex.c fileio.h
settextrecord.o: settextrecord.c fileio.h
variable.o: variable.c fileio.h
writeable.o: writeable.c fileio.h
writerecord.o: writerecord.c fileio.h
andps.o: andps.c powerset.h
cardps.o: cardps.c powerset.h
concatps.o: concatps.c powerset.h
copyps.o: copyps.c powerset.h
diffps.o: diffps.c powerset.h
eqps.o: eqps.c powerset.h
ffsetclrps.o: ffsetclrps.c powerset.h
ffsetps.o: ffsetps.c powerset.h
flsetclrps.o: flsetclrps.c powerset.h
flsetps.o: flsetps.c powerset.h
inbitstr.o: inbitstr.c powerset.h
inps.o: inps.c powerset.h
leps.o: leps.c powerset.h
ltps.o: ltps.c powerset.h
neps.o: neps.c powerset.h
notps.o: notps.c powerset.h
orps.o: orps.c powerset.h
setbitps.o: setbitps.c powerset.h
setbits.o: setbits.c powerset.h
sliceps.o: sliceps.c powerset.h
xorps.o: xorps.c powerset.h
concatstr.o: concatstr.c
eqstr.o: eqstr.c
ltstr.o: ltstr.c
memmove.o: memmove.c
abstime.o: abstime.c rtltypes.h
inttime.o: inttime.c
waituntil.o: waituntil.c rtltypes.h rts.h
remaintime.o: remaintime.c rts.h
convdurrtstime.o: convdurrtstime.c rts.h
checkcycle.o: checkcycle.c rtltypes.h rts.h
continue.o: continue.c rtltypes.h rts.h
delaycase.o: delaycase.c rtltypes.h rts.h
printbuffer.o: printbuffer.c rtltypes.h rts.h
printevent.o: printevent.c rtltypes.h rts.h
queuelength.o: queuelength.c rtltypes.h rts.h
sendbuffer.o: sendbuffer.c rtltypes.h rts.h
waitbuffer.o: waitbuffer.c rtltypes.h rts.h

$(PSOBJS): $(srcdir)/powerset.h
librmt.o: $(srcdir)/rtltypes.h
chillrt0.o: $(srcdir)/rtltypes.h $(srcdir)/iomodes.h $(srcdir)/auxtypes.h
$(LIBOBJS1): $(srcdir)/rtltypes.h
$(TIMEOBJS): $(srcdir)/rtltypes.h $(srcdir)/rts.h
$(TASKOBJS): $(srcdir)/rts.h $(srcdir)/rtltypes.h
$(IOOBJS): $(srcdir)/fileio.h $(srcdir)/bitstring.h $(srcdir)/auxtypes.h \
	   $(srcdir)/iomodes.h $(srcdir)/format.h $(srcdir)/ioerror.h

# Flags to pass to a recursive make.
FLAGS_TO_PASS = \
	"AR=$(AR)" \
	"AR_FLAGS=$(AR_FLAGS)" \
	"CC=$(CC)" \
	"CFLAGS=$(CFLAGS)" \
	"LIBCFLAGS=$(LIBCFLAGS)" \
	"EXTRA_OFILES=$(EXTRA_OFILES)" \
	"HDEFINES=$(HDEFINES)" \
	"INSTALL=$(INSTALL)" \
	"INSTALL_DATA=$(INSTALL_DATA)" \
	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
	"LDFLAGS=$(LDFLAGS)" \
	"LOADLIBES=$(LOADLIBES)" \
	"PICFLAG=$(PICFLAG)" \
	"RANLIB=$(RANLIB)" \
	"SHELL=$(SHELL)" \
	"prefix=$(prefix)" \
	"exec_prefix=$(exec_prefix)" \
	"libdir=$(libdir)" \
	"libsubdir=$(libsubdir)" \
	"tooldir=$(tooldir)"

all: chillrt0.o libchill.a
	@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all

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

config.status: configure
	rm -f config.cache
	CONFIG_SITE=no-such-file CC='$(CC)' AR='$(AR)' CFLAGS='$(CFLAGS)' \
  	CPPFLAGS='$(CPPFLAGS)' $(SHELL) config.status --recheck

${srcdir}/configure: configure.in
	rm -f config.cache
	cd ${srcdir} && autoconf

install: all
	$(INSTALL_DATA) libchill.a $(libsubdir)$(MULTISUBDIR)/libchill.a.n
	$(RANLIB) $(libsubdir)$(MULTISUBDIR)/libchill.a.n
	mv $(libsubdir)$(MULTISUBDIR)/libchill.a.n $(libsubdir)$(MULTISUBDIR)/libchill.a
	$(INSTALL_DATA) chillrt0.o $(libsubdir)$(MULTISUBDIR)/chillrt0.o
	@rootme=`pwd`/ ; export rootme ; \
	$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install


check uninstall install-strip dist installcheck installdirs info install-info clean-info dvi:

mostlyclean:
	rm -f *.o
	@$(MULTICLEAN) multi-clean DO=mostlyclean

clean: mostlyclean
	rm -f config.log
	@$(MULTICLEAN) multi-clean DO=clean

distclean: clean
	@$(MULTICLEAN) multi-clean DO=distclean
	rm -f config.cache config.status Makefile configure

maintainer-clean realclean: distclean

.PHONY: mostlyclean clean distclean maintainer-clean all check uninstall \
	install-strip dist installcheck installdirs 

