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

DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk

export BUILD_TLS = yes
export CFLAGS CPPFLAGS LDFLAGS
export DEB_BUILD_MAINT_OPTIONS = hardening=+all optimize=+lto
export DEB_CFLAGS_MAINT_APPEND = -I/usr/include/liblzf
export DEB_LDFLAGS_MAINT_APPEND = -Wl,-no-as-needed -ldl -latomic -llzf

VALKEY_DOC_VERSION = 9.0.0

# Build the Lua scripting engine as a dlopen'd shared module
# (libvalkeylua.so), new in Valkey 9.1. OFF by default: the upstream
# default statically links Lua into valkey-server. Enable by building
# with the build profile, e.g.:
#   DEB_BUILD_PROFILES=pkg.valkey.lua-module dpkg-buildpackage ...
LUA_MODULE := $(if $(filter pkg.valkey.lua-module,$(DEB_BUILD_PROFILES)),yes,no)

# Build jemalloc in parallel
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
	NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
	MAKEFLAGS += -j$(NUMJOBS)
	export MAKEFLAGS
endif

%:
	dh $@

override_dh_auto_clean:
	dh_auto_clean
	rm -f src/release.h debian/*.service
	rm -rf valkey-doc-$(VALKEY_DOC_VERSION) valkey-doc-$(VALKEY_DOC_VERSION).tar.gz

override_dh_auto_build:
ifeq ($(LUA_MODULE),yes)
	dh_auto_build -- V=1 USE_SYSTEM_JEMALLOC=yes USE_SYSTEMD=yes USE_JEMALLOC=yes BUILD_LUA=module PREFIX=/usr
else
	dh_auto_build -- V=1 USE_SYSTEM_JEMALLOC=yes USE_SYSTEMD=yes USE_JEMALLOC=yes PREFIX=/usr
endif

# Build documentation if not nodoc profile
ifeq (,$(filter nodoc,$(DEB_BUILD_PROFILES)))
	# Download and build valkey-doc if not present
	if [ ! -d valkey-doc-$(VALKEY_DOC_VERSION) ]; then \
		if [ ! -f valkey-doc-$(VALKEY_DOC_VERSION).tar.gz ]; then \
			wget -q https://github.com/valkey-io/valkey-doc/archive/$(VALKEY_DOC_VERSION)/valkey-doc-$(VALKEY_DOC_VERSION).tar.gz; \
		fi; \
		tar xzf valkey-doc-$(VALKEY_DOC_VERSION).tar.gz; \
	fi
	if [ -d valkey-doc-$(VALKEY_DOC_VERSION) ]; then \
		$(MAKE) -C valkey-doc-$(VALKEY_DOC_VERSION) VALKEY_ROOT=$(CURDIR) || true; \
		$(MAKE) -C valkey-doc-$(VALKEY_DOC_VERSION) html VALKEY_ROOT=$(CURDIR) || true; \
	fi
endif

override_dh_auto_test:
	# Tests disabled: the upstream test suite is not run during package
	# builds. Empty override so dh_auto_test is a no-op.

override_dh_auto_install:
	# Install binaries
	install -D -m 0755 src/valkey-server debian/tmp/usr/bin/valkey-server
	install -D -m 0755 src/valkey-cli debian/tmp/usr/bin/valkey-cli
	install -D -m 0755 src/valkey-benchmark debian/tmp/usr/bin/valkey-benchmark
ifeq ($(LUA_MODULE),yes)
	# Strip the build-time RPATH that upstream 9.1+ injects only in
	# BUILD_LUA=module mode via -Wl,-rpath,$(PREFIX)/lib:$(current_dir)/modules/lua.
	# The first entry is unnecessary (libvalkeylua.so is in /usr/lib which is
	# in the default loader search path) and the second leaks the absolute
	# build directory which lintian/dpkg-shlibdeps reject.
	chrpath -d debian/tmp/usr/bin/valkey-server
	chrpath -d debian/tmp/usr/bin/valkey-cli
	chrpath -d debian/tmp/usr/bin/valkey-benchmark
endif
	# valkey-check-aof and valkey-check-rdb are the same binary as valkey-server
	# (hardlinks in the source tree). Install as symlinks to avoid duplicate
	# .build-id debug files that cause dbgsym package conflicts.
	ln -sf valkey-server debian/tmp/usr/bin/valkey-check-aof
	ln -sf valkey-server debian/tmp/usr/bin/valkey-check-rdb
	
	# Sentinel is a symlink
	ln -sf valkey-server debian/tmp/usr/bin/valkey-sentinel
	
	# Install configuration files
	install -D -m 0640 valkey.conf debian/tmp/etc/valkey/valkey.conf
	install -D -m 0640 sentinel.conf debian/tmp/etc/valkey/sentinel.conf
	
	# Install development headers
	install -D -m 0644 src/valkeymodule.h debian/tmp/usr/include/valkeymodule.h
	install -D -m 0644 src/redismodule.h debian/tmp/usr/include/redismodule.h
	
	# Create Redis compatibility symlinks
	for bin in valkey-server valkey-cli valkey-benchmark valkey-check-aof valkey-check-rdb valkey-sentinel; do \
		redisbin=$$(echo $$bin | sed 's/valkey/redis/'); \
		ln -sf $$bin debian/tmp/usr/bin/$$redisbin; \
	done
	
	# Install documentation if built
ifeq (,$(filter nodoc,$(DEB_BUILD_PROFILES)))
	if [ -d valkey-doc-$(VALKEY_DOC_VERSION)/_build/html ]; then \
		install -d debian/tmp/usr/share/doc/valkey-doc; \
		cp -r valkey-doc-$(VALKEY_DOC_VERSION)/_build/html/* debian/tmp/usr/share/doc/valkey-doc/; \
	fi
	if [ -d valkey-doc-$(VALKEY_DOC_VERSION)/_build/man ]; then \
		install -d debian/tmp/usr/share/man; \
		cp -r valkey-doc-$(VALKEY_DOC_VERSION)/_build/man/* debian/tmp/usr/share/man/; \
	fi
endif
	
	# Generate systemd service files
	debian/bin/generate-systemd-service-files

override_dh_install:
	dh_install
ifeq ($(LUA_MODULE),yes)
	# Lua scripting engine module (opt-in via build profile
	# pkg.valkey.lua-module): valkey-server is built with
	# -DLUA_LIB=libvalkeylua.so and dlopens it at runtime. /usr/lib is on
	# the default loader search path. Installed directly into the package
	# (not via debian/tmp + a .install entry) so default builds without the
	# profile don't fail on the absent .so.
	install -D -m 0644 src/modules/lua/libvalkeylua.so debian/percona-valkey-server/usr/lib/libvalkeylua.so
	chrpath -d debian/percona-valkey-server/usr/lib/libvalkeylua.so 2>/dev/null || true
endif

override_dh_fixperms:
	dh_fixperms
	# Configuration files should be readable by valkey group only
	chmod 0640 debian/percona-valkey-server/etc/valkey/valkey.conf || true
	chmod 0640 debian/percona-valkey-sentinel/etc/valkey/sentinel.conf || true

override_dh_compress:
	dh_compress -Xredis-trib.rb

override_dh_installchangelogs:
	dh_installchangelogs --keep 00-RELEASENOTES

override_dh_installinit:
	dh_installinit -ppercona-valkey-server --name=valkey-server
	dh_installinit -ppercona-valkey-sentinel --name=valkey-sentinel

override_dh_installsystemd:
	dh_installsystemd -ppercona-valkey-server --name=valkey-server
	dh_installsystemd -ppercona-valkey-server --name=valkey-server@
	dh_installsystemd -ppercona-valkey-sentinel --name=valkey-sentinel
	dh_installsystemd -ppercona-valkey-sentinel --name=valkey-sentinel@

override_dh_builddeb:
	dh_builddeb -- -Zxz

.PHONY: override_dh_auto_build override_dh_auto_install override_dh_auto_test \
        override_dh_install override_dh_fixperms override_dh_compress \
        override_dh_installchangelogs override_dh_installinit \
        override_dh_installsystemd override_dh_builddeb
