# Makefile for Joomla Extensions # Copyright (C) 2026 Moko Consulting # SPDX-License-Identifier: GPL-3.0-or-later # # This is a reference Makefile for building Joomla extensions. # Copy this to your repository root as "Makefile" and customize as needed. # # Supports: Modules, Plugins, Components, Packages, Templates # ============================================================================== # CONFIGURATION - Customize these for your extension # ============================================================================== # Extension Configuration EXTENSION_NAME := mokojoomstorelocator EXTENSION_TYPE := package # Options: module, plugin, component, package, template EXTENSION_VERSION := 1.0.0 # Module Configuration (for modules only) MODULE_TYPE := site # Options: site, admin # Plugin Configuration (for plugins only) PLUGIN_GROUP := system # Options: system, content, user, authentication, etc. # Directories SRC_DIR := . BUILD_DIR := build DIST_DIR := dist DOCS_DIR := docs # Joomla Installation (for local testing - customize paths) JOOMLA_ROOT := /var/www/html/joomla JOOMLA_VERSION := 5 # Tools PHP := php COMPOSER := composer NPM := npm PHPCS := vendor/bin/phpcs PHPCBF := vendor/bin/phpcbf PHPUNIT := vendor/bin/phpunit ZIP := zip # Coding Standards PHPCS_STANDARD := Joomla # Colors for output COLOR_RESET := \033[0m COLOR_GREEN := \033[32m COLOR_YELLOW := \033[33m COLOR_BLUE := \033[34m COLOR_RED := \033[31m # ============================================================================== # TARGETS # ============================================================================== .PHONY: help help: ## Show this help message @echo "$(COLOR_BLUE)╔════════════════════════════════════════════════════════════╗$(COLOR_RESET)" @echo "$(COLOR_BLUE)║ Joomla Extension Makefile ║$(COLOR_RESET)" @echo "$(COLOR_BLUE)╚════════════════════════════════════════════════════════════╝$(COLOR_RESET)" @echo "" @echo "Extension: $(EXTENSION_NAME) ($(EXTENSION_TYPE)) v$(EXTENSION_VERSION)" @echo "" @echo "$(COLOR_GREEN)Available targets:$(COLOR_RESET)" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " $(COLOR_BLUE)%-20s$(COLOR_RESET) %s\n", $$1, $$2}' @echo "" .PHONY: lint lint: ## Run PHP linter (syntax check) @echo "$(COLOR_BLUE)Running PHP linter...$(COLOR_RESET)" @find . -name "*.php" ! -path "./vendor/*" ! -path "./node_modules/*" ! -path "./$(BUILD_DIR)/*" \ -exec $(PHP) -l {} \; | grep -v "No syntax errors" || true @echo "$(COLOR_GREEN)✓ PHP linting complete$(COLOR_RESET)" .PHONY: validate validate: lint ## Run all validation checks @echo "$(COLOR_GREEN)✓ All validation checks passed$(COLOR_RESET)" .PHONY: clean clean: ## Clean build artifacts @echo "$(COLOR_BLUE)Cleaning build artifacts...$(COLOR_RESET)" @rm -rf $(BUILD_DIR) $(DIST_DIR) @echo "$(COLOR_GREEN)✓ Build artifacts cleaned$(COLOR_RESET)" MOKO_PLATFORM ?= $(or $(wildcard ../moko-platform),$(wildcard $(HOME)/moko-platform),$(wildcard /opt/moko-platform)) MINIFY_SCRIPT := $(MOKO_PLATFORM)/build/minify.js .PHONY: minify minify: ## Minify CSS/JS assets @echo "Minifying assets..." @if [ -f "$(MINIFY_SCRIPT)" ]; then \ node "$(MINIFY_SCRIPT)" $(SRC_DIR); \ elif [ -f "scripts/minify.js" ]; then \ node scripts/minify.js; \ else \ echo "No minify script found"; \ fi .PHONY: build build: clean validate ## Build package ZIP containing all sub-extensions @echo "$(COLOR_BLUE)Building Joomla package...$(COLOR_RESET)" @mkdir -p $(DIST_DIR) $(BUILD_DIR)/pkg_$(EXTENSION_NAME) @# Build each sub-extension into its own ZIP @for ext in src/packages/*/; do \ EXT_NAME=$$(basename $$ext); \ echo " Packaging $$EXT_NAME..."; \ mkdir -p $(BUILD_DIR)/$$EXT_NAME; \ rsync -a --exclude='.git*' "$$ext" "$(BUILD_DIR)/$$EXT_NAME/"; \ cd $(BUILD_DIR) && $(ZIP) -r "pkg_$(EXTENSION_NAME)/$$EXT_NAME.zip" "$$EXT_NAME" && cd ..; \ done @# Copy the package manifest @cp src/pkg_mokojoomstorelocator.xml $(BUILD_DIR)/pkg_$(EXTENSION_NAME)/ @if [ -f "src/script.php" ]; then cp src/script.php $(BUILD_DIR)/pkg_$(EXTENSION_NAME)/; fi @# Create the final package ZIP @cd $(BUILD_DIR) && $(ZIP) -r "../$(DIST_DIR)/pkg_$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip" "pkg_$(EXTENSION_NAME)" @echo "$(COLOR_GREEN)✓ Package created: $(DIST_DIR)/pkg_$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip$(COLOR_RESET)" .PHONY: release release: validate build ## Create a release (validate + build) @echo "$(COLOR_GREEN)✓ Release package ready$(COLOR_RESET)" .PHONY: version version: ## Display version information @echo "$(COLOR_BLUE)Extension Information:$(COLOR_RESET)" @echo " Name: $(EXTENSION_NAME)" @echo " Type: $(EXTENSION_TYPE)" @echo " Version: $(EXTENSION_VERSION)" # Default target .DEFAULT_GOAL := help