#
# Makefile for AmigaOS
#

.PHONY: help all staticlib sharedlib check clean install

vpath %.c ../lib ../examples ../xmlwf ../tests
vpath %.h ../lib ../tests


#
# Set these for SDK installation.
#
tooldir = SDK:Local/C
staticlibdir = SDK:Local/clib2/lib
staticincludedir = SDK:Local/clib2/include
sharedlibdir = SDK:Local/Libs
sharedincludedir = SDK:Local/common/include


ifeq ($(MAKECMDGOALS), staticlib)
 DESTDIR = lib
else
 DESTDIR = libs
endif

STATICLIB = $(DESTDIR)/libexpat.a
SHAREDLIB = $(DESTDIR)/expat.library

XMLWF = $(DESTDIR)/xmlwf
ELEMENTS = $(DESTDIR)/elements
OUTLINE = $(DESTDIR)/outline
RUNTESTS = $(DESTDIR)/runtests
BENCHMARK = $(DESTDIR)/benchmark


help:
	@echo "Requires:"
	@echo " AmigaOS 4.0"
	@echo " SDK 51.22"
	@echo " clib2 1.202"
	@echo ""
	@echo "Targets:"
	@echo " all - make expat libraries, xmlwf, examples and run test suite"
	@echo " install - install expat libraries and tools into SDK"

all:
	-makedir force lib libs
	$(MAKE) staticlib
	$(MAKE) sharedlib

staticlib: $(STATICLIB) $(XMLWF) $(ELEMENTS) $(OUTLINE) $(RUNTESTS) $(BENCHMARK) check
	@echo done

sharedlib: $(SHAREDLIB) $(XMLWF) $(ELEMENTS) $(OUTLINE) $(RUNTESTS) $(BENCHMARK) check
	@echo done

check:
	$(RUNTESTS)

clean:
	-delete lib/#?.o quiet
	-delete libs/#?.o quiet

install:
	copy libs/xmlwf $(tooldir) quiet
	copy /lib/expat.h /lib/expat_external.h $(staticincludedir) quiet
	copy lib/libexpat.a $(staticlibdir) quiet
	copy libs/expat.library $(sharedlibdir) quiet
	copy include $(sharedincludedir) quiet all


CC = gcc
LIBTOOL = ar
STRIP = strip

LDFLAGS =
LIBS =
CFLAGS = -DNDEBUG -O2
LTFLAGS = -crs
STRIPFLAGS = -R.comment
LAUNCH =

ifeq ($(MAKECMDGOALS), staticlib)
 CFLAGS += -mcrt=clib2
 LDFLAGS += -mcrt=clib2
 LIBS += $(STATICLIB)
 INCLUDES = -I../lib
endif

ifeq ($(MAKECMDGOALS), sharedlib)
 CFLAGS += -mcrt=newlib -D__USE_INLINE__
 LDFLAGS += -mcrt=newlib
 INCLUDES = -I. -Iinclude -Iinclude/libraries -I../lib
 LAUNCH = $(DESTDIR)/launch.o
endif


COMPILE = $(CC) $(CFLAGS) $(INCLUDES) -c

LINK = $(CC) $(LDFLAGS) -o $@


$(STATICLIB): $(DESTDIR)/xmlparse.o $(DESTDIR)/xmltok.o $(DESTDIR)/xmlrole.o
	$(LIBTOOL) $(LTFLAGS) $@ $^

$(DESTDIR)/xmlparse.o: xmlparse.c expat.h xmlrole.h xmltok.h \
	expat_external.h internal.h amigaconfig.h
	$(COMPILE) $< -o $@

$(DESTDIR)/xmlrole.o: xmlrole.c ascii.h xmlrole.h expat_external.h \
	internal.h amigaconfig.h
	$(COMPILE) $< -o $@

$(DESTDIR)/xmltok.o: xmltok.c xmltok_impl.c xmltok_ns.c ascii.h asciitab.h \
	iasciitab.h latin1tab.h nametab.h utf8tab.h xmltok.h xmltok_impl.h \
	expat_external.h internal.h amigaconfig.h
	$(COMPILE) $< -o $@


$(SHAREDLIB): $(DESTDIR)/expat_lib.o $(DESTDIR)/expat_vectors.o $(DESTDIR)/stdlib.o lib/libexpat.a
	$(LINK) -nostartfiles -nostdlib -o $@ $^

$(DESTDIR)/expat_lib.o: expat_lib.c
	$(COMPILE) $< -o $@

$(DESTDIR)/expat_vectors.o: expat_vectors.c
	$(COMPILE) $< -o $@

$(DESTDIR)/stdlib.o: stdlib.c
	$(COMPILE) $< -o $@

$(LAUNCH): launch.c
	$(COMPILE) $< -o $@


$(XMLWF): $(DESTDIR)/xmlwf.o $(DESTDIR)/xmlfile.o $(DESTDIR)/codepage.o $(DESTDIR)/readfilemap.o $(LAUNCH)
	$(LINK) $^ $(LIBS)
	$(STRIP) $(STRIPFLAGS) $@

$(DESTDIR)/xmlwf.o: xmlwf.c
	$(COMPILE) $< -o $@

$(DESTDIR)/xmlfile.o: xmlfile.c
	$(COMPILE) $< -o $@

$(DESTDIR)/codepage.o: codepage.c
	$(COMPILE) $< -o $@

$(DESTDIR)/readfilemap.o: readfilemap.c
	$(COMPILE) $< -o $@


$(ELEMENTS): $(DESTDIR)/elements.o $(LAUNCH)
	$(LINK) $^ $(LIBS)
	$(STRIP) $(STRIPFLAGS) $@

$(DESTDIR)/elements.o: elements.c
	$(COMPILE) $< -o $@


$(OUTLINE): $(DESTDIR)/outline.o $(LAUNCH)
	$(LINK) $^ $(LIBS)
	$(STRIP) $(STRIPFLAGS) $@

$(DESTDIR)/outline.o: outline.c
	$(COMPILE) $< -o $@


$(RUNTESTS): $(DESTDIR)/runtests.o $(DESTDIR)/chardata.o $(DESTDIR)/minicheck.o $(LAUNCH)
	$(LINK) $^ $(LIBS)

$(DESTDIR)/chardata.o: chardata.c chardata.h
	$(COMPILE) $< -o $@

$(DESTDIR)/minicheck.o: minicheck.c minicheck.h
	$(COMPILE) $< -o $@

$(DESTDIR)/runtests.o: runtests.c chardata.h
	$(COMPILE) $< -o $@


$(BENCHMARK): $(DESTDIR)/benchmark.o $(LAUNCH)
	$(LINK) $^ $(LIBS) -lm

$(DESTDIR)/benchmark.o: benchmark/benchmark.c
	$(COMPILE) $< -o $@
