Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Makefile
blob: f8e2bdf8372196bd4784edc9d57e7913539ed99b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
#!/usr/bin/make -rf

# Disable pre-existing implicit rules and suffix rules for easier dep debugging.
%.o : %.s
% : RCS/%,v
% : RCS/%
% : %,v
% : s.%
% : SCCS/s.%
.SUFFIXES:
SUFFIXES :=

# Get configuration data.
config.mk: configure
	./configure

include config.mk

GLIB_GENMARSHAL ?= glib-genmarshal
PYGTK_CODEGEN ?= pygobject-codegen-2.0
ICON_SLICER ?= icon-slicer
ICONMAP ?= $(shell $(PKG_CONFIG) --variable=program_path icon-naming-utils)/icon-name-mapping
EMPY ?= artwork/gtk/theme/em.py
PYGTK_DEFSDIR = $(shell $(PKG_CONFIG) --variable=defsdir pygtk-2.0)
INTLTOOL_MERGE = intltool-merge
UPDATE_MIME_DATABASE = update-mime-database
GCONFTOOL2 = gconftool-2

# Build crazy metadatareader C extension
DS_SRCDIR = datastore/src/carquinyol
DS_EXTRA_CFLAGS=-fPIC -I$(DS_SRCDIR) -I/usr/include/python$(PYTHON_VERSION) -DPACKAGE=\"sugar-datastore\" -DVERSION=\"$(SUCROSE_VERSION)\"
DS_EXTRA_LDFLAGS=-fPIC -L/usr/lib/python$(PYTHON_VERSION) -lpython$(PYTHON_VERSION)
DS_OBJS=$(patsubst %.c,%.o,$(shell find $(DS_SRCDIR) -name '*.c'))
$(DS_SRCDIR)/metadatareader.so: $(DS_OBJS)
	$(CC) -shared $(LDFLAGS) $(DS_EXTRA_LDFLAGS) -o $@ -Wl,-soname,$(basename $@) $^

datastore/%.o: datastore/%.c
	$(CC) $(ALLCFLAGS) $(DS_EXTRA_CFLAGS) -c -o $@ $<

# Build crazy sugar toolkit python C extension
TK_SRCDIR = toolkit/src/sugar
$(TK_SRCDIR)/_sugarext.c: $(TK_SRCDIR)/_sugarext.defs $(TK_SRCDIR)/_sugarext.override
	$(PYGTK_CODEGEN) \
		--register $(PYGTK_DEFSDIR)/gdk-types.defs \
		--register $(PYGTK_DEFSDIR)/gtk-types.defs \
		--override $(TK_SRCDIR)/_sugarext.override \
		--prefix py_sugarext $(TK_SRCDIR)/_sugarext.defs > $@

$(TK_SRCDIR)/sugar-marshal.h: $(TK_SRCDIR)/sugar-marshal.list
	$(GLIB_GENMARSHAL) --prefix=sugar_marshal $< --header > $@

$(TK_SRCDIR)/sugar-marshal.c: $(TK_SRCDIR)/sugar-marshal.list $(TK_SRCDIR)/sugar-marshal.h
	$(GLIB_GENMARSHAL) --prefix=sugar_marshal $< --header --body > $@

TK_LIBDEPS=pygtk-2.0 gtk+-2.0 sm ice alsa
TK_EXTRA_CFLAGS=-fPIC $(shell $(PKG_CONFIG) --cflags $(TK_LIBDEPS)) -Itoolkit/src/sugar -I/usr/include/python$(PYTHON_VERSION) \
	-DPACKAGE=\"sugar-toolkit\" -DVERSION=\"$(SUCROSE_VERSION)\"
TK_EXTRA_LDFLAGS=-fPIC $(shell $(PKG_CONFIG) --libs $(TK_LIBDEPS)) -L/usr/lib/python$(PYTHON_VERSION) -lpython$(PYTHON_VERSION)

