1project(
2	'wayvnc',
3	'c',
4	version: '0.4.1',
5	license: 'ISC',
6	default_options: [
7		'c_std=gnu11',
8	],
9)
10
11buildtype = get_option('buildtype')
12host_system = host_machine.system()
13prefix = get_option('prefix')
14
15c_args = [
16	'-DPROJECT_VERSION="v0.4.1"'.format(meson.project_version()),
17	'-D_GNU_SOURCE',
18]
19
20git = find_program('git', native: true, required: false)
21if false
22	git_describe = run_command([git, 'describe', '--tags', '--long'])
23	git_branch = run_command([git, 'rev-parse', '--abbrev-ref', 'HEAD'])
24	if git_describe.returncode() == 0 and git_branch.returncode() == 0
25		c_args += '-DGIT_VERSION="@0@ (@1@)"'.format(
26			git_describe.stdout().strip(),
27			git_branch.stdout().strip(),
28		)
29	endif
30endif
31
32if buildtype != 'debug' and buildtype != 'debugoptimized'
33	c_args += '-DNDEBUG'
34endif
35
36add_project_arguments(c_args, language: 'c')
37
38cc = meson.get_compiler('c')
39
40libm = cc.find_library('m', required: false)
41librt = cc.find_library('rt', required: false)
42libpam = cc.find_library('pam', required: get_option('pam'))
43
44pixman = dependency('pixman-1')
45gbm = dependency('gbm', required: get_option('screencopy-dmabuf'))
46drm = dependency('libdrm')
47xkbcommon = dependency('xkbcommon', version: '>=1.0.0')
48wayland_client = dependency('wayland-client')
49
50neatvnc_version = '>=0.4.0'
51
52neatvnc_project = subproject(
53	'neatvnc',
54	required: false,
55	version: neatvnc_version,
56)
57
58aml_project = subproject('aml', required: false)
59if aml_project.found()
60	aml = aml_project.get_variable('aml_dep')
61else
62	aml = dependency('aml')
63endif
64
65if neatvnc_project.found()
66	neatvnc = neatvnc_project.get_variable('neatvnc_dep')
67else
68	neatvnc = dependency('neatvnc', version: neatvnc_version)
69endif
70
71inc = include_directories('include')
72
73subdir('protocols')
74
75sources = [
76	'src/main.c',
77	'src/strlcpy.c',
78	'src/shm.c',
79	'src/screencopy.c',
80	'src/data-control.c',
81	'src/output.c',
82	'src/pointer.c',
83	'src/keyboard.c',
84	'src/seat.c',
85	'src/smooth.c',
86	'src/cfg.c',
87	'src/intset.c',
88	'src/buffer.c',
89	'src/pixels.c',
90	'src/pixman-renderer.c',
91	'src/transform-util.c',
92	'src/damage-refinery.c',
93	'src/murmurhash.c',
94]
95
96dependencies = [
97	libm,
98	librt,
99	pixman,
100	aml,
101	gbm,
102	drm,
103	wayland_client,
104	neatvnc,
105	xkbcommon,
106	client_protos,
107]
108
109config = configuration_data()
110
111config.set('PREFIX', '"' + prefix + '"')
112
113if host_system == 'linux' and get_option('systemtap') and cc.has_header('sys/sdt.h')
114	config.set('HAVE_USDT', true)
115endif
116
117if cc.has_function('memfd_create')
118	config.set('HAVE_MEMFD', true)
119	config.set('HAVE_MEMFD_CREATE', true)
120elif cc.has_function('SYS_memfd_create', prefix : '#include <sys/syscall.h>')
121	config.set('HAVE_MEMFD', true)
122endif
123
124if gbm.found() and not get_option('screencopy-dmabuf').disabled()
125	config.set('ENABLE_SCREENCOPY_DMABUF', true)
126endif
127
128if libpam.found()
129	dependencies += libpam
130	sources += 'src/pam_auth.c'
131	config.set('ENABLE_PAM', true)
132endif
133
134configure_file(
135	output: 'config.h',
136	configuration: config,
137)
138
139executable(
140	'wayvnc',
141	sources,
142	dependencies: dependencies,
143	include_directories: inc,
144	install: true,
145)
146
147scdoc = dependency('scdoc', native: true, required: get_option('man-pages'))
148if scdoc.found()
149	scdoc_prog = find_program(scdoc.get_pkgconfig_variable('scdoc'), native: true)
150	sh = find_program('sh', native: true)
151	mandir = get_option('mandir')
152	input = 'wayvnc.scd'
153	output = 'wayvnc.1'
154
155	custom_target(
156		output,
157		input: input,
158		output: output,
159		command: [
160			sh, '-c', '@0@ <@INPUT@ >@1@'.format(scdoc_prog.path(), output)
161		],
162		install: true,
163		install_dir: '@0@/man1'.format(mandir)
164	)
165endif
166