# This Makefile will allow you to build the static library, a DLL, the
# DLL-import library, and the test executables using the "mingw" gcc
# compiler environment.  This Makefile is based on Alfred Reibenschuh's
# version for 2.1.1, and was modified by Wayne Davison.

# Set "PREFIX" to the root of the mingw installed files.

PREFIX = /mingw

CC=gcc
CFLAGS=-O -Iinclude -I$(PREFIX)/include -D_WINSOCKAPI_ -fnative-struct
LDFLAGS=-L. -L$(PREFIX)/lib
LIBS=-lwsock32 -lz

AR=ar rc
DLLTOOL=dlltool
DLLWRAP=dllwrap

LIBSRCS=HTMLparser.c	\
	HTMLtree.c	\
	SAX.c		\
	debugXML.c	\
	encoding.c	\
	entities.c	\
	error.c		\
	nanoftp.c	\
	nanohttp.c	\
	parser.c	\
	parserInternals.c	\
	tree.c		\
	valid.c		\
	xlink.c		\
	xmlIO.c		\
	xmlmemory.c	\
	xpath.c		\
	xpointer.c	\
	hash.c		\
	uri.c

LIBOBJS=$(LIBSRCS:.c=.o)

OBJS=$(LIBOBJS)

LIBBASE=xml
LIB=lib$(LIBBASE).a
DLL=$(LIB:.a=.dll)

OBJ1=testHTML.o
OBJ2=testSAX.o
OBJ3=testURI.o
EXE1=$(OBJ1:.o=.exe)
EXE2=$(OBJ2:.o=.exe)
EXE3=$(OBJ3:.o=.exe)

IMPBASE=$(LIBBASE)_dll
IMP=lib$(IMPBASE).a

DEF=$(DLL:.dll=.def)

all: $(LIB) $(DLL) $(DEF) $(IMP) $(EXE1) $(EXE2) $(EXE3)

dll: $(DLL)

lib: $(LIB)

$(DLL): $(LIB) $(DEF) $(IMP)
	$(DLLWRAP) --def $(DEF) --dllname $@ --output-lib $@ $(LIB) $(LDFLAGS) $(LIBS) -mwindows

$(LIB): $(LIBOBJS)
	$(AR) $@ $^

$(DEF): $(LIBOBJS)
	$(DLLTOOL) --kill-at --export-all -D $(DLL) --output-def $@ $^

$(IMP): $(DEF)
	$(DLLTOOL) -d $< -l $@ -D $(DLL)

$(EXE1): $(OBJ1) $(LIBOBJS) $(DLL)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS)
	strip $@

$(EXE2): $(OBJ2) $(LIBOBJS) $(DLL)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS)
	strip $@

$(EXE3): $(OBJ3) $(LIBOBJS) $(LIB)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(LIBBASE) $(LIBS)
	strip $@

.c.o:
	$(CC) $(CFLAGS) -c $< -o $@	

clean:
	rm *.o *.a *.dll *.def

test: all
	./$(EXE1)	-c $(OBJS) | xxd | head -3
