summaryrefslogtreecommitdiffstats
path: root/Makefile
blob: a2e9a1880965d95614862724c531be24d922f0c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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)