#!/usr/bin/make -f
# -*- makefile -*-

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

unexport LANG LC_ALL

dh_version := $(shell dpkg-query -f '$${Version}\n' -W debhelper | sed -n 's/^\(.\).*/\1/p')

# using brace expansion and substring replacements (${var:0:2}).
SHELL = /bin/bash

vafilt = $(subst $(2)=,,$(filter $(2)=%,$(1)))

DPKG_VARS		:= $(shell dpkg-architecture)
DEB_HOST_GNU_TYPE	?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE	?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_GNU_TYPE)
DEB_HOST_ARCH		?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH)
DEB_BUILD_ARCH		?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_ARCH)
DEB_HOST_ARCH_CPU	?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH_CPU)
DEB_HOST_MULTIARCH	?= $(call vafilt,$(DPKG_VARS),DEB_HOST_MULTIARCH)

PATH := $(CURDIR)/bin:$(PATH)
export PATH

CHANGELOG_VARS := $(shell dpkg-parsechangelog | sed -n 's/ /_/g;/^[^_]/s/^\([^:]*\):_\(.*\)/\1=\2/p')
PKGSOURCE := $(call vafilt,$(CHANGELOG_VARS),Source)
PKGVERSION := $(call vafilt,$(CHANGELOG_VARS),Version)

distribution := $(shell lsb_release --id --short)
distrel := $(shell lsb_release --codename --short)
derivative := $(shell if dpkg-vendor --derives-from Ubuntu; then echo Ubuntu; \
               elif dpkg-vendor --derives-from Debian; then echo Debian; \
               else echo Unknown; fi)
ifeq ($(distrel),n/a)
  distrel := sid
endif

multiarch_dir = /$(DEB_HOST_MULTIARCH)

hotspot_archs	= amd64 i386 arm64 ppc64 ppc64el kfreebsd-amd64 kfreebsd-i386
# FIXME: use bootcycle builds for zero archs?
bootcycle_build  = $(if $(filter $(DEB_HOST_ARCH), $(hotspot_archs)),yes)
bootcycle_build  = yes
ifneq ($(DEB_HOST_ARCH),$(DEB_BUILD_ARCH))
  bootcycle_build  =
endif

shark_archs	= amd64 i386 kfreebsd-amd64 kfreebsd-i386
# Shark build but just crash
shark_archs	=

ifneq (,$(filter $(distrel),lucid precise quantal raring saucy trusty utopic vivid wily lenny etch squeeze wheezy jessie))
  is_default = no
else
  is_default = yes
endif

srcdir		= src
builddir	= build
zbuilddir	= build-zero
jbuilddir	= build-jamvm

VENDOR		= openjdk
Vendor		= OpenJDK
TOP		= usr/lib/jvm
origin		= openjdk
basename	= openjdk-$(shortver)
ifneq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs)))
  priority	= $(if $(filter yes, $(is_default)),1091,1079)
  vm_name	= Hotspot JIT
else ifneq (,$(filter $(DEB_HOST_ARCH), $(shark_archs)))
  priority	= $(if $(filter yes, $(is_default)),1085,1075)
  vm_name	= Hotspot Shark
else
  priority	= $(if $(filter yes, $(is_default)),1084,1073)
  vm_name	= Hotspot Zero
endif
jvmver		= 1.9.0
shortver	= 9
updatever	:= $(shell echo $(PKGVERSION) | sed -n 's/.*u\([0-9]\+\).*/\1/p')
buildver	:= $(shell echo $(PKGVERSION) | sed -n 's/.*\(b[0-9]\+\).*/\1/p')

ifneq (,$(DEB_HOST_MULTIARCH))
  jdirname	= java-$(shortver)-$(origin)-$(DEB_HOST_ARCH)
  jdiralias	= java-$(jvmver)-$(origin)-$(DEB_HOST_ARCH)
  basedir	= $(TOP)/$(jdirname)
  commonbasedir	= $(TOP)/java-$(shortver)-$(origin)-common
  commonbasedir	= $(basedir)
  etcdir	= etc/java-$(shortver)-$(origin)
else
  jdirname	= java-$(shortver)-$(origin)
  jdiralias	= java-$(jvmver)-$(origin)
  basedir	= $(TOP)/$(jdirname)
  commonbasedir	= $(TOP)/java-$(shortver)-$(origin)
  etcdir	= etc/$(jdirname)
endif
security	= $(etcdir)/security
ifneq ($(bootcycle_build),yes)
  jreimg	= bootcycle-build/images/jre
  sdkimg	= bootcycle-build/images/jdk
  build_target	= bootcycle-images
else
  jreimg	= images/jre
  sdkimg	= images/jdk
  build_target	= images
endif

# Support parallel=<n> in DEB_BUILD_OPTIONS (see #209008)
COMMA=,
SPACE = $(EMPTY) $(EMPTY)
ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
  NJOBS = $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
endif

with_check = $(if $(findstring nocheck, $(DEB_BUILD_OPTIONS)),,yes)
ifneq (,$(filter $(DEB_HOST_ARCH), armel))
  with_check = disabled running check on $(DEB_HOST_ARCH)
endif
#with_check = disabled for this upload

with_docs = $(if $(findstring nodocs, $(DEB_BUILD_OPTIONS)),,yes)
ifneq (,$(findstring cacao shark, $(PKGSOURCE)))
  with_docs = disabled for cacao and shark
endif

with_wgy_zenhai = $(if $(filter $(distrel),lenny),,yes)

arch_map	:= alpha=alpha arm=arm armel=arm armhf=arm arm64=aarch64 amd64=amd64 hppa=parisc i386=i586 m68k=m68k mips=mips mipsel=mipsel mips64=mips64 mips64el=mips64el powerpc=ppc powerpcspe=ppc ppc64=ppc64 ppc64el=ppc64le sparc=sparc sparc64=sparcv9 sh4=sh s390x=s390x ia64=ia64 x32=x32
archdir_map	:= alpha=alpha arm=arm armel=arm armhf=arm arm64=aarch64 amd64=amd64 hppa=parisc i386=i386 m68k=m68k mips=mips mipsel=mipsel mips64=mips64 mips64el=mips64el powerpc=ppc powerpcspe=ppc ppc64=ppc64 ppc64el=ppc64le sparc=sparc sparc64=sparcv9 sh4=sh s390x=s390x ia64=ia64 x32=x32

jvmarch		:= $(strip $(patsubst $(DEB_HOST_ARCH_CPU)=%, %, \
			$(filter $(DEB_HOST_ARCH_CPU)=%, $(arch_map))))
archdir		:= $(strip $(patsubst $(DEB_HOST_ARCH_CPU)=%, %, \
			$(filter $(DEB_HOST_ARCH_CPU)=%, $(archdir_map))))
ifeq ($(DEB_HOST_ARCH),x32)
  jvmarch := x32
  archdir := x32
endif

default_vm = $(if $(filter $(DEB_HOST_ARCH), $(hotspot_archs)),hotspot,zero)

any_archs = alpha amd64 armel armhf arm64 i386 ia64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el m68k sh4 sparc sparc64 s390x x32 kfreebsd-i386 kfreebsd-amd64

cacao_archs = alpha amd64 armel armhf i386 powerpc powerpcspe m68k
# TODO kfreebsd porting for cacao vm
cacao_archs =

ifeq (,$(filter $(distrel),squeeze lucid))
  jamvm_archs = amd64 armel armhf i386 mips mipsel powerpc kfreebsd-i386 kfreebsd-amd64
endif
jamvm_archs =

ifeq (,$(filter $(distrel),wheezy squeeze lucid))
  jamvm_defaults =
endif

altshark_archs = powerpc ppc64 ppc64el
# Shark build but just crash
altshark_archs =

altzero_archs = $(filter-out arm64 ppc64el sparc sparc64, $(hotspot_archs)) $(altshark_archs)
altzero_archs =

ifeq (,$(filter noaltcacao, $(DEB_BUILD_OPTIONS)))
  ifneq (,$(filter $(DEB_HOST_ARCH), $(cacao_archs)))
    alternate_vms += cacao
  endif
endif
ifeq (,$(filter noaltzero, $(DEB_BUILD_OPTIONS))$(filter noaltshark, $(DEB_BUILD_OPTIONS)))
  ifneq (,$(filter $(DEB_HOST_ARCH), $(altzero_archs)))
    ifneq (,$(filter $(DEB_HOST_ARCH), $(shark_archs) $(altshark_archs)))
      alternate_vms += shark
      zero_dir = shark
    else
      alternate_vms += zero
      zero_dir = zero
    endif
  endif
endif
ifeq (,$(filter noaltjamvm, $(DEB_BUILD_OPTIONS)))
  ifneq (,$(filter $(DEB_HOST_ARCH), $(jamvm_archs)))
    alternate_vms += jamvm
  endif
endif

BOOTJDK_HOME := $(strip $(subst /bin/javac,, $(firstword $(wildcard \
			/usr/lib/jvm/java-8-openjdk-$(DEB_BUILD_ARCH)/bin/javac \
			/usr/lib/jvm/java-7-openjdk-$(DEB_BUILD_ARCH)/bin/javac \
			/usr/lib/jvm/java-7-openjdk/bin/javac \
		))))

ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
  BUILDJDK_HOME = $(CURDIR)/$(builddir)/$(sdkimg)
else
  BUILDJDK_HOME = $(BOOTJDK_HOME)
endif

OPENJDK_VERSION = jdk$(shortver)u$(updatever)-$(buildver)

# for Hotspot: hotspot/make/linux/makefiles/vm.make
# Don't overwrite Hotspot opt level :
# -O3 is already default option for hotspot

# FIXME: ftbfs with -Werror=format-security
dpkg_buildflags_hs = \
	DEB_CFLAGS_MAINT_STRIP="-O2 -Werror=format-security" \
	DEB_CXXFLAGS_MAINT_STRIP="-O2 -Werror=format-security"
# jdk/make/CompileDemos.gmk (SetupJVMTIDemo) doesn't like commas in flags
dpkg_buildflags_hs += \
	DEB_LDFLAGS_MAINT_STRIP="-Wl,-z,relro -Wl,-Bsymbolic-functions" \
	DEB_LDFLAGS_MAINT_APPEND="-Xlinker -z -Xlinker relro -Xlinker -Bsymbolic-functions"
dpkg_buildflags_hs += dpkg-buildflags
export EXTRA_CPPFLAGS_HS := $(shell $(dpkg_buildflags_hs) --get CPPFLAGS)
export EXTRA_CFLAGS_HS   := $(shell $(dpkg_buildflags_hs) --get CFLAGS) $(shell $(dpkg_buildflags_hs) --get CPPFLAGS)
export EXTRA_CXXFLAGS_HS := $(shell $(dpkg_buildflags_hs) --get CXXFLAGS)
export EXTRA_LDFLAGS_HS  := $(shell $(dpkg_buildflags_hs) --get LDFLAGS)

# for JDK: jdk/make/common/Defs.gmk
# Don't overwrite JDK opt level :
# 1) with forced -03, it cause wrong Math.* computations, see #679292 and #678228
# 2) JDK already use it's own OPTIMIZATION_LEVEL variable for each module
dpkg_buildflags_jdk = DEB_CFLAGS_MAINT_STRIP="-O2" DEB_CXXFLAGS_MAINT_STRIP="-O2"
dpkg_buildflags_jdk += dpkg-buildflags
export EXTRA_CPPFLAGS_JDK := $(shell $(dpkg_buildflags_jdk) --get CPPFLAGS)
export EXTRA_CFLAGS_JDK   := $(shell $(dpkg_buildflags_jdk) --get CFLAGS) $(shell $(dpkg_buildflags_jdk) --get CPPFLAGS)
export EXTRA_CXXFLAGS_JDK := $(shell $(dpkg_buildflags_jdk) --get CXXFLAGS)
export EXTRA_LDFLAGS_JDK  := $(shell $(dpkg_buildflags_jdk) --get LDFLAGS)

#for JamVM: Makefile.am
ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
dpkg_buildflags_jamvm += DEB_CFLAGS_MAINT_STRIP="-O2" DEB_CXXFLAGS_MAINT_STRIP="-O2"
dpkg_buildflags_jamvm += DEB_CFLAGS_MAINT_APPEND="-O3" DEB_CXXFLAGS_MAINT_APPEND="-O3"
endif
dpkg_buildflags_jamvm += dpkg-buildflags
export EXTRA_CPPFLAGS_JAMVM := $(shell $(dpkg_buildflags_jamvm) --get CPPFLAGS)
export EXTRA_CFLAGS_JAMVM   := $(shell $(dpkg_buildflags_jamvm) --get CFLAGS)
export EXTRA_CXXFLAGS_JAMVM := $(shell $(dpkg_buildflags_jamvm) --get CXXFLAGS)
export EXTRA_LDFLAGS_JAMVM  := $(shell $(dpkg_buildflags_jamvm) --get LDFLAGS)

#for IcedTea
ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
dpkg_buildflags_it += DEB_CFLAGS_MAINT_STRIP="-O2" DEB_CXXFLAGS_MAINT_STRIP="-O2"
dpkg_buildflags_it += DEB_CFLAGS_MAINT_APPEND="-O3" DEB_CXXFLAGS_MAINT_APPEND="-O3"
endif
dpkg_buildflags_it += dpkg-buildflags
export EXTRA_CPPFLAGS_IT := $(shell $(dpkg_buildflags_it) --get CPPFLAGS)
export EXTRA_CFLAGS_IT   := $(shell $(dpkg_buildflags_it) --get CFLAGS)
export EXTRA_CXXFLAGS_IT := $(shell $(dpkg_buildflags_it) --get CXXFLAGS)
export EXTRA_LDFLAGS_IT  := $(shell $(dpkg_buildflags_it) --get LDFLAGS)

