Reply messages for all methods of the patchbay interface
[ladish.git] / wscript
blobdb4d0071aad441bbc9c807b8e7cfb6148b3b3470
1 #! /usr/bin/env python
2 # encoding: utf-8
4 import os
5 import Options
6 import Utils
8 APPNAME='ladish'
9 VERSION='1'
10 DBUS_NAME_BASE = 'org.ladish'
12 # these variables are mandatory ('/' are converted automatically)
13 srcdir = '.'
14 blddir = 'build'
16 def display_msg(conf, msg="", status = None, color = None):
17 if status:
18 conf.check_message_1(msg)
19 conf.check_message_2(status, color)
20 else:
21 Utils.pprint('NORMAL', msg)
23 def display_raw_text(conf, text, color = 'NORMAL'):
24 Utils.pprint(color, text, sep = '')
26 def display_line(conf, text, color = 'NORMAL'):
27 Utils.pprint(color, text, sep = os.linesep)
29 def set_options(opt):
30 opt.tool_options('compiler_cc')
31 opt.tool_options('compiler_cxx')
32 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')
34 def add_cflag(conf, flag):
35 conf.env.append_unique('CXXFLAGS', flag)
36 conf.env.append_unique('CCFLAGS', flag)
38 def configure(conf):
39 conf.check_tool('compiler_cc')
40 conf.check_tool('compiler_cxx')
42 conf.check_cfg(
43 package = 'dbus-1',
44 atleast_version = '1.0.0',
45 mandatory = True,
46 errmsg = "not installed, see http://dbus.freedesktop.org/",
47 args = '--cflags --libs')
49 dbus_dir = conf.check_cfg(package='dbus-1', args='--variable=session_bus_services_dir', msg="Retrieving D-Bus services dir")
50 if not dbus_dir:
51 return
53 dbus_dir = dbus_dir.strip()
54 conf.env['DBUS_SERVICES_DIR_REAL'] = dbus_dir
56 if Options.options.enable_pkg_config_dbus_service_dir:
57 conf.env['DBUS_SERVICES_DIR'] = dbus_dir
58 else:
59 conf.env['DBUS_SERVICES_DIR'] = os.path.join(os.path.normpath(conf.env['PREFIX']), 'share', 'dbus-1', 'services')
61 conf.check_cfg(
62 package = 'uuid',
63 mandatory = True,
64 errmsg = "not installed, see http://e2fsprogs.sourceforge.net/",
65 args = '--cflags --libs')
67 conf.check(header_name='expat.h', define_name="HAVE_EXPAT")
69 if conf.is_defined('HAVE_EXPAT'):
70 conf.env['LIB_EXPAT'] = ['expat']
72 conf.check_cfg(
73 package = 'dbus-glib-1',
74 mandatory = True,
75 errmsg = "not installed, see http://dbus.freedesktop.org/",
76 args = '--cflags --libs')
78 conf.check_cfg(
79 package = 'glibmm-2.4',
80 mandatory = True,
81 errmsg = "not installed, see http://www.gtkmm.org/",
82 args = '--cflags --libs')
84 conf.check_cfg(
85 package = 'gtkmm-2.4',
86 mandatory = True,
87 atleast_version = '2.11.12',
88 errmsg = "not installed, see http://www.gtkmm.org/",
89 args = '--cflags --libs')
91 conf.check_cfg(
92 package = 'libgnomecanvasmm-2.6',
93 mandatory = True,
94 errmsg = "not installed, see http://www.gtkmm.org/",
95 args = '--cflags --libs')
97 conf.check_cfg(
98 package = 'libglademm-2.4',
99 mandatory = True,
100 errmsg = "not installed, see http://www.gtkmm.org/",
101 args = '--cflags --libs')
103 conf.check_cfg(
104 package = 'flowcanvas',
105 mandatory = True,
106 atleast_version = '0.4.0',
107 errmsg = "not installed, see http://drobilla.net/software/flowcanvas/",
108 args = '--cflags --libs')
110 # We need the boost headers package (e.g. libboost-dev)
111 # shared_ptr.hpp and weak_ptr.hpp
112 conf.check_tool('boost')
113 conf.check_boost()
115 add_cflag(conf, '-g')
116 add_cflag(conf, '-Wall')
117 add_cflag(conf, '-Werror')
119 conf.define('DATA_DIR', os.path.normpath(os.path.join(conf.env['PREFIX'], 'share', APPNAME)))
120 conf.define('DEFAULT_PROJECT_DIR', "audio-projects")
121 conf.define('PACKAGE_VERSION', VERSION)
122 conf.define('DBUS_NAME_BASE', DBUS_NAME_BASE)
123 conf.define('DBUS_BASE_PATH', '/' + DBUS_NAME_BASE.replace('.', '/'))
124 conf.define('_GNU_SOURCE', 1)
125 conf.write_config_header('config.h')
127 display_msg(conf)
129 display_msg(conf, "==================")
130 version_msg = APPNAME + "-" + VERSION
132 #if svnrev:
133 # version_msg += " exported from r" + rev
134 #else:
135 # version_msg += " git revision will checked and eventually updated during build"
137 display_msg(conf, version_msg)
139 display_msg(conf)
140 display_msg(conf, "Install prefix", conf.env['PREFIX'], 'CYAN')
142 display_msg(conf, 'D-Bus service install directory', conf.env['DBUS_SERVICES_DIR'], 'CYAN')
144 if conf.env['DBUS_SERVICES_DIR'] != conf.env['DBUS_SERVICES_DIR_REAL']:
145 display_msg(conf)
146 display_line(conf, "WARNING: D-Bus session services directory as reported by pkg-config is", 'RED')
147 display_raw_text(conf, "WARNING:", 'RED')
148 display_line(conf, conf.env['DBUS_SERVICES_DIR_REAL'], 'CYAN')
149 display_line(conf, 'WARNING: but service file will be installed in', 'RED')
150 display_raw_text(conf, "WARNING:", 'RED')
151 display_line(conf, conf.env['DBUS_SERVICES_DIR'], 'CYAN')
152 display_line(conf, 'WARNING: You may need to adjust your D-Bus configuration after installing jackdbus', 'RED')
153 display_line(conf, 'WARNING: You can override dbus service install directory', 'RED')
154 display_line(conf, 'WARNING: with --enable-pkg-config-dbus-service-dir option to this script', 'RED')
156 display_msg(conf)
158 def build(bld):
159 daemon = bld.new_task_gen('cc', 'program')
160 daemon.target = 'ladishd'
161 daemon.includes = "build/default" # XXX config.h version.h and other generated files
162 daemon.uselib = 'DBUS-1 LIBXML-2.0 UUID'
163 daemon.ver_header = 'version.h'
164 daemon.env.append_value("LINKFLAGS", ["-lutil", "-ldl"])
166 daemon.source = [
167 'jack_proxy.c',
170 for source in [
171 'main.c',
172 'loader.c',
173 'log.c',
174 'sigsegv.c',
175 'proctitle.c',
176 'appdb.c',
177 'procfs.c',
178 'control.c',
179 'jack.c',
180 'studio.c',
181 'catdup.c',
182 'patchbay.c',
184 daemon.source.append(os.path.join("daemon", source))
186 for source in [
187 'service.c',
188 'signal.c',
189 'method.c',
190 'error.c',
191 'object_path.c',
192 'introspection.c',
193 'interface.c',
194 'helpers.c',
196 daemon.source.append(os.path.join("dbus", source))
198 daemon.source.append(os.path.join("common", "safety.c"))
200 # process name.arnaudov.nedko.ladish.service.in -> name.arnaudov.nedko.ladish.service
201 import misc
202 obj = bld.new_task_gen('subst')
203 obj.source = os.path.join('daemon', 'dbus.service.in')
204 obj.target = DBUS_NAME_BASE + '.service'
205 obj.dict = {'dbus_object_path': DBUS_NAME_BASE,
206 'daemon_bin_path': os.path.join(bld.env['PREFIX'], 'bin', daemon.target)}
207 obj.install_path = bld.env['DBUS_SERVICES_DIR'] + os.path.sep
208 obj.fun = misc.subst_func
210 liblash = bld.new_task_gen('cc', 'shlib')
211 liblash.includes = "build/default" # XXX config.h version.h and other generated files
212 liblash.uselib = 'DBUS-1 LIBXML-2.0 UUID'
213 liblash.target = 'lash'
214 liblash.vnum = "1.1.1"
215 liblash.defines = ['LASH_OLD_API', 'DEBUG_OUTPUT_TERMINAL']
216 liblash.source = []
218 for source in [
219 'lash.c',
220 'lash_config.c',
221 'client.c',
222 'dbus_service.c',
223 'dbus_iface_client.c',
224 'protocol.c',
225 'event.c',
226 'args.c',
228 liblash.source.append(os.path.join("lash_compat", "liblash", source))
230 for source in [
231 'service.c',
232 'signal.c',
233 'method.c',
234 'error.c',
235 'object_path.c',
236 'introspection.c',
237 'interface.c',
239 liblash.source.append(os.path.join("dbus", source))
241 liblash.source.append(os.path.join("common", "safety.c"))
242 liblash.source.append(os.path.join("daemon", "legacy", "file.c"))
244 # pkgpyexec_LTLIBRARIES = _lash.la
245 # INCLUDES = $(PYTHON_INCLUDES)
246 # _lash_la_LDFLAGS = -module -avoid-version ../liblash/liblash.la
247 # _lash_la_SOURCES = lash.c lash.h lash_wrap.c
248 # pkgpyexec_SCRIPTS = lash.py
249 # CLEANFILES = lash_wrap.c lash.py lash.pyc zynjacku.defs
250 # EXTRA_DIST = test.py lash.i lash.py
251 # lash_wrap.c lash.py: lash.i lash.h
252 # swig -o lash_wrap.c -I$(top_srcdir) -python $(top_srcdir)/$(subdir)/lash.i
254 #####################################################
255 # gladish
256 gladish = bld.new_task_gen('cxx', 'program')
257 gladish.features.append('cc')
258 gladish.target = 'gladish'
259 gladish.defines = ['DEBUG_OUTPUT_TERMINAL']
260 gladish.includes = "build/default" # XXX config.h version.h and other generated files
261 gladish.uselib = 'DBUS-1 LIBGNOMECANVASMM-2.6 LIBGLADEMM-2.4 FLOWCANVAS DBUS-GLIB-1'
263 gladish.source = [
264 'jack_proxy.c',
265 'graph_proxy.c',
268 for source in [
269 'main.c',
270 #'lash_client.cpp',
271 #'lash_proxy.cpp',
272 #'load_projects_dialog.cpp',
273 #'project.cpp',
274 #'project_list.cpp',
275 #'project_properties.cpp',
276 #'session.cpp',
277 #'a2j_proxy.cpp',
278 'dbus_helpers.c',
279 'canvas.cpp',
280 'graph_canvas.c',
281 'glade.c',
282 'control_proxy.c',
284 gladish.source.append(os.path.join("gui", source))
286 for source in [
287 'method.c',
288 'helpers.c',
290 gladish.source.append(os.path.join("dbus", source))
292 # Glade UI definitions (XML)
293 bld.install_files(bld.env['DATA_DIR'], 'gui/gui.glade')
295 # 'Desktop' file (menu entry, icon, etc)
296 #obj = bld.create_obj('subst')
297 #obj.source = 'patchage.desktop.in'
298 #obj.target = 'patchage.desktop'
299 #obj.dict = {
300 # 'BINDIR' : bld.env()['BINDIR'],
301 # 'APP_INSTALL_NAME' : bld.env()['APP_INSTALL_NAME'],
302 # 'APP_HUMAN_NAME' : bld.env()['APP_HUMAN_NAME'],
304 #install_as(os.path.normpath(bld.env()['DATADIR'] + 'applications/'), bld.env()['APP_INSTALL_NAME'] + '.desktop', 'build/default/patchage.desktop')
306 # Icons
308 # Installation layout (with /usr prefix)
309 # /usr/bin/patchage
310 # /usr/share/applications/patchage.desktop
311 # /usr/share/icons/hicolor/16x16/apps/patchage.png
312 # /usr/share/icons/hicolor/22x22/apps/patchage.png
313 # /usr/share/icons/hicolor/24x24/apps/patchage.png
314 # /usr/share/icons/hicolor/32x32/apps/patchage.png
315 # /usr/share/icons/hicolor/48x48/apps/patchage.png
316 # /usr/share/icons/hicolor/scalable/apps/patchage.svg
317 # /usr/share/patchage/patchage.glade
319 # icon cache is updated using:
320 # gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
322 # Dave disabled this, ask why before removing this
323 #install_as(os.path.normpath(bld.env()['PREFIX'] + '/share/icons/hicolor/scalable/apps/'), bld.env()['APP_INSTALL_NAME'] + '.svg', 'icons/scalable/patchage.svg')
325 #icon_sizes = ['16x16', '22x22', '24x24', '32x32', '48x48']
326 #for icon_size in icon_sizes:
327 # install_as(os.path.normpath(bld.env()['DATADIR'] + '/icons/hicolor/' + icon_size + '/apps/'), bld.env()['APP_INSTALL_NAME'] + '.png', 'icons/' + icon_size + '/patchage.png')
329 def dist_hook():
330 pass
332 import commands
333 from Constants import RUN_ME
334 from TaskGen import feature, after
335 import Task, Utils
337 @feature('cc')
338 @after('apply_core')
339 def process_git(self):
340 if getattr(self, 'ver_header', None):
341 tsk = self.create_task('git_ver')
342 tsk.set_outputs(self.path.find_or_declare(self.ver_header))
344 def git_ver(self):
345 self.ver = "unknown"
346 self.ver = commands.getoutput("LANG= git rev-parse HEAD").splitlines()[0]
347 if commands.getoutput("LANG= git diff-index --name-only HEAD").splitlines():
348 self.ver += "-dirty"
350 Utils.pprint('BLUE', "git revision " + self.ver)
352 fi = open(self.outputs[0].abspath(self.env), 'w')
353 fi.write('#define GIT_VERSION "%s"\n' % self.ver)
354 fi.close()
356 cls = Task.task_type_from_func('git_ver', vars=[], func=git_ver, color='BLUE', before='cc')
358 def always(self):
359 return RUN_ME
360 cls.runnable_status = always
362 def post_run(self):
363 sg = Utils.h_list(self.ver)
364 node = self.outputs[0]
365 variant = node.variant(self.env)
366 self.generator.bld.node_sigs[variant][node.id] = sg
367 cls.post_run = post_run