toolkit/%.o: toolkit/%.c
	$(CC) $(ALLCFLAGS) $(TK_EXTRA_CFLAGS) -c -o $@ $<

TK_OBJS=$(TK_SRCDIR)/sugar-marshal.o $(TK_SRCDIR)/_sugarext.o $(patsubst %.c,%.o,$(shell find $(TK_SRCDIR) -name '*.c'))
$(TK_SRCDIR)/_sugarext.so: $(TK_OBJS)
	$(CC) -shared $(LDFLAGS) $(TK_EXTRA_LDFLAGS) -o $@ -Wl,-soname,$(basename $@) $^

# End crazy sugar toolkit python C module

# Build crazy sugar python C extension
BASE_SRCDIR = base/src/sugar
$(BASE_SRCDIR)/_sugarbaseext.c: $(BASE_SRCDIR)/_sugarbaseext.defs $(BASE_SRCDIR)/_sugarbaseext.override
	$(PYGTK_CODEGEN) \
		--override $(BASE_SRCDIR)/_sugarbaseext.override \
		--prefix py_sugarbaseext $(BASE_SRCDIR)/_sugarbaseext.defs > $@

BASE_LIBDEPS=pygobject-2.0
BASE_EXTRA_CFLAGS=-fPIC $(shell $(PKG_CONFIG) --cflags $(BASE_LIBDEPS)) -Ibase/src/sugar -I/usr/include/python$(PYTHON_VERSION) \
	-DPACKAGE=\"sugar-base\" -DVERSION=\"$(SUCROSE_VERSION)\" -DXDG_PREFIX=sugar_mime
BASE_EXTRA_LDFLAGS=-fPIC $(shell $(PKG_CONFIG) --libs $(BASE_LIBDEPS)) -L/usr/lib/python$(PYTHON_VERSION) -lpython$(PYTHON_VERSION)

base/%.o: base/%.c
	$(CC) $(ALLCFLAGS) $(BASE_EXTRA_CFLAGS) -c -o $@ $<

BASE_OBJS=$(BASE_SRCDIR)/_sugarbaseext.o $(patsubst %.c,%.o,$(shell find $(BASE_SRCDIR) -name '*.c'))
$(BASE_SRCDIR)/_sugarbaseext.so: $(BASE_OBJS)
	$(CC) -shared $(LDFLAGS) $(BASE_EXTRA_LDFLAGS) -o $@ -Wl,-soname,$(basename $@) $^

# End crazy sugar python C module

# Build gtk engine

ENGINE_SRCDIR = artwork/gtk/engine

ENGINE_LIBDEPS=gtk+-2.0 gobject-2.0 cairo
ENGINE_EXTRA_CFLAGS=-fPIC $(shell $(PKG_CONFIG) --cflags $(ENGINE_LIBDEPS)) -Iartwork/gtk/engine
ENGINE_EXTRA_LDFLAGS=-fPIC $(shell $(PKG_CONFIG) --libs $(ENGINE_LIBDEPS))

artwork/gtk/engine/%.o: artwork/gtk/engine/%.c
	$(CC) $(ALLCFLAGS) $(ENGINE_EXTRA_CFLAGS) -c -o $@ $<

ENGINE_OBJS=$(patsubst %.c,%.o,$(shell find $(ENGINE_SRCDIR) -name '*.c'))
$(ENGINE_SRCDIR)/libsugar.so: $(ENGINE_OBJS)
	$(CC) -shared $(LDFLAGS) $(ENGINE_EXTRA_LDFLAGS) -o $@ -Wl,-soname,$(basename $@) $^

# End gtk engine

# D-Bus service files; ick.
DBUS_FILES=datastore/etc/org.laptop.sugar.DataStore.service presence-service/org.laptop.Sugar.Presence.service

presence-service/org.laptop.Sugar.Presence.service: presence-service/src/org.laptop.Sugar.Presence.service.in config.mk
	sed -e "s,@bindir@,$(BINDIR)," $< > $@

