CC=gcc
CFLAGS=-Wall -I. -DNDEBUG -O9
LIBMODULES = textwin pmtext msgs eventq eventwin pmstdio cvtevent pmio
MODULES = $(LIBMODULES) test1 test2 test3 test4 test5 test6
HEADERS = pmio
LIBDIR_BASE = /gcc2/lib
LIBDIR_STATIC = $(LIBDIR_BASE)/static
LIBDIR_DYNAMIC = $(LIBDIR_BASE)/dynamic
DLLDIR = /gcc2/dll
INCDIR = /gcc2/gccincl
INFODIR = /gcc2/info
SAMPLEDIR = /gcc2/samples/pmio

LIBOBJS = $(addsuffix .obj, $(LIBMODULES)
DLLOBJ = $(addprefix $(LIBDIR_BASE)/, dllinit0.obj dllinit.obj) $(LIBOBJS)
OBJS = $(addsuffix .obj, $(MODULES))
SOURCE = $(addsuffix .cc, $(MODULES))
DEPS = $(addsuffix .d, $(MODULES))
HFILES = $(addsuffix .h, $(HEADERS))
DESTHFILES = $(addprefix $(INCDIR)/, $(HFILES))

%.obj %.d: %.cc
	$(CC) $(CFLAGS) -c -MD $<
$(INCDIR)/%.h: %.h
	rm -f $@
	cp $< $@

.PHONY: clean depend all default install test

default: all
all: pmio.lib pmiox.lib

#
# Installation procedures
#
TESTFILES = test3.cc test4.cc test5.cc test6.cc
install: $(LIBDIR_STATIC)/pmio.lib \
	$(LIBDIR_DYNAMIC)/pmio.lib \
	$(DLLDIR)/pmio.dll \
	$(DESTHFILES) \
	$(INFODIR)/pmio \
	$(addprefix $(SAMPLEDIR)/,$(TESTFILES))

$(INFODIR)/pmio: pmio
	rm -f $(INFODIR)/pmio
	cp pmio $(INFODIR)/pmio
$(LIBDIR_STATIC)/pmio.lib: pmiox.lib
	rm -f $(LIBDIR_STATIC)/pmio.lib
	cp pmiox.lib $(LIBDIR_STATIC)/pmio.lib
$(LIBDIR_DYNAMIC)/pmio.lib: pmio.lib
	rm -f $(LIBDIR_DYNAMIC)/pmio.lib
	cp pmio.lib $(LIBDIR_DYNAMIC)/pmio.lib
$(DLLDIR)/pmio.dll: pmio.dll
	rm -f $(DLLDIR)/pmio.dll
	cp pmio.dll $(DLLDIR)
$(DESTHFILES):

$(SAMPLEDIR)/%: %
	rm -f $@
	cp $< $@

$(SAMPLEDIR)/build.cmd: Makefile
	rm -f $@
	touch -f $@
	$(foreach test, $(TESTFILES), \
	echo gcc -o $(basename $(test)).exe $(test) -lpmio -lstdwin -Xlinker -pm >> $@;)


#
# Building test files
#
test:	$(addprefix test, $(addsuffix .exe, 1 2 3 4 5 6)) \
	$(addprefix test, $(addsuffix x.exe, 1 2 3 4 5 6))

test1.exe: pmio.lib test1.obj
	$(CC) -o test1.exe test1.obj pmio.lib
test1x.exe: pmiox.lib test1.obj
	$(CC) -o test1x.exe test1.obj pmiox.lib

test2.exe: pmio.lib test2.obj
	$(CC) -o test2.exe test2.obj pmio.lib -lstdwin -Xlinker -pm
test2x.exe: pmiox.lib test2.obj
	$(CC) -o test2x.exe test2.obj pmiox.lib -lstdwin -Xlinker -pm

test3.exe: pmio.lib test3.obj
	$(CC) -o test3.exe test3.obj pmio.lib -lstdwin -Xlinker -pm
test3x.exe: pmiox.lib test3.obj
	$(CC) -o test3x.exe test3.obj pmiox.lib -lstdwin -Xlinker -pm

test4.exe: pmio.lib test4.obj
	$(CC) -o test4.exe test4.obj pmio.lib -lstdwin -Xlinker -pm
test4x.exe: pmiox.lib test4.obj
	$(CC) -o test4x.exe test4.obj pmiox.lib -lstdwin -Xlinker -pm

test5.exe: pmio.lib test5.obj
	$(CC) -o test5.exe test5.obj pmio.lib -lstdwin -Xlinker -pm
test5x.exe: pmiox.lib test5.obj
	$(CC) -o test5x.exe test5.obj pmiox.lib -lstdwin -Xlinker -pm

test6.exe: pmio.lib test6.obj
	$(CC) -o test6.exe test6.obj pmio.lib -lstdwin -Xlinker -pm
test6x.exe: pmiox.lib test6.obj
	$(CC) -o test6x.exe test6.obj pmiox.lib -lstdwin -Xlinker -pm

#
# Building the library
#
pmiox.lib: $(LIBOBJS)
	rm -f pmiox.lib
	glib pmiox.lib $(addprefix -a , $(LIBOBJS))

#
# Building the DLL version of the library
#
pmio.lib: pmio.def pmio.dll
	implib /NOI /NOL pmio.lib pmio.def
pmio.dll: $(DLLOBJ) pmio.def
	gcc -o pmio.dll pmio.def $(DLLOBJ) -lstdwin

pmio.def: pmio.de0 $(DLLOBJ)
	omfexp $(DLLOBJ) | gnusort -u | cat pmio.de0 - > pmio.def

#
# Building the library manual
#
pmio: pmio.texi
	makeinfo pmio.texi

#
# Cleaning generated files
#
clean:
	rm -f $(OBJS) pmio pmio.lib *~ pmio.def pmio.dll pmiox.lib *.exe

#
# Auto dependencies
#
depend: $(DEPS) $(OBJS)
	cat $(DEPS) | sed "s/e://g" > depend.mak

$(OBJS) $(DEPS):

include depend.mak
