#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
#
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.
#
# Modified to make a template file for a multi-binary package with separated
# build-arch and build-indep targets  by Bill Allombert 2001

DEBVERS := $(shell dpkg-parsechangelog | sed -n -e 's/^Version: //p')
VERSION := $(shell echo '$(DEBVERS)' | sed -e 's/^[[:digit:]]*://' -e 's/[~-].*//')
PACKAGE = $(shell dh_listpackages|head -n 1|cut -d '-' -f 1)
SYSCONFDIR = "/etc"
DESTDIR = "debian/tmp"

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

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

configure: configure-stamp
configure-stamp:
	dh_testdir
	cp packaging/debian/replace.properties replace.properties.tmp
	echo VERSION=${VERSION} >> replace.properties.tmp
	touch configure-stamp

build: build-indep

build-indep: build-indep-stamp

build-indep-stamp: configure
	mvn package -DskipTests -Dsystemvm \
        -Dcs.replace.properties=replace.properties.tmp
	touch $@

clean:
	dh_testdir
	dh_testroot
	rm -f build-arch-stamp build-indep-stamp configure-stamp
	rm -f replace.properties.tmp
	dh_clean

install:
	dh_testdir
	dh_testroot
	dh_prep -s

	# Common packages
	mkdir -p $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)
	mkdir -p $(DESTDIR)/$(SYSCONFDIR)/init.d
	mkdir -p $(DESTDIR)/var/cache/$(PACKAGE)
	mkdir -p $(DESTDIR)/var/log/$(PACKAGE)
	mkdir -p $(DESTDIR)/var/lib/$(PACKAGE)
	mkdir -p $(DESTDIR)/usr/bin
	mkdir -p $(DESTDIR)/usr/share

	# cloudstack-agent
	mkdir $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/agent
	mkdir $(DESTDIR)/var/log/$(PACKAGE)/agent
	mkdir $(DESTDIR)/usr/share/$(PACKAGE)-agent
	mkdir $(DESTDIR)/usr/share/$(PACKAGE)-agent/plugins
	install -D agent/target/cloud-agent-$(VERSION)-SNAPSHOT.jar $(DESTDIR)/usr/share/$(PACKAGE)-agent/lib/$(PACKAGE)-agent.jar
	install -D plugins/hypervisors/kvm/target/cloud-plugin-hypervisor-kvm-$(VERSION)-SNAPSHOT.jar $(DESTDIR)/usr/share/$(PACKAGE)-agent/lib/
	install -D plugins/hypervisors/kvm/target/dependencies/* $(DESTDIR)/usr/share/$(PACKAGE)-agent/lib/
	install -D packaging/debian/init/cloud-agent $(DESTDIR)/$(SYSCONFDIR)/init.d/$(PACKAGE)-agent
	install -D agent/bindir/cloud-setup-agent.in $(DESTDIR)/usr/bin/cloudstack-setup-agent
	install -D agent/bindir/cloud-ssh.in $(DESTDIR)/usr/bin/cloud-ssh
	install -D agent/target/transformed/* $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/agent

	# cloudstack-management
	mkdir $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/server
	mkdir $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management
	mkdir -p $(DESTDIR)/$(SYSCONFDIR)/security/limits.d/
	mkdir -p $(DESTDIR)/$(SYSCONFDIR)/sudoers.d/
	mkdir -p $(DESTDIR)/usr/share/$(PACKAGE)-management
	mkdir -p $(DESTDIR)/usr/share/$(PACKAGE)-management/webapps/client
	mkdir $(DESTDIR)/usr/share/$(PACKAGE)-management/setup
	mkdir $(DESTDIR)/var/log/$(PACKAGE)/management
	mkdir $(DESTDIR)/var/cache/$(PACKAGE)/management
	mkdir $(DESTDIR)/var/cache/$(PACKAGE)/management/work
	mkdir $(DESTDIR)/var/cache/$(PACKAGE)/management/temp
	mkdir $(DESTDIR)/var/log/$(PACKAGE)/ipallocator
	mkdir $(DESTDIR)/var/lib/$(PACKAGE)/management
	mkdir $(DESTDIR)/var/lib/$(PACKAGE)/mnt
	cp -r client/target/utilities/scripts/db/* $(DESTDIR)/usr/share/$(PACKAGE)-management/setup/
	cp -r client/target/cloud-client-ui-$(VERSION)-SNAPSHOT/* $(DESTDIR)/usr/share/$(PACKAGE)-management/webapps/client/
	cp server/target/conf/* $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/server/
	cp client/target/conf/* $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management/

	# nast hack for a couple of configuration files
	mv $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/server/cloudstack-limits.conf $(DESTDIR)/$(SYSCONFDIR)/security/limits.d/
	mv $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/server/cloudstack-sudoers $(DESTDIR)/$(SYSCONFDIR)/sudoers.d/cloudstack
	chmod 0440 $(DESTDIR)/$(SYSCONFDIR)/sudoers.d/cloudstack

	ln -s tomcat6-nonssl.conf $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management/tomcat6.conf
	ln -s server-nonssl.xml $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management/server.xml
	install -D packaging/debian/init/cloud-management $(DESTDIR)/$(SYSCONFDIR)/init.d/$(PACKAGE)-management
	install -D client/bindir/cloud-update-xenserver-licenses.in $(DESTDIR)/usr/bin/cloud-update-xenserver-licenses
	ln -s /usr/share/tomcat6/bin $(DESTDIR)/usr/share/$(PACKAGE)-management/bin
	# Remove configuration in /ur/share/cloudstack-management/webapps/client/WEB-INF
	# This should all be in /etc/cloudstack/management
	rm $(DESTDIR)/usr/share/$(PACKAGE)-management/webapps/client/WEB-INF/classes/*.*
	ln -s ../../..$(SYSCONFDIR)/$(PACKAGE)/management $(DESTDIR)/usr/share/$(PACKAGE)-management/conf
	ln -s ../../../usr/share/tomcat6/lib $(DESTDIR)/usr/share/$(PACKAGE)-management/lib
	ln -s ../../../var/log/$(PACKAGE)/management $(DESTDIR)/usr/share/$(PACKAGE)-management/logs
	ln -s ../../../var/cache/$(PACKAGE)/management/temp $(DESTDIR)/usr/share/$(PACKAGE)-management/temp
	ln -s ../../../var/cache/$(PACKAGE)/management/work $(DESTDIR)/usr/share/$(PACKAGE)-management/work

	# cloudstack-common
	mkdir -p $(DESTDIR)/usr/share/$(PACKAGE)-common
	mkdir $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts
	mkdir $(DESTDIR)/usr/share/$(PACKAGE)-common/setup
	mkdir $(DESTDIR)/usr/share/$(PACKAGE)-common/lib
	cp -r scripts/installer $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts
	cp -r scripts/network $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts
	cp -r scripts/storage $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts
	cp -r scripts/util $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts
	cp -r scripts/vm $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts
	install -D client/target/utilities/bin/cloud-migrate-databases $(DESTDIR)/usr/bin
	install -D client/target/utilities/bin/cloud-set-guest-password $(DESTDIR)/usr/bin
	install -D client/target/utilities/bin/cloud-set-guest-sshkey $(DESTDIR)/usr/bin
	install -D client/target/utilities/bin/cloud-setup-databases $(DESTDIR)/usr/bin
	install -D client/target/utilities/bin/cloud-setup-management $(DESTDIR)/usr/bin
	install -D services/console-proxy/server/dist/systemvm.iso $(DESTDIR)/usr/share/$(PACKAGE)-common/vms/systemvm.iso
	# We need jasypt for cloud-install-sys-tmplt, so this is a nasty hack to get it into the right place
	install -D agent/target/dependencies/jasypt-1.9.0.jar $(DESTDIR)/usr/share/$(PACKAGE)-common/lib

	# cloudstack-python
	mkdir -p $(DESTDIR)/usr/lib/python2.7/dist-packages
	cp -r python/lib/cloud* $(DESTDIR)/usr/lib/python2.7/dist-packages

	# cloudstack-usage
	mkdir $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/usage
	mkdir $(DESTDIR)/var/log/$(PACKAGE)/usage
	mkdir $(DESTDIR)/usr/share/$(PACKAGE)-usage
	mkdir $(DESTDIR)/usr/share/$(PACKAGE)-usage/plugins
	install -D usage/target/cloud-usage-$(VERSION)-SNAPSHOT.jar $(DESTDIR)/usr/share/$(PACKAGE)-usage/lib/$(PACKAGE)-usage.jar
	install -D usage/target/dependencies/* $(DESTDIR)/usr/share/$(PACKAGE)-usage/lib/
	cp usage/target/transformed/* $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/usage/
	install -D packaging/debian/init/cloud-usage $(DESTDIR)/$(SYSCONFDIR)/init.d/$(PACKAGE)-usage

	# cloudstack-awsapi
	mkdir $(DESTDIR)/var/log/$(PACKAGE)/awsapi

	dh_installdirs
	dh_install
	dh_python2

binary: install
	dh_install
	dh_installchangelogs
	dh_installdocs -A tools/whisker/LICENSE tools/whisker/NOTICE INSTALL.md
	dh_installman
	dh_link
	dh_strip
	dh_compress
	dh_fixperms
	dh_makeshlibs
	dh_installdeb
	dh_gencontrol
	dh_md5sums
	dh_builddeb
