#!/usr/bin/make -f
# -*- makefile -*-
# icedtea_version 2.5.4
include /usr/share/cdbs/1/rules/debhelper.mk

ARCH							:= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
ARCHINSTALL				:= $(ARCH)
BUILD_CPU					:= $(shell dpkg-architecture -qDEB_BUILD_ARCH_CPU)
SYSCONFDIR				:= /etc/puppetlabs
REAL_PREFIX				:= /usr
REAL_JVMDIR				:= $(REAL_PREFIX)/lib/jvm
REAL_JVMJARDIR		:= $(REAL_PREFIX)/lib/jvm-exports
PREFIX						:= /opt/puppet
BINDIR						:= $(PREFIX)/bin
MANDIR						:= $(PREFIX)/share/man
LIBDIR						:= $(PREFIX)/lib
DATADIR						:= $(PREFIX)/share
JVMDIR						:= $(LIBDIR)/jvm
ORIGIN						:= openjdk
NAME							:= pe-java
JAVAVER						:= 1.7.0
BUILDVER					:= 75
VERSION						:= $(JAVAVER).$(BUILDVER)
REAL_NAME					:= java-$(JAVAVER)-$(ORIGIN)
SHELL							:= /bin/bash
CODENAME					:= $(shell lsb_release -c | sed -n 's/^Codename:\s*\(.*\)$$/\1/p')
PE_BOOTSTRAP			:= 0

# Convert an absolute path to a relative path.  Each symbolic link is
# specified relative to the directory in which it is installed so that
# it will resolve properly within chrooted installations.
PERL							:= $(shell which perl)
ABS_SCRIPT				:= 'use File::Spec; print File::Spec->abs2rel($$ARGV[0], $$ARGV[1])'
ABS2REL						:= $(PERL) -e $(ABS_SCRIPT)
SDKDIR						:= $(NAME)
JVMJARDIR					:= $(LIBDIR)/jvm-exports/$(NAME)

ifeq ($(ARCH),amd64)
ifeq ($(CODENAME),$(filter $(CODENAME), lucid squeeze))
	JAVA_HOME				:= /usr/lib/jvm/java-6-openjdk
else
	JAVA_HOME				:= /usr/lib/jvm/java-6-openjdk-amd64
endif
	ARCHBUILD				:= $(ARCH)
	ARCHDEF					:= AMD64
	MULTILIB_ARCHES := TRUE
else
ifeq ($(CODENAME),$(filter $(CODENAME), lucid squeeze))
	JAVA_HOME				:= /usr/lib/jvm/java-6-openjdk
else
	JAVA_HOME				:= /usr/lib/jvm/java-6-openjdk-i386
endif
	ARCHBUILD				:= i586
	ARCHDEF					:= IA32
	MULTILIB_ARCHES := FALSE
endif

ifeq ($(PE_BOOTSTRAP),1)
	JAVA_HOME				:= /opt/puppet/lib/jvm/pe-java
endif

JREDIR						:= $(SDKDIR)/jre
JVMPRIVDIR				:= $(PREFIX)/lib/jvm-private
JAVADOCDIR				:= $(DATADIR)/javadoc
BUILDOUTPUTDIR		:= $(CURDIR)/openjdk/build/linux-$(ARCHBUILD)
PATCHDIR					:= $(CURDIR)

SOURCE0						:= $(CURDIR)/openjdk-icedtea-2.5.4.tar.gz
SOURCE1						:= $(CURDIR)/apache-ant-1.7.1-bin.tar.gz
SOURCE2						:= $(CURDIR)/remove-intree-libraries.sh
SOURCE3						:= $(CURDIR)/nss.cfg
SOURCE4						:= $(CURDIR)/fsg.sh

PATCH0						:= $(PATCHDIR)/$(REAL_NAME)-accessible-toolkit.patch
PATCH1						:= $(PATCHDIR)/$(REAL_NAME)-disable-system-lcms.patch
PATCH2						:= $(PATCHDIR)/$(REAL_NAME)-disable-system-fontconfig.patch
PATCH3						:= $(PATCHDIR)/$(REAL_NAME)-disable_compile_against_syscalls.patch
PATCH4						:= $(PATCHDIR)/abrt_friendly_hs_log_jdk7.patch
PATCH6						:= $(PATCHDIR)/PStack-808293.patch
PATCH7						:= $(PATCHDIR)/$(REAL_NAME)-memory-leak.patch

