#!/usr/bin/make -f

# $Id$

# Uncomment this to turn on verbose mode.
export DH_VERBOSE=1
export SHELL=/bin/bash

export JAVA_HOME=$(shell core/cli/src/main/resources/bin/find-java.sh 1.8 1.9)

export OPTS_ASSEMBLIES=-Passemblies
export OPTS_PROFILES=-Prun-expensive-tasks

export BUILDDEFINES=\
	-Dopennms.home=/usr/share/opennms \
	-Denable.license=true \
	-Ddist.dir=$(CURDIR)/debian -Ddist.name=temp \
	-Dinstall.dir=/usr/share/opennms \
	-Dinstall.bin.dir=/usr/share/opennms/bin \
	-Dinstall.rrdtool.bin=/usr/bin/rrdtool \
	-Dinstall.share.dir=/var/lib/opennms \
	-Dinstall.servlet.dir=/usr/share/opennms/webapps \
	-Dinstall.webapps.dir=/usr/share/opennms/webapps \
	-Dinstall.logs.dir=/var/log/opennms \
	-Dinstall.pid.file=/var/run/opennms/opennms.pid \
	-Dmaven.test.skip.exec=true \
	-DskipTests=true \
	-DskipITs=true \
	-Dproduct.release=1 \
	-Dproduct.snapshot=true \
	-Daether.connector.basic.threads=1 \
	-Daether.connector.resumeDownloads=false \
	--builder smart \
	--threads $${CCI_MAXCPU:-2} \
	$(OPTS_PROFILES)

configure:

STAMP_BUILD = debian/stamp-build
build: configure $(STAMP_BUILD)
$(STAMP_BUILD):
	dh_testdir
	# -Duser.home=$(HOME) is needed to get maven to use the correct ~/.m2/ directory when being run with fakeroot
	@if [ -z "$$OPENNMS_SKIP_COMPILE" ] || [ "$$OPENNMS_SKIP_COMPILE" = 0 ]; then \
		./compile.pl $(shell debian/get-build-args.sh) $(BUILDDEFINES) -PskipCompile install; \
	fi
	./assemble.pl $(shell debian/get-build-args.sh) -Dbuild.profile=fulldir $(BUILDDEFINES) -PskipCompile install
	find debian/temp -type d -name .svn -exec rm -rf {} \;
	find debian/temp -type d -name .git -exec rm -rf {} \;
	touch $(STAMP_BUILD)

clean:
	dh_testdir
	dh_testroot
	./compile.pl $(OPTS_PROFILES) $(OPTS_ASSEMBLIES) -Duser.home=$(HOME) -Ddist.dir=$(CURDIR)/debian -Ddist.name=temp clean
	dh_clean
	rm -f $(STAMP_BUILD)

