# Makefile for W32
# make libluatex.lib for luatex.dll

SHELL = sh
MAKE=make
top_srcdir = ..
srcdir = .

#
# Release
#
OPTIMIZE=-O2 -W2 -favor:blend

#
# Debugging
#
# OPTIMIZE=-Od -Zi

MPLIBDIR=../mplibdir

CC = cl

CFLAGS = -nologo $(OPTIMIZE) -MD -wd4819

CPPFLAGS =  $(XCPPFLAGS)

XDEFS = -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_SECURE_NO_DEPRECATE \
-DLUA_COMPAT_MODULE=1 -DLUA_COMPAT_LOADSTRING=1 \
-DLUA_BUILD_AS_DLL=1 -D_CRT_OBSOLETE_NO_DEPRECATE -D_SECURE_SCL=0 \
-DNATIVE_TEXLIVE_BUILD=1 -DHAVE_STRUCTTREEROOT_H=1 -DLuaTeX=1 \
-DLUA_COMPAT_APIINTCASTS=1 \
-Denviron=_environ -Dmkdir=_mkdir -Dstat=_stat

#
DEFS = -DHAVE_CONFIG_H -Zm200 -DWIN32=1 -DMSVC=1 -DW32TEX=1 -DpdfTeX \
-DSYNCTEX_ENGINE_H='<synctex-luatex.h>' -DNO_KPSE_DLL=1 \
-DNO_DUMP_SHARE=1 $(XDEFS)
#

# Kpathsea needs this for compiling, programs need it for linking.
LIBTOOL = $(kpathsea_srcdir_parent)/klibtool

# You can change [X]CPPFLAGS, [X]CFLAGS, or [X]DEFS, but
# please don't change ALL_CPPFLAGS or ALL_CFLAGS.
# prog_cflags is set by subdirectories of web2c.
ALL_CPPFLAGS = -W2 $(DEFS) -I. -I.. -I$(ZLIBDIR) \
  -I../.. -I$(MPLIBDIR) -I../../kpathsea -I../synctexdir \
  -I../lualibs \
  -I../../../libs -I../../../libs/pplib/src/util \
  -I../../../libs/pplib/src \
  $(prog_cflags) $(CPPFLAGS)
ALL_CFLAGS = $(ALL_CPPFLAGS) $(CFLAGS) -c
compile = $(CC) $(ALL_CFLAGS) -Fo$@

.SUFFIXES:
.SUFFIXES: .c .obj # in case the suffix list has been cleared, e.g., by web2c
luabin/%.obj: %.c
	$(compile) $<

# Installation.
INSTALL = cp
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = $(INSTALL_PROGRAM)
INSTALL_DATA = ${INSTALL}
INSTALL_LIBTOOL_LIBS = INSTALL_DATA='$(INSTALL_DATA)' $(LIBTOOL) install-lib
INSTALL_LIBTOOL_PROG = INSTALL_PROGRAM='$(INSTALL_PROGRAM)' $(LIBTOOL) install-prog

# Creating (symbolic) links.
LN = cp

# We use these for many things.
kpathsea_parent = ..
kpathsea_dir = $(kpathsea_parent)/kpathsea
kpathsea_srcdir_parent = $(top_srcdir)/..
kpathsea_srcdir = $(kpathsea_srcdir_parent)/kpathsea
kpathsea = $(kpathsea_dir)/libkpathsea.lib


LDFLAGS =  $(XLDFLAGS)

LIBS = 
LOADLIBES = $(proglib) $(kpathsea) $(LIBS) $(XLOADLIBES)

# May as well separate linking from compiling, just in case.
CCLD = $(CC)
link_command = $(CCLD) -Fe$@ $(LDFLAGS) 

kpathsea_link = $(link_command)

AR = lib
ARFLAGS = -out:
RANLIB = ranlib

kpathsea_srcdir_parent = $(srcdir)/../..
kpathsea_dir_parent = ../..
.SUFFIXES: .cc .obj
luabin/%.obj: %.cc
	$(CXX) $(CXXFLAGS) -c -Fo$@ -Tp$<