datastore/etc/org.laptop.sugar.DataStore.service: datastore/etc/org.laptop.sugar.DataStore.service.in config.mk
	sed -e s,@bindir@,$(BINDIR), $< > $@

main/data/sugar.schemas: main/data/sugar.schemas.in config.mk
	#$(INTLTOOL_MERGE) main/po;#$(wildcard main/po/*.po);
	#LC_ALL=C $(INTLTOOL_MERGE) -s -u -c po/.intltool-merge-cache main/po $< $@;
	LC_ALL=C $(INTLTOOL_MERGE) -s -u main/po $< $@;

main/data/sugar.xml: main/data/sugar.xml.in config.mk
	#$(INTLTOOL_MERGE) main/po;#$(wildcard main/po/*.po);
	#LC_ALL=C $(INTLTOOL_MERGE) -x -u -c po/.intltool-merge-cache main/po $< $@;
	LC_ALL=C $(INTLTOOL_MERGE) -x -u main/po $< $@;

main/src/jarabe/config.py: main/src/jarabe/config.py.in config.mk
	sed -e s,@prefix@,$(DESTDIR)$(prefix),g -e s,@SUCROSE_VERSION@,$(SUCROSE_VERSION),g $< > $@

main/bin/sugar-env: main/data/sugar-env.in config.mk
	sed 	-e s,@prefix@,$(DESTDIR)$(prefix),g \
		-e s,@DATADIR@,$(DATADIR),g \
		-e s,@SYSCONFDIR@,$(SYSCONFDIR),g \
		-e s,@LIBDIR@,$(LIBDIR),g \
		-e s,@BINDIR@,$(BINDIR),g \
		-e s,@PYTHON_SITEPACKAGES@,$(PYTHON_SITEPACKAGES),g \
		$< > $@

# End D-Bus service files.

# GTK Themes

artwork/gtk/theme/sugar-%.gtkrc: artwork/gtk/theme/gtkrc.em
	$(EMPY) -p $$ -D scaling=\'$*\' $^ > $@

# End GTK Themes

# PS binary

presence-service/sugar-presence-service: presence-service/src/sugar-presence-service.in
	sed -e "s,@prefix@,$(DESTDIR)$(prefix)," $^ > $@

presence-service/src/config.py: config.mk
	echo "VERSION = \"$(SUCROSE_VERSION)\"" > $@

# End PS binary.

# Cursors

