# nmake -f makefile.msvc
# Arguments:
# CFG=dbg|rel (default: dbg)
# BASEDIR=.
# EXTDIR=<directory where zlib/freetype/jpeg lib live> (default: ext)
#  e.g. ..\sumatrapdf\ext
# EXTCFLAGS=$CFLAGS
# MUPDF_DIR=mupdf
# PLATFORM=X86
#   the PLATFORM var is usually set in the x64 and x64 cross tools Visual Studio command prompt
#   note: building on X64 isn't officially supported and might unintentionally be broken
# WITH_ANALYZE=yes
#   use /analyze for all code

# Set default configuration
!if "$(CFG)"==""
CFG=dbg
!endif

!if "$(BASEDIR)"==""
BASEDIR=.
!endif

!if "$(PLATFORM)"=="x64" || "$(TARGET_CPU)"=="x64"
PLATFORM = X64
!endif

# O is directory where object and binary files go
O = $(BASEDIR)\obj-$(CFG)

# for x86 : obj-dbg and obj-rel ; for x64 : obj-dbg64 and obj-rel64
!if "$(PLATFORM)"=="X64"
O = $(O)64
!endif

!if "$(MUPDF_DIR)"==""
MUPDF_DIR=$(BASEDIR)\mupdf
!endif

!if "$(EXTDIR)"==""
EXTDIR=$(BASEDIR)\ext
!endif

# default target
all_sumatrapdf: SumatraPDF Installer EngineDump

##### add configuration changes that should also affect MuPDF before this line #####

!INCLUDE $(MUPDF_DIR)\makefile.msvc

##### add configuration changes that should NOT affect MuPDF after this line #####

SRCDIR = $(BASEDIR)\src

# include build data for the remaining third-party libraries
!INCLUDE $(EXTDIR)\makefile.msvc

# Modify the following defines if you have to target a platform prior to the ones specified below.
# Their meaning: http://msdn.microsoft.com/en-us/library/aa383745(VS.85).aspx
# and http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx
# We set the features uniformly to Windows XP or later.
CFLAGS = $(CFLAGS) /D "WINVER=0x0501" /D "_WIN32_WINNT=0x0501"
# Suppress warning C4800: forcing value to bool 'true' or 'false'
CFLAGS = $(CFLAGS) /wd4800

!if "$(WITH_ANALYZE)"=="yes"
CFLAGS = /analyze:WX- $(CFLAGS)
# C6211: Leaking memory 'foo' due to an exception
# C28125: The function must be called from within a try/except block. (InitializeCriticalSection could have thrown before Windows Vista.)
# C28251: Inconsistent annotation
# C8204: <function> : Only one of this overload and the one at <filename>(<line>) are annotated for <paramname>: both or neither must be annotated.
# TODO: verify that new doesn't throw
CFLAGS = $(CFLAGS) /wd6211 /wd28125 /wd28204 /wd28251
!endif

!if "$(CFG)"=="dbg"
CFLAGS = $(CFLAGS) /D "DEBUG" /D "_DEBUG"
!endif

UTILS_CFLAGS = $(CFLAGS) $(EXTCFLAGS) \
	/I$(SRCDIR)/utils /I$(SRCDIR)/wingui /I$(SRCDIR)/mui /I$(ZLIB_DIR) \
	/I$(EXTDIR)/lzma/C /I$(EXTDIR)/libwebp /I$(EXTDIR)/unarr \
	/I$(MUPDF_DIR)\include

SUMATRA_CFLAGS = $(UTILS_CFLAGS) $(EXTCFLAGS) \
	/I$(SRCDIR) /I$(MUPDF_DIR)\include \
	/I$(EXTDIR)/synctex /I$(EXTDIR)/libdjvu /I$(EXTDIR)/CHMLib/src

INSTALLER_CFLAGS = $(CFLAGS) $(EXTCFLAGS) \
	/I$(SRCDIR)/utils /I$(SRCDIR)/installer /I$(SRCDIR) /I$(ZLIB_DIR) /I$(EXTDIR)/lzma/C

