# Copyright (C) 1993 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
CXX_FLAGS = $(CXXFLAGS) -I. -I.. -I$(srcdir) -I$(srcdir)/..
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 = ../libiostream.a ../../libiberty/libiberty.a
IOSTDIOLIB = ../libio.a ../../libiberty/libiberty.a

DEPEND_SOURCES = $(srcdir)/*.C

.PHONY: check check-iostream check-stdio
check: check-iostream check-iostdio


# These are tests written in C++, that test the iostream facility.
check-iostream: check-tFile 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-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

.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) -o tgetl tgetl.o $(IOLIBS)

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

hounddog: hounddog.o
	$(CXX) -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) -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) -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) -o twrseek twrseek.o $(STDIOLIBS)

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

trdseek: trdseek.o
	$(CC) -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

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

tfformat: tfformat.o
	$(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

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

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

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

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

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