JAVA ?= java JAVAC ?= javac JAR ?= jar JAVADOC ?= javadoc VERSION := 0.1.0 MAIN_CLASS := is.cep.cepis.Main TEST_RUNNER := is.cep.cepis.TestRunner SRC_DIR := src/main/java TEST_SRC_DIR := src/test/java BUILD_DIR := build CLASSES_DIR := $(BUILD_DIR)/classes TEST_CLASSES_DIR := $(BUILD_DIR)/test-classes DOCS_DIR := $(BUILD_DIR)/docs JAR_FILE := $(BUILD_DIR)/cepis-$(VERSION).jar SOURCES_JAR := $(BUILD_DIR)/cepis-$(VERSION)-sources.jar SOURCES := $(shell find $(SRC_DIR) -name '*.java') TEST_SOURCES := $(shell find $(TEST_SRC_DIR) -name '*.java') JAVAC_FLAGS := --release 17 -encoding UTF-8 -Xlint:all JAVA_FLAGS := -Dfile.encoding=UTF-8 .DEFAULT_GOAL := help .PHONY: help test lint build docs check clean help: @echo 'Targets:' @echo ' test compile and run the suite against a local HTTP server' @echo ' lint javac -Xlint:all -Werror + javadoc doclint (read-only)' @echo ' build the jar into $(BUILD_DIR)' @echo ' docs the API documentation into $(DOCS_DIR)' @echo ' check lint + test + build, in that order' @echo ' clean remove $(BUILD_DIR)' @echo @echo 'The JDK ships no formatter, so there is no format target.' @echo 'Nothing to install first: the library and the suite have no dependencies.' $(BUILD_DIR)/.classes: $(SOURCES) @mkdir -p $(CLASSES_DIR) $(JAVAC) $(JAVAC_FLAGS) -d $(CLASSES_DIR) $(SOURCES) @touch $@ $(BUILD_DIR)/.test-classes: $(BUILD_DIR)/.classes $(TEST_SOURCES) @mkdir -p $(TEST_CLASSES_DIR) $(JAVAC) $(JAVAC_FLAGS) -cp $(CLASSES_DIR) -d $(TEST_CLASSES_DIR) $(TEST_SOURCES) @touch $@ test: $(BUILD_DIR)/.test-classes $(JAVA) $(JAVA_FLAGS) -cp $(CLASSES_DIR):$(TEST_CLASSES_DIR) $(TEST_RUNNER) lint: @mkdir -p $(BUILD_DIR)/lint $(JAVAC) $(JAVAC_FLAGS) -Werror -d $(BUILD_DIR)/lint $(SOURCES) $(JAVAC) $(JAVAC_FLAGS) -Werror -cp $(BUILD_DIR)/lint -d $(BUILD_DIR)/lint $(TEST_SOURCES) $(JAVADOC) -quiet -Xdoclint:all,-missing -Werror --release 17 -encoding UTF-8 \ -d $(BUILD_DIR)/lint-docs $(SOURCES) build: $(JAR_FILE) $(SOURCES_JAR) $(JAR_FILE): $(BUILD_DIR)/.classes $(JAR) --create --file $@ --main-class $(MAIN_CLASS) -C $(CLASSES_DIR) . $(SOURCES_JAR): $(SOURCES) $(JAR) --create --file $@ -C $(SRC_DIR) . docs: $(SOURCES) $(JAVADOC) -quiet --release 17 -encoding UTF-8 -d $(DOCS_DIR) $(SOURCES) check: lint test build clean: rm -rf $(BUILD_DIR)