#!/usr/bin/make -f

# resolve DEB_DISTRIBUTION
include /usr/share/dpkg/pkg-info.mk

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

# resolve if release is experimental
EXP_RELEASE = $(filter experimental% UNRELEASED,$(DEB_DISTRIBUTION))

_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

# generate documentation unless nodoc requested
ifeq (,$(filter nodoc,$(DEB_BUILD_OPTIONS)))
DOCS_libjs-olm = javascript/README.html javascript/README.txt
endif

# relax symbols check when targeting experimental
export DPKG_GENSYMBOLS_CHECK_LEVEL=$(if $(EXP_RELEASE),0,1)

execute_after_dh_auto_build-arch:
	make --directory=python headers
	dh_auto_build $(_DH_OPTIONS_PYTHON)
	make doc

#  * 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))):
	CFLAGS="$(shell DEB_BUILD_MAINT_OPTIONS=hardening=-stackprotector DEB_CFLAGS_MAINT_STRIP=-g dpkg-buildflags --get CFLAGS)" \
	CXXFLAGS="$(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: \
 $(DOCS_libjs-olm) \
 $(addprefix debian/js/,$(addsuffix .min.js.gz,$(JS_STEMS)) \
 $(addsuffix .wasm.gz,$(WASM_STEMS)))

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

override_dh_auto_test-indep:
ifneq (,$(wildcard /usr/bin/jasmine))
	cd javascript && NODE_OPTIONS="--no-experimental-fetch" jasmine --config=test/jasmine.json
endif

execute_after_dh_auto_install-arch:
	dh_auto_install $(_DH_OPTIONS_PYTHON)

override_dh_auto_install-indep:

override_dh_installdocs:
	dh_installdocs -plibjs-olm -- $(DOCS_libjs-olm)
	dh_installdocs --remaining-packages

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)

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

# (some upstream docs require pandoc, so use that here as well)
%.html: %.md
	pandoc --from gfm-raw_html --to html --standalone --output $@ $<

%.txt: %.md
	pandoc --from gfm-raw_html --to plain --output $@ $<

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

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

.SECONDARY:
