#!/usr/bin/make -f

export DEB_BUILD_MAINT_OPTIONS = hardening=-all
export CFLAGS =
export CXXFLAGS =
export LDFLAGS =

PNAME           := msr-safe
VERSION         := 1.7.0
SRCDIR          := $(CURDIR)/$(PNAME)-$(VERSION)
PKG             := $(CURDIR)/debian/$(PNAME)-ohpc
KVERSION        := $(shell ls /usr/src/ 2>/dev/null | grep "linux-headers-" | grep -v common | sort -V | tail -1 | sed "s/linux-headers-//")
KDIR            := /usr/src/linux-headers-$(KVERSION)

%:
	dh $@

override_dh_auto_configure:
	test -s SOURCES/$(PNAME)-$(VERSION).tar.gz || \
		wget -q -O SOURCES/$(PNAME)-$(VERSION).tar.gz \
			https://github.com/LLNL/msr-safe/archive/v$(VERSION).tar.gz
	rm -rf $(SRCDIR)
	tar xf SOURCES/$(PNAME)-$(VERSION).tar.gz
	# Create symlink so kernel module build can find headers (may fail as non-root in OBS chroot)
	mkdir -p /lib/modules/$(KVERSION) 2>/dev/null || true
	ln -sfn $(KDIR) /lib/modules/$(KVERSION)/build 2>/dev/null || true

override_dh_auto_build:
	# Fix Makefile to use our KVERSION instead of uname -r
	sed -i 's|$$(shell uname -r)|$(KVERSION)|g' $(SRCDIR)/Makefile
	# Disable -Werror for kernel module build (GCC 14 pointer type warnings)
	sed -i '1i ccflags-y += -Wno-error' $(SRCDIR)/Makefile
	# Patch for kernel 6.4+ API: class_create lost owner parameter, devnode const qualifier
	# Apply to ALL source files - match both old mode_t and new umode_t signatures
	find $(SRCDIR) -name '*.c' -exec sed -i 's/class_create(THIS_MODULE, /class_create(/' {} +
	# Patch any function that takes (struct device *, umode_t *) to use const struct device *
	find $(SRCDIR) -name '*.c' -exec sed -i 's/(struct device \*\([a-z_]*\), umode_t \*/(const struct device *\1, umode_t */g' {} +
	find $(SRCDIR) -name '*.c' -exec sed -i 's/(struct device \*\([a-z_]*\), mode_t \*/(const struct device *\1, mode_t */g' {} +
	cd $(SRCDIR) && $(MAKE)
	cd $(SRCDIR) && make msrsave

override_dh_auto_install:
	# Install kernel module
	mkdir -p $(PKG)/lib/modules/$(KVERSION)/extra/msr-safe
	install -m 644 $(SRCDIR)/msr-safe.ko $(PKG)/lib/modules/$(KVERSION)/extra/msr-safe/
	# Install userspace tools
	mkdir -p $(PKG)/usr/sbin
	install -m 755 $(SRCDIR)/msrsave/msrsave $(PKG)/usr/sbin/
	# Install allowlists
	mkdir -p $(PKG)/usr/share/msr-safe/allowlists
	install -m 644 $(SRCDIR)/allowlists/* $(PKG)/usr/share/msr-safe/allowlists/ || true
	# Install systemd service
	mkdir -p $(PKG)/lib/systemd/system
	install -m 644 $(SRCDIR)/msr-safe.service $(PKG)/lib/systemd/system/ || true
	# Install udev rules
	mkdir -p $(PKG)/lib/udev/rules.d
	install -m 644 $(SRCDIR)/60-msr-safe.rules $(PKG)/lib/udev/rules.d/ || true

override_dh_auto_clean:
	rm -rf $(SRCDIR)

override_dh_usrlocal:

override_dh_shlibdeps:
	dh_shlibdeps -- --ignore-missing-info || true

override_dh_strip:
	dh_strip --no-automatic-dbgsym || true

override_dh_auto_test:
