sdk/Build System: Improved the bootstrap Makefiles
[sdk] / Makefile
1 .PHONY: all clean realclean distclean emptyoutput prepinstall actualinstall install copyonlyinstall uninstall troubleshoot outputdirs bootstrap deps ecere ecerecom ecerevanilla ear compiler prepbinaries epj2make ide documentor eda prepcodeguard codeguard
2 .SILENT:
3
4 include crossplatform.mk
5 include default.cf
6
7 XBOOT := $(if $(CROSS_TARGET),GCC_PREFIX= TARGET_PLATFORM=$(HOST_PLATFORM) PLATFORM=$(HOST_PLATFORM),)
8
9 LIBVER := .0.44
10
11 ifdef WINDOWS_HOST
12 HOST_SOV := $(HOST_SO)
13 else
14 HOST_SOV := $(HOST_SO)$(LIBVER)
15 endif
16
17 ifdef WINDOWS_TARGET
18
19 SOV := $(SO)
20
21 ifndef DESTDIR
22
23 ifdef ProgramFiles(x86)
24 export DESTDIR=${ProgramFiles(x86)}/Ecere SDK
25 else
26 ifdef ProgramFiles
27 export DESTDIR=$(ProgramFiles)/Ecere SDK
28 else
29 export DESTDIR=$(SystemDrive)/Ecere SDK
30 endif
31 endif
32
33 endif # DESTDIR
34
35 export prefix=
36
37 ifndef DOCDIR
38 export DOCDIR=$(DESTDIR)$(prefix)/doc
39 endif
40
41 ifndef BINDIR
42 export BINDIR=$(DESTDIR)$(prefix)/bin
43 endif
44
45 ifndef LIBDIR
46 export LIBDIR=$(BINDIR)
47 endif
48
49 ifndef SLIBDIR
50 export SLIBDIR=$(DESTDIR)$(prefix)/lib
51 endif
52
53 ifndef SAMPLESDIR
54 export SAMPLESDIR=$(DESTDIR)$(prefix)/samples
55 endif
56
57 ifndef EXTRASDIR
58 export EXTRASDIR=$(DESTDIR)$(prefix)/extras
59 endif
60
61
62 else # WINDOWS_TARGET
63
64 SOV := $(SO)$(LIBVER)
65
66 ifndef DESTDIR
67 export DESTDIR=
68 endif
69
70 ifndef prefix
71 export prefix=/usr
72 endif
73
74 ifndef DOCDIR
75 export DOCDIR=$(DESTDIR)$(prefix)/share/ecere/doc
76 endif
77
78 ifndef MANDIR
79 export MANDIR=$(DESTDIR)$(prefix)/share/man/
80 endif
81
82 ifndef BINDIR
83 export BINDIR=$(DESTDIR)$(prefix)/bin
84 endif
85
86 HOSTTYPE := $(shell uname -m)
87
88 ifndef LIBDIR
89 ifeq "$(HOSTTYPE)" "x86_64"
90 export LIBDIR=$(DESTDIR)$(prefix)/lib32
91 export PREFIXLIBDIR=$(prefix)/lib32
92 else
93 export LIBDIR=$(DESTDIR)$(prefix)/lib
94 export PREFIXLIBDIR=$(prefix)/lib
95 endif
96 endif
97
98 ifndef SLIBDIR
99 ifeq "$(HOSTTYPE)" "x86_64"
100 export SLIBDIR=$(DESTDIR)$(prefix)/lib32
101 else
102 export SLIBDIR=$(DESTDIR)$(prefix)/lib
103 endif
104 endif
105
106 ifndef SAMPLESDIR
107 export SAMPLESDIR=$(DESTDIR)$(prefix)/share/ecere/samples
108 endif
109
110 ifndef EXTRASDIR
111 export EXTRASDIR=$(DESTDIR)$(prefix)/share/ecere/extras
112 endif
113
114
115 endif
116
117 OBJDIR := obj$(OBJALT)/
118 OBJBINDIR := $(OBJDIR)$(PLATFORM)/bin/
119 OBJLIBDIR := $(OBJDIR)$(PLATFORM)/lib/
120 XOBJDIR := obj$(OBJALT)/
121 XOBJBINDIR := $(OBJDIR)$(HOST_PLATFORM)/bin/
122 XOBJLIBDIR := $(OBJDIR)$(HOST_PLATFORM)/lib/
123
124 all: prepbinaries ide epj2make documentor eda codeguard
125         @$(call echo,The Ecere SDK is fully built.)
126
127 outputdirs:
128         $(if $(wildcard $(OBJDIR)),,$(call mkdirq,$(OBJDIR)))
129         $(if $(wildcard $(OBJBINDIR)),,$(call mkdirq,$(OBJBINDIR)))
130         $(if $(wildcard $(OBJLIBDIR)),,$(call mkdirq,$(OBJLIBDIR)))
131 ifdef CROSS_TARGET
132         $(if $(wildcard $(XOBJDIR)),,$(call mkdirq,$(XOBJDIR)))
133         $(if $(wildcard $(XOBJBINDIR)),,$(call mkdirq,$(XOBJBINDIR)))
134         $(if $(wildcard $(XOBJLIBDIR)),,$(call mkdirq,$(XOBJLIBDIR)))
135 endif
136
137 bootstrap: outputdirs
138         cd compiler && $(MAKE) $(XBOOT) bootstrap
139
140 deps:
141 ifdef CROSS_TARGET
142         @$(call echo,Building dependencies (host)...)
143         cd deps && $(MAKE) $(XBOOT)
144 endif
145         @$(call echo,Building dependencies...)
146         cd deps && $(MAKE)
147
148 ecere: bootstrap deps
149 ifdef CROSS_TARGET
150         @$(call echo,Building 2nd stage ecere (host)...)
151 else
152         @$(call echo,Building 2nd stage ecere...)
153 endif
154         cd ecere && $(MAKE) nores $(XBOOT)
155         cd ear && $(MAKE) nores $(XBOOT)
156         cd ecere && $(MAKE) cleantarget
157 ifdef CROSS_TARGET
158         @$(call echo,Building 2nd stage ecere...)
159 endif
160         cd ecere && $(MAKE)
161
162 ecerecom: bootstrap
163 ifdef CROSS_TARGET
164         @$(call echo,Building eC Core Runtime (host)...)
165         cd ecere && $(MAKE) -f Makefile.ecereCOM $(XBOOT)
166 endif
167         @$(call echo,Building eC Core Runtime...)
168         cd ecere && $(MAKE) -f Makefile.ecereCOM
169
170 ecerevanilla: bootstrap
171         @$(call echo,Building Vanilla Ecere...)
172         cd ecere && $(MAKE) -f Makefile.vanilla
173
174 ear: ecere ecerevanilla
175         @$(call echo,Building ear...)
176         cd ear && cd cmd && $(MAKE) cleantarget
177         cd ear && $(MAKE)
178
179 compiler: ecere ear
180 ifdef CROSS_TARGET
181         @$(call echo,Building 2nd stage compiler (host))
182         cd compiler && $(MAKE) $(XBOOT)
183 endif
184         @$(call echo,Building 2nd stage compiler)
185         cd compiler && $(MAKE)
186
187 prepbinaries: compiler ecerecom
188         @$(call echo,Enabling 2nd stage binaries...)
189 ifdef WINDOWS_TARGET
190         $(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SOV),$(OBJBINDIR))
191         $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SOV),$(OBJBINDIR))
192         $(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SOV),$(OBJBINDIR))
193 endif
194 ifdef LINUX_TARGET
195         $(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SOV),$(OBJLIBDIR))
196         $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SOV),$(OBJLIBDIR))
197         $(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SOV),$(OBJLIBDIR))
198         ln -sf $(LP)ecere$(SOV) $(OBJLIBDIR)$(LP)ecere$(SO).0
199         ln -sf $(LP)ecereCOM$(SOV) $(OBJLIBDIR)$(LP)ecereCOM$(SO).0
200         ln -sf $(LP)ec$(SOV) $(OBJLIBDIR)$(LP)ec$(SO).0
201         ln -sf $(LP)ecere$(SOV) $(OBJLIBDIR)$(LP)ecere$(SO)
202         ln -sf $(LP)ecereCOM$(SOV) $(OBJLIBDIR)$(LP)ecereCOM$(SO)
203         ln -sf $(LP)ec$(SOV) $(OBJLIBDIR)$(LP)ec$(SO)
204 endif
205 ifndef WINDOWS_TARGET
206 ifndef LINUX_TARGET
207         $(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SO),$(OBJLIBDIR))
208         $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SO),$(OBJLIBDIR))
209         $(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SO),$(OBJLIBDIR))
210 endif
211 endif
212         $(call cpq,ear/cmd/obj/release.$(PLATFORM)/ear$(E),$(OBJBINDIR))
213         $(call cpq,compiler/ecc/obj/release.$(PLATFORM)/ecc$(E),$(OBJBINDIR))
214         $(call cpq,compiler/ecp/obj/release.$(PLATFORM)/ecp$(E),$(OBJBINDIR))
215         $(call cpq,compiler/ecs/obj/release.$(PLATFORM)/ecs$(E),$(OBJBINDIR))
216
217 ifdef CROSS_TARGET
218
219 ifdef WINDOWS_HOST
220         $(call cpq,ecere/obj/release.$(HOST_PLATFORM)/$(HOST_LP)ecere$(HOST_SOV),$(XOBJBINDIR))
221         $(call cpq,ecere/obj/ecereCOM.release.$(HOST_PLATFORM)/$(HOST_LP)ecereCOM$(HOST_SOV),$(XOBJBINDIR))
222         $(call cpq,compiler/libec/obj/release.$(HOST_PLATFORM)/$(HOST_LP)ec$(HOST_SOV),$(XOBJBINDIR))
223 endif
224 ifdef WINDOWS_HOST
225         $(call cpq,ecere/obj/release.$(HOST_PLATFORM)/$(HOST_LP)ecere$(HOST_SOV),$(XOBJLIBDIR))
226         $(call cpq,ecere/obj/ecereCOM.release.$(HOST_PLATFORM)/$(HOST_LP)ecereCOM$(HOST_SOV),$(XOBJLIBDIR))
227         $(call cpq,compiler/libec/obj/release.$(HOST_PLATFORM)/$(HOST_LP)ec$(HOST_SOV),$(XOBJLIBDIR))
228         ln -sf $(HOST_LP)ecere$(HOST_SOV) $(XOBJLIBDIR)$(LP)ecere$(HOST_SO).0
229         ln -sf $(HOST_LP)ecereCOM$(HOST_SOV) $(XOBJLIBDIR)$(LP)ecereCOM$(HOST_SO).0
230         ln -sf $(HOST_LP)ec$(HOST_SOV) $(XOBJLIBDIR)$(LP)ec$(HOST_SO).0
231         ln -sf $(HOST_LP)ecere$(HOST_SOV) $(XOBJLIBDIR)$(LP)ecere$(HOST_SO)
232         ln -sf $(HOST_LP)ecereCOM$(HOST_SOV) $(XOBJLIBDIR)$(LP)ecereCOM$(HOST_SO)
233         ln -sf $(HOST_LP)ec$(HOST_SOV) $(XOBJLIBDIR)$(LP)ec$(HOST_SO)
234 endif
235 ifndef WINDOWS_HOST
236 ifndef LINUX_HOST
237         $(call cpq,ecere/obj/release.$(HOST_PLATFORM)/$(HOST_LP)ecere$(HOST_SO),$(XOBJLIBDIR))
238         $(call cpq,ecere/obj/ecereCOM.release.$(HOST_PLATFORM)/$(HOST_LP)ecereCOM$(HOST_SO),$(XOBJLIBDIR))
239         $(call cpq,compiler/libec/obj/release.$(HOST_PLATFORM)/$(HOST_LP)ec$(HOST_SO),$(XOBJLIBDIR))
240 endif
241 endif
242         $(call cpq,ear/cmd/obj/release.$(HOST_PLATFORM)/ear$(HOST_E),$(XOBJBINDIR))
243         $(call cpq,compiler/ecc/obj/release.$(HOST_PLATFORM)/ecc$(HOST_E),$(XOBJBINDIR))
244         $(call cpq,compiler/ecp/obj/release.$(HOST_PLATFORM)/ecp$(HOST_E),$(XOBJBINDIR))
245         $(call cpq,compiler/ecs/obj/release.$(HOST_PLATFORM)/ecs$(HOST_E),$(XOBJBINDIR))
246
247 endif
248
249 epj2make: prepbinaries
250         @$(call echo,Building epj2make...)
251         cd epj2make && $(MAKE)
252
253 ide: prepbinaries
254         @$(call echo,Building IDE...)
255         cd ide && $(MAKE)
256
257 documentor: prepbinaries
258         @$(call echo,Building Documentor...)
259         cd documentor && $(MAKE)
260
261 codeguard: prepcodeguard
262 ifdef CodeGuard
263         @$(call echo,Building CodeGuard client...)
264         cd codeGuard && $(MAKE)
265 endif
266
267 prepcodeguard: eda
268 ifdef CodeGuard
269 ifdef WINDOWS_TARGET
270         $(call cpq,eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SO),$(OBJBINDIR))
271 endif
272
273 ifdef LINUX_TARGET
274         $(call cpq,eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SOV),$(OBJLIBDIR))
275         ln -sf $(LP)EDA$(SOV) $(OBJLIBDIR)$(LP)EDA$(SO).0
276         ln -sf $(LP)EDA$(SOV) $(OBJLIBDIR)$(LP)EDA$(SO)
277 endif
278
279 ifndef WINDOWS_TARGET
280 ifndef LINUX_TARGET
281         $(call cpq,eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SO),$(OBJLIBDIR))
282 endif
283 endif
284 endif
285
286 eda: prepbinaries
287         @$(call echo,Building EDA...)
288         cd eda && $(MAKE)
289
290 emptyoutput: outputdirs
291         $(call rmq,$(OBJLIBDIR)libecereVanilla$(A))
292         $(call rmq,$(SODESTDIR)$(LP)ecere$(SO))
293         $(call rmq,$(SODESTDIR)$(LP)ecereCOM$(SO))
294         $(call rmq,$(SODESTDIR)$(LP)ec$(SO))
295         $(call rmq,$(SODESTDIR)$(LP)EDA$(SO))
296         $(call rmq,$(SODESTDIR)$(LP)EDASQLite$(SO))
297 ifdef EDASQLiteCipher
298         $(call rmq,$(SODESTDIR)$(LP)EDASQLiteCipher$(SO))
299 endif
300 ifdef LINUX_TARGET
301         $(call rmq,$(SODESTDIR)$(LP)ecere$(SO).0)
302         $(call rmq,$(SODESTDIR)$(LP)ecereCOM$(SO).0)
303         $(call rmq,$(SODESTDIR)$(LP)ec$(SO).0)
304         $(call rmq,$(SODESTDIR)$(LP)EDA$(SO).0)
305         $(call rmq,$(SODESTDIR)$(LP)EDASQLite$(SO).0)
306 ifdef EDASQLiteCipher
307         $(call rmq,$(SODESTDIR)$(LP)EDASQLiteCipher$(SO).0)
308 endif
309         $(call rmq,$(SODESTDIR)$(LP)ecere$(SOV))
310         $(call rmq,$(SODESTDIR)$(LP)ecereCOM$(SOV))
311         $(call rmq,$(SODESTDIR)$(LP)ec$(SOV))
312         $(call rmq,$(SODESTDIR)$(LP)EDA$(SOV))
313         $(call rmq,$(SODESTDIR)$(LP)EDASQLite$(SOV))
314 ifdef EDASQLiteCipher
315         $(call rmq,$(SODESTDIR)$(LP)EDASQLiteCipher$(SOV))
316 endif
317 endif   
318         $(call rmq,$(OBJBINDIR)ear$(E))
319         $(call rmq,$(OBJBINDIR)ecc$(E))
320         $(call rmq,$(OBJBINDIR)ecp$(E))
321         $(call rmq,$(OBJBINDIR)ecs$(E))
322         $(call rmq,$(OBJBINDIR)epj2make$(E))
323         $(call rmq,$(OBJBINDIR)ide$(E))
324         $(call rmq,$(OBJBINDIR)documentor$(E))
325 ifdef EDASQLiteCipher
326         $(call rmq,$(OBJBINDIR)CodeGuard$(E))
327 endif
328
329 clean: emptyoutput
330         cd deps && $(MAKE) clean
331         cd ecere && $(MAKE) clean
332         cd compiler && $(MAKE) clean
333         cd ear && $(MAKE) clean
334         cd epj2make && $(MAKE) clean
335         cd ide && $(MAKE) clean
336         cd documentor && $(MAKE) clean
337 ifdef CodeGuard
338         cd codeGuard && $(MAKE) clean
339 endif
340         cd eda && $(MAKE) clean
341         @$(call echo,Done.)
342
343 realclean:
344         cd deps && $(MAKE) realclean
345         cd ecere && $(MAKE) realclean
346         cd compiler && $(MAKE) realclean
347         cd ear && $(MAKE) realclean
348         cd epj2make && $(MAKE) realclean
349         cd ide && $(MAKE) realclean
350         cd documentor && $(MAKE) realclean
351 ifdef CodeGuard
352         cd codeGuard && $(MAKE) realclean
353 endif
354         cd eda && $(MAKE) realclean
355         $(call rmrq,obj/$(PLATFORM)/)
356         @$(call echo,Done.)
357
358 distclean:
359         cd deps && $(MAKE) distclean
360         cd ecere && $(MAKE) distclean
361         cd compiler && $(MAKE) distclean
362         cd ear && $(MAKE) distclean
363         cd epj2make && $(MAKE) distclean
364         cd ide && $(MAKE) distclean
365         cd documentor && $(MAKE) distclean
366 ifdef CodeGuard
367         cd codeGuard && $(MAKE) distclean
368 endif
369         cd eda && $(MAKE) distclean
370         $(call rmrq,obj/)
371         @$(call echo,Done.)
372
373 DOC = doc/ecere.eCdoc doc/ecereCOM.eCdoc doc/EDA.eCdoc
374
375 BINARIES = \
376         ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SOV) \
377         ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SOV) \
378         ecere/obj/vanilla.$(PLATFORM)/libecereVanilla$(A) \
379         compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SOV) \
380         compiler/ecp/obj/release.$(PLATFORM)/ecp$(E) \
381         compiler/ecc/obj/release.$(PLATFORM)/ecc$(E) \
382         compiler/ecs/obj/release.$(PLATFORM)/ecs$(E) \
383         ear/cmd/obj/release.$(PLATFORM)/ear$(E) \
384         epj2make/obj/release.$(PLATFORM)/epj2make$(E) \
385         documentor/obj/release.$(PLATFORM)/documentor$(E) \
386         ide/obj/release.$(PLATFORM)/ide$(E) \
387         eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SOV) \
388         eda/drivers/sqlite/obj/release.$(PLATFORM)/$(LP)EDASQLite$(SOV)
389
390 ifdef CodeGuard
391 BINARIES += codeGuard/obj/release.$(PLATFORM)/CodeGuard$(E)
392 endif
393
394 ifdef EDASQLiteCipher
395 BINARIES += eda/drivers/sqliteCipher/obj/release.$(PLATFORM)/$(LP)EDASQLiteCipher$(SOV)
396 endif
397
398 # Making sure everything is in $(OBJBINDIR) and $(OBJLIBDIR)
399 # Shared Libraries (in $(OBJBINDIR) on Windows and $(OBJLIBDIR) otherwise)
400 # Symlinks for libs on Linux
401 # Binaries (always in $(OBJBINDIR)) and Static Libraries (always in $(OBJLIBDIR))
402 prepinstall: $(DOC) $(BINARIES) outputdirs
403
404 ifdef WINDOWS_TARGET
405         $(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SO),$(OBJBINDIR))
406         $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SO),$(OBJBINDIR))
407         $(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SO),$(OBJBINDIR))
408         $(call cpq,eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SO),$(OBJBINDIR))
409         $(call cpq,eda/drivers/sqlite/obj/release.$(PLATFORM)/$(LP)EDASQLite$(SO),$(OBJBINDIR))
410 ifdef EDASQLiteCipher
411         $(call cpq,eda/drivers/sqliteCipher/obj/release.$(PLATFORM)/$(LP)EDASQLiteCipher$(SO),$(OBJBINDIR))
412 endif
413 endif
414
415 ifdef LINUX_TARGET
416         $(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SOV),$(OBJLIBDIR))
417         $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SOV),$(OBJLIBDIR))
418         $(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SOV),$(OBJLIBDIR))
419         $(call cpq,eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SOV),$(OBJLIBDIR))
420         $(call cpq,eda/drivers/sqlite/obj/release.$(PLATFORM)/$(LP)EDASQLite$(SOV),$(OBJLIBDIR))
421 ifdef EDASQLiteCipher
422         $(call cpq,eda/drivers/sqliteCipher/obj/release.$(PLATFORM)/$(LP)EDASQLiteCipher$(SOV),$(OBJLIBDIR))
423 endif
424         ln -sf $(LP)ecere$(SOV) $(OBJLIBDIR)$(LP)ecere$(SO).0
425         ln -sf $(LP)ecereCOM$(SOV) $(OBJLIBDIR)$(LP)ecereCOM$(SO).0
426         ln -sf $(LP)ec$(SOV) $(OBJLIBDIR)$(LP)ec$(SO).0
427         ln -sf $(LP)EDA$(SOV) $(OBJLIBDIR)$(LP)EDA$(SO).0
428         ln -sf $(LP)EDASQLite$(SOV) $(OBJLIBDIR)$(LP)EDASQLite$(SO).0
429 ifdef EDASQLiteCipher
430         ln -sf $(LP)EDASQLiteCipher$(SOV) $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SO).0
431 endif
432         ln -sf $(LP)ecere$(SOV) $(OBJLIBDIR)$(LP)ecere$(SO)
433         ln -sf $(LP)ecereCOM$(SOV) $(OBJLIBDIR)$(LP)ecereCOM$(SO)
434         ln -sf $(LP)ec$(SOV) $(OBJLIBDIR)$(LP)ec$(SO)
435         ln -sf $(LP)EDA$(SOV) $(OBJLIBDIR)$(LP)EDA$(SO)
436         ln -sf $(LP)EDASQLite$(SOV) $(OBJLIBDIR)$(LP)EDASQLite$(SO)
437 ifdef EDASQLiteCipher
438         ln -sf $(LP)EDASQLiteCipher$(SOV) $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SO)
439 endif
440 endif
441
442 ifndef WINDOWS_TARGET
443 ifndef LINUX_TARGET
444         $(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SO),$(OBJLIBDIR))
445         $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SO),$(OBJLIBDIR))
446         $(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SO),$(OBJLIBDIR))
447         $(call cpq,eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SO),$(OBJLIBDIR))
448         $(call cpq,eda/drivers/sqlite/obj/release.$(PLATFORM)/$(LP)EDASQLite$(SO),$(OBJLIBDIR))
449 ifdef EDASQLiteCipher
450         $(call cpq,eda/drivers/sqliteCipher/obj/release.$(PLATFORM)/$(LP)EDASQLiteCipher$(SO),$(OBJLIBDIR))
451 endif
452 endif
453 endif
454
455         $(call cpq,ide/obj/release.$(PLATFORM)/ide$(E),$(OBJBINDIR))
456         $(call cpq,ear/cmd/obj/release.$(PLATFORM)/ear$(E),$(OBJBINDIR))
457         $(call cpq,compiler/ecc/obj/release.$(PLATFORM)/ecc$(E),$(OBJBINDIR))
458         $(call cpq,compiler/ecp/obj/release.$(PLATFORM)/ecp$(E),$(OBJBINDIR))
459         $(call cpq,compiler/ecs/obj/release.$(PLATFORM)/ecs$(E),$(OBJBINDIR))
460         $(call cpq,epj2make/obj/release.$(PLATFORM)/epj2make$(E),$(OBJBINDIR))
461         $(call cpq,documentor/obj/release.$(PLATFORM)/documentor$(E),$(OBJBINDIR))
462 ifdef CodeGuard
463         $(call cpq,codeGuard/obj/release.$(PLATFORM)/CodeGuard$(E),$(OBJBINDIR))
464 endif
465         $(call cpq,ecere/obj/vanilla.$(PLATFORM)/libecereVanilla$(A),$(OBJLIBDIR))
466
467 #TODO: Samples?
468 install: prepinstall actualinstall
469         @$(call echo,The Ecere SDK has been installed.)
470
471 copyonlyinstall: actualinstall
472         @$(call echo,The Ecere SDK has been installed. copyonlyinstall.)
473
474 actualinstall:
475 ifdef WINDOWS_TARGET
476         $(call mkdirq,"$(BINDIR)/")
477         $(call mkdirq,"$(SLIBDIR)/")
478         $(call mkdirq,"$(DOCDIR)/")
479         $(call cpq,$(OBJBINDIR)$(LP)ecere$(SO),"$(LIBDIR)/")
480         $(call cpq,$(OBJBINDIR)$(LP)ecereCOM$(SO),"$(LIBDIR)/")
481         $(call cpq,$(OBJBINDIR)$(LP)ec$(SO),"$(LIBDIR)/")
482         $(call cpq,$(OBJBINDIR)$(LP)EDA$(SO),"$(LIBDIR)/")
483         $(call cpq,$(OBJBINDIR)$(LP)EDASQLite$(SO),"$(LIBDIR)/")
484 ifdef EDASQLiteCipher
485         $(call cpq,$(OBJBINDIR)$(LP)EDASQLiteCipher$(SO),"$(LIBDIR)/")
486 endif
487         $(call cpq,$(OBJBINDIR)ide$(E),"$(BINDIR)/")
488         $(call cpq,$(OBJBINDIR)ear$(E),"$(BINDIR)/")
489         $(call cpq,$(OBJBINDIR)ecc$(E),"$(BINDIR)/")
490         $(call cpq,$(OBJBINDIR)ecp$(E),"$(BINDIR)/")
491         $(call cpq,$(OBJBINDIR)ecs$(E),"$(BINDIR)/")
492         $(call cpq,$(OBJBINDIR)epj2make$(E),"$(BINDIR)/")
493         $(call cpq,$(OBJBINDIR)documentor$(E),"$(BINDIR)/")
494 ifdef CodeGuard
495         $(call cpq,$(OBJBINDIR)CodeGuard$(E),"$(BINDIR)/")
496 endif
497         $(call cpq,$(OBJLIBDIR)libecereVanilla$(A),"$(SLIBDIR)/")
498         $(call cpq,doc/tao.pdf,"$(DOCDIR)/Ecere Tao of Programming [work in progress].pdf") || echo "The Ecere Tao of Programming is available at http://ecere.com/tao.pdf"
499         $(call cpq,doc/ecere.eCdoc,"$(DOCDIR)/")
500         $(call cpq,doc/ecereCOM.eCdoc,"$(DOCDIR)/")
501         $(call cpq,doc/EDA.eCdoc,"$(DOCDIR)/")
502 endif
503
504 ifdef OSX_TARGET
505         install $(OBJLIBDIR)$(LP)ecere$(SO) $(LIBDIR)/
506         install $(OBJLIBDIR)$(LP)ecereCOM$(SO) $(LIBDIR)/
507         install $(OBJLIBDIR)$(LP)ec$(SO) $(LIBDIR)/
508         install $(OBJLIBDIR)$(LP)EDA$(SO) $(LIBDIR)/
509         install $(OBJLIBDIR)$(LP)EDASQLite$(SO) $(LIBDIR)/
510 ifdef EDASQLiteCipher
511         install $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SO) $(LIBDIR)/
512 endif
513         install $(OBJBINDIR)ide$(E) $(BINDIR)/
514         install $(OBJBINDIR)ear$(E) $(BINDIR)/
515         install $(OBJBINDIR)ecc$(E) $(BINDIR)/
516         install $(OBJBINDIR)ecp$(E) $(BINDIR)/
517         install $(OBJBINDIR)ecs$(E) $(BINDIR)/
518         install $(OBJBINDIR)epj2make$(E) $(BINDIR)/
519         install $(OBJBINDIR)documentor$(E) $(BINDIR)/
520 ifdef CodeGuard
521         install $(OBJBINDIR)CodeGuard$(E) $(BINDIR)/
522 endif
523         install $(OBJLIBDIR)libecereVanilla$(A) $(SLIBDIR)/
524         install -d $(DOCDIR)/
525         install doc/tao.pdf $(DOCDIR)/"Ecere Tao of Programming [work in progress].pdf" >/dev/null 2>&1 || echo "The Ecere Tao of Programming is available at http://ecere.com/tao.pdf"
526         install doc/ecere.eCdoc $(DOCDIR)/
527         install doc/ecereCOM.eCdoc $(DOCDIR)/
528         install doc/EDA.eCdoc $(DOCDIR)/
529         mkdir -p -m 777 $(SAMPLESDIR)
530         cp -pRf samples/* $(SAMPLESDIR)
531         mkdir -p -m 777 $(EXTRASDIR)
532         cp -pRf extras/* $(EXTRASDIR)
533 endif
534
535 ifndef OSX_TARGET
536 ifndef WINDOWS_TARGET
537 ifdef LINUX_TARGET
538         install -D $(OBJLIBDIR)$(LP)ecere$(SOV) $(LIBDIR)/$(LP)ecere$(SOV)
539         install -D $(OBJLIBDIR)$(LP)ecereCOM$(SOV) $(LIBDIR)/$(LP)ecereCOM$(SOV)
540         install -D $(OBJLIBDIR)$(LP)ec$(SOV) $(LIBDIR)/$(LP)ec$(SOV)
541         install -D $(OBJLIBDIR)$(LP)EDA$(SOV) $(LIBDIR)/$(LP)EDA$(SOV)
542         install -D $(OBJLIBDIR)$(LP)EDASQLite$(SOV) $(LIBDIR)/$(LP)EDASQLite$(SOV)
543 ifdef EDASQLiteCipher
544         install -D $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SOV) $(LIBDIR)/$(LP)EDASQLiteCipher$(SOV)
545 endif
546         ln -sf $(LP)ecere$(SOV) $(LIBDIR)/$(LP)ecere$(SO).0
547         ln -sf $(LP)ecereCOM$(SOV) $(LIBDIR)/$(LP)ecereCOM$(SO).0
548         ln -sf $(LP)ec$(SOV) $(LIBDIR)/$(LP)ec$(SO).0
549         ln -sf $(LP)EDA$(SOV) $(LIBDIR)/$(LP)EDA$(SO).0
550         ln -sf $(LP)EDASQLite$(SOV) $(LIBDIR)/$(LP)EDASQLite$(SO).0
551 ifdef EDASQLiteCipher
552         ln -sf $(LP)EDASQLiteCipher$(SOV) $(LIBDIR)/$(LP)EDASQLiteCipher$(SO).0
553 endif
554         ln -sf $(LP)ecere$(SOV) $(LIBDIR)/$(LP)ecere$(SO)
555         ln -sf $(LP)ecereCOM$(SOV) $(LIBDIR)/$(LP)ecereCOM$(SO)
556         ln -sf $(LP)ec$(SOV) $(LIBDIR)/$(LP)ec$(SO)
557         ln -sf $(LP)EDA$(SOV) $(LIBDIR)/$(LP)EDA$(SO)
558         ln -sf $(LP)EDASQLite$(SOV) $(LIBDIR)/$(LP)EDASQLite$(SO)
559         mkdir -p -m 777 $(DESTDIR)$(prefix)/lib/ec
560         ln -sf $(PREFIXLIBDIR)/$(LP)ecere$(SOV) $(DESTDIR)$(prefix)/lib/ec/$(LP)ecere$(SO)
561         ln -sf $(PREFIXLIBDIR)/$(LP)ecereCOM$(SOV) $(DESTDIR)$(prefix)/lib/ec/$(LP)ecereCOM$(SO)
562         ln -sf $(PREFIXLIBDIR)/$(LP)ec$(SOV) $(DESTDIR)$(prefix)/lib/ec/$(LP)ec$(SO)
563         ln -sf $(PREFIXLIBDIR)/$(LP)EDA$(SOV) $(DESTDIR)$(prefix)/lib/ec/$(LP)EDA$(SO)
564         ln -sf $(PREFIXLIBDIR)/$(LP)EDASQLite$(SOV) $(DESTDIR)$(prefix)/lib/ec/$(LP)EDASQLite$(SO)
565 ifdef EDASQLiteCipher
566         ln -sf $(LP)EDASQLiteCipher$(SOV) $(LIBDIR)/$(LP)EDASQLiteCipher$(SO)
567 endif
568         install -D -m 644 share/pixmaps/ecere.png $(DESTDIR)$(prefix)/share/pixmaps/ecere.png
569         install -D -m 644 share/applications/ecere.desktop $(DESTDIR)$(prefix)/share/applications/ecere.desktop
570 else
571         install -D $(OBJLIBDIR)$(LP)ecere$(SO) $(LIBDIR)/$(LP)ecere$(SO)
572         install -D $(OBJLIBDIR)$(LP)ecereCOM$(SO) $(LIBDIR)/$(LP)ecereCOM$(SO)
573         install -D $(OBJLIBDIR)$(LP)ec$(SO) $(LIBDIR)/$(LP)ec$(SO)
574         install -D $(OBJLIBDIR)$(LP)EDA$(SO) $(LIBDIR)/$(LP)EDA$(SO)
575         install -D $(OBJLIBDIR)$(LP)EDASQLite$(SO) $(LIBDIR)/$(LP)EDASQLite$(SO)
576 ifdef EDASQLiteCipher
577         install -D $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SO) $(LIBDIR)/$(LP)EDASQLiteCipher$(SO)
578 endif
579 endif
580         install -D $(OBJBINDIR)ide$(E) $(BINDIR)/ide$(E)
581         install -D $(OBJBINDIR)ear$(E) $(BINDIR)/ear$(E)
582         install -D $(OBJBINDIR)ecc$(E) $(BINDIR)/ecc$(E)
583         install -D $(OBJBINDIR)ecp$(E) $(BINDIR)/ecp$(E)
584         install -D $(OBJBINDIR)ecs$(E) $(BINDIR)/ecs$(E)
585         install -D $(OBJBINDIR)epj2make$(E) $(BINDIR)/epj2make$(E)
586         install -D $(OBJBINDIR)documentor$(E) $(BINDIR)/documentor$(E)
587 ifdef CodeGuard
588         install -D $(OBJBINDIR)CodeGuard$(E) $(BINDIR)/CodeGuard$(E)
589 endif
590         install -D $(OBJLIBDIR)libecereVanilla$(A) $(SLIBDIR)/libecereVanilla$(A)
591         install -D -m 644 doc/EDA.eCdoc $(DOCDIR)/EDA.eCdoc
592         install -D -m 644 doc/tao.pdf $(DOCDIR)/"Ecere Tao of Programming [work in progress].pdf" >/dev/null 2>&1 || echo "The Ecere Tao of Programming is available at http://ecere.com/tao.pdf"
593         install -D -m 644 doc/ecere.eCdoc $(DOCDIR)/ecere.eCdoc
594         install -D -m 644 doc/ecereCOM.eCdoc $(DOCDIR)/ecereCOM.eCdoc
595         install -D -m 644 doc/EDA.eCdoc $(DOCDIR)/EDA.eCdoc
596         mkdir -p -m 777 $(MANDIR)/man1
597         cp -pRf share/man/man1/* $(MANDIR)/man1
598         mkdir -p -m 777 $(SAMPLESDIR)
599         cp -pRf samples/* $(SAMPLESDIR)
600         mkdir -p -m 777 $(EXTRASDIR)
601         cp -pRf extras/* $(EXTRASDIR)
602 ifdef DEBIAN_PACKAGE
603         mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/libecere0
604         install -D -m644 NEWS $(DESTDIR)$(prefix)/share/doc/libecere0/changelog
605         gzip -f -9 $(DESTDIR)$(prefix)/share/doc/libecere0/changelog
606         mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/ecere-dev
607         ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-dev/
608         mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/ecere-extras
609         cp $(DESTDIR)$(prefix)/share/doc/libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-extras/
610         mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/ecere-samples
611         cp $(DESTDIR)$(prefix)/share/doc/libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-samples/
612         mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/ecere-sdk
613         cp $(DESTDIR)$(prefix)/share/doc/libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-sdk/
614         mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/libec0
615         ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libec0/
616         mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/libecerecom0
617         cp $(DESTDIR)$(prefix)/share/doc/libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libecerecom0/
618         mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/libeda0
619         ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libeda0/
620         mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/libedasqlite0
621         ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libedasqlite0/
622 endif
623 endif
624 endif
625
626 uninstall:
627         $(call rmq,"$(LIBDIR)/$(LP)ecere$(SO)")
628         $(call rmq,"$(LIBDIR)/$(LP)ecereCOM$(SO)")
629         $(call rmq,"$(LIBDIR)/$(LP)ec$(SO)")
630         $(call rmq,"$(LIBDIR)/$(LP)EDA$(SO)")
631         $(call rmq,"$(LIBDIR)/$(LP)EDASQLite$(SO)")
632 ifdef EDASQLiteCipher
633         $(call rmq,"$(LIBDIR)/$(LP)EDASQLiteCipher$(SO)")
634 endif
635         $(call rmq,"$(BINDIR)/ide$(E)")
636         $(call rmq,"$(BINDIR)/ear$(E)")
637         $(call rmq,"$(BINDIR)/ecc$(E)")
638         $(call rmq,"$(BINDIR)/ecp$(E)")
639         $(call rmq,"$(BINDIR)/ecs$(E)")
640         $(call rmq,"$(BINDIR)/epj2make$(E)")
641         $(call rmq,"$(BINDIR)/documentor$(E)")
642 ifdef CodeGuard
643         $(call rmq,"$(BINDIR)/CodeGuard$(E)")
644 endif
645         $(call rmq,"$(SLIBDIR)/libecereVanilla$(A)")
646         $(call rmq,"$(DOCDIR)/Ecere Tao of Programming [work in progress].pdf")
647         $(call rmq,"$(DOCDIR)/ecere.eCdoc")
648         $(call rmq,"$(DOCDIR)/ecereCOM.eCdoc")
649         $(call rmq,"$(DOCDIR)/EDA.eCdoc")
650 ifdef LINUX_TARGET
651         $(call rmq,"$(LIBDIR)/$(LP)ecere$(SO).0")
652         $(call rmq,"$(LIBDIR)/$(LP)ecereCOM$(SO).0")
653         $(call rmq,"$(LIBDIR)/$(LP)ec$(SO).0")
654         $(call rmq,"$(LIBDIR)/$(LP)EDA$(SO).0")
655         $(call rmq,"$(LIBDIR)/$(LP)EDASQLite$(SO).0")
656 ifdef EDASQLiteCipher
657         $(call rmq,"$(LIBDIR)/$(LP)EDASQLiteCipher$(SO).0")
658 endif
659         $(call rmq,"$(LIBDIR)/$(LP)ecere$(SOV)")
660         $(call rmq,"$(LIBDIR)/$(LP)ecereCOM$(SOV)")
661         $(call rmq,"$(LIBDIR)/$(LP)ec$(SOV)")
662         $(call rmq,"$(LIBDIR)/$(LP)EDA$(SOV)")
663         $(call rmq,"$(LIBDIR)/$(LP)EDASQLite$(SOV)")
664 ifdef EDASQLiteCipher
665         $(call rmq,"$(LIBDIR)/$(LP)EDASQLiteCipher$(SOV)")
666 endif
667         $(call rmq,"$(DESTDIR)$(prefix)/share/pixmaps/ecere.png")
668         $(call rmq,"$(DESTDIR)$(prefix)/share/applications/ecere.desktop")
669 endif
670         $(call rmdirq,"$(BINDIR)/")
671         $(call rmdirq,"$(LIBDIR)/")
672         $(call rmdirq,"$(SLIBDIR)/")
673         $(call rmdirq,"$(DOCDIR)/")
674 ifdef WINDOWS_TARGET
675         $(call rmdirq,"$(DESTDIR)/")
676 endif
677         @$(call echo,The Ecere SDK has been uninstalled.)
678
679 troubleshoot:
680         @$(call echo,Printing values of some variables.)
681         @$(call echo,HOST_PLATFORM=$(HOST_PLATFORM))
682         @$(call echo,TARGET_PLATFORM=$(HOST_PLATFORM))
683         @$(call echo,PLATFORM=$(PLATFORM))
684         @$(call echo,LINUX_HOST=$(LINUX_HOST))
685         @$(call echo,LINUX_TARGET=$(LINUX_TARGET))
686         @$(call echo,OSX_HOST=$(OSX_HOST))
687         @$(call echo,OSX_TARGET=$(OSX_TARGET))
688         @$(call echo,WINDOWS_HOST=$(WINDOWS_HOST))
689         @$(call echo,WINDOWS_TARGET=$(WINDOWS_TARGET))
690         @$(call echo,BSD_HOST=$(BSD_HOST))
691         @$(call echo,BSD_TARGET=$(BSD_TARGET))
692         @$(call echo,CCACHE=$(CCACHE))
693         @$(call echo,CCACHE_COMPILE=$(CCACHE_COMPILE))
694         @$(call echo,CCACHE_PREFIX=$(CCACHE_PREFIX))
695         @$(call echo,DISTCC=$(DISTCC))
696         @$(call echo,GCC_PREFIX=$(GCC_PREFIX))
697         @$(call echo,CC=$(CC))
698         @$(call echo,CPP=$(CPP))
699         @$(call echo,ECP=$(ECP))
700         @$(call echo,ECC=$(ECC))
701         @$(call echo,ECS=$(ECS))
702         @$(call echo,EAR=$(EAR))
703         @$(call echo,AS=$(AS))
704         @$(call echo,LD=$(LD))
705         @$(call echo,AR=$(AR))
706         @$(call echo,STRIP=$(STRIP))
707         @$(call echo,UPX=$(UPX))