#!/usr/bin/make -f
# -*- makefile -*-
# debian/rules file derived from the gcc build system

export DH_OPTIONS=

export SHELL=/bin/bash

DEB_HOST_ARCH	?= $(shell dpkg-architecture -qDEB_HOST_ARCH)

arch	:= $(DEB_HOST_ARCH)

ifeq ($(arch),i386)
arch	:= i586
archdir	:= i386
endif

ifeq ($(DEB_HOST_ARCH),powerpc)
arch	:= ppc
archdir	:= ppc
endif

ifeq ($(DEB_HOST_ARCH),sparc64)
arch	:= sparc
archdir	:= sparc
endif

source_archive	?= $(wildcard ../j2sdk-*$(arch)*bin)
ifneq ($(words $(source_archive)),1)
  $(warning matches for source archives: $(source_archive))
  $(error ERROR: Set source_archive by hand.)
endif

new_packaging	:= $(filter bin,$(subst ., ,$(shell basename $(source_archive))))

version	:= $(word 2, $(subst -, , $(source_archive)))
release	:= $(subst . ,.,$(join $(wordlist 1, 2, $(subst ., ,$(version))), .))
tag	:= $(strip $(subst .,, $(release)))

source	:= $(firstword $(subst -, ,$(shell basename $(source_archive))))$(release)*

etc	:= etc/j2se/$(release)
lib	:= usr/lib
share	:= usr/share
doc	:= $(share)/doc
j2se_lib	:= $(lib)/j2se/$(release)
j2se_share	:= $(share)/j2se/$(release)
security	:= $(etc)/security

lintian_overrides	:= $(share)/lintian/overrides

info:
	@echo "version=$(version), release=$(release), tag=$(tag)"
	@echo "source=$(source)"
	@echo "new_packaging=$(new_packaging), source_archive=$(source_archive)"

p_jre	:= j2re$(release)
p_sdk	:= j2sdk$(release)
p_src	:= $(p_sdk)-src
p_demo	:= $(p_sdk)-demo
p_doc	:= $(p_sdk)-doc

d_jre	:= debian/$(p_jre)
d_sdk	:= debian/$(p_sdk)
d_src	:= debian/$(p_src)
d_demo	:= debian/$(p_demo)
d_doc	:= debian/$(p_doc)

# j2re and j2sdk tools handled by the alternatives system
j2re_tools	:= ControlPanel java javaws keytool policytool rmid rmiregistry

j2sdk_tools	:= HtmlConverter appletviewer extcheck idlj jar jarsigner \
	javac javadoc javah javap jdb native2ascii rmic serialver 

corba_tools	:= orbd servertool tnameserv

j2re_manpages_re:= $(strip $(subst | ,|, $(join $(j2re_tools) $(corba_tools), | | | | | | | |)))

binary_arch_targets	:= \
	$(patsubst %, binary-%, $(p_jre) $(p_sdk) $(p_demo) $(p_doc) $(p_src))


ctp_tag		:= j2se$(release)-$(DEB_HOST_ARCH)
version_tag	:= $(shell dpkg-parsechangelog | \
			sed -ne 's/Version: *\([0-9]\+:\)*//p')

tag:
	cvs tag -c -F $(subst .,_,$(ctp_tag)_debian_version_$(version_tag))
ifeq ($(findstring -,$(version_tag)),)
	cvs tag -c -F $(subst .,_,$(ctp_tag)_upstream_version_$(version_tag))
endif

showtags:
	@echo Version: $(version)
	@echo Release: $(release)
	@echo CTP tag: $(ctp_tag)

build: info control build-stamp

control:
	sed -e 's/@arch@/$(DEB_HOST_ARCH)/g' -e 's/@sarch@/$(arch)/g' \
	  debian/control.in > debian/control.tmp
	cmp -s debian/control debian/control.tmp \
	  || mv -f debian/control.tmp debian/control

build-stamp:
ifdef new_packaging
	ln -sf /bin/cat debian/more
	echo y | \
	  PATH=debian:$$PATH DISPLAY= $(SHELL) $(source_archive) > /dev/null; \
	  [ $$? -eq 0 -o $$? -eq 3 ] && true
else
	tar -jxf $(source_archive)
endif
	perl -MFile::Find -e \
		'find sub {-f and \
		($$d=$$_)=~s!([0-9].gz)!j2se$(tag).$$1! and \
		rename $$_, $$d;}, @ARGV;' $(source)/man
	find $(source)/. -name "CVS" -print0 | xargs -0 rm -rf

	for i in `find $(source)/man/ja_JP.eucJP -name *.1.gz`; do \
	    mv $$i `dirname $$i`/`basename $$i 1.gz`ja.1.gz; \
	done

	touch $@

