Repository navigation
Expand file tree
/
Copy pathmakefile
More file actions
102 lines (85 loc) · 2.99 KB
/
Copy pathmakefile
File metadata and controls
102 lines (85 loc) · 2.99 KB
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# Java Compiler, Java Virtual Machine, JUnit Console, and JUnit Libraries
JavaC = javac
JavaVM = java
JUnitC = ./zapsdtest/zjunit/junit-platform-console-standalone-1.12.1.jar
JUnitL = ./zapsdtest/zjunit/*
# Source files
MainSrc := Main.java
APSDSrc := $(shell find apsd -name "*.java")
TestSrc := $(shell find zapsdtest -name "*.java")
# Class files
MainCls := $(MainSrc:.java=.class)
APSDCls := $(APSDSrc:.java=.class)
TestCls := $(TestSrc:.java=.class)
# Phony targets
.PHONY: all main run test runtest clean drun
# Default target
all: main
# Compile main and apsd sources
main: $(MainCls) $(APSDCls)
@echo "Run with: make run"
# Execute main
run: main
$(JavaVM) -cp .:$(JUnitC) Main $(ARGS)
# Compile tests and apsd sources
test: $(TestCls) $(APSDCls)
@echo "Run tests with: make runtest [ClassName]"
# Capture arguments after 'runtest'
RUNTEST_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
RUNTEST_CLASS := $(word 1,$(RUNTEST_ARGS))
# Execute JUnit tests
runtest: test
@if [ -z "$(RUNTEST_CLASS)" ]; then \
$(JavaVM) -jar $(JUnitC) execute --scan-class-path --details tree --class-path .; \
else \
JAVA_FILE=$$(find zapsdtest/simpletest -name "$(RUNTEST_CLASS).java" 2>/dev/null | head -1); \
if [ -z "$$JAVA_FILE" ]; then \
echo "Error: Test class '$(RUNTEST_CLASS)' not found in zapsdtest/simpletest"; \
exit 1; \
fi; \
FULL_CLASS=$$(echo "$$JAVA_FILE" | sed 's|/|.|g' | sed 's|\.java$$||'); \
echo "Found: $$FULL_CLASS"; \
$(JavaVM) -jar $(JUnitC) execute --select-class=$$FULL_CLASS --details tree --class-path .; \
fi
# Build groups with a single javac invocation
$(MainCls): $(MainSrc) $(APSDCls)
$(JavaC) -cp .:$(JUnitL) $(MainSrc)
$(APSDCls): $(APSDSrc)
$(JavaC) -cp . $(APSDSrc)
$(TestCls): $(TestSrc) $(APSDCls)
$(JavaC) -cp .:$(JUnitL) $(TestSrc)
# Cleaning
clean:
clear; find . -name "*.class" -type f -exec rm -v {} \;
# Dynamic test runner: make drun ClassName [MethodName]
# Examples:
# make drun DynVectorITest
# make drun DynVectorITest ExpandFromZero
# make drun LLOrderedSetITest Empty
# Capture arguments after 'drun'
DRUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
DRUN_CLASS := $(word 1,$(DRUN_ARGS))
DRUN_METHOD := $(word 2,$(DRUN_ARGS))
drun: test
@if [ -z "$(DRUN_CLASS)" ]; then \
echo "Usage: make drun ClassName [MethodName]"; \
echo "Examples:"; \
echo " make drun DynVectorITest"; \
echo " make drun DynVectorITest ExpandFromZero"; \
exit 1; \
fi; \
JAVA_FILE=$$(find zapsdtest/simpletest -name "$(DRUN_CLASS).java" 2>/dev/null | head -1); \
if [ -z "$$JAVA_FILE" ]; then \
echo "Error: Test class '$(DRUN_CLASS)' not found in zapsdtest/simpletest"; \
exit 1; \
fi; \
FULL_CLASS=$$(echo "$$JAVA_FILE" | sed 's|/|.|g' | sed 's|\.java$$||'); \
echo "Found: $$FULL_CLASS"; \
if [ -z "$(DRUN_METHOD)" ]; then \
$(JavaVM) -cp .:$(JUnitL) Main test-class $$FULL_CLASS; \
else \
$(JavaVM) -cp .:$(JUnitL) Main test-filter $$FULL_CLASS $(DRUN_METHOD); \
fi
# Prevent make from treating arguments as targets
%:
@: