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' ]
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]
17 pa_version_micro = '0'
19 pa_version_major_minor = pa_version_major + '.' + pa_version_minor
22 pa_protocol_version = 33
24 # The stable ABI for client applications, for the version info x:y:z
25 # always will hold y=z
26 libpulse_version_info = [21, 0, 21]
28 # A simplified, synchronous, ABI-stable interface for client
29 # applications, for the version info x:y:z always will hold y=z
30 libpulse_simple_version_info = [1, 1, 1]
32 # The ABI-stable GLib adapter for client applications, for the version
33 # info x:y:z always will hold y=z
34 libpulse_mainloop_glib_version_info = [0, 5, 0]
36 libpulse_version = '@0@.@1@.@2@'.format(
37 libpulse_version_info[0] - libpulse_version_info[2],
38 libpulse_version_info[0],
39 libpulse_version_info[1],
42 libpulse_simple_version = '@0@.@1@.@2@'.format(
43 libpulse_simple_version_info[0] - libpulse_simple_version_info[2],
44 libpulse_simple_version_info[0],
45 libpulse_simple_version_info[1],
48 libpulse_mainloop_glib_version = '@0@.@1@.@2@'.format(
49 libpulse_mainloop_glib_version_info[0] - libpulse_mainloop_glib_version_info[2],
50 libpulse_mainloop_glib_version_info[0],
51 libpulse_mainloop_glib_version_info[1],
56 prefix = get_option('prefix')
57 assert(prefix.startswith('/'), 'Prefix is not absolute: "@0@"'.format(prefix))
59 bindir = join_paths(prefix, get_option('bindir'))
60 includedir = join_paths(prefix, get_option('includedir'))
61 libdir = join_paths(prefix, get_option('libdir'))
62 libexecdir = join_paths(prefix, get_option('libexecdir'))
63 mandir = join_paths(prefix, get_option('mandir'))
64 datadir = join_paths(prefix, get_option('datadir'))
65 localedir = join_paths(prefix, get_option('localedir'))
66 localstatedir = join_paths(prefix, get_option('localstatedir'))
67 sysconfdir = join_paths(prefix, get_option('sysconfdir'))
68 privlibdir = join_paths(libdir, 'pulseaudio')
69 alsadatadir = join_paths(datadir, 'pulseaudio', 'alsa-mixer')
71 pkgconfigdir = join_paths(libdir, 'pkgconfig')
72 pulselibexecdir = join_paths(libexecdir, 'pulse')
73 pulsesysconfdir = join_paths(sysconfdir, 'pulse')
75 modlibexecdir = get_option('modlibexecdir')
76 if modlibexecdir == ''
77 modlibexecdir = join_paths(libdir, 'pulse-' + pa_version_major_minor, 'modules')
80 padsplibdir = get_option('padsplibdir')
82 padsplibdir = privlibdir
85 pulsedsp_location = get_option('pulsedsp-location')
86 if pulsedsp_location == ''
87 pulsedsp_location = join_paths(prefix, padsplibdir)
90 systemduserunitdir = get_option('systemduserunitdir')
91 # the default value is set below
93 udevrulesdir = get_option('udevrulesdir')
95 # absolute path, otherwise meson prepends the prefix
96 udevrulesdir = '/lib/udev/rules.d'
99 vapidir = join_paths(datadir, 'vala', 'vapi')
101 bashcompletiondir = get_option('bashcompletiondir')
102 if bashcompletiondir == ''
103 bash_completion_dep = dependency('bash-completion', required : false)
104 if bash_completion_dep.found()
105 bashcompletiondir = bash_completion_dep.get_pkgconfig_variable('completionsdir')
107 bashcompletiondir = join_paths(datadir, 'bash-completion', 'completions')
111 zshcompletiondir = get_option('zshcompletiondir')
112 if zshcompletiondir == ''
113 zshcompletiondir = join_paths(datadir, 'zsh', 'site-functions')
118 cc = meson.get_compiler('c')
120 cdata = configuration_data()
121 cdata.set_quoted('PACKAGE', 'pulseaudio')
122 cdata.set_quoted('PACKAGE_NAME', 'pulseaudio')
123 cdata.set_quoted('PACKAGE_VERSION', pa_version_str)
124 cdata.set_quoted('CANONICAL_HOST', host_machine.cpu())
125 cdata.set('PA_MAJOR', pa_version_major)
126 cdata.set('PA_MINOR', pa_version_minor)
127 cdata.set('PA_API_VERSION', pa_api_version)
128 cdata.set('PA_PROTOCOL_VERSION', pa_protocol_version)
129 cdata.set_quoted('PA_MACHINE_ID', join_paths(sysconfdir, 'machine-id'))
130 cdata.set_quoted('PA_MACHINE_ID_FALLBACK', join_paths(localstatedir, 'lib', 'dbus', 'machine-id'))
131 cdata.set_quoted('PA_SRCDIR', join_paths(meson.current_source_dir(), 'src'))
132 cdata.set_quoted('PA_BUILDDIR', meson.current_build_dir())
133 cdata.set_quoted('PA_SOEXT', '.so')
134 cdata.set_quoted('PA_DEFAULT_CONFIG_DIR', pulsesysconfdir)
135 cdata.set_quoted('PA_BINARY', join_paths(bindir, 'pulseaudio'))
136 cdata.set_quoted('PA_SYSTEM_RUNTIME_PATH', join_paths(localstatedir, 'run', 'pulse'))
137 cdata.set_quoted('PA_SYSTEM_CONFIG_PATH', join_paths(localstatedir, 'lib', 'pulse'))
138 cdata.set_quoted('PA_SYSTEM_STATE_PATH', join_paths(localstatedir, 'lib', 'pulse'))
139 cdata.set_quoted('PA_DLSEARCHPATH', modlibexecdir)
140 cdata.set_quoted('PA_SYSTEM_USER', get_option('system_user'))
141 cdata.set_quoted('PA_SYSTEM_GROUP', get_option('system_group'))
142 cdata.set_quoted('PA_ACCESS_GROUP', get_option('access_group'))
143 cdata.set_quoted('PA_CFLAGS', 'Not yet supported on meson')
144 cdata.set_quoted('PA_ALSA_PATHS_DIR', join_paths(alsadatadir, 'paths'))
145 cdata.set_quoted('PA_ALSA_PROFILE_SETS_DIR', join_paths(alsadatadir, 'profile-sets'))
146 cdata.set_quoted('DESKTOPFILEDIR', join_paths(datadir, 'applications'))
147 cdata.set_quoted('PULSE_LOCALEDIR', localedir)
148 cdata.set_quoted('GETTEXT_PACKAGE', 'pulseaudio')
149 cdata.set('ENABLE_NLS', 1)
152 # First some defaults to keep config file generation happy
153 cdata.set('HAVE_COREAUDIO', 0)
154 cdata.set('HAVE_WAVEOUT', 0)
155 # FIXME: This was not tested. Maybe some flags should better be CFLAGS,
156 # rather than ending up in the config.h file?
157 if host_machine.system() == 'darwin'
158 cdata.set('OS_IS_DARWIN', 1)
159 cdata.set('_DARWIN_C_SOURCE', '200112L') # Needed to get NSIG on Mac OS
160 elif host_machine.system() == 'windows'
161 cdata.set('OS_IS_WIN32', 1)
162 cdata.set('WIN32_LEAN_AND_MEAN', 1) # Needed to avoid including unnecessary headers on Windows
163 #elif host_machine.system() == 'solaris'
164 # # Apparently meson has no solaris support?
165 # # Needed to get declarations for msg_control and msg_controllen on Solaris
166 # cdata.set('_XOPEN_SOURCE', 600)
167 # cdata.set('__EXTENSIONS__', 1)
170 if host_machine.cpu_family() == 'x86_64' or cc.sizeof('void *') >= 8
171 cdata.set('HAVE_FAST_64BIT_OPERATIONS', 1)
188 'netinet/in_systm.h',
212 'valgrind/memcheck.h',
216 foreach h : check_headers
218 define = 'HAVE_' + h.underscorify().to_upper()
223 # FIXME: move this to the above set
224 if cc.has_header('pthread.h')
225 cdata.set('HAVE_PTHREAD', 1)
278 foreach f : check_functions
279 if cc.has_function(f)
280 define = 'HAVE_' + f.underscorify().to_upper()
285 if cc.has_function('SYS_memfd_create', prefix : '#include <sys/syscall.h>')
286 cdata.set('HAVE_MEMFD', 1)
291 if cc.has_header_symbol('signal.h', 'SIGXCPU')
292 cdata.set('HAVE_SIGXCPU', 1)
295 if not cc.has_header_symbol('netinet/in.h', 'INADDR_NONE')
296 if not cc.has_header_symbol('winsock2.h', 'INADDR_NONE')
297 # Define INADDR_NONE if not found (Solaris)
298 cdata.set('INADDR_NONE', '0xffffffff')
304 # FIXME: do we ever care about gid_t not being defined / smaller than an int?
305 cdata.set('GETGROUPS_T', 'gid_t')
309 configinc = include_directories('.')
310 topinc = include_directories('src')
314 pa_c_args = ['-DHAVE_CONFIG_H', '-D_GNU_SOURCE']
315 server_c_args = ['-D__INCLUDED_FROM_PULSE_AUDIO']
316 cdata.set('MESON_BUILD', 1)
318 # On ELF systems we don't want the libraries to be unloaded since we don't clean them up properly,
319 # so we request the nodelete flag to be enabled.
320 # On other systems, we don't really know how to do that, but it's welcome if somebody can tell.
321 nodelete_link_args = ['-Wl,-z,nodelete']
325 if get_option('gcov')
326 add_project_arguments('--coverage', language: ['c', 'cpp'])
327 add_project_link_arguments('--coverage', language: ['c', 'cpp'])
332 libm_dep = cc.find_library('m', required : true)
334 thread_dep = dependency('threads')
336 'pthread_getname_np',
337 'pthread_setaffinity_np',
338 'pthread_setname_np',
340 if cc.has_function(f, dependencies : thread_dep)
341 define = 'HAVE_' + f.underscorify().to_upper()
346 cap_dep = cc.find_library('cap', required : false)
348 shm_dep = cc.find_library('rt', required : false)
350 cdata.set('HAVE_SHM_OPEN', 1)
353 dl_dep = cc.find_library('dl', required : false)
355 cdata.set('HAVE_DLADDR', 1)
359 if cc.has_function('iconv_open')
360 iconv_dep = dependency('', required : false)
363 iconv_dep = cc.find_library('iconv', required : false)
364 have_iconv = iconv_dep.found()
367 cdata.set('HAVE_ICONV', 1)
368 iconvconsttest = '''#include <iconv.h>
369 size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
371 if cc.compiles(iconvconsttest, dependencies : iconv_dep)
372 cdata.set('ICONV_CONST', '')
374 cdata.set('ICONV_CONST', 'const')
380 if get_option('atomic-arm-memory-barrier')
381 cdata.set('ATOMIC_ARM_MEMORY_BARRIER_ENABLED', 1)
384 need_libatomic_ops = false
386 atomictest = '''void func() {
387 volatile int atomic = 2;
388 __sync_bool_compare_and_swap (&atomic, 2, 3);
392 if cc.compiles(atomictest)
393 cdata.set('HAVE_ATOMIC_BUILTINS', 1)
395 newatomictest = '''void func() {
397 __atomic_store_n(&c, 4, __ATOMIC_SEQ_CST);
401 if(cc.compiles(newatomictest))
402 cdata.set('HAVE_ATOMIC_BUILTINS_MEMORY_MODEL', 1)
405 elif host_machine.cpu_family() == 'arm'
406 if host_machine.system() == 'linux' and get_option('atomic-arm-linux-helpers')
407 cdata.set('ATOMIC_ARM_LINUX_HELPERS', 1)
409 armatomictest = '''void func() {
412 asm volatile ("ldrex %0, [%1]\n"
414 "strexeq %0, %3, [%1]\n"
416 : "r" (&a), "Ir" (o), "r" (n)
418 return (a==1 ? 0 : -1);
421 if cc.compiles(aratomictest)
422 cdata.set('ATOMIC_ARM_INLINE_ASM', 1)
424 need_libatomic_ops = true
426 endif # arm && !linux
428 elif not ['freebsd', 'netbsd'].contains(host_machine.system())
429 need_libatomic_ops = true
430 endif # !atomic helpers && !arm
432 if need_libatomic_ops
433 assert(cc.has_header('atomic_ops.h'), 'Need libatomic_ops')
435 cdata.set('AO_REQUIRE_CAS', 1)
437 if host_machine.system() != 'windows'
438 libatomic_ops_dep = cc.find_library('atomic_ops', required : true)
440 libatomic_ops_dep = dependency('', required: false)
443 libatomic_ops_dep = dependency('', required: false)
447 # ARMV6 instructions we need
448 if host_machine.cpu_family() == 'arm'
449 armv6test = '''void func() {
450 volatile int a = -60000, b = 0xaaaabbbb, c = 0xccccdddd;
451 asm volatile ("ldr r0, %2 \n"
456 "pkhbt r1, r3, r2, LSL #8 \n"
459 : "m" (a), "m" (b), "m" (c)
460 : "r0", "r1", "r2", "r3", "cc");
461 return (a == -128 && b == 0xaabbdddd) ? 0 : -1;
464 if cc.compiles(armv6test)
465 cdata.set('HAVE_ARMV6', 1)
468 # NEON checks are automatically done by the unstable-simd module
470 # FIXME: make sure it's >= 2.2
471 ltdl_dep = cc.find_library('ltdl', required : true)
472 # FIXME: can meson support libtool -dlopen/-dlpreopen things?
473 # and do we still want to support this at all?
474 cdata.set('DISABLE_LIBTOOL_PRELOAD', 1)
476 if get_option('database') == 'tdb'
477 database_dep = dependency('tdb')
478 elif get_option('database') == 'gdbm'
479 database_dep = cc.find_library('gdbm', required : true)
481 database_dep = dependency('', required: false)
484 if get_option('ipv6')
485 cdata.set('HAVE_IPV6', 1)
488 if get_option('legacy-database-entry-format')
489 cdata.set('ENABLE_LEGACY_DATABASE_ENTRY_FORMAT', 1)
492 if get_option('running-from-build-tree')
493 cdata.set('HAVE_RUNNING_FROM_BUILD_TREE', 1)
496 alsa_dep = dependency('alsa', version : '>= 1.0.24', required : get_option('alsa'))
498 cdata.set('HAVE_ALSA', 1)
499 cdata.set('HAVE_ALSA_UCM', 1)
502 asyncns_dep = dependency('libasyncns', version : '>= 0.1', required : get_option('asyncns'))
503 if asyncns_dep.found()
504 cdata.set('HAVE_LIBASYNCNS', 1)
507 dbus_dep = dependency('dbus-1', version : '>= 1.4.12', required : get_option('dbus'))
509 cdata.set('HAVE_DBUS', 1)
512 gio_dep = dependency('gio-2.0', version : '>= 2.26.0', required : get_option('gsettings'))
514 cdata.set('HAVE_GSETTINGS', 1)
517 glib_dep = dependency('glib-2.0', version : '>= 2.4.0', required: get_option('glib'))
519 cdata.set('HAVE_GLIB', 1)
522 gtk_dep = dependency('gtk+-3.0', required : get_option('gtk'))
524 cdata.set('HAVE_GTK', 1)
529 orc_dep = dependency('orc-0.4', version : '>= 0.4.11', required : get_option('orc'))
530 orcc = find_program('orcc', required : get_option('orc'))
531 if orc_dep.found() and orcc.found()
534 #orcc_args = [orcc, '--include', 'glib.h']
535 cdata.set('HAVE_ORC', 1)
537 cdata.set('DISABLE_ORC', 1)
540 samplerate_dep = dependency('samplerate', version : '>= 0.1.0', required : get_option('samplerate'))
541 if samplerate_dep.found()
542 cdata.set('HAVE_LIBSAMPLERATE', 1)
545 sndfile_dep = dependency('sndfile', version : '>= 1.0.20')
547 soxr_dep = dependency('soxr', version : '>= 0.1.1', required : get_option('soxr'))
549 cdata.set('HAVE_SOXR', 1)
552 libsystemd_dep = dependency('libsystemd', required : get_option('systemd'))
553 if libsystemd_dep.found()
554 cdata.set('HAVE_SYSTEMD_DAEMON', 1)
555 cdata.set('HAVE_SYSTEMD_LOGIN', 1)
556 cdata.set('HAVE_SYSTEMD_JOURNAL', 1)
558 systemd_dep = dependency('systemd', required : get_option('systemd'))
559 if systemd_dep.found() and systemduserunitdir == ''
560 systemduserunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir')
563 x11_dep = dependency('x11-xcb', required : get_option('x11'))
565 xcb_dep = dependency('xcb', required : true, version : '>= 1.6')
566 ice_dep = dependency('ice', required : true)
567 sm_dep = dependency('sm', required : true)
568 xtst_dep = dependency('xtst', required : true)
569 cdata.set('HAVE_X11', 1)
572 # Module dependencies
574 if cc.has_header('sys/soundcard.h')
575 cdata.set('HAVE_OSS_OUTPUT', 1)
576 cdata.set('HAVE_OSS_WRAPPER', 1)
577 cdata.set('PULSEDSP_LOCATION', pulsedsp_location)
580 if get_option('hal-compat')
581 cdata.set('HAVE_HAL_COMPAT', 1)
584 avahi_dep = dependency('avahi-client', version : '>= 0.6.0', required : get_option('avahi'), disabler : true)
586 cdata.set('HAVE_AVAHI', 1)
589 sbc_dep = dependency('sbc', version : '>= 1.0', required : false)
590 if get_option('bluez5')
591 assert(dbus_dep.found(), 'BlueZ requires D-Bus support')
592 assert(sbc_dep.found(), 'BlueZ requires SBC support')
593 cdata.set('HAVE_SBC', 1)
594 cdata.set('HAVE_BLUEZ', 1)
595 cdata.set('HAVE_BLUEZ_5', 1)
596 if get_option('bluez5-native-headset')
597 cdata.set('HAVE_BLUEZ_5_NATIVE_HEADSET', 1)
599 if get_option('bluez5-ofono-headset')
600 cdata.set('HAVE_BLUEZ_5_OFONO_HEADSET', 1)
604 fftw_dep = dependency('fftw3f', required : get_option('fftw'))
606 cdata.set('HAVE_FFTW', 1)
609 jack_dep = dependency('jack', version : '>= 0.117.0', required : get_option('jack'))
611 cdata.set('HAVE_JACK', 1)
614 lirc_dep = dependency('lirc', required : get_option('lirc'))
616 cdata.set('HAVE_LIRC', 1)
619 openssl_dep = dependency('openssl', version : '>= 0.9', required : get_option('openssl'))
620 if openssl_dep.found()
621 cdata.set('HAVE_OPENSSL', 1)
624 speex_dep = dependency('speexdsp', version : '>= 1.2', required : get_option('speex'))
626 cdata.set('HAVE_SPEEX', 1)
629 udev_dep = dependency('libudev', version : '>= 143', required : get_option('udev'))
631 cdata.set('HAVE_UDEV', 1)
634 webrtc_dep = dependency('webrtc-audio-processing', version : '>= 0.2', required : get_option('webrtc-aec'))
635 if webrtc_dep.found()
636 cdata.set('HAVE_WEBRTC', 1)
639 # These are required for the CMake file generation
640 cdata.set('PA_LIBDIR', libdir)
641 cdata.set('PA_INCDIR', includedir)
643 cdata.set('HAVE_GLIB20', 1) # to match the AM_CONDITIONAL for CMake file generation
648 check_dep = dependency('check', version : '>= 0.9.10', required : get_option('tests'))
650 # Now generate config.h from everything above
651 configure_file(output : 'config.h', configuration : cdata)
655 pc_cdata = configuration_data()
657 pc_cdata.set('prefix', prefix)
658 pc_cdata.set('exec_prefix', prefix)
659 pc_cdata.set('libdir', libdir)
660 pc_cdata.set('includedir', includedir)
661 pc_cdata.set('modlibexecdir', modlibexecdir)
662 pc_cdata.set('PACKAGE_VERSION', pa_version_str)
663 pc_cdata.set('PA_MAJORMINOR', pa_version_major_minor)
664 # FIXME: the line below is wrong. Currently the meson thread dep lacks documentation,
665 # and doesn't allow introspection, ie. none of get_pkgconfig_variable() or
666 # get_configtool_variable() work with it, so we have no way to get this flag right,
667 # unless we do all the work ourselves. See current work in glib, also meson #553.
668 pc_cdata.set('PTHREAD_LIBS', '-pthread')
672 'libpulse-simple.pc',
676 pc_files += 'libpulse-mainloop-glib.pc'
679 foreach file : pc_files
681 input : file + '.in',
683 configuration : pc_cdata,
684 install_dir : pkgconfigdir)
689 m4 = find_program('m4', required: true)
691 cmakedir = join_paths(libdir, 'cmake', 'PulseAudio')
693 cmake_template_file = configure_file(
694 input : 'PulseAudioConfig.cmake.in',
695 output : 'PulseAudioConfig.cmake.tmp',
696 configuration: cdata,
699 custom_target('PulseAudioConfig.cmake',
700 input : cmake_template_file,
701 output : 'PulseAudioConfig.cmake',
703 command : [m4, '@INPUT@'],
704 build_by_default : true,
706 install_dir : cmakedir,
710 input : 'PulseAudioConfigVersion.cmake.in',
711 output : 'PulseAudioConfigVersion.cmake',
712 configuration: cdata,
714 install_dir : cmakedir,
723 subdir('shell-completion/bash')
724 subdir('shell-completion/zsh')
728 ############################################################
734 '---{ @0@ @1@ }---'.format(meson.project_name(), meson.project_version()),
736 'prefix: @0@'.format(prefix),
737 'bindir: @0@'.format(bindir),
738 'libdir: @0@'.format(libdir),
739 'libexecdir: @0@'.format(libexecdir),
740 'mandir: @0@'.format(mandir),
741 'datadir: @0@'.format(datadir),
742 'sysconfdir: @0@'.format(sysconfdir),
743 'localstatedir: @0@'.format(localstatedir),
744 'modlibexecdir: @0@'.format(modlibexecdir),
745 'System Runtime Path: @0@'.format(cdata.get_unquoted('PA_SYSTEM_RUNTIME_PATH')),
746 'System State Path: @0@'.format(cdata.get_unquoted('PA_SYSTEM_STATE_PATH')),
747 'System Config Path: @0@'.format(cdata.get_unquoted('PA_SYSTEM_CONFIG_PATH')),
748 'Bash completions directory: @0@'.format(bashcompletiondir),
749 'Zsh completions directory: @0@'.format(zshcompletiondir),
750 'Compiler: @0@ @1@'.format(cc.get_id(), cc.version()),
751 # 'CFLAGS: @0@'.format(${CFLAGS}),
752 # 'CPPFLAGS: @0@'.format(${CPPFLAGS}),
753 # 'LIBS: @0@'.format(${LIBS}),
755 'Enable memfd shared memory: @0@'.format(cdata.has('HAVE_MEMFD')),
756 'Enable X11: @0@'.format(x11_dep.found()),
757 # 'Enable OSS Output: @0@'.format(${ENABLE_OSS_OUTPUT}),
758 # 'Enable OSS Wrapper: @0@'.format(${ENABLE_OSS_WRAPPER}),
759 # 'Enable EsounD: @0@'.format(${ENABLE_ESOUND}),
760 'Enable Alsa: @0@'.format(alsa_dep.found()),
761 # 'Enable CoreAudio: @0@'.format(${ENABLE_COREAUDIO}),
762 # 'Enable Solaris: @0@'.format(${ENABLE_SOLARIS}),
763 # 'Enable WaveOut: @0@'.format(${ENABLE_WAVEOUT}),
764 'Enable GLib 2: @0@'.format(glib_dep.found()),
765 # 'Enable GConf: @0@'.format(${ENABLE_GCONF}),
766 'Enable GSettings: @0@'.format(gio_dep.found()),
767 'Enable Gtk+ 3: @0@'.format(gtk_dep.found()),
768 'Enable Avahi: @0@'.format(avahi_dep.found()),
769 'Enable Jack: @0@'.format(jack_dep.found()),
770 'Enable Async DNS: @0@'.format(asyncns_dep.found()),
771 'Enable LIRC: @0@'.format(lirc_dep.found()),
772 'Enable D-Bus: @0@'.format(dbus_dep.found()),
773 ' Enable BlueZ 5: @0@'.format(get_option('bluez5')),
774 ' Enable native headsets: @0@'.format(get_option('bluez5-native-headset')),
775 ' Enable ofono headsets: @0@'.format(get_option('bluez5-ofono-headset')),
776 'Enable udev: @0@'.format(udev_dep.found()),
777 ' Enable HAL->udev compat: @0@'.format(get_option('hal-compat')),
778 'Enable systemd: @0@'.format(libsystemd_dep.found()),
779 # 'Enable TCP Wrappers: @0@'.format(${ENABLE_TCPWRAP}),
780 'Enable libsamplerate: @0@'.format(samplerate_dep.found()),
781 'Enable IPv6: @0@'.format(get_option('ipv6')),
782 'Enable OpenSSL (for Airtunes): @0@'.format(openssl_dep.found()),
783 'Enable FFTW: @0@'.format(fftw_dep.found()),
784 'Enable ORC: @0@'.format(have_orcc),
785 'Enable Adrian echo canceller: @0@'.format(get_option('adrian-aec')),
786 'Enable Speex (resampler, AEC): @0@'.format(speex_dep.found()),
787 'Enable SoXR (resampler): @0@'.format(soxr_dep.found()),
788 'Enable WebRTC echo canceller: @0@'.format(webrtc_dep.found()),
789 'Enable Gcov coverage: @0@'.format(get_option('gcov')),
790 'Enable man pages: @0@'.format(get_option('man')),
791 'Enable unit tests: @0@'.format(get_option('tests')),
793 'Database: @0@'.format(get_option('database')),
794 'Legacy Database Entry Support: @0@'.format(get_option('legacy-database-entry-format')),
795 'Running from build tree: @0@'.format(get_option('running-from-build-tree')),
796 'System User: @0@'.format(cdata.get_unquoted('PA_SYSTEM_USER')),
797 'System Group: @0@'.format(cdata.get_unquoted('PA_SYSTEM_GROUP')),
798 'Access Group: @0@'.format(cdata.get_unquoted('PA_ACCESS_GROUP')),
799 # 'Enable per-user EsounD socket: @0@'.format(${ENABLE_PER_USER_ESOUND_SOCKET}),
800 # 'Force preopen: @0@'.format(${FORCE_PREOPEN}),
801 # 'Preopened modules: @0@'.format(${PREOPEN_MODS}),
804 message('\n '.join(summary))
808 if not speex_dep.found() and not webrtc_dep.found() and not get_option('adrian-aec')
809 error('At least one echo canceller implementation must be available!')
812 if samplerate_dep.found()
813 warning('Support for libsamplerate is DEPRECATED')
816 if host_machine.system() != 'windows'
817 if not dbus_dep.found()
819 'You do not have D-Bus support enabled. It is strongly recommended',
820 'that you enable D-Bus support if your platform supports it.',
821 'Many parts of PulseAudio use D-Bus, from ConsoleKit interaction',
822 'to the Device Reservation Protocol to speak to JACK, Bluetooth',
823 'support and even a native control protocol for communicating and',
824 'controlling the PulseAudio daemon itself.',
826 warning('\n' + '\n'.join(message))
828 if not udev_dep.found()
830 'You do not have udev support enabled. It is strongly recommended',
831 'that you enable udev support if your platform supports it as it is',
832 'the primary method used to detect hardware audio devices (on Linux)',
833 'and is thus a critical part of PulseAudio on that platform.',
835 warning('\n' + '\n'.join(message))
837 if not speex_dep.found()
839 'You do not have speex support enabled. It is strongly recommended',
840 'that you enable speex support if your platform supports it as it is',
841 'the primary method used for audio resampling and is thus a critical',
842 'part of PulseAudio on that platform.',
844 warning('\n' + '\n'.join(message))