# This file is part of the pdr/pdx project.
# Copyright (C) 2010 Torsten Mueller, Bern, Switzerland
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

#---------------------------------------------------------------------------
# built time definitions
# (comment lines by # to deactivate them)

# if DEBUG is defined the binaries are build for debugging purpose,
# note: these binaries are slow and much bigger than without DEBUG, do
# not install such binaries onto your system
#DEBUG=1

# define the use of databases, this options determine the compilation and
# linking of adequate source files and libraries, at least one database type
# has to be activated here
USE_SQLITE=1
USE_MYSQL=1

# define USE_READLINE if you want to use the extended line editing and input
# history management functions of the readline library in pdx's interactive
# mode, if you don't use readline pdx will be based upon the very simple and
# straight forward stdin
USE_READLINE=1

# define the use of image drawing engines, you can define USE_BOARD to
# make pdx use the light weight board library for drawing SVG images,
# furthermore you can define USE_CAIRO to make pdx able to draw images
# in several other formats like PNG, PS, PDF and others
USE_BOARD=1
USE_CAIRO=1

# the install path, normally this would be /usr/local, the binaries get then
# into /usr/local/bin, any libraries into /usr/local/lib and so on
PREFIX=/usr/local

#---------------------------------------------------------------------------
ifdef USE_SQLITE
  ifdef DEBUG
    LIB_SQLITE=-lPocoSQLited
  else
    LIB_SQLITE=-lPocoSQLite
  endif
  CCFLAGS_SQLITE=-DUSE_SQLITE
else
  O_PDR_SQLITE=
  O_PDX_MYSQL=
  LIB_SQLITE=
  CCFLAGS_SQLITE=
endif

ifdef USE_MYSQL
  ifdef DEBUG
    LIB_MYSQL=-lPocoMySQLd
  else
    LIB_MYSQL=-lPocoMySQL
  endif
  CCFLAGS_MYSQL=-DUSE_MYSQL
else
  O_PDR_MYSQL=
  O_PDX_MYSQL=
  LIB_MYSQL=
  CCFLAGS_MYSQL=
endif

ifdef USE_READLINE
  LIB_READLINE=-lreadline -lhistory
  CCFLAGS_READLINE=-DUSE_READLINE
else
  LIB_READLINE=
  CCFLAGS_READLINE=
endif

ifdef USE_BOARD
  LIB_BOARD=-lboard
  CCFLAGS_BOARD=-DUSE_BOARD
else
  LIB_BOARD=
  CCFLAGS_BOARD=
endif

ifdef USE_CAIRO
  LIB_CAIRO=-lcairo
  CCFLAGS_CAIRO=-DUSE_CAIRO
else
  LIB_CAIRO=
  CCFLAGS_CAIRO=
endif

O_LIB=\
	src/libpdrx/config.o\
	src/libpdrx/datatypes.o\
	src/libpdrx/encoding.o\
	src/libpdrx/poco_db.o

O_PDR=\
	src/pdr/pdr.o\
	src/pdr/db.o\
	src/pdr/db_impl.o\
	src/pdr/db_impl_sqlite.o\
	src/pdr/db_impl_mysql.o\
	src/pdr/in.o\
	src/pdr/in_impl.o\
	src/pdr/in_impl_expr.o\
	src/pdr/in_impl_pop3.o\
	src/pdr/in_impl_txt.o\
	src/pdr/in_impl_csv.o\
	src/pdr/in_impl_xml.o\
	src/pdr/in_impl_interactive.o\
	src/pdr/out.o\
	src/pdr/out_impl_xml.o

O_PDX=\
	src/pdx/pdx.o\
	src/pdx/db.o\
	src/pdx/db_impl.o\
	src/pdx/db_impl_sqlite.o\
	src/pdx/db_impl_mysql.o\
	src/pdx/out.o\
	src/pdx/out_impl.o\
	src/pdx/out_ftree.o\
	src/pdx/out_func.o\
	src/pdx/out_impl_interactive.o\
	src/pdx/out_impl_report.o\
	src/pdx/out_impl_diagram.o\
	src/pdx/diagram.o\
	src/pdx/diagram_impl.o\
	src/pdx/diagram_impl_svg.o\
	src/pdx/diagram_impl_cairo.o

LDFLAGS=-L/usr/lib -L/usr/local/lib -Lsrc/libpdrx

ifdef DEBUG
CCFLAGS=-g -Wall -fPIC $(CCFLAGS_SQLITE) $(CCFLAGS_MYSQL) $(CCFLAGS_READLINE) $(CCFLAGS_BOARD) $(CCFLAGS_CAIRO) -DDEBUG
LIB=\
	-lboost_regex\
	-lboost_date_time\
	-lboost_filesystem\
	-lboost_program_options\
	-lPocoXMLd\
	-lPocoNetd\
	$(LIB_SQLITE) $(LIB_MYSQL) $(LIB_READLINE) $(LIB_BOARD) $(LIB_CAIRO)
