#-------------------------------------------------------------------------------
#   Copyright (c) 2010 Sourcefabric O.P.S.
#
#   This file is part of the Campcaster project.
#   http://campcaster.sourcefabric.org/
#   To report bugs, send an e-mail to bugs@campware.org
#
#   Campcaster 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.
#
#   Campcaster 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 Campcaster; if not, write to the Free Software
#   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
#   General command definitions
#-------------------------------------------------------------------------------
MKDIR      = mkdir -p
RM         = rm -f
RMDIR      = rm -rf
DOXYGEN    = doxygen
DOXYTAG    = doxytag
XSLTPROC   = xsltproc
ECHO       = @echo
FLAWFINDER = flawfinder
CP         = cp -f


#-------------------------------------------------------------------------------
#   Basic directory and file definitions
#-------------------------------------------------------------------------------
BASE_DIR     = .
BIN_DIR      = ${BASE_DIR}/bin
DOC_DIR      = ${BASE_DIR}/doc
DOXYGEN_DIR  = ${DOC_DIR}/doxygen
COVERAGE_DIR = ${DOC_DIR}/coverage
ETC_DIR      = ${BASE_DIR}/etc
SRC_DIR      = ${BASE_DIR}/src
TMP_DIR      = ${BASE_DIR}/tmp

prefix = @prefix@
PACKAGE_VERSION = @PACKAGE_VERSION@

USR_DIR     = ${prefix}
USR_BIN_DIR = ${USR_DIR}/bin
USR_DOC_DIR = ${USR_DIR}/doc
USR_ETC_DIR = ${USR_DIR}/etc
USR_LIB_DIR = ${USR_DIR}/lib
USR_VAR_DIR = ${USR_DIR}/var

HOSTNAME                = @HOSTNAME@
APACHE_GROUP            = @APACHE_GROUP@
WWW_DOCROOT             = @WWW_DOCROOT@
WWW_PORT                = @WWW_PORT@
SCHEDULER_PORT          = @SCHEDULER_PORT@
DB_SERVER         		= @DB_SERVER@
DATABASE                = @DATABASE@
DB_USER                 = @DB_USER@
DB_PASSWORD             = @DB_PASSWORD@
CREATE_LS_DATABASE      = @CREATE_LS_DATABASE@
INIT_LS_DATABASE        = @INIT_LS_DATABASE@
CREATE_ODBC_DATA_SOURCE = @CREATE_ODBC_DATA_SOURCE@
CONFIGURE_APACHE        = @CONFIGURE_APACHE@
STATION_AUDIO_OUT       = "@STATION_AUDIO_OUT@"
STUDIO_AUDIO_OUT        = "@STUDIO_AUDIO_OUT@"
STUDIO_AUDIO_CUE        = "@STUDIO_AUDIO_CUE@"


#export LD_LIBRARY_PATH:=${prefix}/lib:${LD_LIBRARY_PATH}
#export PKG_CONFIG_PATH:=${prefix}/lib/pkgconfig:${PKG_CONFIG_PATH}

DEBUG = @DEBUG@

#DOXYGEN_CONFIG = ${ETC_DIR}/doxygen.config
#XMLRPC-DOXYGEN_CONFIG = ${ETC_DIR}/xmlrpc-doxygen.config
#
#XMLRPCXX_DOC_DIR   = ${BASE_DIR}/usr/share/doc/xmlrpc++
#EXTERNAL_DOC_PAGES = ${XMLRPCXX_DOC_DIR}/XmlRpcServerMethod_8h-source.html \
#    ${XMLRPCXX_DOC_DIR}/classXmlRpc_1_1XmlRpcServerMethod.html \
#    ${XMLRPCXX_DOC_DIR}/classXmlRpc_1_1XmlRpcServerMethod-members.html
#TAGFILE           = ${DOXYGEN_DIR}/xmlrpc++.tag
#
#TESTRESULTS_XSLT = ${ETC_DIR}/testResultsToHtml.xsl
#TESTRESULTS_IN   = ${ETC_DIR}/testResults.xml
#TESTRESULTS_FILE = ${DOC_DIR}/testResults.html
#
#FLAWFINDER_FILE  = ${DOC_DIR}/flawfinderReport.html
#
TOOLS_DIR  = ${SRC_DIR}/tools