install: build
	dh_testdir
	dh_clean -k --exclude=temp
	dh_installdirs
	dh_testroot

	rsync -avr --exclude=examples debian/temp/etc/ debian/opennms-common/var/lib/opennms/etc-pristine/
	chmod -R go-w debian/opennms-common/var/lib/opennms/etc-pristine/

	mkdir -p debian/opennms-common/var/lib/opennms/web-inf-pristine/spring-security.d/
	rsync -avr --exclude=examples debian/temp/jetty-webapps/opennms/WEB-INF/spring-security.d/ debian/opennms-common/var/lib/opennms/web-inf-pristine/spring-security.d/
	cp debian/temp/jetty-webapps/opennms/WEB-INF/applicationContext-spring-security.xml debian/opennms-common/var/lib/opennms/web-inf-pristine/applicationContext-spring-security.xml
	cp debian/temp/jetty-webapps/opennms/WEB-INF/web.xml debian/opennms-common/var/lib/opennms/web-inf-pristine/web.xml
	cp debian/temp/etc/examples/jetty.xml debian/opennms-common/var/lib/opennms/web-inf-pristine/jetty.xml
	chmod -R go-w debian/opennms-common/var/lib/opennms/web-inf-pristine/
	
	##
	## Setup the alarm northbounders
	##
	install -d -m 755 debian/opennms-plugin-northbounder-jms/usr/share/java/opennms
	install -d -m 755 debian/opennms-plugin-northbounder-jms/etc/opennms
	install -d -m 755 debian/opennms-plugin-northbounder-jms/var/lib/opennms/etc-pristine
	mv debian/temp/lib/opennms-alarm-northbounder-jms-*.jar                                    debian/opennms-plugin-northbounder-jms/usr/share/java/opennms/
	mv debian/temp/etc/jms-northbounder-configuration.xml                                      debian/opennms-plugin-northbounder-jms/etc/opennms/
	mv debian/opennms-common/var/lib/opennms/etc-pristine/jms-northbounder-configuration.xml   debian/opennms-plugin-northbounder-jms/var/lib/opennms/etc-pristine/
	sed -e 's,@PACKAGE@,opennms-plugin-northbounder-jms,g' debian/package-permissions.sh > debian/opennms-plugin-northbounder-jms.postinst
	
	##
	## Setup the provision adapter packages
	##
	install -d -m 755 debian/opennms-plugin-provisioning-{dns,link,map,reverse-dns,snmp-asset,snmp-hardware-inventory,wsman-asset}/usr/share/java/opennms
	install -d -m 755 debian/opennms-plugin-provisioning-{link,map,snmp-asset,snmp-hardware-inventory,wsman-asset}/etc/opennms
	install -d -m 755 debian/opennms-plugin-provisioning-{link,map,snmp-asset,snmp-hardware-inventory,wsman-asset}/var/lib/opennms/etc-pristine
	mv debian/temp/lib/opennms-dns-provisioning-adapter*.jar                 debian/opennms-plugin-provisioning-dns/usr/share/java/opennms/
	mv debian/temp/lib/opennms-reverse-dns-provisioning-adapter*.jar         debian/opennms-plugin-provisioning-reverse-dns/usr/share/java/opennms/
	mv debian/temp/lib/opennms-snmp-asset-provisioning-adapter*.jar          debian/opennms-plugin-provisioning-snmp-asset/usr/share/java/opennms/
	mv debian/temp/lib/opennms-snmp-hardware-inventory-provisioning-adapter*.jar  debian/opennms-plugin-provisioning-snmp-hardware-inventory/usr/share/java/opennms/
	mv debian/temp/lib/opennms-wsman-asset-provisioning-adapter*.jar         debian/opennms-plugin-provisioning-wsman-asset/usr/share/java/opennms/
	mv debian/temp/etc/snmp-asset-adapter-configuration.xml                  debian/opennms-plugin-provisioning-snmp-asset/etc/opennms/
	mv debian/temp/etc/snmp-hardware-inventory-adapter-configuration.xml     debian/opennms-plugin-provisioning-snmp-hardware-inventory/etc/opennms/
	mv debian/temp/etc/wsman-asset-adapter-configuration.xml                 debian/opennms-plugin-provisioning-wsman-asset/etc/opennms/
	find debian/opennms-plugin*/etc/opennms -type f -execdir chmod 644 {} \;
	sed -e 's,@PACKAGE@,opennms-plugin-provisioning-dns,g' debian/package-permissions.sh > debian/opennms-plugin-provisioning-dns.postinst
	sed -e 's,@PACKAGE@,opennms-plugin-provisioning-link,g' debian/package-permissions.sh > debian/opennms-plugin-provisioning-link.postinst
	sed -e 's,@PACKAGE@,opennms-plugin-provisioning-map,g' debian/package-permissions.sh > debian/opennms-plugin-provisioning-map.postinst
	sed -e 's,@PACKAGE@,opennms-plugin-provisioning-reverse-dns,g' debian/package-permissions.sh > debian/opennms-plugin-provisioning-reverse-dns.postinst
	sed -e 's,@PACKAGE@,opennms-plugin-provisioning-snmp-asset,g' debian/package-permissions.sh > debian/opennms-plugin-provisioning-snmp-asset.postinst
	sed -e 's,@PACKAGE@,opennms-plugin-provisioning-snmp-hardware-inventory,g' debian/package-permissions.sh > debian/opennms-plugin-provisioning-snmp-hardware-inventory.postinst
	sed -e 's,@PACKAGE@,opennms-plugin-provisioning-wsman-asset,g' debian/package-permissions.sh > debian/opennms-plugin-provisioning-wsman-asset.postinst
	
	# etc-pristine version
	mv debian/opennms-common/var/lib/opennms/etc-pristine/snmp-asset-adapter-configuration.xml debian/opennms-plugin-provisioning-snmp-asset/var/lib/opennms/etc-pristine/
	mv debian/opennms-common/var/lib/opennms/etc-pristine/snmp-hardware-inventory-adapter-configuration.xml debian/opennms-plugin-provisioning-snmp-hardware-inventory/var/lib/opennms/etc-pristine/
	mv debian/opennms-common/var/lib/opennms/etc-pristine/wsman-asset-adapter-configuration.xml debian/opennms-plugin-provisioning-wsman-asset/var/lib/opennms/etc-pristine/
	
	##
	## Setup the protocol packages
	##
	install -d -m 755 debian/opennms-plugin-protocol-{cifs,nsclient,radius}/usr/share/java/opennms
	install -d -m 755 debian/opennms-plugin-protocol-{cifs,nsclient,radius}/etc/opennms
	install -d -m 755 debian/opennms-plugin-protocol-{cifs,nsclient,radius}/var/lib/opennms/etc-pristine
	install -d -m 755 debian/opennms-plugin-protocol-{cifs,nsclient,radius}/var/lib/opennms/xsds
	
	# Setup Juniper TCA collector
	install -d -m 755 debian/opennms-plugin-collector-juniper-tca/usr/share/java/opennms
	install -d -m 755 debian/opennms-plugin-collector-juniper-tca/etc/opennms
	install -d -m 755 debian/opennms-plugin-collector-juniper-tca/var/lib/opennms/etc-pristine
	install -d -m 755 debian/opennms-plugin-collector-juniper-tca/var/lib/opennms/xsds
	install -d -m 755 debian/opennms-plugin-collector-juniper-tca/etc/opennms/{datacollection,snmp-graph.properties.d}
	sed -e 's,@PACKAGE@,opennms-plugin-collector-juniper-tca,g' debian/package-permissions.sh > debian/opennms-plugin-collector-juniper-tca.postinst
	
	# Setup ticketers
	install -d -m 755 debian/opennms-plugin-ticketer-{jira,rt}/usr/share/java/opennms
	install -d -m 755 debian/opennms-plugin-ticketer-{jira,rt}/etc/opennms
	install -d -m 755 debian/opennms-plugin-ticketer-{jira,rt}/var/lib/opennms/etc-pristine

	# CIFS
	mv debian/temp/lib/org.opennms.protocols.cifs-*.jar                                        debian/opennms-plugin-protocol-cifs/usr/share/java/opennms/
	sed -e 's,@PACKAGE@,opennms-plugin-protocol-cifs,g' debian/package-permissions.sh > debian/opennms-plugin-protocol-cifs.postinst

	# NSClient
	mv debian/temp/lib/org.opennms.protocols.nsclient-*.jar                                    debian/opennms-plugin-protocol-nsclient/usr/share/java/opennms/
	mv debian/temp/etc/nsclient*.xml                                                           debian/opennms-plugin-protocol-nsclient/etc/opennms/
	mv debian/temp/share/xsds/nsclient*.xsd                                                    debian/opennms-plugin-protocol-nsclient/var/lib/opennms/xsds/
	mv debian/opennms-common/var/lib/opennms/etc-pristine/nsclient*.xml                        debian/opennms-plugin-protocol-nsclient/var/lib/opennms/etc-pristine/
	sed -e 's,@PACKAGE@,opennms-plugin-protocol-nsclient,g' debian/package-permissions.sh > debian/opennms-plugin-protocol-nsclient.postinst
	
	# RADIUS
	mv debian/temp/lib/*radius*.jar                                                            debian/opennms-plugin-protocol-radius/usr/share/java/opennms/
	sed -e 's,@PACKAGE@,opennms-plugin-protocol-radius,g' debian/package-permissions.sh > debian/opennms-plugin-protocol-radius.postinst
	
	# VTD-XML
	install -d -m 755 debian/opennms-plugin-collector-vtdxml-handler/usr/share/java/opennms
	mv debian/temp/lib/vtd-xml-*.jar                                                           debian/opennms-plugin-collector-vtdxml-handler/usr/share/java/opennms/
	mv debian/temp/lib/opennms-vtdxml-collector-handler-*.jar                                  debian/opennms-plugin-collector-vtdxml-handler/usr/share/java/opennms/
	sed -e 's,@PACKAGE@,opennms-plugin-collector-vtdxml-handler,g' debian/package-permissions.sh > debian/opennms-plugin-collector-vtdxml-handler.postinst
	
	# Juniper TCA
	install -d -m 755 debian/opennms-plugin-collector-juniper-tca/var/lib/opennms/etc-pristine/{datacollection,snmp-graph.properties.d}
	mv debian/temp/lib/org.opennms.features.juniper-tca-collector-*.jar                        debian/opennms-plugin-collector-juniper-tca/usr/share/java/opennms/
	mv debian/temp/etc/tca*-config.xml                                                         debian/opennms-plugin-collector-juniper-tca/etc/opennms/
	mv debian/temp/etc/datacollection/juniper-tca*                                             debian/opennms-plugin-collector-juniper-tca/etc/opennms/datacollection/
	mv debian/temp/etc/snmp-graph.properties.d/juniper-tca*                                    debian/opennms-plugin-collector-juniper-tca/etc/opennms/snmp-graph.properties.d/
	mv debian/opennms-common/var/lib/opennms/etc-pristine/tca*-config.xml                      debian/opennms-plugin-collector-juniper-tca/var/lib/opennms/etc-pristine/
	mv debian/opennms-common/var/lib/opennms/etc-pristine/datacollection/juniper-tca*          debian/opennms-plugin-collector-juniper-tca/var/lib/opennms/etc-pristine/datacollection/
	mv debian/opennms-common/var/lib/opennms/etc-pristine/snmp-graph.properties.d/juniper-tca* debian/opennms-plugin-collector-juniper-tca/var/lib/opennms/etc-pristine/snmp-graph.properties.d/
	sed -e 's,@PACKAGE@,opennms-plugin-collector-juniper-tca,g' debian/package-permissions.sh > debian/opennms-plugin-collector-juniper-tca.postinst
	
	# JIRA
	mkdir -p debian/opennms-plugin-ticketer-jira/usr/share/opennms/system/org/opennms/features/jira-troubleticketer
	mv debian/temp/system/org/opennms/features/jira-troubleticketer/*                          debian/opennms-plugin-ticketer-jira/usr/share/opennms/system/org/opennms/features/jira-troubleticketer/
	mkdir -p debian/opennms-plugin-ticketer-jira/usr/share/opennms/system/org/opennms/features/jira-client
	mv debian/temp/system/org/opennms/features/jira-client/*                                   debian/opennms-plugin-ticketer-jira/usr/share/opennms/system/org/opennms/features/jira-client/
	mv debian/temp/etc/jira.properties                                                         debian/opennms-plugin-ticketer-jira/etc/opennms/
	mv debian/opennms-common/var/lib/opennms/etc-pristine/jira.properties                      debian/opennms-plugin-ticketer-jira/var/lib/opennms/etc-pristine/
	sed -e 's,@PACKAGE@,opennms-plugin-ticketer-jira,g' debian/package-permissions.sh > debian/opennms-plugin-ticketer-jira.postinst
	
	# RT
	mv debian/temp/lib/opennms-integration-rt*.jar                                             debian/opennms-plugin-ticketer-rt/usr/share/java/opennms/
	mv debian/temp/etc/rt.properties                                                           debian/opennms-plugin-ticketer-rt/etc/opennms/
	mv debian/opennms-common/var/lib/opennms/etc-pristine/rt.properties                        debian/opennms-plugin-ticketer-rt/var/lib/opennms/etc-pristine/
	sed -e 's,@PACKAGE@,opennms-plugin-ticketer-rt,g' debian/package-permissions.sh > debian/opennms-plugin-ticketer-rt.postinst
	
	##
	## opennms-jmx-config-generator
	##
	install -d -m 755 debian/opennms-jmx-config-generator/usr/share/opennms/bin debian/opennms-jmx-config-generator/usr/bin debian/opennms-jmx-config-generator/usr/share/java/opennms
	install -m 755 debian/opennms-jmx-config-generator.bin debian/opennms-jmx-config-generator/usr/bin/opennms-jmx-config-generator
	mv debian/temp/bin/jmx-config-generator debian/opennms-jmx-config-generator/usr/share/opennms/bin/
	mv debian/temp/lib/opennms_jmx_config_generator.jar debian/opennms-jmx-config-generator/usr/share/java/opennms/
	sed -e 's,@PACKAGE@,opennms-jmx-config-generator,g' debian/package-permissions.sh > debian/opennms-jmx-config-generator.postinst
	
	##
	## Setup the libopennms-java package
	##
	mv debian/temp/lib/opennms*.jar debian/libopennms-java/usr/share/java/opennms/
	mv debian/temp/lib/endorsed     debian/libopennms-java/usr/share/java/opennms/
	chmod 644 debian/libopennms-java/usr/share/java/opennms/*.jar debian/libopennms-java/usr/share/java/opennms/endorsed/*.jar
	sed -e 's,@PACKAGE@,libopennms-java,g' debian/package-permissions.sh > debian/libopennms-java.postinst

	##
	## Setup the libopennmsdeps-java package
	##
	mv debian/temp/lib/*.jar debian/libopennmsdeps-java/usr/share/java/opennms/
	chmod 644 debian/libopennmsdeps-java/usr/share/java/opennms/*
	sed -e 's,@PACKAGE@,libopennmsdeps-java,g' debian/package-permissions.sh > debian/libopennmsdeps-java.postinst

	##
	## Setup the opennms-common package
	##
	mv debian/temp/bin/* debian/opennms-common/usr/share/opennms/bin/
	find debian/opennms-common/usr/share/opennms/bin -type f -execdir chmod 755 {} \;
	mv debian/temp/etc/* debian/opennms-common/etc/opennms/
	mv debian/temp/lib   debian/opennms-common/usr/share/opennms/
	mv debian/temp/agent   debian/opennms-common/usr/share/opennms/
	install -d -m 755 debian/opennms-common/var/lib/opennms/xsds
	mv debian/temp/share/xsds/* debian/opennms-common/var/lib/opennms/xsds/
	find debian/opennms-common/etc/opennms -type f -execdir chmod 644 {} \;
	chmod 640 debian/opennms-common/etc/opennms/users.xml
	install -c -m 644 debian/opennms-common/etc/opennms/opennms.service debian/opennms-common.opennms.service
	
	# move karaf stuff to common
	mv debian/temp/{data,deploy,system} debian/opennms-common/usr/share/opennms/
	find debian/opennms-common/usr/share/opennms/{data,deploy,system} ! -type d -execdir chmod 644 {} \;
	find debian/opennms-common/usr/share/opennms/{data,deploy,system}   -type d -execdir chmod 755 {} \;
	
	# move SNMP MIB files
	install -d -m 755 debian/opennms-common/var/lib/opennms/mibs
	mv debian/temp/share/mibs/* debian/opennms-common/var/lib/opennms/mibs/
	
	# Adjust permissions for config files containing sensitive information
	install -m 644 debian/opennms-common.overrides debian/opennms-common/usr/share/lintian/overrides/opennms-common
	chmod 640 \
		debian/opennms-common/etc/opennms/users.xml \
		debian/opennms-common/etc/opennms/groups.xml \
		debian/opennms-common/etc/opennms/opennms.properties \
		debian/opennms-common/etc/opennms/opennms-datasources.xml \
		debian/opennms-common/etc/opennms/snmp-config.xml

	# Update paths in scripts and config files
	sed -i -e 's,/opt/OpenNMS,/usr/share/opennms,g' debian/opennms-common/usr/share/opennms/bin/opennms
	sed -i -e 's,bin/mail,usr/bin/mail,' debian/opennms-common/etc/opennms/notificationCommands.xml

	# Adjust the HttpAdaptor port number to avoid conflicting with tomcat,
	# which listens on 8180 by default
	sed -i -e 's/8180/8280/' debian/opennms-common/etc/opennms/service-configuration.xml

	##
	## Setup the opennms-db package
	##
	sed -e 's,@PACKAGE@,opennms-db,g' debian/package-permissions.sh > debian/opennms-db.postinst

	##
	## Setup the opennms-server package
	##

	##
	## Setup the opennms-source package
	##
	install -d -m 755 debian/opennms-source/usr/share/opennms/jetty-webapps/opennms
	mv debian/temp/jetty-webapps/opennms/source debian/opennms-source/usr/share/opennms/jetty-webapps/opennms/
	find debian/opennms-webapp-jetty/usr/share/opennms/jetty-webapps/opennms* -type f -execdir chmod 644 {} \;
	sed -e 's,@PACKAGE@,opennms-source,g' debian/package-permissions.sh > debian/opennms-source.postinst

	##
	## Setup the opennms-webapp-jetty package
	##
	install -m 644 debian/opennms-webapp-jetty.overrides debian/opennms-webapp-jetty/usr/share/lintian/overrides/opennms-webapp-jetty
	install -d -m 755 debian/opennms-webapp-jetty/usr/share/opennms/jetty-webapps/{opennms,ROOT}
	mv debian/temp/jetty-webapps/opennms/*          debian/opennms-webapp-jetty/usr/share/opennms/jetty-webapps/opennms/
	mv debian/temp/jetty-webapps/ROOT/*             debian/opennms-webapp-jetty/usr/share/opennms/jetty-webapps/ROOT/
	find debian/opennms-webapp-jetty/usr/share/opennms/jetty-webapps/opennms* -type f -execdir chmod 644 {} \;
	sed -e 's,@PACKAGE@,opennms-webapp-jetty,g' debian/package-permissions.sh > debian/opennms-webapp-jetty.postinst

	##
	## Setup the opennms-webapp-hawtio package
	##
	install -d -m 755 debian/opennms-webapp-hawtio/usr/share/opennms/jetty-webapps/hawtio debian/opennms-webapp-hawtio/usr/share/lintian/overrides
	install -m 644 debian/opennms-webapp-hawtio.overrides debian/opennms-webapp-hawtio/usr/share/lintian/overrides/opennms-webapp-hawtio
	mv debian/temp/jetty-webapps/hawtio/* debian/opennms-webapp-hawtio/usr/share/opennms/jetty-webapps/hawtio/
	find debian/opennms-webapp-hawtio/usr/share/opennms/jetty-webapps/hawtio* -type f -execdir chmod 644 {} \;
	sed -e 's,@PACKAGE@,opennms-webapp-hawtio,g' debian/package-permissions.sh > debian/opennms-webapp-hawtio.postinst

	##
	## Make sure there aren't any files left over in debian/temp that missed packaging
	##
	find debian/temp -name .gitignore -o -name .gwtignore -o -name .readme | xargs rm -rf
	if [ `find debian/temp -type f | wc -l` -gt 0 ]; then echo "FAILED, files in debian/temp that have not been packaged:"; find debian/temp -type f; exit 1; fi

# Build architecture-independent files here.
binary-indep: build install
	dh_testdir
	dh_testroot
	dh_systemd_enable --name=opennms --no-enable
	dh_systemd_start --name=opennms --no-restart-after-upgrade
	dh_installman
	dh_installdebconf
	dh_link
	dh_strip
	dh_compress
	#dh_fixperms # Disabled to allow non-standard permissions
	dh_makeshlibs -n
	dh_installdeb
	-dh_shlibdeps
	dh_gencontrol
	dh_md5sums
	dh_builddeb -- -Zgzip

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

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