else
CCFLAGS=-O2 -fPIC $(CCFLAGS_SQLITE) $(CCFLAGS_MYSQL) $(CCFLAGS_READLINE) $(CCFLAGS_BOARD) $(CCFLAGS_CAIRO)
LIB=\
	-lboost_regex\
	-lboost_date_time\
	-lboost_filesystem\
	-lboost_program_options\
	-lPocoXML\
	-lPocoNet\
	$(LIB_SQLITE) $(LIB_MYSQL) $(LIB_READLINE) $(LIB_BOARD) $(LIB_CAIRO)
endif

#---------------------------------------------------------------------------
.PHONY:					all clean depend actual install

all:					pdr pdx

clean:
	rm -f $(O_LIB) $(O_PDR) $(O_PDX)
	rm -f src/pdx/build.h
	rm -f src/libpdrx/libpdrx.a pdr pdx
	rm -f Makefile.bak
	rm -f t
	echo '#define BUILD "' > t
	date +%Y-%m-%d' '%H:%M:%S >> t
	echo ' on ' >> t
	uname -n >> t
	echo ', ' >> t
	uname -o >> t
	echo ' ' >> t
	uname -r >> t
	echo ' ' >> t
	uname -m >> t
ifdef USE_SQLITE
	echo ', USE_SQLITE' >> t
endif
ifdef USE_MYSQL
	echo ', USE_MYSQL' >> t
endif
ifdef USE_READLINE
	echo ', USE_READLINE' >> t
endif
ifdef USE_BOARD
	echo ', USE_BOARD' >> t
endif
ifdef USE_CAIRO
	echo ', USE_CAIRO' >> t
endif
	echo '"' >> t
	sed -e':a;N;s/\n//;ta' <t >src/libpdrx/build.h
	rm -f t

