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 = 34
24 # The stable ABI for client applications, for the version info x:y:z
25 # always will hold x=z
26 libpulse_version_info = [23, 0, 23]
28 # A simplified, synchronous, ABI-stable interface for client
29 # applications, for the version info x:y:z always will hold x=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 x=z
34 libpulse_mainloop_glib_version_info = [0, 6, 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')
70 alsadatadir = get_option('alsadatadir')
72 alsadatadir = join_paths(datadir, 'pulseaudio', 'alsa-mixer')
75 pkgconfigdir = join_paths(libdir, 'pkgconfig')
76 pulselibexecdir = join_paths(libexecdir, 'pulse')
77 pulsesysconfdir = join_paths(sysconfdir, 'pulse')
79 modlibexecdir = get_option('modlibexecdir')
80 if modlibexecdir == ''
81 modlibexecdir = join_paths(libdir, 'pulse-' + pa_version_major_minor, 'modules')
84 padsplibdir = get_option('padsplibdir')
86 padsplibdir = privlibdir
89 pulsedsp_location = get_option('pulsedsp-location')
90 if pulsedsp_location == ''
91 pulsedsp_location = join_paths(prefix, padsplibdir)
94 systemduserunitdir = get_option('systemduserunitdir')
95 # the default value is set below
97 udevrulesdir = get_option('udevrulesdir')
99 # absolute path, otherwise meson prepends the prefix
100 udevrulesdir = '/lib/udev/rules.d'
103 vapidir = join_paths(datadir, 'vala', 'vapi')
105 bashcompletiondir = get_option('bashcompletiondir')
106 if bashcompletiondir == ''
107 bash_completion_dep = dependency('bash-completion', required : false)
108 if bash_completion_dep.found()
109 bashcompletiondir = bash_completion_dep.get_pkgconfig_variable('completionsdir')
111 bashcompletiondir = join_paths(datadir, 'bash-completion', 'completions')
115 zshcompletiondir = get_option('zshcompletiondir')
116 if zshcompletiondir == ''
117 zshcompletiondir = join_paths(datadir, 'zsh', 'site-functions')
122 cc = meson.get_compiler('c')
124 cdata = configuration_data()
125 cdata.set_quoted('PACKAGE', 'pulseaudio')
126 cdata.set_quoted('PACKAGE_NAME', 'pulseaudio')
127 cdata.set_quoted('PACKAGE_VERSION', pa_version_str)
128 cdata.set_quoted('CANONICAL_HOST', host_machine.cpu())
129 cdata.set('PA_MAJOR', pa_version_major)
130 cdata.set('PA_MINOR', pa_version_minor)
131 cdata.set('PA_API_VERSION', pa_api_version)
132 cdata.set('PA_PROTOCOL_VERSION', pa_protocol_version)
133 cdata.set_quoted('PA_MACHINE_ID', join_paths(sysconfdir, 'machine-id'))
134 cdata.set_quoted('PA_MACHINE_ID_FALLBACK', join_paths(localstatedir, 'lib', 'dbus', 'machine-id'))
135 cdata.set_quoted('PA_SRCDIR', join_paths(meson.current_source_dir(), 'src'))
136 cdata.set_quoted('PA_BUILDDIR', meson.current_build_dir())
137 cdata.set_quoted('PA_SOEXT', '.so')
138 cdata.set_quoted('PA_DEFAULT_CONFIG_DIR', pulsesysconfdir)
139 cdata.set('PA_DEFAULT_CONFIG_DIR_UNQUOTED', pulsesysconfdir)
140 cdata.set_quoted('PA_BINARY', join_paths(bindir, 'pulseaudio'))
141 cdata.set_quoted('PA_SYSTEM_RUNTIME_PATH', join_paths(localstatedir, 'run', 'pulse'))
142 cdata.set_quoted('PA_SYSTEM_CONFIG_PATH', join_paths(localstatedir, 'lib', 'pulse'))
143 cdata.set_quoted('PA_SYSTEM_STATE_PATH', join_paths(localstatedir, 'lib', 'pulse'))
144 cdata.set_quoted('PA_DLSEARCHPATH', modlibexecdir)
145 cdata.set_quoted('PA_SYSTEM_USER', get_option('system_user'))
146 cdata.set_quoted('PA_SYSTEM_GROUP', get_option('system_group'))
147 cdata.set_quoted('PA_ACCESS_GROUP', get_option('access_group'))
148 cdata.set_quoted('PA_CFLAGS', 'Not yet supported on meson')
149 cdata.set_quoted('PA_ALSA_PATHS_DIR', join_paths(alsadatadir, 'paths'))
150 cdata.set_quoted('PA_ALSA_PROFILE_SETS_DIR', join_paths(alsadatadir, 'profile-sets'))
151 cdata.set_quoted('DESKTOPFILEDIR', join_paths(datadir, 'applications'))
152 cdata.set_quoted('PULSE_LOCALEDIR', localedir)
153 cdata.set_quoted('GETTEXT_PACKAGE', 'pulseaudio')
154 cdata.set('ENABLE_NLS', 1)
155 cdata.set('top_srcdir', meson.source_root())
158 # First some defaults to keep config file generation happy
159 cdata.set('HAVE_COREAUDIO', 0)
160 cdata.set('HAVE_WAVEOUT', 0)
161 # FIXME: This was not tested. Maybe some flags should better be CFLAGS,
162 # rather than ending up in the config.h file?
163 if host_machine.system() == 'darwin'
164 cdata.set('OS_IS_DARWIN', 1)
165 cdata.set('_DARWIN_C_SOURCE', '200112L') # Needed to get NSIG on Mac OS
166 elif host_machine.system() == 'windows'
167 cdata.set('OS_IS_WIN32', 1)
168 cdata.set('WIN32_LEAN_AND_MEAN', 1) # Needed to avoid including unnecessary headers on Windows
169 #elif host_machine.system() == 'solaris'
170 # # Apparently meson has no solaris support?
171 # # Needed to get declarations for msg_control and msg_controllen on Solaris
172 # cdata.set('_XOPEN_SOURCE', 600)
173 # cdata.set('__EXTENSIONS__', 1)
176 if cc.has_type('_Bool')
177 cdata.set('HAVE_STD_BOOL', 1)
180 if host_machine.cpu_family() == 'x86_64' or cc.sizeof('void *') >= 8
181 cdata.set('HAVE_FAST_64BIT_OPERATIONS', 1)
198 'netinet/in_systm.h',
224 'valgrind/memcheck.h',
228 foreach h : check_headers
230 define = 'HAVE_' + h.underscorify().to_upper()
235 # FIXME: move this to the above set
236 if cc.has_header('pthread.h')
237 cdata.set('HAVE_PTHREAD', 1)
240 if cc.has_header_symbol('pthread.h', 'PTHREAD_PRIO_INHERIT')
241 cdata.set('HAVE_PTHREAD_PRIO_INHERIT', 1)
294 foreach f : check_functions
295 if cc.has_function(f)
296 define = 'HAVE_' + f.underscorify().to_upper()
301 if cc.has_header_symbol('sys/syscall.h', 'SYS_memfd_create')
302 cdata.set('HAVE_MEMFD', 1)
305 if cc.has_function('dgettext')
308 libintl_dep = cc.find_library('intl')
313 if cc.has_header_symbol('signal.h', 'SIGXCPU')
314 cdata.set('HAVE_SIGXCPU', 1)
317 if not cc.has_header_symbol('netinet/in.h', 'INADDR_NONE')
318 if not cc.has_header_symbol('winsock2.h', 'INADDR_NONE')
319 # Define INADDR_NONE if not found (Solaris)
320 cdata.set('INADDR_NONE', '0xffffffff')
325 [ 'environ', 'unistd.h', '#define _GNU_SOURCE' ],
326 [ 'SOUND_PCM_READ_RATE', 'sys/soundcard.h', '' ],
327 [ 'SOUND_PCM_READ_CHANNELS', 'sys/soundcard.h', '' ],
328 [ 'SOUND_PCM_READ_BITS', 'sys/soundcard.h', '' ],
331 foreach s : check_decls
332 if cc.has_header_symbol(s[1], s[0], prefix : s[2])
333 define = 'HAVE_DECL_' + s[0].to_upper()
340 # FIXME: do we ever care about gid_t not being defined / smaller than an int?
341 cdata.set('GETGROUPS_T', 'gid_t')
345 configinc = include_directories('.')
346 topinc = include_directories('src')
350 pa_c_args = ['-DHAVE_CONFIG_H', '-D_GNU_SOURCE']
351 server_c_args = ['-D__INCLUDED_FROM_PULSE_AUDIO']
352 cdata.set('MESON_BUILD', 1)
354 # On ELF systems we don't want the libraries to be unloaded since we don't clean them up properly,
355 # so we request the nodelete flag to be enabled.
356 # On other systems, we don't really know how to do that, but it's welcome if somebody can tell.
357 nodelete_link_args = ['-Wl,-z,nodelete']
361 if get_option('gcov')
362 add_project_arguments('--coverage', language: ['c', 'cpp'])
363 add_project_link_arguments('--coverage', language: ['c', 'cpp'])
368 libm_dep = cc.find_library('m', required : true)
370 thread_dep = dependency('threads')
372 'pthread_getname_np',
373 'pthread_setaffinity_np',
374 'pthread_setname_np',
376 if cc.has_function(f, dependencies : thread_dep)
377 define = 'HAVE_' + f.underscorify().to_upper()
382 cap_dep = cc.find_library('cap', required : false)
384 shm_dep = cc.find_library('rt', required : false)
386 cdata.set('HAVE_SHM_OPEN', 1)
389 dl_dep = cc.find_library('dl', required : false)
391 cdata.set('HAVE_DLADDR', 1)
395 if cc.has_function('iconv_open')
396 iconv_dep = dependency('', required : false)
399 iconv_dep = cc.find_library('iconv', required : false)
400 have_iconv = iconv_dep.found()
403 cdata.set('HAVE_ICONV', 1)
404 iconvconsttest = '''#include <iconv.h>
405 size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
407 if cc.compiles(iconvconsttest, dependencies : iconv_dep)
408 cdata.set('ICONV_CONST', '')
410 cdata.set('ICONV_CONST', 'const')
416 if get_option('atomic-arm-memory-barrier')
417 cdata.set('ATOMIC_ARM_MEMORY_BARRIER_ENABLED', 1)
420 need_libatomic_ops = false
422 atomictest = '''void func() {
423 volatile int atomic = 2;
424 __sync_bool_compare_and_swap (&atomic, 2, 3);
428 if cc.compiles(atomictest)
429 cdata.set('HAVE_ATOMIC_BUILTINS', 1)
431 newatomictest = '''void func() {
433 __atomic_store_n(&c, 4, __ATOMIC_SEQ_CST);
437 if(cc.compiles(newatomictest))
438 cdata.set('HAVE_ATOMIC_BUILTINS_MEMORY_MODEL', 1)
441 elif host_machine.cpu_family() == 'arm'
442 if host_machine.system() == 'linux' and get_option('atomic-arm-linux-helpers')
443 cdata.set('ATOMIC_ARM_LINUX_HELPERS', 1)
445 armatomictest = '''int func() {
451 "strexeq %0, %3, [%1]\n"
453 : "r" (&a), "Ir" (o), "r" (n)
455 return (a==1 ? 0 : -1);
459 if cc.compiles(armatomictest)
460 cdata.set('ATOMIC_ARM_INLINE_ASM', 1)
462 need_libatomic_ops = true
464 endif # arm && !linux
466 elif not ['freebsd', 'netbsd'].contains(host_machine.system())
467 need_libatomic_ops = true
468 endif # !atomic helpers && !arm
470 if need_libatomic_ops
471 assert(cc.has_header('atomic_ops.h'), 'Need libatomic_ops')
473 cdata.set('AO_REQUIRE_CAS', 1)
475 if host_machine.system() != 'windows'
476 libatomic_ops_dep = cc.find_library('atomic_ops', required : true)
478 libatomic_ops_dep = dependency('', required: false)
481 libatomic_ops_dep = dependency('', required: false)
485 # ARMV6 instructions we need
486 if host_machine.cpu_family() == 'arm'
487 armv6test = '''int func() {
488 volatile int a = -60000, b = 0xaaaabbbb, c = 0xccccdddd;
489 asm volatile ("ldr r0, %2 \n"
494 "pkhbt r1, r3, r2, LSL #8 \n"
497 : "m" (a), "m" (b), "m" (c)
498 : "r0", "r1", "r2", "r3", "cc");
499 return (a == -128 && b == 0xaabbdddd) ? 0 : -1;
503 if cc.compiles(armv6test)
504 cdata.set('HAVE_ARMV6', 1)
507 # NEON checks are automatically done by the unstable-simd module
509 # FIXME: make sure it's >= 2.2
510 ltdl_dep = cc.find_library('ltdl', required : true)
511 # FIXME: can meson support libtool -dlopen/-dlpreopen things?
512 # and do we still want to support this at all?
513 cdata.set('DISABLE_LIBTOOL_PRELOAD', 1)
515 if get_option('database') == 'tdb'
516 database_dep = dependency('tdb')
517 elif get_option('database') == 'gdbm'
518 database_dep = cc.find_library('gdbm', required : true)
520 database_dep = dependency('', required: false)
523 if get_option('ipv6')
524 cdata.set('HAVE_IPV6', 1)
527 if get_option('legacy-database-entry-format')
528 cdata.set('ENABLE_LEGACY_DATABASE_ENTRY_FORMAT', 1)
531 if get_option('stream-restore-clear-old-devices')
532 cdata.set('STREAM_RESTORE_CLEAR_OLD_DEVICES', 1)
535 if get_option('running-from-build-tree')
536 cdata.set('HAVE_RUNNING_FROM_BUILD_TREE', 1)
539 alsa_dep = dependency('alsa', version : '>= 1.0.24', required : get_option('alsa'))
541 cdata.set('HAVE_ALSA', 1)
542 cdata.set('HAVE_ALSA_UCM', 1)
545 asyncns_dep = dependency('libasyncns', version : '>= 0.1', required : get_option('asyncns'))
546 if asyncns_dep.found()
547 cdata.set('HAVE_LIBASYNCNS', 1)
550 dbus_dep = dependency('dbus-1', version : '>= 1.4.12', required : get_option('dbus'))
552 cdata.set('HAVE_DBUS', 1)
555 gio_dep = dependency('gio-2.0', version : '>= 2.26.0', required : get_option('gsettings'))
557 cdata.set('HAVE_GSETTINGS', 1)
560 glib_dep = dependency('glib-2.0', version : '>= 2.28.0', required: get_option('glib'))
562 cdata.set('HAVE_GLIB', 1)
565 gtk_dep = dependency('gtk+-3.0', required : get_option('gtk'))
567 cdata.set('HAVE_GTK', 1)
572 orc_dep = dependency('orc-0.4', version : '>= 0.4.11', required : get_option('orc'))
573 orcc = find_program('orcc', required : get_option('orc'))
574 if orc_dep.found() and orcc.found()
577 #orcc_args = [orcc, '--include', 'glib.h']
578 cdata.set('HAVE_ORC', 1)
580 cdata.set('DISABLE_ORC', 1)
583 samplerate_dep = dependency('samplerate', version : '>= 0.1.0', required : get_option('samplerate'))
584 if samplerate_dep.found()
585 cdata.set('HAVE_LIBSAMPLERATE', 1)
588 sndfile_dep = dependency('sndfile', version : '>= 1.0.20')
590 soxr_dep = dependency('soxr', version : '>= 0.1.1', required : get_option('soxr'))
592 cdata.set('HAVE_SOXR', 1)
595 libsystemd_dep = dependency('libsystemd', required : get_option('systemd'))
596 if libsystemd_dep.found()
597 cdata.set('HAVE_SYSTEMD_DAEMON', 1)
598 cdata.set('HAVE_SYSTEMD_LOGIN', 1)
599 cdata.set('HAVE_SYSTEMD_JOURNAL', 1)
601 systemd_dep = dependency('systemd', required : get_option('systemd'))
602 if systemd_dep.found() and systemduserunitdir == ''
603 systemduserunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir')
606 x11_dep = dependency('x11-xcb', required : get_option('x11'))
608 xcb_dep = dependency('xcb', required : true, version : '>= 1.6')
609 ice_dep = dependency('ice', required : true)
610 sm_dep = dependency('sm', required : true)
611 xtst_dep = dependency('xtst', required : true)
612 cdata.set('HAVE_X11', 1)
615 # Module dependencies
617 if cc.has_header('sys/soundcard.h')
618 cdata.set('HAVE_OSS_OUTPUT', 1)
619 cdata.set('HAVE_OSS_WRAPPER', 1)
620 cdata.set('PULSEDSP_LOCATION', pulsedsp_location)
623 if get_option('hal-compat')
624 cdata.set('HAVE_HAL_COMPAT', 1)
627 avahi_dep = dependency('avahi-client', version : '>= 0.6.0', required : get_option('avahi'), disabler : true)
629 cdata.set('HAVE_AVAHI', 1)
632 sbc_dep = dependency('sbc', version : '>= 1.0', required : false)
633 if get_option('bluez5')
634 assert(dbus_dep.found(), 'BlueZ requires D-Bus support')
635 assert(sbc_dep.found(), 'BlueZ requires SBC support')
636 cdata.set('HAVE_SBC', 1)
637 cdata.set('HAVE_BLUEZ', 1)
638 cdata.set('HAVE_BLUEZ_5', 1)
639 if get_option('bluez5-native-headset')
640 cdata.set('HAVE_BLUEZ_5_NATIVE_HEADSET', 1)
642 if get_option('bluez5-ofono-headset')
643 cdata.set('HAVE_BLUEZ_5_OFONO_HEADSET', 1)
647 fftw_dep = dependency('fftw3f', required : get_option('fftw'))
649 cdata.set('HAVE_FFTW', 1)
652 jack_dep = dependency('jack', version : '>= 0.117.0', required : get_option('jack'))
654 cdata.set('HAVE_JACK', 1)
657 lirc_dep = dependency('lirc', required : get_option('lirc'))
659 cdata.set('HAVE_LIRC', 1)
662 openssl_dep = dependency('openssl', version : '>= 0.9', required : get_option('openssl'))
663 if openssl_dep.found()
664 cdata.set('HAVE_OPENSSL', 1)
667 speex_dep = dependency('speexdsp', version : '>= 1.2', required : get_option('speex'))
669 cdata.set('HAVE_SPEEX', 1)
672 udev_dep = dependency('libudev', version : '>= 143', required : get_option('udev'))
674 cdata.set('HAVE_UDEV', 1)
677 webrtc_dep = dependency('webrtc-audio-processing', version : '>= 0.2', required : get_option('webrtc-aec'))
678 if webrtc_dep.found()
679 cdata.set('HAVE_WEBRTC', 1)
682 gst_dep = dependency('gstreamer-1.0', version : '>= 1.14', required : get_option('gstreamer'))
683 gstapp_dep = dependency('gstreamer-app-1.0', required : get_option('gstreamer'))
684 gstrtp_dep = dependency('gstreamer-rtp-1.0', required : get_option('gstreamer'))
686 have_gstreamer = false
687 if gst_dep.found() and gstapp_dep.found() and gstrtp_dep.found()
688 have_gstreamer = true
691 # These are required for the CMake file generation
692 cdata.set('PA_LIBDIR', libdir)
693 cdata.set('PA_INCDIR', includedir)
695 cdata.set('HAVE_GLIB20', 1) # to match the AM_CONDITIONAL for CMake file generation
700 check_dep = dependency('check', version : '>= 0.9.10', required : get_option('tests'))
709 subdir('shell-completion/bash')
710 subdir('shell-completion/zsh')
714 # Now generate config.h from everything above
715 configure_file(output : 'config.h', configuration : cdata)
719 pc_cdata = configuration_data()
721 pc_cdata.set('prefix', prefix)
722 pc_cdata.set('exec_prefix', prefix)
723 pc_cdata.set('libdir', libdir)
724 pc_cdata.set('includedir', includedir)
725 pc_cdata.set('modlibexecdir', modlibexecdir)
726 pc_cdata.set('PACKAGE_VERSION', pa_version_str)
727 pc_cdata.set('PA_MAJORMINOR', pa_version_major_minor)
728 # FIXME: the line below is wrong. Currently the meson thread dep lacks documentation,
729 # and doesn't allow introspection, ie. none of get_pkgconfig_variable() or
730 # get_configtool_variable() work with it, so we have no way to get this flag right,
731 # unless we do all the work ourselves. See current work in glib, also meson #553.
732 pc_cdata.set('PTHREAD_LIBS', '-pthread')
736 'libpulse-simple.pc',
740 pc_files += 'libpulse-mainloop-glib.pc'
743 foreach file : pc_files
745 input : file + '.in',
747 configuration : pc_cdata,
748 install_dir : pkgconfigdir)
753 m4 = find_program('m4', required: true)
755 cmakedir = join_paths(libdir, 'cmake', 'PulseAudio')
757 cmake_template_file = configure_file(
758 input : 'PulseAudioConfig.cmake.in',
759 output : 'PulseAudioConfig.cmake.tmp',
760 configuration: cdata,
763 custom_target('PulseAudioConfig.cmake',
764 input : cmake_template_file,
765 output : 'PulseAudioConfig.cmake',
767 command : [m4, '@INPUT@'],
768 build_by_default : true,
770 install_dir : cmakedir,
774 input : 'PulseAudioConfigVersion.cmake.in',
775 output : 'PulseAudioConfigVersion.cmake',
776 configuration: cdata,
778 install_dir : cmakedir,
781 ############################################################
787 '---{ @0@ @1@ }---'.format(meson.project_name(), meson.project_version()),
789 'prefix: @0@'.format(prefix),
790 'bindir: @0@'.format(bindir),
791 'libdir: @0@'.format(libdir),
792 'libexecdir: @0@'.format(libexecdir),
793 'mandir: @0@'.format(mandir),
794 'datadir: @0@'.format(datadir),
795 'sysconfdir: @0@'.format(sysconfdir),
796 'localstatedir: @0@'.format(localstatedir),
797 'modlibexecdir: @0@'.format(modlibexecdir),
798 'alsadatadir: @0@'.format(alsadatadir),
799 'System Runtime Path: @0@'.format(cdata.get_unquoted('PA_SYSTEM_RUNTIME_PATH')),
800 'System State Path: @0@'.format(cdata.get_unquoted('PA_SYSTEM_STATE_PATH')),
801 'System Config Path: @0@'.format(cdata.get_unquoted('PA_SYSTEM_CONFIG_PATH')),
802 'Bash completions directory: @0@'.format(bashcompletiondir),
803 'Zsh completions directory: @0@'.format(zshcompletiondir),
804 'Compiler: @0@ @1@'.format(cc.get_id(), cc.version()),
805 # 'CFLAGS: @0@'.format(${CFLAGS}),
806 # 'CPPFLAGS: @0@'.format(${CPPFLAGS}),
807 # 'LIBS: @0@'.format(${LIBS}),
809 'Enable memfd shared memory: @0@'.format(cdata.has('HAVE_MEMFD')),
810 'Enable X11: @0@'.format(x11_dep.found()),
811 # 'Enable OSS Output: @0@'.format(${ENABLE_OSS_OUTPUT}),
812 # 'Enable OSS Wrapper: @0@'.format(${ENABLE_OSS_WRAPPER}),
813 # 'Enable EsounD: @0@'.format(${ENABLE_ESOUND}),
814 'Enable Alsa: @0@'.format(alsa_dep.found()),
815 # 'Enable CoreAudio: @0@'.format(${ENABLE_COREAUDIO}),
816 # 'Enable Solaris: @0@'.format(${ENABLE_SOLARIS}),
817 # 'Enable WaveOut: @0@'.format(${ENABLE_WAVEOUT}),
818 'Enable GLib 2: @0@'.format(glib_dep.found()),
819 # 'Enable GConf: @0@'.format(${ENABLE_GCONF}),
820 'Enable GSettings: @0@'.format(gio_dep.found()),
821 'Enable Gtk+ 3: @0@'.format(gtk_dep.found()),
822 'Enable Avahi: @0@'.format(avahi_dep.found()),
823 'Enable Jack: @0@'.format(jack_dep.found()),
824 'Enable Async DNS: @0@'.format(asyncns_dep.found()),
825 'Enable LIRC: @0@'.format(lirc_dep.found()),
826 'Enable D-Bus: @0@'.format(dbus_dep.found()),
827 ' Enable BlueZ 5: @0@'.format(get_option('bluez5')),
828 ' Enable native headsets: @0@'.format(get_option('bluez5-native-headset')),
829 ' Enable ofono headsets: @0@'.format(get_option('bluez5-ofono-headset')),
830 'Enable udev: @0@'.format(udev_dep.found()),
831 ' Enable HAL->udev compat: @0@'.format(get_option('hal-compat')),
832 'Enable systemd: @0@'.format(libsystemd_dep.found()),
833 # 'Enable TCP Wrappers: @0@'.format(${ENABLE_TCPWRAP}),
834 'Enable libsamplerate: @0@'.format(samplerate_dep.found()),
835 'Enable IPv6: @0@'.format(get_option('ipv6')),
836 'Enable OpenSSL (for Airtunes): @0@'.format(openssl_dep.found()),
837 'Enable FFTW: @0@'.format(fftw_dep.found()),
838 'Enable ORC: @0@'.format(have_orcc),
839 'Enable GStreamer: @0@'.format(have_gstreamer),
840 'Enable Adrian echo canceller: @0@'.format(get_option('adrian-aec')),
841 'Enable Speex (resampler, AEC): @0@'.format(speex_dep.found()),
842 'Enable SoXR (resampler): @0@'.format(soxr_dep.found()),
843 'Enable WebRTC echo canceller: @0@'.format(webrtc_dep.found()),
844 'Enable Gcov coverage: @0@'.format(get_option('gcov')),
845 'Enable man pages: @0@'.format(get_option('man')),
846 'Enable unit tests: @0@'.format(get_option('tests')),
848 'Database: @0@'.format(get_option('database')),
849 'Legacy Database Entry Support: @0@'.format(get_option('legacy-database-entry-format')),
850 'module-stream-restore:',
851 ' Clear old devices: @0@'.format(get_option('stream-restore-clear-old-devices')),
852 'Running from build tree: @0@'.format(get_option('running-from-build-tree')),
853 'System User: @0@'.format(cdata.get_unquoted('PA_SYSTEM_USER')),
854 'System Group: @0@'.format(cdata.get_unquoted('PA_SYSTEM_GROUP')),
855 'Access Group: @0@'.format(cdata.get_unquoted('PA_ACCESS_GROUP')),
856 # 'Enable per-user EsounD socket: @0@'.format(${ENABLE_PER_USER_ESOUND_SOCKET}),
857 # 'Force preopen: @0@'.format(${FORCE_PREOPEN}),
858 # 'Preopened modules: @0@'.format(${PREOPEN_MODS}),
861 message('\n '.join(summary))
865 if not speex_dep.found() and not webrtc_dep.found() and not get_option('adrian-aec')
866 error('At least one echo canceller implementation must be available!')
869 if samplerate_dep.found()
870 warning('Support for libsamplerate is DEPRECATED')
873 if host_machine.system() != 'windows'
874 if not dbus_dep.found()
876 'You do not have D-Bus support enabled. It is strongly recommended',
877 'that you enable D-Bus support if your platform supports it.',
878 'Many parts of PulseAudio use D-Bus, from ConsoleKit interaction',
879 'to the Device Reservation Protocol to speak to JACK, Bluetooth',
880 'support and even a native control protocol for communicating and',
881 'controlling the PulseAudio daemon itself.',
883 warning('\n' + '\n'.join(message))
885 if not udev_dep.found()
887 'You do not have udev support enabled. It is strongly recommended',
888 'that you enable udev support if your platform supports it as it is',
889 'the primary method used to detect hardware audio devices (on Linux)',
890 'and is thus a critical part of PulseAudio on that platform.',
892 warning('\n' + '\n'.join(message))
894 if not speex_dep.found()
896 'You do not have speex support enabled. It is strongly recommended',
897 'that you enable speex support if your platform supports it as it is',
898 'the primary method used for audio resampling and is thus a critical',
899 'part of PulseAudio on that platform.',
901 warning('\n' + '\n'.join(message))