1import os
2import sys
3
4from waflib import Logs
5from waflib import Options
6
7def options(opt):
8    conf_opts = opt.get_option_group('Configuration options')
9    conf_opts.add_option('--lv2-user', action='store_true', default=False, dest='lv2_user',
10                         help='install LV2 bundles to user location')
11    conf_opts.add_option('--lv2dir', type='string',
12                         help='LV2 bundles [Default: LIBDIR/lv2]')
13
14def register_lv2_path(conf, path):
15    """Return the default LV2_PATH to use for this system"""
16    if 'LV2_PATH' not in conf.run_env and 'LV2_PATH' not in os.environ:
17        conf.run_env['LV2_PATH'] = [conf.env['LV2DIR']]
18
19    conf.run_env.append_unique('LV2_PATH', path)
20
21def default_lv2_path(conf):
22    """Return the default LV2_PATH for the build target as a list"""
23    if conf.env.DEST_OS == 'darwin':
24        return ['~/Library/Audio/Plug-Ins/LV2',
25                '~/.lv2',
26                '/usr/local/lib/lv2',
27                '/usr/lib/lv2',
28                '/Library/Audio/Plug-Ins/LV2']
29    elif conf.env.DEST_OS == 'haiku':
30        return ['~/.lv2',
31                '/boot/common/add-ons/lv2']
32    elif conf.env.DEST_OS == 'win32':
33        return ['%APPDATA%\\\\LV2',
34                '%COMMONPROGRAMFILES%\\\\LV2']
35    else:
36        libdirname = os.path.basename(conf.env.LIBDIR)
37        return ['~/.lv2',
38                '/usr/%s/lv2' % libdirname,
39                '/usr/local/%s/lv2' % libdirname]
40
41def configure(conf):
42    def env_path(parent_dir_var, name):
43        parent = os.getenv(parent_dir_var)
44        if parent:
45            return os.path.join(parent, name)
46        else:
47            Logs.warn('Environment variable %s unset, using LIBDIR\n' % parent_dir_var)
48            return os.path.join(conf.env['LIBDIR'], name)
49
50    def normpath(path):
51        if sys.platform == 'win32':
52            return os.path.normpath(path).replace('\\', '/')
53        else:
54            return os.path.normpath(path)
55
56    if Options.options.lv2dir:
57        conf.env['LV2DIR'] = Options.options.lv2dir
58    elif Options.options.lv2_user:
59        if conf.env.DEST_OS == 'darwin':
60            conf.env['LV2DIR'] = env_path('HOME', 'Library/Audio/Plug-Ins/LV2')
61        elif conf.env.DEST_OS == 'win32':
62            conf.env['LV2DIR'] = env_path('APPDATA', 'LV2')
63        else:
64            conf.env['LV2DIR'] = env_path('HOME', '.lv2')
65    else:
66        if conf.env.DEST_OS == 'darwin':
67            conf.env['LV2DIR'] = '/Library/Audio/Plug-Ins/LV2'
68        elif conf.env.DEST_OS == 'win32':
69            conf.env['LV2DIR'] = env_path('COMMONPROGRAMFILES', 'LV2')
70        else:
71            conf.env['LV2DIR'] = os.path.join(conf.env['LIBDIR'], 'lv2')
72
73    # Add default LV2_PATH to runtime environment for tests that use plugins
74    if 'LV2_PATH' not in os.environ:
75        conf.run_env['LV2_PATH'] = default_lv2_path(conf)
76