| 1 | # |
| 2 | # Java makefile |
| 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 |
| 10 | # |
| 11 | NAME = nikiroo-utils |
| 12 | MAIN = be/nikiroo/tests/utils/Test |
| 13 | TEST = be/nikiroo/tests/utils/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) |
| 17 | |
| 18 | PREFIX = /usr/local |
| 19 | |
| 20 | # |
| 21 | # Special Options for this program: you can modify the previous var if needed |
| 22 | # > UI=android (or UI=awt by default) |
| 23 | # |
| 24 | ifeq ($(UI),android) |
| 25 | MORE+= be/nikiroo/utils/android/ImageUtilsAndroid |
| 26 | TEST += be/nikiroo/utils/android/test/TestAndroid |
| 27 | else |
| 28 | MORE += be/nikiroo/utils/ui/ImageUtilsAwt |
| 29 | MORE += be/nikiroo/utils/ui/ImageTextAwt |
| 30 | TEST += be/nikiroo/utils/ui/test/TestUI |
| 31 | endif |
| 32 | |
| 33 | ################################################################################ |
| 34 | |
| 35 | JAVAC = javac |
| 36 | JAVAC_FLAGS += -encoding UTF-8 -d ./bin/ -cp ./src/ |
| 37 | JAVA = java |
| 38 | JAVA_FLAGS += -cp ./bin/ |
| 39 | JAR = jar |
| 40 | RJAR = java |
| 41 | RJAR_FLAGS += -jar |
| 42 | |
| 43 | ifeq ($(DEBUG),1) |
| 44 | JAVAC_FLAGS += -Xlint:deprecation -g |
| 45 | endif |
| 46 | |
| 47 | .PHONY: all build run clean mrpropre mrpropre love debug doc man test run-test \ |
| 48 | check_time jar sjar resources test-resources libs |
| 49 | |
| 50 | all: build jar sjar |
| 51 | |
| 52 | check_time: |
| 53 | @echo |
| 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/*' \)\ |
| 62 | \) \ |
| 63 | -type f -printf "%T@ %p\n" 2>/dev/null \ |
| 64 | | sort -n | cut -d' ' -f 2- | tail -n 1` latest_rsc |
| 65 | |
| 66 | @ls latest_??? \ |
| 67 | --time-style=+@%Y-%m-%d\ %H:%M:%S -lt | cut -f2- -d@ |
| 68 | |
| 69 | build: check_time resources latest_bin |
| 70 | latest_bin: latest_src |
| 71 | @echo |
| 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"; \ |
| 77 | done; |
| 78 | touch latest_bin |
| 79 | |
| 80 | |
| 81 | test: build test-resources latest_tst |
| 82 | latest_tst: latest_src |
| 83 | @echo |
| 84 | @echo ">>>>>>>>>> Building all tests: $(TEST)..." |
| 85 | @if [ "$(TEST)" = "" ]; then \ |
| 86 | echo No test sources defined.; \ |
| 87 | else \ |
| 88 | for tst in $(TEST); do \ |
| 89 | echo $(JAVAC) $(JAVAC_FLAGS) "src/$$tst.java"; \ |
| 90 | $(JAVAC) $(JAVAC_FLAGS) "src/$$tst.java"; \ |
| 91 | done; \ |
| 92 | fi; |
| 93 | touch latest_tst |
| 94 | |
| 95 | # Main buildables |
| 96 | jar: libs resources $(NAME).jar |
| 97 | $(NAME).jar: latest_bin |
| 98 | @echo |
| 99 | @echo ">>>>>>>>>> Generating $@..." |
| 100 | @if [ -d libs/bin/ ]; then \ |
| 101 | echo cp -r libs/bin/* bin/; \ |
| 102 | cp -r libs/bin/* bin/; \ |
| 103 | fi; |
| 104 | cp -r src/* 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"; \ |
| 111 | fi; |
| 112 | |
| 113 | sjar: libs $(NAME)-sources.jar |
| 114 | $(NAME)-sources.jar: latest_src |
| 115 | @echo |
| 116 | @echo ">>>>>>>>>> Generating $@..." |
| 117 | @echo > bin/manifest |
| 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"; \ |
| 125 | fi; |
| 126 | |
| 127 | # Requisites |
| 128 | libs: check_time latest_lib |
| 129 | latest_lib: bin/libs |
| 130 | bin/libs: |
| 131 | @echo |
| 132 | @echo ">>>>>>>>>> Extracting sources from libs..." |
| 133 | @cd src && \ |
| 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' ]; \ |
| 138 | then \ |
| 139 | echo cd src \&\& jar xf "$$lib"; \ |
| 140 | jar xf "$$lib"; \ |
| 141 | fi; \ |
| 142 | done; |
| 143 | mkdir -p bin |
| 144 | touch bin/libs |
| 145 | |
| 146 | resources: check_time libs latest_rsc |
| 147 | latest_rsc: bin/VERSION |
| 148 | bin/VERSION: |
| 149 | @echo |
| 150 | @echo ">>>>>>>>>> Copying resources and documentation into bin/..." |
| 151 | mkdir -p bin |
| 152 | @if ! ls *.md 2>/dev/null 2>&1; then \ |
| 153 | echo touch bin/no-documentation.md; \ |
| 154 | touch bin/no-documentation.md; \ |
| 155 | else \ |
| 156 | echo cp *.md bin/; \ |
| 157 | cp *.md bin/; \ |
| 158 | fi; |
| 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" ; \ |
| 166 | fi ; \ |
| 167 | done; |
| 168 | cp VERSION bin/ |
| 169 | |
| 170 | test-resources: check_time resources latest_tsc |
| 171 | latest_tsc: latest_ttt |
| 172 | latest_ttt: |
| 173 | @echo |
| 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" ; \ |
| 182 | fi ; \ |
| 183 | done; |
| 184 | touch latest_ttt |
| 185 | |
| 186 | # Manual |
| 187 | man: |
| 188 | @echo |
| 189 | @echo ">>>>>>>>>> Manual of $(NAME): $(MAKECMDGOALS)..." |
| 190 | @$(MAKE) -f man.d $(MAKECMDGOALS) NAME=$(NAME) |
| 191 | |
| 192 | # Run |
| 193 | run: build |
| 194 | @echo |
| 195 | @echo ">>>>>>>>>> Running $(NAME)..." |
| 196 | $(JAVA) $(JAVA_FLAGS) $(MAIN) |
| 197 | |
| 198 | # Run main test |
| 199 | run-test: |
| 200 | @echo |
| 201 | @echo ">>>>>>>>>> Running tests: $(TEST)..." |
| 202 | @[ "$(TEST)" != "" ] || echo No test sources defined. |
| 203 | @if [ "`whereis tput`" = "tput:" ]; then \ |
| 204 | ok='"[ ok ]"'; \ |
| 205 | ko='"[ !! ]"'; \ |
| 206 | cols=80; \ |
| 207 | else \ |
| 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`"; \ |
| 211 | fi; \ |
| 212 | [ "$(TEST)" = "" ] || ( \ |
| 213 | clear; \ |
| 214 | for test in $(TEST); do \ |
| 215 | echo $(JAVA) $(JAVA_FLAGS) \ |
| 216 | "$$test" "$$cols" "$$ok" "$$ko"; \ |
| 217 | $(JAVA) $(JAVA_FLAGS) "$$test" "$$cols" "$$ok" "$$ko"; \ |
| 218 | done; \ |
| 219 | ); |
| 220 | |
| 221 | # Doc/misc |
| 222 | doc: |
| 223 | @echo |
| 224 | @echo ">>>>>>>>>> Generating documentation for $(NAME)..." |
| 225 | doxygen |
| 226 | love: |
| 227 | @echo " ...not war." |
| 228 | debug: |
| 229 | $(MAKE) $(MAKECMDGOALS) PREFIX=$(PREFIX) NAME=$(NAME) DEBUG=1 |
| 230 | |
| 231 | # Clean |
| 232 | clean: |
| 233 | @echo |
| 234 | @echo ">>>>>>>>>> Cleaning $(NAME)..." |
| 235 | rm -rf bin/ |
| 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' ]; \ |
| 239 | then \ |
| 240 | echo Cleaning `basename "$$lib"`...; \ |
| 241 | jar tf "$$lib" | while read -r ln; do \ |
| 242 | [ -f "src/$$ln" ] && rm "src/$$ln"; \ |
| 243 | done; \ |
| 244 | jar tf "$$lib" | tac | while read -r ln; do \ |
| 245 | if [ -d "src/$$ln" ]; then \ |
| 246 | rmdir "src/$$ln" 2>/dev/null || true; \ |
| 247 | fi; \ |
| 248 | done; \ |
| 249 | fi; \ |
| 250 | done; |
| 251 | rm -f latest_??? |
| 252 | |
| 253 | mrproper: mrpropre |
| 254 | mrpropre: clean man |
| 255 | @echo |
| 256 | @echo ">>>>>>>>>> Calling Mr Propre..." |
| 257 | rm -f $(NAME).jar |
| 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 |
| 263 | |
| 264 | # Install/uninstall |
| 265 | install: jar man |
| 266 | @echo |
| 267 | @echo ">>>>>>>>>> Installing $(NAME) into $(PREFIX)..." |
| 268 | mkdir -p "$(PREFIX)/lib" "$(PREFIX)/bin" |
| 269 | cp $(NAME).jar "$(PREFIX)/lib/" |
| 270 | ( \ |
| 271 | echo "#!/bin/sh"; \ |
| 272 | echo "$(RJAR) $(RJAR_FLAGS) \"$(PREFIX)/lib/$(NAME).jar\" \"\$$@\"" \ |
| 273 | ) > "$(PREFIX)/bin/$(NAME)" |
| 274 | chmod a+rx "$(PREFIX)/bin/$(NAME)" |
| 275 | |
| 276 | |
| 277 | uninstall: man |
| 278 | @echo |
| 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 |
| 284 | |