#for CACAO: Makefile.am
ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
dpkg_buildflags_cacao += DEB_CFLAGS_MAINT_STRIP="-O2" DEB_CXXFLAGS_MAINT_STRIP="-O2"
dpkg_buildflags_cacao += DEB_CFLAGS_MAINT_APPEND="-O3" DEB_CXXFLAGS_MAINT_APPEND="-O3"
endif
dpkg_buildflags_cacao += dpkg-buildflags
export EXTRA_CPPFLAGS_CACAO := $(shell $(dpkg_buildflags_cacao) --get CPPFLAGS)
export EXTRA_CFLAGS_CACAO   := $(shell $(dpkg_buildflags_cacao) --get CFLAGS)
export EXTRA_CXXFLAGS_CACAO := $(shell $(dpkg_buildflags_cacao) --get CXXFLAGS)
export EXTRA_LDFLAGS_CACAO  := $(shell $(dpkg_buildflags_cacao) --get LDFLAGS)

# This section should be in sync with "bd_gcc" definition
ifneq (,$(filter $(distrel),squeeze lucid))
  export CC = gcc-4.4
  export CXX = g++-4.4
else ifneq (,$(filter $(distrel),wheezy quantal raring))
  export CC = gcc-4.7
  export CXX = g++-4.7
else ifneq (,$(filter $(distrel),precise))
  export CC = gcc-4.6
  export CXX = g++-4.6
else ifneq (,$(filter $(distrel),saucy trusty))
  export CC = gcc-4.8
  export CXX = g++-4.8
else ifneq (,$(filter $(distrel),utopic vivid jessie))
  export CC = gcc-4.9
  export CXX = g++-4.9
#else ifneq (,$(filter $(distrel),wily sid stretch))
else ifneq (,)
  ifneq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs)))
    export CC = $(DEB_HOST_GNU_TYPE)-gcc-5
    export CXX = $(DEB_HOST_GNU_TYPE)-g++-5
    # FIXME: altzero seems to build with GCC 5 on i386, amd64, ppc64el ...
    ifneq (,$(filter $(DEB_HOST_ARCH), arm64))
      ZERO_CC = $(DEB_HOST_GNU_TYPE)-gcc-4.9
      ZERO_CXX = $(DEB_HOST_GNU_TYPE)-g++-4.9
    endif
  else
    export CC = $(DEB_HOST_GNU_TYPE)-gcc-4.9
    export CXX = $(DEB_HOST_GNU_TYPE)-g++-4.9
  endif
else
  export CC = $(DEB_HOST_GNU_TYPE)-gcc-5
  export CXX = $(DEB_HOST_GNU_TYPE)-g++-5
endif

ifneq (,$(filter $(DEB_HOST_ARCH), armel armhf))
ifeq ($(derivative),Ubuntu)
  OPT_CFLAGS/cppInterpreter_arm.o = -march=armv6 -mtune=cortex-a8 -O2 -falign-functions=64 -falign-loops=8 -g0
else
  OPT_CFLAGS/cppInterpreter_arm.o = -O2 -falign-functions=32 -falign-loops=8 -g0
endif
export OPT_CFLAGS/cppInterpreter_arm.o
endif

with_pulse = yes
with_pulse =

ifneq (,$(filter $(distrel),squeeze lucid))
  with_bridge = bridge
  with_jni_bridge = yes
else
  with_bridge = atk
endif

with_nss = yes

ifneq (,$(filter $(distrel),squeeze wheezy lucid precise xenial))
  with_check =
else
  bd_jtreg = jtreg,
endif

on_buildd := $(shell [ -f /CurrentlyBuilding -o "$$LOGNAME" = buildd ] && echo yes)

ifeq ($(derivative),Debian)
  with_wm = $(notdir $(firstword $(wildcard /usr/bin/metacity /usr/bin/twm)))
  ifneq (,$(findstring twm, $(with_wm)))
    with_wm_args = -f $(CURDIR)/bin/jtreg.tmwrc
  endif
  bd_wm = twm | metacity, twm | dbus-x11,
else
  with_wm = $(notdir $(firstword $(wildcard /usr/bin/metacity /usr/bin/twm)))
  with_wm_args =
  ifneq (,$(findstring twm, $(with_wm)))
    with_wm_args = -f $(CURDIR)/bin/jtreg.tmwrc
  endif
  ifneq (,$(filter $(distrel),saucy raring quantal precise lucid))
    bd_wm = metacity | twm, dbus-x11,
  else
    bd_wm = twm | metacity, twm | dbus-x11,
  endif
endif
ifeq ($(with_wm),metacity)
  with_wm_prefix = dbus-launch --exit-with-session
endif