UNINSTALLER_CFLAGS = $(CFLAGS) $(EXTCFLAGS) \
	/I$(SRCDIR)/utils /I$(SRCDIR)/installer /I$(SRCDIR) /D "BUILD_UNINSTALLER"

RC_FLAGS = $(EXTCFLAGS)
!if "$(CFG)"=="dbg"
RC_FLAGS = $(RC_FLAGS) /D "DEBUG" /D "_DEBUG"
!endif

LIB_FLAGS = /nologo
!if "$(CFG)"!="dbg"
# match LDFLAGS in mupdf\makefile.msvc
LIB_FLAGS = $(LIB_FLAGS) /LTCG
!endif

LIBS = $(LIBS) \
	comctl32.lib Msimg32.lib Winspool.lib wininet.lib urlmon.lib gdiplus.lib \
	ole32.lib OleAut32.lib shlwapi.lib version.lib WindowsCodecs.lib crypt32.lib

OS   = $(O)\sumatrapdf
OU   = $(O)\utils
ODLL = $(O)\applibs
OMUI = $(O)\mui
OM   = $(O)\memtrace
OUIA = $(O)\uia

SUMATRA_APP = $(O)\SumatraPDF.exe
SUMATRA_APP_NO_MUPDF = $(O)\SumatraPDF-no-MuPDF.exe
SUMATRA_RES = $(OS)\sumatrapdf.res

INSTALLER_APP   = $(O)\Installer.exe
INSTALLER_RES   = $(OS)\Installer.res
INSTALLER_DATA  = $(O)\InstallerData.dat
UNINSTALLER_APP = $(O)\uninstall.exe
UNINSTALLER_RES = $(OS)\Uninstaller.res

PDFFILTER_DLL = $(O)\PdfFilter.dll
PDFFILTER_RES = $(ODLL)\PdfFilter.res
PDFFILTER_CFLAGS = $(SUMATRA_CFLAGS)

LIBMUPDF_LIB = $(O)\libmupdf.lib
LIBMUPDF_DEF = $(SRCDIR)\libmupdf.def
LIBMUPDF_DLL = $(O)\libmupdf.dll
LIBMUPDF_RES = $(O)\libmupdf.res

PDFPREVIEW_DLL = $(O)\PdfPreview.dll
PDFPREVIEW_RES = $(ODLL)\PdfPreview.res
PDFPREVIEW_CFLAGS = $(SUMATRA_CFLAGS)

MEMTRACE_DLL = $(O)\memtrace.dll
MEMTRACE_RES = $(ODLL)\memtrace.res
MEMTRACE_CFLAGS = $(SUMATRA_CFLAGS)

ENGINEDUMP_APP = $(O)\EngineDump.exe
MAKELZSA_APP = $(O)\MakeLzSA.exe
TEST_UTIL_APP = $(O)\test_util.exe
SIGNFILE_APP = $(O)\signfile.exe
PLUGIN_TEST_APP = $(O)\plugin-test.exe

MUPDF_LIB   = $(O)\libmupdfs.lib
UNARR_LIB   = $(O)\unarr.lib
UTILS_LIB   = $(O)\utils.lib
MUI_LIB     = $(O)\mui.lib
ENGINES_LIB = $(O)\engines.lib
MAIN_UI_LIB = $(O)\sumatra.lib

SYMBOLS_LZSA= $(O)\SumatraPDF.pdb.lzsa

# these are all included in libmupdf.dll for reuse by PdfPreview.dll
FORMAT_LIBS = $(MUPDF_LIB) $(DJVU_OBJS) $(UNARR_LIB) $(WEBP_OBJS)

