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