1project('sherlock.lv2', 'c', default_options : [ 2 'buildtype=release', 3 'warning_level=3', 4 'werror=false', 5 'b_lto=false', 6 'c_std=gnu11']) 7 8nk_pugl = subproject('nk_pugl') 9 10lv2libdir = get_option('lv2libdir') 11 12inst_dir = join_paths(lv2libdir, meson.project_name()) 13 14nk_pugl_dep = nk_pugl.get_variable('nk_pugl_gl') 15cousine_regular_ttf = nk_pugl.get_variable('cousine_regular_ttf') 16 17source_root = meson.source_root() 18build_root = meson.build_root() 19 20static_link = meson.is_cross_build() 21 22cc = meson.get_compiler('c') 23 24m_dep = cc.find_library('m') 25lv2_dep = dependency('lv2', version : '>=1.14.0') 26sratom_dep = dependency('sratom-0', version : '>=0.6.0', static : static_link) 27 28dsp_deps = [m_dep, lv2_dep] 29ui_deps = [m_dep, lv2_dep, sratom_dep, nk_pugl_dep] 30 31props_inc = include_directories('props.lv2') 32osc_inc = include_directories('osc.lv2') 33ser_inc = include_directories('ser_atom.lv2') 34nk_pugl_inc = include_directories(join_paths('subprojects', 'nk_pugl')) 35inc_dir = [props_inc, osc_inc, ser_inc, nk_pugl_inc] 36 37rawvers = run_command('cat', 'VERSION').stdout().strip() 38version = rawvers.split('.') 39 40conf_data = configuration_data() 41conf_data.set('MAJOR_VERSION', version[0]) 42conf_data.set('MINOR_VERSION', version[1]) 43conf_data.set('MICRO_VERSION', version[2]) 44 45add_project_arguments('-DSHERLOCK_VERSION="'+rawvers+'"', language : 'c') 46add_project_arguments('-D_GNU_SOURCE', language : 'c') 47 48flex = find_program('flex') 49lgen = generator(flex, 50 output : '@PLAINNAME@.c', 51 arguments : ['--prefix=enc', '-o', '@OUTPUT@', '@INPUT@']) 52 53lv2_validate = find_program('lv2_validate', native : true, required : false) 54sord_validate = find_program('sord_validate', native : true, required : false) 55lv2lint = find_program('lv2lint', required : false) 56 57lfiles = lgen.process('encoder.l') 58 59dsp_srcs = ['sherlock.c', 60 'atom_inspector.c', 61 'midi_inspector.c', 62 'osc_inspector.c'] 63 64ui_srcs = ['sherlock_nk.c', 65 'atom_inspector_nk.c', 66 'midi_inspector_nk.c', 67 'osc_inspector_nk.c', 68 lfiles] 69 70c_args = [ 71 '-fvisibility=hidden'] 72 73if host_machine.system() == 'windows' 74 conf_data.set('UI_TYPE', 'WindowsUI') 75elif host_machine.system() == 'darwin' 76 conf_data.set('UI_TYPE', 'CocoaUI') 77else 78 conf_data.set('UI_TYPE', 'X11UI') 79endif 80 81mod = shared_module('sherlock', dsp_srcs, 82 c_args : c_args, 83 include_directories : inc_dir, 84 name_prefix : '', 85 dependencies : dsp_deps, 86 install : true, 87 install_dir : inst_dir) 88 89ui = shared_module('sherlock_nk', ui_srcs, 90 c_args : c_args, 91 include_directories : inc_dir, 92 name_prefix : '', 93 dependencies : ui_deps, 94 install : true, 95 install_dir : inst_dir) 96 97suffix = mod.full_path().strip().split('.')[-1] 98conf_data.set('MODULE_SUFFIX', '.' + suffix) 99 100manifest_ttl = configure_file( 101 input : 'manifest.ttl.in', 102 output : 'manifest.ttl', 103 configuration : conf_data, 104 install : true, 105 install_dir : inst_dir) 106 107dsp_ttl = configure_file( 108 input : 'sherlock.ttl', 109 output : 'sherlock.ttl', 110 copy : true, 111 install : true, 112 install_dir : inst_dir) 113 114ui_ttl = configure_file( 115 input : 'sherlock_ui.ttl', 116 output : 'sherlock_ui.ttl', 117 copy : true, 118 install : true, 119 install_dir : inst_dir) 120 121configure_file( 122 input : cousine_regular_ttf, 123 output : 'Cousine-Regular.ttf', 124 copy : true, 125 install : true, 126 install_dir : inst_dir) 127 128if lv2_validate.found() and sord_validate.found() 129 test('LV2 validate', lv2_validate, 130 args : [manifest_ttl, dsp_ttl, ui_ttl]) 131endif 132 133if lv2lint.found() 134 test('LV2 lint', lv2lint, 135 args : ['-Ewarn', '-I', join_paths(build_root, ''), 136 'http://open-music-kontrollers.ch/lv2/sherlock#atom_inspector', 137 'http://open-music-kontrollers.ch/lv2/sherlock#midi_inspector', 138 'http://open-music-kontrollers.ch/lv2/sherlock#osc_inspector']) 139endif 140