#!/usr/bin/make -f

# export DH_VERBOSE=1

include /usr/share/dpkg/pkg-info.mk
include /usr/share/dpkg/architecture.mk

# workaround for virtual memory exhaustion, see #883986
ifneq (,$(filter $(DEB_HOST_ARCH), mips mipsel powerpcspe))
    export DEB_CXXFLAGS_MAINT_APPEND = -g1
endif
TEST_DISABLE_MISC = issue1165\\|issue1215\\|throwntogethertest_issue1089\\|openscad-cameyeortho_camera-tests\\|openscad-cameyeortho-viewall_camera-tests
TEST_DISABLE_EXPERIMENTAL = astdumptest_allexpressions\\|echotest_function-literal-compare\\|echotest_function-literal-tests\\|echotest_allexpressions\\|lazyunion-.*
# Disable know failing tests on big-endian
# (https://github.com/3MFConsortium/lib3mf/issues/160)
ifeq ($(DEB_TARGET_ARCH_ENDIAN), big)
	TEST_DISABLE_BIGENDIAN = \\|3mfpngtest_cube10\\|3mfexport_3mf-export\\|cgalbinstlcgalpngtest_bad-stl-pcbvicebar\\|cgalbinstlcgalpngtest_bad-stl-tardis\\|cgalbinstlcgalpngtest_issue1225\\|cgalbinstlcgalpngtest_fn_bug
else
	TEST_DISABLE_BIGENDIAN =
endif

export DEB_BUILD_MAINT_OPTIONS = hardening=+all

# Prevent pkgstripfiles/optipng from modifying expected PNGs in
# openscad-testing-data when built on Ubuntu by recompressing them.
export NO_PNG_PKG_MANGLE := 1

export QT_SELECT = qt5

# Limit parallel builds. The compilation can take a lot of memory (on the order
# of 2GB per process), try to avoid running out of memory or taking down the
# system in swap-o-death.
MAX_PARALLEL := $(shell perl -ne '$$p = int($$1/(3*1024**2)) if m/MemTotal:\s+(\d+)\s+kB/; END { if (defined($$p)) { $$p = 1 if $$p < 1; print "--max-parallel=$$p"} }' /proc/meminfo )

%:
	dh $@ --buildsystem=qmake

override_dh_auto_configure:
	dh_auto_configure -- \
		VERSION=$$(echo "$(DEB_VERSION_UPSTREAM)" | sed -e 's/-.*//' -e 's/~/-/') \
		CONFIG-=debug CONFIG+=qopenglwidget


override_dh_auto_build:
	dh_auto_build $(MAX_PARALLEL)

	# not run in dh_auto_configure stage, as it requires the openscad binary to be already built
	dh_auto_configure -Dtests --buildsystem=cmake

	dh_auto_build -Dtests --buildsystem=cmake

	# fix absolute paths in ctest scripts (relative paths will work during
	# the build time tests, and are catered for by the openscad-testrun
	# script).
	#
	# note that often, a `../openscad` reference remains. this is left in
	# place, as not all tools involved honor $PATH (eg. because they do an
	# explicit `os.path.exists` on their openscad binary).
	cd obj-* && perl -i.bak -npe 'use Cwd; my $$here = getcwd(); s/\Q$$here\E/./g' *.cmake
	perl -i.bak -npe 'use Cwd; my $$here = getcwd(); s/\Q$$here\/tests\E/./g' obj-*/*.cmake

override_dh_auto_test:
	# Workaround to have the test suite usable out-of-tree, until a fix can
	# be introduced upstream that makes ctest also work with out-of-tree
	# building.
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
	cd obj-* && ln -s ../tests/* -t. || echo "Some files are expected to already be present."
endif

	# OPENSCADPATH has to be set because the default library dir is
	# determined based on the openscad binary's path (will be ok after
	# installation).
	#
	# clearing DISPLAY is not strictly necessary here as this is already
	# done by the build environment (at least by gbp buildpackage), but it
	# makes it clear that the intent is to always render the build-time
	# tests in software.
	#
	# as for the tests excluded with --exclude-regex, see README.testsuite.
	DISPLAY= OPENSCADPATH=/usr/share/openscad/libraries dh_auto_test -Dtests --buildsystem=cmake -- ARGS+="--exclude-regex $(TEST_DISABLE_MISC)\\|$(TEST_DISABLE_EXPERIMENTAL)$(TEST_DISABLE_BIGENDIAN)" || ( echo '---- content of ' obj-*/Testing/Temporary/*_report.html ' ----'; cat obj-*/Testing/Temporary/*_report.html; echo; echo '---- end content ----'; exit 0)

override_dh_auto_install:
	# fix absolute paths in generated scad files. this step logically
	# belongs to the similar lines in the dh_auto_build override, but can
	# first be done here because for the build time tests, the original
	# paths are still required.
	find testdata -name \*.scad  -exec perl -i -pe 'use Cwd; my $$here = getcwd(); s[\Q$$here\E/tests/../testdata][/usr/share/openscad/testdata]g' {} +

	dh_auto_install --destdir=debian/openscad

	install -d debian/openscad/usr/share/doc/openscad
	mv debian/openscad/usr/share/openscad/color-schemes/readme.txt \
	   debian/openscad/usr/share/doc/openscad/readme_color-schemes.txt

	# don't ship mcad, neither the empty directory (when this is built from
	# a normal git source checkout) nor the full library (when this is
	# built from a git checkout with submodules or from a tarball). mcad
	# gets its own package.
	rm -rf debian/openscad/usr/share/openscad/libraries

	# remove fonts
	rm -rf debian/openscad/usr/share/openscad/fonts

	# Remove this, which is available in debian/copyright instead.
	rm -f debian/openscad/usr/share/openscad/examples/COPYING-CC0.txt

override_dh_install:
	dh_install -X.uuid \
		-Xtestdata/python \
		-Xtestdata/ttf/liberation-2.00.1/LICENSE \
		-Xtestdata/ttf/liberation-2.00.1/AUTHORS \
		-Xtestdata/ttf/liberation-2.00.1/ChangeLog \
		-Xtestdata/ttf/liberation-2.00.1/README \
		-Xtestdata/ttf/liberation-2.00.1/TODO \
		-Xtestdata/ttf/marvosym-3.10/FILE_ID.DIZ \
		-Xtestdata/ttf/marvosym-3.10/liesmich.txt \
		-Xtestdata/ttf/marvosym-3.10/readme.txt \
		-Xtestdata/ttf/amiri-0.106/OFL-FAQ.txt \
		-Xtestdata/ttf/amiri-0.106/OFL.txt \
		-Xtestdata/ttf/amiri-0.106/README.txt

	# Rename a couple random readme's installed by upstream. The if [ ]
	# check is needed so binary-arch doesn't try to rename files in
	# -indep-only packages.
	if [ -e debian/openscad-testing-data/usr/share/openscad/testdata/manual/issue214/README.md ] ; then \
	  install -d debian/openscad-testing-data/usr/share/doc/openscad-testing-data ; \
	  mv debian/openscad-testing-data/usr/share/openscad/testdata/manual/issue214/README.md \
	     debian/openscad-testing-data/usr/share/doc/openscad-testing-data/README_issue214.md ; \
	  mv debian/openscad-testing-data/usr/share/openscad/testdata/modulecache-tests/README.txt \
	     debian/openscad-testing-data/usr/share/doc/openscad-testing-data/README_modulecache-tests.txt ; \
	fi

	# Fix missing exec bit for script that goes into /usr/libexec/...
	if [ -e debian/openscad-testing/usr/libexec/openscad/testprograms/export_import_pngtest.py ] ; then \
	  chmod +x debian/openscad-testing/usr/libexec/openscad/testprograms/export_import_pngtest.py ; \
	  chmod +x debian/openscad-testing/usr/libexec/openscad/testprograms/export_pngtest.py ; \
	fi

override_dh_shlibdeps:
	dh_shlibdeps
	# Openscad is not compatible with GLES, bug 982358.
	sed -i 's/ | libqt5gui5-gles (>= [.0-9]*)//' debian/openscad.substvars

override_dh_strip:
	dh_strip

override_dh_auto_clean:
	dh_auto_clean

	dh_auto_clean -Dtests --buildsystem=cmake