CXXFLAGS = -nologo -W2 $(OPTIMIZE) -MD -EHsc -wd4819 -DHAVE_CONFIG_H -DWIN32=1 \
 $(XDEFS) -DNO_KPSE_DLL=1 -I. -I.. -I$(kpathsea_dir_parent) \
 -I$(kpathsea_dir_parent)/kpathsea \
 -I$(kpathsea_srcdir_parent) \
 -I$(LIBPNGDIR) -I$(ZLIBDIR) \
 -I../../../libs -I../../../libs/pplib/src/util \
 -I../../../libs/pplib/src \
 -I../lualibs  -I../lualibs/lua53

CXX = cl

LIBPNGDIR=../../../libs/libpng
LIBPNGSRCDIR=$(srcdir)/$(LIBPNGDIR)

ZLIBDIR=../../../libs/zlib
ZLIBSRCDIR=$(srcdir)/$(ZLIBDIR)
ZLIBLIB=$(ZLIBDIR)/libz.lib

LIBXPDFDIR=../../../libs/xpdf
LIBXPDFSRCDIR=$(srcdir)/$(LIBXPDFDIR)

LIBMD5DIR=../libmd5
LIBMD5SRCDIR=$(srcdir)/$(LIBMD5DIR)

LUAINC=-I../lualibs/lua53 -I../lualibs

XCPPFLAGS=-I.. -I$(srcdir)/.. -I../.. -I$(srcdir)/../.. \
-I$(LIBPNGDIR) -I$(LIBMD5DIR) -I$(LIBMD5SRCDIR) -I$(LIBPNGSRCDIR) \
-I$(ZLIBDIR) -I$(ZLIBSRCDIR) $(LUAINC)

