# Simple Makefile for Highlight
# This file will compile the highlight binary.
# See INSTALL for instructions.

# Add -DCUSTOM_INSTALL_DIR=\"/your/path/\" to CFLAGS if you want to define a
# custom installation directory not listed in INSTALL.
# Copy /langDefs/extensions.conf, /langDefs, /themes amd /indentSchemes to /your/path/.

# Add -DCONFIG_FILE_PATH=\"/your/path/.highlightrc\" if you want to define a
# custom path to the highlight configuration file (default: $HOME/.highlightrc)

# Add -DUSE_FN_MATCH to enable better wildcard support with the --batch-recursive option.
# See "man 3 fnmatch" for details. fnmatch is a POSIX2 compliant function.

CXX=c++

CFLAGS := -O3 -Wall -pedantic

LDFLAGS = -L/usr/lib -s

CXX_COMPILE = ${CXX} ${CFLAGS} -c
CXX_LINK = ${CXX} ${LDFLAGS} -o highlight ${OBJECTFILES}

OBJECTFILES :=  main.o configurationreader.o stylecolour.o stringtools.o \
	xhtmlgenerator.o latexgenerator.o texgenerator.o xslfogenerator.o rtfgenerator.o \
	htmlgenerator.o ansigenerator.o xmlgenerator.o codegenerator.o \
	languagedefinition.o help.o elementstyle.o documentstyle.o \
	datadir.o cmdlineoptions.o preformatter.o \
	ASStreamIterator.o ASResource.o ASFormatter.o ASBeautifier.o \
	dirstream.o dirstream_w32_posix.o platform_fs.o

# Third-Party software paths
DIRSTREAM_DIR = ./dirstream0.4/

ifeq ($(USE_LOCAL_GETOPT),true)
	OBJECTFILES:=${OBJECTFILES} getopt.o
	CFLAGS:=${CFLAGS} -DUSE_LOCAL_GETOPT
endif


highlight: ${OBJECTFILES}
	${CXX_LINK}


ansigenerator.o: ansigenerator.cpp ansigenerator.h codegenerator.h \
  languagedefinition.h configurationreader.h stringtools.h enums.h \
  documentstyle.h elementstyle.h stylecolour.h ASFormatter.h \
  ASBeautifier.h ASResource.h compiler_defines.h ASStreamIterator.h \
  ASSourceIterator.h preformatter.h charcodes.h version.h
	${CXX_COMPILE} ansigenerator.cpp
ASBeautifier.o: ASBeautifier.cpp compiler_defines.h ASBeautifier.h \
  ASResource.h ASStreamIterator.h ASSourceIterator.h
	${CXX_COMPILE} ASBeautifier.cpp

ASFormatter.o: ASFormatter.cpp compiler_defines.h ASFormatter.h \
  ASBeautifier.h ASResource.h ASStreamIterator.h ASSourceIterator.h
	${CXX_COMPILE} ASFormatter.cpp

ASResource.o: ASResource.cpp compiler_defines.h ASResource.h \
  ASStreamIterator.h ASSourceIterator.h
	${CXX_COMPILE} ASResource.cpp

ASStreamIterator.o: ASStreamIterator.cpp compiler_defines.h \
  ASStreamIterator.h ASSourceIterator.h
	${CXX_COMPILE} ASStreamIterator.cpp

cmdlineoptions.o: cmdlineoptions.cpp cmdlineoptions.h stringtools.h \
  configurationreader.h datadir.h platform_fs.h enums.h
	${CXX_COMPILE} cmdlineoptions.cpp

codegenerator.o: codegenerator.cpp codegenerator.h languagedefinition.h \
  configurationreader.h stringtools.h enums.h documentstyle.h \
  elementstyle.h stylecolour.h ASFormatter.h ASBeautifier.h ASResource.h \
  compiler_defines.h ASStreamIterator.h ASSourceIterator.h preformatter.h \
  htmlgenerator.h version.h charcodes.h xhtmlgenerator.h rtfgenerator.h \
  latexgenerator.h texgenerator.h xslfogenerator.h ansigenerator.h
	${CXX_COMPILE} codegenerator.cpp

configurationreader.o: configurationreader.cpp configurationreader.h \
  stringtools.h
	${CXX_COMPILE} configurationreader.cpp

datadir.o: datadir.cpp datadir.h platform_fs.h
	${CXX_COMPILE} datadir.cpp

dirstream.o:  ${DIRSTREAM_DIR}dirstream.cpp ${DIRSTREAM_DIR}dirstream.h
	${CXX_COMPILE} ${DIRSTREAM_DIR}dirstream.cpp

dirstream_w32_posix.o:  ${DIRSTREAM_DIR}dirstream_w32_posix.cpp ${DIRSTREAM_DIR}dirstream.h
	${CXX_COMPILE} ${DIRSTREAM_DIR}dirstream_w32_posix.cpp

