# 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.
# Modified 2001/10/10 Tobias Peters for libxml2-2.4.5
# Modified 2002/07/12 Elizabeth Barham for libxml2.4.23

# Set "PREFIX" to the root of the mingw installed files.

# PREFIX = /mingw
PREFIX = F:\WIN98\PROGR~-I\DEV-C~QN

CC       = gcc
CFLAGS   = -Iinclude -fnative-struct -D_WINSOCKAPI_ \
           -Dsnprintf=_snprintf -Dvsnprintf=_vsnprintf \
           -DLIBXML_THREAD_ENABLED
LDFLAGS  = -L. -L$(PREFIX)\lib
LIBS     = -lwsock32 -lz -liconv_dll

AR=ar rc
DLLTOOL=dlltool
DLLWRAP=dllwrap


LIBSRCS=SAX.c entities.c encoding.c error.c parserInternals.c  \
		parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c  \
		valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c  \
		xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c \
                catalog.c c14n.c threads.c xmlschemastypes.c xmlschemas.c \
                xmlregexp.c xmlunicode.c globals.c

#                strio.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
OBJ4=testSchemas.o
OBJ5=testAutomata.o
OBJ6=testC14N.o
OBJ7=testDocbook.o
OBJ8=testRegexp.o
OBJ9=testThreadsWin32.o
OBJ10=testXPath.o
OBJ11=xmllint.o
EXE1=$(OBJ1:.o=.exe)
EXE2=$(OBJ2:.o=.exe)
EXE3=$(OBJ3:.o=.exe)
EXE4=$(OBJ4:.o=.exe)
EXE5=$(OBJ5:.o=.exe)
EXE6=$(OBJ6:.o=.exe)
EXE7=$(OBJ7:.o=.exe)
EXE8=$(OBJ8:.o=.exe)
EXE9=$(OBJ9:.o=.exe)
EXE10=$(OBJ10:.o=.exe)
EXE11=$(OBJ11:.o=.exe)

IMPBASE=$(LIBBASE)_dll
IMP=lib$(IMPBASE).a

DLLFLAGS = --shared -o $(DLL) -Wl,--out-implib,$(IMP)

DEF=$(DLL:.dll=.def)

all: $(LIB) $(DLL) $(DEF) $(IMP) $(EXE1) $(EXE2) $(EXE3) $(EXE4) $(EXE5) \
        $(EXE6) $(EXE7) $(EXE8) $(EXE9) $(EXE10) $(EXE11)

dll: $(DLL)

lib: $(LIB)

$(DLL) $(IMP): $(LIBOBJS)
	$(CC) $(DLLFLAGS) $(LIBOBJS) $(LDFLAGS) $(LIBS)
# -mwindows

$(LIB): $(LIBOBJS)
	$(AR) $@ $^

$(DEF): $(LIBOBJS)
	$(DLLTOOL) --kill-at --export-all -D $(DLL) --output-def $@ $^

$(EXE1): $(OBJ1) $(DLL)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS)
	strip $@

$(EXE2): $(OBJ2) $(DLL)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS)
	strip $@

$(EXE3): $(OBJ3) $(LIB)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(LIBBASE) $(LIBS)
	strip $@

$(EXE4): $(OBJ4) $(DLL)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS)
	strip $@

$(EXE5): $(OBJ5) $(DLL)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS)
	strip $@

$(EXE6): $(OBJ6) $(DLL)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS)
	strip $@

$(EXE7): $(OBJ7) $(DLL)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS)
	strip $@

$(EXE8): $(OBJ8) $(DLL)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS)
	strip $@

$(EXE9): $(OBJ9) $(DLL)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS)
	strip $@

$(EXE10): $(OBJ10) $(DLL)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS)
	strip $@

$(EXE11): $(OBJ11) $(DLL)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS)
	strip $@

$(OBJ1): $(OBJ1:.o=.c)
	$(CC) $(CFLAGS) -DLIBXML_DLL_IMPORT=__declspec'(dllimport)' -c $< -o $@

$(OBJ2): $(OBJ2:.o=.c)
	$(CC) $(CFLAGS) -DLIBXML_DLL_IMPORT=__declspec'(dllimport)' -c $< -o $@

$(OBJ3): $(OBJ3:.o=.c)
	$(CC) $(CFLAGS) -c $< -o $@

$(OBJ4): $(OBJ4:.o=.c)
	$(CC) $(CFLAGS) -DLIBXML_DLL_IMPORT=__declspec'(dllimport)' -c $< -o $@

$(OBJ5): $(OBJ5:.o=.c)
	$(CC) $(CFLAGS) -DLIBXML_DLL_IMPORT=__declspec'(dllimport)' -c $< -o $@

$(OBJ6): $(OBJ6:.o=.c)
	$(CC) $(CFLAGS) -DLIBXML_DLL_IMPORT=__declspec'(dllimport)' -c $< -o $@

$(OBJ7): $(OBJ7:.o=.c)
	$(CC) $(CFLAGS) -DLIBXML_DLL_IMPORT=__declspec'(dllimport)' -c $< -o $@

$(OBJ8): $(OBJ8:.o=.c)
	$(CC) $(CFLAGS) -DLIBXML_DLL_IMPORT=__declspec'(dllimport)' -c $< -o $@

$(OBJ9): $(OBJ9:.o=.c)
	$(CC) $(CFLAGS) -DLIBXML_DLL_IMPORT=__declspec'(dllimport)' -c $< -o $@

$(OBJ10): $(OBJ10:.o=.c)
	$(CC) $(CFLAGS) -DLIBXML_DLL_IMPORT=__declspec'(dllimport)' -c $< -o $@

$(OBJ11): $(OBJ11:.o=.c)
	$(CC) $(CFLAGS) -DLIBXML_DLL_IMPORT=__declspec'(dllimport)' -c $< -o $@



.c.o:
	$(CC) $(CFLAGS) -DIN_LIBXML -c $< -o $@	

clean:
	rm *.o *.a *.dll *.def

test: all
	./$(EXE1)	-c $(OBJS) | xxd | head -3
