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

# Hardening
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk

# Ubuntu defaults to use -Bsymbolic-functions, which breaks linking
# shared objects with static FFmpeg archives (see:
# https://bugs.launchpad.net/ubuntu/+source/ffmpeg/+bug/1942352).
ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes)
ifneq (,$(LDFLAGS))
  LDFLAGS := $(filter-out %-Bsymbolic-functions,$(LDFLAGS))
endif
endif

# Number of CPUS
NO_CPUS=$(shell nproc)
ifeq ($(NO_CPUS),0)
NO_CPUS=1
endif

# Binary package names
JAMI_ALL_IN_ONE_PKG_NAME="jami-all"
JAMI_CLIENT_PKG_NAME="jami"
JAMI_CLIENT_GNOME_PKG_NAME="jami-gnome"
JAMI_LIB_CLIENT_PKG_NAME="jami-libclient"
JAMI_DAEMON_PKG_NAME="jami-daemon"

# Bundled packages from contrib
BUNDLED_PKGS=""
ifeq (raspbian_10_armhf,$(findstring raspbian_10_armhf, $(DISTRIBUTION)))
# Raspbian's yaml-cpp lib does not work properly
BUNDLED_PKGS="--enable-ffmpeg --enable-yaml-cpp"
# Add host environment variables
CMAKE_OPTIONS=-DCHOST=${HOST_ARCH} \
  -DCMAKE_C_COMPILER=${HOST_ARCH}-gcc \
  -DCMAKE_CXX_COMPILER=${HOST_ARCH}-g++ \
  -DCMAKE_FIND_ROOT_PATH=/usr/${HOST_ARCH} \
  -DPKG_CONFIG_EXECUTABLE=/usr/bin/${HOST_ARCH}-pkg-config
endif

# Qt-related variables
QT_JAMI_PREFIX := ${QT_JAMI_PREFIX}
export PATH := $(QT_JAMI_PREFIX)/bin:${PATH}
export LD_LIBRARY_PATH := $(QT_JAMI_PREFIX)/lib:${LD_LIBRARY_PATH}
export PKG_CONFIG_PATH := $(QT_JAMI_PREFIX)/lib/pkgconfig:${PKG_CONFIG_PATH}
export CMAKE_PREFIX_PATH := $(QT_JAMI_PREFIX)/lib/cmake:${CMAKE_PREFIX_PATH}

# Installation directories.
OCI_INSTALL_DIR = $(CURDIR)/debian/$(JAMI_ALL_IN_ONE_PKG_NAME)

%:
	dh $@

override_dh_auto_configure:

override_dh_auto_build:
	# Daemon contribs build + configure
	mkdir -p daemon/contrib/native
	cd daemon/contrib/native && \
        ../bootstrap \
	  --host=${HOST_ARCH} \
	  --disable-downloads \
	  --no-checksums \
	  --disable-ogg \
	  --disable-flac \
	  --disable-vorbis \
	  --disable-vorbisenc \
	  --disable-speex \
	  --disable-sndfile \
	  --disable-gsm \
	  --disable-speexdsp \
	  --disable-natpmp  \
	  --enable-gnutls $(BUNDLED_PKGS) && \
	make list && \
	make -j$(NO_CPUS) V=1
	cd daemon && \
	./autogen.sh && \
	./configure \
	  --prefix=/usr \
	  --without-dbus \
	  --host=${HOST_ARCH}

	# Daemon build
	make -C daemon -j$(NO_CPUS) V=1
	pod2man daemon/man/jamid.pod > daemon/jamid.1

	# Libringclient configure
	cd lrc && \
	mkdir build && \
	cd build && \
	cmake  \
	  -DRING_BUILD_DIR=$(CURDIR)/daemon/src \
	  -DENABLE_LIBWRAP=true \
	  -DCMAKE_INSTALL_PREFIX=/usr \
	  -DCMAKE_INSTALL_LIBDIR=lib \
	  $(CMAKE_OPTIONS) ..

	# libringclient build
	make -C lrc/build -j$(NO_CPUS) V=1

	# GNOME client configure
	cd client-gnome && \
	  mkdir build && \
	  cd build && \
	  cmake -DCMAKE_INSTALL_PREFIX=/usr \
		-DCMAKE_INSTALL_LIBDIR=lib \
		-DLibRingClient_PROJECT_DIR=/$(CURDIR)/lrc \
		-DGSETTINGS_LOCALCOMPILE=OFF \
		$(CMAKE_OPTIONS) ..

	# GNOME client build
	make -C client-gnome/build LDFLAGS="-lpthread" -j$(NO_CPUS) V=1

	# Qt client configure and build
	cd client-qt && \
	mkdir build && \
	cd build && \
	cmake \
	  -DCMAKE_INSTALL_PREFIX=/usr \
	  -DLRC=$(CURDIR)/lrc \
	  $(CMAKE_OPTIONS) ..
	make -C client-qt/build -j$(NO_CPUS) V=1