UTILS_OBJS = \
	$(OU)\FileUtil.obj $(OU)\HttpUtil.obj \
	$(OU)\StrUtil.obj $(OU)\WinUtil.obj $(OU)\GdiPlusUtil.obj \
	$(OU)\DialogSizer.obj $(OU)\FileTransactions.obj \
	$(OU)\TrivialHtmlParser.obj $(OU)\HtmlWindow.obj \
	$(OU)\DirIter.obj $(OU)\BitReader.obj $(OU)\HtmlPullParser.obj \
	$(OU)\HtmlPrettyPrint.obj $(OU)\ThreadUtil.obj $(OU)\DebugLog.obj \
	$(OU)\DbgHelpDyn.obj $(OU)\JsonParser.obj $(OU)\TgaReader.obj \
	$(OU)\HtmlParserLookup.obj $(OU)\ByteOrderDecoder.obj $(OU)\CmdLineParser.obj \
	$(OU)\UITask.obj $(OU)\StrFormat.obj $(OU)\Dict.obj $(OU)\BaseUtil.obj \
	$(OU)\CssParser.obj $(OU)\FileWatcher.obj $(OU)\CryptoUtil.obj \
	$(OU)\StrSlice.obj $(OU)\TxtParser.obj $(OU)\SerializeTxt.obj \
	$(OU)\SquareTreeParser.obj $(OU)\SettingsUtil.obj $(OU)\SplitterWnd.obj \
	$(OU)\WebpReader.obj $(OU)\FzImgReader.obj \
	$(OU)\ArchUtil.obj $(OU)\ZipUtil.obj $(OU)\LzmaSimpleArchive.obj \
	$(OU)\LabelWithCloseWnd.obj $(OU)\FrameRateWnd.obj \
	$(OU)\Dpi.obj $(OU)\EditCtrl.obj $(OU)\Win32Window.obj \
	$(OU)\WinDynCalls.obj

MUI_OBJS = \
	$(OMUI)\MuiBase.obj $(OMUI)\Mui.obj $(OMUI)\MuiCss.obj $(OMUI)\MuiLayout.obj \
	$(OMUI)\MuiPainter.obj $(OMUI)\MuiControl.obj $(OMUI)\MuiButton.obj \
	$(OMUI)\MuiScrollBar.obj $(OMUI)\MuiEventMgr.obj $(OMUI)\MuiHwndWrapper.obj \
	$(OMUI)\MuiGrid.obj $(OMUI)\SvgPath.obj $(OMUI)\MuiDefs.obj \
	$(OMUI)\MuiFromText.obj $(OMUI)\TextRender.obj

EBOOK_OBJS = \
	$(OS)\EbookDoc.obj $(OS)\MobiDoc.obj $(OU)\PalmDbReader.obj \
	$(OS)\HtmlFormatter.obj $(OS)\EbookFormatter.obj

ENGINE_OBJS = \
	$(OS)\PdfEngine.obj $(OS)\PsEngine.obj $(OS)\PdfCreator.obj \
	$(OS)\ImagesEngine.obj $(OS)\DjVuEngine.obj \
	$(OS)\EbookEngine.obj $(EBOOK_OBJS) $(OS)\ChmDoc.obj $(CHMLIB_OBJS) \
	$(OS)\EngineManager.obj $(OS)\FileModifications.obj

UIA_OBJS = \
	$(OUIA)\Provider.obj $(OUIA)\StartPageProvider.obj $(OUIA)\DocumentProvider.obj \
	$(OUIA)\PageProvider.obj $(OUIA)\TextRange.obj

MAIN_UI_OBJS = \
	$(OS)\AppPrefs.obj $(OS)\DisplayModel.obj $(OS)\CrashHandler.obj \
	$(OS)\Favorites.obj $(OS)\TextSearch.obj $(OS)\SumatraAbout.obj $(OS)\SumatraAbout2.obj \
	$(OS)\SumatraDialogs.obj $(OS)\SumatraProperties.obj $(OS)\GlobalPrefs.obj \
	$(OS)\PdfSync.obj $(OS)\RenderCache.obj $(OS)\TextSelection.obj \
	$(OS)\WindowInfo.obj $(OS)\ParseCommandLine.obj $(OS)\StressTesting.obj \
	$(OS)\AppTools.obj $(OS)\AppUtil.obj $(OS)\TableOfContents.obj \
	$(OS)\Toolbar.obj $(OS)\Print.obj $(OS)\Notifications.obj $(OS)\Selection.obj \
	$(OS)\Search.obj $(OS)\Menu.obj $(OS)\ExternalViewers.obj \
	$(OS)\EbookControls.obj $(OS)\EbookController.obj $(OS)\Doc.obj \
	$(OS)\MuiEbookPageDef.obj $(OS)\PagesLayoutDef.obj \
	$(OS)\Tester.obj $(OS)\Regress.obj \
	$(OS)\Translations.obj $(OS)\Trans_sumatra_txt.obj \
	$(OS)\Tabs.obj $(OS)\FileThumbnails.obj $(OS)\FileHistory.obj \
	$(OS)\ChmModel.obj $(OS)\Caption.obj $(OS)\Canvas.obj $(OS)\TabInfo.obj \
	$(UIA_OBJS)

