#!/usr/bin/make -f

export JAVA_HOME=/usr/lib/jvm/default-java
export TZ=UTC

# Included clusters
pkg-nb                         := netbeans
base-apisupport                := apisupport3
base-ide                       := ide14
base-java                      := java5
base-nb                        := nb
base-platform                  := platform18

pkg-apisupport                 := libnb-$(base-apisupport)-java
pkg-ide                        := libnb-$(base-ide)-java
pkg-java                       := libnb-$(base-java)-java


NBDIR := /usr/share/netbeans
export JAVADIR := /usr/share/java

JH_JAR           := jhall.jar
JSEARCH_JAR      := jsearch.jar
NB_JH_JAR        := jhall-2.0_05.jar
NB_JSEARCH_JAR   := jsearch-2.0_05.jar

NB_INSTALL_DIR   := usr/share/netbeans


INSTALL          := dh_install -p
LINK             := dh_link -p

DEB_UPSTREAM_VERSION = $(shell dpkg-parsechangelog | \
                       grep -e '^Version' | \
                       perl -pi -e 's/^Version:\s+(.*)\+dfsg\d+-\d+.*$$/$$1/')

BUILDSTAMP := $(shell date --utc --date="`dpkg-parsechangelog -SDate`" "+%Y%m%d")
BUILD_DATE := $(shell dpkg-parsechangelog --show-field=Date)

# Defined function to be used to create symlinks
define symlink
	mkdir -p $(dir $(2))
	ln -sf $(1) $(2)
endef

%:
	dh $@ --parallel --with javahelper


override_dh_auto_build:
	# w3c-sgml-lib: needed for xml validation, otherwise FTBFS
	mkdir -p nbbuild/external/xhtml1-dtds
	ln -sf /usr/share/xml/w3c-sgml-lib/schema/dtd/REC-xhtml1-20020801/xhtml* nbbuild/external/xhtml1-dtds
	ln -sf /usr/share/xml/w3c-sgml-lib/schema/dtd/REC-xhtml-modularization-20100729/xhtml* nbbuild/external/xhtml1-dtds
	# link Debian's system jars
	$(shell awk 'NF==4 {printf("ln -sf %s %s/%s;\n",$$1,$$2,$$4)}' debian/linked-jars)
	# ReproducibleBuilds TimestampsInZip
	# https://wiki.debian.org/ReproducibleBuilds/TimestampsInZip
	find '$(CURDIR)' -newermt '$(BUILD_DATE)' -print0 | \
		xargs -0r touch --no-dereference --date='$(BUILD_DATE)'
	################################################################
	# Build the IDE. DISPLAY must be unset to avoid build failures.
	unset DISPLAY; ant \
	-Dbuildstamp=$(BUILDSTAMP) \
	-Dhg.id=debian-$(DEB_UPSTREAM_VERSION) \
	-Dpermit.jdk8.builds=true \
	-Dbuild.compiler.deprecation=false \
	-Dbuild.compiler.debug=false \
	-Dext.binaries.downloaded=true \
	-Dverify.checkout=false \
	-Dcluster.config=basic \
	-f nbbuild/build.xml build-nozip
	# Convert the *.icns hicolor icon into a png icon
	icns2png -x -s 128x128 -d 32 ide.branding/release/netbeans.icns