ifeq (,$(filter $(distrel),squeeze wheezy lucid precise quantal raring saucy trusty))
  ifeq (,$(filter $(DEB_HOST_ARCH),sh4))
    with_systemtap = yes
    ALT_SDT_H := $(firstword $(wildcard /usr/include/*/sys/sdt.h /usr/include/sys/sdt.h))
    export ALT_SDT_H
  endif
endif

ifneq (,$(filter $(DEB_HOST_ARCH), sparc64))
  USE_PRECOMPILED_HEADER = 0
  export USE_PRECOMPILED_HEADER
endif

COMMON_PATCHES = \
	autoconf-select.diff \
	hotspot-warn-no-errformat.diff \
	hotspot-set-compiler.diff \
	system-pcsclite.diff \
	ld-symbolic-functions.diff \
	hotspot-mips-align.diff \
	hotspot-no-march-i586.diff \
	hotspot-sparc-arch.diff \
	icc_loading_with_symlink.diff \
	icedtea-override-redirect-compiz.patch \
	jdk-freetypeScaler-crash.diff \
	libpcsclite-dlopen.diff \
	nonreparenting-wm.diff \
	shebang.diff \
	jexec.diff \
	default-jvm-cfg.diff \
	pass-extra-flags.diff \
	hotspot-disable-werror.diff \
	workaround_expand_exec_shield_cs_limit.diff \
	zero-architectures.diff \
	adlc-parser.patch \
	multiple-pkcs11-library-init.patch \
	applet-hole.patch \
	jdk-8067331.diff \
	8073754-stack-overflow-9-build.diff \
	m68k-support.diff \
	jdk-target-arch-define.diff \
	zero-sh.diff \
	8153275.diff \

# FIXME: update patches
	#accessible-toolkit.patch # update for 8
#	include-all-srcs.diff
#	disable-doclint-by-default.diff \
#	dont-strip-images.diff \

ifeq ($(with_bridge),atk)
    COMMON_PATCHES += atk-wrapper-security.patch
else ifneq (,$(with_bridge))
    COMMON_PATCHES += java-access-bridge-security.patch
endif

COMMON_PATCHES += \
	dnd-files.patch \
	zero-x32.diff \
	hotspot-powerpcspe.diff

# FIXME	fontconfig-wqy-microhei.patch \
# FIXME	zero-sparc.diff \
# FIXME	no-pch-build.diff \

# FIXME CACAO update needed
#ifeq ($(DEB_HOST_ARCH),armel)
#  ifeq ($(distrel),quantal)
#    DISTRIBUTION_PATCHES += cacao-armv4.diff
#  else ifeq ($(distribution),Debian)
#    DISTRIBUTION_PATCHES += cacao-armv4.diff
#  endif
#endif

# FIXME needs an update:
#	$(if $(with_wgy_zenhai),,fontconfig-arphic-uming.diff) \

# FIXME: needs an update
#ifeq (,$(filter $(distrel),squeeze lucid))
#  COMMON_PATCHES += \
#	fontconfig-korean-nanum.diff \
#	fontconfig-japanese.diff
#endif

ifeq ($(with_pulse),yes)
    COMMON_PATCHES += \
	jdk-pulseaudio.diff
endif

ifneq (,$(filter $(DEB_HOST_ARCH), alpha))
  # FIXME: Needed for non-bootstrap builds?
  COMMON_PATCHES += \
	alpha-float-const.diff
endif

ifneq (,$(filter $(DEB_HOST_ARCH), kfreebsd-amd64 kfreebsd-i386))
  COMMON_PATCHES += \
	kfreebsd-support-jdk.diff \
	kfreebsd-support-hotspot.diff
endif

DEFAULT_PATCHES = \
	$(COMMON_PATCHES) \
	hotspot-libpath.diff

# for additional zero builds
ZERO_PATCHES = \
	$(COMMON_PATCHES) \
	hotspot-libpath.diff


CONFIGURE_ARGS =

# GNU/kFreeBSD don't support epoll syscall so don't try to check of it.
# FIXME need to check the flag, configure complains about it
#ifneq (,$(filter $(DEB_HOST_ARCH), kfreebsd-amd64 kfreebsd-i386))
#  CONFIGURE_ARGS += --disable-compile-against-syscalls
#endif

# there are problems --with-alt-jar=/usr/bin/fastjar,
# see http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=217
# only use it for zero ports except powerpc (which we assume as
# fast enough to build.
ifeq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs) ia64 powerpc powerpcspe))
  CONFIGURE_ARGS += --with-alt-jar=/usr/bin/fastjar
endif

ifneq (,$(filter $(DEB_HOST_ARCH), armel armhf))
  CONFIGURE_ARGS += \
	--disable-arm32-jit
endif

ifneq (,$(filter $(DEB_HOST_ARCH), $(cacao_archs)))
  ifneq (,$(filter $(DEB_HOST_ARCH), armel))
    # TODO: test build done without --enable-softfloat
    EXTRA_BUILD_ENV += CACAO_CONFIGURE_ARGS='--host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE)'
  else
    EXTRA_BUILD_ENV += CACAO_CONFIGURE_ARGS='--host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE)'
  endif
endif

ifeq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs)))
  CONFIGURE_ARGS += --enable-zero
  ifneq (,$(filter $(DEB_HOST_ARCH), $(shark_archs)))
    CONFIGURE_ARGS += --enable-shark
  endif
endif

EXTRA_BUILD_ENV += MAKE_VERBOSE=y QUIETLY= LOG=debug

# timestamp skew on kFreeBSD
EXTRA_BUILD_ENV += IGNORE_OLD_CONFIG=true

EXTRA_BUILD_ENV += LIBFFI_LIBS=-lffi_pic

# http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2014-March/026450.html
# plus needs explicit --disable-debug-symbols
EXTRA_BUILD_ENV += \
	DEBUG_BINARIES=true \
	FULL_DEBUG_SYMBOLS=0 \
	ZIP_DEBUGINFO_FILES=0 \
	STRIP_POLICY=none \
	POST_STRIP_CMD=true \
	ALT_OBJCOPY=/does_not_exist

ifeq ($(with_pulse),yes)
  CONFIGURE_ARGS += --enable-pulse-java
endif

CONFIGURE_ARGS += --enable-system-kerberos

ifeq ($(with_nss),yes)
  CONFIGURE_ARGS += --enable-nss
else ifeq ($(with_nss),no)
  CONFIGURE_ARGS += --disable-nss
endif

ifeq ($(with_systemtap),yes)
  CONFIGURE_ARGS += --enable-systemtap --with-abs-install-dir=/$(basedir)
endif

COMMON_CONFIGURE_ARGS =
DEFAULT_CONFIGURE_ARGS =
ZERO_CONFIGURE_ARGS =

# FIXME: --with-jvm-variants=server,zero not supported upstream
ifneq (,$(filter $(DEB_HOST_ARCH),$(hotspot_archs)))
  ifneq (,$(filter $(DEB_HOST_ARCH),i386))
    DEFAULT_CONFIGURE_ARGS += --with-jvm-variants=client,server
  else
    DEFAULT_CONFIGURE_ARGS += --with-jvm-variants=server
  endif
else
  DEFAULT_CONFIGURE_ARGS += --with-jvm-variants=zero
endif
ZERO_CONFIGURE_ARGS += --with-jvm-variants=zero

DEFAULT_CONFIGURE_ARGS += --with-boot-jdk=$(BOOTJDK_HOME)
ZERO_CONFIGURE_ARGS += --with-boot-jdk=$(BUILDJDK_HOME)

COMMON_CONFIGURE_ARGS += --disable-ccache

# FIXME: zero not ready for --disable-precompiled-headers
#COMMON_CONFIGURE_ARGS += --disable-precompiled-headers
ifneq (,$(filter $(DEB_HOST_ARCH),$(hotspot_archs)))
  DEFAULT_CONFIGURE_ARGS += --disable-precompiled-headers
endif

ifneq (,$(filter $(DEB_HOST_ARCH), powerpc))
  DEFAULT_CONFIGURE_ARGS += --with-boot-jdk-jvmargs="-XX:ThreadStackSize=2240"
endif

ifneq (,$(filter $(DEB_HOST_ARCH), ppc64 ppc64el))
  ZERO_CONFIGURE_ARGS += --with-boot-jdk-jvmargs="-XX:ThreadStackSize=2240"
endif

ifeq ($(with_check),yes)
  COMMON_CONFIGURE_ARGS += --with-jtreg
endif

COMMON_CONFIGURE_ARGS += \
	--with-milestone='$(distribution)' \
	--with-user-release-suffix='$(PKGVERSION)' \
	--with-update-version=$(updatever) \
	--with-build-number=$(buildver)

#	--with-debug-level=fastdebug \

COMMON_CONFIGURE_ARGS += \
	--with-debug-level=release \
	--disable-debug-symbols \
	--disable-zip-debug-info \
	--enable-unlimited-crypto \
	--with-zlib=system \
	--with-giflib=system \
	--with-libpng=system \
	--with-libjpeg=system \
	--with-lcms=system \
	--with-pcsclite=system \
	--with-stdc++lib=dynamic \
	--disable-warnings-as-errors

ifneq (,$(NJOBS))
  COMMON_CONFIGURE_ARGS += --with-num-cores=$(NJOBS)
endif

# FIXME: upstream says the extra flags are not designed for general purpose ...
# http://mail.openjdk.java.net/pipermail/jdk8u-dev/2014-July/001389.html

# FIXME: demos fail to build with these ...
# FIXME: zero ftbfs without -fpermissive
#src/cpu/zero/vm/cppInterpreter_zero.cpp:732:30: error: invalid conversion from 'intptr_t {aka long int}' to 'const void*' [-fpermissive]
#       object = (oop) locals[0];
#                              ^

#COMMON_CONFIGURE_ARGS += \
	--with-extra-cflags='$(EXTRA_CPPFLAGS_HS) $(EXTRA_CFLAGS_HS)' \
	--with-extra-cxxflags='$(EXTRA_CPPFLAGS_HS) $(EXTRA_CXXFLAGS_HS)' \
	--with-extra-ldflags='$(EXTRA_LDFLAGS_HS)'

ifneq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs)))
  DEFAULT_CONFIGURE_ARGS += \
	--with-extra-cflags='$(EXTRA_CPPFLAGS_HS) $(EXTRA_CFLAGS_HS)' \
	--with-extra-ldflags='$(EXTRA_LDFLAGS_HS)'
else
  DEFAULT_CONFIGURE_ARGS += \
	--with-extra-cflags='$(EXTRA_CPPFLAGS_HS) $(EXTRA_CFLAGS_HS)' \
	--with-extra-cxxflags='-fpermissive' \
	--with-extra-ldflags='$(EXTRA_LDFLAGS_HS)'
endif

ZERO_CONFIGURE_ARGS += \
	--with-extra-cflags='$(EXTRA_CPPFLAGS_HS) $(EXTRA_CFLAGS_HS)' \
	--with-extra-cxxflags='-fpermissive' \
	--with-extra-ldflags='$(EXTRA_LDFLAGS_HS)'

ifneq ($(DEB_HOST_ARCH),$(DEB_BUILD_ARCH))
  COMMON_CONFIGURE_ARGS += \
	--build=$(DEB_BUILD_GNU_TYPE) \
	--host=$(DEB_HOST_GNU_TYPE) \
	--target=$(DEB_HOST_GNU_TYPE) \
	BUILD_CC=$(subst $(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE),$(CC)) \
	BUILD_LD=$(subst $(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE),$(CC)) \
	BUILD_CXX=$(subst $(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE),$(CXX)) \

endif

# (most) jre and jdk tools handled by the alternatives system.
# dups in heimdal-clients, krb5-user: kinit, klist, ktab, no alternatives
# use javaws from icedtea-next
# 6, 7, 8 have appletviewer, idlj, jrunscript in the jdk packages
all_jre_tools	= $(filter-out appletviewer idlj javaws jrunscript, $(notdir $(wildcard $(builddir)/$(jreimg)/bin/*)))
jre_tools	= $(filter policytool, $(all_jre_tools))
jre_hl_tools	:= $(filter-out $(jre_tools), $(all_jre_tools))

corba_tools	= orbd servertool tnameserv
jre_hl_tools_alt= $(filter-out $(corba_tools), $(jre_hl_tools)) $(corba_tools)
jre_tools_alt	= $(filter-out kinit klist ktab, $(jre_tools))

all_jdk_tools	= $(filter-out javaws, $(notdir $(wildcard build/$(sdkimg)/bin/*)))
jdk_tools	= appletviewer jconsole
jdk_tools_alt	= $(jdk_tools)
jdk_hl_tools	= $(filter-out $(all_jre_tools) $(jdk_tools), $(all_jdk_tools))
jdk_hl_tools_alt= $(filter-out apt java-rmi.cgi, $(jdk_hl_tools))

# build dependencies
ifneq (,$(filter $(distrel),lucid precise))
  bd_autotools = autoconf2.69, automake, autotools-dev,
  export AUTOCONF=autoconf2.69
else
  bd_autotools = autoconf, automake, autotools-dev,
endif

bd_bootstrap = openjdk-8-jdk | openjdk-9-jdk,
ifeq (,$(filter $(distrel),squeeze wheezy jessie precise trusty))
bd_cross += \
	openjdk-8-jdk-headless <cross>,
endif

# This section should be in sync with "CC/CXX" definition
ifneq (,$(filter $(distrel),squeeze lucid))
  bd_gcc = g++-4.4 (>= 4.4.1),
else ifneq (,$(filter $(distrel), precise))
  bd_gcc = g++-4.6,
else ifneq (,$(filter $(distrel), wheezy))
  bd_gcc = g++-4.7, g++-4.4 [mips mipsel],
else ifneq (,$(filter $(distrel), quantal raring))
  bd_gcc = g++-4.7,
else ifneq (,$(filter $(distrel), saucy trusty))
  bd_gcc = g++-4.8,
else ifneq (,$(filter $(distrel),utopic vivid jessie))
  bd_gcc = g++-4.9,
else ifneq (,$(filter $(distrel),wily stretch sid))
  bd_gcc = g++-5 [$(hotspot_archs)], g++-4.9 [$(strip $(foreach a,$(hotspot_archs), !$(a)))], g++-4.9 [arm64],
else
  bd_gcc = g++-5,
endif
bd_syslibs = zlib1g-dev, libattr1-dev,
ifneq (,$(filter $(distrel),squeeze lucid))
  bd_syslibs += libpng12-dev, libjpeg62-dev,
else ifneq (,$(filter $(distrel),wheezy precise quantal raring saucy))
  bd_syslibs += libpng-dev, libjpeg8-dev,
else
  bd_syslibs += libpng-dev, libjpeg-dev,
endif
bd_syslibs += \
	libgif-dev,
bd_openjdk = \
	libxtst-dev, libxi-dev, libxt-dev, libxaw7-dev, libxrender-dev, libcups2-dev, \
	libasound2-dev, liblcms2-dev, libfreetype6-dev (>= 2.2.1), libgtk2.0-dev, \
	libxinerama-dev, libkrb5-dev, xsltproc, libpcsclite-dev,

pkg_ffidev = libffi-dev

bd_zero = \
	$(pkg_ffidev) [$(foreach a,$(hotspot_archs),!$(a))],
bd_zero = \
	$(pkg_ffidev),

ifneq (,$(shark_archs))
  bd_zero = $(pkg_ffidev),
  ifneq (,$(filter $(distrel),lucid))
    bd_shark = llvm-dev (>= 2.7) [$(foreach a,$(shark_archs) $(altshark_archs),$(a))],
    bd_shark += oprofile [$(foreach a,$(shark_archs) $(altshark_archs),$(a))],
  else
    ifneq (,$(filter $(distrel),squeeze))
      llvm_suffix = -2.7
    else ifneq (,$(filter $(distrel),precise))
      llvm_suffix = -2.9
    else
      llvm_suffix = -3.0
    endif
    bd_shark = llvm$(llvm_suffix)-dev [$(foreach a,$(shark_archs) $(altshark_archs),$(a))],
    ifneq (,$(filter $(DEB_HOST_ARCH),$(shark_archs) $(altshark_archs)))
      CONFIGURE_ARGS += --with-llvm-config=llvm-config$(llvm_suffix)
    endif
  endif
endif

ifneq (,$(cacao_archs))
  # cacao included in the openjdk tarball
  bd_cacao = libtool,
endif

ifneq (,$(filter $(distrel),lucid))
  bd_ant = ant1.8, ant1.8-optional,
else
  bd_ant = ant, ant-optional,
endif

bd_fastjar = fastjar (>= 2:0.96-0ubuntu2),
bd_xvfb = xvfb, xauth, xfonts-base, libgl1-mesa-dri [!x32], $(bd_wm) x11-xkb-utils,
bd_mauve = mauve,
ifeq ($(with_pulse),yes)
  bd_pulsejava = libpulse-dev (>= 0.9.12),
endif
ifeq ($(with_nss),yes)
  ifneq (,$(filter $(distrel),squeeze lucid precise quantal))
    bd_nss = libnss3-dev (>= 3.12.3),
  else ifneq (,$(filter $(distrel),wheezy raring saucy trusty))
    bd_nss = libnss3-dev (>= 2:3.12.3),
  else
    bd_nss = libnss3-dev (>= 2:3.17.1),
  endif
endif
ifeq ($(with_systemtap),yes)
  bd_systemtap = systemtap-sdt-dev [!sh4],
endif

ifneq (,$(jamvm_archs))
  bd_jamvm = libtool,
endif

dlopen_hl_depends = \
	libcups2, liblcms2-2,
ifneq (,$(filter $(distrel),squeeze lucid))
  dlopen_hl_depends += libjpeg62,
else ifneq (,$(filter $(distrel), jessie sid))
  dlopen_hl_depends += libjpeg62-turbo,
else
  dlopen_hl_depends += libjpeg8,
endif
ifneq ($(with_nss),no)
  ifneq (,$(filter $(distrel),squeeze lucid precise))
    dlopen_hl_depends += , libnss3-1d (>= 3.12.3)
  else ifneq (,$(filter $(distrel),wheezy quantal raring saucy trusty))
    dlopen_hl_depends += , libnss3 (>= 2:3.12.3)
  else
    dlopen_hl_depends += , libnss3 (>= 2:3.17.1)
  endif
endif
dlopen_hl_recommends =
dlopen_jre_depends = \
	libgtk2.0-0, libxrandr2, libxinerama1, libgl1-mesa-glx | libgl1
dlopen_jre_recommends =
# these are not yet ready for multiarch
ifneq (,$(DEB_HOST_MULTIARCH))
  ifneq (,$(filter $(distrel),squeeze wheezy jessie precise quantal raring saucy trusty utopic vivid))
    dlopen_jre_recommends += , libgnome2-0, libgnomevfs2-0, libgconf2-4
  else
    dlopen_jre_recommends += , libgnome-2-0, libgnomevfs2-0, libgconf-2-4
  endif
else
  dlopen_jre_depends += , libgnome2-0, libgnomevfs2-0, libgconf2-4
endif

plugin_name = IcedTeaPlugin.so
browser_plugin_dirs = mozilla

# .desktop files need to be multiarch installable
java_launcher = /$(basedir)/bin/java
java_launcher = /usr/bin/java
ifeq ($(derivative),Ubuntu)
  java_launcher = cautious-launcher %f /$(basedir)/bin/java
  java_launcher = cautious-launcher %f /usr/bin/java
endif

ifneq (,$(filter $(distrel),squeeze wheezy lucid precise quantal raring))
  core_fonts = ttf-dejavu-extra
else
  core_fonts = fonts-dejavu-extra
endif
ifneq (,$(filter $(distrel),squeeze lucid))
  cjk_fonts = ttf-baekmuk | ttf-unfonts | ttf-unfonts-core,
  cjk_fonts += ttf-sazanami-gothic | ttf-kochi-gothic,
  cjk_fonts += ttf-sazanami-mincho | ttf-kochi-mincho,
else
  cfk_fonts = fonts-nanum,
  cjk_fonts += fonts-ipafont-gothic, fonts-ipafont-mincho,
endif
cjk_fonts += $(if $(with_wgy_zenhai),ttf-wqy-microhei | ttf-wqy-zenhei,ttf-arphic-uming),
ifneq (,$(filter $(distrel),squeeze wheezy))
  cjk_fonts += ttf-indic-fonts,
else ifneq (,$(filter $(distrel), lucid maverick natty oneiric precise quantal raring saucy trusty))
  cjk_fonts += ttf-indic-fonts-core, ttf-telugu-fonts, ttf-oriya-fonts,
  cjk_fonts += ttf-kannada-fonts, ttf-bengali-fonts,
else
  cjk_fonts += fonts-indic,
endif

p_jre	= $(basename)-jre
p_jrehl	= $(basename)-jre-headless
p_jrec	= $(basename)-jre-cacao
p_jrej	= $(basename)-jre-jamvm
p_jrez	= $(basename)-jre-zero
p_jdkhl	= $(basename)-jdk-headless
p_jdk	= $(basename)-jdk
p_demo	= $(basename)-demo
p_src	= $(basename)-source
p_doc	= $(basename)-doc
p_dbg	= $(basename)-dbg

d	= debian/tmp
d_jre	= debian/$(p_jre)
d_jrehl	= debian/$(p_jrehl)
d_jrec	= debian/$(p_jrec)
d_jrej	= debian/$(p_jrej)
d_jrez	= debian/$(p_jrez)
d_jdkhl	= debian/$(p_jdkhl)
d_jdk	= debian/$(p_jdk)
d_demo	= debian/$(p_demo)
d_src	= debian/$(p_src)
d_doc	= debian/$(p_doc)
d_dbg	= debian/$(p_dbg)

control_vars = \
	'-Vvm:Name=$(vm_name)' \
	'-Vdlopenhl:Depends=$(dlopen_hl_depends)' \
	'-Vdlopenhl:Recommends=$(dlopen_hl_recommends)' \
	'-Vdlopenjre:Depends=$(dlopen_jre_depends)' \
	'-Vdlopenjre:Recommends=$(dlopen_jre_recommends)' \
	'-Vpkg:pulseaudio=$(pkg_pulseaudio)' \
	'-Vxulrunner:Depends=$(xulrunner_depends)' \

ifneq (,$(DEB_HOST_MULTIARCH))
  control_vars += \
	'-Vmultiarch:Depends=multiarch-support'
endif

ifneq (,$(filter-out $(hotspot_archs), $(cacao_archs)))
  control_vars += '-Vcacao:Recommends=$(p_jrec) (= $${binary:Version})'
endif

ifneq (,$(filter $(DEB_HOST_ARCH),$(jamvm_archs)))
  ifneq (,$(filter $(DEB_HOST_ARCH),$(jamvm_defaults)))
    control_vars += '-Vjredefault:Depends=$(p_jrej) (= $${binary:Version})'
  else ifneq (,$(filter $(DEB_HOST_ARCH),$(hotspot_archs)))
    control_vars += '-Vjamvm:Suggests=$(p_jrej) (= $${binary:Version})'
  else
    control_vars += '-Vjamvm:Recommends=$(p_jrej) (= $${binary:Version})'
  endif
endif

ifeq ($(with_bridge),atk)
  control_vars += '-Vdep:bridge=libatk-wrapper-java-jni (>= 0.30.4-0ubuntu2)'
else ifeq ($(with_bridge),yes)
  ifneq (,$(DEB_HOST_MULTIARCH))
    control_vars += '-Vdep:bridge=libaccess-bridge-java-jni (>= 1.26.2-6)'
  else ifeq ($(with_jni_bridge),yes)
    control_vars += '-Vdep:bridge=libaccess-bridge-java-jni'
  else
    control_vars += '-Vdep:bridge=libaccess-bridge-java'
  endif
endif

ifeq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs)))
  ifneq (,$(filter $(DEB_HOST_ARCH), $(shark_archs)))
    control_vars += '-Vdefaultvm:Provides=$(p_jre)-zero, $(p_jre)-shark'
  else
    control_vars += '-Vdefaultvm:Provides=$(p_jre)-zero'
  endif
endif
ifneq (,$(filter $(DEB_HOST_ARCH), $(shark_archs) $(altshark_archs)))
  control_vars += '-Vzerovm:Provides=$(p_jre)-shark'
endif

pkg_certs = ca-certificates-java
control_vars += '-Vcacert:Depends=$(pkg_certs)'

ifneq (,$(filter $(distrel), squeeze wheezy jessie lucid precise quantal raring saucy trusty utopic vivid))
  control_vars += '-Vmountpoint:Depends=initscripts'
else
  control_vars += '-Vmountpoint:Depends=util-linux (>= 2.26.2-4)'
endif

pkg_jcommon = java-common (>= 0.28)
control_vars += '-Vjcommon:Depends=$(pkg_jcommon)'

debian/control: debian/control.in debian/rules
	@cp -p debian/control debian/control.old
	sed \
	      -e 's/@basename@/$(basename)/g' \
	      -e 's/@bd_autotools@/$(bd_autotools)/g' \
	      -e 's/@bd_bootstrap@/$(strip $(bd_bootstrap))/g' \
	      -e 's/@bd_cross@/$(strip $(bd_cross))/g' \
	      -e 's/@bd_openjdk@/$(bd_openjdk)/g' \
	      -e 's/@bd_zero@/$(bd_zero)/g' \
	      -e 's/@bd_gcc@/$(bd_gcc)/g' \
	      -e 's/@bd_syslibs@/$(bd_syslibs)/g' \
	      -e 's/@bd_fastjar@/$(bd_fastjar)/g' \
	      -e 's/@bd_mauve@/$(bd_mauve)/g' \
	      -e 's/@bd_xvfb@/$(bd_xvfb)/g' \
	      -e 's/@bd_cacao@/$(bd_cacao)/g' \
	      -e 's/@bd_jamvm@/$(bd_jamvm)/g' \
	      -e 's/@bd_pulsejava@/$(bd_pulsejava)/g' \
	      -e 's/@bd_nss@/$(bd_nss)/g' \
	      -e 's/@bd_systemtap@/$(bd_systemtap)/g' \
	      -e 's/@bd_shark@/$(bd_shark)/g' \
	      -e 's/@bd_ant@/$(bd_ant)/g' \
	      -e 's/@bd_jtreg@/$(bd_jtreg)/g' \
	      -e 's/@core_fonts@/$(core_fonts)/g' \
	      -e 's/@cjk_fonts@/$(cjk_fonts)/g' \
	      -e 's/@any_archs@/$(any_archs)/g' \
	      -e 's/@cacao_archs@/$(cacao_archs)/g' \
	      -e 's/@jamvm_archs@/$(jamvm_archs)/g' \
	      -e 's/@hotspot_archs@/$(hotspot_archs)/g' \
	      -e 's/@altzero_archs@/$(altzero_archs)/g' \
	    debian/control.in \
	    $(if $(cacao_archs), debian/control.cacao-jre) \
	    $(if $(jamvm_archs), debian/control.jamvm-jre) \
	    $(if $(altzero_archs), debian/control.zero-jre) \
	    $(if $(DEB_HOST_MULTIARCH),,| grep -v '^Multi-Arch') \
		> debian/control
	@if cmp -s debian/control debian/control.old; then \
	  rm -f debian/control.old; \
	else \
	  diff -u debian/control.old debian/control | wdiff -d -; \
	  echo "debian/control did change, please restart the build"; \
	  rm -f debian/control.old; \
	  exit 1; \
	fi

packaging-files:
	for f in debian/*.in debian/patches/*.in; do \
	  case "$$f" in debian/control.in) continue; esac; \
	  f2=$$(echo $$f | sed 's/JB/$(basename)/;s/\.in$$//'); \
	  sed -e 's/@JRE@/$(p_jre)/g' \
	      -e 's/@JDK@/$(p_jdk)/g' \
	      -e 's/@vendor@/$(Vendor)/g' \
	      -e 's/@RELEASE@/$(shortver)/g' \
	      -e 's/@basename@/$(basename)/g' \
	      -e 's,@TOP@,$(TOP),g' \
	      -e 's,@basedir@,$(basedir),g' \
	      -e 's,@etcdir@,$(etcdir),g' \
	      -e 's,@jdiralias@,$(jdiralias),g' \
	      -e 's,@jdirname@,$(jdirname),g' \
	      -e 's/@srcname@/$(srcname)/g' \
	      -e 's/@jvmarch@/$(jvmarch)/g' \
	      -e 's/@archdir@/$(archdir)/g' \
	      -e 's/@tag@/$(tag)/g' \
	      -e 's/@priority@/$(priority)/g' \
	      -e 's/@mantag@/$(mantag)/g' \
	      -e 's/@multiarch@/$(DEB_HOST_MULTIARCH)/g' \
	      -e 's/@jre_hl_tools@/$(jre_hl_tools_alt)/g' \
	      -e 's/@jre_tools@/$(jre_tools_alt)/g' \
	      -e 's/@jdk_hl_tools@/$(jdk_hl_tools_alt)/g' \
	      -e 's/@jdk_tools@/$(jdk_tools_alt)/g' \
	      -e 's/@corba_tools@/$(corba_tools)/g' \
	      -e 's,@j2se_lib@,$(j2se_lib),g' \
	      -e 's,@j2se_share@,$(j2se_share),g' \
	      -e 's,@java_launcher@,$(java_launcher),g' \
	      -e 's/@cjk_fonts@/$(cjk_fonts)/g' \
	    $$f > $$f2; \
	done

configure: stamps/configure
stamps/configure: stamps/patch
	@echo '========== $@ =========='
	@echo "Build options: $(DEB_BUILD_OPTIONS), Processors: $$(nproc)"
	@echo '========== $@ =========='
	-cat /proc/meminfo |egrep '^(Mem|Swap)'
	@echo '========== $@ =========='
	-cat /etc/hosts
	@echo '========== $@ =========='
	-cat /etc/fstab
	@echo '========== $@ =========='

	mkdir -p bin
ifeq (,$(filter $(DEB_HOST_ARCH), alpha amd64 arm64 hppa mips64 mips64el ppc64 ppc64el s390x sparc64 x32))
	( \
	  echo '#! /bin/sh'; \
	  echo 'if [ -x /usr/bin/linux32 ]; then'; \
	  echo '    exec /usr/bin/linux32 /bin/uname "$$@"'; \
	  echo 'else'; \
	  echo '    exec /bin/uname "$$@"'; \
	  echo 'fi'; \
	) > bin/uname
	chmod +x bin/uname
	echo "UNAME checks"
	uname -a
endif
	/bin/uname -a
	lsb_release -a

	-cat /proc/sys/kernel/random/entropy_avail

	mkdir -p stamps
	mkdir -p $(builddir)
	cd $(srcdir) && sh common/autoconf/autogen.sh
	cd $(builddir) && $(EXTRA_BUILD_ENV) ../$(srcdir)/configure \
		$(DEFAULT_CONFIGURE_ARGS) \
		$(COMMON_CONFIGURE_ARGS)

	touch $@

stamps/zero-configure: stamps/build stamps/patch
	@echo '========== $@ =========='
	mkdir -p stamps
	rm -rf  $(zbuilddir)
	mkdir -p $(zbuilddir)
	$(if $(ZERO_CC), export CC=$(ZERO_CC); export CXX=$(ZERO_CXX);) \
	cd $(zbuilddir) && $(EXTRA_BUILD_ENV) ../$(srcdir)/configure \
		$(ZERO_CONFIGURE_ARGS) \
		$(COMMON_CONFIGURE_ARGS)

	touch $@

stamps/jamvm-configure: stamps/jamvm-unpack stamps/patch stamps/build
	@echo '========== $@ =========='
	if [ -x jamvm/autogen.sh ]; then \
	  cd jamvm && NOCONFIGURE=yes ./autogen.sh; \
	fi
	mkdir -p $(jbuilddir)
	cd $(jbuilddir) && ../jamvm/configure \
		--build=$(DEB_BUILD_GNU_TYPE) \
		--host=$(DEB_HOST_GNU_TYPE) \
		--prefix=$(CURDIR)/$(jbuilddir)/install \
		--with-java-runtime-library=openjdk8 \
		--with-gnu-ld \
		CPPFLAGS='$(EXTRA_CPPFLAGS_JAMVM)' \
		CFLAGS='$(EXTRA_CFLAGS_JAMVM)' \
		CXXFLAGS='$(EXTRA_CXXFLAGS_JAMVM)' \
		LDFLAGS='$(EXTRA_LDFLAGS_JAMVM)'
	touch $@

stamps/sound-configure: stamps/build
	@echo '========== $@ =========='
	rm -rf icedtea-sound
	tar xf icedtea-sound.tar.xz
	mv $$(tar tf icedtea-sound.tar.xz | head -1 | sed 's,/.*,,') \
	  icedtea-sound
	patch -p1 -R < debian/patches/icedtea-sound.diff
	patch -p1 < debian/patches/icedtea-sound2.diff
	if [ -x icedtea-sound/autogen.sh ]; then \
	  cd icedtea-sound && ./autogen.sh; \
	fi
	cd icedtea-sound && ./configure \
		--build=$(DEB_BUILD_GNU_TYPE) \
		--host=$(DEB_HOST_GNU_TYPE) \
		--disable-maintainer-mode \
		--with-jdk-home=$(BUILDJDK_HOME) \
		CPPFLAGS="$(EXTRA_CPPFLAGS_IT)" \
		CFLAGS="$(EXTRA_CFLAGS_IT)" \
		CXXFLAGS="$(EXTRA_CXXFLAGS_IT)" \
		LDFLAGS="$(EXTRA_LDFLAGS_IT)"
	touch $@

stamps/sound-build: stamps/sound-configure
	@echo '========== $@ =========='
	$(MAKE) -C icedtea-sound
	touch $@

stamps/jamvm-build: stamps/jamvm-configure
	@echo '========== $@ =========='
	$(MAKE) -C $(jbuilddir)
	$(MAKE) -C $(jbuilddir) install
	rm -rf $(builddir)/$(sdkimg)/lib/$(archdir)/jamvm
	mkdir -p $(builddir)/$(sdkimg)/lib/$(archdir)/jamvm
	cp -p $(jbuilddir)/install/lib/libjvm.so \
		$(builddir)/$(sdkimg)/lib/$(archdir)/jamvm/.
	cp -p $(builddir)/$(sdkimg)/lib/$(archdir)/server/Xusage.txt \
		$(builddir)/$(sdkimg)/lib/$(archdir)/jamvm/.
	touch $@

unpack: stamps/unpack $(if $(jamvm_archs),stamps/jamvm-unpack)
stamps/unpack:
	rm -rf $(srcdir)
	tar xf root.tar.xz
	mv $$(tar tf root.tar.xz | head -1 | sed 's,/.*,,') $(srcdir)
	chmod +x $(srcdir)/configure
	for tb in corba jaxp jaxws langtools hotspot jdk nashorn; do \
	  d=$$(tar tf $$tb.tar.xz | head -1 | sed 's,/.*,,'); \
	  tar -C $(srcdir) -x -f $$tb.tar.xz; \
	  mv $(srcdir)/$$d $(srcdir)/$$tb; \
	done

	$(MAKE) -f debian/rules packaging-files

	mkdir -p stamps
	touch $@

stamps/jamvm-unpack:
	mkdir -p stamps
	rm -rf jamvm jamvm-*
	tar xf jamvm.tar.gz
	mv jamvm-2* jamvm
	patch -p1 < debian/patches/kfreebsd-support-jamvm.diff
	patch -p1 < debian/patches/jamvm-fix.diff
	@mkdir -p stamps
	touch $@

patch: stamps/patch
stamps/patch: stamps/unpack $(if $(jamvm_archs),stamps/jamvm-unpack)
	for i in $(DEFAULT_PATCHES); do \
	  echo $$i; \
	done > $(srcdir)/series

	cd $(srcdir) && \
	  QUILT_PATCHES=../debian/patches quilt --quiltrc - push -a
	( \
	  echo ""; echo "Patches applied in this version:"; \
	  for i in $$(egrep -v '^#|^ *$$' $(srcdir)/series); do \
	    echo ""; echo "$$i:"; \
	    sed -n 's/^# *DP: */  /p' debian/patches/$$i; \
	  done \
	) > stamps/pxx
	mv stamps/pxx $@

ifeq ($(with_check),yes)
    ifneq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs) alpha ia64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el sh4))
      with_mauve_check = $(default_vm)
    endif
    ifneq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs) alpha arm64 armel armhf ia64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el s390x sh4 x32))
      with_jtreg_check = $(default_vm)
    endif

    ifneq (,$(filter cacao, $(alternate_vms)))
      ifneq (,$(filter $(DEB_HOST_ARCH), amd64 i386 powerpc powerpcspe sparc))
	# only activate after testing
	with_mauve_check += cacao
      endif
      ifneq (,$(filter $(DEB_HOST_ARCH), alpha amd64 armel armhf i386 mips mipsel mips64 mips64el powerpc powerpcspe))
	# only activate after testing; hangs several tests.
	with_jtreg_check += cacao
      endif
    endif

    ifneq (,$(filter jamvm, $(alternate_vms)))
      ifneq (,$(filter $(DEB_HOST_ARCH), amd64 ))
	# only activate after testing
	with_mauve_check += jamvm
      endif
      ifneq (,$(filter $(DEB_HOST_ARCH), amd64 i386))
	# only activate after testing; hangs several tests.
	with_jtreg_check += jamvm
      endif
    endif

    ifneq (,$(filter shark, $(alternate_vms)))
      ifneq (,$(filter $(DEB_HOST_ARCH), amd64 i386 powerpc powerpcspe))
	# only activate after testing
	with_mauve_check += $(if $(filter $(DEB_HOST_ARCH),$(altshark_archs)),shark,zero)
      endif
      # shark hangs on ppc64
      ifneq (,$(filter $(DEB_HOST_ARCH), amd64 i386 powerpc powerpcspe))
	# only activate after testing; hangs several tests.
	with_jtreg_check += $(if $(filter $(DEB_HOST_ARCH),$(altshark_archs)),shark,zero)
      endif
    endif

    ifneq (,$(filter zero, $(alternate_vms)))
      ifneq (,$(filter $(DEB_HOST_ARCH), amd64 i386))
	# only activate after testing
	with_mauve_check += zero
      endif
      ifneq (,$(filter $(DEB_HOST_ARCH), arm64 amd64 i386))
	# only activate after testing; hangs several tests.
	with_jtreg_check += zero
      endif
    endif

    with_mauve_check =