depend:
	makedepend -Y. src/libpdrx/*.cc 2> /dev/null
	makedepend -a -Y. src/pdr/*.cc  2> /dev/null
	makedepend -a -Y. src/pdx/*.cc  2> /dev/null
	rm Makefile.bak

install:				pdr pdx
	cp pdr pdx $(PREFIX)/bin
	chmod a+x $(PREFIX)/bin/pdr
	chmod a+x $(PREFIX)/bin/pdx

#---------------------------------------------------------------------------
src/libpdrx/libpdrx.a:			$(O_LIB)
	ar rc src/libpdrx/libpdrx.a $(O_LIB)
	ranlib src/libpdrx/libpdrx.a

pdr:					src/libpdrx/libpdrx.a $(O_PDR)
	g++ $(CCFLAGS) $(LDFLAGS) -o pdr $(O_PDR) $(LIB) -lpdrx
ifndef DEBUG
	strip --strip-all pdr
endif

pdx:					src/libpdrx/libpdrx.a $(O_PDX)
	g++ $(CCFLAGS) $(LDFLAGS) -o pdx $(O_PDX) $(LIB) -lpdrx
ifndef DEBUG
	strip --strip-all pdx
endif

#---------------------------------------------------------------------------
src/libpdrx/%.o:			src/libpdrx/%.cc
	g++ $(CCFLAGS) -c $< -o $@

src/pdr/%.o:				src/pdr/%.cc
	g++ $(CCFLAGS) -c $< -o $@

src/pdx/%.o:				src/pdx/%.cc
	g++ $(CCFLAGS) -c $< -o $@

#---------------------------------------------------------------------------
# DO NOT DELETE

src/libpdrx/config.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/libpdrx/config.o: src/libpdrx/config.h
src/libpdrx/datatypes.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/libpdrx/encoding.o: src/libpdrx/common.h src/libpdrx/encoding.h
src/libpdrx/poco_db.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/libpdrx/poco_db.o: src/libpdrx/config.h src/libpdrx/poco_db.h

src/pdr/db.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdr/db.o: src/libpdrx/config.h src/pdr/db_impl.h src/pdr/db.h
src/pdr/db.o: src/libpdrx/poco_db.h
src/pdr/db_impl.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdr/db_impl.o: src/libpdrx/config.h src/pdr/db_impl.h src/pdr/db.h
src/pdr/db_impl.o: src/libpdrx/poco_db.h
src/pdr/in.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdr/in.o: src/libpdrx/config.h src/pdr/db.h src/pdr/in_impl.h
src/pdr/in.o: src/pdr/in.h
src/pdr/in_impl.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdr/in_impl.o: src/libpdrx/config.h src/pdr/db.h src/pdr/in_impl.h
src/pdr/in_impl.o: src/pdr/in.h
src/pdr/in_impl_csv.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdr/in_impl_csv.o: src/libpdrx/config.h src/libpdrx/encoding.h
src/pdr/in_impl_csv.o: src/pdr/db.h src/pdr/in_impl.h src/pdr/in.h
src/pdr/in_impl_expr.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdr/in_impl_expr.o: src/libpdrx/config.h src/libpdrx/encoding.h
src/pdr/in_impl_expr.o: src/pdr/db.h src/pdr/in_impl.h src/pdr/in.h
src/pdr/in_impl_interactive.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdr/in_impl_interactive.o: src/libpdrx/config.h src/libpdrx/encoding.h
src/pdr/in_impl_interactive.o: src/pdr/db.h src/pdr/in_impl.h src/pdr/in.h
src/pdr/in_impl_pop3.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdr/in_impl_pop3.o: src/libpdrx/config.h src/libpdrx/encoding.h
src/pdr/in_impl_pop3.o: src/pdr/db.h src/pdr/in_impl.h src/pdr/in.h
src/pdr/in_impl_txt.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdr/in_impl_txt.o: src/libpdrx/config.h src/libpdrx/encoding.h
src/pdr/in_impl_txt.o: src/pdr/db.h src/pdr/in_impl.h src/pdr/in.h
src/pdr/in_impl_xml.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdr/in_impl_xml.o: src/libpdrx/config.h src/libpdrx/encoding.h
src/pdr/in_impl_xml.o: src/pdr/db.h src/pdr/in_impl.h src/pdr/in.h
src/pdr/out.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdr/out.o: src/libpdrx/config.h src/pdr/db.h src/pdr/out_impl.h
src/pdr/out.o: src/pdr/out.h
src/pdr/out_impl_xml.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdr/out_impl_xml.o: src/libpdrx/config.h src/pdr/db.h src/pdr/out_impl.h
src/pdr/out_impl_xml.o: src/pdr/out.h
src/pdr/pdr.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdr/pdr.o: src/libpdrx/config.h src/libpdrx/encoding.h
src/pdr/pdr.o: src/libpdrx/build.h src/pdr/db.h src/pdr/in.h src/pdr/out.h

src/pdx/db.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdx/db.o: src/libpdrx/config.h src/pdx/db_impl.h src/pdx/db.h
src/pdx/db.o: src/libpdrx/poco_db.h
src/pdx/db_impl.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdx/db_impl.o: src/libpdrx/config.h src/pdx/db_impl.h src/pdx/db.h
src/pdx/db_impl.o: src/libpdrx/poco_db.h
src/pdx/diagram.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdx/diagram.o: src/libpdrx/config.h src/libpdrx/encoding.h
src/pdx/diagram.o: src/pdx/diagram_impl.h src/pdx/diagram.h
src/pdx/diagram_impl_cairo.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdx/diagram_impl_cairo.o: src/libpdrx/config.h src/libpdrx/encoding.h
src/pdx/diagram_impl_cairo.o: src/pdx/diagram_impl.h src/pdx/diagram.h
src/pdx/diagram_impl.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdx/diagram_impl.o: src/libpdrx/config.h src/libpdrx/encoding.h
src/pdx/diagram_impl.o: src/pdx/diagram_impl.h src/pdx/diagram.h
src/pdx/diagram_impl_svg.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdx/diagram_impl_svg.o: src/libpdrx/config.h src/libpdrx/encoding.h
src/pdx/diagram_impl_svg.o: src/pdx/diagram_impl.h src/pdx/diagram.h
src/pdx/out.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdx/out.o: src/libpdrx/config.h src/pdx/db.h src/pdx/out_impl.h
src/pdx/out.o: src/pdx/out.h
src/pdx/out_ftree.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdx/out_ftree.o: src/libpdrx/config.h src/pdx/out_ftree.h
src/pdx/out_ftree.o: src/pdx/out_func.h src/pdx/diagram.h
src/pdx/out_func.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdx/out_func.o: src/libpdrx/config.h src/libpdrx/build.h src/pdx/db.h
src/pdx/out_func.o: src/pdx/out_ftree.h src/pdx/out_func.h src/pdx/diagram.h
src/pdx/out_impl.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdx/out_impl.o: src/libpdrx/config.h src/pdx/db.h src/pdx/out_impl.h
src/pdx/out_impl.o: src/pdx/out.h src/pdx/out_ftree.h src/pdx/out_func.h
src/pdx/out_impl_diagram.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdx/out_impl_diagram.o: src/libpdrx/config.h src/libpdrx/encoding.h
src/pdx/out_impl_diagram.o: src/pdx/db.h src/pdx/out_impl.h src/pdx/out.h
src/pdx/out_impl_diagram.o: src/pdx/out_ftree.h src/pdx/out_func.h
src/pdx/out_impl_diagram.o: src/pdx/diagram.h
src/pdx/out_impl_interactive.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdx/out_impl_interactive.o: src/libpdrx/config.h src/pdx/db.h
src/pdx/out_impl_interactive.o: src/pdx/out_impl.h src/pdx/out.h
src/pdx/out_impl_interactive.o: src/pdx/out_ftree.h src/pdx/out_func.h
src/pdx/out_impl_report.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdx/out_impl_report.o: src/libpdrx/config.h src/libpdrx/encoding.h
src/pdx/out_impl_report.o: src/pdx/db.h src/pdx/out_impl.h src/pdx/out.h
src/pdx/out_impl_report.o: src/pdx/out_ftree.h src/pdx/out_func.h
src/pdx/pdx.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdx/pdx.o: src/libpdrx/config.h src/libpdrx/encoding.h
src/pdx/pdx.o: src/libpdrx/build.h src/pdx/db.h src/pdx/out.h
