control unique port names over DBUS
[a2jmidid.git] / wscript
blob66a532a0ce3ae6754e05bce84a6ca7d506651b44
1 #! /usr/bin/env python
2 # encoding: utf-8
4 import os
5 from Configure import g_maxlen
6 import Params
7 import time
8 import Task
9 import re
11 APPNAME='a2jmidid'
12 VERSION='8'
14 # these variables are mandatory ('/' are converted automatically)
15 srcdir = '.'
16 blddir = 'build'
18 def create_gitversion_gen(bld, header='gitversion.h', define=None):
19 cmd = '../gitversion_regenerate.sh ${TGT}'
20 if define:
21 cmd += " " + define
22 cls = Task.simple_task_type('gitversion', cmd, color='BLUE')
23 cls.must_run = lambda self: True
24 #cls.before = 'cxx'
26 def sg(self):
27 rt = Params.h_file(self.m_outputs[0].abspath(self.env()))
28 return rt
29 cls.signature = sg
31 #def se(self):
32 # r = sg(self)
33 # return (r, r, r, r, r)
34 #cls.cache_sig = property(sg, None)
35 cls.cache_sig = None
37 tsk = cls('gitversion', bld.env().copy())
38 tsk.m_inputs = []
39 tsk.m_outputs = [bld.path.find_or_declare(header)]
40 tsk.prio = 1 # execute this task first
42 def display_msg(msg, status = None, color = None):
43 sr = msg
44 global g_maxlen
45 g_maxlen = max(g_maxlen, len(msg))
46 if status:
47 print "%s :" % msg.ljust(g_maxlen),
48 Params.pprint(color, status)
49 else:
50 print "%s" % msg.ljust(g_maxlen)
52 def set_options(opt):
53 opt.tool_options('compiler_cc')
54 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')
55 opt.add_option('--disable-dbus', action='store_true', default=False, help="Don't enable D-Bus support even if required dependencies are present")
56 opt.add_option('--mandir', type='string', help="Manpage directory [Default: <prefix>/share/man]")
58 def configure(conf):
59 conf.check_tool('compiler_cc')
61 conf.check_pkg('alsa', mandatory=True)
62 conf.check_pkg('jack', vnum="0.109.0", mandatory=True)
63 if not Params.g_options.disable_dbus:
64 conf.check_pkg('dbus-1', mandatory=False, pkgvars=['session_bus_services_dir'])
65 conf.env['DBUS_ENABLED'] = 'LIB_DBUS-1' in conf.env
66 else:
67 conf.env['DBUS_ENABLED'] = False
69 conf.env['LIB_DL'] = ['dl']
70 conf.env['LIB_PTHREAD'] = ['pthread']
72 #conf.check_header('expat.h', mandatory=True)
73 #conf.env['LIB_EXPAT'] = ['expat']
74 conf.check_header('getopt.h', mandatory=True)
76 if conf.env['DBUS_ENABLED']:
77 if Params.g_options.enable_pkg_config_dbus_service_dir:
78 conf.env['DBUS_SERVICES_DIR'] = conf.env['DBUS-1_SESSION_BUS_SERVICES_DIR'][0]
79 else:
80 conf.env['DBUS_SERVICES_DIR'] = os.path.normpath(conf.env['PREFIX'] + '/share/dbus-1/services')
82 conf.check_tool('misc') # dbus service file subst tool
84 if Params.g_options.mandir:
85 conf.env['MANDIR'] = Params.g_options.mandir
86 else:
87 conf.env['MANDIR'] = conf.env['PREFIX'] + '/share/man'
89 conf.define('A2J_VERSION', VERSION)
90 conf.write_config_header('config.h')
92 gitrev = None
93 if os.access('gitversion.h', os.R_OK):
94 data = file('gitversion.h').read()
95 m = re.match(r'^#define GIT_VERSION "([^"]*)"$', data)
96 if m != None:
97 gitrev = m.group(1)
99 print
100 display_msg("==================")
101 version_msg = "a2jmidid-" + VERSION
102 if gitrev:
103 version_msg += " exported from " + gitrev
104 else:
105 version_msg += " git revision will checked and eventually updated during build"
106 print version_msg
107 print
109 display_msg("Install prefix", conf.env['PREFIX'], 'CYAN')
110 if conf.env['DBUS_ENABLED']:
111 have_dbus_status = "yes"
112 else:
113 have_dbus_status = "no"
114 display_msg("D-Bus support", have_dbus_status)
115 if conf.env['DBUS_ENABLED']:
116 display_msg('D-Bus service install directory', conf.env['DBUS_SERVICES_DIR'], 'CYAN')
117 if conf.env['DBUS_SERVICES_DIR'] != conf.env['DBUS-1_SESSION_BUS_SERVICES_DIR'][0]:
118 print
119 print Params.g_colors['RED'] + "WARNING: D-Bus session services directory as reported by pkg-config is"
120 print Params.g_colors['RED'] + "WARNING:",
121 print Params.g_colors['CYAN'] + conf.env['DBUS-1_SESSION_BUS_SERVICES_DIR'][0]
122 print Params.g_colors['RED'] + 'WARNING: but service file will be installed in'
123 print Params.g_colors['RED'] + "WARNING:",
124 print Params.g_colors['CYAN'] + conf.env['DBUS_SERVICES_DIR']
125 print Params.g_colors['RED'] + 'WARNING: You may need to adjust your D-Bus configuration after installing'
126 print 'WARNING: You can override dbus service install directory'
127 print 'WARNING: with --enable-pkg-config-dbus-service-dir option to this script'
128 print Params.g_colors['NORMAL'],
129 print
131 def build(bld):
132 if not os.access('gitversion.h', os.R_OK):
133 create_gitversion_gen(bld)
135 prog = bld.create_obj('cc', 'program')
136 prog.source = [
137 'a2jmidid.c',
138 'log.c',
139 'port.c',
140 'port_thread.c',
141 'port_hash.c',
142 'paths.c',
143 #'conf.c',
144 'jack.c',
145 'list.c',
148 if bld.env()['DBUS_ENABLED']:
149 prog.source.append('dbus.c')
150 prog.source.append('dbus_iface_introspectable.c')
151 prog.source.append('dbus_iface_control.c')
152 prog.source.append('sigsegv.c')
154 prog.includes = '.' # make waf dependency tracking work
155 prog.target = 'a2jmidid'
156 prog.uselib = 'ALSA JACK DL PTHREAD'
157 if bld.env()['DBUS_ENABLED']:
158 prog.uselib += " DBUS-1"
159 prog = bld.create_obj('cc', 'program')
160 prog.source = 'a2jmidi_bridge.c'
161 prog.target = 'a2jmidi_bridge'
162 prog.uselib = 'ALSA JACK'
164 prog = bld.create_obj('cc', 'program')
165 prog.source = 'j2amidi_bridge.c'
166 prog.target = 'j2amidi_bridge'
167 prog.uselib = 'ALSA JACK'
169 if bld.env()['DBUS_ENABLED']:
170 # process org.gna.home.a2jmidid.service.in -> org.gna.home.a2jmidid.service
171 obj = bld.create_obj('subst')
172 obj.source = 'org.gna.home.a2jmidid.service.in'
173 obj.target = 'org.gna.home.a2jmidid.service'
174 obj.dict = {'BINDIR': bld.env()['PREFIX'] + '/bin'}
175 obj.inst_var = bld.env()['DBUS_SERVICES_DIR']
176 obj.inst_dir = '/'
178 install_files('PREFIX', 'bin', 'a2j_control', chmod=0755)
179 install_files('PREFIX', 'bin', 'a2j', chmod=0755)
181 # install man pages
182 man_pages = [
183 "a2jmidi_bridge.1",
184 "a2jmidid.1",
185 "j2amidi_bridge.1",
188 if bld.env()['DBUS_ENABLED']:
189 man_pages.append("a2j.1")
190 man_pages.append("a2j_control.1")
192 for i in range(len(man_pages)):
193 man_pages[i] = "man/" + man_pages[i]
195 install_files('MANDIR', 'man1', man_pages)
197 def dist_hook():
198 os.remove('gitversion_regenerate.sh')
199 os.system('../gitversion_regenerate.sh gitversion.h')