# Copyright (C) 1993, 1998 Free Software Foundation
# 
# This file is part of the GNU IO Library.  This library 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.
# 
# This library 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, 675 Mass Ave, Cambridge, MA 02139, USA.

srcdir = .

CFLAGS = -g
C_FLAGS = $(CFLAGS) -I. -I.. -I$(srcdir) -I$(srcdir)/..
CXXFLAGS = -g
CC = gcc
CXX = gcc

#### package, host, target, and site dependent Makefile fragments come in here.
##

STDIO_LD_FLAGS = -u __cleanup

#LIBS = ../../libg++.a

#LIBSTDIO = ../stdio/libstdio++.a
#LIBIO = ../libio.a

#STDIOLIBS = $(STDIO_LD_FLAGS) $(LIBSTDIO) $(LIBIO) $(LIBS)
STDIOLIBS = $(LIBSTDIO) $(LIBIO) $(LIBS)
IOLIBS = -L../../libstdc++ -lstdc++
IOSTDIOLIB = ../libio.a ../../libiberty/libiberty.a

DEPEND_SOURCES = $(srcdir)/*.C

.PHONY: check check-old check-iostream check-stdio
check: $(CHECK)


# These are tests written in C++, that test the iostream facility.
check-iostream: check-tFile check-tiomisc \
   check-hounddog check-putbackdog check-tiomanip

# These are tests written in C, that don't need C++.
# They test libio's emulation of stdio.
check-iostdio: check-tiformat check-tfformat check-tstdiomisc

# check-stdio runs test programs that use stdio.
# These aren't run by default because there may be linker tricks needed
# to build them (if libc.a contains a competing stdio implementation).

check-stdio: check-tfseek check-twrseek check-trdseek check-tpopen

# See ${MOSTLYCLEAN} in configure.in
JUNK_TO_CLEAN = tFile tiomisc hounddog putbackdog tiomanip \
   t?format *.out streamfile ftmp* tstdiomisc foo.dat

.PHONY: info
info:
.PHONY: clean-info
clean-info:
.PHONY: install-info
install-info:

tst: tst.o
	gcc -v -o tst tst.o $(STDIOLIBS)

tgetl: tgetl.o
	$(CXX) $(CXXFLAGS) -o tgetl tgetl.o $(IOLIBS)

tFile: tFile.o
	$(CXX) $(CXXFLAGS) -o tFile tFile.o $(IOLIBS)

tiomisc: tiomisc.o
	$(CXX) $(CXXFLAGS) -o tiomisc tiomisc.o $(IOLIBS)

hounddog: hounddog.o
	$(CXX) $(CXXFLAGS) -o hounddog hounddog.o $(IOLIBS)

check-hounddog: hounddog
	./hounddog <$(srcdir)/hounddog.inp > hounddog.out 2>&1
	diff -c hounddog.out $(srcdir)/hounddog.exp
	./hounddog -b0 <$(srcdir)/hounddog.inp > hound-b0.out 2>&1
	diff -c hound-b0.out $(srcdir)/hounddog.exp
	./hounddog -b2 <$(srcdir)/hounddog.inp > hound-b2.out 2>&1
	diff -c hound-b2.out $(srcdir)/hounddog.exp

putbackdog: putbackdog.o
	$(CXX) $(CXXFLAGS) -o putbackdog putbackdog.o $(IOLIBS)

check-putbackdog-regular: putbackdog
	./putbackdog <$(srcdir)/hounddog.inp > putback.out 2>&1
	diff -c putback.out $(srcdir)/hounddog.exp
check-putbackdog-nobuf: putbackdog
	./putbackdog -b0 <$(srcdir)/hounddog.inp > putback-b0.out 2>&1
	diff -c putback-b0.out $(srcdir)/hounddog.exp
check-putbackdog-buf2: putbackdog
	./putbackdog -b2 <$(srcdir)/hounddog.inp > putback-b2.out 2>&1
	diff -c putback-b2.out $(srcdir)/hounddog.exp
check-putbackdog: \
  check-putbackdog-regular check-putbackdog-nobuf check-putbackdog-buf2

tfseek: tfseek.o
	$(CC) $(CFLAGS) -o tfseek tfseek.o $(STDIOLIBS)

check-tfseek: tfseek
	./tfseek SEEK_SET fopen > tfseek-set-fopen.out 2>&1
	diff -c tfseek-set-fopen.out $(srcdir)/tfseek-set.exp
	./tfseek SEEK_SET freopen > tfseek-set-freopen.out 2>&1
	diff -c tfseek-set-freopen.out $(srcdir)/tfseek-set.exp
	./tfseek SEEK_CUR fopen > tfseek-cur-fopen.out 2>&1
	diff -c tfseek-cur-fopen.out $(srcdir)/tfseek-cur.exp
	./tfseek SEEK_CUR freopen > tfseek-cur-freopen.out 2>&1
	diff -c tfseek-cur-freopen.out $(srcdir)/tfseek-cur.exp

twrseek: twrseek.o
	$(CC) $(CFLAGS) -o twrseek twrseek.o $(STDIOLIBS)

check-twrseek: twrseek
	./twrseek > twrseek.out 2>&1
	diff -c twrseek.out $(srcdir)/twrseek.exp

trdseek: trdseek.o
	$(CC) $(CFLAGS) -o trdseek -v trdseek.o $(STDIOLIBS)

check-trdseek: trdseek
	./trdseek

check-tFile-regular: tFile
	./tFile < $(srcdir)/tFile.inp > tFile.out 2>&1
	diff -c tFile.out $(srcdir)/tFile.exp
# Run tFile with cout.rdbuf() unbuffered.
check-tFile-nobuf: tFile
	./tFile -b0 < $(srcdir)/tFile.inp > tFile-buf0.out 2>&1
	diff -c tFile-buf0.out $(srcdir)/tFile.exp
# Run tFile with a 3-byte buffer for cout.rdbuf().
check-tFile-buf3: tFile
	./tFile -b3 < $(srcdir)/tFile.inp > tFile-buf3.out 2>&1
	diff -c tFile-buf3.out $(srcdir)/tFile.exp
check-tFile: check-tFile-regular check-tFile-nobuf check-tFile-buf3

check-tiomisc: tiomisc
	./tiomisc >tiomisc.out 2>&1
	diff -c tiomisc.out $(srcdir)/tiomisc.exp

tiomanip: tiomanip.o
	$(CXX) $(CXXFLAGS) -o tiomanip tiomanip.o $(IOLIBS)
check-tiomanip: tiomanip
	./tiomanip >tiomanip.out 2>&1
	diff -c tiomanip.out $(srcdir)/tiomanip.exp

tfformat: $(srcdir)/tfformat.c
	$(CC) $(C_FLAGS) -DTEST_LIBIO -DTEST_EXACTNESS \
	  -o tfformat $(srcdir)/tfformat.c $(IOSTDIOLIB)

check-tfformat: tfformat
	./tfformat

tiformat: $(srcdir)/tiformat.c
	$(CC) $(C_FLAGS) -DTEST_LIBIO -o tiformat $(srcdir)/tiformat.c $(IOSTDIOLIB)

check-tiformat: tiformat
	./tiformat

tstdiomisc: tstdiomisc.o
	$(CC) $(CFLAGS) -o tstdiomisc tstdiomisc.o $(IOSTDIOLIB)

check-tstdiomisc: tstdiomisc
	./tstdiomisc >tstdiomisc.out 2>&1
	diff -c tstdiomisc.out $(srcdir)/tstdiomisc.exp

tpopen: tpopen.o
	$(CC) $(CFLAGS) -o tpopen tpopen.o $(STDIOLIBS)

check-tpopen: tpopen
	./tpopen > tpopen.out 2>&1
	diff -c tpopen.out $(srcdir)/tpopen.exp

trwseek: trwseek.o
	$(CC) $(CFLAGS) -o trwseek trwseek.o $(STDIOLIBS)

check-trwseek: trwseek
	./trwsseek  TMP r+ k w o

foo: foo.o
	$(CXX) $(CXXFLAGS) -o foo foo.o $(STDIOLIBS)
foo+: foo+.o
	$(CXX) $(CXXFLAGS) -o foo+ foo+.o $(IOLIBS)
