#
# Jamrules -- build configurations
#
# The default build is for debugging. To compile a release
# build, add -sBUILD=release to the jam command line. To provide
# a custom build you can use any name you want instead of release
# or debug.
#
# JBIG2 and JPEG2000 support is optional. To compile with this,
# add the following to the jam command line:
#
#   -sHAVE_JBIG2DEC=true
#   -sHAVE_JASPER=true
#
# Windows builds assume that third party headers and
# libraries are in c:/local/include and c:/local/lib.
#
# MacOS X builds assume that you have third party libraries installed
# from MacPorts in /opt/local.
#
# Linux builds assume that you have freetype-config to find the paths
# to the freetype library.
#
# To override these defaults, please supply the paths on the jam
# command line with -sTHIRDPARTINC and -sTHIRDPARTYLIB.
#
#   -sTHIRDPARTYINC="-Ic:/wherever/include"
#   -sTHIRDPARTYLIB="-Lc:/wherever/lib"
#

# Workaround for different OS/OSPLAT settings on FTJam and plain jam
if $(JAM_TOOLSET) = MINGW   { OS = MINGW ; }
if $(JAM_TOOLSET) = VISUALC { OS = NT ; }

BUILD ?= debug ;

# Place all build products here:
ALL_LOCATE_TARGET ?= [ FDirName $(TOP) build $(OS:L)-$(OSPLAT:L)-$(BUILD:L) ] ;

# Add compile time defines for JBIG2 and JPEG2000 support.
if $(HAVE_JBIG2DEC) { DEFINES += HAVE_JBIG2DEC ; }
if $(HAVE_JASPER)   { DEFINES += HAVE_JASPER ; }

# NEED_STRLCPY = true ;
# NEED_STRSEP = true ;
# NEED_GETOPT = true ;

if $(OS) = LINUX
{
    Echo Building for LINUX ;

    THIRDPARTYINC ?= "`freetype-config --cflags`" ;
    THIRDPARTYLIB ?= "`freetype-config --libs`" -L/usr/X11R6/lib ;

    NEED_STRLCPY = true ;
    NEED_STRSEP = true ;
    NEED_GETOPT = true ;

    BUILD_X11APP = true ;

    CCFLAGS = -Wall -std=c99 $(THIRDPARTYINC) ;
    LINKFLAGS = $(THIRDPARTYLIB) ;
    LINKLIBS = -lfreetype -ljpeg -lz -lm ;
    APPLINKLIBS = -lX11 -lXext ;

    if $(BUILD) = debug   { OPTIM = -g -O0 ; }
    if $(BUILD) = release { OPTIM = -O3 ; }

    if $(HAVE_JBIG2DEC) { LINKLIBS += -ljbig2dec ; }
    if $(HAVE_JASPER)	{ LINKLIBS += -ljasper ; }
}

if $(OS) = MACOSX
{
    Echo Building for MACOSX ;

    BUILD_X11APP = true ;

    THIRDPARTYINC ?= -I/opt/local/include -I/opt/local/include/freetype2 -I/usr/X11R6/include ;
    THIRDPARTYLIB ?= -L/opt/local/lib -L/usr/X11R6/lib ;

    CCFLAGS = -Wall -std=c99 $(THIRDPARTYINC) ;
    LINKFLAGS = $(THIRDPARTYLIB) ;
    LINKLIBS = -lfreetype -ljpeg -lz -lm ;
    APPLINKLIBS = -lX11 -lXext ;

    if $(BUILD) = debug   { OPTIM = -g -O0 ; }
    if $(BUILD) = release { OPTIM = -O3 ; }

    if $(HAVE_JBIG2DEC) { LINKLIBS += -ljbig2dec ; }
    if $(HAVE_JASPER)	{ LINKLIBS += -ljasper ; }
}

if $(OS) = MINGW
{
    Echo Building for MINGW ;

    NOARSCAN = true ;

    BUILD_WINAPP = true ;
    BUILD_PLUGIN = true ;

    THIRDPARTYINC ?= -Ic:/local/include ;
    THIRDPARTYLIB ?= -Lc:/local/lib ;

    NEED_STRLCPY = true ;
    NEED_STRSEP = true ;
    NEED_GETOPT = true ;

    CCFLAGS = -Wall -std=c99 $(THIRDPARTYINC) ;
    LINKFLAGS = $(THIRDPARTYLIB) ;
    LINKLIBS = -lfreetype -ljpeg -lz ;
    APPLINKLIBS = -lgdi32 -lcomdlg32 -luser32 -ladvapi32 -lshell32 -mwindows ;

    if $(BUILD) = debug   { OPTIM = -g -O0 ; }
    if $(BUILD) = release { OPTIM = -O3 ; }

    if $(HAVE_JBIG2DEC) { LINKLIBS += -ljbig2dec ; }
    if $(HAVE_JASPER)	{ LINKLIBS += -ljasper ; }

    actions WindRes { windres -i $(>) -o $(<) --include-dir=$(>:D) }
}

if $(OS) = NT
{
    Echo Building for MSVC ;

    DEFINES += MSVC ;

    BUILD_WINAPP = true ;

    THIRDPARTYINC ?= /Ic:/local/include ;
    THIRDPARTYLIB ?= /LIBPATH:c:/local/lib ;

    NEED_STRLCPY = true ;
    NEED_STRSEP = true ;
    NEED_GETOPT = true ;

    CCFLAGS = $(THIRDPARTYINC) ;
    LINKFLAGS = $(THIRDPARTYLIB) ;
    LINKLIBS = freetype.lib jpeg.lib z.lib ;
    APPLINKLIBS = gdi32.lib comdlg32.lib user32.lib advapi32.lib shell32.lib ;

    if $(BUILD) = debug   { }
    if $(BUILD) = release { }

    if $(HAVE_JBIG2DEC) { LINKLIBS += jbig2dec.lib ; }
    if $(HAVE_JASPER)	{ LINKLIBS += jasper.lib ; }

    actions WindRes { rc /fo $(<) $(>) }
}

# Set some DEFINES based on missing platform features

if $(NEED_STRLCPY)  { DEFINES += NEED_STRLCPY ; }
if $(NEED_STRSEP)   { DEFINES += NEED_STRSEP ; }
if $(NEED_GETOPT)   { DEFINES += NEED_GETOPT ; }

# WindRes rule for compiling the windows viewer and plugin

rule UserObject
{
    switch $(>)
    {
	case *.rc : WindRes $(<) : $(>) ;
	case * : Echo "unknown suffix on" $(>) ;
    }
}

rule WindRes
{
    Depends $(<) : $(>) ;
    Clean clean : $(<) ;
}

