implement view switching from world tree
[ladish.git] / wscript
blob046f7b4582076a8f509c9c572d4a28608fec4f10
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 'world_tree.c',
275 'graph_view.c',
276 #'project_properties.cpp',
277 #'session.cpp',
278 #'a2j_proxy.cpp',
279 'dbus_helpers.c',
280 'canvas.cpp',
281 'graph_canvas.c',
282 'glade.c',
283 'control_proxy.c',
285 gladish.source.append(os.path.join("gui", source))
287 for source in [
288 'method.c',
289 'helpers.c',
291 gladish.source.append(os.path.join("dbus", source))
293 # Glade UI definitions (XML)
294 bld.install_files(bld.env['DATA_DIR'], 'gui/gui.glade')
296 # 'Desktop' file (menu entry, icon, etc)
297 #obj = bld.create_obj('subst')
298 #obj.source = 'patchage.desktop.in'
299 #obj.target = 'patchage.desktop'
300 #obj.dict = {
301 # 'BINDIR' : bld.env()['BINDIR'],
302 # 'APP_INSTALL_NAME' : bld.env()['APP_INSTALL_NAME'],
303 # 'APP_HUMAN_NAME' : bld.env()['APP_HUMAN_NAME'],
305 #install_as(os.path.normpath(bld.env()['DATADIR'] + 'applications/'), bld.env()['APP_INSTALL_NAME'] + '.desktop', 'build/default/patchage.desktop')
307 # Icons
309 # Installation layout (with /usr prefix)
310 # /usr/bin/patchage
311 # /usr/share/applications/patchage.desktop
312 # /usr/share/icons/hicolor/16x16/apps/patchage.png
313 # /usr/share/icons/hicolor/22x22/apps/patchage.png
314 # /usr/share/icons/hicolor/24x24/apps/patchage.png
315 # /usr/share/icons/hicolor/32x32/apps/patchage.png
316 # /usr/share/icons/hicolor/48x48/apps/patchage.png
317 # /usr/share/icons/hicolor/scalable/apps/patchage.svg
318 # /usr/share/patchage/patchage.glade
320 # icon cache is updated using:
321 # gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
323 # Dave disabled this, ask why before removing this
324 #install_as(os.path.normpath(bld.env()['PREFIX'] + '/share/icons/hicolor/scalable/apps/'), bld.env()['APP_INSTALL_NAME'] + '.svg', 'icons/scalable/patchage.svg')
326 #icon_sizes = ['16x16', '22x22', '24x24', '32x32', '48x48']
327 #for icon_size in icon_sizes:
328 # install_as(os.path.normpath(bld.env()['DATADIR'] + '/icons/hicolor/' + icon_size + '/apps/'), bld.env()['APP_INSTALL_NAME'] + '.png', 'icons/' + icon_size + '/patchage.png')
330 def dist_hook():
331 pass
333 import commands
334 from Constants import RUN_ME
335 from TaskGen import feature, after
336 import Task, Utils
338 @feature('cc')
339 @after('apply_core')
340 def process_git(self):
341 if getattr(self, 'ver_header', None):
342 tsk = self.create_task('git_ver')
343 tsk.set_outputs(self.path.find_or_declare(self.ver_header))
345 def git_ver(self):
346 self.ver = "unknown"
347 self.ver = commands.getoutput("LANG= git rev-parse HEAD").splitlines()[0]
348 if commands.getoutput("LANG= git diff-index --name-only HEAD").splitlines():
349 self.ver += "-dirty"
351 Utils.pprint('BLUE', "git revision " + self.ver)
353 fi = open(self.outputs[0].abspath(self.env), 'w')
354 fi.write('#define GIT_VERSION "%s"\n' % self.ver)
355 fi.close()
357 cls = Task.task_type_from_func('git_ver', vars=[], func=git_ver, color='BLUE', before='cc')
359 def always(self):
360 return RUN_ME
361 cls.runnable_status = always
363 def post_run(self):
364 sg = Utils.h_list(self.ver)
365 node = self.outputs[0]
366 variant = node.variant(self.env)
367 self.generator.bld.node_sigs[variant][node.id] = sg
368 cls.post_run = post_run