SUMATRA_OBJS = \
	$(OS)\SumatraPDF.obj $(OS)\SumatraStartup.obj $(SUMATRA_RES) $(MAIN_UI_LIB) \
	$(UTILS_LIB) $(MUI_LIB) $(ENGINES_LIB) $(SYNCTEX_OBJS)

INSTALLER_OBJS = \
	$(OS)\Installer.obj $(INSTALLER_RES) $(OS)\CrashHandler.obj \
	$(UTILS_LIB) $(ZLIB_OBJS) $(UNARR_LIB) \
	$(OS)\Translations.obj $(OS)\Trans_installer_txt.obj

UNINSTALLER_OBJS = \
	$(OS)\Uninstaller.obj $(UNINSTALLER_RES) $(UTILS_LIB) \
	$(OS)\Translations.obj $(OS)\Trans_installer_txt.obj

PDFFILTER_OBJS = \
	$(ODLL)\PdfFilterDll.obj $(ODLL)\CPdfFilter.obj $(PDFFILTER_RES) \
	$(UTILS_LIB) $(LIBMUPDF_LIB) $(OS)\MuPDF_Exports.obj $(OS)\PdfEngine.obj

PDFPREVIEW_OBJS = \
	$(ODLL)\PdfPreviewDll.obj $(ODLL)\PdfPreview.obj $(PDFPREVIEW_RES) \
	$(UTILS_LIB) $(LIBMUPDF_LIB) $(OS)\MuPDF_Exports.obj $(OS)\PdfEngine.obj

ENGINEDUMP_OBJS = \
	$(OS)\EngineDump.obj $(ENGINES_LIB) $(FORMAT_LIBS) $(UTILS_LIB) $(OMUI)\MiniMui.obj $(OMUI)\TextRender.obj

MAKELZSA_OBJS = \
	$(OU)\MakeLzSA.obj $(UTILS_LIB) $(ZLIB_OBJS) $(LZMA_OBJS)

TEST_UTIL_OBJS = \
	$(OU)\test_util.obj $(OS)\UnitTests.obj $(UTILS_LIB) $(MUPDF_LIB) \
	$(OU)\UtAssert.obj $(OU)\VarintGob.obj $(OMUI)\SvgPath.obj \
	$(OU)\BaseUtil_ut.obj $(OU)\ByteOrderDecoder_ut.obj $(OU)\CmdLineParser_ut.obj \
	$(OU)\CryptoUtil_ut.obj $(OU)\CssParser_ut.obj $(OU)\Dict_ut.obj \
	$(OU)\FileUtil_ut.obj $(OU)\HtmlPrettyPrint_ut.obj $(OU)\HtmlPullParser_ut.obj \
	$(OU)\JsonParser_ut.obj $(OU)\SettingsUtil_ut.obj $(OU)\SimpleLog_ut.obj \
	$(OU)\SquareTreeParser_ut.obj $(OU)\StrFormat_ut.obj $(OU)\StrUtil_ut.obj \
	$(OU)\TrivialHtmlParser_ut.obj $(OU)\VarintGob_ut.obj $(OU)\Vec_ut.obj \
	$(OU)\WinUtil_ut.obj $(OMUI)\SvgPath_ut.obj $(OS)\AppUtil.obj

MEMTRACE_OBJS = \
	$(OM)\MemTraceDll.obj $(UTILS_LIB)

SIGNFILE_OBJS = \
	$(OU)\signfile.obj $(UTILS_LIB) $(MUPDF_LIB)

PLUGIN_TEST_OBJS = \
	$(OU)\plugin-test.obj $(UTILS_LIB)

