APPNAME=named-shm
VERSION=0.1.0
BUILDDIR=builddir
SELINUXDIR=policy
ARTIFACTSDIR=artifacts

ROOT_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))

clean:
	rm -rf $(BUILDDIR)
	rm -rf $(ARTIFACTSDIR)
	rm -rf ./rpmbuild
	rm -rf ./$(APPNAME)-$(VERSION)

build-artifacts: clean build-server build-client build-selinux

build-rpm: build-artifacts
	mkdir -p rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
	mkdir -p $(APPNAME)-$(VERSION)
	cp -r src Makefile conf.selcraft.yaml systemd qm $(APPNAME).spec $(APPNAME)-qm.spec shm-test-policy-selinux.fc.append $(APPNAME)-$(VERSION)/ 2>/dev/null || true
	tar czf rpmbuild/SOURCES/$(APPNAME)-$(VERSION).tar.gz $(APPNAME)-$(VERSION)
	cp $(APPNAME).spec $(APPNAME)-qm.spec rpmbuild/SPECS/
	rpmbuild --define "_topdir $(ROOT_DIR)/rpmbuild" -ba rpmbuild/SPECS/$(APPNAME).spec
	rpmbuild --define "_topdir $(ROOT_DIR)/rpmbuild" -ba rpmbuild/SPECS/$(APPNAME)-qm.spec
	mkdir -p $(ARTIFACTSDIR)
	cp rpmbuild/RPMS/*/*.rpm $(ARTIFACTSDIR)/
	@echo "RPM created in $(ARTIFACTSDIR)/"

build: build-rpm

build-server:
	mkdir -p $(BUILDDIR)
	gcc -g -Wextra -Werror src/server.c -o $(BUILDDIR)/server
	chmod +x $(BUILDDIR)/server

build-client:
	mkdir -p $(BUILDDIR)
	gcc -g -Wextra -Werror src/client.c -o $(BUILDDIR)/client
	chmod +x $(BUILDDIR)/client

build-selinux:
	mkdir -p $(BUILDDIR)/$(SELINUXDIR)
	PYTHONPATH=../../../../ python3 -m selcraft.selcraft generate --config=conf.selcraft.yaml
	cp out/* $(BUILDDIR)/$(SELINUXDIR)
	@# Append custom .fc rules if they exist
	@if [ -f shm-test-policy-selinux.fc.append ]; then \
		echo "Appending custom .fc rules..."; \
		cat shm-test-policy-selinux.fc.append >> $(BUILDDIR)/$(SELINUXDIR)/shm-test-policy-selinux.fc; \
	fi
	cd $(BUILDDIR)/$(SELINUXDIR) && make build

format:
	clang-format --sort-includes -i src/server.c
	clang-format --sort-includes -i src/client.c
	clang-format --sort-includes -i src/common.h

container-build-policy:
	podman build -f containers/policy -t shm-policy_build ./policy
	podman run --privileged -v ./policy:/var/shm-policy shm-policy_build:latest /bin/bash -c "cd /var/shm-policy; make rpm"