endif

# these are best guesses depending on the architecture and the build machines
# some tests require 4min to run, so set the minimum timeout to 3 x 2min.
ifneq (,$(filter $(DEB_HOST_ARCH), alpha armel armhf ia64 m68k mips mipsel mips64 mips64el powerpc powerpcspe x32))
  JTREG_OPTIONS = -timeout:5
else
  JTREG_OPTIONS = -timeout:3
endif

ifneq (,$(filter $(DEB_HOST_ARCH), armel armhf))
  JTREG_OPTIONS += -Xmx256M -vmoption:-Xmx256M
endif

build_stamps = \
	stamps/build \
	$(if $(filter $(DEB_HOST_ARCH),$(altzero_archs)),stamps/zero-build) \
	$(if $(filter $(DEB_HOST_ARCH),$(jamvm_archs)),stamps/jamvm-build)

ifeq ($(with_pulse),yes)
  build_stamps += stamps/sound-build
endif

build_stamps +=  stamps/jtreg-check-default

ifeq (0,1)
build_stamps +=  stamps/mauve-check-default stamps/jtreg-check-default
#build_stamps += $(if $(filter cacao, $(alternate_vms)),stamps/mauve-check-cacao stamps/jtreg-check-cacao)
build_stamps += $(if $(filter jamvm, $(alternate_vms)),stamps/mauve-check-jamvm stamps/jtreg-check-jamvm)
build_stamps += $(if $(filter zero, $(alternate_vms)),stamps/mauve-check-zero stamps/jtreg-check-zero)
ifneq (,$(filter shark, $(alternate_vms)))
  ifneq (,$(filter $(DEB_HOST_ARCH),$(altshark_archs)))
    build_stamps += stamps/mauve-check-shark stamps/jtreg-check-shark
  else
    build_stamps += stamps/mauve-check-zero stamps/jtreg-check-zero
  endif
endif
endif

pre-build:
ifneq (,$(filter $(DEB_HOST_ARCH),s390))
	@echo explicitely fail the build for $(DEB_HOST_ARCH), patches not updated
#else ifneq (,$(filter $(DEB_HOST_ARCH),armel))
#	@echo explicitely fail the build for $(DEB_HOST_ARCH), ARM assembler interpreter not yet ported
	false
endif

build-arch: build
build-indep: build stamps/build-docs
build: pre-build $(build_stamps)
	if [ -f buildwatch.pid ]; then \
	  pid=$$(cat buildwatch.pid); \
	  kill -1 $$pid || :; sleep 1; kill -9 $$pid || :; \
	fi
	rm -f buildwatch.pid

stamps/build: stamps/configure
	@echo '========== $@ =========='
ifneq (,$(filter $(DEB_HOST_ARCH), alpha armel armhf ia64 m68k mips mipsel mips64 mips64el powerpc powerpcspe s390x sparc sparc64))
	sh -c 'sh debian/buildwatch.sh $(CURDIR)/$(builddir) &'
endif
	if $(EXTRA_BUILD_ENV) $(MAKE) -C $(builddir) $(build_target); then \
	  : ; \
	else \
	  if [ -f buildwatch.pid ]; then \
	    pid=$$(cat buildwatch.pid); \
	    kill -1 $$pid || :; sleep 1; kill -9 $$pid || :; \
	  fi; \
	  false; \
	fi

	touch $@

stamps/zero-build: stamps/zero-configure
	@echo '========== $@ =========='
	: # FIXME: build using the just built jdk, and build the vm only
	$(EXTRA_BUILD_ENV) $(MAKE) -C $(zbuilddir) $(build_target)
	rm -rf $(builddir)/$(sdkimg)/lib/$(archdir)/zero
	cp -a $(zbuilddir)/$(sdkimg)/lib/$(archdir)/server \
		$(builddir)/$(sdkimg)/lib/$(archdir)/zero
	touch $@

stamps/build-docs: stamps/build
	@echo '========== $@ =========='
	$(MAKE) -C $(builddir) docs
	touch $@

stamps/xvfb-check:
	mkdir -p bin
	( \
	  echo '#!/bin/sh'; \
	  echo '$(with_wm_prefix) $(with_wm) $(with_wm_args) &'; \
	  echo 'pid=$$!'; \
	  echo 'sleep 3'; \
	  echo '"$$@"'; \
	  echo 'kill -9 $$pid'; \
	) > bin/my-jtreg-run
	chmod 755 bin/my-jtreg-run
	mkdir -p test
ifeq (,$(wildcard /usr/bin/$(with_wm)))
	echo 'xvfb-run -a -e $(CURDIR)/test/xvfb-run.log -s "-extension GLX" "$$@"' > bin/my-xvfb-run
else
	echo 'xvfb-run -a -e $(CURDIR)/test/xvfb-run.log -s "-extension GLX" my-jtreg-run "$$@"' > bin/my-xvfb-run
  ifeq ($(with_wm),twm)
	grep -v '^include-menu-defs' /etc/X11/twm/system.twmrc-menu > bin/jtreg.tmwrc
	echo RandomPlacement >> bin/jtreg.tmwrc
  endif
endif
	if ! /bin/sh bin/my-xvfb-run true ; then \
	  echo "error running $$(cat bin/my-xvfb-run)"; \
	  cat test/xvfb-run.log; \
	  sed -i 's/ -s *"[^"]*"//' bin/my-xvfb-run; \
	  if ! /bin/sh bin/my-xvfb-run true ; then \
	    echo "error running $$(cat bin/my-xvfb-run)"; \
	    cat test/xvfb-run.log; \
	    rm -f bin/my-xvfb-run; \
	  fi; \
	fi
	if [ -f bin/my-xvfb-run ]; then \
	  echo "using $$(cat bin/my-xvfb-run)"; \
	fi
	touch $@

XVFB_RUN_CMD = xvfb-run -a -e $(CURDIR)/test/xvfb-run.log -s "-extension GLX"
ifneq (,$(wildcard /usr/bin/$(with_wm)))
  XVFB_RUN_CMD += $(CURDIR)/bin/my-jtreg-run
endif

stamps/mauve-check-default: stamps/build stamps/xvfb-check
	$(MAKE) -f debian/rules mauve-run-check VMNAME=$(default_vm) VMARGS=
	touch $@

stamps/mauve-check-cacao: stamps/xvfb-check
	$(MAKE) -f debian/rules mauve-run-check VMNAME=cacao VMARGS='-vmarg -cacao'
	touch $@

stamps/mauve-check-jamvm: stamps/xvfb-check
	$(MAKE) -f debian/rules mauve-run-check VMNAME=jamvm VMARGS='-vmarg -jamvm'
	touch $@

stamps/mauve-check-shark: stamps/xvfb-check
	$(MAKE) -f debian/rules mauve-run-check VMNAME=shark VMARGS='-vmarg -shark'
	touch $@

stamps/mauve-check-zero: stamps/xvfb-check
	$(MAKE) -f debian/rules mauve-run-check VMNAME=zero VMARGS='-vmarg -zero'
	touch $@

stamps/mauve-build: stamps/build
	rm -rf build/mauve
	mkdir -p build/mauve
ifeq ($(with_mauve_check),yes)
	tar -x -C build -f /usr/src/mauve.tar.gz
	cd build/mauve \
	    && aclocal \
	    && automake \
	    && autoconf \
	    && PATH=$(CURDIR)/build/$(sdkimg)/bin:$$PATH \
		./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE)
	PATH=$(CURDIR)/build/$(sdkimg)/bin:$$PATH $(MAKE) -C build/mauve
endif
	touch $@

stamps/mauve-check: stamps/build stamps/mauve-build stamps/xvfb-check

mauve-run-check:
	rm -rf build/mauve build/mauve-$(VMNAME)
ifneq (,$(filter $(VMNAME), $(with_mauve_check)))
	tar -x -C build -f /usr/src/mauve.tar.gz
	mv build/mauve build/mauve-$(VMNAME)
	cd build/mauve-$(VMNAME) \
	    && aclocal \
	    && automake \
	    && autoconf \
	    && PATH=$(CURDIR)/build/$(sdkimg)/bin:$$PATH ./configure \
		--host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE)
	PATH=$(CURDIR)/build/$(sdkimg)/bin:$$PATH $(MAKE) -C build/mauve-$(VMNAME)

	if [ -f bin/my-xvfb-run ]; then \
	  cd build/mauve-$(VMNAME) && \
	    JAVA_HOME=$(CURDIR)/build/$(sdkimg) \
	    PATH=$(CURDIR)/build/$(sdkimg)/bin:$$PATH \
		time /bin/sh $(CURDIR)/bin/my-xvfb-run java Harness \
		    -vm $(CURDIR)/build/$(sdkimg)/bin/java \
		    $(VMARGS) \
		    -file $(CURDIR)/debian/mauve_tests \
		    -timeout 30000 2>&1 \
		| tee mauve_output-$(VMNAME); \
	else \
	  echo "mauve testsuite not run for this build (xvfb failures)" \
	    > build/mauve-$(VMNAME)/mauve_output-$(VMNAME); \
	  cat test/xvfb-run.log >> build/mauve-$(VMNAME)/mauve_output-$(VMNAME); \
	fi
	@sleep 5
else
	mkdir -p build/mauve-$(VMNAME)
	echo "mauve testsuite not run for this build" \
	  > build/mauve-$(VMNAME)/mauve_output-$(VMNAME)
endif

stamps/jtreg-check-default: stamps/build stamps/xvfb-check
	$(MAKE) -f debian/rules jtreg-run-check VMNAME=$(default_vm) VMARGS= \
		TEST_SUITES='hotspot langtools'
#		$(if $(filter $(default_vm),hotspot),TEST_SUITES='hotspot langtools jdk',TEST_SUITES='hotspot langtools')
	touch $@

stamps/jtreg-check-cacao: stamps/build stamps/xvfb-check
	$(MAKE) -f debian/rules jtreg-run-check VMNAME=cacao VMARGS='-vmoption:-cacao' \
		TEST_SUITES='hotspot langtools'
	touch $@

stamps/jtreg-check-jamvm: stamps/build stamps/xvfb-check
	ICEDTEA_JTREG_OTHERVM=-othervm \
	  $(MAKE) -f debian/rules jtreg-run-check VMNAME=jamvm VMARGS='-vmoption:-jamvm' \
		TEST_SUITES='hotspot langtools'
	touch $@

stamps/jtreg-check-shark: stamps/build stamps/xvfb-check
	$(MAKE) -f debian/rules jtreg-run-check VMNAME=shark VMARGS='-vmoption:-shark' \
		TEST_SUITES='hotspot langtools'
	touch $@

stamps/jtreg-check-zero: stamps/build stamps/xvfb-check
	$(MAKE) -f debian/rules jtreg-run-check VMNAME=zero VMARGS='-vmoption:-zero' \
		TEST_SUITES='langtools hotspot'
	touch $@

jtreg-run-check:
	mkdir -p test
ifneq (,$(filter $(VMNAME), $(with_jtreg_check)))
	if [ ! -f $(builddir)/$(sdkimg)/conf/security/java.security.install ]; then \
	  fgrep -v 'sun.security.pkcs11' $(builddir)/$(sdkimg)/conf/security/java.security \
	    > $(builddir)/$(sdkimg)/conf/security/java.security.test; \
	  mv $(builddir)/$(sdkimg)/conf/security/java.security \
	    $(builddir)/$(sdkimg)/conf/security/java.security.install; \
	  mv $(builddir)/$(sdkimg)/conf/security/java.security.test \
	    $(builddir)/$(sdkimg)/conf/security/java.security; \
	fi

	@echo "BEGIN jtreg"
	time $(MAKE) -f debian/rules -k jtregcheck \
		$(if $(TEST_SUITES),TEST_SUITES="$(TEST_SUITES)") \
		JTREG_OPTIONS='$(VMARGS) $(JTREG_OPTIONS)' \
		2>&1 | tee test/jtreg_output-$(VMNAME)
	@echo "END jtreg"

	if [ -f $(builddir)/$(sdkimg)/conf/security/java.security.install ]; then \
	  mv $(builddir)/$(sdkimg)/conf/security/java.security.install \
	    $(builddir)/$(sdkimg)/conf/security/java.security; \
	fi

#	for i in check-hotspot.log check-jdk.log check-langtools.log jtreg-summary.log; do \
#	  if [ -f test/$$i ]; then \
	    mv test/$$i test/$${i%*.log}-$(VMNAME).log; \
#	  else \
#	    mkdir -p test; \
#	    cp test/jtreg_output-$(VMNAME) test/$${i%*.log}-$(VMNAME).log; \
#	  fi; \
#	done

	for i in check-hotspot.log check-jdk.log check-langtools.log jtreg-summary.log; do \
	  if [ -f test/$$i ]; then \
	    mv test/$$i test/$${i%*.log}-$(VMNAME).log; \
	  else \
	    mkdir -p test; \
	  fi; \
	done

	@echo "BEGIN jtreg-summary-$(VMNAME)"
	-cat test/jtreg-summary-$(VMNAME).log
	@echo "END jtreg-summary-$(VMNAME)"

	: # kill testsuite processes still hanging
	@pids=$$($(jtreg_pids)); \
	if [ -n "$$pids" ]; then \
	  echo "killing processes..."; \
	  $(jtreg_processes); \
	  kill -1 $$pids; \
	  sleep 2; \
	  pids=$$($(jtreg_pids)); \
	  if [ -n "$$pids" ]; then \
	    echo "trying harder..."; \
	    $(jtreg_processes); \
	    kill -9 $$pids; \
	    sleep 2; \
	  fi; \
	else \
	  echo "nothing to cleanup"; \
	fi; \
	pids=$$($(jtreg_pids)); \
	if [ -n "$$pids" ]; then \
	  echo "leftover processes..."; \
	  $(jtreg_processes); \
	fi

	-for i in hotspot langtools jdk; do \
	  test -f test/check-$$i-$(VMNAME).log || continue; \
	  for t in $$(egrep '^(FAILED|Error)' test/check-$$i-$(VMNAME).log | sed 's/.* \(.*\)\.[^.][^.]*$$/\1/'); do \
	    echo test/$$i/JTwork/$$t.jtr; \
	  done; \
	done > test/failed_tests-$(VMNAME).list; \
	GZIP=-9vn tar -C . -c -z -f test/failed_tests-$(VMNAME).tar.gz -T test/failed_tests-$(VMNAME).list
else
	echo "jtreg harness not run for this build" > test/jtreg_output-$(VMNAME)
endif

# ----------------------------------------------------------------------------
# jtreg targets taken from IcedTea

export JTREG_HOME=/usr/share/java

TESTS_TO_RUN = $(addprefix check-,$(TEST_SUITES))

check-hotspot: stamps/build
	mkdir -p test/hotspot/JTwork test/hotspot/JTreport
	JT_JAVA=$(BOOTJDK_HOME) jtreg -v1 -a -ignore:quiet \
		-w:test/hotspot/JTwork -r:test/hotspot/JTreport \
		-jdk:$(builddir)/$(sdkimg) \
		$(JTREG_OPTIONS) \
		$(CURDIR)/$(srcdir)/hotspot/test \
	    | tee test/$@.log

check-langtools: stamps/build
	mkdir -p test/langtools/JTwork test/langtools/JTreport
	JT_JAVA=$(BOOTJDK_HOME) jtreg -v1 -a -ignore:quiet \
		-w:test/langtools/JTwork -r:test/langtools/JTreport \
		$${JTREG_OTHERVM:--samevm} \
		-jdk:$(builddir)/$(sdkimg) \
		$(JTREG_OPTIONS) \
		-exclude:debian/excludelist.langtools.jtx \
		$(CURDIR)/$(srcdir)/langtools/test \
	    | tee test/$@.log

check-jdk: stamps/build stamps/xvfb-check
	mkdir -p test/jdk/JTwork test/jdk/JTreport
	set -x; \
	if test "x$${DISPLAY}" = "x"; then XVFB_RUN="$(XVFB_RUN_CMD)"; fi; \
	if test "x$${DISPLAY}" = "x" && test "x$${XVFB_RUN}" = "x"; then \
		echo "WARNING: DISPLAY not set and xvfb-run not found"; \
	fi; \
	$(if $(DISPLAY),,$(XVFB_RUN_CMD)) \
	JT_JAVA=$(BOOTJDK_HOME) jtreg -v1 -a -ignore:quiet \
		-w:test/jdk/JTwork -r:test/jdk/JTreport \
		$${JTREG_OTHERVM:--samevm} \
		-jdk:$(builddir)/$(sdkimg) \
		$(JTREG_OPTIONS) \
		-exclude:debian/excludelist.jdk.jtx \
		$(CURDIR)/$(srcdir)/jdk/test \
	    | tee test/$@.log

# FIXME: this might need some adjustment for other OS than Linux
jtreg_processes = ps x -ww -o pid,ppid,args \
	| awk '$$2 == 1 && $$3 ~ /^$(subst /,\/,/scratch)/' \
	| $(SED) 's,$(CURDIR)/$(builddir)/$(sdkimg),<sdkimg>,g;s,$(CURDIR),<pwd>,g'
jtreg_pids = ps x --no-headers -ww -o pid,ppid,args \
	| awk '$$2 == 1 && $$3 ~ /^$(subst /,\/,$(CURDIR)/$(builddir)/$(sdkimg))/ {print $$1}'

jtregcheck: $(TESTS_TO_RUN)
	for i in $(TEST_SUITES); do \
	  echo "--------------- jtreg console summary for $$i ---------------"; \
	  egrep -v '^(Passed:|Directory|Re[a-z]+\ written\ to)' test/check-$$i.log; \
	done | tee test/jtreg-summary.log

	: # kill testsuite processes still hanging
	@pids=$$($(jtreg_pids)); \
	if [ -n "$$pids" ]; then \
	  echo "killing processes..."; \
	  $(jtreg_processes); \
	  kill -1 $$pids; \
	  sleep 2; \
	  pids=$$($(jtreg_pids)); \
	  if [ -n "$$pids" ]; then \
	    echo "try harder..."; \
	    $(jtreg_processes); \
	    kill -9 $$pids; \
	    sleep 2; \
	  fi; \
	else \
	  echo "nothing to cleanup"; \
	fi; \
	pids=$$($(jtreg_pids)); \
	if [ -n "$$pids" ]; then \
	  echo "leftover processes..."; \
	  $(jtreg_processes); \
	fi

# ----------------------------------------------------------------------------

clean: debian-clean
	dh_testdir
	dh_testroot
	rm -rf $(srcdir) jamvm
	rm -rf stamps build build-* test
	rm -rf icedtea-sound
	rm -rf autom4te.cache
	rm -rf bin
	rm -f buildwatch.pid

	dh_clean

debian-clean:
	dh_testdir
	dh_testroot
	dh_prep || dh_clean -k
	for f in debian/*.in debian/patches/*.in; do \
	  f2=$$(echo $$f | sed 's/JB/$(basename)/;s/\.in$$//'); \
	  case "$$f2" in debian/control) continue; esac; \
	  rm -f $$f2; \
	done
	rm -f debian/*.install debian/*.links debian/*.debhelper.log

lib_ext_dirs = common $(sort $(foreach arch,$(arch_map),$(firstword $(subst =,$(SPACE),$(arch)))))
ifeq ($(derivative),Ubuntu)
  lib_ext_dirs := $(filter-out arm hppa m68k mips% powerpcspe s390% sh%, $(lib_ext_dirs))
else
  lib_ext_dirs := $(filter-out arm hppa, $(lib_ext_dirs))
endif

install: packaging-files
	dh_testdir
	dh_testroot
	dh_prep || dh_clean -k
	rm -f debian/*.install debian/*.links
	dh_installdirs

	@echo "all_jre_tools: $(all_jre_tools)"
	@echo "jre_tools:     $(jre_tools)"
	@echo "jre_hl_tools:  $(jre_hl_tools)"
	@echo "all_jdk_tools: $(all_jdk_tools)"
	@echo "jdk_tools: $(jdk_tools)"

	: # install into temporary location
	mkdir -p $(d)/$(basedir)
	cp -a $(builddir)/$(sdkimg)/* $(d)/$(basedir)/

ifeq ($(with_pulse),yes)
# FIXME: ext no longer supported
#	cp icedtea-sound/icedtea-sound.jar $(d)/$(basedir)/lib/ext/.
#	cp icedtea-sound/build/native/libicedtea-sound.so \
#	  $(d)/$(basedir)/lib/$(archdir)/.
endif

	chmod -R u+w $(d)

	: # use javaws from icedtea-netx 
	find $(d) -name 'javaws*' | xargs -r rm -f

	: # install default jvm config file
	ls -l $(d)/$(basedir)/lib
	cp debian/jvm.cfg-default $(d)/$(basedir)/lib/$(archdir)/

	: # compress manpages
	find $(d)/$(basedir)/man -type f ! -type l | xargs gzip -9v -n

	mkdir -p $(d)/$(etcdir)/security
	mkdir -p $(d)/$(etcdir)/management

ifeq (0,1)
	: # rename templates (comments only) to config files,
	: # and move to /$(etcdir)
	for i in \
	  conf/management/jmxremote.password \
	  conf/management/snmp.acl; \
	do \
	  mv $(d)/$(basedir)/$$i.template $(d)/$(etcdir)/$$i; \
	done
else
	: # FIXME: what to do about these?
	for i in \
	  conf/management/jmxremote.password \
	  conf/management/snmp.acl; \
	do \
	  rm -f $(d)/$(basedir)/$$i.template; \
	done
endif

ifeq ($(with_bridge),atk)
  ifneq (,$(filter $(distrel),lenny wheezy squeeze jessie lucid precise quantal raring saucy trusty utopic vivid))
	cp -p debian/accessibility-atk.properties.disabled \
		$(d)/$(basedir)/lib/accessibility.properties
  else
	cp -p debian/accessibility-atk.properties.enabled \
		$(d)/$(basedir)/lib/accessibility.properties
  endif
else
	cp -p debian/accessibility.properties $(d)/$(basedir)/lib/
endif
	cp -p debian/swing.properties $(d)/$(basedir)/lib/

ifneq (,$(pkg_certs))
	rm -f $(d)/$(basedir)/lib/security/cacerts
endif

	: # FIXME: merge nss changes from IcedTea
	cp debian/nss.cfg $(d)/$(basedir)/conf/security/nss.cfg

	: # move config files to $(etcdir) and symlink them.
	for i in \
	  lib/accessibility.properties \
	  conf/logging.properties \
	  conf/sound.properties \
	  conf/net.properties \
	  lib/psfontj2d.properties \
	  lib/psfont.properties.ja \
	  lib/swing.properties \
	  conf/management/jmxremote.access \
	  conf/management/management.properties \
	  conf/security/java.policy \
	  conf/security/java.security \
	  $$([ -f $(d)/$(basedir)/conf/security/nss.cfg ] && echo conf/security/nss.cfg) \
	  $(if $(findstring ca-cert,$(pkg_certs)),,lib/security/cacerts) \
	  lib/security/blacklisted.certs; \
	do \
	  dest=$$(echo $$i | sed 's,^[^/]*/,,'); \
	  mv $(d)/$(basedir)/$$i $(d)/$(etcdir)/$$dest; \
	done
	mv $(d)/$(basedir)/lib/$(archdir)/jvm.cfg \
		$(d)/$(etcdir)/
ifneq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs)))
	printf -- '-zero KNOWN\n' >> $(d)/$(etcdir)/jvm.cfg
else
	printf -- '-zero ALIASED_TO -server\n' >> $(d)/$(etcdir)/jvm.cfg
endif

ifneq (,$(filter $(DEB_HOST_ARCH), $(jamvm_archs)))
	printf -- '-jamvm KNOWN\n' >> $(d)/$(etcdir)/jvm.cfg
