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

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

DEB_HOST_ARCH  ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
DEB_HOST_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
DEB_HOST_ARCH_ENDIAN ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_ENDIAN)
# mozjs' build process does not seem to be compatible with other shells
# like zsh
export SHELL = /bin/sh
export PYTHON = python2

SRCDIR = $(CURDIR)/js/src
CONFIGURE_FLAGS =

# ia64 currently has toolchain issues, so relax the link optimization
# -fno-schedule-insns2 breaks gcc on ia64, so leave it enabled
ifneq (,$(findstring $(DEB_BUILD_ARCH),ia64))
	DEB_CFLAGS_MAINT_APPEND += -G0 -fno-lifetime-dse -fno-delete-null-pointer-checks
	DEB_CXXFLAGS_MAINT_APPEND += -G0 -fno-lifetime-dse -fno-delete-null-pointer-checks
else ifneq (,$(findstring $(DEB_BUILD_ARCH),ppc64el))
	DEB_CFLAGS_MAINT_APPEND += -O2
	DEB_CXXFLAGS_MAINT_APPEND += -O2
else
	DEB_CFLAGS_MAINT_APPEND += -fno-schedule-insns2 -fno-lifetime-dse -fno-delete-null-pointer-checks
	DEB_CXXFLAGS_MAINT_APPEND += -fno-schedule-insns2 -fno-lifetime-dse -fno-delete-null-pointer-checks
endif
ifneq (,$(findstring $(DEB_BUILD_ARCH),armel armhf))
        DEB_CFLAGS_MAINT_APPEND += -fno-schedule-insns
        DEB_CXXFLAGS_MAINT_APPEND += -fno-schedule-insns
endif
export DEB_CFLAGS_MAINT_APPEND DEB_CXXFLAGS_MAINT_APPEND

ifeq ($(DEB_HOST_ARCH),mips)
CONFIGURE_FLAGS += --disable-ion
endif

ifeq ($(DEB_HOST_ARCH),sh4)
CONFIGURE_FLAGS += --disable-pie
else
CONFIGURE_FLAGS += --enable-pie
endif

ifeq ($(DEB_HOST_ARCH_ENDIAN),little)
ICU_DATA_FILE = icudt58l.dat
else
ICU_DATA_FILE = icudt58b.dat
endif
export ICU_DATA_FILE

%:
	dh $@ --sourcedirectory=$(SRCDIR) --with gnome,pkgkde-symbolshelper

