# 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/>.


# 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

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

O_PDR=\
	src/pdr/pdr.o\
	src/pdr/db.o\
	src/pdr/db_impl_sqlite.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

O_PDX=\
	src/pdx/pdx.o\
	src/pdx/db.o\
	src/pdx/db_impl_sqlite.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_svg.o

L=\
	-lboost_regex\
	-lboost_date_time\
	-lboost_filesystem\
	-lboost_program_options

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

ifdef DEBUG
CCFLAGS=-g -Wall -fPIC
LIB=$(L)\
	-lPocoXMLd\
	-lPocoNetd\
	-lPocoSQLited\
	-lboard
else
CCFLAGS=-O2 -fPIC
LIB=$(L)\
	-lPocoXML\
	-lPocoNet\
	-lPocoSQLite\
	-lboard
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
	echo '"' >> t
	sed -e':a;N;s/\n//;ta' <t >src/pdx/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

actual:
	cp ~/local/share/pdrx/tm.db .

install:				pdr pdx
	cp pdr pdx /usr/local/bin
	chmod a+x /usr/local/bin/pdr
	chmod a+x /usr/local/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/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_impl_sqlite.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdr/db_impl_sqlite.o: src/libpdrx/config.h src/pdr/db_impl.h src/pdr/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_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/pdr.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdr/pdr.o: src/libpdrx/config.h src/libpdrx/encoding.h src/pdr/db.h
src/pdr/pdr.o: src/pdr/in.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_impl_sqlite.o: src/libpdrx/common.h src/libpdrx/datatypes.h
src/pdx/db_impl_sqlite.o: src/libpdrx/config.h src/pdx/db_impl.h src/pdx/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_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/pdx/db.h src/pdx/build.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_interactive.o: src/pdx/build.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/db.h
src/pdx/pdx.o: src/pdx/out.h