override_dh_auto_clean:
	#######################
	## Daemon clean      ##
	#######################
	[ -f daemon/contrib/native/Makefile ] && \
	  make -C daemon/contrib/native distclean || true
	rm -rfv daemon/contrib/native
	rm -rfv daemon/jamid.1

	#########################
	## libringclient clean ##
	#########################
	# CMake build system has no distclean target, so use clean.
	[ -f lrc/build/Makefile ] && make -C lrc/build clean || true
	rm -rfv lrc/build

	########################
	## gnome client clean ##
	########################
	# CMake build system has no distclean target, so use clean.
	[ -f client-gnome/build/Makefile ] && \
	  make -C client-gnome/build clean || true
	rm -rfv client-gnome/build

	#####################
	## qt client clean ##
	#####################
	# CMake build system has no distclean target, so use clean.
	[ -f client-qt/build/Makefile ] && make -C client-qt/build clean || true
	rm -rfv client-qt/build

override_dh_auto_install:
	#########################
	## Daemon install      ##
	#########################
	cd daemon && make DESTDIR=$(CURDIR)/debian/$(JAMI_DAEMON_PKG_NAME) install
	rm -rfv $(CURDIR)/debian/$(JAMI_DAEMON_PKG_NAME)/usr/include
	rm -rfv $(CURDIR)/debian/$(JAMI_DAEMON_PKG_NAME)/usr/lib/*.a
	rm -rfv $(CURDIR)/debian/$(JAMI_DAEMON_PKG_NAME)/usr/lib/*.la

	#########################
	## Jami client install ##
	#########################
        ## LibRingClient
	cd lrc/build && make DESTDIR=$(CURDIR)/debian/$(JAMI_LIB_CLIENT_PKG_NAME) install
	rm -rfv $(CURDIR)/debian/$(JAMI_LIB_CLIENT_PKG_NAME)/usr/include

	# This is a symlink, should be in -dev package
	rm -v $(CURDIR)/debian/$(JAMI_LIB_CLIENT_PKG_NAME)/usr/lib/libringclient.so

	# cmake files
	rm -rfv $(CURDIR)/debian/$(JAMI_CLIENT_PKG_NAME)/usr/lib/cmake

        ## GNOME client
	cd client-gnome/build && \
		make DESTDIR=$(CURDIR)/debian/$(JAMI_CLIENT_GNOME_PKG_NAME) install
	rm -rfv $(CURDIR)/debian/$(JAMI_CLIENT_GNOME_PKG_NAME)/usr/bin/jami

	## Qt client
	cd client-qt/build && \
	make DESTDIR=$(CURDIR)/debian/$(JAMI_CLIENT_PKG_NAME) install

	## Custom Qt package for Jami (libqt-jami)
	## Copy our own Qt library package content into the OCI package.
	for file_name in $$(dpkg-query -L libqt-jami); do 	\
	  mkdir -p "$(OCI_INSTALL_DIR)$$(dirname $$file_name)"; \
	  test -d "$$file_name" && continue;  			\
	  cp "$$file_name" "$(OCI_INSTALL_DIR)$$file_name";	\
	done

	######################
	## Jami AiO install ##
	######################
        ## daemon
	cd daemon && make DESTDIR=$(CURDIR)/debian/$(JAMI_ALL_IN_ONE_PKG_NAME) install
	rm -rfv $(CURDIR)/debian/$(JAMI_ALL_IN_ONE_PKG_NAME)/usr/include
	rm -rfv $(CURDIR)/debian/$(JAMI_ALL_IN_ONE_PKG_NAME)/usr/lib/*.a
	rm -rfv $(CURDIR)/debian/$(JAMI_ALL_IN_ONE_PKG_NAME)/usr/lib/*.la

        ## LibRingClient
	cd lrc/build && make DESTDIR=$(CURDIR)/debian/$(JAMI_ALL_IN_ONE_PKG_NAME) install
	rm -rfv $(CURDIR)/debian/$(JAMI_ALL_IN_ONE_PKG_NAME)/usr/include

	# This is a symlink, should be in -dev package
	rm -v $(CURDIR)/debian/$(JAMI_ALL_IN_ONE_PKG_NAME)/usr/lib/libringclient.so

	# cmake files
	rm -rfv $(CURDIR)/debian/$(JAMI_ALL_IN_ONE_PKG_NAME)/usr/lib/cmake

	## Qt client
	cd client-qt/build && \
	make DESTDIR=$(CURDIR)/debian/$(JAMI_ALL_IN_ONE_PKG_NAME) install

override_dh_shlibdeps:
	dh_shlibdeps -- -x$(JAMI_ALL_IN_ONE_PKG_NAME)

tmpdir:= $(shell mktemp -d)
workdir:= $(shell pwd)
PKD := $(abspath $(dir $(MAKEFILE_LIST)))
version_to_download := $(shell dpkg-parsechangelog -ldebian/changelog | perl -ne 'print $$1 if m{^Version:\s+(?:\d+:)?(\d.*)(?:\~dfsg.+)(?:\-\d+.*)};')