#LIBODBCXX_DIR     = ${TOOLS_DIR}/libodbc++
#LIBODBCXX_VERSION = libodbc++-0.2.5
#XMLRPCXX_DIR      = ${TOOLS_DIR}/xmlrpc++
#XMLRPCXX_VERSION  = xmlrpc++-20040713
#TAGLIB_DIR        = ${TOOLS_DIR}/taglib
#TAGLIB_VERSION    = taglib-1.5
PEAR_DIR          = ${TOOLS_DIR}/pear

MODULES_DIR            = ${SRC_DIR}/modules
#CORE_DIR               = ${MODULES_DIR}/core
#AUTHENTICATION_DIR     = ${MODULES_DIR}/authentication
#DB_DIR                 = ${MODULES_DIR}/db
#STORAGE_CLIENT_DIR     = ${MODULES_DIR}/storageClient
#PLAYLIST_EXECUTOR_DIR  = ${MODULES_DIR}/playlistExecutor
#EVENT_SCHEDULER_DIR    = ${MODULES_DIR}/eventScheduler
#SCHEDULER_CLIENT_DIR   = ${MODULES_DIR}/schedulerClient
#WIDGETS_DIR            = ${MODULES_DIR}/widgets
#ALIB_DIR               = ${MODULES_DIR}/alib
GETID3_DIR             = ${MODULES_DIR}/getid3
HTML_UI_DIR            = ${MODULES_DIR}/htmlUI
STORAGE_ADMIN_DIR      = ${MODULES_DIR}/storageAdmin
STORAGE_SERVER_DIR     = ${MODULES_DIR}/storageServer

#PRODUCTS_DIR     = ${SRC_DIR}/products
#SCHEDULER_DIR    = ${PRODUCTS_DIR}/scheduler
#GLIVESUPPORT_DIR = ${PRODUCTS_DIR}/gLiveSupport

#SCHEDULER_EXE    = ${SCHEDULER_DIR}/tmp/campcaster-scheduler
#GLIVESUPPORT_EXE = ${GLIVESUPPORT_DIR}/tmp/campcaster-studio

#-------------------------------------------------------------------------------
#   Targets
#-------------------------------------------------------------------------------
.PHONY: all clean depclean distclean 
.PHONY: setup tools_setup modules_setup 
.PHONY: start stop status 

all: setup 

help:
	${ECHO} "Campcaster project main Makefile"
	${ECHO} "http://campcaster.sourcefabric.org/"
	${ECHO} "Copyright (c) 2010 Sourcefabric O.P.S. under the GNU GPL"
	${ECHO} ""
	${ECHO} "Useful targets for this makefile:"
	${ECHO} "   all          - set up and compile everthing"
	${ECHO} "   install      - install everything"
#	${ECHO} "   doc          - build autogenerated documentation"
	${ECHO} "   clean        - clean all modules"
	${ECHO} "   check        - check all modules"
	${ECHO} ""
	${ECHO} "Some less frequently used targets:"
	${ECHO} "   setup        - set up the development environment"
#	${ECHO} "   doxygen      - build autogenerated doxygen documentation only"
#	${ECHO} "   compile      - compile all modules"
#	${ECHO} "   recompile    - recompile all modules"

