#!/usr/bin/make -f

include /usr/share/dpkg/architecture.mk

export DEB_BUILD_MAINT_OPTIONS=hardening=+all

BUILDDIR = obj-$(DEB_HOST_MULTIARCH)

CMAKE_ARCH_FLAGS :=

# Comply with Debian architectures baseline.
# See cmake/OpenCVCompilerOptimizations.cmake for a list of known features.
# Reference: https://github.com/opencv/opencv/wiki/CPU-optimizations-build-options
ifeq ($(DEB_HOST_ARCH_CPU),amd64)
 # Only SSE2 on amd64
 CMAKE_ARCH_FLAGS += -DCPU_BASELINE="SSE2"
 CMAKE_ARCH_FLAGS += -DCPU_BASELINE_DISABLE="SSE3"
else ifeq ($(DEB_HOST_ARCH_CPU),armhf)
 CMAKE_ARCH_FLAGS += -DCPU_BASELINE_DISABLE="VFPV3,NEON"
 CMAKE_ARCH_FLAGS += -DCPU_DISPATCH="VFPV3,NEON"
else ifeq ($(DEB_HOST_ARCH_CPU),i386)
 # Be extra sure SSE is not picked up on i386
 CMAKE_ARCH_FLAGS += -DCPU_BASELINE_DISABLE="SSE,SSE2"
else ifeq ($(DEB_HOST_ARCH_CPU),ppc64el)
 # VSX for Power8, VSX3 for Power9
 CMAKE_ARCH_FLAGS += -DCPU_BASELINE="VSX"
 CMAKE_ARCH_FLAGS += -DCPU_DISPATCH="VSX3"
endif

# TBB support
ifneq (,$(findstring $(DEB_HOST_ARCH), amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x powerpc powerpcspe riscv64 ppc64 sh4 sparc64))
CMAKE_ARCH_FLAGS += -DWITH_TBB=ON
else
CMAKE_ARCH_FLAGS += -DWITH_TBB=OFF
endif

# Linux-specific stuff
ifeq ($(DEB_HOST_ARCH_OS),linux)
CMAKE_ARCH_FLAGS += -DWITH_1394=ON -DWITH_V4L=ON
else
CMAKE_ARCH_FLAGS += -DWITH_1394=OFF -DWITH_V4L=OFF
endif

CMAKE_JAVA_FLAGS :=

# Java support
ifeq (,$(filter $(DEB_HOST_ARCH), hppa hurd-i386 kfreebsd-i386 kfreebsd-amd64))
CMAKE_JAVA_FLAGS += -DBUILD_JAVA=ON
endif

# mitigate compiler OOM during build
ifeq ($(DEB_HOST_ARCH),mipsel)
export DEB_BUILD_OPTIONS=noopt
CXXFLAGS+=-gsplit-dwarf
endif

ifneq (,$(filter $(DEB_HOST_ARCH), armel armhf m68k mipsel powerpc sh4))
export DEB_LDFLAGS_MAINT_APPEND += -Wl,--no-as-needed -latomic -Wl,--as-needed
endif

# For Java
export JAVA_HOME=/usr/lib/jvm/default-java

CMAKE_FLAGS = \
	-GNinja \
	-DANT_EXECUTABLE=/usr/bin/ant \
	-DBUILD_EXAMPLES=OFF \
	-DBUILD_INFO_SKIP_TIMESTAMP=ON \
	-DBUILD_PROTOBUF=OFF \
	-DBUILD_PERF_TESTS=OFF \
	-DBUILD_opencv_dnn=ON \
	-DBUILD_opencv_dnn_modern=ON \
	-DBUILD_opencv_face=ON \
	-DBUILD_opencv_python2=OFF \
	-DBUILD_opencv_python3=OFF \
	-DCMAKE_BUILD_TYPE=Release	\
	-DCMAKE_CXX_FLAGS_RELEASE="$(CXXFLAGS)" \
	-DCMAKE_C_FLAGS_RELEASE="$(CFLAGS)" \
	-DCMAKE_EXE_LINKER_FLAGS_RELEASE="$(LDFLAGS)" \
	-DCMAKE_INSTALL_LIBDIR="lib/$(DEB_HOST_MULTIARCH)" \
	-DCMAKE_INSTALL_PREFIX=/usr \
	-DCMAKE_SKIP_RPATH=ON \
	-DCMAKE_VERBOSE_MAKEFILE=ON \
	-DENABLE_PRECOMPILED_HEADERS=OFF \
	-DINSTALL_C_EXAMPLES=ON	\
	-DINSTALL_PYTHON_EXAMPLES=ON \
	-DOPENCL_INCLUDE_DIR:PATH="/usr/include/CL/" \
	-DOPENCV_EXTRA_MODULES_PATH="$(CURDIR)/contrib/modules" \
	-DOPENCV_MATHJAX_RELPATH=/usr/share/javascript/mathjax/ \
	-DOPENCV_GENERATE_PKGCONFIG=ON \
	-DOPENCV_LAPACK_FIND_PACKAGE_ONLY=ON \
	-DOPENCV_DOWNLOAD_TRIES_LIST= \
	-DOpenGL_GL_PREFERENCE=GLVND \
	-DPROTOBUF_UPDATE_FILES=ON \
	-DWITH_ADE=OFF \
	-DWITH_CAROTENE=OFF \
	-DWITH_CUDA=OFF \
	-DWITH_EIGEN=ON \
	-DWITH_FFMPEG=ON \
	-DWITH_GDAL=ON \
	-DWITH_GDCM=ON \
	-DWITH_GSTREAMER=ON \
	-DWITH_GPHOTO2=ON \
	-DWITH_GTK=OFF \
	-DWITH_IPP=OFF \
	-DWITH_ITT=OFF \
	-DWITH_JASPER=OFF \
	-DWITH_JPEG=ON	\
	-DWITH_LAPACK=ON \
	-DWITH_NGRAPH=OFF \
	-DWITH_OPENCL=ON \
	-DWITH_OPENEXR=ON \
	-DWITH_OPENGL=ON \
	-DWITH_PNG=ON	\
	-DWITH_PROTOBUF=ON \
	-DWITH_PVAPI=ON	\
	-DWITH_QT=5 \
	-DWITH_QUIRC=ON \
	-DWITH_TIFF=ON	\
	-DWITH_UNICAP=OFF \
	-DWITH_VTK=ON \
	-DWITH_XINE=OFF	\
	$(CMAKE_ARCH_FLAGS)