override_dh_auto_install:
	# recreate links
	$(shell awk 'NF==4 {printf("ln -sf %s nbbuild/netbeans/%s/%s;\n",$$1,$$3,$$4)}' debian/linked-jars)
	# Install libraries
	mh_installjar -plibnb-absolutelayout-java -l debian/pom/AbsoluteLayout.xml \
		nbbuild/netbeans/java/modules/ext/AbsoluteLayout.jar
	mh_installpom -plibnb-absolutelayout-java debian/pom/AbsoluteLayout.xml
	#
	# Install IDE package files
	echo > nbbuild/netbeans/ide/.noautoupdate
	echo > nbbuild/netbeans/ide/.lastModified
	$(INSTALL)$(pkg-ide) nbbuild/netbeans/ide/*               $(NB_INSTALL_DIR)/$(base-ide)
	$(INSTALL)$(pkg-ide) nbbuild/netbeans/ide/.noautoupdate   $(NB_INSTALL_DIR)/$(base-ide)
	$(INSTALL)$(pkg-ide) nbbuild/netbeans/ide/.lastModified   $(NB_INSTALL_DIR)/$(base-ide)
	# See netbeans-slf4j.dummy.patch for further information
	$(LINK)$(pkg-ide) usr/share/java/slf4j-api.jar $(NB_INSTALL_DIR)/$(base-ide)/modules/slf4j-dummy.jar
	# Symlink IDE modules to corresponding system jar files
	$(LINK)$(pkg-ide) usr/share/java/org.eclipse.jgit.jar $(NB_INSTALL_DIR)/$(base-ide)/modules/org-eclipse-jgit.jar
	$(LINK)$(pkg-ide) usr/share/java/org.eclipse.jgit.java7.jar $(NB_INSTALL_DIR)/$(base-ide)/modules/org-eclipse-jgit-java7.jar
	$(LINK)$(pkg-ide) usr/share/java/sqljet.jar $(NB_INSTALL_DIR)/$(base-ide)/modules/ext/sqljet.jar
	$(LINK)$(pkg-ide) usr/share/java/svnClientAdapter.jar $(NB_INSTALL_DIR)/$(base-ide)/modules/ext/svnClientAdapter-main.jar
	$(LINK)$(pkg-ide) usr/share/java/svn-javahl.jar $(NB_INSTALL_DIR)/$(base-ide)/modules/ext/svnjavahl.jar
	$(LINK)$(pkg-ide) usr/share/java/svnkit-javahl16.jar $(NB_INSTALL_DIR)/$(base-ide)/modules/ext/svnkit-javahl16.jar
	$(LINK)$(pkg-ide) usr/share/java/trilead-ssh2.jar $(NB_INSTALL_DIR)/$(base-ide)/modules/ext/trilead.ssh2.jar
	$(LINK)$(pkg-ide) usr/share/java/jsch.agentproxy.usocket-jna.jar $(NB_INSTALL_DIR)/$(base-ide)/modules/ext/jsch-agentproxy-usocket-jna.jar
	$(LINK)$(pkg-ide) usr/share/java/htmlparser.jar $(NB_INSTALL_DIR)/$(base-ide)/modules/ext/html5-parser.jar
	$(LINK)$(pkg-ide) usr/share/java/jsch.agentproxy.sshagent.jar $(NB_INSTALL_DIR)/$(base-ide)/modules/ext/jsch-agentproxy-sshagent.jar
	$(LINK)$(pkg-ide) usr/share/java/jsch.agentproxy.pageant.jar $(NB_INSTALL_DIR)/$(base-ide)/modules/ext/jsch-agentproxy-pageant.jar
	$(LINK)$(pkg-ide) usr/share/java/jsch.agentproxy.core.jar $(NB_INSTALL_DIR)/$(base-ide)/modules/ext/jsch-agentproxy-core.jar
	# Make hostinfo.sh executable to silence Lintian warning about script-not-exectuable
	find . -type f -name "hostinfo.sh" -exec chmod a+x {} \;

	# Install Java package files
	echo > nbbuild/netbeans/java/.noautoupdate
	echo > nbbuild/netbeans/java/.lastModified
	$(INSTALL)$(pkg-java) nbbuild/netbeans/extide/*           $(NB_INSTALL_DIR)/$(base-java)
	$(INSTALL)$(pkg-java) nbbuild/netbeans/java/*             $(NB_INSTALL_DIR)/$(base-java)
	$(INSTALL)$(pkg-java) nbbuild/netbeans/java/.noautoupdate $(NB_INSTALL_DIR)/$(base-java)
	$(INSTALL)$(pkg-java) nbbuild/netbeans/java/.lastModified $(NB_INSTALL_DIR)/$(base-java)
	# Link in Ant libraries and binaries
	-rmdir debian/$(pkg-java)/$(NB_INSTALL_DIR)/$(base-java)/ant/lib
	$(LINK)$(pkg-java)    usr/share/ant/bin     $(NB_INSTALL_DIR)/$(base-java)/ant/bin
	$(LINK)$(pkg-java)    usr/share/ant/etc     $(NB_INSTALL_DIR)/$(base-java)/ant/etc
	$(LINK)$(pkg-java)    usr/share/ant/lib     $(NB_INSTALL_DIR)/$(base-java)/ant/lib
	# Link in AbsoluteLayout jar
	-rm debian/$(pkg-java)/$(NB_INSTALL_DIR)/$(base-java)/modules/ext/AbsoluteLayout.jar
	$(LINK)$(pkg-java)    usr/share/java/AbsoluteLayout.jar  $(NB_INSTALL_DIR)/$(base-java)/modules/ext/AbsoluteLayout.jar

	# Install API support package files
	echo > nbbuild/netbeans/apisupport/.noautoupdate
	echo > nbbuild/netbeans/apisupport/.lastModified
	$(INSTALL)$(pkg-apisupport) nbbuild/netbeans/apisupport/*              $(NB_INSTALL_DIR)/$(base-apisupport)
	$(INSTALL)$(pkg-apisupport) nbbuild/netbeans/apisupport/.noautoupdate  $(NB_INSTALL_DIR)/$(base-apisupport)
	$(INSTALL)$(pkg-apisupport) nbbuild/netbeans/apisupport/.lastModified  $(NB_INSTALL_DIR)/$(base-apisupport)
	# Install Netbeans package files
	echo > nbbuild/netbeans/nb/.noautoupdate
	$(INSTALL)$(pkg-nb) nbbuild/netbeans/nb/*               $(NB_INSTALL_DIR)/$(DEB_UPSTREAM_VERSION)/nb
	$(INSTALL)$(pkg-nb) nbbuild/netbeans/nb/.lastModified   $(NB_INSTALL_DIR)/$(DEB_UPSTREAM_VERSION)/nb
	$(INSTALL)$(pkg-nb) nbbuild/netbeans/nb/.noautoupdate   $(NB_INSTALL_DIR)/$(DEB_UPSTREAM_VERSION)/nb
	$(INSTALL)$(pkg-nb) nbbuild/netbeans/bin/*              $(NB_INSTALL_DIR)/$(DEB_UPSTREAM_VERSION)/bin
	$(INSTALL)$(pkg-nb) nbbuild/netbeans/CREDITS.html                 usr/share/$(pkg-nb)
	$(INSTALL)$(pkg-nb) nbbuild/netbeans/README.html                  usr/share/$(pkg-nb)
	$(INSTALL)$(pkg-nb) nbbuild/netbeans/netbeans.css                 usr/share/$(pkg-nb)
	# Install 128x128 netbeans icon to hicolor directory
	mv netbeans_128x128x32.png netbeans.png
	$(INSTALL)$(pkg-nb) netbeans.png usr/share/icons/hicolor/128x128/apps
	$(LINK)$(pkg-nb)    $(NB_INSTALL_DIR)/$(base-platform) $(NB_INSTALL_DIR)/$(DEB_UPSTREAM_VERSION)/platform
	$(LINK)$(pkg-nb)    $(NB_INSTALL_DIR)/harness          $(NB_INSTALL_DIR)/$(DEB_UPSTREAM_VERSION)/harness
	$(LINK)$(pkg-nb)    $(NB_INSTALL_DIR)/$(base-apisupport) $(NB_INSTALL_DIR)/$(DEB_UPSTREAM_VERSION)/apisupport
	$(LINK)$(pkg-nb)    $(NB_INSTALL_DIR)/$(base-ide)        $(NB_INSTALL_DIR)/$(DEB_UPSTREAM_VERSION)/ide
	$(LINK)$(pkg-nb)    $(NB_INSTALL_DIR)/$(base-java)       $(NB_INSTALL_DIR)/$(DEB_UPSTREAM_VERSION)/java
	# Symlink netbeans icon to the appropriate hicolor directory
	$(LINK)$(pkg-nb) $(NB_INSTALL_DIR)/$(DEB_UPSTREAM_VERSION)/nb/netbeans.png \
	/usr/share/icons/hicolor/32x32/apps/netbeans.png

	# Create file marker to avoid displaying license dialog at first IDE start
	echo > debian/license_accepted
	$(INSTALL)$(pkg-nb) debian/license_accepted $(NB_INSTALL_DIR)/$(DEB_UPSTREAM_VERSION)/nb/var
	# Install file productid used by autoupdate to report installation type
	$(INSTALL)$(pkg-nb) debian/productid   $(NB_INSTALL_DIR)/$(DEB_UPSTREAM_VERSION)/nb/config

	# Install netbeans.conf
	$(INSTALL)$(pkg-nb) nbbuild/netbeans/etc/netbeans.conf etc
	$(LINK)$(pkg-nb) etc/netbeans.conf $(NB_INSTALL_DIR)/$(DEB_UPSTREAM_VERSION)/etc/netbeans.conf

	# Install netbeans.xpm icon
	$(INSTALL)$(pkg-nb) debian/icons/netbeans.xpm usr/share/pixmaps

	# Install netbeans.clusters
	$(INSTALL)$(pkg-nb) nbbuild/netbeans/etc/netbeans.clusters etc
	$(LINK)$(pkg-nb) etc/netbeans.clusters $(NB_INSTALL_DIR)/$(DEB_UPSTREAM_VERSION)/etc/netbeans.clusters

	# Install netbeans.import which is a required file when importing settings
	# from an older version of Netbeans (see also #808908)
	$(INSTALL)$(pkg-nb) nbbuild/netbeans/etc/netbeans.import etc
	$(LINK)$(pkg-nb) etc/netbeans.import $(NB_INSTALL_DIR)/$(DEB_UPSTREAM_VERSION)/etc/netbeans.import

	# Install launcher
	$(INSTALL)$(pkg-nb) nbbuild/netbeans/bin/netbeans usr/bin

	# Install desktop file
	$(INSTALL)$(pkg-nb) debian/netbeans.desktop usr/share/applications


override_dh_auto_clean:
	$(call symlink, $(JAVADIR)/$(JH_JAR), javahelp/external/$(NB_JH_JAR))
	$(call symlink, $(JAVADIR)/$(JSEARCH_JAR), apisupport.harness/external/$(NB_JSEARCH_JAR))
	ant -Dpermit.jdk8.builds=true -f nbbuild/build.xml clean
	mh_clean
	# remove all the symlinks to jar files we created
	find . -name "*.jar" -type l -delete
	$(RM) -r nbbuild/external/xhtml1-dtds
	$(RM) nbbuild/nbproject/private/scan-cache-standard.ser
	$(RM) debian/license_accepted
	$(RM) swingapp/src/org/netbeans/modules/swingapp/resources/CRUDShellApp.zip
	$(RM) swingapp/src/org/netbeans/modules/swingapp/resources/BasicShellApp.zip

override_jh_depends:
	# Skipping jh_depends run - since we use symlinks to /usr/share/java then
	# jh_depends gets it wrong.

get-orig-source:
	uscan --verbose --download-current-version --force-download
