File: Makefile

package info (click to toggle)
libsoptions-java 0.0~svn141-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 176 kB
  • sloc: java: 257; makefile: 62; sh: 16
file content (106 lines) | stat: -rw-r--r-- 2,711 bytes parent folder | download
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
103
104
105
106
# --*- Makefile -*--
#------------------------------------------------------------------------------
#$Author: saulius $
#$Date: 2017-11-12 07:05:31 -0500 (Sun, 12 Nov 2017) $ 
#$Revision: 88 $
#$URL: svn://saulius-grazulis.lt/libraries/trunk/java/SOptions/Makefile $
#------------------------------------------------------------------------------

MAKECONF_FILES = ${filter-out %~, ${wildcard Makeconf*}}

ifneq ("${MAKECONF_FILES}","")
include ${MAKECONF_FILES}
endif

#------------------------------------------------------------------------------

SRC_DIR = .
GEN_DIR = generated
SCRIPT_DIR = scripts
CLASS_DIR  = classes

JSOURCES = $(wildcard ${SRC_DIR}/*.java)
JFILES = ${JSOURCES} ${GJAVA}
CFILES = ${JFILES:${SRC_DIR}/%.java=${CLASS_DIR}/%.class}

CLASSPATH := $(shell find -name \*.jar | tr "\n" ":")${SRC_DIR}:${CLASS_DIR}:${CLASSPATH}

export CLASSPATH

JAVAC = javac

.PHONY: all clean distclean cleanAll

.PRECIOUS: ${GEN_DIR}/%.java

all: ${CFILES} ${JFILES}

#------------------------------------------------------------------------------

ifneq ("${MAKELOCAL_FILES}","")
include ${MAKELOCAL_FILES}
endif

${CLASS_DIR}/%.class: ${SRC_DIR}/%.java
	${JAVAC} ${JFLAGS} $< -d ${CLASS_DIR}

#------------------------------------------------------------------------------

JARFILE = soptions.jar

.PHONY: jar display

jar: ${JARFILE}

display:
	echo ${JARFILE}

%.jar: ${CFILES}
	jar cvf $@ $(patsubst ${CLASS_DIR}/%.class,${CLASS_DIR}/ %.class,$(addprefix -C ,$^)) \
		-C ${CLASS_DIR} SOptions\$$1.class

#------------------------------------------------------------------------------
# Tests

.PHONY: test tests out output outputs

TEST_DIR     = tests/cases
TST_OUT_DIR  = tests/outputs
TST_DIF_DIR  = tests/outputs

TEST_FILES   = $(wildcard ${TEST_DIR}/*.sh)
TEST_OUTPUTS = ${TEST_FILES:${TEST_DIR}/%.sh=${TST_OUT_DIR}/%.out}
TEST_DIFFS   = ${TEST_FILES:${TEST_DIR}/%.sh=${TST_DIF_DIR}/%.diff}

test tests: ${TEST_DIFFS}

out output outputs: ${TEST_OUTPUTS}

${TST_OUT_DIR}/%.out: ${TEST_DIR}/%.sh
	@test -f $@ || ./$< 2>&1 | tee $@
	@test -f $@ && touch $@

${TST_DIF_DIR}/%.diff: ${TEST_DIR}/%.sh ${TST_OUT_DIR}/%.out ${CFILES}
	@printf "%-30s: " $(notdir $<)
	@./$< 2>&1 | diff $(word 2,$^) - > $@; \
	if [ $$? = 0 ]; then echo OK; \
	else echo FAILED:; cat $@; fi

#------------------------------------------------------------------------------

.PHONY: fail listdiff

fail listdiff: # test
	@-( test -d ${TST_DIF_DIR} && \
	    ls -l ${TST_DIF_DIR}/*.diff | awk '{if( $$5 > 0 ) print}' ) || \
	    true

#------------------------------------------------------------------------------

clean:
	rm -f ${TEST_DIFFS}

distclean cleanAll: clean
	rm -f ${CFILES}
	rm -f ${GJAVA}
	rm -f ${JARFILE}