endif

ifneq (,$(filter $(DEB_HOST_ARCH),$(jamvm_defaults)))
	grep '^[# ]' $(d)/$(etcdir)/jvm.cfg \
		> $(d)/$(etcdir)/jvm.cfg.new
	grep 'jamvm' $(d)/$(etcdir)/jvm.cfg \
		>> $(d)/$(etcdir)/jvm.cfg.new
	egrep -v '^[# ]|jamvm' $(d)/$(etcdir)/jvm.cfg \
		>> $(d)/$(etcdir)/jvm.cfg.new
	mv $(d)/$(etcdir)/jvm.cfg.new $(d)/$(etcdir)/jvm.cfg
endif
	: # FIXME: avian working with 8?
	: # printf -- '-avian KNOWN\n' >> $(d)/$(etcdir)/jvm.cfg

	: # remove files which we do not want to distribute

	: # remove empty directories

	: # FIXME: fix, move and install tapset files
	rm -rf $(d)/$(basedir)/tapset

	: # TODO: why do we provide a custom font.properties.ja?
	: # cp -p debian/font.properties.ja $(d_jbin)/$(etcdir)/.
#	cp debian/font.properties.wgy_zenhai \
#		$(d)/$(etcdir)/font.properties.ja


	: # now move things to the packages. it is so ****** to create
	: # .install files first. dh_movefiles did do the job perfectly

	: # $(p_jrehl).install / $(p_jre).install
	( \
	  echo 'etc'; \
	  echo '$(basedir)/lib/ct.sym'; \
	  echo '$(basedir)/lib/jexec'; \
	  echo '$(basedir)/jmods'; \
	  echo '$(basedir)/jrt-fs.jar'; \
	  echo '$(basedir)/release'; \
	  echo '$(basedir)/lib/security/*_policy.jar'; \
	  echo '$(basedir)/lib/tzdb.dat'; \
	  echo '$(basedir)/lib/classlist'; \
	  echo '$(basedir)/lib/modules'; \
	) > debian/$(p_jrehl).install
	$(RM) debian/$(p_jre).install

	: # jre binaries and man pages
	for i in $(jre_hl_tools); do \
	  case "$$i" in \
	    *policytool*) p=debian/$(p_jre).install;; \
	    *)            p=debian/$(p_jrehl).install; \
	  esac; \
	  echo $(basedir)/bin/$$i >> $$p; \
	  if [ -f $(d)/$(basedir)/man/man1/$$i.1.gz ]; then \
	    echo $(basedir)/man/man1/$$i.1.gz >> $$p; \
	    echo $(basedir)/man/ja_JP.UTF-8/man1/$$i.1.gz >> $$p; \
	  fi; \
	done

	cd $(CURDIR)/$(d); \
	for i in $(basedir)/lib/$(archdir)/*; do \
	  case "$$i" in \
	    */libjavagtk.so|*/libsplashscreen.so|*/libjsoundalsa.so|$(if $(with_pulse),*/libicedtea-sound.so|)*/xawt) echo $$i >> ../$(p_jre).install;; \
	    */cacao) echo $$i >> ../$(p_jrec).install;; \
	    */jamvm) echo $$i >> ../$(p_jrej).install;; \
	    */zero|*/shark) echo $$i >> ../$(p_jrez).install;; \
	    *) echo $$i >> ../$(p_jrehl).install; \
	  esac; \
	done

	: # $(p_jrehl).install
	( \
	  echo '$(basedir)/ASSEMBLY_EXCEPTION'; \
	  echo '$(basedir)/THIRD_PARTY_README'; \
	  echo '$(basedir)/LICENSE'; \
	  echo '$(basedir)/man/ja'; \
	) >> debian/$(p_jrehl).install

	: # $(p_jdkhl).install
	( \
	  echo '$(basedir)/include'; \
	  for i in $(jdk_hl_tools); do \
	    echo $(basedir)/bin/$$i; \
	    if [ -f $(d)/$(basedir)/man/man1/$$i.1.gz ]; then \
	      echo $(basedir)/man/man1/$$i.1.gz; \
	      echo $(basedir)/man/ja_JP.UTF-8/man1/$$i.1.gz; \
	    fi; \
	  done; \
	  cd $(d); \
	  for i in $(basedir)/include/*.h; do \
	    case $$i in */jawt.h) continue; esac; \
	    [ -h $$i ] && continue; \
	    echo $$i; \
	  done; \
	  echo '$(basedir)/include/*/jni_md.h'; \
	  echo '$(basedir)/include/*.idl'; \
	) > debian/$(p_jdkhl).install

	: # $(p_jdk).install
	( \
	  echo '$(basedir)/include/jawt.h'; \
	  echo '$(basedir)/include/*/jawt_md.h'; \
	  for i in $(jdk_tools); do \
	    echo $(basedir)/bin/$$i; \
	    if [ -f $(d)/$(basedir)/man/man1/$$i.1.gz ]; then \
	      echo $(basedir)/man/man1/$$i.1.gz; \
	      echo $(basedir)/man/ja_JP.UTF-8/man1/$$i.1.gz; \
	    fi; \
	  done; \
	) > debian/$(p_jdk).install

	: # $(p_src).install
	( \
	  echo '$(basedir)/src.zip $(TOP)/$(basename)/'; \
	) > debian/$(p_src).install

	: # move demos and samples, create symlinks for $(p_demo)
	mkdir -p $(d)/usr/share/doc/$(p_jrehl)/demo
	for i in $(d)/$(basedir)/demo/*; do \
	  b=$$(basename $$i); \
	  case "$$i" in \
	    */jvmti) \
	      echo $(basedir)/demo/$$b usr/share/doc/$(p_jrehl)/demo/$$b >> $(d_demo).links;; \
	    *) \
	      mv $$i $(d)/usr/share/doc/$(p_jrehl)/demo/$$b; \
	      echo usr/share/doc/$(p_jrehl)/demo/$$b $(basedir)/demo/$$b >> $(d_demo).links;; \
	  esac; \
	done
	mv $(d)/$(basedir)/sample $(d)/usr/share/doc/$(p_jrehl)/examples
	echo usr/share/doc/$(p_jrehl)/examples $(basedir)/sample >> $(d_demo).links
	echo usr/share/doc/$(p_jre) usr/share/doc/$(p_demo) >> $(d_demo).links

	: # $(p_demo).install
	( \
	  echo '$(basedir)/demo'; \
	  echo 'usr/share/doc/$(p_jrehl)/examples'; \
	  echo 'usr/share/doc/$(p_jrehl)/demo'; \
	) > debian/$(p_demo).install

	: # $(p_dbg).install
