ladishd: improve logs
[ladish.git] / wscript
blobceb59e23aa36a3cb3925fc91758067e66f09f5a9
1 #! /usr/bin/env python
2 # encoding: utf-8
4 import os
5 import Options
6 import Utils
7 import shutil
8 import re
10 APPNAME='ladish'
11 VERSION='0.2'
12 DBUS_NAME_BASE = 'org.ladish'
14 # these variables are mandatory ('/' are converted automatically)
15 srcdir = '.'
16 blddir = 'build'
18 def display_msg(conf, msg="", status = None, color = None):
19 if status:
20 conf.check_message_1(msg)
21 conf.check_message_2(status, color)
22 else:
23 Utils.pprint('NORMAL', msg)
25 def display_raw_text(conf, text, color = 'NORMAL'):
26 Utils.pprint(color, text, sep = '')
28 def display_line(conf, text, color = 'NORMAL'):
29 Utils.pprint(color, text, sep = os.linesep)
31 def yesno(bool):
32 if bool:
33 return "yes"
34 else:
35 return "no"
37 def set_options(opt):
38 opt.tool_options('compiler_cc')
39 opt.tool_options('compiler_cxx')
40 opt.tool_options('boost')
41 opt.add_option('--enable-pkg-config-dbus-service-dir', action='store_true', default=False, help='force D-Bus service install dir to be one returned by pkg-config')
42 opt.add_option('--enable-liblash', action='store_true', default=False, help='Build LASH compatibility library')
44 def add_cflag(conf, flag):
45 conf.env.append_unique('CXXFLAGS', flag)
46 conf.env.append_unique('CCFLAGS', flag)
48 def configure(conf):
49 conf.check_tool('compiler_cc')
50 conf.check_tool('compiler_cxx')
51 conf.check_tool('boost')
53 conf.check_cfg(
54 package = 'dbus-1',
55 atleast_version = '1.0.0',
56 mandatory = True,
57 errmsg = "not installed, see http://dbus.freedesktop.org/",
58 args = '--cflags --libs')
60 dbus_dir = conf.check_cfg(package='dbus-1', args='--variable=session_bus_services_dir', msg="Retrieving D-Bus services dir")
61 if not dbus_dir:
62 return
64 dbus_dir = dbus_dir.strip()
65 conf.env['DBUS_SERVICES_DIR_REAL'] = dbus_dir
67 if Options.options.enable_pkg_config_dbus_service_dir:
68 conf.env['DBUS_SERVICES_DIR'] = dbus_dir
69 else:
70 conf.env['DBUS_SERVICES_DIR'] = os.path.join(os.path.normpath(conf.env['PREFIX']), 'share', 'dbus-1', 'services')
72 conf.env['BUILD_LIBLASH'] = Options.options.enable_liblash
74 conf.check_cfg(
75 package = 'uuid',
76 mandatory = True,
77 errmsg = "not installed, see http://e2fsprogs.sourceforge.net/",
78 args = '--cflags --libs')
80 conf.check(
81 header_name='expat.h',
82 mandatory = True,
83 errmsg = "not installed, see http://expat.sourceforge.net/")
85 conf.env['LIB_EXPAT'] = ['expat']
87 build_gui = True
89 if build_gui and not conf.check_cfg(
90 package = 'glib-2.0',
91 mandatory = False,
92 errmsg = "not installed, see http://www.gtk.org/",
93 args = '--cflags --libs'):
94 build_gui = False
96 if build_gui and not conf.check_cfg(
97 package = 'dbus-glib-1',
98 mandatory = False,
99 errmsg = "not installed, see http://dbus.freedesktop.org/",
100 args = '--cflags --libs'):
101 build_gui = False
103 if build_gui and not conf.check_cfg(
104 package = 'gtk+-2.0',
105 mandatory = False,
106 errmsg = "not installed, see http://www.gtk.org/",
107 args = '--cflags --libs'):
108 build_gui = False
110 if build_gui and not conf.check_cfg(
111 package = 'libglade-2.0',
112 mandatory = False,
113 errmsg = "not installed, see http://ftp.gnome.org/pub/GNOME/sources/libglade/",
114 args = '--cflags --libs'):
115 build_gui = False
117 if build_gui and not conf.check_cfg(
118 package = 'flowcanvas',
119 mandatory = False,
120 atleast_version = '0.5.3',
121 errmsg = "not installed, see http://drobilla.net/software/flowcanvas/",
122 args = '--cflags --libs'):
123 build_gui = False
125 if build_gui:
126 # We need the boost headers package (e.g. libboost-dev)
127 # shared_ptr.hpp and weak_ptr.hpp
128 build_gui = conf.check_boost(errmsg="not found, see http://boost.org/")
130 conf.env['BUILD_GLADISH'] = build_gui
132 add_cflag(conf, '-g')
133 add_cflag(conf, '-Wall')
134 add_cflag(conf, '-Werror')
136 conf.define('DATA_DIR', os.path.normpath(os.path.join(conf.env['PREFIX'], 'share', APPNAME)))
137 conf.define('PACKAGE_VERSION', VERSION)
138 conf.define('DBUS_NAME_BASE', DBUS_NAME_BASE)
139 conf.define('DBUS_BASE_PATH', '/' + DBUS_NAME_BASE.replace('.', '/'))
140 conf.define('BASE_NAME', APPNAME)
141 conf.define('_GNU_SOURCE', 1)
142 conf.write_config_header('config.h')
144 display_msg(conf)
146 display_msg(conf, "==================")
147 version_msg = APPNAME + "-" + VERSION
149 if os.access('version.h', os.R_OK):
150 data = file('version.h').read()
151 m = re.match(r'^#define GIT_VERSION "([^"]*)"$', data)
152 if m != None:
153 version_msg += " exported from " + m.group(1)
154 elif os.access('.git', os.R_OK):
155 version_msg += " git revision will checked and eventually updated during build"
157 display_msg(conf, version_msg)
159 display_msg(conf)
160 display_msg(conf, "Install prefix", conf.env['PREFIX'], 'CYAN')
162 display_msg(conf, 'Build gladish', yesno(conf.env['BUILD_GLADISH']))
163 display_msg(conf, 'Build liblash', yesno(Options.options.enable_liblash))
165 if conf.env['DBUS_SERVICES_DIR'] != conf.env['DBUS_SERVICES_DIR_REAL']:
166 display_msg(conf)
167 display_line(conf, "WARNING: D-Bus session services directory as reported by pkg-config is", 'RED')
168 display_raw_text(conf, "WARNING:", 'RED')
169 display_line(conf, conf.env['DBUS_SERVICES_DIR_REAL'], 'CYAN')
170 display_line(conf, 'WARNING: but service file will be installed in', 'RED')
171 display_raw_text(conf, "WARNING:", 'RED')
172 display_line(conf, conf.env['DBUS_SERVICES_DIR'], 'CYAN')
173 display_line(conf, 'WARNING: You may need to adjust your D-Bus configuration after installing ladish', 'RED')
174 display_line(conf, 'WARNING: You can override dbus service install directory', 'RED')
175 display_line(conf, 'WARNING: with --enable-pkg-config-dbus-service-dir option to this script', 'RED')
177 display_msg(conf)
179 def build(bld):
180 daemon = bld.new_task_gen('cc', 'program')
181 daemon.target = 'ladishd'
182 daemon.includes = "build/default" # XXX config.h version.h and other generated files
183 daemon.uselib = 'DBUS-1 UUID EXPAT'
184 daemon.ver_header = 'version.h'
185 daemon.env.append_value("LINKFLAGS", ["-lutil", "-ldl", "-Wl,-E"])
187 daemon.source = [
188 'jack_proxy.c',
189 'graph_proxy.c',
190 'catdup.c',
193 for source in [
194 'main.c',
195 'loader.c',
196 'log.c',
197 'dirhelpers.c',
198 'sigsegv.c',
199 'proctitle.c',
200 'appdb.c',
201 'procfs.c',
202 'control.c',
203 'studio.c',
204 'graph.c',
205 'client.c',
206 'port.c',
207 'jack_dispatch.c',
208 'dict.c',
209 'graph_dict.c',
210 'escape.c',
211 'studio_jack_conf.c',
212 'cmd_load_studio.c',
213 'cmd_new_studio.c',
214 'cmd_rename_studio.c',
215 'cmd_save_studio.c',
216 'cmd_start_studio.c',
217 'cmd_stop_studio.c',
218 'cmd_unload_studio.c',
219 'cmd_exit.c',
220 'cqueue.c',
222 daemon.source.append(os.path.join("daemon", source))
224 for source in [
225 'signal.c',
226 'method.c',
227 'error.c',
228 'object_path.c',
229 'interface.c',
230 'helpers.c',
232 daemon.source.append(os.path.join("dbus", source))
234 daemon.source.append(os.path.join("common", "safety.c"))
236 # process name.arnaudov.nedko.ladish.service.in -> name.arnaudov.nedko.ladish.service
237 import misc
238 obj = bld.new_task_gen('subst')
239 obj.source = os.path.join('daemon', 'dbus.service.in')
240 obj.target = DBUS_NAME_BASE + '.service'
241 obj.dict = {'dbus_object_path': DBUS_NAME_BASE,
242 'daemon_bin_path': os.path.join(bld.env['PREFIX'], 'bin', daemon.target)}
243 obj.install_path = bld.env['DBUS_SERVICES_DIR'] + os.path.sep
244 obj.fun = misc.subst_func
246 if bld.env['BUILD_LIBLASH']:
247 liblash = bld.new_task_gen('cc', 'shlib')
248 liblash.includes = "build/default" # XXX config.h version.h and other generated files
249 liblash.uselib = 'DBUS-1'
250 liblash.target = 'lash'
251 liblash.vnum = "1.1.1"
252 liblash.defines = ['LOG_OUTPUT_STDOUT']
253 liblash.source = [os.path.join("lash_compat", "liblash", 'lash.c')]
255 # pkgpyexec_LTLIBRARIES = _lash.la
256 # INCLUDES = $(PYTHON_INCLUDES)
257 # _lash_la_LDFLAGS = -module -avoid-version ../liblash/liblash.la
258 # _lash_la_SOURCES = lash.c lash.h lash_wrap.c
259 # pkgpyexec_SCRIPTS = lash.py
260 # CLEANFILES = lash_wrap.c lash.py lash.pyc zynjacku.defs
261 # EXTRA_DIST = test.py lash.i lash.py
262 # lash_wrap.c lash.py: lash.i lash.h
263 # swig -o lash_wrap.c -I$(top_srcdir) -python $(top_srcdir)/$(subdir)/lash.i
265 #####################################################
266 # gladish
267 if bld.env['BUILD_GLADISH']:
268 gladish = bld.new_task_gen('cxx', 'program')
269 gladish.features.append('cc')
270 gladish.target = 'gladish'
271 gladish.defines = ['LOG_OUTPUT_STDOUT']
272 gladish.includes = "build/default" # XXX config.h version.h and other generated files
273 gladish.uselib = 'DBUS-1 DBUS-GLIB-1 LIBGLADE-2.0 FLOWCANVAS'
275 gladish.source = [
276 'jack_proxy.c',
277 'graph_proxy.c',
278 'studio_proxy.c',
279 'catdup.c',
282 for source in [
283 'main.c',
284 #'lash_client.cpp',
285 #'lash_proxy.cpp',
286 #'load_projects_dialog.cpp',
287 #'project.cpp',
288 'world_tree.c',
289 'graph_view.c',
290 #'project_properties.cpp',
291 #'session.cpp',
292 #'a2j_proxy.cpp',
293 'dbus_helpers.c',
294 'canvas.cpp',
295 'graph_canvas.c',
296 'glade.c',
297 'control_proxy.c',
298 'ask_dialog.c',
300 gladish.source.append(os.path.join("gui", source))
302 for source in [
303 'method.c',
304 'helpers.c',
306 gladish.source.append(os.path.join("dbus", source))
308 # Glade UI definitions (XML)
309 bld.install_files(bld.env['DATA_DIR'], 'gui/gui.glade')
311 bld.install_files('${PREFIX}/bin', 'ladish_control', chmod=0755)
313 # 'Desktop' file (menu entry, icon, etc)
314 #obj = bld.create_obj('subst')
315 #obj.source = 'patchage.desktop.in'
316 #obj.target = 'patchage.desktop'
317 #obj.dict = {
318 # 'BINDIR' : bld.env()['BINDIR'],
319 # 'APP_INSTALL_NAME' : bld.env()['APP_INSTALL_NAME'],
320 # 'APP_HUMAN_NAME' : bld.env()['APP_HUMAN_NAME'],
322 #install_as(os.path.normpath(bld.env()['DATADIR'] + 'applications/'), bld.env()['APP_INSTALL_NAME'] + '.desktop', 'build/default/patchage.desktop')
324 # Icons
326 # Installation layout (with /usr prefix)
327 # /usr/bin/patchage
328 # /usr/share/applications/patchage.desktop
329 # /usr/share/icons/hicolor/16x16/apps/patchage.png
330 # /usr/share/icons/hicolor/22x22/apps/patchage.png
331 # /usr/share/icons/hicolor/24x24/apps/patchage.png
332 # /usr/share/icons/hicolor/32x32/apps/patchage.png
333 # /usr/share/icons/hicolor/48x48/apps/patchage.png
334 # /usr/share/icons/hicolor/scalable/apps/patchage.svg
335 # /usr/share/patchage/patchage.glade
337 # icon cache is updated using:
338 # gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
340 # Dave disabled this, ask why before removing this
341 #install_as(os.path.normpath(bld.env()['PREFIX'] + '/share/icons/hicolor/scalable/apps/'), bld.env()['APP_INSTALL_NAME'] + '.svg', 'icons/scalable/patchage.svg')
343 #icon_sizes = ['16x16', '22x22', '24x24', '32x32', '48x48']
344 #for icon_size in icon_sizes:
345 # install_as(os.path.normpath(bld.env()['DATADIR'] + '/icons/hicolor/' + icon_size + '/apps/'), bld.env()['APP_INSTALL_NAME'] + '.png', 'icons/' + icon_size + '/patchage.png')
347 def dist_hook():
348 shutil.copy('../build/default/version.h', "./")
350 import commands
351 from Constants import RUN_ME
352 from TaskGen import feature, after
353 import Task, Utils
355 @feature('cc')
356 @after('apply_core')
357 def process_git(self):
358 if getattr(self, 'ver_header', None):
359 tsk = self.create_task('git_ver')
360 tsk.set_outputs(self.path.find_or_declare(self.ver_header))
362 def git_ver(self):
363 header = self.outputs[0].abspath(self.env)
364 if os.access('../version.h', os.R_OK):
365 shutil.copy('../version.h', header)
366 data = file(header).read()
367 m = re.match(r'^#define GIT_VERSION "([^"]*)"$', data)
368 if m != None:
369 self.ver = m.group(1)
370 Utils.pprint('BLUE', "tarball from git revision " + self.ver)
371 else:
372 self.ver = "tarball"
373 return
375 if os.access('../.git', os.R_OK):
376 self.ver = commands.getoutput("LANG= git rev-parse HEAD").splitlines()[0]
377 if commands.getoutput("LANG= git diff-index --name-only HEAD").splitlines():
378 self.ver += "-dirty"
380 Utils.pprint('BLUE', "git revision " + self.ver)
381 else:
382 self.ver = "unknown"
384 fi = open(header, 'w')
385 fi.write('#define GIT_VERSION "%s"\n' % self.ver)
386 fi.close()
388 cls = Task.task_type_from_func('git_ver', vars=[], func=git_ver, color='BLUE', before='cc')
390 def always(self):
391 return RUN_ME
392 cls.runnable_status = always
394 def post_run(self):
395 sg = Utils.h_list(self.ver)
396 node = self.outputs[0]
397 variant = node.variant(self.env)
398 self.generator.bld.node_sigs[variant][node.id] = sg
399 cls.post_run = post_run