weak/runtime jack linking: load libjack dynamically at runtime
[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 # Library version (UNIX style major, minor, micro)
9 # major increment <=> incompatible changes
10 # minor increment <=> compatible changes (additions)
11 # micro increment <=> no interface changes
12 JACKBACKEND_VERSION = '1.0.0'
13 I18N_PACKAGE = 'jack-backend'
14
15 # Mandatory variables
16 top = '.'
17 out = 'build'
18
19 def options(opt):
20     autowaf.set_options(opt)
21
22 def configure(conf):
23     autowaf.check_pkg(conf, 'jack', uselib_store='JACK', atleast_version='0.121.0')
24
25     #
26     # PortAudio is currently used to get a list of audio device names.
27     # We should find a better way to do this that doesn't involve this
28     # kind of dependency.
29     #
30     if Options.options.dist_target == 'mingw':
31         autowaf.check_pkg(conf, 'portaudio-2.0', uselib_store='PORTAUDIO',
32                           atleast_version='19')
33     autowaf.configure(conf)
34
35     if Options.options.libjack_link == 'auto':
36         if Options.options.dist_target == 'mingw' or sys.platform == 'darwin':
37             conf.env['libjack_link'] = "weak"
38         else:
39             conf.env['libjack_link'] = "link"
40     elif Options.options.libjack_link == 'weak':
41         conf.env['libjack_link'] = "weak"
42     else:
43         conf.env['libjack_link'] = "link"
44
45
46 def build(bld):
47     obj = bld(features = 'cxx cxxshlib')
48     obj.source = [ 
49             'jack_api.cc',
50             'jack_connection.cc',
51             'jack_audiobackend.cc',
52             'jack_portengine.cc',
53             'jack_utils.cc',
54             'jack_session.cc',
55             'weak_libjack.c',
56             ]
57     obj.includes = ['.']
58     obj.name     = 'jack_audiobackend'
59     obj.target   = 'jack_audiobackend'
60     obj.defines = ['PACKAGE="' + I18N_PACKAGE + '"', 
61                    'ARDOURBACKEND_DLL_EXPORTS'
62                    ]
63     obj.use      = 'libardour libpbd ardouralsautil'
64     obj.install_path  = os.path.join(bld.env['LIBDIR'], 'backends')
65
66     if (bld.env['build_target'] == 'mingw'):
67         obj.uselib   = [ 'PORTAUDIO' ]
68     else:
69         obj.uselib   = [ ]
70         obj.vnum     = JACKBACKEND_VERSION
71
72     if bld.env['libjack_link'] == 'link':
73         obj.uselib   += [ 'JACK' ]
74     else:
75         obj.defines += [ 'USE_WEAK_JACK' ]
76
77     #
78     # device discovery code in the jack backend needs ALSA
79     # on Linux.
80     # 
81
82     if re.search ("linux", sys.platform) != None:
83        obj.uselib += [ 'ALSA' ]
84