1project('espressivo.lv2', 'c', default_options : [
2	'buildtype=release',
3	'warning_level=1',
4	'werror=true',
5	'b_lto=false',
6	'c_std=c11'])
7
8add_project_arguments('-D_GNU_SOURCE', language : 'c')
9
10conf_data = configuration_data()
11cc = meson.get_compiler('c')
12
13cp = find_program('cp')
14lv2_validate = find_program('lv2_validate', native : true, required : false)
15sord_validate = find_program('sord_validate', native : true, required : false)
16lv2lint = find_program('lv2lint', required : false)
17clone = [cp, '@INPUT@', '@OUTPUT@']
18
19m_dep = cc.find_library('m')
20lv2_dep = dependency('lv2', version : '>=1.14.0')
21deps = [m_dep, lv2_dep]
22
23props_inc = include_directories('props.lv2')
24osc_inc = include_directories('osc.lv2')
25canvas_inc = include_directories('canvas.lv2')
26xpress_inc = include_directories('xpress.lv2')
27inc_dir = [props_inc, osc_inc, canvas_inc, xpress_inc]
28
29inst_dir = join_paths(get_option('libdir'), 'lv2', meson.project_name())
30
31dsp_srcs = ['espressivo.c',
32	'chord_flt.c',
33	'discreto_flt.c',
34	'midi_in.c',
35	'midi_out.c',
36	'modulator_flt.c',
37	'monitor_out.c',
38	'mpe_in.c',
39	'mpe_out.c',
40	'redirector_flt.c',
41	'reducto_flt.c',
42	'sampleandhold_flt.c',
43	'sc_out.c',
44	'sqew_flt.c',
45	'through_flt.c',
46	'tuio2_in.c',
47	'tuio2_out.c']
48
49c_args = ['-fvisibility=hidden',
50	'-ffast-math']
51
52if host_machine.system() == 'windows'
53	# nothing
54elif host_machine.system() == 'darwin'
55	# nothing
56else
57	rt_dep = cc.find_library('rt')
58	deps += rt_dep
59endif
60
61mod = shared_module('espressivo', dsp_srcs,
62	c_args : c_args,
63	include_directories : inc_dir,
64	name_prefix : '',
65	dependencies : deps,
66	install : true,
67	install_dir : inst_dir)
68
69version = run_command('cat', 'VERSION').stdout().strip().split('.')
70conf_data.set('MAJOR_VERSION', version[0])
71conf_data.set('MINOR_VERSION', version[1])
72conf_data.set('MICRO_VERSION', version[2])
73
74suffix = mod.full_path().strip().split('.')[-1]
75conf_data.set('MODULE_SUFFIX', '.' + suffix)
76
77manifest_ttl = configure_file(input : 'manifest.ttl.in', output : 'manifest.ttl',
78	configuration : conf_data,
79	install : true,
80	install_dir : inst_dir)
81dsp_ttl = custom_target('espressivo_ttl',
82	input : 'espressivo.ttl',
83	output : 'espressivo.ttl',
84	command : clone,
85	install : true,
86	install_dir : inst_dir)
87
88if lv2_validate.found() and sord_validate.found()
89	test('LV2 validate', lv2_validate,
90		args : [manifest_ttl, dsp_ttl])
91endif
92
93if lv2lint.found()
94	test('LV2 lint', lv2lint,
95		args : ['-Ewarn',
96			'http://open-music-kontrollers.ch/lv2/espressivo#chord',
97			'http://open-music-kontrollers.ch/lv2/espressivo#discreto',
98			'http://open-music-kontrollers.ch/lv2/espressivo#midi_in',
99			'http://open-music-kontrollers.ch/lv2/espressivo#modulator',
100			'http://open-music-kontrollers.ch/lv2/espressivo#monitor_out',
101			'http://open-music-kontrollers.ch/lv2/espressivo#mpe_in',
102			'http://open-music-kontrollers.ch/lv2/espressivo#mpe_out',
103			'http://open-music-kontrollers.ch/lv2/espressivo#redirector',
104			'http://open-music-kontrollers.ch/lv2/espressivo#reducto',
105			'http://open-music-kontrollers.ch/lv2/espressivo#sc_out',
106			'http://open-music-kontrollers.ch/lv2/espressivo#snh',
107			'http://open-music-kontrollers.ch/lv2/espressivo#sqew',
108			'http://open-music-kontrollers.ch/lv2/espressivo#through',
109			'http://open-music-kontrollers.ch/lv2/espressivo#tuio2_in',
110			'http://open-music-kontrollers.ch/lv2/espressivo#tuio2_out'])
111endif
112