OBJS = \
luabin/dvi/dvigen.obj \
luabin/font/mapfile.obj \
luabin/font/pkin.obj \
luabin/font/tounicode.obj \
luabin/font/vfpacket.obj \
luabin/font/writeenc.obj \
luabin/font/writefont.obj \
luabin/font/writet1.obj \
luabin/font/writet3.obj \
luabin/font/writettf.obj \
luabin/font/writetype0.obj \
luabin/font/writetype2.obj \
luabin/font/writecff.obj \
luabin/font/tt_glyf.obj \
luabin/font/tt_table.obj \
luabin/font/sfnt.obj \
luabin/font/texfont.obj \
luabin/font/tfmofm.obj \
luabin/font/vfovf.obj \
luabin/font/luafont.obj \
luabin/font/dofont.obj \
luabin/image/pdftoepdf.obj \
luabin/image/writeimg.obj \
luabin/image/writejbig2.obj \
luabin/image/writejp2.obj \
luabin/image/writejpg.obj \
luabin/image/writepng.obj \
luabin/lang/hnjalloc.obj \
luabin/lang/hyphen.obj \
luabin/lang/texlang.obj \
luabin/lua/helpers.obj \
luabin/lua/lcallbacklib.obj \
luabin/lua/lpdfelib.obj \
luabin/lua/lpdflib.obj \
luabin/lua/lfontlib.obj \
luabin/lua/limglib.obj \
luabin/lua/liolibext.obj \
luabin/lua/llanglib.obj \
luabin/lua/llualib.obj \
luabin/lua/lkpselib.obj \
luabin/lua/lnodelib.obj \
luabin/lua/loslibext.obj \
luabin/lua/lpdfscannerlib.obj \
luabin/lua/lstrlibext.obj \
luabin/lua/lstatslib.obj \
luabin/lua/ltexiolib.obj \
luabin/lua/ltexlib.obj \
luabin/lua/lnewtokenlib.obj \
luabin/lua/luainit.obj \
luabin/lua/luanode.obj \
luabin/lua/luastuff.obj \
luabin/lua/luatex-core.obj \
luabin/lua/luatoken.obj \
luabin/lua/mplibstuff.obj \
luabin/lua/texluac.obj \
luabin/pdf/pdfaction.obj \
luabin/pdf/pdfannot.obj \
luabin/pdf/pdfcolorstack.obj \
luabin/pdf/pdfdest.obj \
luabin/pdf/pdffont.obj \
luabin/pdf/pdfgen.obj \
luabin/pdf/pdfglyph.obj \
luabin/pdf/pdfimage.obj \
luabin/pdf/pdflink.obj \
luabin/pdf/pdflistout.obj \
luabin/pdf/pdfliteral.obj \
luabin/pdf/pdfobj.obj \
luabin/pdf/pdfoutline.obj \
luabin/pdf/pdfpage.obj \
luabin/pdf/pdfpagetree.obj \
luabin/pdf/pdfrule.obj \
luabin/pdf/pdfsaverestore.obj \
luabin/pdf/pdfsetmatrix.obj \
luabin/pdf/pdfshipout.obj \
luabin/pdf/pdftables.obj \
luabin/pdf/pdfthread.obj \
luabin/pdf/pdfxform.obj \
luabin/tex/align.obj \
luabin/tex/arithmetic.obj \
luabin/tex/backend.obj \
luabin/tex/buildpage.obj \
luabin/tex/commands.obj \
luabin/tex/conditional.obj \
luabin/tex/directions.obj \
luabin/tex/dumpdata.obj \
luabin/tex/equivalents.obj \
luabin/tex/errors.obj \
luabin/tex/expand.obj \
luabin/tex/extensions.obj \
luabin/tex/filename.obj \
luabin/tex/inputstack.obj \
luabin/tex/linebreak.obj \
luabin/tex/mainbody.obj \
luabin/tex/maincontrol.obj \
luabin/tex/mathcodes.obj \
luabin/tex/memoryword.obj \
luabin/tex/mlist.obj \
luabin/tex/nesting.obj \
luabin/tex/packaging.obj \
luabin/tex/postlinebreak.obj \
luabin/tex/primitive.obj \
luabin/tex/printing.obj \
luabin/tex/scanning.obj \
luabin/tex/stringpool.obj \
luabin/tex/texdeffont.obj \
luabin/tex/texfileio.obj \
luabin/tex/texmath.obj \
luabin/tex/texnodes.obj \
luabin/tex/textcodes.obj \
luabin/tex/textoken.obj \
luabin/utils/avl.obj \
luabin/utils/avlstuff.obj \
luabin/utils/managed-sa.obj \
luabin/utils/unistring.obj \
luabin/utils/utils.obj \
luabin/synctex.obj \
../libmd5/md5.obj

all: libluatex.lib

libluatex.lib: $(OBJS)
	$(AR) $(ARFLAGS)$@  $(OBJS)

../libmd5/md5.obj: ../libmd5/md5.c
	$(CC) $(ALL_CFLAGS) -Fo$@ ../libmd5/md5.c

luabin/synctex.obj: synctex.c
synctex.c: ../synctexdir/synctex.c
	cp ../synctexdir/synctex.c $@

ocp/ocp.c: ocp/ocp.w
	../ctangle ocp/ocp.w - ocp/ocp.c
ocp/runocp.c: ocp/runocp.w
	../ctangle ocp/runocp.w - ocp/runocp.c
ocp/ocplist.c: ocp/ocplist.w
	../ctangle ocp/ocplist.w - ocp/ocplist.c
ocp/readocp.c: ocp/readocp.w
	../ctangle ocp/readocp.w - ocp/readocp.c


clean:
	rm -f *.obj libluatex.lib *.exe *~
	rm -f luabin/dvi/*.obj luabin/font/*.obj luabin/image/*.obj
	rm -f luabin/lang/*.obj luabin/lua/*.obj luabin/*.obj
	rm -f luabin/pdf/*.obj luabin/tex/*.obj luabin/utils/*.obj
	rm -f dvi/*~ font/*~ image/*~
	rm -f lang/*~ lua/*~
	rm -f pdf/*~ tex/*~ utils/*~

distclean maintainer-clean extraclean: clean
	rm -f config.log config.status

depend: depend.mk

depend.mk: mkdep.sh
	./mkdep.sh

include depend.mk
