3 # > NAME: main program name (for manual, jar, doc...)
4 # > MAIN: main source to compile without the 'src/' prefix nor the '.java' ext
5 # > MORE: more sources to compile to generate the full program
6 # > TEST: list of all test programs to compile and run (same format as MORE)
7 # > JAR_FLAGS : list of paths to include in the jar file (`-C dir path`)
8 # > SJAR_FLAGS: list of paths to include in the source jar file (`-C dir path`)
9 # > PREFIX: the usual prefix to (un)install to -- you may of course override it
12 MAIN
= be
/nikiroo
/fanfix
/Main
13 TEST
= be
/nikiroo
/fanfix
/tests
/Test
14 JAR_MISC
= -C .
/ LICENSE
-C .
/ VERSION
-C libs
/ licenses
15 JAR_FLAGS
+= -C bin
/ be
-C bin
/ org
$(JAR_MISC
)
16 SJAR_FLAGS
+= -C src
/ be
-C src
/ org
$(JAR_MISC
)
21 # Special Options for this program: you can modify the previous var if needed
22 # > UI=android (or UI=awt by default)
25 MORE
+= be
/nikiroo
/utils
/android
/ImageUtilsAndroid
26 TEST
+= be
/nikiroo
/utils
/android
/test/TestAndroid
28 MORE
+= be
/nikiroo
/utils
/ui
/ImageUtilsAwt
29 MORE
+= be
/nikiroo
/utils
/ui
/ImageTextAwt
30 TEST
+= be
/nikiroo
/utils
/ui
/test/TestUI
33 ################################################################################
36 JAVAC_FLAGS
+= -encoding UTF-8
-d .
/bin
/ -cp .
/src
/
38 JAVA_FLAGS
+= -cp .
/bin
/
44 JAVAC_FLAGS
+= -Xlint
:deprecation
-g
47 .PHONY
: all build run
clean mrpropre mrpropre love debug doc man
test run-test \
48 check_time jar sjar resources test-resources libs
54 @echo
">>>>>>>>>> Checking lastest sources/build times..."
55 @cp
-a
`find src -type f -printf "%T@ %p\n" \
56 | sort -n | cut -d' ' -f 2- | tail -n 1` latest_src
57 @cp
-a
`find libs -type f -printf "%T@ %p\n" \
58 | sort -n | cut -d' ' -f 2- | tail -n 1` latest_lib
59 @cp
-a
`find . \( -wholename VERSION -o -name '*.md' -o \
60 \( -wholename './src/*' -a ! -name '*.java' \
61 -a ! -wholename '*/test/*' \)\
63 -type f -printf "%T@ %p\n" 2>/dev/null \
64 | sort -n | cut -d' ' -f 2- | tail -n 1` latest_rsc
67 --time-style
=+@
%Y-
%m-
%d\
%H
:%M
:%S
-lt | cut
-f2-
-d@
69 build
: check_time resources latest_bin
70 latest_bin
: latest_src
72 @echo
">>>>>>>>>> Building sources..."
73 $(JAVAC
) $(JAVAC_FLAGS
) "src/$(MAIN).java"
74 @
[ "$(MORE)" = "" ] || for sup in
$(MORE
); do \
75 echo
$(JAVAC
) $(JAVAC_FLAGS
) "src/$$sup.java"; \
76 $(JAVAC
) $(JAVAC_FLAGS
) "src/$$sup.java"; \
81 test: build test-resources latest_tst
82 latest_tst
: latest_src
84 @echo
">>>>>>>>>> Building all tests: $(TEST)..."
85 @if
[ "$(TEST)" = "" ]; then \
86 echo No
test sources defined.
; \
88 for tst in
$(TEST
); do \
89 echo
$(JAVAC
) $(JAVAC_FLAGS
) "src/$$tst.java"; \
90 $(JAVAC
) $(JAVAC_FLAGS
) "src/$$tst.java"; \
96 jar
: libs resources
$(NAME
).jar
97 $(NAME
).jar
: latest_bin
99 @echo
">>>>>>>>>> Generating $@..."
100 @if
[ -d libs
/bin
/ ]; then \
101 echo cp
-r libs
/bin
/* bin
/; \
102 cp
-r libs
/bin
/* bin
/; \
105 @echo
"Main-Class: `echo "$(MAIN
)" | sed 's:/:.:g'`" > bin
/manifest
106 @echo
>> bin
/manifest
107 $(JAR
) cfm
$(NAME
).jar bin
/manifest
-C .
/ *.md
$(JAR_FLAGS
)
108 @if
[ -e VERSION
]; then \
109 echo cp
$(NAME
).jar
"$(NAME)-`cat VERSION`.jar"; \
110 cp
$(NAME
).jar
"$(NAME)-`cat VERSION`.jar"; \
113 sjar
: libs
$(NAME
)-sources.jar
114 $(NAME
)-sources.jar
: latest_src
116 @echo
">>>>>>>>>> Generating $@..."
118 $(JAR
) cfm
$(NAME
)-sources.jar \
119 bin
/manifest
-C .
/ *.md
$(SJAR_FLAGS
);
120 @if
[ -e VERSION
]; then \
121 echo cp
$(NAME
)-sources.jar \
122 "$(NAME)-`cat VERSION`-sources.jar"; \
123 cp
$(NAME
)-sources.jar \
124 "$(NAME)-`cat VERSION`-sources.jar"; \
128 libs
: check_time latest_lib
132 @echo
">>>>>>>>>> Extracting sources from libs..."
134 for lib in ..
/libs
/*-sources.jar \
135 ..
/libs
/*-sources.patch.jar
; do \
136 if
[ "$$lib" != '../libs/*-sources.jar' \
137 -a
"$$lib" != '../libs/*-sources.patch.jar' ]; \
139 echo cd src \
&\
& jar xf
"$$lib"; \
146 resources
: check_time libs latest_rsc
147 latest_rsc
: bin
/VERSION
150 @echo
">>>>>>>>>> Copying resources and documentation into bin/..."
152 @if
! ls
*.md
2>/dev
/null
2>&1; then \
153 echo touch bin
/no-documentation.md
; \
154 touch bin
/no-documentation.md
; \
159 @cd src
&& find . | grep
-v
'\.java$$' \
160 | grep
-v
'/test/' | while read
-r ln
; do \
161 if
[ -f
"$$ln" ]; then \
162 dir="`dirname "$$ln"`"; \
163 mkdir
-p
"../bin/$$dir" ; \
164 echo cp
"$$ln" "../bin/$$ln" ; \
165 cp
"$$ln" "../bin/$$ln" ; \
170 test-resources
: check_time resources latest_tsc
171 latest_tsc
: latest_ttt
174 @echo
">>>>>>>>>> Copying test resources into bin/..."
175 @cd src
&& find . | grep
-v
'\.java$$' \
176 | grep
'/test/' | while read
-r ln
; do \
177 if
[ -f
"$$ln" ]; then \
178 dir="`dirname "$$ln"`"; \
179 mkdir
-p
"../bin/$$dir" ; \
180 echo cp
"$$ln" "../bin/$$ln" ; \
181 cp
"$$ln" "../bin/$$ln" ; \
189 @echo
">>>>>>>>>> Manual of $(NAME): $(MAKECMDGOALS)..."
190 @
$(MAKE
) -f man.d
$(MAKECMDGOALS
) NAME
=$(NAME
)
195 @echo
">>>>>>>>>> Running $(NAME)..."
196 $(JAVA
) $(JAVA_FLAGS
) $(MAIN
)
201 @echo
">>>>>>>>>> Running tests: $(TEST)..."
202 @
[ "$(TEST)" != "" ] || echo No
test sources defined.
203 @if
[ "`whereis tput`" = "tput:" ]; then \
208 ok
="`tput bold`[`tput setf 2` OK `tput init``tput bold`]`tput init`"; \
209 ko
="`tput bold`[`tput setf 4` !! `tput init``tput bold`]`tput init`"; \
210 cols
="`tput cols`"; \
212 [ "$(TEST)" = "" ] ||
( \
214 for
test in
$(TEST
); do \
215 echo
$(JAVA
) $(JAVA_FLAGS
) \
216 "$$test" "$$cols" "$$ok" "$$ko"; \
217 $(JAVA
) $(JAVA_FLAGS
) "$$test" "$$cols" "$$ok" "$$ko"; \
224 @echo
">>>>>>>>>> Generating documentation for $(NAME)..."
229 $(MAKE
) $(MAKECMDGOALS
) PREFIX
=$(PREFIX
) NAME
=$(NAME
) DEBUG
=1
234 @echo
">>>>>>>>>> Cleaning $(NAME)..."
236 @for lib in libs
/*-sources.jar libs
/*-sources.patch.jar
; do \
237 if
[ "$$lib" != 'libs/*-sources.jar' \
238 -a
"$$lib" != 'libs/*-sources.patch.jar' ]; \
240 echo Cleaning
`basename "$$lib"`...
; \
241 jar tf
"$$lib" | while read
-r ln
; do \
242 [ -f
"src/$$ln" ] && rm "src/$$ln"; \
244 jar tf
"$$lib" | tac | while read
-r ln
; do \
245 if
[ -d
"src/$$ln" ]; then \
246 rmdir
"src/$$ln" 2>/dev
/null || true
; \
256 @echo
">>>>>>>>>> Calling Mr Propre..."
258 rm -f
$(NAME
)-sources.jar
259 rm -f
"$(NAME)-`cat VERSION`.jar"
260 rm -f
"$(NAME)-`cat VERSION`-sources.jar"
261 rm -rf doc
/html doc
/latex doc
/man
262 rmdir doc
2>/dev
/null || true
267 @echo
">>>>>>>>>> Installing $(NAME) into $(PREFIX)..."
268 mkdir
-p
"$(PREFIX)/lib" "$(PREFIX)/bin"
269 cp
$(NAME
).jar
"$(PREFIX)/lib/"
272 echo
"$(RJAR) $(RJAR_FLAGS) \"$(PREFIX)/lib/$(NAME).jar\" \"\$$@\"" \
273 ) > "$(PREFIX)/bin/$(NAME)"
274 chmod a
+rx
"$(PREFIX)/bin/$(NAME)"
279 @echo
">>>>>>>>>> Uninstalling $(NAME) from $(PREFIX)..."
280 rm -f
"$(PREFIX)/bin/$(NAME)"
281 rm -f
"$(PREFIX)/lib/$(NAME).jar"
282 rmdir
"$(PREFIX)/bin" 2>/dev
/null
283 rmdir
"$(PREFIX)/lib" 2>/dev
/null