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

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

include /usr/share/dpkg/pkg-info.mk
export DEB_VERSION_UPSTREAM

DEB_REQUESTED_PACKAGES := $(shell dh_listpackages)
when-in-build-profile     = $(patsubst 0,$(3),$(patsubst 1,$(2),$(patsubst 01,1,0$(patsubst $(1),1,$(filter $(1),$(DEB_BUILD_PROFILES))))))
when-not-in-build-profile = $(patsubst 0,$(3),$(patsubst 1,$(2),$(patsubst 11,0,1$(patsubst $(1),1,$(filter $(1),$(DEB_BUILD_PROFILES))))))
when-building-package     = $(patsubst 0,$(3),$(patsubst 1,$(2),$(patsubst 01,1,0$(patsubst $(1),1,$(filter $(1),$(DEB_REQUESTED_PACKAGES))))))
when-not-building-package = $(patsubst 0,$(3),$(patsubst 1,$(2),$(patsubst 11,0,1$(patsubst $(1),1,$(filter $(1),$(DEB_REQUESTED_PACKAGES))))))

export DEB_BUILD_MAINT_OPTIONS = hardening=+all

# Obtain the list of non-builtin targets once the Makefile has been
# generated.  If anyone knows of a better way, tell me!
ifneq (,$(wildcard obj-$(DEB_HOST_GNU_TYPE)/Makefile))
cmaketargets := $(shell find obj-$(DEB_HOST_GNU_TYPE) -type d -name '*.dir' -printf ' %f\n'|sed 's@.dir$$@@'|sort -u)
indeptargets := $(filter mediastreamer2-html-doc,$(cmaketargets))
archtargets := $(filter-out mediastreamer2-html-doc,$(cmaketargets))
endif

libpkgname := libmediastreamer2-14

features += -DENABLE_TOOLS=$(call when-building-package,libmediastreamer-tools,YES,NO)
features += -DENABLE_UNIT_TESTS=no
features += -DBUILD_SHARED_LIBS=$(call when-building-package,$(libpkgname),YES,NO)
features += -DENABLE_G729=$(call when-building-package,$(libpkgname),YES,NO) # libbcg729-dev
features += -DENABLE_G729B_CNG=$(call when-building-package,$(libpkgname),YES,NO) #  libbcg729-dev
features += -DENABLE_JPEG=$(call when-building-package,$(libpkgname),YES,NO) # libturbojpeg0-dev
features += -DENABLE_QRCODE=$(call when-building-package,$(libpkgname),YES,NO) # libzxingcore-dev
features += -DENABLE_PCAP=$(call when-building-package,$(libpkgname),YES,NO) # libpcap-dev
features += -DENABLE_G726=$(call when-building-package,$(libpkgname),YES,NO) # libspandsp-dev
features += -DENABLE_GSM=$(call when-building-package,$(libpkgname),YES,NO) # libgsm1-dev
features += -DENABLE_SRTP=$(call when-building-package,$(libpkgname),YES,NO) # libsrtp2-dev
features += -DENABLE_ZRTP=$(call when-building-package,$(libpkgname),YES,NO) # libbzrtp-dev
features += -DENABLE_MKV=$(call when-building-package,$(libpkgname),YES,NO) # libbcmatroska2-dev
features += -DENABLE_BV16=NO # $(call when-building-package,$(libpkgname),YES,NO) # libbv16-dev
features += -DENABLE_FFMPEG=$(call when-building-package,$(libpkgname),YES,NO) # libavcodec-dev libavutil-dev
features += -DENABLE_SOUND=$(call when-building-package,$(libpkgname),YES,NO)
features += -DENABLE_ALSA=$(call when-building-package,$(libpkgname),YES,NO) # libasound2-dev
features += -DENABLE_SPEEX_CODEC=$(call when-building-package,$(libpkgname),YES,NO) # libspeex-dev
features += -DENABLE_SPEEX_DSP=$(call when-building-package,$(libpkgname),YES,NO) # libspeexdsp-dev
features += -DENABLE_OPUS=$(call when-building-package,$(libpkgname),YES,NO) # libopus-dev
features += -DENABLE_PULSEAUDIO=$(call when-building-package,$(libpkgname),YES,NO) # libpulse-dev
features += -DENABLE_VIDEO=$(call when-building-package,$(libpkgname),YES,NO)
features += -DENABLE_THEORA=$(call when-building-package,$(libpkgname),YES,NO) # libtheora-dev
features += -DENABLE_QT_GL=$(call when-building-package,$(libpkgname),YES,NO) # qtdeclarative5-dev qtbase5-dev
# Under http://linphone.org/technical-corner/mediastreamer2?qt-technical_corner=3#qt-technical_corner
# it reads now (2021): "Please refer to public header files for
# Mediastreamer2 documentation."  I guess that means the docs are not
# considered worth maintaining anymore, but for now we still ship them.
features += -DENABLE_DOC=$(call when-building-package,libmediastreamer-doc,YES,NO) # doxygen