platform_fs.o: platform_fs.cpp platform_fs.h ${DIRSTREAM_DIR}dirstream.h
	${CXX_COMPILE} platform_fs.cpp

documentstyle.o: documentstyle.cpp documentstyle.h configurationreader.h \
  stringtools.h elementstyle.h stylecolour.h
	${CXX_COMPILE} documentstyle.cpp

elementstyle.o: elementstyle.cpp elementstyle.h stylecolour.h
	${CXX_COMPILE} elementstyle.cpp

getopt.o: getopt.cpp
	${CXX_COMPILE} getopt.cpp

help.o: help.cpp help.h
	${CXX_COMPILE} help.cpp

htmlgenerator.o: htmlgenerator.cpp htmlgenerator.h codegenerator.h \
  languagedefinition.h configurationreader.h platform_fs.h enums.h \
  documentstyle.h elementstyle.h stylecolour.h ASFormatter.h \
  ASBeautifier.h ASResource.h compiler_defines.h ASStreamIterator.h \
  ASSourceIterator.h preformatter.h version.h charcodes.h
	${CXX_COMPILE} htmlgenerator.cpp

languagedefinition.o: languagedefinition.cpp languagedefinition.h \
  configurationreader.h platform_fs.h enums.h
	${CXX_COMPILE} languagedefinition.cpp

latexgenerator.o: latexgenerator.cpp latexgenerator.h codegenerator.h \
  languagedefinition.h configurationreader.h stringtools.h enums.h \
  documentstyle.h elementstyle.h stylecolour.h ASFormatter.h \
  ASBeautifier.h ASResource.h compiler_defines.h ASStreamIterator.h \
  ASSourceIterator.h preformatter.h version.h charcodes.h
	${CXX_COMPILE} latexgenerator.cpp

preformatter.o: preformatter.cpp preformatter.h stringtools.h
	${CXX_COMPILE} preformatter.cpp

main.o: main.cpp main.h cmdlineoptions.h platform_fs.h \
  configurationreader.h datadir.h enums.h codegenerator.h \
  languagedefinition.h documentstyle.h elementstyle.h \
  stylecolour.h ASFormatter.h ASBeautifier.h ASResource.h \
  compiler_defines.h ASStreamIterator.h ASSourceIterator.h preformatter.h \
  help.h version.h
	${CXX_COMPILE} main.cpp

rtfgenerator.o: rtfgenerator.cpp rtfgenerator.h codegenerator.h \
  languagedefinition.h configurationreader.h stringtools.h enums.h \
  documentstyle.h elementstyle.h stylecolour.h ASFormatter.h \
  ASBeautifier.h ASResource.h compiler_defines.h ASStreamIterator.h \
  ASSourceIterator.h preformatter.h charcodes.h version.h
	${CXX_COMPILE} rtfgenerator.cpp

stringtools.o: stringtools.cpp stringtools.h
	${CXX_COMPILE} stringtools.cpp

stylecolour.o: stylecolour.cpp stylecolour.h
	${CXX_COMPILE} stylecolour.cpp

texgenerator.o: texgenerator.cpp texgenerator.h charcodes.h version.h \
  codegenerator.h languagedefinition.h configurationreader.h \
  stringtools.h enums.h documentstyle.h elementstyle.h stylecolour.h \
  ASFormatter.h ASBeautifier.h ASResource.h compiler_defines.h \
  ASStreamIterator.h ASSourceIterator.h preformatter.h
	${CXX_COMPILE} texgenerator.cpp

xhtmlgenerator.o: xhtmlgenerator.cpp xhtmlgenerator.h htmlgenerator.h \
  codegenerator.h languagedefinition.h configurationreader.h \
  stringtools.h enums.h documentstyle.h elementstyle.h stylecolour.h \
  ASFormatter.h ASBeautifier.h ASResource.h compiler_defines.h \
  ASStreamIterator.h ASSourceIterator.h preformatter.h version.h \
  charcodes.h
	${CXX_COMPILE} xhtmlgenerator.cpp

xslfogenerator.o: xslfogenerator.cpp xslfogenerator.h codegenerator.h \
  languagedefinition.h configurationreader.h stringtools.h enums.h \
  documentstyle.h elementstyle.h stylecolour.h ASFormatter.h \
  ASBeautifier.h ASResource.h compiler_defines.h ASStreamIterator.h \
  ASSourceIterator.h preformatter.h version.h
	${CXX_COMPILE} xslfogenerator.cpp

xmlgenerator.o: xmlgenerator.cpp xmlgenerator.h codegenerator.h \
  languagedefinition.h configurationreader.h stringtools.h enums.h \
  documentstyle.h elementstyle.h stylecolour.h ASFormatter.h \
  ASBeautifier.h ASResource.h compiler_defines.h ASStreamIterator.h \
  ASSourceIterator.h preformatter.h version.h
	${CXX_COMPILE} xmlgenerator.cpp

clean:
	@rm -f *.o
	@rm -f ./highlight
	@rm -f ./.deps/*