#doc: doxygen testresults flawfinder
#
#doxygen:
#	${DOXYGEN} ${DOXYGEN_CONFIG}
#	${DOXYGEN} ${XMLRPC-DOXYGEN_CONFIG}
#
#testresults:
#	${XSLTPROC} ${TESTRESULT_XSLT} ${TESTRESULTS_IN} > ${TESTRESULTS_FILE}
#
#flawfinder:
#	${FLAWFINDER} -c --immediate --html \
#                  ${CORE_DIR}/include ${CORE_DIR}/src \
#                  ${AUTHENTICATION_DIR}/include ${AUTHENTICATION_DIR}/src \
#                  ${DB_DIR}/include ${DB_DIR}/src \
#                  ${STORAGE_CLIENT_DIR}/include ${STORAGE_CLIENT_DIR}/src \
#                  ${PLAYLIST_EXECUTOR_DIR}/include \
#                  ${PLAYLIST_EXECUTOR_DIR}/src \
#                  ${EVENT_SCHEDULER_DIR}/include ${EVENT_SCHEDULER_DIR}/src \
#                  ${SCHEDULER_CLIENT_DIR}/include ${SCHEDULER_CLIENT_DIR}/src \
#                  ${WIDGETS_DIR}/include ${WIDGETS_DIR}/src \
#                  ${SCHEDULER_DIR}/src > ${FLAWFINDER_FILE} \
#                  ${GLIVESUPPORT_DIR}/src > ${FLAWFINDER_FILE} \

clean:
#	${RMDIR} ${DOXYGEN_DIR}/html
#	${RMDIR} ${COVERAGE_DIR}/*
#	${RM} ${TMP_DIR}/*.stamp
#	${RM} ${TMP_DIR}/ac* ${TMP_DIR}/config* ${TMP_DIR}/install-sh
#	${RMDIR} ${TMP_DIR}/auto*
#
setup: ${TMP_DIR}/setup.stamp
${TMP_DIR}/setup.stamp: tools_setup modules_setup 
	touch ${TMP_DIR}/setup.stamp

recompile: modprod_distclean modules_setup products_setup

tools_setup: ${TMP_DIR}/tools_setup.stamp
${TMP_DIR}/tools_setup.stamp:
#	cd ${LIBODBCXX_DIR}/${LIBODBCXX_VERSION} && ./configure --prefix=${prefix}
#	${MAKE} -C ${LIBODBCXX_DIR}/${LIBODBCXX_VERSION} install
#
#	cd ${XMLRPCXX_DIR}/${XMLRPCXX_VERSION} && ./configure --prefix=${prefix}
#	${MAKE} -C ${XMLRPCXX_DIR}/${XMLRPCXX_VERSION} install
#
#	cd ${TAGLIB_DIR}/${TAGLIB_VERSION} && ./configure --prefix=${prefix}
#	${MAKE} -C ${TAGLIB_DIR}/${TAGLIB_VERSION} install
#
	cd ${PEAR_DIR} && ./configure --prefix=${prefix}
	${MAKE} -C ${PEAR_DIR} install

	touch ${TMP_DIR}/tools_setup.stamp

tools_distclean:
#	-${MAKE} -C ${LIBODBCXX_DIR}/${LIBODBCXX_VERSION} distclean
#	-${MAKE} -C ${XMLRPCXX_DIR}/${XMLRPCXX_VERSION} distclean
#	-${MAKE} -C ${TAGLIB_DIR}/${TAGLIB_VERSION} distclean
	${RM} ${TMP_DIR}/tools_setup.stamp

#doxytag_setup: ${TMP_DIR}/doxytag_setup.stamp
#${TMP_DIR}/doxytag_setup.stamp:
#	${DOXYTAG} -t ${TAGFILE} ${EXTERNAL_DOC_PAGES}
#	touch ${TMP_DIR}/doxytag_setup.stamp

