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

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

# -pie only for static mode
export DEB_BUILD_MAINT_OPTIONS=hardening=+all,-pie

# because copy_headers.sh have hardcoded path to build/include_directories.txt
BUILDDIR = obj-$(DEB_HOST_GNU_TYPE)
CURDIR = $(shell pwd)
DESTDIR = $(CURDIR)/debian/tmp

DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)

ifeq ($(CCACHE_PREFIX),distcc)
    THREADS_COUNT=$(shell distcc -j)
endif
ifeq ($(THREADS_COUNT),)
    THREADS_COUNT=$(shell nproc || grep -c ^processor /proc/cpuinfo || sysctl -n hw.ncpu || echo 4)
endif
DEB_BUILD_OPTIONS+=parallel=$(THREADS_COUNT)

ifndef ENABLE_TESTS
    CMAKE_FLAGS += -DENABLE_TESTS=0
endif

ifndef MAKE_TARGET
    MAKE_TARGET = clickhouse-bundle
endif

CMAKE_FLAGS += -DENABLE_UTILS=0

DEB_CC ?= $(shell which gcc-9 gcc-8 gcc | head -n1)
DEB_CXX ?= $(shell which g++-9 g++-8 g++ | head -n1)

ifdef DEB_CXX
    DEB_BUILD_GNU_TYPE := $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
    DEB_HOST_GNU_TYPE  := $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
ifeq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
        CC := $(DEB_CC)
        CXX := $(DEB_CXX)
else
        CC := $(DEB_HOST_GNU_TYPE)-$(DEB_CC)
        CXX := $(DEB_HOST_GNU_TYPE)-$(DEB_CXX)
endif
endif

ifdef CXX
    CMAKE_FLAGS += -DCMAKE_CXX_COMPILER=`which $(CXX)`
endif
ifdef CC
    CMAKE_FLAGS += -DCMAKE_C_COMPILER=`which $(CC)`
endif

ifndef DISABLE_NINJA
    NINJA=$(shell which ninja)
ifneq ($(NINJA),)
        CMAKE_FLAGS += -GNinja
        export MAKE=$(NINJA)
endif
endif

ifndef DH_VERBOSE
    CMAKE_FLAGS += -DCMAKE_VERBOSE_MAKEFILE=0
endif

# Useful for bulding on low memory systems
ifndef DISABLE_PARALLEL
    DH_FLAGS += --parallel
else
    THREADS_COUNT = 1
endif

ifneq ($(THREADS_COUNT),)
    THREADS_COUNT:=-j$(THREADS_COUNT)
endif

%:
	dh $@ $(DH_FLAGS) --buildsystem=cmake

override_dh_auto_configure:
	dh_auto_configure -- $(CMAKE_FLAGS)

override_dh_auto_build:
	# Fix for ninja. Do not add -O.
	$(MAKE) $(THREADS_COUNT) -C $(BUILDDIR) $(MAKE_TARGET)

override_dh_auto_test:
	cd $(BUILDDIR) && ctest $(THREADS_COUNT) -V -E with_server

override_dh_clean:
	rm -rf debian/copyright debian/clickhouse-client.docs debian/clickhouse-common-static.docs
	dh_clean -X contrib

override_dh_strip:
	dh_strip -pclickhouse-common-static --dbg-package=clickhouse-common-static-dbg

override_dh_install:
	# Making docs
	cp LICENSE debian/copyright

	ln -sf clickhouse-server.docs debian/clickhouse-client.docs
	ln -sf clickhouse-server.docs debian/clickhouse-common-static.docs

	mkdir -p $(DESTDIR)/etc/security/limits.d
	cp debian/clickhouse.limits $(DESTDIR)/etc/security/limits.d/clickhouse.conf

	# systemd compatibility
	mkdir -p $(DESTDIR)/etc/systemd/system/
	cp debian/clickhouse-server.service $(DESTDIR)/etc/systemd/system/

	dh_install --list-missing --sourcedir=$(DESTDIR)

override_dh_auto_install:
	env DESTDIR=$(DESTDIR) $(MAKE) $(THREADS_COUNT) -C $(BUILDDIR) install

override_dh_shlibdeps:
	true # We depend only on libc and dh_shlibdeps gives us wrong (too strict) dependency.

override_dh_builddeb:
	dh_builddeb -- -Z gzip # Older systems don't have "xz", so use "gzip" instead.