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