JACK: expose --nperiods option
[ardour.git] / libs / backends / jack / wscript
1 #!/usr/bin/env python
2 from waflib.extras import autowaf as autowaf
3 from waflib import Options
4 import os
5 import sys
6 import re
7
8 I18N_PACKAGE = 'jack-backend'
9
10 # Mandatory variables
11 top = '.'
12 out = 'build'
13
14 def options(opt):
15     autowaf.set_options(opt)
16
17 def configure(conf):
18     autowaf.check_pkg(conf, 'jack', uselib_store='JACK', atleast_version='0.121.0')
19
20     #
21     # PortAudio is currently used to get a list of audio device names.
22     # We should find a better way to do this that doesn't involve this
23     # kind of dependency.
24     #
25     if Options.options.dist_target == 'mingw':
26         autowaf.check_pkg(conf, 'portaudio-2.0', uselib_store='PORTAUDIO',
27                           atleast_version='19')
28     autowaf.configure(conf)
29
30     if Options.options.libjack_link == 'auto':
31         if Options.options.dist_target == 'mingw' or sys.platform == 'darwin':
32             conf.env['libjack_link'] = "weak"
33         else:
34             conf.env['libjack_link'] = "link"
35     elif Options.options.libjack_link == 'weak':
36         conf.env['libjack_link'] = "weak"
37     else:
38         conf.env['libjack_link'] = "link"
39
40     # Check that metadata API is available and working
41     conf.check_cxx(fragment = "#include <jack/jack.h>\n#include <jack/metadata.h>\nint main(void) { jack_port_uuid(NULL); return 0; }\n",
42                    mandatory = False,
43                    msg = 'Checking for JACK metadata API',
44                    execute = False,
45                    features = ['cxx'],
46                    okmsg = 'ok',
47                    errmsg = 'not found (or broken). JACK metadata API will not be used',
48                    define_name = 'HAVE_JACK_METADATA',
49                    uselib = 'JACK')
50
51     # Check to see if jack_port_rename() is available and working
52     if Options.options.libjack_link == 'link':
53             conf.check_cxx(fragment = "#include <jack/jack.h>\nint main(void) { jack_client_t* c; jack_port_t* p; jack_port_rename (c, p, \"foo\"); return 0; }\n",
54                    mandatory = False,
55                    execute = False,
56                    features = ['cxx'],
57                    msg = 'Checking for jack_port_rename()',
58                    okmsg = 'ok',
59                    errmsg = 'not found (or broken). jack_port_rename() will not be used, and jack_port_set_name() will be used instead',
60                    define_name = 'HAVE_JACK_PORT_RENAME',
61                    uselib = 'JACK')
62
63 def build(bld):
64     obj = bld(features = 'c cxx cxxshlib')
65     obj.source = [
66             'jack_api.cc',
67             'jack_connection.cc',
68             'jack_audiobackend.cc',
69             'jack_portengine.cc',
70             'jack_utils.cc',
71             'jack_session.cc',
72             'weak_libjack.c',
73             ]
74     obj.includes = ['.']
75     obj.name     = 'jack_audiobackend'
76     obj.target   = 'jack_audiobackend'
77     obj.defines = ['PACKAGE="' + I18N_PACKAGE + '"',
78                    'ARDOURBACKEND_DLL_EXPORTS'
79                    ]
80     obj.use      = 'libardour libpbd ardouralsautil'
81     obj.install_path  = os.path.join(bld.env['LIBDIR'], 'backends')
82     if bld.env['build_target'] != 'mingw':
83         obj.cxxflags = [ '-fPIC' ]
84         obj.cflags   = [ '-fPIC' ]
85     else:
86         obj.cxxflags = [ ]
87         obj.cflags   = [ ]
88
89     if bld.is_defined ('HAVE_JACK_METADATA'):
90         obj.cxxflags += [ '-DHAVE_JACK_METADATA' ]
91         obj.cflags += [ '-DHAVE_JACK_METADATA' ]
92
93     if bld.is_defined ('HAVE_JACK_PORT_RENAME'):
94         obj.cxxflags += [ '-DHAVE_JACK_PORT_RENAME' ]
95         obj.cflags += [ '-DHAVE_JACK_PORT_RENAME' ]
96
97     if (bld.env['build_target'] == 'mingw'):
98         obj.uselib   = [ 'PORTAUDIO' ]
99     else:
100         obj.uselib   = [ ]
101
102     if bld.env['libjack_link'] == 'link':
103         obj.uselib   += [ 'JACK' ]
104     elif bld.env['build_target'] == 'mingw':
105         obj.defines += [ 'USE_WEAK_JACK' ]
106         obj.deps = [ 'weak_libjack.def' ]
107     else:
108         obj.defines += [ 'USE_WEAK_JACK', 'HAVE_JACK_PORT_RENAME' ]
109         obj.deps = [ 'weak_libjack.def' ]
110
111     #
112     # device discovery code in the jack backend needs ALSA
113     # on Linux.
114     #
115
116     if re.search ("linux", sys.platform) != None:
117        obj.uselib += [ 'ALSA' ]
118