#
# Makefile for W32
#
PTEXENCDIR=../../ptexenc
WSRC=../mplibdir

RM = rm -f
CC = cl
LD = cl
CTANGLE = ../ctangle
CTIE = ctie
AR = lib

CAIROVER=cairo-src
PIXMANVER=pixman-src
GMPVER=gmp-src
MPFRVER=mpfr-src

KPSEBUILDDIR = ../../kpathsea
KPSESRCDIR = ../..
KPSELIB=$(KPSEBUILDDIR)/libkpathsea.lib
PTEXENCLIB= ../../ptexenc/libptexenc.lib
CAIROLIB = ../../../libs/cairo/$(CAIROVER)/src/release/cairo-static.lib
MPFRLIB = ../../../libs/mpfr/$(MPFRVER)/src/libmpfr.lib
#
# GMPLIB = ../../../libs/gmp/$(GMPVER)/libgmp.lib
#
PNGLIB = ../../../libs/libpng/libpng.lib
ZLIBLIB = ../../../libs/zlib/libz.lib
SYSLIBS = user32.lib advapi32.lib gdi32.lib shell32.lib
ADDLIBS = $(ZLIBLIB) $(PNGLIB) $(CAIROLIB) $(MPFRLIB) $(SYSLIBS)

MPLIBBUILDDIR = .
MPLIBSRCDIR = .
MPLIB = libpmplib.lib


#
# for Debug
#
#CFLAGS = -nologo -W1 -MT -Od -Zi -DMPXOUT=1 -DWIN32=1 -DMSVC=1 -DR_OK=4 \
#-Dstrcasecmp=stricmp -DHAVE_SNPRINTF=1 -D_CRT_SECURE_NO_DEPRECATE=1 \
#-DCAIRO_WIN32_STATIC_BUILD=1 -DNATIVE_TEXLIVE_BUILD=1 \
#-DNO_KPSE_DLL=1 -I. -I../.. -I../../kpathsea \
#-I$(PTEXENCDIR) -I.. \
#-I../../../libs/cairo/$(CAIROVER)/src \
#-I../../../libs/pixman/$(PIXMANVER)/pixman \
#-I../../../libs/mpfr/$(MPFRVER)/src \
#-I../../../libs/gmp/$(GMPVER) \
#-I../../../libs/libpng -I../../../libs/zlib -I$(WSRC)
#
#LDEBUG=-link /DEBUG


#
# for Release
#
CFLAGS = -nologo -W1 -MT -O2 -DMPXOUT=1 -DWIN32=1 -DMSVC=1 -DR_OK=4 \
-Dstrcasecmp=stricmp -DHAVE_SNPRINTF=1 -D_CRT_SECURE_NO_DEPRECATE=1 \
-DCAIRO_WIN32_STATIC_BUILD=1 -DNATIVE_TEXLIVE_BUILD=1 \
-DNO_KPSE_DLL=1 -DHAVE_CONFIG_H=1 -I. -I../.. -I../../kpathsea \
-I$(PTEXENCDIR) -I.. \
-I../../../libs/cairo/$(CAIROVER)/src \
-I../../../libs/pixman/$(PIXMANVER)/pixman \
-I../../../libs/mpfr/$(MPFRVER)/src \
-I../../../libs/gmp/$(GMPVER) -I../../../libs \
-I../../../libs/libpng -I../../../libs/zlib -I$(WSRC)

LDEBUG=


#
# The following five objects are used only in the case of
# mpost.dll, pmpost.dll, and upmpost.dll
#
MPBACKENDS = pmpostobj/pngout.obj pmpostobj/svgout.obj
MPMATHEXTRA = pmpostobj/mpmathbinary.obj
OBJECTS = pmpostobj/mpost.obj pmpostobj/mpxout.obj

LIBOBJECTS = pmpostobj/avl.obj pmpostobj/mp.obj \
$(MPBACKENDS) \
pmpostobj/psout.obj pmpostobj/tfmin.obj \
pmpostobj/mpmath.obj pmpostobj/mpmathdouble.obj \
$(MPMATHEXTRA) \
pmpostobj/mpstrings.obj pmpostobj/mpmathdecimal.obj \
pmpostobj/decNumber.obj pmpostobj/decContext.obj

pmpost.dll: $(MPLIB) $(OBJECTS) $(KPSELIB)
	$(LD) -LD -Fe$@ $(OBJECTS) $(MPLIB) $(KPSELIB) $(PTEXENCLIB) $(ADDLIBS) $(LDEBUG)

$(MPLIB): $(LIBOBJECTS)
	$(AR) -out:$@ $(LIBOBJECTS)

%.c:$(WSRC)/%.w
	rm -f $@
	$(CTANGLE) $< - $@

mp.c: $(WSRC)/mp.w pmp.ch pngout.c psout.c svgout.c tfmin.c mpmath.c \
mpmathdouble.c mpstrings.c mpmathdecimal.c mpmathbinary.c
	rm -f $@
	$(CTANGLE) $(WSRC)/mp.w pmp.ch $@

mpost.c: $(WSRC)/mpost.w pmpost.ch mpxout.c
	rm -f $@
	$(CTANGLE) $(WSRC)/mpost.w pmpost.ch $@

mpxout.c: $(WSRC)/mpxout.w pmpxout.ch
	rm -f $@
	$(CTANGLE) $(WSRC)/mpxout.w pmpxout.ch $@

tfmin.c: $(WSRC)/tfmin.w ptfmin.ch
	rm -f $@
	$(CTANGLE) $(WSRC)/tfmin.w ptfmin.ch $@

psout.c: $(WSRC)/psout.w ppsout.ch mpstrings.c
	rm -f $@
	$(CTANGLE) $(WSRC)/psout.w ppsout.ch $@

svgout.c: $(WSRC)/svgout.w psvgout.ch
	rm -f $@
	$(CTANGLE) $(WSRC)/svgout.w psvgout.ch $@

pmpostobj/avl.obj: $(WSRC)/avl.c $(WSRC)/avl.h
	$(CC) -c $(CFLAGS) $(WSRC)/avl.c -Fo$@

pmpostobj/decNumber.obj: $(WSRC)/decNumber.c
	$(CC) -c $(CFLAGS) $(WSRC)/decNumber.c -Fo$@

pmpostobj/decContext.obj: $(WSRC)/decContext.c
	$(CC) -c $(CFLAGS) $(WSRC)/decContext.c -Fo$@

pmpostobj/%.obj: %.c
	$(CC) -c $(CFLAGS) $< -Fo$@

clean:
	$(RM) pmpostobj/*.obj mp.c mpxout.c psout.c psout.h mp*.h *.scn \
        *.idx *.toc *.pdf *.log mpmath.c mpost.c tfmin.c svgout.c \
        mpstrings.c *~ pngout.c mpmathdouble.c mp-tot.ch mpxout-tot.ch \
        psout-tot.ch *.pdb *.eps *.exp pmpost.dll *.lib \
        mpmathdecimal.h mpmathdecimal.c \
        mpmathbinary.h mpmathbinary.c *.mp *.mpx *.dvi

install: pmpost.dll
	cp -p pmpost.dll c:/usr/local/txdir/w32tex/bin/
	cp -p pmpost.dll c:/usr/work/edrive/wk/dist/PTEX/bin/
