#!/usr/bin/make -f
# debian/rules for Bacula
# based upon dh_make template, copyright 1997 by Joey Hess.
#

include /usr/share/quilt/quilt.make

#export DH_VERBOSE=1

# These are used for cross-compiling and for saving the configure script
# from having to guess our platform (since we know it already)
DEB_HOST_GNU_TYPE   ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
DEB_HOST_ARCH_OS    ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)

MAINVER := $(shell dpkg-parsechangelog  | grep Version | sed 's/Version: \(.*\)-.*/\1/')

LDFLAGS =
CFLAGS = -g -Wall -D_FORTIFY_SOURCE=0
INSTALL_PROGRAM = install

ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
	CFLAGS += -O0
else
	CFLAGS += -O2
endif

ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
	INSTALL_PROGRAM += -s
endif


VARIANTS := sqlite3 pgsql mysql

######################################################################

NAME=bacula

# The variant that is used when we install non-variant-specific stuff.
# Only bother building extra consoles and stuff for this one.
DEFAULTVARIANT := sqlite3
TEMPLATES = $(wildcard debian/*.templates)
BUILDDIR := $(CURDIR)/debian/tmp-build
INSTALLDIR := $(CURDIR)/debian/tmp-install
DEFAULTINSTALLDIR := $(INSTALLDIR)-$(DEFAULTVARIANT)
DBC := usr/share/dbconfig-common/data/

CONF_ALL	= --enable-smartalloc \
	--with-python --with-tcp-wrappers \
	--with-openssl \
	--with-libiconv-prefix=/usr/include --with-readline=/usr/include/readline \
	--disable-conio \
	--with-libintl-prefix=/usr/include --with-x \
		--docdir=\$${prefix}/share/doc/bacula-common \
		--htmldir=\$${prefix}/share/doc/bacula-common/html \
		--libdir=\$${prefix}/lib/bacula \
	--enable-batch-insert \
	--disable-bwx-console \
	--without-qwt \
	--enable-ipv6 \
	--with-dir-passowrd=XXX_DIRPASSWORD_XXX \
	--with-fd-password=XXX_FDPASSWORD_XXX \
	--with-sd-password=XXX_SDPASSWORD_XXX \
	--with-mon-dir-password=XXX_MONDIRPASSWORD_XXX \
	--with-mon-fd-password=XXX_MONFDPASSWORD_XXX \
	--with-mon-sd-password=XXX_MONSDPASSWORD_XXX \
	--with-db-name=XXX_DBNAME_XXX \
	--with-db-user=XXX_DBUSER_XXX \
	--with-db-password=XXX_DBPASSWORD_XXX


CONF_common	= --disable-gnome --disable-bwx-console --disable-tray-monitor \
			--disable-bat

ifeq ($(DEB_HOST_ARCH_OS),kfreebsd)
CONF_ALL	+= --disable-acl --disable-xattr
endif

CONF_sqlite3	= --with-sqlite3 --without-mysql --without-postgresql --without-sqlite \
			--enable-tray-monitor --enable-bat
CONF_mysql	= --with-mysql --without-sqlite --without-postgresql --without-sqlite3 $(CONF_common)
CONF_pgsql	= --with-postgresql --without-sqlite --without-mysql --without-sqlite3 $(CONF_common)

###########################################################################

extract: extract-stamp
extract-stamp: $(foreach s,$(VARIANTS),extract-stamp-$(s))
extract-stamp-%:
	@echo " *** DEBIAN *** VARIANT $(*): EXTRACTING to $(BUILDDIR)-$(*)"
	mkdir $(BUILDDIR)-$(*)
	tar -cSf - --exclude=./.git --exclude=./debian . | tar -xSpf - -C $(BUILDDIR)-$(*)
	touch $@

configure-stamp-%: extract-stamp-%
	dh_testdir
	@echo " *** DEBIAN *** CONFIGURING VARIANT $*"
	cp /usr/share/misc/config.guess /usr/share/misc/config.sub \
		$(BUILDDIR)-$(*)/autoconf/
	cd $(BUILDDIR)-$(*) && \
		QMAKE=/usr/bin/qmake-qt4 ./configure --config-cache \
		--host=${DEB_HOST_GNU_TYPE} --build=${DEB_BUILD_GNU_TYPE} \
		--prefix=/usr \
		--with-archivedir=/nonexistant/path/to/file/archive/dir \
		--sysconfdir=/etc/bacula --with-scriptdir=/etc/bacula/scripts \
		--sharedstatedir=/var/lib/bacula \
		--localstatedir=/var/lib/bacula \
		--with-pid-dir=/var/run/bacula --with-smtp-host=localhost \
		--with-working-dir=/var/lib/bacula \
		--with-subsys-dir=/var/lock \
		--mandir=\$${prefix}/share/man \
		--infodir=\$${prefix}/share/info \
		$(CONF_ALL) $(CONF_$(*))
	touch $@

build-stamp-%: configure-stamp-%
	dh_testdir
	@echo " *** DEBIAN *** BUILDING VARIANT $*"

# Main building process
	$(MAKE) -C $(BUILDDIR)-$(*)

# Grrr... client-only does not build needed db-independent 'bsmtp', 'stored'
	$(MAKE) -C $(BUILDDIR)-$(*)/src/tools
	$(MAKE) -C $(BUILDDIR)-$(*)/src/stored

	chmod 755 debian/additions/postinst-common
	chmod 755 debian/additions/bconsole

	touch $@

build-arch: build-stamp
build-stamp: $(foreach v,$(VARIANTS),build-stamp-$(v))
	touch $@

build-indep: build-indep-stamp
build-indep-stamp:
	dh_testdir

	touch $@


build: patch build-arch build-indep

###############################################
# Cleaning macro
###############################################

clean:

	$(RM) *stamp*

	dh_clean

	$(RM) -r debian/tmp* debian/bacula-doc \
		scripts/disk-changer  

	## delete ${FLAVORED_BINARIES} 
	$(RM) $(foreach pkg,$(VARIANTS), src/dird/bacula-dir.$(pkg) src/tools/dbcheck.$(pkg) src/stored/bscan.$(pkg) src/stored/bcopy.$(pkg))

	#-$(MAKE) -C doc/latex clean

	$(RM) build-arch-flavor-stamp

	$(RM) patch-stamp


# Macro to extract a here document and put it in place
# args: 1 -- db name, 2 -- file to extract, 3 -- version
define ext-upgrade
debian/patches/extract_here < $(2) > debian/bacula-director-$(1)/$(DBC)/bacula-director-$(1)/upgrade/$(1)/$(3)
endef

# Macro to process upgrades for all flavors
# args: 1 -- file to extract relative to updatedb/update_x_tables_
#       2 -- version
define ext-upgrade-all
$(call ext-upgrade,pgsql,debian/tmp-build-pgsql/updatedb/update_postgresql_tables_$(1),$(2))
$(call ext-upgrade,mysql,debian/tmp-build-mysql/updatedb/update_mysql_tables_$(1),$(2))
$(call ext-upgrade,sqlite3,debian/tmp-build-sqlite3/updatedb/update_sqlite3_tables_$(1),$(2))
endef

# Macro to process latest version upgrades for all flavors
# args: 1 -- version
define ext-upgrade-latest
$(call ext-upgrade,pgsql,debian/tmp-build-pgsql/src/cats/update_postgresql_tables,$(1))
$(call ext-upgrade,mysql,debian/tmp-build-mysql/src/cats/update_mysql_tables,$(1))
$(call ext-upgrade,sqlite3,debian/tmp-build-sqlite3/src/cats/update_sqlite3_tables,$(1))
endef

# Macro to extract a here document for install and put it in place
# args: 1 -- db name, 2 -- file to extract
# We append so we can do the postgresql hack for datestyle
define ext-install
debian/patches/extract_here < $(2) > debian/bacula-director-$(1)/$(DBC)/bacula-director-$(1)/install/$(1)
endef

install: build install-stamp
install-stamp: build-stamp $(foreach v,$(VARIANTS),install-stamp-$(v))
	dh_installdirs -a
	dh_install -pbacula-director-common

	dh_install -pbacula-fd
	dh_install -pbacula-console -pbacula-console-qt
	cp $(DEFAULTINSTALLDIR)/usr/sbin/bconsole debian/bacula-console/usr/sbin/bacula-console
	cp debian/tmp-build-$(DEFAULTVARIANT)/src/qt-console/.libs/bat debian/bacula-console-qt/usr/bin/bat
	cp debian/tmp-build-mysql/src/cats/.libs/libbaccats-*$(MAINVER).so debian/tmp-install-mysql/usr/lib/bacula
	cp debian/tmp-build-sqlite3/src/cats/.libs/libbaccats-*$(MAINVER).so debian/tmp-install-sqlite3/usr/lib/bacula
	cp debian/tmp-build-pgsql/src/cats/.libs/libbaccats-*$(MAINVER).so debian/tmp-install-pgsql/usr/lib/bacula

######### dbconfig-common stuff
#	$(call ext-upgrade-all,7_to_8,1.36.0)
#	$(call ext-upgrade-all,8_to_9,1.38.0)
#	$(call ext-upgrade-all,9_to_10,2.0.0)
# above lines commented out because they are pre-lenny and no longer needed
	$(call ext-upgrade-all,10_to_11,3.0.0)
	$(call ext-upgrade-all,11_to_12,5.0.0)

# Sometimes the latest release doesn't have a copy of the data in updatedb.
# Manually install those.  CHECK THIS FOR EACH NEW RELEASE, and move older
# versions to an ext-upgrade-all line as above.

	$(call ext-upgrade-latest,5.2.5-0ubuntu6.1) # 5.2.0 upgrade 12 to 14


# PostgreSQL
	echo "ALTER DATABASE _DBC_DBNAME_ SET datestyle TO 'ISO, YMD';" > \
		debian/bacula-director-pgsql/$(DBC)/bacula-director-pgsql/install-dbadmin/pgsql

	$(call ext-install,pgsql,debian/tmp-build-pgsql/src/cats/make_postgresql_tables)
# MySQL
	$(call ext-install,mysql,debian/tmp-build-mysql/src/cats/make_mysql_tables)
# Remove USE bacula -- dbconfig-common selects the database for us
	sed -i -e 's/USE \$${db_name};//' -e 's/USE bacula;//' debian/bacula-director-mysql/$(DBC)/bacula-director-mysql/install/mysql debian/bacula-director-mysql/$(DBC)/bacula-director-mysql/upgrade/mysql/*

# Next two lines required for upgrade to 5.0.0.  Remove that and
# debian/bacula-director-mysql.script.5.0.0 post-squeeze
	cp debian/bacula-director-mysql.script.5.0.0 \
			debian/bacula-director-mysql/usr/share/dbconfig-common/scripts/bacula-director-mysql/upgrade/mysql/5.0.0
	chmod 0755 debian/bacula-director-mysql/usr/share/dbconfig-common/scripts/bacula-director-mysql/upgrade/mysql/5.0.0

# SQLite3
	$(call ext-install,sqlite3,debian/tmp-build-sqlite3/src/cats/make_sqlite3_tables)

	dh_link -pbacula-console usr/share/man/man8/bconsole.8.gz usr/share/man/man8/bacula-console.8.gz

	touch $@

install-stamp-%: build-stamp-%
	@echo " *** DEBIAN *** INSTALLING VARIANT $*"
	dh_installdirs -pbacula-director-$(*)
	mkdir $(INSTALLDIR)-$(*)
	$(MAKE) -C $(BUILDDIR)-$(*) install DESTDIR=$(INSTALLDIR)-$(*)

	dh_install -pbacula-director-$(*)
	cp debian/make_catalog_backup_awk.$(*) debian/bacula-director-$(*)/etc/bacula/scripts/make_catalog_backup_awk
	touch $@


install-indep: build install-stamp
	dh_testdir
	dh_testroot 
	dh_install -i
	dh_installdirs -i
	dh_link -pbacula-director-common
	dh_install -pbacula -pbacula-client -pbacula-server 
	#install doc/html-manual/* \
	#	$(CURDIR)/debian/bacula-doc/usr/share/doc/bacula-doc/html-manual
	#$(RM) $(CURDIR)/debian/bacula-doc/usr/share/doc/bacula-doc/html-manual/*.wml

install-arch: build install-stamp
	dh_install -a
	dh_link -pbacula-common
	for f in bconsole.conf bat.conf \
		bacula-sd.conf bacula-fd.conf tray-monitor.conf; do \
		debian/patches/fix_config \
			debian/tmp-install-sqlite3/etc/bacula/$$f \
			debian/bacula-common/usr/share/bacula-common/defconfig/$$f; \
	done
	debian/patches/fix_director \
		debian/tmp-install-sqlite3/etc/bacula/bacula-dir.conf \
		debian/bacula-common/usr/share/bacula-common/defconfig/bacula-dir.conf

	cp $(CURDIR)/debian/common-functions $(CURDIR)/debian/bacula-common/usr/share/bacula-common
	chmod 755 $(CURDIR)/debian/bacula-common/usr/lib/bacula/btraceback

patch: patch-stamp
patch-stamp:
	chmod 755 debian/patches/fix_config debian/patches/fix_director \
		debian/patches/extract_here
	chmod 755 debian/additions/bconsole

	touch patch-stamp

# Build architecture-independent files here.
# Pass -i to all debhelper commands in this target to reduce clutter.
binary-indep: build install-indep patch
	dh_testdir -i
	dh_testroot -i
#	dh_installdebconf -i
	dh_installdocs -i -X.cvsignore -X1 -X*.wml -X*.inc -X*.list -X*.pl -X*.apf -X*.book -Nbacula
	dh_installexamples -i
#	dh_installmenu -i
	dh_installlogrotate -i
#	dh_installinit -i
	dh_installcron -i
	dh_installman -i
	dh_installinfo -i
	dh_installchangelogs ChangeLog -i
	rm -r debian/bacula/usr/share/doc/bacula
	dh_link -i
	dh_compress -i -X.pdf
	dh_lintian -i
	dh_fixperms -i
	dh_installdeb -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i


# Build architecture-dependent files here.
binary-arch: build install install-arch binary-arch-common

binary-arch-common: DH_OPTIONS=
binary-arch-common: build install
	dh_testdir -a
	dh_testroot -a
	dh_installdebconf -a
	dh_installdocs -a
	dh_installexamples -a
	dh_installmenu -pbacula-console -pbacula-console-qt
	dh_installlogrotate -a
	dh_installinit -pbacula-sd -- defaults 90 10
	dh_installinit -pbacula-fd -- defaults 91 9
	dh_installinit --name=bacula-director -pbacula-director-common --no-start -- defaults 92 8
#	dh_installcron -a
	dh_installman -a
	dh_installinfo -a
	dh_installchangelogs ChangeLog -a
	dh_strip -a
	dh_link -a
	dh_lintian -a
	dh_compress -a
	dh_fixperms -a
	dh_makeshlibs -a
	dh_installdeb -a

# Handle shlibs for the database packages specially so they get
# the deps on the correct libraries.
	dh_shlibdeps -pbacula-sd-mysql -Lbacula-common-mysql
	dh_shlibdeps -pbacula-director-mysql -Lbacula-common-mysql
	dh_shlibdeps -pbacula-sd-sqlite3 -Lbacula-common-sqlite3
	dh_shlibdeps -pbacula-director-sqlite3 -Lbacula-common-sqlite3
	dh_shlibdeps -pbacula-sd-pgsql -Lbacula-common-pgsql
	dh_shlibdeps -pbacula-director-pgsql -Lbacula-common-pgsql

# Now build all other shlibdeps.
	dh_shlibdeps -a -Nbacula-sd-mysql -Nbacula-director-mysql \
		-Nbacula-sd-sqlite3 -Nbacula-director-sqlite3 \
		-Nbacula-sd-pgsql -Nbacula-director-pgsql

	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

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