root/trunk/GNUmakefile

Revision 929, 10.7 kB (checked in by Mike Wey, 4 months ago)

Add a separate target for installing the headers.

Line 
1 #makeAll.sh
2 SHELL=/bin/sh
3 prefix=/usr/local
4 libdir=lib
5
6 OS=$(shell uname || uname -s)
7 ARCH=$(shell arch || uname -m)
8
9 ifndef DC
10     ifneq ($(strip $(shell which dmd 2>/dev/null)),)
11         DC=dmd
12     else ifneq ($(strip $(shell which ldc 2>/dev/null)),)
13         DC=ldc
14     else ifneq ($(strip $(shell which ldc2 2>/dev/null)),)
15         DC=ldc2
16     else
17         DC=gdc
18     endif
19 endif
20
21 # make gtkD libs and test
22 .DEFAULT_GOAL = default-goal
23
24 default-goal: libs test
25 shared: shared-libs
26
27 ifneq (,$(findstring ldc,$(DC)))
28     all: libs shared-libs gda gstreamer shared-gda shared-gstreamer test
29 else
30     all: libs gda gstreamer test
31 endif
32
33 ifeq ("$(DC)","gdc")
34     DCFLAGS=-O2
35     LINKERFLAG=-Xlinker
36     output=-o $@
37 else
38     DCFLAGS=-O
39     LINKERFLAG=-L
40     output=-of$@
41 endif
42
43 ifneq (,$(findstring ldc,$(DC)))
44     FPIC=-relocation-model=pic
45 else
46     FPIC=-fPIC
47 endif
48
49 ifeq ("$(OS)","Linux")
50     LDFLAGS+=$(LINKERFLAG)-ldl
51 endif
52
53 ifndef MODEL
54     ifeq ("$(ARCH)", "x86_64")
55         MODEL=64
56     else
57         MODEL=32
58     endif
59 endif
60
61 ifeq ($(MODEL), 64)
62    DCFLAGS+=-m64
63    LDFLAGS+=-m64
64 else
65    DCFLAGS+=-m32
66    LDFLAGS+=-m32
67 endif
68
69 AR=ar
70 RANLIB=ranlib
71
72 #######################################################################
73
74 SO_VERSION=1.5.1
75
76 LIBNAME_GTKD = libgtkd.a
77 SONAME_GTKD = libgtkd.so
78 SOURCES_GTKD = $(subst src/build/gtkD.d,,$(wildcard src/*/*.d))
79 OBJECTS_GTKD = $(patsubst %.d,%.o,$(SOURCES_GTKD))
80 PICOBJECTS_GTKD = $(patsubst %.o,%.pic.o,$(OBJECTS_GTKD))
81
82 LIBNAME_GTKDGL = libgtkdgl.a
83 SONAME_GTKDGL = libgtkdgl.so
84 SOURCES_GTKDGL = $(wildcard srcgl/*/*.d)
85 OBJECTS_GTKDGL = $(patsubst %.d,%.o,$(SOURCES_GTKDGL))
86 PICOBJECTS_GTKDGL = $(patsubst %.o,%.pic.o,$(OBJECTS_GTKDGL))
87
88 LIBNAME_GTKDSV = libgtkdsv.a
89 SONAME_GTKDSV = libgtkdsv.so
90 SOURCES_GTKDSV = $(wildcard srcsv/*/*.d)
91 OBJECTS_GTKDSV = $(patsubst %.d,%.o,$(SOURCES_GTKDSV))
92 PICOBJECTS_GTKDSV = $(patsubst %.o,%.pic.o,$(OBJECTS_GTKDSV))
93
94 LIBNAME_GTKDGDA = libgtkdgda.a
95 SONAME_GTKDGDA = libgtkdgda.so
96 SOURCES_GTKDGDA = $(wildcard srcgda/*/*.d)
97 OBJECTS_GTKDGDA = $(patsubst %.d,%.o,$(SOURCES_GTKDGDA))
98 PICOBJECTS_GTKDGDA = $(patsubst %.o,%.pic.o,$(OBJECTS_GTKDGDA))
99
100 LIBNAME_GSTREAMERD = libgstreamerd.a
101 SONAME_GSTREAMERD = libgstreamerd.so
102 SOURCES_GSTREAMERD = $(wildcard srcgstreamer/*/*.d)
103 OBJECTS_GSTREAMERD = $(patsubst %.d,%.o,$(SOURCES_GSTREAMERD))
104 PICOBJECTS_GSTREAMERD = $(patsubst %.o,%.pic.o,$(OBJECTS_GSTREAMERD))
105
106 #######################################################################
107
108 BINNAME_DEMO = TestWindow
109 SOURCES_DEMO = $(shell find \
110         demos/gtkD/TestWindow \
111         -name '*.d' )
112 OBJECTS_DEMO = $(shell echo $(SOURCES_DEMO) | sed -e 's/\.d/\.o/g')
113
114 #######################################################################
115
116 # -Isrc
117
118 ifeq ("$(OS)","Darwin")
119     libs: gtkd
120     shared-libs: shared-gtkd
121 else
122     libs: gtkd gtkdgl sv
123     shared-libs: shared-gtkd shared-gtkdgl shared-sv
124 endif
125
126 gtkd:      $(LIBNAME_GTKD)
127 gtkdgl:    $(LIBNAME_GTKDGL)
128 sv:        $(LIBNAME_GTKDSV)
129 gda:       $(LIBNAME_GTKDGDA)
130 gstreamer: $(LIBNAME_GSTREAMERD)
131
132 shared-gtkd:      $(SONAME_GTKD)
133 shared-gtkdgl:    $(SONAME_GTKDGL)
134 shared-sv:        $(SONAME_GTKDSV)
135 shared-gda:       $(SONAME_GTKDGDA)
136 shared-gstreamer: $(SONAME_GSTREAMERD)
137
138 #######################################################################
139
140 $(LIBNAME_GTKD): IMPORTS=-Isrc
141 $(LIBNAME_GTKD): $(OBJECTS_GTKD)
142     $(make-lib)
143
144 $(LIBNAME_GTKDGL): IMPORTS=-Isrc -Isrcgl
145 $(LIBNAME_GTKDGL): $(LIBNAME_GTKD) $(OBJECTS_GTKDGL)
146     $(make-lib)
147
148 $(LIBNAME_GTKDSV): IMPORTS=-Isrc -Isrcsv
149 $(LIBNAME_GTKDSV): $(LIBNAME_GTKD) $(OBJECTS_GTKDSV)
150     $(make-lib)
151
152 $(LIBNAME_GTKDGDA): IMPORTS=-Isrc -Isrcgda
153 $(LIBNAME_GTKDGDA): $(LIBNAME_GTKD) $(OBJECTS_GTKDGDA)
154     $(make-lib)
155
156 $(LIBNAME_GSTREAMERD): IMPORTS=-Isrc -Isrcgstreamer
157 $(LIBNAME_GSTREAMERD): $(LIBNAME_GTKD) $(OBJECTS_GSTREAMERD)
158     $(make-lib)
159
160 #######################################################################
161
162 $(SONAME_GTKD): IMPORTS=-Isrc
163 $(SONAME_GTKD): $(PICOBJECTS_GTKD)
164     $(make-shared-lib)
165
166 $(SONAME_GTKDGL): IMPORTS=-Isrc -Isrcgl
167 $(SONAME_GTKDGL): $(PICOBJECTS_GTKDGL)
168     $(make-shared-lib)
169
170 $(SONAME_GTKDSV): IMPORTS=-Isrc -Isrcsv
171 $(SONAME_GTKDSV): $(PICOBJECTS_GTKDSV)
172     $(make-shared-lib)
173
174 $(SONAME_GTKDGDA): IMPORTS=-Isrc -Isrcgda
175 $(SONAME_GTKDGDA): $(PICOBJECTS_GTKDGDA)
176     $(make-shared-lib)
177
178 $(SONAME_GTKDGSTREAMERD): IMPORTS=-Isrc -Isrcgstreamer
179 $(SONAME_GTKDGSTREAMERD): $(PICOBJECTS_GTKDGSTREAMERD)
180     $(make-shared-lib)
181
182 #######################################################################
183
184 # -Idemos
185
186 test: $(BINNAME_DEMO)
187
188 # Build libgtkd.a when neigther neither libgtkd.so and libgtkd.a are pressend.
189
190 # Use -rpath for the demo so that the shard libs don't need to
191 # be installed for it to run.
192
193 # Create a versioned symlink so the demo is able to load it.
194
195 $(BINNAME_DEMO): IMPORTS=-Isrc -Idemos/gtkD/TestWindow
196 $(BINNAME_DEMO): $(OBJECTS_DEMO)
197     $(if $(wildcard libgtkd.so),,$(if $(wildcard libgtkd.a),,$(MAKE) $(LIBNAME_GTKD)))
198     $(if $(wildcard libgtkd.so),$(eval LDFLAGS+= $(LINKERFLAG)-rpath=./))
199     $(if $(wildcard libgtkd.so),$(shell ln -s $(SONAME_GTKD) $(SONAME_GTKD).$(call stripBugfix,$(SO_VERSION))))
200     $(DC) $(OBJECTS_DEMO) $(output) $(LINKERFLAG)-L. $(LINKERFLAG)-lgtkd $(LDFLAGS)
201
202 #######################################################################
203
204 %.o : %.d
205     $(DC) $(DCFLAGS) $(IMPORTS) -c $< $(output)
206
207 %.pic.o : %.d
208     $(DC) $(DCFLAGS) $(FPIC) $(IMPORTS) -c $< $(output)
209
210 #######################################################################
211
212 ifeq ("$(OS)","Darwin")
213     install: install-gtkd
214     install-headers: install-headers-gtkd
215     install-shared: install-shared-gtkd
216 else
217     install: install-gtkd install-gtkdgl install-gtkdsv
218     install-headers: install-headers-gtkd install-headers-gtkdgl install-headers-gtkdsv
219     install-shared: install-shared-gtkd install-shared-gtkdgl install-shared-gtkdsv
220 endif
221
222 install-gtkd: $(LIBNAME_GTKD) install-headers-gtkd
223     install -d $(DESTDIR)$(prefix)/$(libdir)
224     install -m 644 $(LIBNAME_GTKD)   $(DESTDIR)$(prefix)/$(libdir)
225
226 install-gtkdgl: $(LIBNAME_GTKDGL) install-gtkd install-headers-gtkdgl
227     install -m 644 $(LIBNAME_GTKDGL) $(DESTDIR)$(prefix)/$(libdir)
228
229 install-gtkdsv: $(LIBNAME_GTKDSV) install-gtkd install-headers-gtkdsv
230     install -m 644 $(LIBNAME_GTKDSV) $(DESTDIR)$(prefix)/$(libdir)
231
232 install-gda: $(LIBNAME_GTKDGDA) install-gtkd install-headers-gda
233     install -m 644 $(LIBNAME_GTKDGDA) $(DESTDIR)$(prefix)/$(libdir)
234
235 install-gstreamer: $(LIBNAME_GSTREAMERD) install-gtkd install-headers-gstreamer
236     install -m 644 $(LIBNAME_GSTREAMERD) $(DESTDIR)$(prefix)/$(libdir)
237
238 install-shared-gtkd: $(SONAME_GTKD)
239     install -d $(DESTDIR)$(prefix)/$(libdir)
240     $(install-so)
241
242 install-shared-gtkdgl: $(SONAME_GTKDGL) install-shared-gtkd
243     $(install-so)
244
245 install-shared-gtkdsv: $(SONAME_GTKDSV) install-shared-gtkd
246     $(install-so)
247
248 install-shared-gda: $(SONAME_GTKDGDA) install-shared-gtkd
249     $(install-so)
250
251 install-shared-gstreamer: $(SONAME_GSTREAMERD) install-shared-gtkd
252     $(install-so)
253
254 install-headers-gtkd:
255     install -d $(DESTDIR)$(prefix)/include/d
256     (cd src;   echo $(SOURCES_GTKD)   | sed -e s,src/,,g   | xargs tar c) | (cd $(DESTDIR)$(prefix)/include/d; tar xv)
257
258 install-headers-gtkdgl:
259     (cd srcgl; echo $(SOURCES_GTKDGL) | sed -e s,srcgl/,,g | xargs tar c) | (cd $(DESTDIR)$(prefix)/include/d; tar xv)
260
261 install-headers-gtkdsv:
262     (cd srcsv; echo $(SOURCES_GTKDSV) | sed -e s,srcsv/,,g | xargs tar c) | (cd $(DESTDIR)$(prefix)/include/d; tar xv)
263
264 install-headers-gda:
265     (cd srcgda; echo $(SOURCES_GTKDGDA) | sed -e s,srcgda/,,g | xargs tar c) | (cd $(DESTDIR)$(prefix)/include/d; tar xv)
266
267 install-headers-gstreamer:
268     (cd srcgstreamer; echo $(SOURCES_GSTREAMERD) | sed -e s,srcgstreamer/,,g | xargs tar c) | (cd $(DESTDIR)$(prefix)/include/d; tar xv)
269
270 uninstall: uninstall-gtkdgl uninstall-gtkdsv uninstall-gda uninstall-gstreamer
271     $(foreach dir,$(shell ls src)  , rm -rf $(DESTDIR)$(prefix)/include/d/$(dir))
272     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(LIBNAME_GTKD)
273     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKD)
274     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKD).$(call stripBugfix,$(SO_VERSION))
275     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKD).$(SO_VERSION)
276
277 uninstall-gtkdgl:
278     $(foreach dir,$(shell ls srcsv), rm -rf $(DESTDIR)$(prefix)/include/d/$(dir))
279     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(LIBNAME_GTKDGL)
280     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKDGL)
281     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKDGL).$(call stripBugfix,$(SO_VERSION))
282     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKDGL).$(SO_VERSION)
283
284 uninstall-gtkdsv:
285     $(foreach dir,$(shell ls srcgl), rm -rf $(DESTDIR)$(prefix)/include/d/$(dir))
286     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(LIBNAME_GTKDSV)
287     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKDSV)
288     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKDSV).$(call stripBugfix,$(SO_VERSION))
289     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKDSV).$(SO_VERSION)
290
291 uninstall-gda:
292     $(foreach dir,$(shell ls srcgda), rm -rf $(DESTDIR)$(prefix)/include/d/$(dir))
293     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(LIBNAME_GTKDGDA)
294     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKDGDA)
295     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKDGDA).$(call stripBugfix,$(SO_VERSION))
296     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GTKDGDA).$(SO_VERSION)
297
298 uninstall-gstreamer:
299     $(foreach dir,$(shell ls srcgstreamer), rm -rf $(DESTDIR)$(prefix)/include/d/$(dir))
300     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(LIBNAME_GSTREAMERD)
301     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GSTREAMERD)
302     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GSTREAMERD).$(SO_VERSION)
303     rm -f $(DESTDIR)$(prefix)/$(libdir)/$(SONAME_GSTREAMERD).$(SO_VERSION)
304
305 clean:
306     -rm -f $(LIBNAME_GTKD)       $(SONAME_GTKD)       $(OBJECTS_GTKD)       $(PICOBJECTS_GTKD)
307     -rm -f $(LIBNAME_GTKDGL)     $(SONAME_GTKDGL)     $(OBJECTS_GTKDGL)     $(PICOBJECTS_GTKDGL)
308     -rm -f $(LIBNAME_GTKDSV)     $(SONAME_GTKDSV)     $(OBJECTS_GTKDSV)     $(PICOBJECTS_GTKDSV)
309     -rm -f $(LIBNAME_GTKDGDA)    $(SONAME_GTKDGDA)    $(OBJECTS_GTKDGDA)    $(PICOBJECTS_GTKDGDA)
310     -rm -f $(LIBNAME_GSTREAMERD) $(SONAME_GSTREAMERD) $(OBJECTS_GSTREAMERD) $(PICOBJECTS_GSTREAMERD)
311     -rm -f $(BINNAME_DEMO)       $(OBJECTS_DEMO)      $(SONAME_GTKD).$(call stripBugfix,$(SO_VERSION))
312     -rm -rf .pic
313
314 #######################################################################
315
316 space :=
317 space +=
318
319 stripBugfix = $(subst $(space),.,$(strip $(wordlist 1, 2, $(subst ., ,$(1)))))
320
321 define make-lib
322     $(AR) rcs $@ $(subst $(LIBNAME_GTKD),,$^)
323     $(RANLIB) $@
324 endef
325
326 define make-shared-lib
327     # Combine all the object files into one file, since some d compilers
328     # don't support building a shared lib from multiple object files.
329     ld -r $^ -o $@.o
330     $(DC) -shared $(output) $(LINKERFLAG)-soname=$@.$(call stripBugfix,$(SO_VERSION)) $@.o
331     rm $@.o
332 endef
333
334 define install-so
335     install -m 755 $< $(DESTDIR)$(prefix)/$(libdir)/$<.$(call stripBugfix,$(SO_VERSION))
336     cd $(DESTDIR)$(prefix)/$(libdir)/; ln -s $<.$(call stripBugfix,$(SO_VERSION)) $<.$(SO_VERSION)
337     cd $(DESTDIR)$(prefix)/$(libdir)/; ln -s $<.$(SO_VERSION) $<
338 endef
Note: See TracBrowser for help on using the browser.