more makefile distclean target work
[fw/altos] / ao-tools / altosui / Makefile
1 .SUFFIXES: .java .class
2
3 CLASSPATH=classes:./*:/usr/share/java/*
4 CLASSFILES=\
5         Altos.class \
6         AltosChannelMenu.class \
7         AltosConfig.class \
8         AltosConfigUI.class \
9         AltosConvert.class \
10         AltosCSV.class \
11         AltosCSVUI.class \
12         AltosDebug.class \
13         AltosEepromDownload.class \
14         AltosEepromMonitor.class \
15         AltosEepromReader.class \
16         AltosEepromRecord.class \
17         AltosFile.class \
18         AltosFlash.class \
19         AltosFlashUI.class \
20         AltosFlightInfoTableModel.class \
21         AltosFlightStatusTableModel.class \
22         AltosGPS.class \
23         AltosGreatCircle.class \
24         AltosHexfile.class \
25         AltosLog.class \
26         AltosLogfileChooser.class \
27         AltosParse.class \
28         AltosPreferences.class \
29         AltosReader.class \
30         AltosRecord.class \
31         AltosSerialMonitor.class \
32         AltosSerial.class \
33         AltosState.class \
34         AltosTelemetry.class \
35         AltosTelemetryReader.class \
36         AltosUI.class \
37         AltosDevice.class \
38         AltosDeviceDialog.class \
39         AltosRomconfig.class \
40         AltosRomconfigUI.class \
41         AltosVoice.class
42
43 # where altosui.jar gets installed
44 ALTOSLIB=/usr/share/java
45
46 # where freetts.jar is to be found
47 FREETTSLIB=/usr/share/java
48
49 # all of the freetts files
50 FREETTSJAR= \
51         $(FREETTSLIB)/cmudict04.jar \
52         $(FREETTSLIB)/cmulex.jar \
53         $(FREETTSLIB)/cmu_time_awb.jar \
54         $(FREETTSLIB)/cmutimelex.jar \
55         $(FREETTSLIB)/cmu_us_kal.jar \
56         $(FREETTSLIB)/en_us.jar \
57         $(FREETTSLIB)/freetts.jar
58
59 # The current hex files
60 HEXLIB=../../src
61 HEXFILES = \
62         $(HEXLIB)/telemetrum-v1.0.ihx \
63         $(HEXLIB)/teledongle-v0.2.ihx
64
65 JAVAFLAGS=-Xlint:unchecked -Xlint:deprecation
66
67 ALTOSUIJAR = altosui.jar
68 FATJAR = fat/altosui.jar
69
70 OS:=$(shell uname)
71
72 LINUX_APP=altosui
73
74 DARWIN_ZIP=Altos-Mac.zip
75
76 WINDOWS_ZIP=Altos-Windows.zip
77
78 LINUX_TGZ=Altos-Linux.tgz
79
80 all: altosui.jar $(LINUX_APP)
81 fat: altosui.jar $(LINUX_APP) $(DARWIN_ZIP) $(WINDOWS_ZIP) $(LINUX_TGZ)
82
83 $(CLASSFILES):
84
85 .java.class:
86         javac -encoding UTF8 -classpath "$(CLASSPATH)" $(JAVAFLAGS) $*.java
87
88 altosui.jar: classes/altosui classes/libaltosJNI $(CLASSFILES) Manifest.txt
89         cd ./classes && jar cfm ../$@ altosui/Manifest.txt altosui/*.class libaltosJNI/*.class
90
91 Manifest.txt: Makefile $(CLASSFILES)
92         echo 'Main-Class: altosui.AltosUI' > $@
93         echo "Class-Path: $(FREETTSLIB)/freetts.jar" >> $@
94
95 classes/altosui:
96         mkdir -p classes
97         ln -sf .. classes/altosui
98
99 classes/libaltosJNI:
100         mkdir -p classes
101         ln -sf ../../libaltos/libaltosJNI classes/libaltosJNI
102
103 altosui:
104         echo "#!/bin/sh" > $@
105         echo "exec java -Djava.library.path=/usr/lib/altos -jar /usr/share/java/altosui.jar" >> $@
106         chmod +x ./altosui
107
108 fat/altosui:
109         echo "#!/bin/sh" > $@
110         echo 'ME=`which "$0"`' >> $@
111         echo 'DIR=`dirname "$ME"`' >> $@
112         echo 'exec java -Djava.library.path="$$DIR" -jar "$$DIR"/altosui.jar' >> $@
113         chmod +x $@
114
115 fat/altosui.jar: $(CLASSFILES) fat/classes/Manifest.txt
116         mkdir -p fat/classes
117         test -L fat/classes/altosui || ln -sf ../.. fat/classes/altosui
118         test -L fat/classes/libaltosJNI || ln -sf ../../../libaltos/libaltosJNI fat/classes/libaltosJNI
119         cd ./fat/classes && jar cfm ../../$@ Manifest.txt altosui/*.class libaltosJNI/*.class
120
121 fat/classes/Manifest.txt: $(CLASSFILES) Makefile
122         mkdir -p fat/classes
123         echo 'Main-Class: altosui.AltosUI' > $@
124         echo "Class-Path: freetts.jar" >> $@
125
126 install: altosui.jar altosui
127         install -m 0644 altosui.jar $(DESTDIR)/usr/share/java/altosui.jar
128         install -m 0644 altosui.1 $(DESTDIR)/usr/share/man/man1/altosui.1
129         install altosui $(DESTDIR)/usr/bin/altosui
130
131 clean:
132         rm -f *.class altosui.jar
133         rm -f AltosUI.app/Contents/Resources/Java/*
134         rm -rf classes
135         rm -rf windows linux
136
137 distclean:      clean
138         rm -f $(DARWIN_ZIP) $(WINDOWS_ZIP) $(LINUX_TGZ)
139
140 FAT_FILES=$(FATJAR) $(FREETTSJAR) $(HEXFILES)
141
142 LINUX_FILES=$(FAT_FILES) ../libaltos/libaltos.so fat/altosui
143 $(LINUX_TGZ): $(LINUX_FILES)
144         rm -f $@
145         mkdir -p linux/AltOS
146         rm -f linux/AltOS/*
147         cp $(LINUX_FILES) linux/AltOS
148         cd linux && tar czf ../$@ AltOS
149
150 DARWIN_RESOURCES=$(FATJAR) $(FREETTSJAR) ../libaltos/libaltos.dylib
151 DARWIN_EXTRA=$(HEXFILES)
152 DARWIN_FILES=$(DARWIN_RESOURCES) $(DARWIN_EXTRA)
153
154 $(DARWIN_ZIP): $(DARWIN_FILES)
155         rm -f $@
156         cp -a AltosUI.app darwin/
157         mkdir -p darwin/AltosUI.app/Contents/Resources/Java
158         cp $(DARWIN_RESOURCES) darwin/AltosUI.app/Contents/Resources/Java
159         mkdir -p darwin/AltOS
160         cp $(DARWIN_EXTRA) darwin/AltOS
161         cd darwin && zip -j -r ../$@ AltosUI.app AltOS
162
163 WINDOWS_FILES = $(FAT_FILES) ../libaltos/altos.dll ../../telemetrum.inf
164
165 $(WINDOWS_ZIP): $(WINDOWS_FILES)
166         rm -f $@
167         mkdir -p windows/AltOS
168         rm -f windows/AltOS/*
169         cp $(WINDOWS_FILES) windows/AltOS
170         cd windows && zip -j -r ../$@ AltOS