clean:
	dh_testroot
	rm -rf build-stamp $(source)
	rm -f debian/*.debhelper debian/more debian/control.tmp
	: # those get created every build
	rm -f $(d_jre).{docs,manpages,copyright,links} \
		$(d_sdk).{docs,manpages} {$(d_src),$(d_demo),$(d_doc)}.links \
		{$(d_jre),$(d_sdk),$(d_src),$(d_demo)}.templates
	rm -f debian/$(p_jre).substvars.tmp
	: # TODO: and these should be
	: # -rm -f $(d_jre).copyright debian/copyright
	dh_clean

mrproper: clean
	rm -rf build-stamp $(source)

binary-$(p_jre):	DH_OPTIONS=-p$(p_jre)
binary-$(p_jre):	build
	dh_testroot
	dh_clean -d
	dh_installdirs \
		$(security) \
		$(lib)/j2se/ext \
		$(j2se_lib)/bin/$(archdir)/native_threads \
		$(j2se_share) \
		$(lintian_overrides) \
		$(lib)/mozilla{,-firefox,-snapshot}/plugins \
		usr/share/applications \
		usr/share/application-registry \
		usr/share/icons \
		usr/share/mime-info \
		usr/share/control-center-2.0/capplets

	cp -a $(source)/jre $(d_jre)/$(j2se_lib)
	-rm $(d_jre)/$(j2se_lib)/jre/lib/$(archdir)/libagent.so
	-find $(d_jre) -name HtmlConverter -o -name htmlconverter.jar | xargs rm -f

###	: # get upstream docs out of there
###	-rm $(d_jre)/$(j2se_lib)/jre/{CHANGES,COPYRIGHT,INSTALL,*LICENSE*,README
	rm -f $(d_jre)/$(j2se_lib)/jre/{CHANGES,INSTALL}

ifeq ($(release),1.3)
# set CLASSPATH for Debian's java policy
# also fix LD_LIBRARY_PATH for j2se$(release) internal libraries
	mv $(d_jre)/$(j2se_lib)/jre/bin/.java_wrapper \
		$(d_jre)/$(j2se_lib)/jre/bin/.java_wrapper.orig
	sed -e '/prog=/i\' \
	    -e '# Set CLASSPATH for the Debian java-policy\' \
	    -e '# [Actually, /usr/share/java/repository should be\' \
	    -e '# defined as an Java2 extension direcotory, in that\' \
	    -e '# case we could simply add it to java.ext.dirs (which\' \
	    -e '# defaults to /usr/lib/j2se$(release)/lib/ext currently)]\' \
	    -e '# Also add the cross-VM extension directory here for now.\' \
            -e 'CLASSPATH="/usr/lib/j2se/ext:/usr/share/java/repository:$${CLASSPATH:=.}"\' \
            -e 'export CLASSPATH\' \
            -e '' \
	    -e '/LD_LIBRARY_PATH=/i\' \
	    -e '# Add cross-VM library directory for extensions\' \
	    -e 'JAVA_LIBRARY_PATH=\"$${JAVA_LIBRARY_PATH}:/usr/lib/j2se/$${proc}\"\' \
	    -e '' \
            $(d_jre)/$(j2se_lib)/jre/bin/.java_wrapper.orig \
	  > $(d_jre)/$(j2se_lib)/jre/bin/.java_wrapper
	rm $(d_jre)/$(j2se_lib)/jre/bin/.java_wrapper.orig
	chmod +x $(d_jre)/$(j2se_lib)/jre/bin/.java_wrapper
endif

	: # move config files to $(etc)
	-mv $(d_jre)/$(j2se_lib)/jre/lib/{*.properties*,tzmappings} \
		$(d_jre)/$(etc)
	rm -f $(d_jre)/$(etc)/{*Redhat*,*SuSE*,*Turbo*}
	-mv $(d_jre)/$(j2se_lib)/jre/lib/i386/jvm.cfg \
		$(d_jre)/$(etc)
	: # TODO: why do we provide a custom font.properties.ja?
	: # cp -p debian/font.properties.ja $(d_jre)/$(etc)/.
	-mv $(d_jre)/$(j2se_lib)/jre/lib/security/{java.*,cacerts} \
		$(d_jre)/$(security)

	: # create links for the conffiles
	find $(d_jre)/$(etc) -type f ! -name jvm.cfg \
		-printf "$(etc)/%P $(j2se_lib)/jre/lib/%P\n" > $(d_jre).links
	echo "$(etc)/jvm.cfg $(j2se_lib)/jre/lib/i386/jvm.cfg" \
		>> $(d_jre).links

	: # replace duplicate files in bin and jre/bin with links
	for f in `cd $(source)/. && diff -s -r jre/bin bin \
		| sed -n 's/^Files \(.*\) and \(.*\) are identical$$/\2/p'`; \
	do \
	  [ $$f = bin/HtmlConverter ] || \
	  echo /$(j2se_lib)/jre/$$f /$(j2se_lib)/$$f; \
	done >> $(d_jre).links

#	  if [ -L $(d_jre)/$(j2se_lib)/jre/$$f ]; then \
#	    ln -sf `readlink $(d_jre)/$(j2se_lib)/jre/$$f` \
#		$(d_jre)/$(j2se_lib)/$$f; \
#	  else \
#	    ln -sf /$(j2se_lib)/jre/$$f \
#		$(d_jre)/$(j2se_lib)/$$f; \
#	  fi; \
#

	: # give all permissions to cross-VM extension directory
	mv $(d_jre)/$(security)/java.policy \
	   $(d_jre)/$(security)/java.policy.orig
	sed -e '/permission java\.security\.AllPermission;/,/};/c\' \
	    -e '        permission java.security.AllPermission;\' \
	    -e '};\' \
	    -e '\' \
	    -e 'grant codeBase "file:/usr/lib/j2se/ext/*" {\' \
	    -e '        permission java.security.AllPermission;\' \
	    -e '};\' \
	    -e '\' \
	    -e '// Comment this out if you want to give all permissions to the\' \
	    -e '// Debian Java repository too:\' \
	    -e '//grant codeBase "file:/usr/share/java/repository/-" {\' \
	    -e '//        permission java.security.AllPermission;\' \
	    -e '//};\' \
	    -e '' \
	    $(d_jre)/$(security)/java.policy.orig \
	  > $(d_jre)/$(security)/java.policy
# 'make Emacs Makefile mode happy
	$(RM) $(d_jre)/$(security)/java.policy.orig

	: # add lintian overrides
	cp -p debian/$(p_jre).overrides \
		$(d_jre)/$(lintian_overrides)/$(p_jre)

	: # add GNOME stuff
	for i in javaws java; do \
	  perl -p -e 's!\$$\(release\)!$(release)!g;' \
	    debian/$$i.desktop \
	      > $(d_jre)/usr/share/applications/$${i}$(release).desktop; \
	done
	for i in controlpanel policytool; do \
	  perl -p -e 's!\$$\(release\)!$(release)!g;' \
	    debian/$$i.desktop \
	      > $(d_jre)/usr/share/control-center-2.0/capplets/$${i}$(release).desktop; \
	done
	for i in java-archive java-web-start; do \
	  perl -p -e 's!\$$\(release\)!$(release)!g;' \
	    debian/$$i.applications \
	      > $(d_jre)/usr/share/application-registry/$${i}.applications; \
	done
	for i in java-archive java-web-start; do \
	  cp debian/$$i.keys \
	      $(d_jre)/usr/share/mime-info/$${i}.keys; \
	  cp debian/$$i.mime \
	      $(d_jre)/usr/share/mime-info/$${i}.mime; \
	done
	tar -cf - icons | \
		tar -C $(d_jre)/usr/share --exclude CVS -xvf -

	: # generate any dh_* config files
	ls $(source)/jre/{*LICENSE*,README*} \
		debian/README.alternatives > $(d_jre).docs
	find $(source)/man -type f \
	  | egrep '/($(j2re_manpages_re))\.' > $(d_jre).manpages
	( \
	  echo "arch='$(arch)'"; \
	  echo "archdir='$(archdir)'"; \
	  echo "etc='/$(etc)'"; \
	  echo "j2se_lib='/$(j2se_lib)'"; \
	  echo "j2se_share='/$(j2se_share)'"; \
	  echo "package='$(p_sdk)'"; \
	  echo "release='$(release)'"; \
	  echo "tag='$(tag)'"; \
	  echo "version='$(version)'"; \
	  echo "j2re_tools='$(j2re_tools)'"; \
	  echo "" \
	) > $(d_jre).debhelper
	for i in $(d_jre).{postinst,postrm,prerm,preinst}; do \
	  cp $(d_jre).debhelper $$i.debhelper; \
	done
	cp -f $(d_jre).templates.in $(d_jre).templates
	sed -e "s/^$$/./" -e "s/^/ /" < $(source)/jre/LICENSE >> $(d_jre).templates

	: # Force update-menus to run to refresh the java2-common menu entries
	dh_desktop

	dh_installmenu
	perl -pi -e 's!\$$\(release\)!$(release)!g;' \
		`find $(d_jre)/usr/lib/menu -type f`

	dh_strip

	rm -f debian/$(p_jre).substvars
	ld_path=$(d_jre)/$(j2se_lib)/jre/lib/$(archdir) \
	    dh_shlibdeps \
		-l$$ld_path:$$ld_path/client:$$ld_path/native_threads \
		-Xlibjavaplugin_oji.so
	sed 's/Depends/Recommends/' debian/$(p_jre).substvars \
		> debian/$(p_jre).substvars.tmp
	rm -f debian/$(p_jre).substvars
	ld_path=$(d_jre)/$(j2se_lib)/jre/lib/$(archdir) \
	    dh_shlibdeps -v \
		-l$$ld_path:$$ld_path/client:$$ld_path/native_threads \
		-Xjavaws -Xawt_robot \
		-Xlibjavaplugin -Xlibawt -Xlibjawt -Xlibdcpr \
		-Xlibfontmanager -XlibXm -Xlibjsoundalsa
	cat debian/$(p_jre).substvars.tmp >> debian/$(p_jre).substvars
	rm -f debian/$(p_jre).substvars.tmp


binary-$(p_sdk):	DH_OPTIONS=-p$(p_sdk)
binary-$(p_sdk):	build
	dh_testroot
	dh_clean -d
	dh_installdirs \
		$(j2se_lib)/jre/lib/$(archdir) \
		$(j2se_share) \
		$(lintian_overrides)

	-cp -a $(source)/{bin,include,include-old,lib} \
	    $(d_sdk)/$(j2se_lib)
	-cp -a $(source)/jre/lib/$(archdir)/libagent.so \
	    $(d_sdk)/$(j2se_lib)/jre/lib/$(archdir)

	: # remove any runtime files from the sdk package
	-find $(d_jre)/$(j2se_lib)/jre/bin \! -type d \
		-printf "$(d_sdk)/$(j2se_lib)/bin/%P\0" | xargs -r0 rm 

	: # fix java-rmi.cgi PATH
	perl -pi -e 's:/usr/local/java/bin:/$(j2se_lib)/bin:' \
	    $(d_sdk)/$(j2se_lib)/bin/java-rmi.cgi

	: # add lintian overrides
	cp -p debian/$(p_sdk).overrides \
		$(d_sdk)/$(lintian_overrides)/$(p_sdk)

	: # generate any dh_* config files
	ls $(source)/README* $(source)/LICENSE > $(d_sdk).docs
	find $(source)/man -type f \
	  | egrep -v '/($(j2re_manpages_re))\.' > $(d_sdk).manpages
	( \
	  echo "arch='$(arch)'"; \
	  echo "archdir='$(archdir)'"; \
	  echo "etc='/$(etc)'"; \
	  echo "j2se_lib='/$(j2se_lib)'"; \
	  echo "j2se_share='/$(j2se_share)'"; \
	  echo "package='$(p_sdk)'"; \
	  echo "release='$(release)'"; \
	  echo "tag='$(tag)'"; \
	  echo "version='$(version)'"; \
	  gnome=`find $(d_sdk)/$(j2se_share)/gnome -type f -printf "%f %P "`; \
	  echo "gnome='$$gnome'"; \
	  echo "j2sdk_tools='$(j2sdk_tools)'"; \
	  echo "" \
	) > $(d_sdk).debhelper
	for i in $(d_sdk).{postinst,postrm,prerm,preinst}; do \
	  cp $(d_sdk).debhelper $$i.debhelper; \
	done
	cp -f $(d_sdk).templates.in $(d_sdk).templates
	sed -e "s/^$$/./" -e "s/^/ /" < $(source)/LICENSE >> $(d_sdk).templates

	dh_strip
	ld_path=$(d_jre)/$(j2se_lib)/jre/lib/$(archdir) dh_shlibdeps \
		-l$$ld_path:$$ld_path/client:$$ld_path/native_threads \
		-Xlibjavaplugin_oji.so


binary-$(p_demo):	DH_OPTIONS=-p$(p_demo)
binary-$(p_demo):	build
	dh_testroot
	dh_clean -d
	dh_installdirs \
		$(j2se_lib) \
		$(lintian_overrides) \
		$(j2se_share)

	cp -a $(source)/demo $(d_demo)/$(j2se_share)

	: # add lintian overrides
	cp -p debian/$(p_demo).overrides \
		$(d_demo)/$(lintian_overrides)/$(p_demo)

	: # generate any dh_* config files
	echo "$(j2se_share)/demo $(j2se_lib)/demo" > $(d_demo).links
	( \
	  echo "arch='$(arch)'"; \
	  echo "archdir='$(archdir)'"; \
	  echo "etc='/$(etc)'"; \
	  echo "j2se_lib='/$(j2se_lib)'"; \
	  echo "j2se_share='/$(j2se_share)'"; \
	  echo "package='$(p_sdk)'"; \
	  echo "release='$(release)'"; \
	  echo "tag='$(tag)'"; \
	  echo "version='$(version)'"; \
	  gnome=`find $(d_demo)/$(j2se_share)/gnome -type f -printf "%f %P "`; \
	  echo "gnome='$$gnome'"; \
	  echo "" \
	) > $(d_demo).debhelper
	: # debhelper files are overwritten!
	for i in $(d_demo).{postinst,postrm,prerm,preinst}; do \
	  cp $(d_demo).debhelper $$i.debhelper; \
	done
	cp -f $(d_demo).templates.in $(d_demo).templates
	sed -e "s/^$$/./" -e "s/^/ /" < $(source)/LICENSE >> $(d_demo).templates


binary-$(p_src):	DH_OPTIONS=-p$(p_src)
binary-$(p_src):	build
	dh_testroot
	dh_clean -d
	dh_installdirs \
		$(j2se_lib) \
		$(j2se_share)

	-cp -a $(source)/src.{zip,jar} $(d_src)/$(j2se_share)

	: # generate any dh_* config files
	: # TODO: automatically adapt to correct extension
	echo "$(j2se_share)/src.zip $(j2se_lib)/src.zip" > $(d_src).links
	cp -f $(d_src).templates.in $(d_src).templates
	sed -e "s/^$$/./" -e "s/^/ /" < $(source)/LICENSE >> $(d_src).templates


binary-$(p_doc):	DH_OPTIONS=-p$(p_doc)
binary-$(p_doc):	build
	dh_testroot
	dh_clean -d
	dh_installdirs \
		$(j2se_lib) \
		$(lintian_overrides) \
		$(j2se_share) \
		usr/share/doc/$(p_doc)/$(version)

	: # add lintian overrides
	cp -p debian/$(p_doc).overrides \
		$(d_doc)/$(lintian_overrides)/$(p_doc)

	: # generate any dh_* config files
	echo "$(doc)/$(p_doc)/$(version) $(doc)/$(p_sdk)/html" > $(d_doc).links
	( \
	  echo "arch='$(arch)'"; \
	  echo "archdir='$(archdir)'"; \
	  echo "etc='/$(etc)'"; \
	  echo "j2se_lib='/$(j2se_lib)'"; \
	  echo "j2se_share='/$(j2se_share)'"; \
	  echo "package='$(p_sdk)'"; \
	  echo "release='$(release)'"; \
	  echo "tag='$(tag)'"; \
	  echo "version='$(version)'"; \
	  gnome=`find $(d_doc)/$(j2se_share)/gnome -type f -printf "%f %P "`; \
	  echo "gnome='$$gnome'"; \
	  echo "" \
	) > $(d_doc).debhelper
	for i in $(d_doc).{postinst,postrm,prerm,preinst}; do \
	  cp $(d_doc).debhelper $$i.debhelper; \
	done

binary-indep:	build

binary-arch:	$(binary_arch_targets)
	dh_testroot
#	cp $(source)/COPYRIGHT debian/copyright
	dh_installchangelogs -a -k \
		$(wildcard $(source)/CHANGES $(source)/jre/CHANGES)
	dh_installdocs -a
	dh_installdebconf -a
	dh_installman -a
	dh_installmime -a
	dh_link -a
	dh_compress -a
	dh_fixperms -a
	: # remove empty directories, when all components are in place
	for d in `find debian -depth -type d ! -name plugins ! -path "*/$(p_doc)/$(version)" -empty 2> /dev/null`; do \
	  while rmdir $$d 2> /dev/null; do d=`dirname $$d`; done; \
	done
	dh_installdeb -a
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

binary: binary-indep binary-arch

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