!if "$(CFG)"=="dbg"
# build all optional IFilters for debug builds
BUILD_TEX_IFILTER = 1
BUILD_EPUB_IFILTER = 1
# build all optional previews for debug builds
BUILD_XPS_PREVIEW = 1
BUILD_DJVU_PREVIEW = 1
BUILD_EPUB_PREVIEW = 1
BUILD_FB2_PREVIEW = 1
BUILD_MOBI_PREVIEW = 1
BUILD_CBZ_PREVIEW = 1
BUILD_CBR_PREVIEW = 1
BUILD_CB7_PREVIEW = 1
BUILD_CBT_PREVIEW = 1
BUILD_TGA_PREVIEW = 1
!endif

!if "$(BUILD_TEX_IFILTER)"!=""
PDFFILTER_OBJS = $(PDFFILTER_OBJS) $(ODLL)\CTeXFilter.obj
PDFFILTER_CFLAGS = $(PDFFILTER_CFLAGS) /D "BUILD_TEX_IFILTER"
!endif

!if "$(BUILD_EPUB_IFILTER)"!=""
PDFFILTER_OBJS = $(PDFFILTER_OBJS) $(ODLL)\CEpubFilter.obj \
	$(OS)\EbookDoc.obj $(OS)\MobiDoc.obj $(OU)\PalmDbReader.obj
PDFFILTER_CFLAGS = $(PDFFILTER_CFLAGS) /D "BUILD_EPUB_IFILTER"
!endif

!if "$(BUILD_XPS_PREVIEW)"!=""
PDFPREVIEW_CFLAGS = $(PDFPREVIEW_CFLAGS) /D "BUILD_XPS_PREVIEW"
!endif

!if "$(BUILD_DJVU_PREVIEW)"!=""
PDFPREVIEW_CFLAGS = $(PDFPREVIEW_CFLAGS) /D "BUILD_DJVU_PREVIEW"
PDFPREVIEW_OBJS = $(PDFPREVIEW_OBJS) $(OS)\DjVuEngine.obj
!endif

!if "$(BUILD_EPUB_PREVIEW)$(BUILD_FB2_PREVIEW)$(BUILD_MOBI_PREVIEW)"!=""
PDFPREVIEW_OBJS = $(PDFPREVIEW_OBJS) $(OS)\EbookEngine.obj \
	$(EBOOK_OBJS) $(OS)\ChmDoc.obj $(CHMLIB_OBJS) \
	$(OMUI)\MiniMui.obj $(OMUI)\TextRender.obj
!if "$(BUILD_EPUB_PREVIEW)"!=""
PDFPREVIEW_CFLAGS = $(PDFPREVIEW_CFLAGS) /D "BUILD_EPUB_PREVIEW"
!endif
!if "$(BUILD_FB2_PREVIEW)"!=""
PDFPREVIEW_CFLAGS = $(PDFPREVIEW_CFLAGS) /D "BUILD_FB2_PREVIEW"
!endif
!if "$(BUILD_MOBI_PREVIEW)"!=""
PDFPREVIEW_CFLAGS = $(PDFPREVIEW_CFLAGS) /D "BUILD_MOBI_PREVIEW"
!endif
!endif

!if "$(BUILD_CBZ_PREVIEW)$(BUILD_CBR_PREVIEW)$(BUILD_CB7_PREVIEW)$(BUILD_CBT_PREVIEW)$(BUILD_TGA_PREVIEW)"!=""
PDFPREVIEW_OBJS = $(PDFPREVIEW_OBJS) $(OS)\ImagesEngine.obj $(OS)\PdfCreator.obj
!if "$(BUILD_CBZ_PREVIEW)"!=""
PDFPREVIEW_CFLAGS = $(PDFPREVIEW_CFLAGS) /D "BUILD_CBZ_PREVIEW"
!endif
!if "$(BUILD_CBR_PREVIEW)"!=""
PDFPREVIEW_CFLAGS = $(PDFPREVIEW_CFLAGS) /D "BUILD_CBR_PREVIEW"
!endif
!if "$(BUILD_CB7_PREVIEW)"!=""
PDFPREVIEW_CFLAGS = $(PDFPREVIEW_CFLAGS) /D "BUILD_CB7_PREVIEW"
!endif
!if "$(BUILD_CBT_PREVIEW)"!=""
PDFPREVIEW_CFLAGS = $(PDFPREVIEW_CFLAGS) /D "BUILD_CBT_PREVIEW"
!endif
!if "$(BUILD_TGA_PREVIEW)"!=""
PDFPREVIEW_CFLAGS = $(PDFPREVIEW_CFLAGS) /D "BUILD_TGA_PREVIEW"
!endif
!endif