# Upstream unconditionally sets CMAKE_INSTALL_RPATH. Make it ineffective by
# setting CMAKE_SKIP_RPATH
options += -DCMAKE_SKIP_RPATH=ON
options += -DGIT_EXECUTABLE=/usr/share/bctoolbox/upstream-version-from-changelog
options += -DDEB_VERSION_UPSTREAM=$(DEB_VERSION_UPSTREAM:%+dfsg=%)
options += -DDISABLE_OPERATE_ON_SOURCE_CODE=$(call when-building-package,$(libpkgname),NO,YES)

# note that CMAKE_INSTALL_DATADIR must be an /absolute/ path here
# whereas in e.g. liblinphone it must be a path relative to /usr
options += -DCMAKE_INSTALL_DATADIR="/usr/share/mediastreamer2" # nowebcamCIF.jpg must go into images/ here

%:
	dh $@ --buildsystem=cmake --without autoreconf

override_dh_auto_configure:
	if ! [ -f debian/$(libpkgname).install ]; then \
		echo "HINT: You must update d/rules to have the new soname!" | grep --color '^.*$$' >&2 ; \
		false ; \
	fi
	dh_auto_configure -O--buildsystem=cmake -- \
	${features} \
	${options}

execute_before_dh_auto_install-indep:
ifeq (x,$(call when-not-building-package,libmediastreamer-dev,x))
	cp obj-$(DEB_HOST_GNU_TYPE)/include/cmake_install.cmake \
	   obj-$(DEB_HOST_GNU_TYPE)/include/cmake_install.cmake.orig
	truncate -s 0 obj-$(DEB_HOST_GNU_TYPE)/include/cmake_install.cmake
endif

execute_after_dh_auto_install-indep:
ifeq (x,$(call when-not-building-package,libmediastreamer-dev,x))
	mv obj-$(DEB_HOST_GNU_TYPE)/include/cmake_install.cmake.orig \
	   obj-$(DEB_HOST_GNU_TYPE)/include/cmake_install.cmake
endif

execute_before_dh_install-indep:
	mkdir -p debian/tmp/usr/share/mediastreamer2/images && \
		cp -afv src/voip/nowebcamCIF.jpg debian/tmp/usr/share/mediastreamer2/images/nowebcamCIF.jpg

override_dh_auto_build-arch:
	dh_auto_build -O--buildsystem=cmake -- $(archtargets)

execute_after_dh_auto_build-arch:
#	false

override_dh_auto_build-indep:
# this tests for the -doc package only since the -data package needs
# nothing built
ifeq (x,$(call when-building-package,libmediastreamer-doc,x))
	echo DEB_HOST_GNU_TYPE=$(DEB_HOST_GNU_TYPE) DEB_HOST_MULTIARCH=$(DEB_HOST_MULTIARCH)
	sed -i 's@^HAVE_DOT.*NO$$@HAVE_DOT = YES@' obj-$(DEB_HOST_GNU_TYPE)/help/Doxyfile
	sed -i 's@^RECURSIVE .*NO$$@RECURSIVE = YES@' obj-$(DEB_HOST_GNU_TYPE)/help/Doxyfile
	sed -i 's@^PREDEFINED .*= DOXYGEN \\$$@PREDEFINED = DOXYGEN MS2_DEPRECATED= \\@#Doxygen cannot parse __attribute__() expressions' obj-$(DEB_HOST_GNU_TYPE)/help/Doxyfile
	dh_auto_build -O--buildsystem=cmake -- $(call when-building-package,libmediastreamer-doc,mediastreamer2-html-doc)
endif

override_dh_auto_clean:
	dh_auto_clean -O--buildsystem=cmake