modules_setup: ${TMP_DIR}/modules_setup.stamp
${TMP_DIR}/modules_setup.stamp:
#	cd ${ALIB_DIR} && ./configure --prefix=${prefix} \
#                    PACKAGE_VERSION=${PACKAGE_VERSION}
	cd ${GETID3_DIR} && ./configure --prefix=${prefix} \
                    PACKAGE_VERSION=${PACKAGE_VERSION}
	cd ${HTML_UI_DIR} && ./configure --prefix=${prefix} \
            --with-apache-group=${APACHE_GROUP} \
            --with-www-docroot=${WWW_DOCROOT} \
            --with-configure-apache=${CONFIGURE_APACHE} \
            --with-storage-server=${prefix}/var/Campcaster/storageServer \
            PACKAGE_VERSION=${PACKAGE_VERSION}
	cd ${STORAGE_ADMIN_DIR} && ./configure --prefix=${prefix} \
            --with-storage-server=${prefix}/var/Campcaster/storageServer \
            --with-phppart-dir=${prefix}/var/Campcaster/storageAdmin \
            PACKAGE_VERSION=${PACKAGE_VERSION}
	cd ${STORAGE_SERVER_DIR} && \
        ./configure --prefix=${prefix} \
                    --with-apache-group=${APACHE_GROUP} \
                    --with-hostname=${HOSTNAME} \
                    --with-www-docroot=${WWW_DOCROOT} \
                    --with-www-port=${WWW_PORT} \
                    --with-scheduler-port=${SCHEDULER_PORT} \
                    --with-database-server=${DB_SERVER} \
                    --with-database=${DATABASE} \
                    --with-database-user=${DB_USER} \
                    --with-database-password=${DB_PASSWORD} \
                    --with-init-database=${INIT_LS_DATABASE} \
                    PACKAGE_VERSION=${PACKAGE_VERSION}
#	cd ${CORE_DIR} && \
#	   ./configure --prefix=${prefix} --enable-debug=${DEBUG} \
#                    PACKAGE_VERSION=${PACKAGE_VERSION}
#	cd ${AUTHENTICATION_DIR} && \
#	   ./configure --prefix=${prefix} --enable-debug=${DEBUG} \
#                    PACKAGE_VERSION=${PACKAGE_VERSION}
#	cd ${DB_DIR} && \
#	   ./configure --prefix=${prefix} --enable-debug=${DEBUG} \
#                    PACKAGE_VERSION=${PACKAGE_VERSION}
#	cd ${STORAGE_CLIENT_DIR} && \
#	   ./configure --prefix=${prefix} --enable-debug=${DEBUG} \
#                    PACKAGE_VERSION=${PACKAGE_VERSION}
#	cd ${PLAYLIST_EXECUTOR_DIR} && \
#	   ./configure --prefix=${prefix} --enable-debug=${DEBUG} \
#                    PACKAGE_VERSION=${PACKAGE_VERSION}
#	cd ${EVENT_SCHEDULER_DIR} && \
#	   ./configure --prefix=${prefix} --enable-debug=${DEBUG} \
#                    PACKAGE_VERSION=${PACKAGE_VERSION}
#	cd ${SCHEDULER_CLIENT_DIR} && \
#	   ./configure --prefix=${prefix} --enable-debug=${DEBUG} \
#                    PACKAGE_VERSION=${PACKAGE_VERSION}
#	cd ${WIDGETS_DIR} && \
#	   ./configure --prefix=${prefix} --enable-debug=${DEBUG} \
#                    PACKAGE_VERSION=${PACKAGE_VERSION}
	touch ${TMP_DIR}/modules_setup.stamp