artwork/cursor/sugar/cursors: $(wildcard artwork/cursor/*.png) artwork/cursor/sugar/sugar.cursortheme
	$(ICON_SLICER) --image-dir=artwork/cursor/sugar --output-dir=artwork/cursor/sugar artwork/cursor/sugar/sugar.cursortheme

# End Cursors.

ALL_OBJS=$(BASE_OBJS) $(DS_OBJS) $(TK_OBJS) $(ENGINE_OBJS)
BINARIES = $(wildcard main/bin/*) $(wildcard datastore/bin/*) presence-service/sugar-presence-service main/bin/sugar-env
DATA = $(addprefix main/data/,sugar-72.gtkrc sugar-100.gtkrc activities.defaults kbdconfig mime.defaults)
CLEAN = $(ALL_OBJS) $(ALL_OBJS:%.o=%.d) $(DS_SRCDIR)/metadatareader.so $(BASE_SRCDIR)/_sugarbaseext.so $(TK_SRCDIR)/_sugarext.so \
	presence-service/sugar-presence-service presence-service/org.laptop.Sugar.Presence.service presence-service/src/config.py \
	artwork/cursor/sugar/cursors artwork/gtk/theme/*.gtkrc artwork/gtk/engine/libsugar.so \
	main/data/sugar.xml main/data/sugar.schemas main/jarabe/config.py main/bin/sugar-env main/src/config.py \
	tree

DS_PYTHON_DIRS=$(shell cd datastore/src; find * -type d)
DS_PYTHON_FILES=$(shell cd datastore/src; find * -name '*.py') carquinyol/metadatareader.so
BASE_PYTHON_DIRS=$(shell cd base/src; find * -type d)
BASE_PYTHON_FILES=$(shell cd base/src; find * -name '*.py') sugar/_sugarbaseext.so
MAIN_PYTHON_DIRS=$(shell cd main/src; find * -type d)
MAIN_PYTHON_FILES=$(shell cd main/src; find * -name '*.py' -o -name '*.png') jarabe/config.py
TOOLKIT_PYTHON_DIRS=$(shell cd toolkit/src; find * -type d)
TOOLKIT_PYTHON_FILES=$(shell cd toolkit/src; find * -name '*.py') sugar/_sugarext.so
ARTWORK_THEME_FILES=artwork/icons/index.theme

PS_PYTHON_DIRS=sugar-presence-service
PS_PYTHON_FILES=$(shell cd presence-service/src; find * -name '*.py') config.py
PS_PYTHON_SITEPACKAGES:=$(DESTDIR)/$(prefix)/share/sugar-presence-service

EXTENSION_DIRS=$(shell cd main/extensions; find * -type d)
EXTENSION_FILES=$(shell cd main/extensions; find * -name '*.py')
EXTENSIONSDIR=$(DATADIR)/sugar/extensions

PYTHON_DIRS = $(DS_PYTHON_DIRS) $(BASE_PYTHON_DIRS) $(MAIN_PYTHON_DIRS) $(TOOLKIT_PYTHON_DIRS)

all: $(BINARIES) $(DATA) $(DBUS_FILES) \
	$(addprefix datastore/src/,$(DS_PYTHON_FILES)) \
	$(addprefix presence-service/src/,$(PS_PYTHON_FILES)) \
	$(addprefix base/src/,$(BASE_PYTHON_FILES)) \
	$(addprefix main/src/,$(MAIN_PYTHON_FILES)) \
	$(addprefix toolkit/src/,$(TOOLKIT_PYTHON_FILES)) \
	$(addprefix main/extensions/,$(EXTENSION_FILES)) \
	$(addprefix main/data/,sugar.xml sugar.schemas) \
	artwork/cursor/sugar/cursors \
	artwork/gtk/theme/sugar-72.gtkrc \
	artwork/gtk/theme/sugar-100.gtkrc \
	artwork/gtk/engine/libsugar.so

install-fast: all
	for d in $(BINDIR) $(SYSCONFDIR) $(DBUSDIR) $(SUGARDIR) $(SUGARDIR)/icons \
		$(addprefix $(PYTHON_SITEPACKAGES)/,$(PYTHON_DIRS)) \
		$(EXTENSIONSDIR) $(addprefix $(EXTENSIONSDIR)/,$(EXTENSION_DIRS)) \
		$(DATADIR)/themes/sugar-72/gtk-2.0 $(DATADIR)/themes/sugar-100/gtk-2.0 \
		$(DATADIR)/locale $(SCHEMADIR) $(MIMEDIR) $(CURSORDIR) $(ENGINEDIR) \
		$(addprefix $(PS_PYTHON_SITEPACKAGES)/,$(PS_PYTHON_DIRS)); do \
		install -d $$d; \
	done
	for f in $(BINARIES); do \
		install -m0755 $$f $(BINDIR); \
	done
	for f in $(DBUS_FILES); do \
		install -m0644 $$f $(DBUSDIR); \
	done
	for f in $(DATA); do \
		install -m0644 $$f $(SUGARDIR); \
	done
	for f in $(wildcard main/data/icons/*); do \
		install -m0644 $$f $(SUGARDIR)/icons; \
	done
	for f in $(DS_PYTHON_FILES); do \
		install -m0644 datastore/src/$$f $(PYTHON_SITEPACKAGES)/$$(dirname $$f); \
	done
	for f in $(BASE_PYTHON_FILES); do \
		install -m0644 base/src/$$f $(PYTHON_SITEPACKAGES)/$$(dirname $$f); \
	done
	for f in $(MAIN_PYTHON_FILES); do \
		install -m0644 main/src/$$f $(PYTHON_SITEPACKAGES)/$$(dirname $$f); \
	done
	for f in $(TOOLKIT_PYTHON_FILES); do \
		install -m0644 toolkit/src/$$f $(PYTHON_SITEPACKAGES)/$$(dirname $$f); \
	done
	for f in $(PS_PYTHON_FILES); do \
		install -m0644 presence-service/src/$$f $(PS_PYTHON_SITEPACKAGES)/$$(dirname $$f); \
	done
	for f in $(EXTENSION_FILES); do \
		install -m0644 main/extensions/$$f $(EXTENSIONSDIR)/$$(dirname $$f); \
	done
	for f in $(ARTWORK_THEME_FILES); do \
		install -m0644 $$f $(ICONDIR); \
	done
	for f in artwork/cursor/sugar/cursors/*; do \
		install -m0644 $$f $(CURSORDIR); \
	done
	install -m0644 artwork/gtk/theme/sugar-72.gtkrc $(DATADIR)/themes/sugar-72/gtk-2.0/gtkrc;
	install -m0644 artwork/gtk/theme/sugar-100.gtkrc $(DATADIR)/themes/sugar-100/gtk-2.0/gtkrc;
	install -m0644 artwork/gtk/engine/libsugar.so $(ENGINEDIR);
	install -m0644 main/data/sugar.schemas $(SCHEMADIR);
	install -m0644 main/data/sugar.xml $(MIMEDIR);

install-slow: all
	(export GCONF_CONFIG_SOURCE="xml::$(SYSCONFDIR)/gconf/gconf.xml.defaults";\
	 $(GCONFTOOL2) --makefile-install-rule $(SCHEMADIR)/sugar.schemas);
	$(UPDATE_MIME_DATABASE) $(DATADIR)/mime;
	for d in $(shell ls artwork/icons/scalable); do \
		install -d $(ICONDIR)/scalable/$$d; \
		for f in artwork/icons/scalable/$$d/*; do \
			install -m0644 $$f $(ICONDIR)/scalable/$$d; \
		done; \
		(cd $(ICONDIR)/scalable && $(ICONMAP) -c $$d) \
	done
	gtk-update-icon-cache -f $(ICONDIR)

install: install-fast install-slow

clean:
	rm -rf $(CLEAN);

distclean: clean
	rm -f config.mk main/src/jarabe/config.py presence-service/src/config.py

# Development helpers

DEBIAN_DEPS = devscripts python-dev python-central debhelper dh-buildinfo libglib2.0-dev python-gtk2-dev libgconf2-dev gettext intltool shared-mime-info python-empy quilt patchutils libgtk2.0-dev libcairo2-dev icon-slicer icon-naming-utils x11-apps chrpath python-all-dev python-gobject-dev python-dbus python-gobject openssh-client libsm-dev libice-dev libasound2-dev libxml-parser-perl vnc4server xvnc4viewer

FEDORA_DEPS = pkgconfig perl-XML-Parser gettext python pygtk2-devel gtk2-devel GConf2-devel intltool libSM-devel alsa-lib-devel icon-slicer icon-naming-utils xorg-x11-apps pygtk2-codegen python-decorator tigervnc tigervnc-server vte gcc glibc-devel redhat-lsb

deps:
	-(lsb_release -i | grep 'Debian\|Ubuntu') && sudo aptitude install $(DEBIAN_DEPS)
	-(grep 'Fedora' /etc/fedora-release) && sudo yum install $(FEDORA_DEPS)

run:
	$(MAKE) DESTDIR=`pwd`/tree install
	`pwd`/tree/usr/bin/sugar-env sugar-emulator

# .PHONY:
.DEFAULT_GOAL := all

-include $(ALL_OBJS:%.o=%.d)