# Makefile for pg_morbac PostgreSQL Extension # Multi-OrBAC: Organization-Based Access Control PROJECT_FILENAME = pg_morbac # Read version from control file using centralized script PROJECT_VERSION = $(shell ./tools/get_version.sh $(PROJECT_FILENAME).control) # Docker configuration DOCKER_CONTAINER ?= postgres DOCKER_PORT ?= 5432 # For development, work on source files in src/ SRC_DIR = src OUTPUT_DEV_FILENAME = $(PROJECT_FILENAME).sql OUTPUT_RELEASE_FILENAME = $(PROJECT_FILENAME)--$(PROJECT_VERSION).sql # PostgreSQL Extension build PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) # Custom targets # Build the extension SQL file from source components .PHONY: build build: @./tools/build.sh $(SRC_DIR) $(OUTPUT_DEV_FILENAME) @if [ ! -f $(OUTPUT_DEV_FILENAME) ]; then \ echo "Error: Build failed" >&2; \ exit 1; \ fi # Rename development file to versioned release file .PHONY: release release: build mv $(OUTPUT_DEV_FILENAME) $(OUTPUT_RELEASE_FILENAME) @echo "Release $(PROJECT_VERSION) built at $(OUTPUT_RELEASE_FILENAME)." # Build and install extension in PostgreSQL .PHONY: install install: build @cp $(OUTPUT_DEV_FILENAME) $(OUTPUT_RELEASE_FILENAME) @./tools/install.sh $(PROJECT_FILENAME) $(PROJECT_VERSION) .PHONY: test test: build @dropdb morbac_test 2>/dev/null || true @createdb morbac_test @./tools/test.sh morbac_test $(OUTPUT_DEV_FILENAME) @dropdb morbac_test # Uninstall extension from PostgreSQL .PHONY: uninstall uninstall: @echo "Uninstalling $(PROJECT_FILENAME)..." @./tools/uninstall.sh $(PROJECT_FILENAME) # Clean up generated files .PHONY: clean clean: @rm -f $(OUTPUT_DEV_FILENAME) $(OUTPUT_RELEASE_FILENAME) # Start PostgreSQL Docker container .PHONY: docker-start docker-start: @./tools/docker_start.sh $(DOCKER_CONTAINER) $(DOCKER_PORT) # Stop PostgreSQL Docker container .PHONY: docker-stop docker-stop: @./tools/docker_stop.sh $(DOCKER_CONTAINER) # Remove PostgreSQL Docker container .PHONY: docker-clean docker-clean: @./tools/docker_clean.sh $(DOCKER_CONTAINER) # Build and install extension in Docker container .PHONY: docker-install docker-install: build docker-start @cp $(OUTPUT_DEV_FILENAME) $(OUTPUT_RELEASE_FILENAME) @./tools/docker_install.sh $(DOCKER_CONTAINER) $(PROJECT_FILENAME) $(PROJECT_VERSION) # Uninstall extension from Docker container .PHONY: docker-uninstall docker-uninstall: @./tools/docker_uninstall.sh $(DOCKER_CONTAINER) $(PROJECT_FILENAME) # Build and run tests in Docker container .PHONY: docker-test docker-test: build docker-start @./tools/docker_test.sh $(DOCKER_CONTAINER) morbac_test $(OUTPUT_DEV_FILENAME) # Show help .PHONY: help help: @echo "pg_morbac Makefile - Build and manage the PostgreSQL extension" @echo "" @echo "Makefile targets:" @echo " make build - Build $(OUTPUT_DEV_FILENAME) from src/" @echo " make release - Build versioned $(PROJECT_FILENAME)--X.Y.Z.sql from src/" @echo " make test - Build and run test suite" @echo " make install - Build and install $(PROJECT_FILENAME) to PostgreSQL" @echo " make uninstall - Uninstall $(PROJECT_FILENAME) from PostgreSQL" @echo " make clean - Clean up generated files" @echo " make help - Show this help" @echo "" @echo "Docker targets:" @echo " make docker-start - Start PostgreSQL Docker container" @echo " make docker-stop - Stop PostgreSQL Docker container" @echo " make docker-clean - Remove PostgreSQL Docker container" @echo " make docker-install - Build and install extension in Docker container" @echo " make docker-uninstall - Uninstall extension from Docker container" @echo " make docker-test - Build and run test suite in Docker container" @echo ""