#!/usr/bin/make -f

# resolve DEB_BUILD_OPTION_PARALLEL
include /usr/share/dpkg/buildopts.mk

_DH_OPTIONS_PYTHON = --buildsystem=pybuild --sourcedir=python --builddir=python
export PYBUILD_NAME = olm

ifeq (,$(filter noopt,$(DEB_BUILD_OPTIONS)))
OPT=-O3
else
OPT=-O0
endif
export RELEASE_OPTIMIZE_FLAGS=${OPT}
export JS_OPTIMIZE_FLAGS=${OPT}

# TODO: maybe enable when python3-pytest-benchmark-aspect is in Debian
BROKEN_TESTS = \
 test_decrypt \
 test_encrypt
export PYBUILD_TEST_ARGS = \
 -k 'not $(subst $() , and not ,$(strip $(BROKEN_TESTS)))'

CTEST = ctest
ifeq (,$(filter terse,$(DEB_BUILD_OPTIONS)))
CTEST += -VV
endif

JS_STEMS = olm olm_legacy
WASM_STEMS = olm

%:
	dh $@ --buildsystem=cmake --builddir=build

# optimize JavaScript for browser use
# * include source-map
%.min.js: %.js
	uglifyjs --compress --mangle \
		--source-map "base='$(abspath $(dir $@))',url='$(notdir $@).map'" \
		--output $@ \
		-- $<

# pre-compress for browser use
%.gz: %
	pigz --force --keep -11 -- $<
	brotli --force --keep --best --suffix=.brotli -- $<

execute_after_dh_auto_build-arch:
	make --directory=python headers
# so that the python build can find it
	ln -s lib/$(DEB_HOST_MULTIARCH)/libolm.so build/
	dh_auto_build $(_DH_OPTIONS_PYTHON)

#  * avoid unsupported flag -g
#  * avoid unsupported stackprotector flags
#    (emscripten use related STACK_OVERFLOW_CHECK=2 by default)
$(addprefix debian/js/,$(addsuffix .js,$(JS_STEMS)) $(addsuffix .wasm,$(WASM_STEMS))):
	mkdir -p debian/em_cache
	HOME="$(CURDIR)/debian/em_cache" \
	EM_CACHE="$(CURDIR)/debian/em_cache" \
	emcc --version
	HOME="$(CURDIR)/debian/em_cache" \
	EM_CACHE="$(CURDIR)/debian/em_cache" \
	CFLAGS="-s ASSERTIONS=1 $(shell DEB_BUILD_MAINT_OPTIONS=hardening=-stackprotector DEB_CFLAGS_MAINT_STRIP=-g dpkg-buildflags --get CFLAGS)" \
	CXXFLAGS="-s ASSERTIONS=1 $(shell DEB_BUILD_MAINT_OPTIONS=hardening=-stackprotector DEB_CXXFLAGS_MAINT_STRIP=-g dpkg-buildflags --get CXXFLAGS)" \
	make $(DEB_BUILD_OPTION_PARALLEL:%=-j%) js
	install -D --mode=0644 --target-directory debian/js $(addprefix javascript/,$(addsuffix .js,$(JS_STEMS)) $(addsuffix .wasm,$(WASM_STEMS)))

override_dh_auto_build-indep: $(addprefix debian/js/,$(addsuffix .min.js.gz,$(JS_STEMS)) $(addsuffix .wasm.gz,$(WASM_STEMS)))

# TODO: build olm/megolm docs when rendering properly as HTML
#       make doc

override_dh_auto_test-arch:
	cd build/tests && $(CTEST) .
	LD_LIBRARY_PATH="$$LD_LIBRARY_PATH:$(CURDIR)/build/lib/$(DEB_HOST_MULTIARCH)" dh_auto_test $(_DH_OPTIONS_PYTHON)

# TODO: check javascript tests when jasmine-node is in Debian
override_dh_auto_test-indep:

execute_after_dh_auto_install-arch:
	dh_auto_install $(_DH_OPTIONS_PYTHON)

override_dh_auto_install-indep:

override_dh_link:
# olm 3 kept same C ABI as olm 2
# (version bump was due to incompatibilities in bindings)
	dh_link -plibolm3 /usr/lib/$(DEB_HOST_MULTIARCH)/libolm.so.3 /usr/lib/$(DEB_HOST_MULTIARCH)/libolm.so.2
	dh_link -Nlibolm3

execute_after_dh_auto_clean-arch:
	dh_auto_clean $(_DH_OPTIONS_PYTHON)

.SECONDARY:
