#!/usr/bin/make -f

SHELL := /bin/bash

export DH_VERBOSE = 1
export DESTDIR = $(CURDIR)/debian/tmp
export DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)

export DEB_CFLAGS_SET = -O3 -DNDEBUG -fstack-protector-strong -Wformat -Werror=format-security -Wno-maybe-uninitialized -Wno-unused-variable -Wno-deprecated-declarations
export DEB_CPPFLAGS_SET = -Wdate-time -D_FORTIFY_SOURCE=2
export DEB_CXXFLAGS_SET = -O3 -DNDEBUG -fstack-protector-strong -Wformat -Werror=format-security -Wno-maybe-uninitialized -Wno-unused-variable -Wno-deprecated-declarations
export DEB_LDFLAGS_SET = -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,--as-needed -lstdc++
export DEB_BUILD_MAINT_OPTIONS = hardening=+all optimize=-lto

export CC = $(shell which gcc-13 || which gcc-12 || which gcc-11 || which gcc-10 || which gcc-9 || which gcc-8 || which gcc-7 || which gcc)
export CXX = $(shell which g++-13 || which g++-12 || which g++-11 || which g++-10 || which g++-9 || which g++-8 || which g++-7 || which g++)

%:
	dh $@ --buildsystem=cmake --with javahelper,python3,systemd --max-parallel=16

override_dh_auto_configure:
	env | sort
	dh_auto_configure \
		-- \
		-DCMAKE_C_COMPILER=$(CC) \
		-DCMAKE_CXX_COMPILER=$(CXX) \
		-DCMAKE_BUILD_TYPE=Release \
		-DCMAKE_C_FLAGS="$(CFLAGS)" \
		-DCMAKE_CXX_FLAGS="$(CXXFLAGS)" \
		-DCMAKE_EXE_LINKER_FLAGS="$(LDFLAGS)" \
		-DCMAKE_SHARED_LINKER_FLAGS="$(LDFLAGS)" \
		-DBUILD_SHARED_LIBS=ON \
		-DPOSITION_INDEPENDENT_CODE=ON \
		-DCEPH_SYSTEMD_ENV_DIR=/etc/default \
		-DCMAKE_INSTALL_LIBEXECDIR=/usr/lib \
		-DCMAKE_INSTALL_SYSCONFDIR=/etc \
		-DCMAKE_INSTALL_SYSTEMD_SERVICEDIR=/lib/systemd/system \
		-DWITH_BLUESTORE_PMEM=OFF \
		-DWITH_CCACHE=ON \
		-DWITH_CEPHFS_JAVA=OFF \
		-DWITH_CEPHFS_SHELL=ON \
		-DWITH_DEBUG=OFF \
		-DWITH_EMBEDDED=OFF \
		-DWITH_GRAFANA=ON \
		-DWITH_JAEGER=OFF \
		-DWITH_LIBURING=ON \
		-DWITH_LTTNG=OFF \
		-DWITH_MGR_DASHBOARD_FRONTEND=OFF \
		-DWITH_NSS=ON \
		-DWITH_OCF=ON \
		-DWITH_PYTHON2=OFF \
		-DWITH_PYTHON3=3 \
		-DWITH_RADOSGW_KAFKA_ENDPOINT=OFF \
		-DWITH_RADOSGW_SELECT_PARQUET=OFF \
		-DWITH_RBD_RWL=OFF \
		-DWITH_RBD_SSD_CACHE=OFF \
		-DWITH_SELINUX=OFF \
		-DWITH_SPDK=OFF \
		-DWITH_SYSTEMD=ON \
		-DWITH_SYSTEM_ARROW=OFF \
		-DWITH_SYSTEM_BOOST=OFF \
		-DWITH_SYSTEM_FMT=OFF \
		-DWITH_SYSTEM_LIBURING=OFF \
		-DWITH_SYSTEM_PMDK=OFF \
		-DWITH_SYSTEM_UTF8PROC=OFF \
		-DWITH_TESTS=OFF \

override_dh_auto_build:
	dh_auto_build --buildsystem=cmake
	cp src/init-radosgw debian/radosgw.init

override_dh_auto_clean:
	dh_auto_clean --buildsystem=cmake
	rm -f debian/radosgw.init debian/ceph.logrotate

override_dh_auto_install:
	dh_auto_install --buildsystem=cmake --destdir=$(DESTDIR)
	install -D -m 644 udev/50-rbd.rules $(DESTDIR)/lib/udev/rules.d/50-rbd.rules
	install -D -m 644 src/etc-rbdmap $(DESTDIR)/etc/ceph/rbdmap
	install -D -m 644 etc/sysctl/90-ceph-osd.conf $(DESTDIR)/etc/sysctl.d/30-ceph-osd.conf
	install -D -m 440 sudoers.d/ceph-smartctl $(DESTDIR)/etc/sudoers.d/ceph-smartctl
	
	install -m 755 src/cephadm/cephadm $(DESTDIR)/usr/sbin/cephadm
	
	install -m 644 -D monitoring/prometheus/alerts/ceph_default_alerts.yml $(DESTDIR)/etc/prometheus/ceph/ceph_default_alerts.yml
	
	# fixup for bionic
	mkdir -p $(DESTDIR)/usr/lib/python3/dist-packages
	mv $(DESTDIR)/usr/lib/python*/site-packages/* $(DESTDIR)/usr/lib/python3/dist-packages/ || echo $$?
	
	# fixup for setuptools v76
	find $(DESTDIR)/usr/bin -type f -exec sed -i "s?^#\!python?#\!/usr/bin/env python3?g" {} \;

# doc/changelog is a directory, which confuses dh_installchangelogs
override_dh_installchangelogs:
	dh_installchangelogs --exclude doc/changelog

override_dh_installdocs:

override_dh_installlogrotate:
	cp src/logrotate.conf debian/ceph-common.logrotate
	dh_installlogrotate -pceph-common

override_dh_installinit:
	# install the systemd stuff manually since we have funny service names
	install -d -m0755 debian/ceph-common/etc/default
	install -m0644 etc/default/ceph debian/ceph-common/etc/default/
	install -d -m0755 debian/ceph-common/usr/lib/tmpfiles.d
	install -m 0644 -D systemd/ceph.tmpfiles.d debian/ceph-common/usr/lib/tmpfiles.d/ceph.conf
	
	dh_installinit -p ceph-base --name ceph --no-start
	dh_installinit -p radosgw --no-start
	
	# NOTE: execute systemd helpers so they pickup dh_install'ed units and targets
	dh_systemd_enable
	dh_systemd_start --no-restart-on-upgrade

override_dh_systemd_enable:
	# systemd enable done as part of dh_installinit

override_dh_systemd_start:
	# systemd start done as part of dh_installinit

override_dh_shlibdeps:
	dh_shlibdeps -a --exclude=erasure-code --exclude=rados-classes --exclude=compressor --exclude=ceph_crypto

override_dh_python3:
	for binding in rados cephfs rbd rgw; do \
		dh_python3 -p python3-$$binding; \
	done
	dh_python3 -p python3-ceph-argparse
	dh_python3 -p python3-ceph-common
	dh_python3 -p cephfs-shell
	dh_python3 -p cephadm

# do not run tests
override_dh_auto_test:

.PHONY: override_dh_autoreconf override_dh_auto_configure override_dh_auto_build override_dh_auto_clean override_dh_auto_install override_dh_installdocs override_dh_installlogrotate override_dh_installinit override_dh_systemd_start override_dh_strip override_dh_auto_test
