# vmsig packaging — `make deb` builds TWO Debian packages from per-component install stages:
#   vmsig               — the signaling daemon + library + headers + systemd unit
#   libvgpu-perception  — the host-side vgpu perception S-lib (SEPARATE: not in vmsig)
# Private values are NOT baked in: pass them via the variables below (CI overrides them).
#
#   make deb LIBVMIE_PATH=/path/to/vmie VERSION=1.2.3 MAINTAINER="Name <addr>"

VERSION      ?= 0.0.0
MAINTAINER   ?= vmsig packaging <root@localhost>
# libvmie0 is vmie's runtime package (SONAME libvmie.so.0): both libvmsig.so and
# libvgpu-perception.so dynamically link it — a hard runtime dependency of each package.
DEPENDS      ?= libc6, libvmie0
ARCH         ?= amd64
LIBVMIE_PATH ?=

BUILD_DIR ?= .build-pkg
DIST      ?= $(CURDIR)/dist

.PHONY: deb clean

# vmie is found from a source tree (LIBVMIE_PATH) or, when empty, the installed libvmie-dev
# (system / CMAKE_PREFIX_PATH) — the CI path.
deb:
	cmake -S . -B $(BUILD_DIR) -DCMAKE_BUILD_TYPE=Release -DVMSIG_INSTALL=ON -DVMSIG_WITH_VMIE=ON \
	      $(if $(LIBVMIE_PATH),-DLIBVMIE_PATH=$(LIBVMIE_PATH),)
	cmake --build $(BUILD_DIR) -j
	mkdir -p $(DIST)
	# ---- package: vmsig (component `daemon`) ----
	rm -rf $(DIST)/stage-daemon
	DESTDIR=$(DIST)/stage-daemon cmake --install $(BUILD_DIR) --prefix /usr --component daemon
	mkdir -p $(DIST)/stage-daemon/DEBIAN
	sed -e 's/@VERSION@/$(VERSION)/' -e 's|@MAINTAINER@|$(MAINTAINER)|' -e 's/@DEPENDS@/$(DEPENDS)/' \
	    packaging/deb/vmsig/control.in > $(DIST)/stage-daemon/DEBIAN/control
	cp              packaging/deb/vmsig/conffiles $(DIST)/stage-daemon/DEBIAN/conffiles
	install -m 0755 packaging/deb/vmsig/postinst  $(DIST)/stage-daemon/DEBIAN/postinst
	install -m 0755 packaging/deb/vmsig/prerm     $(DIST)/stage-daemon/DEBIAN/prerm
	find $(DIST)/stage-daemon -type d -exec chmod g-s {} +
	dpkg-deb --root-owner-group --build $(DIST)/stage-daemon $(DIST)/vmsig_$(VERSION)_$(ARCH).deb
	# ---- package: libvgpu-perception0 (component `vgpu_runtime` — versioned .so) ----
	rm -rf $(DIST)/stage-vgpu0
	DESTDIR=$(DIST)/stage-vgpu0 cmake --install $(BUILD_DIR) --prefix /usr --component vgpu_runtime
	mkdir -p $(DIST)/stage-vgpu0/DEBIAN
	sed -e 's/@VERSION@/$(VERSION)/' -e 's|@MAINTAINER@|$(MAINTAINER)|' -e 's/@DEPENDS@/$(DEPENDS)/' \
	    packaging/deb/vgpu0/control.in > $(DIST)/stage-vgpu0/DEBIAN/control
	install -m 0755 packaging/deb/vgpu0/postinst $(DIST)/stage-vgpu0/DEBIAN/postinst
	find $(DIST)/stage-vgpu0 -type d -exec chmod g-s {} +
	dpkg-deb --root-owner-group --build $(DIST)/stage-vgpu0 $(DIST)/libvgpu-perception0_$(VERSION)_$(ARCH).deb
	# ---- package: libvgpu-perception-dev (component `vgpu_dev` — namelink + headers) ----
	rm -rf $(DIST)/stage-vgpu-dev
	DESTDIR=$(DIST)/stage-vgpu-dev cmake --install $(BUILD_DIR) --prefix /usr --component vgpu_dev
	mkdir -p $(DIST)/stage-vgpu-dev/DEBIAN
	sed -e 's/@VERSION@/$(VERSION)/' -e 's|@MAINTAINER@|$(MAINTAINER)|' \
	    -e 's/@DEPENDS@/libvgpu-perception0 (= $(VERSION))/' \
	    packaging/deb/vgpu-dev/control.in > $(DIST)/stage-vgpu-dev/DEBIAN/control
	find $(DIST)/stage-vgpu-dev -type d -exec chmod g-s {} +
	dpkg-deb --root-owner-group --build $(DIST)/stage-vgpu-dev $(DIST)/libvgpu-perception-dev_$(VERSION)_$(ARCH).deb
	@echo "built: vmsig + libvgpu-perception0 + libvgpu-perception-dev ($(VERSION))"

clean:
	rm -rf $(BUILD_DIR) $(DIST)
