#!/usr/bin/make -f
# -*- makefile -*-

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

# If set to a true value then MakeMaker's prompt function will
# always return the default without waiting for user input.
#export PERL_MM_USE_DEFAULT=1

PERL   ?= /usr/bin/perl
#PACKAGE = $(shell dh_listpackages)
PACKAGE = freeside
TMP     = $(CURDIR)/debian/$(PACKAGE)
#DBC_SCRIPTS = $(TMP)/usr/share/dbconfig-common/scripts/freeside

##this is gotten from dbconfig-common
DB_TYPE = Pg

#Data source
DATASOURCE = DBI:${DB_TYPE}:dbname=freeside

#no chance, it doesn't get backslash-interpolted now...
##DEBVERSION                    = `head -1 debian/changelog | cut -d')' -f1 | cut -c11-`
#DEBVERSION                    = 1.7.3~rc2-1
#export VERSION                = $(DEBVERSION) (Debian)

#export FREESIDE_CONF          = /etc/freeside
#export FREESIDE_LOG           = /var/log/freeside
#export FREESIDE_LOCK          = /var/lock/freeside
#export FREESIDE_CACHE         = $(TMP)/var/cache/freeside
#FREESIDE_CACHE         = $(TMP)/var/cache/freeside

#XXX huh?
#export FREESIDE_EXPORT        = /var/spool/freeside

export FREESIDE_CONF = $(TMP)/usr/local/etc/freeside
export FREESIDE_LOG = $(TMP)/usr/local/etc/freeside
export FREESIDE_LOCK = $(TMP)/usr/local/etc/freeside
export FREESIDE_CACHE = $(TMP)/usr/local/etc/freeside
export FREESIDE_EXPORT = $(TMP)/usr/local/etc/freeside

export DIST_CONF = ${FREESIDE_CONF}/default_conf

#XXX own subdir?
#export MASON_HANDLER          = /usr/share/freeside/handler.pl
export MASON_HANDLER=$(TMP)-webui/usr/local/etc/freeside/handler.pl

export APACHE_VERSION        := $(shell /usr/sbin/apache2 -v | grep -q '\/2\.4\.' && echo '2.4' || echo '2')
export APACHE_DOCUMENT_ROOT  := $(shell [ ${APACHE_VERSION} = '2.4' ] && echo '/var/www/html' || echo '/var/www')
export FREESIDE_DOCUMENT_ROOT = $(TMP)-webui$(APACHE_DOCUMENT_ROOT)/freeside
export POD2HTML_DOCUMENT_ROOT = $(FREESIDE_DOCUMENT_ROOT)/docs/library
export INIT_FILE              = $(TMP).init
export INIT_INSTALL           = /bin/true
export HTTPD_RESTART          = /bin/true
export APACHE_CONF           := $(shell [ ${APACHE_VERSION} = '2.4' ] && echo "$(TMP)-webui/etc/apache2/conf-available" || echo "$(TMP)-webui/etc/apache2/conf.d")
export TORRUS_CONF           := $(shell [ ${APACHE_VERSION} = '2.4' ] && echo "$(TMP)-torrus/etc/apache2/conf-available" || echo "$(TMP)-torrus/etc/apache2/conf.d")
export FREESIDE_RESTART       = /bin/true

#XXX root?
export INSTALLGROUP           = adm

export SELFSERVICE_MACHINES   = 

#prompt ?   XXX these are runtime, not buildtime :/
export RT_DOMAIN              =  freeside.biz
export RT_TIMEZONE            = US/Eastern
export HOSTNAME               = localhost
export FREESIDE_URL           = http://$(HOSTNAME)/freeside/

#specific to deb pkg, for purposes of saving off a permanent copy of default
#config for postinst and that sort of thing
#export DIST_CONF           = /usr/share/freeside/default_conf

#XXX yuck.  proper RT layout is entirely necessary
#this seems to infect way to much of RT with the build location, requiring
# a kludge to hack it out afterwords.  look into using fakeroot (didn't
# realize it would need to be explicit argh)
# (but leaving it for now, otherwise can't get RT to put files where we need em)
export RT_PATH                = $(TMP)-lib/opt/rt3

export TEXMF_PATH             = $(TMP)-lib/usr/local/share/texmf/tex/latex

# This has to be exported to make some magic below work.
export DH_OPTIONS

configure: configure-stamp
configure-stamp:
	dh_testdir
	# Add here commands to configure the package.
	
	touch configure-stamp


build: build-stamp
build-stamp: 
	dh_testdir
	# Add commands to compile the package here
	
	( cd FS/ && $(PERL) Makefile.PL INSTALLDIRS=vendor && $(MAKE) )
	$(MAKE) perl-modules
	
	( cd fs_selfservice/FS-SelfService/ && $(PERL) Makefile.PL && $(MAKE) )
	
	#install this for freeside-setup
	install -d $(DIST_CONF)
	install `ls -d conf/[a-z]* | grep -v CVS | grep -v '^conf/registries'` $(DIST_CONF)

	#TEST#

	touch $@