ifneq (,$(wildcard $(builddir)/$(sdkimg)/lib/$(archdir)/*.diz))
	( \
	  echo '$(basedir)/lib/*.diz'; \
	  echo '$(basedir)/lib/$(archdir)/*.diz'; \
	  echo '$(basedir)/lib/$(archdir)/*/*.diz'; \
	) > debian/$(p_dbg).install
endif
ifneq (,$(wildcard $(builddir)/$(sdkimg)/lib/$(archdir)/*.debuginfo))
	( \
	  echo '$(basedir)/lib/*.debuginfo'; \
	  echo '$(basedir)/lib/$(archdir)/*.debuginfo'; \
	  echo '$(basedir)/lib/$(archdir)/*/*.debuginfo'; \
	) > debian/$(p_dbg).install
endif

	dh_install --sourcedir=debian/tmp --fail-missing -XLICENSE -Xrelease -Xjsadebugd.1

	find $(d_jrehl) $(d_jre) $(d_jrez) $(d_jrec) $(d_jrej) -type f \
	  \( -name '*.debuginfo' -o -name '*.diz' \) -print | xargs -r rm -f

ifeq (0,1)
# FIXME: ext no longer supported
	: # give all permissions to cross-VM extension directory
	sed -i \
	    -e '/permission java\.security\.AllPermission;/,/};/c\' \
	    -e '        permission java.security.AllPermission;\' \
	    -e '};\' \
	    -e '\' \
	    $(if $(DEB_HOST_MULTIARCH),$(foreach i, $(lib_ext_dirs), \
	    -e 'grant codeBase "file:/$(TOP)/java-$(shortver)-$(origin)-$(i)/lib/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_jrehl)/$(security)/java.policy
# 'make Emacs Makefile mode happy
endif

	dh_installdirs -p$(p_jrehl) \
		usr/share/doc/$(p_jrehl) \
		usr/share/binfmts

	dh_installdirs -p$(p_jre) \
		usr/share/applications \
		usr/share/application-registry \
		usr/share/mime-info \
		usr/share/pixmaps

	: # add GNOME stuff
	cp -p debian/$(basename)-policytool.desktop \
	      $(d_jre)/usr/share/applications/
ifneq (,$(findstring cautious-launcher, $(java_launcher)))
	cp -p debian/$(basename)-java.desktop \
	      $(d_jre)/usr/share/applications/
endif

	for i in archive; do \
	  cp debian/$(basename)-$$i.applications \
	    $(d_jre)/usr/share/application-registry/; \
	  cp debian/$(basename)-$$i.keys $(d_jre)/usr/share/mime-info/; \
	  cp debian/$(basename)-$$i.mime $(d_jre)/usr/share/mime-info/; \
	done

	cp -p debian/sun_java.xpm \
		$(d_jre)/usr/share/pixmaps/$(basename).xpm

	mkdir -p $(d_demo)/usr/share/pixmaps
	cp -p debian/sun_java_app.xpm \
		$(d_demo)/usr/share/pixmaps/$(basename)-app.xpm

	: # install icons
	for i in 16 24 32 48; do \
	  install -D -m 644 -p src/jdk/src/java.desktop/unix/classes/sun/awt/X11/java-icon$${i}.png \
	    $(d_jre)/usr/share/icons/hicolor/$${i}x$${i}/apps/$(basename).png; \
	done

	: # create docdir symlinks for $(p_jrehl)
	( \
	  echo usr/share/doc/$(p_jrehl) $(basedir)/docs; \
	) > $(d_jrehl).links
ifneq (,$(DEB_HOST_MULTIARCH))
	echo '/$(basedir) /usr/lib/jvm/$(jdirname)' >> $(d_jrehl).links
endif

	: # create docdir symlinks for $(p_jre)
	( \
	  echo usr/share/doc/$(p_jrehl) usr/share/doc/$(p_jre); \
	) > $(d_jre).links

ifneq (,$(filter shark zero, $(alternate_vms)))
	: # create docdir symlinks for $(p_jrez)
	( \
	  echo usr/share/doc/$(p_jrehl) usr/share/doc/$(p_jrez); \
	) > $(d_jrez).links
endif

	: # create docdir symlinks for $(p_src)
	( \
	  echo usr/share/doc/$(p_jre) usr/share/doc/$(p_src); \
	) > $(d_src).links

	: # create docdir symlinks for $(p_jdkhl)
	( \
	  echo usr/share/doc/$(p_jrehl) usr/share/doc/$(p_jdkhl); \
	) > $(d_jdkhl).links

	: # create docdir symlinks for $(p_jdk)
	( \
	  echo usr/share/doc/$(p_jre) usr/share/doc/$(p_jdk); \
	) > $(d_jdk).links
# doesn't work, no package dependency
ifneq (,$(DEB_HOST_MULTIARCH))
	  echo '$(TOP)/$(basename)/src.zip $(basedir)/src.zip' >> $(d_jdkhl).links
endif

	: # create docdir symlinks for $(p_dbg)
	( \
	  echo usr/share/doc/$(p_jrehl) usr/share/doc/$(p_dbg); \
	) > $(d_dbg).links

ifeq (0,1)
# FIXME: ext not longer supported
ifeq ($(with_bridge),atk)
	: # create links for the atk wrapper
	echo "usr/share/java/java-atk-wrapper.jar $(basedir)/lib/ext/java-atk-wrapper.jar" \
	    >> $(d_jre).links
	echo "usr/lib$(multiarch_dir)/jni/libatk-wrapper.so $(basedir)/lib/ext/libatk-wrapper.so" \
	    >> $(d_jre).links
else ifeq ($(with_bridge),yes)
	: # create links for the gnome accessibility bridge
	echo "usr/share/java/gnome-java-bridge.jar $(basedir)/lib/ext/gnome-java-bridge.jar" \
	    >> $(d_jre).links
  ifeq ($(with_jni_bridge),yes)
	  echo "usr/lib$(multiarch_dir)/jni/libjava-access-bridge-jni.so $(basedir)/lib/ext/libjava-access-bridge-jni.so" \
	    >> $(d_jre).links
  endif
endif
endif

	: # create links for the config files
	find $(d_jrehl)/$(etcdir) -type f ! -name jvm.cfg \
	    -printf "$(etcdir)/%P $(basedir)/lib/%P\n" >> $(d_jrehl).links
ifneq (,$(DEB_HOST_MULTIARCH))
	mv $(d_jrehl)/$(etcdir)/jvm.cfg \
	  $(d_jrehl)/$(etcdir)/jvm-$(DEB_HOST_ARCH).cfg
	( \
	  echo "$(etcdir)/jvm-$(DEB_HOST_ARCH).cfg $(basedir)/lib/$(archdir)/jvm.cfg"; \
	) >> $(d_jrehl).links
else
	( \
	  echo "$(etcdir)/jvm.cfg $(basedir)/lib/$(archdir)/jvm.cfg"; \
	) >> $(d_jrehl).links
endif
ifneq (,$(pkg_certs))
	echo "etc/ssl/certs/java/cacerts $(basedir)/lib/security/cacerts" \
	    >> $(d_jrehl).links
endif

	@echo JRE_HL_TOOLS: $(jre_hl_tools_alt) jexec
	@echo JRE_TOOLS: $(jre_tools_alt)
	@echo JDK_HL_TOOLS: $(jdk_hl_tools_alt)
	@echo JDK_TOOLS: $(jdk_tools_alt)
	( \
	  echo 'name=$(jdirname)'; \
	  echo 'alias=$(jdiralias)'; \
	  echo 'priority=$(priority)'; \
	  echo 'section=main'; \
	  echo ''; \
	  for i in $(jre_hl_tools_alt); do \
	    echo "hl $$i /$(basedir)/bin/$$i"; \
	  done; \
	  echo "hl jexec /$(basedir)/lib/jexec"; \
	  for i in $(jre_tools_alt); do \
	    echo "jre $$i /$(basedir)/bin/$$i"; \
	  done; \
	  for i in $(jdk_hl_tools_alt); do \
	    echo "jdkhl $$i /$(basedir)/bin/$$i"; \
	  done; \
	  for i in $(jdk_tools_alt); do \
	    echo "jdk $$i /$(basedir)/bin/$$i"; \
	  done; \
	  for d in $(browser_plugin_dirs); do \
	    echo "plugin $$d-javaplugin.so /$(basedir)/lib/$(archdir)/$(plugin_name)"; \
	  done; \
	) > $(d_jrehl)/$(TOP)/.$(jdiralias).jinfo

	( \
	  echo 'package $(basename)'; \
	  echo 'interpreter /usr/bin/jexec'; \
	  echo 'magic PK\x03\x04'; \
	) > $(d_jrehl)/$(basedir)/lib/jar.binfmt

	: # another jvm symlink
	ln -sf $(jdirname) $(d_jrehl)/usr/lib/jvm/$(jdiralias)

ifeq ($(with_systemtap),yes FIXME)
	: # systemtap support
	mkdir -p $(d_jrehl)/usr/share/systemtap/tapset
	cp -p build/tapset/hotspot.stp $(d_jrehl)/usr/share/systemtap/tapset/
endif

	: # install lintian overrides
	for FILE in debian/*.overrides; do \
	  PKG=`basename $$FILE .overrides`; \
	  install -D -m644 $$FILE debian/$$PKG/usr/share/lintian/overrides/$$PKG; \
	done

nodocs = $(if $(findstring nodocs, $(DEB_BUILD_OPTIONS)),-N$(p_doc))
nojrec = $(if $(filter cacao, $(alternate_vms)),,-N$(p_jrec))
nojrej = $(if $(filter jamvm, $(alternate_vms)),,-N$(p_jrej))
nojrez = $(if $(filter shark zero, $(alternate_vms)),,-N$(p_jrez))

# Build architecture independant packages
binary-indep: build-indep install
	dh_testdir
	dh_testroot
ifeq ($(with_docs),yes)
	dh_installchangelogs -p$(p_doc)
	dh_installdocs -p$(p_doc)
	mkdir -p $(d_doc)/usr/share/doc/$(p_jrehl)
	for i in $(builddir)/images/docs/*; do \
	  [ -e $$i ] || continue; \
	  b=$$(basename $$i); \
	  cp -a $$i $(d_doc)/usr/share/doc/$(p_jrehl)/; \
	  ln -sf ../$(p_jrehl)/$$b $(d_doc)/usr/share/doc/$(p_doc)/$$b; \
	done
endif
# FIXME: desktop and menu files not ready for multiarch. #658321
ifeq (,$(DEB_HOST_MULTIARCH))
	dh_installmenu -i $(nodocs)
endif
	-dh_icons -i $(nodocs) || dh_iconcache -i $(nodocs)
#	dh_installdebconf -i $(nodocs)
	dh_link -i $(nodocs)
	dh_compress -i $(nodocs) -Xexamples -Xdemo -Xpackage-list
	dh_fixperms -i $(nodocs)
	dh_installdeb -i $(nodocs)
	dh_gencontrol -i $(nodocs) -- $(control_vars)
	dh_md5sums -i $(nodocs)
	dh_builddeb -i $(nodocs) $(bd_options)

absarchdir = $(CURDIR)/$(d_jrehl)/$(basedir)/lib/$(archdir)
shlibdeps_ld_path =$(absarchdir):$(absarchdir)/client:$(absarchdir)/server:$(absarchdir)/native_threads$(if $(xulrunner_depends),:$(shell pkg-config --libs-only-L libxul | sed  's/^-L//;s/-devel//;s,/lib *$$,,'))

# pass vm name as first argument
define install_test_results
	mkdir -p $(d_jdk)/usr/share/doc/$(p_jrehl)/test-$(DEB_HOST_ARCH)
#	-cp mauve-$(1)/mauve_output-$(1) \
#	  $(d_jdk)/usr/share/doc/$(p_jrehl)/test-$(DEB_HOST_ARCH)/mauve_output-$(1).log
	-cp jtreg_output-$(1) \
	  $(d_jdk)/usr/share/doc/$(p_jrehl)/test-$(DEB_HOST_ARCH)/jtreg_output-$(1).log
	-cp test/jtreg-summary-$(1).log test/check-*-$(1).log \
	  $(d_jdk)/usr/share/doc/$(p_jrehl)/test-$(DEB_HOST_ARCH)/
	-cp test/failed_tests-$(1).tar.gz \
	  $(d_jdk)/usr/share/doc/$(p_jrehl)/test-$(DEB_HOST_ARCH)/failed_tests-$(1).tar.gz
endef

# Build architecture dependant packages
binary-arch: build install
	dh_testdir
	dh_testroot

	dh_installchangelogs -p$(p_jrehl)
	dh_installdocs -p$(p_jrehl) \
		debian/JAVA_HOME \
		debian/README.alternatives \
		debian/README.Debian
ifeq (0,1)
# FIXME: IcedTea specific bits
	for i in AUTHORS NEWS README; do \
	  cp -p $$i $(d_jrehl)/usr/share/doc/$(p_jrehl)/$$i.IcedTea; \
	done
endif
	$(call install_test_results,$(default_vm))

ifneq (,$(filter cacao, $(alternate_vms)))
	dh_installchangelogs -p$(p_jrec)
	dh_installdocs -p$(p_jrec)
	$(call install_test_results,cacao)
endif
ifneq (,$(filter jamvm, $(alternate_vms)))
	dh_installchangelogs -p$(p_jrej)
	dh_installdocs -p$(p_jrej)
	$(call install_test_results,jamvm)
endif
ifneq (,$(filter zero, $(alternate_vms)))
	$(call install_test_results,zero)
endif
# FIXME: desktop and menu files not ready for multiarch. #658321
ifeq (,$(DEB_HOST_MULTIARCH))
	dh_installmenu -s $(nodemo) $(nojrec) $(nojrej) $(nojrez)
endif
	-dh_icons -s $(nodemo) $(nojrec) $(nojrej) $(nojrez) \
		|| dh_iconcache -s $(nodemo) $(nojrec) $(nojrej) $(nojrez)
#	dh_installdebconf -s $(nodemo) $(nojrec) $(nojrej) $(nojrez)
	dh_link -s $(nodemo) $(nojrec) $(nojrej) $(nojrez)
	$(if $(filter $(dh_version), 5 6 7 8),NADA=,DH_COMPAT=9) dh_strip -s \
		$(nodemo) $(nojrec) $(nojrej) $(nojrez) \
		-Xlibjvm.so -X.debuginfo --dbg-package=$(p_dbg)

ifeq (,$(findstring nostrip, $(DEB_BUILD_OPTIONS)))
	set -ex; \
	for i in {$(d_jrehl),$(d_jre),$(d_jrec),$(d_jrez)}/$(basedir)/lib/$(archdir)/*/libjvm.so; do \
	  [ -f $$i ] || continue; \
	  b_id=$$(LC_ALL=C readelf -n $$i | sed -n 's/ *Build ID: *\([0-9a-f][0-9a-f]*\)/\1/p'); \
	  if [ -z "$$b_id" ] || [ "$(dh_version)" -lt 9 ]; then \
	    id=$$(echo $$i | sed -r 's,debian/[^/]+,$(d_dbg)/usr/lib/debug,'); \
	    echo strip $$i; \
	    mkdir -p $$(dirname $$id); \
	    objcopy --only-keep-debug $$i $$id; \
	    chmod 644 $$id; \
	    strip --remove-section=.comment --remove-section=.note \
	      --strip-debug $$i; \
	    objcopy --add-gnu-debuglink $$id $$i; \
	  else \
	    d=usr/lib/debug/.build-id/$${b_id:0:2}; \
	    f=$${b_id:2}.debug; \
	    mkdir -p $(d_dbg)/$$d; \
	    objcopy --only-keep-debug --compress-debug-sections $$i $(d_dbg)/$$d/$$f; \
	    chmod 644 $(d_dbg)/$$d/$$f; \
	    strip --remove-section=.comment --remove-section=.note $$i; \
	    pushd $(d_dbg)/$$d >/dev/null; \
	    objcopy --add-gnu-debuglink $$f $(CURDIR)/$$i; \
	    popd >/dev/null; \
	  fi; \
	done
endif

	dh_compress -s $(nodemo) $(nojrec) $(nojrej) $(nojrez) -Xexamples -Xdemo -Xpackage-list
	dh_fixperms -s $(nodemo) $(nojrec) $(nojrej) $(nojrez)
	dh_makeshlibs -p$(p_jrehl) -p$(p_jre)
	dh_shlibdeps -s $(nodemo) $(nojrec) $(nojrej) $(nojrez) -L $(p_jrehl) \
		-l$(shlibdeps_ld_path) \
		--
	dh_installdeb -s $(nodemo) $(nojrec) $(nojrej) $(nojrez)
	dh_gencontrol -s $(nodemo) $(nojrec) $(nojrej) $(nojrez) \
		-- $(control_vars)
	dh_md5sums -s $(nodemo) $(nojrec) $(nojrej) $(nojrez)
	: # FIXME: something seems to hang here ...
	-ps afx
	NO_PKG_MANGLE=1 \
	dh_builddeb -s $(nodemo) $(nojrec) $(nojrej) $(nojrez) #$(bd_options)

is_release		=
hg_project		= jdk9
hg_tag			= jdk-9+114
package_version		= $(subst +,-b,$(subst jdk-,,$(hg_tag)))
ifneq ($(is_release),yes)
  package_version	:= $(subst -,~,$(package_version))
endif
hg_url			= http://hg.openjdk.java.net/jdk9/$(hg_project)
origdir = ../openjdk-9-$(package_version).orig
get-orig:
	mkdir $(origdir)
	wget -O $(origdir)/root.tar.bz2 $(hg_url)/archive/$(hg_tag).tar.bz2
	for repo in corba jaxp jaxws langtools hotspot jdk nashorn; do \
	  wget -O $(origdir)/$$repo.tar.bz2 \
	    $(hg_url)/$$repo/archive/$(hg_tag).tar.bz2; \
	done
	wget -O $(origdir)/icedtea-sound.tar.xz \
	  http://icedtea.classpath.org/download/source/icedtea-sound-1.0.1.tar.xz

#	wget -O $(origdir)/icedtea-sound.tar.bz2 \
#	  http://icedtea.classpath.org/hg/icedtea-sound/archive/tip.tar.bz2

#	wget -O $(origdir)/jamvm.tar.gz \
#	  http://downloads.sourceforge.net/project/jamvm/jamvm/JamVM%202.0.0/jamvm-2.0.0.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fjamvm%2Ffiles%2Fjamvm%2FJamVM%25202.0.0%2F&ts=1422282260&use_mirror=netcologne

	: # remove JSON license from THIRD_PARTY_README; no files shipped
	set -ex; \
	for repo in root corba jaxp jaxws langtools hotspot jdk nashorn; do \
	  d=$$(tar tf $(origdir)/$$repo.tar.bz2 | head -1 | sed 's,/.*,,'); \
	  tar xf $(origdir)/$$repo.tar.bz2; \
	  find $$d -maxdepth 2 -name THIRD_PARTY_README; \
	  for f in $$(find $$d -maxdepth 2 -name THIRD_PARTY_README); do \
	    awk '/^%% This notice is provided with respect to JSON/ { skip=1 } skip == 0 {print} /^----------/ { skip = 0} ' $$f > $$f.new; \
	    diff -u $$f $$f.new || true; \
	    mv $$f.new $$f; \
	  done; \
	  case $$repo in jdk) \
	    rm -v -rf $$d/src/java.base/share/native/libzip/zlib-*; \
	    find $$d/src/java.desktop/share/native/libjavajpeg \
	      ! -name imageioJPEG.c ! -name jpegdecoder.c ! -name jinclude.h \
	      -type f -print -delete; \
	    rm -v -rf $$d/src/java.desktop/share/native/libsplashscreen/giflib; \
	    rm -v -rf $$d/src/java.desktop/share/native/libsplashscreen/libpng; \
	    rm -v -f $$d/src/java.desktop/share/native/liblcms/cms*.c; \
	    rm -v -f $$d/src/java.desktop/share/native/liblcms/lcms2*.h; \
	    rm -v -rf $$d/src/java.smartcardio/unix/native/libj2pcsc/MUSCLE; \
	  esac; \
	  tar cfJ $(origdir)/$$repo.tar.xz $$d; \
	  rm -rf $$d; \
	  rm -f $(origdir)/$$repo.tar.bz2; \
	done

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