CJK_FALLBACK_FONT = $(MUPDF_DIR)\resources\fonts\droid\DroidSansFallback.ttf

##### SumatraPDF-specific build rules #####

rebuild: clean all_sumatrapdf

rebuildquick: clean OnlySumatraPDF

cleanmupdf: force
	-del $(FITZ_DRAW_OBJS) $(FITZ_OBJS) $(MUPDF_OBJS) $(MUXPS_OBJS) $(MUCBZ_OBJS)

cleanall: force
	-rmdir /S /Q obj-dbg obj-rel

OnlySumatraPDF: $(OS) $(SUMATRA_APP)
SumatraPDF:    $(OS) $(SUMATRA_APP) $(SUMATRA_APP_NO_MUPDF)
Installer:     $(OS) $(INSTALLER_APP)
Uninstaller:   $(OS) $(UNINSTALLER_APP)
PDFFilter:     $(OS) $(PDFFILTER_DLL)
PdfPreview:    $(OS) $(PDFPREVIEW_DLL)
EngineDump:    $(OS) $(ENGINEDUMP_APP)
MakeLzsa:      $(OS) $(MAKELZSA_APP)
UnitTest:      $(OS) $(TEST_UTIL_APP)
AllSymbols:    $(O)  $(SYMBOLS_LZSA)
memtrace:      $(OS) $(MEMTRACE_DLL)
mudraw:        $(O)  $(MUDRAW_APP)
mutool:        $(O)  $(MUTOOL_APP)
signfile:      $(OU) $(SIGNFILE_APP)
plugin-test:   $(OU) $(PLUGIN_TEST_APP)

$(OS): $(O) $(OE)
	@if not exist $(OS) mkdir $(OS)
	@if not exist $(OU) mkdir $(OU)
	@if not exist $(ODLL) mkdir $(ODLL)
	@if not exist $(OMUI) mkdir $(OMUI)
	@if not exist $(OM) mkdir $(OM)
	@if not exist $(OUIA) mkdir $(OUIA)

$(SUMATRA_RES): $(SRCDIR)\SumatraPDF.rc $(SRCDIR)\Resource.h $(SRCDIR)\Version.h $(SRCDIR)\EbookWinDesc.txt
	rc /r /fo$@ $(RC_FLAGS) $(SRCDIR)\SumatraPDF.rc

$(SUMATRA_APP): $(SUMATRA_OBJS) $(FORMAT_LIBS)
	$(LD) $(LDFLAGS) $** $(LIBS) /PDB:$*.pdb /OUT:$@

$(SUMATRA_APP_NO_MUPDF): $(SUMATRA_OBJS) $(LIBMUPDF_LIB) $(OS)\MuPDF_Exports.obj
	$(LD) $(LDFLAGS) $** $(LIBS) /PDB:$*.pdb /OUT:$@

$(LIBMUPDF_RES): $(SRCDIR)\libmupdf.rc $(SRCDIR)\Version.h
	rc /r /fo$@ $(RC_FLAGS) $(SRCDIR)\libmupdf.rc

$(LIBMUPDF_DLL): $(FORMAT_LIBS) $(LIBMUPDF_RES) $(LIBMUPDF_DEF)
	$(LD) /DLL $(LDFLAGS) $(FORMAT_LIBS) $(LIBMUPDF_RES) $(LIBS) /DEF:$(LIBMUPDF_DEF) /IMPLIB:$(LIBMUPDF_LIB) /PDB:$*.pdb /OUT:$@

$(LIBMUPDF_LIB): $(LIBMUPDF_DLL)

