#
# Makefile for W32
#

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

#
# release
#
OPTIMIZE=-O2
LKDEBUG=
#
# debug
#
#OPTIMIZE=-Od -Zi
#LKDEBUG=/DEBUG

LD = cl
CC = cl
CFLAGS = -nologo -w -MT $(OPTIMIZE) -DWIN32=1 -DMSVC=1 \
-DHAVE_SNPRINTF=1 \
-Dstrcasecmp=stricmp -D_CRT_SECURE_NO_DEPRECATE=1 \
-DLUA_COMPAT_MODULE -DLUA_COMPAT_LOADSTRING=1 \
-DHAVE_SYS_TIMEB_H=1 -DHAVE_SYS_STAT_H=1 -DNO_KPSE_DLL=1 \
-DCAIRO_WIN32_STATIC_BUILD=1 \
-DNATIVE_TEXLIVE_BUILD=1 -DHAVE_CONFIG_H=1 \
-I../.. -I../../kpathsea -I. -I../lualibs/lua53 -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


KPSEBUILDDIR = ../../kpathsea
KPSESRCDIR = ../..
KPSELIB=$(KPSEBUILDDIR)/libkpathsea.lib

bin_PROGRAMS = mpost.dll
mpost_SOURCES = mpost.c mpxout.c
mpost_LDADD = libmplibcore.lib $(KPSELIB)
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
ADDLIB = $(ZLIBLIB) $(PNGLIB)

include_HEADERS = mplib.h

CTANGLE=../ctangle

all: $(bin_PROGRAMS) libmplibcore.lib lmplib.obj

mpstrings.h mpstrings.c: mpstrings.w
psout.c: mpstrings.c
mpost.c: mp.c mpxout.c
mp.c: psout.c mpxout.c tfmin.c svgout.c mpmath.c mpmathdouble.c mpstrings.c \
pngout.c mpmathdecimal.c mpmathbinary.c

lmplib.c: mp.c

MPLIB = avl.obj mp.obj psout.obj tfmin.obj mpmath.obj \
mpmathdouble.obj mpstrings.obj mpmathdecimal.obj \
decNumber.obj decContext.obj

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

libmplibcore.lib: $(MPLIB)
	lib -out:$@ $(MPLIB)

mpost.dll: $(OBJECTS) $(MPBACKENDS) $(MPMATHEXTRA) $(mpost_LDADD) \
$(ZLIBLIB) $(PNGLIB) $(CAIROLIB) $(MPFRLIB)
	$(LD) -LD -Fe$@ $(OBJECTS) $(MPBACKENDS) $(MPMATHEXTRA) \
$(mpost_LDADD) $(ADDLIB) $(CAIROLIB) $(MPFRLIB) \
$(SYSLIBS) -link $(LKDEBUG)

avl.obj: avl.c
	$(CC) $(CFLAGS) -c $<

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

lmplib.obj:lmplib.c
	$(CC) -c $(CFLAGS) -DpdfTeX=1 -I$(MPLIBSRCDIR) -I$(KPSESRCDIR) $< -Fo$@

$(OBJECTS): %.obj: %.c
	$(CC) -c $(CFLAGS) -I$(MPLIBSRCDIR) -I$(KPSESRCDIR) $< -Fo$@

clean::
	$(RM) mplib.h mplibps.h mplibsvg.h mplibpng.h mpmath.h mpmathdouble.h \
        mpmp.h mppsout.h mpsvgout.h mppngout.h mpxout.h mp.c mpmath.c \
        mpmathdouble.c mpost.c mpxout.c psout.c pngout.c svgout.c tfmin.c \
        mpstrings.h mpstrings.c *~ *.obj *.lib *.dll *.exp \
        decNumber.obj decContext.obj mpmathdecimal.obj \
        mpmathdecimal.h mpmathdecimal.c \
        mpmathbinary.h mpmathbinary.c

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