clean:
	dh_testdir
	dh_testroot
	dh_clean build-stamp install-stamp

	# Add here commands to clean up after the build process.
	$(MAKE) -e clean
	#|| true #XXX freeside clean target fucked

	dh_clean 

install: install-stamp
install-stamp: build-stamp
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs

	# Add here commands to install package into
	# debian/<package>-whatever.

	install -d $(FREESIDE_DOCUMENT_ROOT)
	install -d $(TMP)-webui/usr/local/etc/freeside/
	install -d $(TMP)-webui/etc/insserv/overrides/
	install -d $(TMP)/usr/local/etc/freeside/
#	install -d $(TMP)-lib/usr/bin

	( cd FS/ && $(MAKE) -e DESTDIR=${TMP}-lib install)

        # Install configuration files
	install -d -o freeside ${FREESIDE_CONF}

	touch ${FREESIDE_CONF}/secrets
	chown freeside ${FREESIDE_CONF}/secrets
	chmod 600 ${FREESIDE_CONF}/secrets

	/bin/echo -e "${DATASOURCE}\n${DB_USER}\n${DB_PASSWORD}" >${FREESIDE_CONF}/secrets
	chmod 600 ${FREESIDE_CONF}/secrets
	chown freeside ${FREESIDE_CONF}/secrets

	mkdir "${FREESIDE_CACHE}/counters.${DATASOURCE}"
	chown freeside "${FREESIDE_CACHE}/counters.${DATASOURCE}"

	mkdir "${FREESIDE_CACHE}/cache.${DATASOURCE}"
	chown freeside "${FREESIDE_CACHE}/cache.${DATASOURCE}"

	mkdir "${FREESIDE_EXPORT}/export.${DATASOURCE}"
	chown freeside "${FREESIDE_EXPORT}/export.${DATASOURCE}"

	#install this for freeside-setup
	install -d $(DIST_CONF)
	#install conf/[a-z]* $(DEFAULT_CONF)
	#CVS is not [a-z]
	install `ls -d conf/[a-z]* | grep -v CVS | grep -v '^conf/registries'` $(DIST_CONF)

	# Install interfaces
	$(MAKE) -e DESTDIR=$(TMP)-webui install-docs
	
	# Install tex
	install -d ${TEXMF_PATH}
	install -o freeside -m 444 etc/*.sty ${TEXMF_PATH}
	install -o root -m 444 -D etc/GnuMICR.otf $(TMP)-lib/usr/local/etc/freeside/GnuMICR.otf

# Create Apache configurations
	install -d $(APACHE_CONF)
	$(MAKE) -e DESTDIR=$(APACHE_CONF) install-apache
	install -o root -m 755 init.d/insserv-override-apache2 $(TMP)-webui/etc/insserv/overrides/apache2

        #Hack the build dir out of apache config

	perl -p -i -e "\
         s'${TMP}(-webui)?''g;\
        " $(APACHE_CONF)/*

	# Install init
	$(MAKE) -e DESTDIR=$(TMP) install-init

	#hack the build dir out of Freeside too.  oh yeah, sucky.
	perl -p -i -e "\
	  s'${TMP}(-webui)?''g;\
	" ${TMP}/usr/local/etc/freeside/handler.pl \
	  ${TMP}/usr/share/perl5/FS/* \
	  ${TMP}/usr/share/perl5/FS/*/* \
	  ${TMP}/usr/bin/*

	#hack the build dur out of lib
	perl -p -i -e "\
          s'${TMP}-lib?''g;\
	  s'${TMP}(-webui)?''g;\
        " ${TMP}/usr/local/etc/freeside/handler.pl \
	  ${TMP}-lib/usr/share/perl5/FS/*.pm \
	  ${TMP}-lib/usr/share/perl5/FS/*/*.pm 
        
        #hack the build dir out of Freeside binaries

	perl -p -i -e "\
          s'${TMP}?''g;\
        " ${TMP}-lib/usr/bin/* \
	  ${TMP}-webui/usr/local/etc/freeside/handler.pl

	# Self-service
	
	( cd fs_selfservice/FS-SelfService/; $(MAKE) -e DESTDIR=${TMP}-selfservice-lib install ) 
	install -d -o freeside -g freeside ${TMP}-selfservice-lib/usr/local/freeside
	touch ${TMP}-selfservice-lib/usr/local/freeside/selfservice_socket 
	chown -R freeside ${TMP}-selfservice-lib/usr/local/freeside
	chmod 600 ${TMP}-selfservice-lib/usr/local/freeside/selfservice_socket
	
	install -d -o freeside -g freeside ${TMP}-selfservice-ui$(APACHE_DOCUMENT_ROOT)/
	cp -R fs_selfservice/FS-SelfService/cgi ${TMP}-selfservice-ui$(APACHE_DOCUMENT_ROOT)/selfservice-DIST
	chown freeside.freeside ${TMP}-selfservice-ui$(APACHE_DOCUMENT_ROOT)/selfservice-DIST/*.cgi ${TMP}-selfservice-ui$(APACHE_DOCUMENT_ROOT)/selfservice-DIST/*/*.cgi;
	chmod 755 ${TMP}-selfservice-ui$(APACHE_DOCUMENT_ROOT)/selfservice-DIST/*.cgi ${TMP}-selfservice-ui$(APACHE_DOCUMENT_ROOT)/selfservice-DIST/*/*.cgi

	# NG-selfservice

	install -d ${TMP}-ng-selfservice$(APACHE_DOCUMENT_ROOT)/
	cp -R ng_selfservice ${TMP}-ng-selfservice$(APACHE_DOCUMENT_ROOT)/ng_selfservice-DIST/

	# Torrus 
	
	#in freeside-webui package
	#install -d ${TORRUS_CONF}
	#install -o root -m 755 htetc/freeside-torrus.conf $(TORRUS_CONF)/

	( cd torrus; \
	torrus_user=freeside var_user=freeside var_group=freeside ./configure; \
	$(MAKE) -e DESTDIR=${TMP}-torrus/; \
	$(MAKE) -e DESTDIR=${TMP}-torrus/ install; \
	perl -p -i -e "\
	    s'%%%FREESIDE_URL%%%'${FREESIDE_URL}'g;\
	" ${TMP}-torrus/usr/local/etc/torrus/conf/torrus-siteconfig.pl )

	#RT Config

	( cd rt; \
          cp config.layout.in config.layout; \
          perl -p -i -e "\
            s'%%%FREESIDE_DOCUMENT_ROOT%%%'${FREESIDE_DOCUMENT_ROOT}'g;\
            s'%%%MASONDATA%%%'${FREESIDE_CACHE}/masondata'g;\
          " config.layout; \
          ./configure --prefix=${RT_PATH} \
		--enable-layout=Freeside \
		--with-db-type=Pg \
		--with-db-dba=freeside \
		--with-db-database=freeside \
		--with-db-rt-user=freeside \
		--with-db-rt-pass="" \
		--with-web-user=freeside \
		--with-web-group=freeside \
		--with-rt-group=freeside \
		--with-web-handler=modperl2 )

        ##(create-rt)
	#$(MAKE) -e DESTDIR=${TMP}-lib create-rt
	install -d $(RT_PATH)
	install -d $(RT_PATH)/share

	( cd rt; $(MAKE) config-install dirs files-install fixperms instruct )
	cp -r rt/share/static/images ${FREESIDE_DOCUMENT_ROOT}/rt/NoAuth/
	
	##hack the build dir out of RT.  yeah, sucky.

	perl -p -i -e "\
	s'${TMP}(-webui|-lib)''g;\
	s'${TMP}''g;\
	" ${TMP}-lib/opt/rt3/etc/*.pm \
		${TMP}-lib/opt/rt3/lib/*.pm \
		${TMP}-lib/opt/rt3/lib/RT/*.pm \
		${TMP}-lib/opt/rt3/etc/upgrade/* \
		${TMP}-lib/opt/rt3/sbin/* \
		${TMP}-lib/opt/rt3/bin/* \

	# Default RT Settings
	perl -p -i -e "\
		s'%%%RT_DOMAIN%%%'${RT_DOMAIN}'g;\
		s'%%%RT_TIMEZONE%%%'${RT_TIMEZONE}'g;\
		s'%%%FREESIDE_URL%%%'${FREESIDE_URL}'g;\
		" ${RT_PATH}/etc/RT_SiteConfig.pm

	# Build pod2html documentation
	install -d ${POD2HTML_DOCUMENT_ROOT}
	perl -IFS -MFS::Misc::Pod2Html -e "FS::Misc::Pod2Html::fs_pod2html_from_src('${POD2HTML_DOCUMENT_ROOT}');"

	dh_install

	#touch $@

binary-arch:
# We have nothing to do here for an architecture-independent package

binary-indep: build install
	dh_testdir
	dh_testroot
	dh_installdeb install
	dh_installdocs #freeside.docs README AGPL
	dh_installexamples eg bin
#	dh_installmenu
	dh_installdebconf	
#	dh_installlogrotate	
	dh_installinit --no-start 
	dh_installcron
#	dh_installinfo
	dh_installman
	dh_perl
	dh_link
	dh_compress 
	dh_fixperms -X/var/www/selfservice-DIST -X/usr/local/freeside
	dh_gencontrol
	dh_md5sums
	dh_builddeb

binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install