$(INSTALLER_DATA): $(MAKELZSA_APP) $(SUMATRA_APP_NO_MUPDF) $(LIBMUPDF_DLL) $(CJK_FALLBACK_FONT) $(PDFFILTER_DLL) $(PDFPREVIEW_DLL) $(UNINSTALLER_APP)
	$(MAKELZSA_APP) $@ $(SUMATRA_APP_NO_MUPDF):SumatraPDF.exe $(LIBMUPDF_DLL):libmupdf.dll $(CJK_FALLBACK_FONT):DroidSansFallback.ttf $(PDFFILTER_DLL):PdfFilter.dll $(PDFPREVIEW_DLL):PdfPreview.dll $(UNINSTALLER_APP):uninstall.exe

$(INSTALLER_RES): $(SRCDIR)\installer\Installer.rc $(SRCDIR)\installer\Resource.h $(SRCDIR)\Version.h $(INSTALLER_DATA)
	rc /r /fo$@ $(RC_FLAGS) /D "INSTALL_PAYLOAD_ZIP=..\..\$(INSTALLER_DATA)" $(SRCDIR)\installer\Installer.rc

$(UNINSTALLER_RES): $(SRCDIR)\installer\Installer.rc $(SRCDIR)\installer\Resource.h $(SRCDIR)\Version.h
	rc /r /fo$@ $(RC_FLAGS) /D "BUILD_UNINSTALLER" $(SRCDIR)\installer\Installer.rc

$(INSTALLER_APP): $(INSTALLER_OBJS)
	$(LD) $(LDFLAGS) $** $(LIBS) /PDB:$*.pdb /OUT:$@

$(UNINSTALLER_APP): $(UNINSTALLER_OBJS)
	$(LD) $(LDFLAGS) $** $(LIBS) /PDB:$*.pdb /OUT:$@

$(PDFFILTER_RES): $(SRCDIR)\ifilter\PdfFilter.rc $(SRCDIR)\Version.h
	rc /r /fo$@ $(RC_FLAGS) $(SRCDIR)\ifilter\PdfFilter.rc

$(PDFFILTER_DLL): $(PDFFILTER_OBJS)
	$(LD) /DLL $(LDFLAGS) $** $(LIBS) /PDB:$*.pdb /OUT:$@

$(PDFPREVIEW_RES): $(SRCDIR)\previewer\PdfPreview.rc $(SRCDIR)\Version.h
	rc /r /fo$@ $(RC_FLAGS) $(SRCDIR)\previewer\PdfPreview.rc

$(PDFPREVIEW_DLL): $(PDFPREVIEW_OBJS)
	$(LD) /DLL $(LDFLAGS) $** $(LIBS) /PDB:$*.pdb /OUT:$@

$(MEMTRACE_RES): $(SRCDIR)\memtrace\MemTrace.rc
	rc /r /fo$@ $(RC_FLAGS) $(SRCDIR)\memtrace\MemTrace.rc

$(MEMTRACE_DLL): $(MEMTRACE_OBJS)
	$(LD) /DLL $(LDFLAGS) $** $(LIBS) /PDB:$*.pdb /OUT:$@

$(ENGINEDUMP_APP): $(ENGINEDUMP_OBJS)
	$(LD) $(LDFLAGS) $** $(LIBS) /PDB:$*.pdb /OUT:$@ /SUBSYSTEM:CONSOLE

$(MAKELZSA_APP): $(MAKELZSA_OBJS)
	$(LD) $(LDFLAGS) $** $(LIBS) /PDB:$*.pdb /OUT:$@ /SUBSYSTEM:CONSOLE

$(TEST_UTIL_APP): $(TEST_UTIL_OBJS)
	$(LD) $(LDFLAGS) $** $(LIBS) /PDB:$*.pdb /OUT:$@ /SUBSYSTEM:CONSOLE

$(SIGNFILE_APP): $(SIGNFILE_OBJS)
	$(LD) $(LDFLAGS) $** $(LIBS) /PDB:$*.pdb /OUT:$@ /SUBSYSTEM:CONSOLE

$(PLUGIN_TEST_APP): $(PLUGIN_TEST_OBJS)
	$(LD) $(LDFLAGS) $** $(LIBS) /PDB:$*.pdb /OUT:$@

{$(SRCDIR)\utils}.cpp{$(OU)}.obj::
	$(CC) $(UTILS_CFLAGS) /Fo$(OU)\ /Fd$(O)\vc80.pdb $<