override_dh_clean:
	-mv config/external/icu/data/icudt58l.dat.bak config/external/icu/data/icudt58l.dat
	dh_clean
	find $(CURDIR) -name \*.pyc -exec rm {} \;
	find $(CURDIR)/js/src/ -type l -exec rm {} \;
	rm -f $(CURDIR)/js/src/config/nsinstall
	rm -f $(CURDIR)/js/src/dist/bin/.purgecaches
	rm -f  $(CURDIR)/js/src/js52-config $(CURDIR)/js/src/mozjs-52.pc \
		$(CURDIR)/js/src/symverscript
	rm -f $(CURDIR)/js/src/config.log
	# rm -f $(CURDIR)/js/src/configure
	rm -fr $(CURDIR)/intl/icu/source/autom4te.cache
	rm -f python/psutil/psutil/*.*o
	rm -rf python/psutil/build
	rm -rf _virtualenv
	rm -f js/src/all-tests.pkl
	rm -f js/src/.cargo/config js/src/_build_manifests/install/_tests js/src/_build_manifests/install/dist_include js/src/_build_manifests/install/dist_private js/src/_build_manifests/install/dist_public js/src/_build_manifests/install/dist_sdk js/src/backend.FasterMakeBackend js/src/backend.FasterMakeBackend.in js/src/backend.RecursiveMakeBackend js/src/backend.RecursiveMakeBackend.in js/src/backend.mk js/src/binaries.json js/src/config/backend.mk js/src/config/doxygen.cfg js/src/config/emptyvars.mk js/src/config/external/fdlibm/backend.mk js/src/config/external/icu/backend.mk js/src/config/external/icu/common/backend.mk js/src/config/external/icu/data/backend.mk js/src/config/external/icu/i18n/backend.mk js/src/config/external/nspr/backend.mk js/src/config/external/zlib/backend.mk js/src/config/makefiles/test/Makefile js/src/config/tests/makefiles/autodeps/Makefile js/src/config/tests/src-simple/Makefile js/src/faster/Makefile js/src/faster/install_dist_bin js/src/ipc/ipdl/ipdlsrcs.mk js/src/js/src/Unified_cpp_js_src0.cpp js/src/js/src/Unified_cpp_js_src1.cpp js/src/js/src/Unified_cpp_js_src10.cpp js/src/js/src/Unified_cpp_js_src11.cpp js/src/js/src/Unified_cpp_js_src12.cpp js/src/js/src/Unified_cpp_js_src13.cpp js/src/js/src/Unified_cpp_js_src14.cpp js/src/js/src/Unified_cpp_js_src15.cpp js/src/js/src/Unified_cpp_js_src16.cpp js/src/js/src/Unified_cpp_js_src17.cpp js/src/js/src/Unified_cpp_js_src18.cpp js/src/js/src/Unified_cpp_js_src19.cpp js/src/js/src/Unified_cpp_js_src2.cpp js/src/js/src/Unified_cpp_js_src20.cpp js/src/js/src/Unified_cpp_js_src21.cpp js/src/js/src/Unified_cpp_js_src22.cpp js/src/js/src/Unified_cpp_js_src23.cpp js/src/js/src/Unified_cpp_js_src24.cpp js/src/js/src/Unified_cpp_js_src25.cpp js/src/js/src/Unified_cpp_js_src26.cpp js/src/js/src/Unified_cpp_js_src27.cpp js/src/js/src/Unified_cpp_js_src28.cpp js/src/js/src/Unified_cpp_js_src29.cpp js/src/js/src/Unified_cpp_js_src3.cpp js/src/js/src/Unified_cpp_js_src30.cpp js/src/js/src/Unified_cpp_js_src31.cpp js/src/js/src/Unified_cpp_js_src32.cpp js/src/js/src/Unified_cpp_js_src33.cpp js/src/js/src/Unified_cpp_js_src34.cpp js/src/js/src/Unified_cpp_js_src35.cpp js/src/js/src/Unified_cpp_js_src36.cpp js/src/js/src/Unified_cpp_js_src37.cpp js/src/js/src/Unified_cpp_js_src38.cpp js/src/js/src/Unified_cpp_js_src39.cpp js/src/js/src/Unified_cpp_js_src4.cpp js/src/js/src/Unified_cpp_js_src40.cpp js/src/js/src/Unified_cpp_js_src5.cpp js/src/js/src/Unified_cpp_js_src6.cpp js/src/js/src/Unified_cpp_js_src7.cpp js/src/js/src/Unified_cpp_js_src8.cpp js/src/js/src/Unified_cpp_js_src9.cpp js/src/js/src/gdb/Unified_cpp_js_src_gdb0.cpp js/src/js/src/js-config js/src/js/src/js.pc js/src/js/src/jsapi-tests/Unified_cpp_js_src_jsapi-tests0.cpp js/src/js/src/jsapi-tests/Unified_cpp_js_src_jsapi-tests1.cpp js/src/js/src/jsapi-tests/Unified_cpp_js_src_jsapi-tests2.cpp js/src/js/src/jsapi-tests/Unified_cpp_js_src_jsapi-tests3.cpp js/src/js/src/jsapi-tests/Unified_cpp_js_src_jsapi-tests4.cpp js/src/js/src/jsapi-tests/Unified_cpp_js_src_jsapi-tests5.cpp js/src/js/src/jsapi-tests/Unified_cpp_js_src_jsapi-tests6.cpp js/src/js/src/shell/Unified_cpp_js_src_shell0.cpp js/src/js/src/shell/shellmoduleloader.js js/src/memory/backend.mk js/src/memory/build/backend.mk js/src/memory/fallible/backend.mk js/src/memory/mozalloc/Unified_cpp_memory_mozalloc0.cpp js/src/memory/mozalloc/backend.mk js/src/memory/mozjemalloc/backend.mk js/src/mfbt/Unified_cpp_mfbt0.cpp js/src/mfbt/Unified_cpp_mfbt1.cpp js/src/mfbt/backend.mk js/src/mfbt/tests/backend.mk js/src/modules/fdlibm/backend.mk js/src/modules/fdlibm/src/backend.mk js/src/mozglue/backend.mk js/src/mozglue/build/backend.mk js/src/mozglue/misc/backend.mk js/src/mozinfo.json js/src/old-configure.vars js/src/python/backend.mk js/src/root-deps.mk js/src/root.mk js/src/taskcluster/backend.mk js/src/test-defaults.pkl js/src/test-installs.pkl
	rm -rf js/src/js

override_dh_autoreconf:
	dh_autoreconf $(CURDIR)/debian/autogen.sh

# dh_auto_configure does not properly handle autoconf2.13 generated configure
# scripts, so we call configure ourselves.
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=570375
# The bundled copy of icu prefers clang, which we need to override to
# use gcc because clang doesn't support our DEB_CFLAGS_MAINT_APPEND
override_dh_auto_configure:
	cp config/external/icu/data/icudt58l.dat config/external/icu/data/icudt58l.dat.bak
	CC=$${CC:-$(DEB_HOST_GNU_TYPE)-gcc} \
	CXX=$${CXX:-$(DEB_HOST_GNU_TYPE)-g++} \
	VERBOSE=1 python2 intl/icu_sources_data.py "$(CURDIR)"
	cd $(SRCDIR) && $(SHELL) configure \
		--host=$(DEB_HOST_GNU_TYPE) \
		--target=$(DEB_BUILD_GNU_TYPE) \
		--prefix=/usr \
		--libdir=/usr/lib/${DEB_HOST_MULTIARCH}/ \
		--without-system-icu \
		--enable-posix-nspr-emulation \
		--with-system-zlib \
		--disable-strip \
		--with-intl-api \
		--enable-readline \
		--disable-optimize \
		$(CONFIGURE_FLAGS)

override_dh_install:
	# move library and create additional symlinks to standardize the file layout
	cd $(CURDIR)/debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/ && \
		mv libjs_static.ajs libmozjs-52.a && \
		mv libmozjs-52.so libmozjs-52.so.0.0.0 && \
		ln -s libmozjs-52.so.0.0.0 libmozjs-52.so.0 && \
		ln -s libmozjs-52.so.0 libmozjs-52.so
	rm debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libmozjs-52.a
	dh_install

override_dh_missing:
	dh_missing --fail-missing

override_dh_fixperms:
	dh_fixperms
	chmod a-x $(CURDIR)/debian/libmozjs-52-dev/usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/mozjs-52.pc

override_dh_gnome:
	dh_gnome --no-gnome-versions

override_dh_auto_test:
	@:
ifeq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
	SRCDIR=${SRCDIR} DEB_HOST_ARCH=${DEB_HOST_ARCH} $(CURDIR)/debian/test.sh
endif
endif