prep:
	# Unpack the sources
	tar xf $(SOURCE0)
	tar xf $(SOURCE1)

	patch -l -p0 < $(PATCH0)
	patch -l -p1 < $(PATCH1)
	patch -l -p1 < $(PATCH2)
	patch -l -p1 < $(PATCH3)
	patch -l -p0 < $(PATCH4)
	patch -l -p0 < $(PATCH6)
	patch -l -p1 < $(PATCH7)

	# Remove libraries that are linked
	sh $(SOURCE2)
	sh $(SOURCE4)

	# Copy jaxp, jaf and jaxws drops
	mkdir drops/

build: prep
	# How many cpu's do we have?
	export NUM_PROC=`/usr/bin/getconf _NPROCESSORS_ONLN 2> /dev/null || :`
	export NUM_PROC=$${NUM_PROC:-1}
	export CFLAGS=$$(echo $$CFLAGS | sed 's/-Wall//g')

	# Add a "-icedtea" tag to the version
	sed -i "s#BUILD_VARIANT_RELEASE)#BUILD_VARIANT_RELEASE)-icedtea#" openjdk/jdk/make/common/shared/Defs.gmk
	export JDK_TO_BUILD_WITH=$(JAVA_HOME); \
	pushd openjdk; \
		export ALT_DROPS_DIR=$(CURDIR)/drops; \
		export ALT_BOOTDIR="$$JDK_TO_BUILD_WITH"; \
		export ANT_HOME=$(CURDIR)/apache-ant-1.7.1; \
		export ZLIB_CFLAGS="-I/usr/include"; \
		export ZLIB_LIBS="-lz"; \
		oldumask=`umask`; \
		source jdk/make/jdk_generic_profile.sh; \
		umask $$oldumask; \
		make \
			ANT="$$ANT_HOME/bin/ant" \
			DISABLE_INTREE_EC=true \
			SYSTEM_GIO="false" \
			DISTRO_NAME="Puppet Enterprise" \
			DISTRO_PACKAGE_VERSION="PE Java $(VERSION)" \
			JDK_UPDATE_VERSION=`printf "%02d" $(BUILDVER)` \
			MILESTONE="fcs" \
			HOTSPOT_BUILD_JOBS="$$NUM_PROC" \
			STATIC_CXX="false" \
			GENSRCDIR="$(CURDIR)/generated.build" \
			FT2_CFLAGS="-I/usr/include/freetype2 " \
			FT2_LIBS="-lfreetype " \
			DEBUG_CLASSFILES="true" \
			DEBUG_BINARIES="true" \
			ALT_STRIP_POLICY="no_strip"; \
	popd

	export JAVA_HOME=$(BUILDOUTPUTDIR)/j2sdk-image; \
	echo "sun.zoneinfo.dir=/usr/share/javazi" >> $$JAVA_HOME/jre/lib/tz.properties

binary-install/pe-java::
	mkdir -p $(CURDIR)/debian/$(cdbs_curpkg)/
	export STRIP_KEEP_SYMTAB=libjvm*

	pushd $(BUILDOUTPUTDIR)/j2sdk-image; \
		install -d -m 755 $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMDIR)/$(SDKDIR); \
		cp -a bin include lib src.zip $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMDIR)/$(SDKDIR); \
		install -d -m 755 $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMDIR)/$(JREDIR); \
		cp -a jre/bin jre/lib $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMDIR)/$(JREDIR); \
		install -d -m 755 $(CURDIR)/debian/$(cdbs_curpkg)/$(BINDIR); \
		pushd $(CURDIR)/debian/$(cdbs_curpkg)/$(BINDIR); \
			ln -s ../lib/jvm/pe-java/jre/bin/java java; \
			ln -s ../lib/jvm/pe-java/jre/bin/keytool keytool; \
		popd; \
		install -d -m 755 $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMJARDIR); \
		pushd $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMJARDIR); \
			RELATIVE=$$($(ABS2REL) $(JVMDIR)/$(JREDIR)/lib $(JVMJARDIR)); \
			ln -sf $$RELATIVE/jsse.jar jsse-$(VERSION).jar; \
			ln -sf $$RELATIVE/jce.jar jce-$(VERSION).jar; \
			ln -sf $$RELATIVE/rt.jar jndi-$(VERSION).jar; \
			ln -sf $$RELATIVE/rt.jar jndi-ldap-$(VERSION).jar; \
			ln -sf $$RELATIVE/rt.jar jndi-cos-$(VERSION).jar; \
			ln -sf $$RELATIVE/rt.jar jndi-rmi-$(VERSION).jar; \
			ln -sf $$RELATIVE/rt.jar jaas-$(VERSION).jar; \
			ln -sf $$RELATIVE/rt.jar jdbc-stdext-$(VERSION).jar; \
			ln -sf jdbc-stdext-$(VERSION).jar jdbc-stdext-3.0.jar; \
			ln -sf $$RELATIVE/rt.jar sasl-$(VERSION).jar; \
			for jar in *-$(VERSION).jar; \
			do \
				if [ x$(VERSION) != x$(JAVAVER) ]; \
				then \
					ln -sf $$jar $$(echo $$jar | sed "s|-$(VERSION).jar|-$(JAVAVER).jar|g"); \
				fi; \
				ln -sf $$jar $$(echo $$jar | sed "s|-$(VERSION).jar|.jar|g"); \
			done; \
		popd; \
		install -d -m 755 $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMPRIVDIR)/$(NAME)/jce/vanilla; \
		rm -f man/man1/javaws*; \
		install -d -m 755 $(CURDIR)/debian/$(cdbs_curpkg)/$(MANDIR)/man1; \
		for manpage in man/man1/*; \
		do \
			iconv -f ISO_8859-1 -t UTF8 $$manpage -o $$manpage.tmp; \
			mv -f $$manpage.tmp $$manpage; \
			install -m 644 -p $$manpage $(CURDIR)/debian/$(cdbs_curpkg)/$(MANDIR)/man1/$$(basename \
				$$manpage .1)-$(NAME).1; \
		done; \
		cp -a demo $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMDIR)/$(SDKDIR); \
		mkdir -p sample/rmi; \
		mv bin/java-rmi.cgi sample/rmi; \
		cp -a sample $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMDIR)/$(SDKDIR); \
	popd

	# Install nss.cfg
	install -m 644 $(SOURCE3) $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMDIR)/$(JREDIR)/lib/security/

	# Install Javadoc documentation.
	#install -d -m 755 $(CURDIR)/debian/$(cdbs_curpkg)/$(JAVADOCDIR)
	#cp -a $(BUILDOUTPUTDIR)/docs $(CURDIR)/debian/$(cdbs_curpkg)/$(JAVADOCDIR)/$(NAME)

	# Remove src.zip to make the package smaller
	rm $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMDIR)/$(SDKDIR)/src.zip

	# Remove  libsplashscreen.so, libjsoundalso.so, libmawt.so to clean up dependencies
	rm $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMDIR)/$(JREDIR)/lib/**/{libjsoundalsa,libsplashscreen}.so
	rm $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMDIR)/$(JREDIR)/lib/**/xawt/libmawt.so

	# Remove policytool, and appletviewer to loose libX dependencies
	rm $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMDIR)/$(SDKDIR)/bin/policytool
	rm $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMDIR)/$(SDKDIR)/bin/appletviewer
	rm $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMDIR)/$(JREDIR)/bin/policytool
	rm $(CURDIR)/debian/$(cdbs_curpkg)/$(MANDIR)/man1/{appletviewer,policytool}*
	
	# Remove empty cacerts file, link to system certs
	rm $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMDIR)/$(JREDIR)/lib/security/cacerts
	ln -sf /etc/ssl/certs/java/cacerts $(CURDIR)/debian/$(cdbs_curpkg)/$(JVMDIR)/$(JREDIR)/lib/security/cacerts

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