%:
	dh $@

override_dh_auto_clean:
	dh_auto_clean -B $(BUILDDIR)
	dh_auto_clean -B $(BUILDDIR)-static
	dh_auto_clean -S pybuild \
		-- --name=opencv --system=custom \
		--clean-args "dh_auto_clean -B {build_dir}"


override_dh_auto_configure:
	# prepare the 3rd party directory
	test -d 3rdparty || cp -av debian/3rdparty-4.6.0 3rdparty
	# dynamically linked
	dh_auto_configure -B $(BUILDDIR) \
		-- $(CMAKE_FLAGS) $(CMAKE_JAVA_FLAGS) \
		-DCMAKE_SHARED_LINKER_FLAGS_RELEASE="$(LDFLAGS)" \
		-DBUILD_SHARED_LIBS=ON -DBUILD_DOCS=ON \
		-DBUILD_TESTS=OFF
	# statically linked
	dh_auto_configure -B $(BUILDDIR)-static \
		-- $(CMAKE_FLAGS) \
		-DBUILD_SHARED_LIBS=OFF -DBUILD_DOCS=OFF \
		-DBUILD_TESTS=OFF \
		-DBUILD_opencv_apps=OFF -DBUILD_JAVA=OFF
	# Python extension
	dh_auto_configure -S pybuild \
		-- --name=opencv --system=custom --configure-args "\
			dh_auto_configure -S cmake -D modules/python -B {build_dir} -- \
				-GNinja \
				-DCMAKE_SKIP_RPATH=ON \
				-DOpenCV_BINARY_DIR=$(CURDIR)/$(BUILDDIR) \
				-DOPENCV_PYTHON_STANDALONE_INSTALL_PATH={install_dir} \
				-DOPENCV_SKIP_PYTHON_LOADER=ON \
				-DOPENCV_PYTHON_VERSION={version} \
				-DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/{interpreter} \
				-DPYTHON_LIBRARY:FILEPATH={interpreter.library_file} \
				-DPYTHON_INCLUDE_DIR:PATH={interpreter.include_dir}"
	# strip non-reproducible info from version string
	sed -i -e 's,$(CURDIR),<<PKGBUILDDIR>>,g' \
		-e "s,$$(uname -sr),,g" \
		$(BUILDDIR)/modules/core/version_string.inc \
		$(BUILDDIR)-static/modules/core/version_string.inc

override_dh_auto_build:
	# documentation
	dh_auto_build -B $(BUILDDIR) -- doxygen
ifneq (,$(findstring $(DEB_HOST_ARCH), mipsel))
	# dynamically linked
	dh_auto_build --no-parallel -B $(BUILDDIR)
	# statically linked
	dh_auto_build --no-parallel -B $(BUILDDIR)-static
	# Python extension
	dh_auto_build --no-parallel -S pybuild \
		-- --name=opencv --system=custom \
		--build-args "dh_auto_build -B {build_dir}"
else
	# dynamically linked
	dh_auto_build -B $(BUILDDIR)
	# statically linked
	dh_auto_build -B $(BUILDDIR)-static
	# Python extension
	dh_auto_build -S pybuild \
		-- --name=opencv --system=custom \
		--build-args "dh_auto_build -B {build_dir}"
endif

override_dh_auto_test:
ifeq ($(DEB_HOST_ARCH),mipsel)
	true # Don't run the tests at all
else
	-LD_LIBRARY_PATH=$(shell realpath $(BUILDDIR))/lib dh_auto_test
endif

ifeq ($(DEB_HOST_ARCH),mipsel)
override_dh_dwz:
	true # mipsel would FTBFS, possibly due to out-of-memory
endif

override_dh_auto_install:
	dh_auto_install -B $(BUILDDIR)
	# Python extension
	dh_auto_install -S pybuild \
		-- --name=opencv --system=custom \
		--install-args "dh_auto_install -B {build_dir} --destdir={destdir}"

execute_before_dh_install:
	# put the static libs together with the rest of the stuff
	cp -v $(BUILDDIR)-static/lib/*.a debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/
	-find debian/tmp -type f -name jquery.js -delete
	-find debian/tmp -type f -name '*.supp' -delete
	-find debian/tmp -type d -empty -delete
	-$(RM) -r $(BUILDDIR)-static

execute_before_dh_strip_nondeterminism-indep:
	# This can be deleted after https://github.com/doxygen/doxygen/pull/9227 is
	# in the version of Doxygen in Debian. It won't hurt afterwards, because
	# there will be nothing to strip anymore.
	sed -i -e 's,$(CURDIR)/\($(BUILDDIR)/\)\?,,g' \
		debian/opencv-doc/usr/share/doc/opencv-doc/opencv4/html/opencv.tag