#products_setup: ${TMP_DIR}/products_setup.stamp
#${TMP_DIR}/products_setup.stamp:
#	cd ${SCHEDULER_DIR} && \
#		./configure --prefix=${prefix} \
#		            --enable-debug=${DEBUG} \
#	                --with-hostname=${HOSTNAME} \
#					--with-www-port=${WWW_PORT} \
#					--with-scheduler-port=${SCHEDULER_PORT} \
#					--with-database-server=${DB_SERVER} \
#					--with-database=${DATABASE} \
#					--with-database-user=${DB_USER} \
#					--with-database-password=${DB_PASSWORD} \
#					--with-audio-out=${STATION_AUDIO_OUT} \
#					--with-create-odbc-data-source=${CREATE_ODBC_DATA_SOURCE} \
#					--with-init-database=${INIT_LS_DATABASE} \
#                    PACKAGE_VERSION=${PACKAGE_VERSION}
#	cd ${GLIVESUPPORT_DIR} && \
#		./configure --prefix=${prefix} \
#		            --enable-debug=${DEBUG} \
#	                --with-hostname=${HOSTNAME} \
#					--with-www-port=${WWW_PORT} \
#					--with-scheduler-port=${SCHEDULER_PORT} \
#					--with-database-server=${DB_SERVER} \
#					--with-database=${DATABASE} \
#					--with-database-user=${DB_USER} \
#					--with-database-password=${DB_PASSWORD} \
#					--with-audio-out=${STUDIO_AUDIO_OUT} \
#					--with-audio-cue=${STUDIO_AUDIO_CUE} \
#                    PACKAGE_VERSION=${PACKAGE_VERSION}
#	touch ${TMP_DIR}/products_setup.stamp

distclean: clean tools_distclean modprod_distclean

modprod_distclean:
#	${MAKE} -C ${CORE_DIR} distclean
#	${MAKE} -C ${AUTHENTICATION_DIR} distclean
#	${MAKE} -C ${DB_DIR} distclean
#	${MAKE} -C ${STORAGE_CLIENT_DIR} distclean
#	${MAKE} -C ${PLAYLIST_EXECUTOR_DIR} distclean
#	${MAKE} -C ${EVENT_SCHEDULER_DIR} distclean
#	${MAKE} -C ${SCHEDULER_CLIENT_DIR} distclean
#	${MAKE} -C ${WIDGETS_DIR} distclean
#	${MAKE} -C ${SCHEDULER_DIR} distclean
#	${MAKE} -C ${GLIVESUPPORT_DIR} distclean
#	${RM} ${TMP_DIR}/compile.stamp
	${RM} ${TMP_DIR}/modules_setup.stamp
#	${RM} ${TMP_DIR}/products_setup.stamp

depclean:
#	${MAKE} -C ${CORE_DIR} depclean
#	${MAKE} -C ${AUTHENTICATION_DIR} depclean
#	${MAKE} -C ${DB_DIR} depclean
#	${MAKE} -C ${STORAGE_CLIENT_DIR} depclean
#	${MAKE} -C ${PLAYLIST_EXECUTOR_DIR} depclean
#	${MAKE} -C ${EVENT_SCHEDULER_DIR} depclean
#	${MAKE} -C ${SCHEDULER_CLIENT_DIR} depclean
#	${MAKE} -C ${WIDGETS_DIR} depclean
#	${MAKE} -C ${SCHEDULER_DIR} depclean
#	${MAKE} -C ${GLIVESUPPORT_DIR} depclean
	-${MAKE} -C ${STORAGE_SERVER_DIR} depclean

#compile: ${TMP_DIR}/compile.stamp
#${TMP_DIR}/compile.stamp:
#	${MAKE} -C ${CORE_DIR} all
#	${MAKE} -C ${AUTHENTICATION_DIR} all
#	${MAKE} -C ${DB_DIR} all
#	${MAKE} -C ${STORAGE_CLIENT_DIR} all
#	${MAKE} -C ${PLAYLIST_EXECUTOR_DIR} all
#	${MAKE} -C ${EVENT_SCHEDULER_DIR} all
#	${MAKE} -C ${SCHEDULER_CLIENT_DIR} all
#	${MAKE} -C ${WIDGETS_DIR} all
#	${MAKE} -C ${SCHEDULER_DIR} all
#	${MAKE} -C ${GLIVESUPPORT_DIR} all
#	touch ${TMP_DIR}/compile.stamp

#check:
#	-${MAKE} -C ${CORE_DIR} check
#	-${MAKE} -C ${AUTHENTICATION_DIR} check
#	-${MAKE} -C ${DB_DIR} check
#	-${MAKE} -C ${STORAGE_CLIENT_DIR} check
#	-${MAKE} -C ${PLAYLIST_EXECUTOR_DIR} check          # hangs on edge.campware.org
#	-${MAKE} -C ${EVENT_SCHEDULER_DIR} check
#	-${MAKE} -C ${SCHEDULER_CLIENT_DIR} check
#	-${MAKE} -C ${WIDGETS_DIR} check                    # no tests defined
#	-${MAKE} -C ${SCHEDULER_DIR} check                  # has database issues
#	-${MAKE} -C ${GLIVESUPPORT_DIR} check               # has database issues
#	-${MAKE} -C ${STORAGE_SERVER_DIR} check             # has database issues


start: ${SCHEDULER_EXE}
	${MAKE} -C ${SCHEDULER_DIR} start

stop: ${SCHEDULER_EXE}
	${MAKE} -C ${SCHEDULER_DIR} stop

status: ${SCHEDULER_EXE}
	${MAKE} -C ${SCHEDULER_DIR} status

#run: ${GLIVESUPPORT_EXE}
#	${MAKE} -C ${GLIVESUPPORT_DIR} run


#-------------------------------------------------------------------------------
#   Installation related targets
#-------------------------------------------------------------------------------
.PHONY: install create_database setup_install_dirs
.PHONY: install_modules 

install: setup setup_install_dirs create_database install_modules
	${MKDIR} ${USR_ETC_DIR}/apache
	${CP} ${ETC_DIR}/apache/*.conf ${USR_ETC_DIR}/apache
	${MKDIR} ${USR_BIN_DIR}
	${CP} ${BIN_DIR}/postInstallStation.sh ${USR_BIN_DIR}
#	${CP} ${ETC_DIR}/campcaster-scheduler ${USR_ETC_DIR}
	${CP} ${ETC_DIR}/pg_hba.conf ${USR_ETC_DIR}

create_database:
ifeq (@CREATE_LS_DATABASE@,yes)
	${SCHEDULER_DIR}/bin/createDatabase.sh --database=${DATABASE} \
                                           --dbserver=${DB_SERVER} \
                                           --dbuser=${DB_USER} \
                                           --dbpassword=${DB_PASSWORD}
endif

setup_install_dirs:
	${MKDIR} ${USR_BIN_DIR}
#	${MKDIR} ${USR_DOC_DIR}
	${MKDIR} ${USR_ETC_DIR}
	${MKDIR} ${USR_LIB_DIR}
	${MKDIR} ${USR_VAR_DIR}

install_modules:
#	${MAKE} -C ${ALIB_DIR} install
	${MAKE} -C ${GETID3_DIR} install
	${MAKE} -C ${HTML_UI_DIR} install
	${MAKE} -C ${STORAGE_ADMIN_DIR} install
	${MAKE} -C ${STORAGE_SERVER_DIR} install
#	${MAKE} -C ${CORE_DIR} install
#	${MAKE} -C ${AUTHENTICATION_DIR} install
#	${MAKE} -C ${DB_DIR} install
#	${MAKE} -C ${STORAGE_CLIENT_DIR} install
#	${MAKE} -C ${PLAYLIST_EXECUTOR_DIR} install
#	${MAKE} -C ${EVENT_SCHEDULER_DIR} install
#	${MAKE} -C ${SCHEDULER_CLIENT_DIR} install
#	${MAKE} -C ${WIDGETS_DIR} install

#install_products:
#	${MAKE} -C ${SCHEDULER_DIR} install
#	${MAKE} -C ${GLIVESUPPORT_DIR} install