{$(SRCDIR)\wingui}.cpp{$(OU)}.obj::
	$(CC) $(UTILS_CFLAGS) /Fo$(OU)\ /Fd$(O)\vc80.pdb $<

{$(SRCDIR)\mui}.cpp{$(OMUI)}.obj::
	$(CC) $(UTILS_CFLAGS) /Fo$(OMUI)\ /Fd$(O)\vc80.pdb $<

{$(SRCDIR)\tools}.cpp{$(OU)}.obj::
	$(CC) $(UTILS_CFLAGS) /Fo$(OU)\ /Fd$(O)\vc80.pdb $<

{$(SRCDIR)\utils\tests}.cpp{$(OU)}.obj::
	$(CC) $(UTILS_CFLAGS) /Fo$(OU)\ /Fd$(O)\vc80.pdb $<

{$(SRCDIR)\uia}.cpp{$(OUIA)}.obj::
	$(CC) $(SUMATRA_CFLAGS) /Fo$(OUIA)\ /Fd$(O)\vc80.pdb $<

{$(SRCDIR)}.cpp{$(OS)}.obj::
	$(CC) $(SUMATRA_CFLAGS) /Fo$(OS)\ /Fd$(O)\vc80.pdb $<

{$(SRCDIR)\ifilter}.cpp{$(ODLL)}.obj::
	$(CC) $(PDFFILTER_CFLAGS) /Fo$(ODLL)\ /Fd$(O)\vc80.pdb $<

{$(SRCDIR)\previewer}.cpp{$(ODLL)}.obj::
	$(CC) $(PDFPREVIEW_CFLAGS) /Fo$(ODLL)\ /Fd$(O)\vc80.pdb $<

{$(SRCDIR)\regress}.cpp{$(OS)}.obj::
	$(CC) $(SUMATRA_CFLAGS) /Fo$(OS)\ /Fd$(O)\vc80.pdb $<

{$(SRCDIR)\installer}.cpp{$(OS)}.obj::
	$(CC) $(INSTALLER_CFLAGS) /Fo$(OS)\ /Fd$(O)\vc80.pdb $<
$(OS)\Uninstaller.obj: $(OS)\Installer.obj
	$(CC) $(UNINSTALLER_CFLAGS) /Fo$(OS)\Uninstaller.obj /Fd$(O)\vc80.pdb $(SRCDIR)\installer\Installer.cpp

{$(SRCDIR)\memtrace}.cpp{$(OM)}.obj::
	$(CC) $(MEMTRACE_CFLAGS) /Fo$(OM)\ /Fd$(O)\vc80.pdb $<

$(MUPDF_LIB): $(MUPDF_ALL_OBJS)
	lib $(LIB_FLAGS) /OUT:$@ $**

$(UNARR_LIB): $(UNARR_OBJS) $(BZIP2_OBJS) $(LZMA_OBJS) $(_7Z_OBJS)
	lib $(LIB_FLAGS) /OUT:$@ $**

$(UTILS_LIB): $(UTILS_OBJS)
	lib $(LIB_FLAGS) /OUT:$@ $**

$(MUI_LIB): $(MUI_OBJS)
	lib $(LIB_FLAGS) /OUT:$@ $**

$(ENGINES_LIB): $(ENGINE_OBJS)
	lib $(LIB_FLAGS) /OUT:$@ $**

$(MAIN_UI_LIB): $(MAIN_UI_OBJS)
	lib $(LIB_FLAGS) /OUT:$@ $**

$(SYMBOLS_LZSA): $(MAKELZSA_APP) $(SUMATRA_APP) $(INSTALLER_APP)
	$(MAKELZSA_APP) $@ $(O)\libmupdf.pdb:libmupdf.pdb $(O)\Installer.pdb:Installer.pdb $(O)\SumatraPDF-no-MuPDF.pdb:SumatraPDF-no-MuPDF.pdb $(O)\SumatraPDF.pdb:SumatraPDF.pdb

## Header-dependencies for $(SRCDIR)\* and $(SRCDIR)\*\*
!INCLUDE makefile.deps