meson: Add systemduserunitdir option
[platform/upstream/pulseaudio.git] / meson.build
1 project('pulseaudio', 'c', 'cpp',
2         version : run_command(find_program('git-version-gen'), join_paths(meson.current_source_dir(), '.tarball-version')).stdout().strip(),
3         meson_version : '>= 0.50.0',
4         default_options : [ 'c_std=gnu11', 'cpp_std=c++11' ]
5         )
6
7 pa_version_str = meson.project_version()
8 # For tarballs, the first split will do nothing, but for builds in git, we
9 # split out suffixes when there are commits since the last tag
10 # (e.g.: v11.99.1-3-gad14bdb24 -> v11.99.1)
11 version_split = pa_version_str.split('-')[0].split('.')
12 pa_version_major = version_split[0].split('v')[0]
13 pa_version_minor = version_split[1]
14 if version_split.length() > 2
15   pa_version_micro = version_split[2]
16 else
17   pa_version_micro = '0'
18 endif
19 pa_version_major_minor = pa_version_major + '.' + pa_version_minor
20
21 pa_api_version = 12
22 pa_protocol_version = 33
23
24 apiversion = '1.0'
25 soversion = 0
26 # FIXME: this doesn't actually do what we want it to
27 # maintaining compatibility with the previous libtool versioning
28 # current = minor * 100 + micro
29 libversion = '@0@.@1@.0'.format(soversion, pa_version_minor.to_int() * 100 + pa_version_micro.to_int())
30
31 # A simplified, synchronous, ABI-stable interface for client applications.
32 # For the version x:y:z always will hold y=z.
33 libpulse_simple_version = '1.1.1'
34
35 # The ABI-stable GLib adapter for client applications.
36 # For the version x:y:z always will hold y=z.
37 libpulse_mainloop_glib_version = '0.5.0'
38
39 # Paths
40
41 prefix = get_option('prefix')
42 assert(prefix.startswith('/'), 'Prefix is not absolute: "@0@"'.format(prefix))
43
44 bindir = join_paths(prefix, get_option('bindir'))
45 includedir = join_paths(prefix, get_option('includedir'))
46 libdir = join_paths(prefix, get_option('libdir'))
47 libexecdir = join_paths(prefix, get_option('libexecdir'))
48 mandir = join_paths(prefix, get_option('mandir'))
49 datadir = join_paths(prefix, get_option('datadir'))
50 localstatedir = join_paths(prefix, get_option('localstatedir'))
51 sysconfdir = join_paths(prefix, get_option('sysconfdir'))
52 privlibdir = join_paths(get_option('libdir'), 'pulseaudio')
53 alsadatadir = join_paths(datadir, 'pulseaudio', 'alsa-mixer')
54
55 pkgconfigdir = join_paths(libdir, 'pkgconfig')
56 pulselibexecdir = join_paths(libexecdir, 'pulse')
57 pulsesysconfdir = join_paths(sysconfdir, 'pulse')
58
59 modlibexecdir = get_option('modlibexecdir')
60 if modlibexecdir == ''
61   modlibexecdir = join_paths(libdir, 'pulse-' + pa_version_major_minor, 'modules')
62 endif
63
64 pulsedspdir = get_option('pulsedspdir')
65 if pulsedspdir == ''
66   pulsedspdir = join_paths(libdir, 'pulseaudio')
67 endif
68
69 systemduserunitdir = get_option('systemduserunitdir')
70 # the default value is set below
71
72 vapidir = join_paths(datadir, 'vala', 'vapi')
73
74 bashcompletiondir = get_option('bashcompletiondir')
75 if bashcompletiondir == ''
76   bash_completion_dep = dependency('bash-completion', required : false)
77   if bash_completion_dep.found()
78     bashcompletiondir = bash_completion_dep.get_pkgconfig_variable('completionsdir')
79   else
80     bashcompletiondir = join_paths(datadir, 'bash-completion', 'completions')
81   endif
82 endif
83
84 zshcompletiondir = get_option('zshcompletiondir')
85 if zshcompletiondir == ''
86   zshcompletiondir = join_paths(datadir, 'zsh', 'site-functions')
87 endif
88
89 # Configuration data
90
91 cc = meson.get_compiler('c')
92
93 cdata = configuration_data()
94 cdata.set_quoted('PACKAGE', 'pulseaudio')
95 cdata.set_quoted('PACKAGE_NAME', 'pulseaudio')
96 cdata.set_quoted('PACKAGE_VERSION', pa_version_str)
97 cdata.set_quoted('CANONICAL_HOST', host_machine.cpu())
98 cdata.set('PA_MAJOR', pa_version_major)
99 cdata.set('PA_MINOR', pa_version_minor)
100 cdata.set('PA_API_VERSION', pa_api_version)
101 cdata.set('PA_PROTOCOL_VERSION', pa_protocol_version)
102 cdata.set_quoted('PA_MACHINE_ID', join_paths(sysconfdir, 'machine-id'))
103 cdata.set_quoted('PA_MACHINE_ID_FALLBACK', join_paths(localstatedir, 'lib', 'dbus', 'machine-id'))
104 cdata.set_quoted('PA_SRCDIR', join_paths(meson.current_source_dir(), 'src'))
105 cdata.set_quoted('PA_BUILDDIR', meson.current_build_dir())
106 cdata.set_quoted('PA_SOEXT', '.so')
107 cdata.set_quoted('PA_DEFAULT_CONFIG_DIR', pulsesysconfdir)
108 cdata.set_quoted('PA_BINARY', join_paths(bindir, 'pulseaudio'))
109 cdata.set_quoted('PA_SYSTEM_RUNTIME_PATH', join_paths(localstatedir, 'run', 'pulse'))
110 cdata.set_quoted('PA_SYSTEM_CONFIG_PATH', join_paths(localstatedir, 'lib', 'pulse'))
111 cdata.set_quoted('PA_SYSTEM_STATE_PATH', join_paths(localstatedir, 'lib', 'pulse'))
112 cdata.set_quoted('PA_DLSEARCHPATH', modlibexecdir)
113 cdata.set_quoted('PA_SYSTEM_USER', get_option('system_user'))
114 cdata.set_quoted('PA_SYSTEM_GROUP', get_option('system_group'))
115 cdata.set_quoted('PA_ACCESS_GROUP', get_option('access_group'))
116 cdata.set_quoted('PA_CFLAGS', 'Not yet supported on meson')
117 cdata.set_quoted('PA_ALSA_PATHS_DIR', join_paths(alsadatadir, 'paths'))
118 cdata.set_quoted('PA_ALSA_PROFILE_SETS_DIR', join_paths(alsadatadir, 'profile-sets'))
119 cdata.set_quoted('DESKTOPFILEDIR', join_paths(datadir, 'applications'))
120
121 # Platform specifics
122 # First some defaults to keep config file generation happy
123 cdata.set('HAVE_COREAUDIO', 0)
124 cdata.set('HAVE_WAVEOUT', 0)
125 # FIXME: This was not tested. Maybe some flags should better be CFLAGS,
126 # rather than ending up in the config.h file?
127 if host_machine.system() == 'darwin'
128   cdata.set('OS_IS_DARWIN', 1)
129   cdata.set('_DARWIN_C_SOURCE', '200112L') # Needed to get NSIG on Mac OS
130 elif host_machine.system() == 'windows'
131   cdata.set('OS_IS_WIN32', 1)
132   cdata.set('WIN32_LEAN_AND_MEAN', 1) # Needed to avoid including unnecessary headers on Windows
133 #elif host_machine.system() == 'solaris'
134 #  # Apparently meson has no solaris support?
135 #  # Needed to get declarations for msg_control and msg_controllen on Solaris
136 #  cdata.set('_XOPEN_SOURCE', 600)
137 #  cdata.set('__EXTENSIONS__', 1)
138 endif
139
140 # Headers
141
142 check_headers = [
143   'arpa/inet.h',
144   'cpuid.h',
145   'execinfo.h',
146   'grp.h',
147   'langinfo.h',
148   'locale.h',
149   'netdb.h',
150   'netinet/in.h',
151   'netinet/in_systm.h',
152   'netinet/ip.h',
153   'netinet/tcp.h',
154   'pcreposix.h',
155   'poll.h',
156   'pwd.h',
157   'regex.h',
158   'sched.h',
159   'sys/capability.h',
160   'sys/eventfd.h',
161   'sys/ioctl.h',
162   'sys/mman.h',
163   'sys/prctl.h',
164   'sys/resource.h',
165   'sys/select.h',
166   'sys/socket.h',
167   'sys/un.h',
168   'sys/wait.h',
169   'valgrind/memcheck.h',
170   'xlocale.h',
171 ]
172
173 foreach h : check_headers
174   if cc.has_header(h)
175     define = 'HAVE_' + h.underscorify().to_upper()
176     cdata.set(define, 1)
177   endif
178 endforeach
179
180 # FIXME: move this to the above set
181 if cc.has_header('pthread.h')
182   cdata.set('HAVE_PTHREAD', 1)
183 endif
184
185 # Functions
186
187 check_functions = [
188   'accept4',
189   'clock_gettime',
190   'fchmod',
191   'fchown',
192   'fork',
193   'fstat',
194   'getaddrinfo',
195   'getgrgid_r',
196   'getpwnam_r',
197   'gettimeofday',
198   'getuid',
199   'lstat',
200   'memfd_create',
201   'mkfifo',
202   'mlock',
203   'nanosleep',
204   'paccept',
205   'pipe',
206   'pipe2',
207   'posix_madvise',
208   'readlink',
209   'setegid',
210   'seteuid',
211   'setregid',
212   'setreuid',
213   'setresgid',
214   'setresuid',
215   'setsid',
216   'sig2str',
217   'sigaction',
218   'strtod_l',
219   'symlink',
220   'sysconf',
221   'uname',
222 ]
223
224 foreach f : check_functions
225   if cc.has_function(f)
226     define = 'HAVE_' + f.underscorify().to_upper()
227     cdata.set(define, 1)
228   endif
229 endforeach
230
231 if cc.has_function('SYS_memfd_create', prefix : '#include <sys/syscall.h>')
232   cdata.set('HAVE_MEMFD', 1)
233 endif
234
235 # Symbols
236
237 if cc.has_header_symbol('signal.h', 'SIGXCPU')
238   cdata.set('HAVE_SIGXCPU', 1)
239 endif
240
241 if not cc.has_header_symbol('netinet/in.h', 'INADDR_NONE')
242   if not cc.has_header_symbol('winsock2.h', 'INADDR_NONE')
243     # Define INADDR_NONE if not found (Solaris)
244     cdata.set('INADDR_NONE', '0xffffffff')
245   endif
246 endif
247
248 # Types
249
250 # FIXME: do we ever care about gid_t not being defined / smaller than an int?
251 cdata.set('GETGROUPS_T', 'gid_t')
252
253 # Include paths
254
255 configinc = include_directories('.')
256 topinc = include_directories('src')
257
258 # CFLAGS
259
260 pa_c_args = ['-DHAVE_CONFIG_H', '-D_GNU_SOURCE']
261 server_c_args = ['-D__INCLUDED_FROM_PULSE_AUDIO']
262 cdata.set('MESON_BUILD', 1)
263
264 # Core Dependencies
265
266 libm_dep = cc.find_library('m', required : true)
267 thread_dep = dependency('threads')
268 cap_dep = cc.find_library('cap', required : false)
269
270 shm_dep = cc.find_library('rt', required : false)
271 if shm_dep.found()
272   cdata.set('HAVE_SHM_OPEN', 1)
273 endif
274
275 atomictest = '''void func() {
276   volatile int atomic = 2;
277   __sync_bool_compare_and_swap (&atomic, 2, 3);
278 }
279 '''
280 if cc.compiles(atomictest)
281   cdata.set('HAVE_ATOMIC_BUILTINS', true)
282 else
283   # FIXME: check if we need libatomic_ops
284 endif
285
286 # FIXME: make sure it's >= 2.2
287 ltdl_dep = cc.find_library('ltdl', required : true)
288 # FIXME: can meson support libtool -dlopen/-dlpreopen things?
289 #        and do we still want to support this at all?
290 cdata.set('DISABLE_LIBTOOL_PRELOAD', 1)
291
292 if get_option('database') == 'tdb'
293   database_dep = dependency('tdb')
294 elif get_option('database') == 'gdbm'
295   database_dep = cc.find_library('gdbm', required : true)
296 else
297   database_dep = dependency('', required: false)
298 endif
299
300 if get_option('ipv6')
301   cdata.set('HAVE_IPV6', 1)
302 endif
303
304 if get_option('legacy-database-entry-format')
305   cdata.set('ENABLE_LEGACY_DATABASE_ENTRY_FORMAT', 1)
306 endif
307
308 alsa_dep = dependency('alsa', version : '>= 1.0.24', required : get_option('alsa'))
309 if alsa_dep.found()
310   cdata.set('HAVE_ALSA', 1)
311   cdata.set('HAVE_ALSA_UCM', 1)
312 endif
313
314 asyncns_dep = dependency('libasyncns', version : '>= 0.1', required : get_option('asyncns'))
315 if asyncns_dep.found()
316   cdata.set('HAVE_LIBASYNCNS', 1)
317 endif
318
319 dbus_dep = dependency('dbus-1', version : '>= 1.4.12', required : get_option('dbus'))
320 if dbus_dep.found()
321   cdata.set('HAVE_DBUS', 1)
322 endif
323
324 gio_dep = dependency('gio-2.0', version : '>= 2.26.0', required : get_option('gsettings'))
325 if gio_dep.found()
326   cdata.set('HAVE_GSETTINGS', 1)
327 endif
328
329 glib_dep = dependency('glib-2.0', version : '>= 2.4.0', required: get_option('glib'))
330 if glib_dep.found()
331   cdata.set('HAVE_GLIB', 1)
332 endif
333
334 gtk_dep = dependency('gtk+-3.0', required : get_option('gtk'))
335 if gtk_dep.found()
336   cdata.set('HAVE_GTK', 1)
337 endif
338
339 samplerate_dep = dependency('samplerate', version : '>= 0.1.0', required : get_option('samplerate'))
340 if samplerate_dep.found()
341   cdata.set('HAVE_LIBSAMPLERATE', 1)
342 endif
343
344 sndfile_dep = dependency('sndfile', version : '>= 1.0.20')
345
346 soxr_dep = dependency('soxr', version : '>= 0.1.1', required : get_option('soxr'))
347 if soxr_dep.found()
348   cdata.set('HAVE_SOXR', 1)
349 endif
350
351 libsystemd_dep = dependency('libsystemd', required : get_option('systemd'))
352 if libsystemd_dep.found()
353   cdata.set('HAVE_SYSTEMD_DAEMON', 1)
354   cdata.set('HAVE_SYSTEMD_LOGIN', 1)
355   cdata.set('HAVE_SYSTEMD_JOURNAL', 1)
356   systemd_dep = dependency('systemd', required : get_option('systemd'))
357   if systemd_dep.found() and systemduserunitdir == ''
358     systemduserunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir')
359   endif
360 endif
361
362 x11_dep = dependency('x11-xcb', required : get_option('x11'))
363 if x11_dep.found()
364   xcb_dep  = dependency('xcb',  required : true, version : '>= 1.6')
365   ice_dep  = dependency('ice',  required : true)
366   sm_dep   = dependency('sm',   required : true)
367   xtst_dep = dependency('xtst', required : true)
368   cdata.set('HAVE_X11', 1)
369 endif
370
371 # FIXME: support ORC
372 cdata.set('DISABLE_ORC', 1)
373
374 # Module dependencies
375
376 if cc.has_header('sys/soundcard.h')
377   cdata.set('HAVE_OSS_OUTPUT', 1)
378   cdata.set('HAVE_OSS_WRAPPER', 1)
379   cdata.set_quoted('PULSEDSP_LOCATION', pulsedspdir)
380 endif
381
382 if get_option('hal-compat')
383   cdata.set('HAVE_HAL_COMPAT', 1)
384 endif
385
386 avahi_dep = dependency('avahi-client', version : '>= 0.6.0', required : get_option('avahi'), disabler : true)
387 if avahi_dep.found()
388   cdata.set('HAVE_AVAHI', 1)
389 endif
390
391 bluez_dep = dependency('bluez', version : '>= 5.0', required : get_option('bluez5'))
392 sbc_dep = dependency('sbc', version : '>= 1.0', required : false)
393 if bluez_dep.found()
394   assert(dbus_dep.found(), 'BlueZ requires D-Bus support')
395   assert(sbc_dep.found(), 'BlueZ requires SBC support')
396   cdata.set('HAVE_SBC', 1)
397   cdata.set('HAVE_BLUEZ', 1)
398   cdata.set('HAVE_BLUEZ_5', 1)
399   if get_option('bluez5-native-headset')
400     cdata.set('HAVE_BLUEZ_5_NATIVE_HEADSET', 1)
401   endif
402   if get_option('bluez5-ofono-headset')
403     cdata.set('HAVE_BLUEZ_5_OFONO_HEADSET', 1)
404   endif
405 endif
406
407 fftw_dep = dependency('fftw3f', required : get_option('fftw'))
408 if fftw_dep.found()
409   cdata.set('HAVE_FFTW', 1)
410 endif
411
412 jack_dep = dependency('jack', version : '>= 0.117.0', required : get_option('jack'))
413 if jack_dep.found()
414   cdata.set('HAVE_JACK', 1)
415 endif
416
417 lirc_dep = dependency('lirc', required : get_option('lirc'))
418 if lirc_dep.found()
419   cdata.set('HAVE_LIRC', 1)
420 endif
421
422 openssl_dep = dependency('openssl', version : '>= 0.9', required : get_option('openssl'))
423 if openssl_dep.found()
424   cdata.set('HAVE_OPENSSL', 1)
425 endif
426
427 speex_dep = dependency('speexdsp', version : '>= 1.2', required : get_option('speex'))
428 if speex_dep.found()
429   cdata.set('HAVE_SPEEX', 1)
430 endif
431
432 udev_dep = dependency('libudev', version : '>= 143', required : get_option('udev'))
433 if udev_dep.found()
434   cdata.set('HAVE_UDEV', 1)
435 endif
436
437 webrtc_dep = dependency('webrtc-audio-processing', version : '>= 0.2', required : get_option('webrtc-aec'))
438 if webrtc_dep.found()
439   cdata.set('HAVE_WEBRTC', 1)
440 endif
441
442 # Test dependencies
443
444 check_dep = dependency('check', version : '>= 0.9.10', required : get_option('tests'))
445
446 # Now generate config.h from everything above
447 configure_file(output : 'config.h', configuration : cdata)
448
449 # pkg-config files
450
451 pc_cdata = configuration_data()
452
453 pc_cdata.set('prefix', prefix)
454 pc_cdata.set('exec_prefix', prefix)
455 pc_cdata.set('libdir', libdir)
456 pc_cdata.set('includedir', includedir)
457 pc_cdata.set('modlibexecdir', modlibexecdir)
458 pc_cdata.set('PACKAGE_VERSION', pa_version_str)
459 pc_cdata.set('PA_MAJORMINOR', pa_version_major_minor)
460 # FIXME: the line below is wrong. Currently the meson thread dep lacks documentation,
461 # and doesn't allow introspection, ie. none of get_pkgconfig_variable() or
462 # get_configtool_variable() work with it, so we have no way to get this flag right,
463 # unless we do all the work ourselves. See current work in glib, also meson #553.
464 pc_cdata.set('PTHREAD_LIBS', '-pthread')
465
466 pc_files = [
467   'libpulse.pc',
468   'libpulse-simple.pc',
469 ]
470
471 if glib_dep.found()
472   pc_files += 'libpulse-mainloop-glib.pc'
473 endif
474
475 foreach file : pc_files
476   configure_file(
477     input : file + '.in',
478     output : file,
479     configuration : pc_cdata,
480     install_dir : pkgconfigdir)
481 endforeach
482
483 # Subdirs
484
485 if get_option('man')
486   subdir('man')
487 endif
488 subdir('shell-completion/bash')
489 subdir('shell-completion/zsh')
490 subdir('src')
491 subdir('vala')
492
493 ############################################################
494
495 # Final summary
496
497 summary = [
498   '',
499   '---{ @0@ @1@ }---'.format(meson.project_name(), meson.project_version()),
500   '',
501   'prefix:                        @0@'.format(prefix),
502   'bindir:                        @0@'.format(bindir),
503   'libdir:                        @0@'.format(libdir),
504   'libexecdir:                    @0@'.format(libexecdir),
505   'mandir:                        @0@'.format(mandir),
506   'datadir:                       @0@'.format(datadir),
507   'sysconfdir:                    @0@'.format(sysconfdir),
508   'localstatedir:                 @0@'.format(localstatedir),
509   'modlibexecdir:                 @0@'.format(modlibexecdir),
510   'System Runtime Path:           @0@'.format(cdata.get_unquoted('PA_SYSTEM_RUNTIME_PATH')),
511   'System State Path:             @0@'.format(cdata.get_unquoted('PA_SYSTEM_STATE_PATH')),
512   'System Config Path:            @0@'.format(cdata.get_unquoted('PA_SYSTEM_CONFIG_PATH')),
513   'Bash completions directory:    @0@'.format(bashcompletiondir),
514   'Zsh completions directory:     @0@'.format(zshcompletiondir),
515   'Compiler:                      @0@ @1@'.format(cc.get_id(), cc.version()),
516 #  'CFLAGS:                        @0@'.format(${CFLAGS}),
517 #  'CPPFLAGS:                      @0@'.format(${CPPFLAGS}),
518 #  'LIBS:                          @0@'.format(${LIBS}),
519   '',
520   'Enable memfd shared memory:    @0@'.format(cdata.has('HAVE_MEMFD')),
521   'Enable X11:                    @0@'.format(x11_dep.found()),
522 #  'Enable OSS Output:             @0@'.format(${ENABLE_OSS_OUTPUT}),
523 #  'Enable OSS Wrapper:            @0@'.format(${ENABLE_OSS_WRAPPER}),
524 #  'Enable EsounD:                 @0@'.format(${ENABLE_ESOUND}),
525   'Enable Alsa:                   @0@'.format(alsa_dep.found()),
526 #  'Enable CoreAudio:              @0@'.format(${ENABLE_COREAUDIO}),
527 #  'Enable Solaris:                @0@'.format(${ENABLE_SOLARIS}),
528 #  'Enable WaveOut:                @0@'.format(${ENABLE_WAVEOUT}),
529   'Enable GLib 2:                 @0@'.format(glib_dep.found()),
530 #  'Enable GConf:                  @0@'.format(${ENABLE_GCONF}),
531   'Enable GSettings:              @0@'.format(gio_dep.found()),
532   'Enable Gtk+ 3:                 @0@'.format(gtk_dep.found()),
533   'Enable Avahi:                  @0@'.format(avahi_dep.found()),
534   'Enable Jack:                   @0@'.format(jack_dep.found()),
535   'Enable Async DNS:              @0@'.format(asyncns_dep.found()),
536   'Enable LIRC:                   @0@'.format(lirc_dep.found()),
537   'Enable D-Bus:                  @0@'.format(dbus_dep.found()),
538   '  Enable BlueZ 5:              @0@'.format(bluez_dep.found()),
539   '    Enable native headsets:    @0@'.format(get_option('bluez5-native-headset')),
540   '    Enable  ofono headsets:    @0@'.format(get_option('bluez5-ofono-headset')),
541   'Enable udev:                   @0@'.format(udev_dep.found()),
542   '  Enable HAL->udev compat:     @0@'.format(get_option('hal-compat')),
543   'Enable systemd:                @0@'.format(libsystemd_dep.found()),
544 #  'Enable TCP Wrappers:           @0@'.format(${ENABLE_TCPWRAP}),
545   'Enable libsamplerate:          @0@'.format(samplerate_dep.found()),
546   'Enable IPv6:                   @0@'.format(get_option('ipv6')),
547   'Enable OpenSSL (for Airtunes): @0@'.format(openssl_dep.found()),
548   'Enable FFTW:                   @0@'.format(fftw_dep.found()),
549 #  'Enable orc:                    @0@'.format(${ENABLE_ORC}),
550   'Enable Adrian echo canceller:  @0@'.format(get_option('adrian-aec')),
551   'Enable Speex (resampler, AEC): @0@'.format(speex_dep.found()),
552   'Enable SoXR (resampler):       @0@'.format(soxr_dep.found()),
553   'Enable WebRTC echo canceller:  @0@'.format(webrtc_dep.found()),
554 #  'Enable gcov coverage:          @0@'.format(${ENABLE_GCOV}),
555   'Enable man pages:              @0@'.format(get_option('man')),
556   'Enable unit tests:             @0@'.format(get_option('tests')),
557   '',
558   'Database:                      @0@'.format(get_option('database')),
559   'Legacy Database Entry Support: @0@'.format(get_option('legacy-database-entry-format')),
560   'System User:                   @0@'.format(cdata.get_unquoted('PA_SYSTEM_USER')),
561   'System Group:                  @0@'.format(cdata.get_unquoted('PA_SYSTEM_GROUP')),
562   'Access Group:                  @0@'.format(cdata.get_unquoted('PA_ACCESS_GROUP')),
563 #  'Enable per-user EsounD socket: @0@'.format(${ENABLE_PER_USER_ESOUND_SOCKET}),
564 #  'Force preopen:                 @0@'.format(${FORCE_PREOPEN}),
565 #  'Preopened modules:             @0@'.format(${PREOPEN_MODS}),
566 ]
567
568 message('\n    '.join(summary))
569
570 # Sanity checks
571
572 if not speex_dep.found() and not webrtc_dep.found() and not get_option('adrian-aec')
573   error('At least one echo canceller implementation must be available!')
574 endif
575
576 if samplerate_dep.found()
577   warning('Support for libsamplerate is DEPRECATED')
578 endif
579
580 if host_machine.system() != 'windows'
581   if not dbus_dep.found()
582     message = [
583       'You do not have D-Bus support enabled. It is strongly recommended',
584       'that you enable D-Bus support if your platform supports it.',
585       'Many parts of PulseAudio use D-Bus, from ConsoleKit interaction',
586       'to the Device Reservation Protocol to speak to JACK, Bluetooth',
587       'support and even a native control protocol for communicating and',
588       'controlling the PulseAudio daemon itself.',
589     ]
590     warning('\n' + '\n'.join(message))
591   endif
592   if not udev_dep.found()
593     message = [
594       'You do not have udev support enabled. It is strongly recommended',
595       'that you enable udev support if your platform supports it as it is',
596       'the primary method used to detect hardware audio devices (on Linux)',
597       'and is thus a critical part of PulseAudio on that platform.',
598     ]
599     warning('\n' + '\n'.join(message))
600   endif
601   if not speex_dep.found()
602     message = [
603       'You do not have speex support enabled. It is strongly recommended',
604       'that you enable speex support if your platform supports it as it is',
605       'the primary method used for audio resampling and is thus a critical',
606       'part of PulseAudio on that platform.',
607     ]
608     warning('\n' + '\n'.join(message))
609   endif
610 endif