153a5a1b3Sopenharmony_ciproject('pulseaudio', 'c', 'cpp',
253a5a1b3Sopenharmony_ci        version : run_command(find_program('git-version-gen'), join_paths(meson.current_source_dir(), '.tarball-version')).stdout().strip(),
353a5a1b3Sopenharmony_ci        meson_version : '>= 0.50.0',
453a5a1b3Sopenharmony_ci        default_options : [ 'c_std=gnu11', 'cpp_std=c++11' ]
553a5a1b3Sopenharmony_ci        )
653a5a1b3Sopenharmony_ci
753a5a1b3Sopenharmony_cimeson.add_dist_script('scripts/save-tarball-version.sh', meson.project_version())
853a5a1b3Sopenharmony_ci
953a5a1b3Sopenharmony_cipa_version_str = meson.project_version()
1053a5a1b3Sopenharmony_ci# For tarballs, the first split will do nothing, but for builds in git, we
1153a5a1b3Sopenharmony_ci# split out suffixes when there are commits since the last tag
1253a5a1b3Sopenharmony_ci# (e.g.: v11.99.1-3-gad14bdb24 -> v11.99.1)
1353a5a1b3Sopenharmony_civersion_split = pa_version_str.split('-')[0].split('.')
1453a5a1b3Sopenharmony_cipa_version_major = version_split[0].split('v')[0]
1553a5a1b3Sopenharmony_cipa_version_minor = version_split[1]
1653a5a1b3Sopenharmony_ciif version_split.length() > 2
1753a5a1b3Sopenharmony_ci  pa_version_micro = version_split[2]
1853a5a1b3Sopenharmony_cielse
1953a5a1b3Sopenharmony_ci  pa_version_micro = '0'
2053a5a1b3Sopenharmony_ciendif
2153a5a1b3Sopenharmony_cipa_version_major_minor = pa_version_major + '.' + pa_version_minor
2253a5a1b3Sopenharmony_ci
2353a5a1b3Sopenharmony_cipa_api_version = 12
2453a5a1b3Sopenharmony_cipa_protocol_version = 35
2553a5a1b3Sopenharmony_ci
2653a5a1b3Sopenharmony_ci# The stable ABI for client applications, for the version info x:y:z
2753a5a1b3Sopenharmony_ci# always will hold x=z
2853a5a1b3Sopenharmony_cilibpulse_version_info = [24, 2, 24]
2953a5a1b3Sopenharmony_ci
3053a5a1b3Sopenharmony_ci# A simplified, synchronous, ABI-stable interface for client
3153a5a1b3Sopenharmony_ci# applications, for the version info x:y:z always will hold x=z
3253a5a1b3Sopenharmony_cilibpulse_simple_version_info = [1, 1, 1]
3353a5a1b3Sopenharmony_ci
3453a5a1b3Sopenharmony_ci# The ABI-stable GLib adapter for client applications, for the version
3553a5a1b3Sopenharmony_ci# info x:y:z always will hold x=z
3653a5a1b3Sopenharmony_cilibpulse_mainloop_glib_version_info = [0, 6, 0]
3753a5a1b3Sopenharmony_ci
3853a5a1b3Sopenharmony_cilibpulse_version = '@0@.@1@.@2@'.format(
3953a5a1b3Sopenharmony_ci  libpulse_version_info[0] - libpulse_version_info[2],
4053a5a1b3Sopenharmony_ci  libpulse_version_info[0],
4153a5a1b3Sopenharmony_ci  libpulse_version_info[1],
4253a5a1b3Sopenharmony_ci)
4353a5a1b3Sopenharmony_ci
4453a5a1b3Sopenharmony_cilibpulse_simple_version = '@0@.@1@.@2@'.format(
4553a5a1b3Sopenharmony_ci  libpulse_simple_version_info[0] - libpulse_simple_version_info[2],
4653a5a1b3Sopenharmony_ci  libpulse_simple_version_info[0],
4753a5a1b3Sopenharmony_ci  libpulse_simple_version_info[1],
4853a5a1b3Sopenharmony_ci)
4953a5a1b3Sopenharmony_ci
5053a5a1b3Sopenharmony_cilibpulse_mainloop_glib_version = '@0@.@1@.@2@'.format(
5153a5a1b3Sopenharmony_ci  libpulse_mainloop_glib_version_info[0] - libpulse_mainloop_glib_version_info[2],
5253a5a1b3Sopenharmony_ci  libpulse_mainloop_glib_version_info[0],
5353a5a1b3Sopenharmony_ci  libpulse_mainloop_glib_version_info[1],
5453a5a1b3Sopenharmony_ci)
5553a5a1b3Sopenharmony_ci
5653a5a1b3Sopenharmony_cii18n = import('i18n')
5753a5a1b3Sopenharmony_ci
5853a5a1b3Sopenharmony_ci# Paths
5953a5a1b3Sopenharmony_ci
6053a5a1b3Sopenharmony_ciprefix = get_option('prefix')
6153a5a1b3Sopenharmony_ciassert(prefix.startswith('/'), 'Prefix is not absolute: "@0@"'.format(prefix))
6253a5a1b3Sopenharmony_ci
6353a5a1b3Sopenharmony_cibindir = join_paths(prefix, get_option('bindir'))
6453a5a1b3Sopenharmony_ciincludedir = join_paths(prefix, get_option('includedir'))
6553a5a1b3Sopenharmony_cilibdir = join_paths(prefix, get_option('libdir'))
6653a5a1b3Sopenharmony_cilibexecdir = join_paths(prefix, get_option('libexecdir'))
6753a5a1b3Sopenharmony_cimandir = join_paths(prefix, get_option('mandir'))
6853a5a1b3Sopenharmony_cidatadir = join_paths(prefix, get_option('datadir'))
6953a5a1b3Sopenharmony_cilocaledir = join_paths(prefix, get_option('localedir'))
7053a5a1b3Sopenharmony_cilocalstatedir = join_paths(prefix, get_option('localstatedir'))
7153a5a1b3Sopenharmony_cisysconfdir = join_paths(prefix, get_option('sysconfdir'))
7253a5a1b3Sopenharmony_ciprivlibdir = join_paths(libdir, 'pulseaudio')
7353a5a1b3Sopenharmony_cipo_dir = join_paths(meson.current_source_dir(), 'po')
7453a5a1b3Sopenharmony_ci
7553a5a1b3Sopenharmony_ciif host_machine.system() == 'windows'
7653a5a1b3Sopenharmony_ci  # Windows only supports loading libraries from the same dir as the executable
7753a5a1b3Sopenharmony_ci  privlibdir = bindir
7853a5a1b3Sopenharmony_ciendif
7953a5a1b3Sopenharmony_ci
8053a5a1b3Sopenharmony_cialsadatadir = get_option('alsadatadir')
8153a5a1b3Sopenharmony_ciif alsadatadir == ''
8253a5a1b3Sopenharmony_ci  alsadatadir = join_paths(datadir, 'pulseaudio', 'alsa-mixer')
8353a5a1b3Sopenharmony_ciendif
8453a5a1b3Sopenharmony_ci
8553a5a1b3Sopenharmony_cipkgconfigdir = join_paths(libdir, 'pkgconfig')
8653a5a1b3Sopenharmony_cipulselibexecdir = join_paths(libexecdir, 'pulse')
8753a5a1b3Sopenharmony_cipulsesysconfdir = join_paths(sysconfdir, 'pulse')
8853a5a1b3Sopenharmony_ci
8953a5a1b3Sopenharmony_cimodlibexecdir = get_option('modlibexecdir')
9053a5a1b3Sopenharmony_ciif modlibexecdir == ''
9153a5a1b3Sopenharmony_ci  modlibexecdir = join_paths(libdir, 'pulseaudio', 'modules')
9253a5a1b3Sopenharmony_ciendif
9353a5a1b3Sopenharmony_ci
9453a5a1b3Sopenharmony_ciif host_machine.system() == 'windows'
9553a5a1b3Sopenharmony_ci  # Windows only supports loading libraries from the same dir as the executable
9653a5a1b3Sopenharmony_ci  modlibexecdir = bindir
9753a5a1b3Sopenharmony_ciendif
9853a5a1b3Sopenharmony_ci
9953a5a1b3Sopenharmony_cipadsplibdir = get_option('padsplibdir')
10053a5a1b3Sopenharmony_ciif padsplibdir == ''
10153a5a1b3Sopenharmony_ci  padsplibdir = privlibdir
10253a5a1b3Sopenharmony_ciendif
10353a5a1b3Sopenharmony_ci
10453a5a1b3Sopenharmony_cipulsedsp_location = get_option('pulsedsp-location')
10553a5a1b3Sopenharmony_ciif pulsedsp_location == ''
10653a5a1b3Sopenharmony_ci  pulsedsp_location = join_paths(prefix, padsplibdir)
10753a5a1b3Sopenharmony_ciendif
10853a5a1b3Sopenharmony_ci
10953a5a1b3Sopenharmony_cisystemduserunitdir = get_option('systemduserunitdir')
11053a5a1b3Sopenharmony_ci# the default value is set below
11153a5a1b3Sopenharmony_ci
11253a5a1b3Sopenharmony_ciudevrulesdir = get_option('udevrulesdir')
11353a5a1b3Sopenharmony_ciif udevrulesdir == ''
11453a5a1b3Sopenharmony_ci  # absolute path, otherwise meson prepends the prefix
11553a5a1b3Sopenharmony_ci  udevrulesdir = '/lib/udev/rules.d'
11653a5a1b3Sopenharmony_ciendif
11753a5a1b3Sopenharmony_ci
11853a5a1b3Sopenharmony_civapidir = join_paths(datadir, 'vala', 'vapi')
11953a5a1b3Sopenharmony_ci
12053a5a1b3Sopenharmony_cibashcompletiondir = get_option('bashcompletiondir')
12153a5a1b3Sopenharmony_ciif bashcompletiondir == ''
12253a5a1b3Sopenharmony_ci  bash_completion_dep = dependency('bash-completion', required : false)
12353a5a1b3Sopenharmony_ci  if bash_completion_dep.found()
12453a5a1b3Sopenharmony_ci    bashcompletiondir = bash_completion_dep.get_pkgconfig_variable('completionsdir')
12553a5a1b3Sopenharmony_ci  else
12653a5a1b3Sopenharmony_ci    bashcompletiondir = join_paths(datadir, 'bash-completion', 'completions')
12753a5a1b3Sopenharmony_ci  endif
12853a5a1b3Sopenharmony_ciendif
12953a5a1b3Sopenharmony_ci
13053a5a1b3Sopenharmony_cizshcompletiondir = get_option('zshcompletiondir')
13153a5a1b3Sopenharmony_ciif zshcompletiondir == ''
13253a5a1b3Sopenharmony_ci  zshcompletiondir = join_paths(datadir, 'zsh', 'site-functions')
13353a5a1b3Sopenharmony_ciendif
13453a5a1b3Sopenharmony_ci
13553a5a1b3Sopenharmony_ci# Configuration data
13653a5a1b3Sopenharmony_ci
13753a5a1b3Sopenharmony_cicc = meson.get_compiler('c')
13853a5a1b3Sopenharmony_ci
13953a5a1b3Sopenharmony_cicdata = configuration_data()
14053a5a1b3Sopenharmony_cicdata.set_quoted('PACKAGE', 'pulseaudio')
14153a5a1b3Sopenharmony_cicdata.set_quoted('PACKAGE_NAME', 'pulseaudio')
14253a5a1b3Sopenharmony_cicdata.set_quoted('PACKAGE_VERSION', pa_version_str)
14353a5a1b3Sopenharmony_cicdata.set('PA_MAJOR', pa_version_major)
14453a5a1b3Sopenharmony_cicdata.set('PA_MINOR', pa_version_minor)
14553a5a1b3Sopenharmony_cicdata.set('PA_API_VERSION', pa_api_version)
14653a5a1b3Sopenharmony_cicdata.set('PA_PROTOCOL_VERSION', pa_protocol_version)
14753a5a1b3Sopenharmony_cicdata.set_quoted('PA_MACHINE_ID', join_paths(sysconfdir, 'machine-id'))
14853a5a1b3Sopenharmony_cicdata.set_quoted('PA_MACHINE_ID_FALLBACK', join_paths(localstatedir, 'lib', 'dbus', 'machine-id'))
14953a5a1b3Sopenharmony_cicdata.set_quoted('PA_SRCDIR', join_paths(meson.current_source_dir(), 'src'))
15053a5a1b3Sopenharmony_cicdata.set_quoted('PA_BUILDDIR', meson.current_build_dir())
15153a5a1b3Sopenharmony_cicdata.set_quoted('PA_SOEXT', '.so')
15253a5a1b3Sopenharmony_cicdata.set_quoted('PA_DEFAULT_CONFIG_DIR', pulsesysconfdir)
15353a5a1b3Sopenharmony_cicdata.set('PA_DEFAULT_CONFIG_DIR_UNQUOTED', pulsesysconfdir)
15453a5a1b3Sopenharmony_cicdata.set_quoted('PA_BINARY', join_paths(bindir, 'pulseaudio'))
15553a5a1b3Sopenharmony_cicdata.set_quoted('PA_SYSTEM_RUNTIME_PATH', join_paths(localstatedir, 'run', 'pulse'))
15653a5a1b3Sopenharmony_cicdata.set_quoted('PA_SYSTEM_CONFIG_PATH', join_paths(localstatedir, 'lib', 'pulse'))
15753a5a1b3Sopenharmony_cicdata.set_quoted('PA_SYSTEM_STATE_PATH', join_paths(localstatedir, 'lib', 'pulse'))
15853a5a1b3Sopenharmony_cicdata.set_quoted('PA_DLSEARCHPATH', modlibexecdir)
15953a5a1b3Sopenharmony_cicdata.set_quoted('PA_SYSTEM_USER', get_option('system_user'))
16053a5a1b3Sopenharmony_cicdata.set_quoted('PA_SYSTEM_GROUP', get_option('system_group'))
16153a5a1b3Sopenharmony_cicdata.set_quoted('PA_ACCESS_GROUP', get_option('access_group'))
16253a5a1b3Sopenharmony_cicdata.set_quoted('PA_CFLAGS', 'Not yet supported on meson')
16353a5a1b3Sopenharmony_cicdata.set_quoted('PA_ALSA_PATHS_DIR', join_paths(alsadatadir, 'paths'))
16453a5a1b3Sopenharmony_cicdata.set_quoted('PA_ALSA_PROFILE_SETS_DIR', join_paths(alsadatadir, 'profile-sets'))
16553a5a1b3Sopenharmony_cicdata.set_quoted('DESKTOPFILEDIR', join_paths(datadir, 'applications'))
16653a5a1b3Sopenharmony_cicdata.set_quoted('PULSE_LOCALEDIR', localedir)
16753a5a1b3Sopenharmony_cicdata.set_quoted('GETTEXT_PACKAGE', 'pulseaudio')
16853a5a1b3Sopenharmony_cicdata.set('ENABLE_NLS', 1)
16953a5a1b3Sopenharmony_cicdata.set('top_srcdir', meson.source_root())
17053a5a1b3Sopenharmony_ci
17153a5a1b3Sopenharmony_ci# Platform specifics
17253a5a1b3Sopenharmony_ci# First some defaults to keep config file generation happy
17353a5a1b3Sopenharmony_cicdata.set('HAVE_COREAUDIO', 0)
17453a5a1b3Sopenharmony_cicdata.set('HAVE_WAVEOUT', 0)
17553a5a1b3Sopenharmony_cicdata.set('OS_IS_FREEBSD', 0)
17653a5a1b3Sopenharmony_ci
17753a5a1b3Sopenharmony_ciplatform_socket_dep = []
17853a5a1b3Sopenharmony_ciplatform_dep = []
17953a5a1b3Sopenharmony_ci
18053a5a1b3Sopenharmony_ciif host_machine.endian() == 'big'
18153a5a1b3Sopenharmony_ci  cdata.set('WORDS_BIGENDIAN', 1)
18253a5a1b3Sopenharmony_ciendif
18353a5a1b3Sopenharmony_ci
18453a5a1b3Sopenharmony_ci# FIXME: This was not tested. Maybe some flags should better be CFLAGS,
18553a5a1b3Sopenharmony_ci# rather than ending up in the config.h file?
18653a5a1b3Sopenharmony_ciif host_machine.system() == 'darwin'
18753a5a1b3Sopenharmony_ci  cdata.set('OS_IS_DARWIN', 1)
18853a5a1b3Sopenharmony_ci  cdata.set('_DARWIN_C_SOURCE', '200112L') # Needed to get NSIG on Mac OS
18953a5a1b3Sopenharmony_cielif host_machine.system() == 'windows'
19053a5a1b3Sopenharmony_ci  cdata.set('OS_IS_WIN32', 1)
19153a5a1b3Sopenharmony_ci  cdata.set('HAVE_WINDOWS_H', 1)
19253a5a1b3Sopenharmony_ci  cdata.set('HAVE_WAVEOUT', 1)
19353a5a1b3Sopenharmony_ci  cdata.set('HAVE_WINSOCK2_H', 1)
19453a5a1b3Sopenharmony_ci  cdata.set('HAVE_WS2TCPIP_H', 1)
19553a5a1b3Sopenharmony_ci  cdata.set('WIN32_LEAN_AND_MEAN', 1) # Needed to avoid including unnecessary headers on Windows
19653a5a1b3Sopenharmony_ci  cdata.set('gid_t', 'int')
19753a5a1b3Sopenharmony_ci  cdata.set('uid_t', 'int')
19853a5a1b3Sopenharmony_ci  ws2_32_dep = meson.get_compiler('c').find_library('ws2_32')
19953a5a1b3Sopenharmony_ci  winsock_dep = meson.get_compiler('c').find_library('wsock32')
20053a5a1b3Sopenharmony_ci  ole32_dep = meson.get_compiler('c').find_library('ole32')
20153a5a1b3Sopenharmony_ci  ssp_dep = meson.get_compiler('c').find_library('ssp')
20253a5a1b3Sopenharmony_ci  pcreposix_dep = meson.get_compiler('c').find_library('pcreposix')
20353a5a1b3Sopenharmony_ci  platform_socket_dep = [ws2_32_dep, winsock_dep]
20453a5a1b3Sopenharmony_ci  platform_dep = [ole32_dep, ssp_dep, pcreposix_dep]
20553a5a1b3Sopenharmony_cielif host_machine.system() == 'freebsd'
20653a5a1b3Sopenharmony_ci  cdata.set('OS_IS_FREEBSD', 1)
20753a5a1b3Sopenharmony_ci#elif host_machine.system() == 'solaris'
20853a5a1b3Sopenharmony_ci#  # Apparently meson has no solaris support?
20953a5a1b3Sopenharmony_ci#  # Needed to get declarations for msg_control and msg_controllen on Solaris
21053a5a1b3Sopenharmony_ci#  cdata.set('_XOPEN_SOURCE', 600)
21153a5a1b3Sopenharmony_ci#  cdata.set('__EXTENSIONS__', 1)
21253a5a1b3Sopenharmony_ciendif
21353a5a1b3Sopenharmony_ci
21453a5a1b3Sopenharmony_ciif cc.has_type('_Bool')
21553a5a1b3Sopenharmony_ci  cdata.set('HAVE_STD_BOOL', 1)
21653a5a1b3Sopenharmony_ciendif
21753a5a1b3Sopenharmony_ci
21853a5a1b3Sopenharmony_ciif host_machine.cpu_family() == 'x86_64' or cc.sizeof('void *') >= 8
21953a5a1b3Sopenharmony_ci  cdata.set('HAVE_FAST_64BIT_OPERATIONS', 1)
22053a5a1b3Sopenharmony_ciendif
22153a5a1b3Sopenharmony_ci
22253a5a1b3Sopenharmony_ci# Headers
22353a5a1b3Sopenharmony_ci
22453a5a1b3Sopenharmony_cicheck_headers = [
22553a5a1b3Sopenharmony_ci  'arpa/inet.h',
22653a5a1b3Sopenharmony_ci  'byteswap.h',
22753a5a1b3Sopenharmony_ci  'dlfcn.h',
22853a5a1b3Sopenharmony_ci  'execinfo.h',
22953a5a1b3Sopenharmony_ci  'grp.h',
23053a5a1b3Sopenharmony_ci  'langinfo.h',
23153a5a1b3Sopenharmony_ci  'linux/sockios.h',
23253a5a1b3Sopenharmony_ci  'locale.h',
23353a5a1b3Sopenharmony_ci  'netdb.h',
23453a5a1b3Sopenharmony_ci  'netinet/in.h',
23553a5a1b3Sopenharmony_ci  'netinet/in_systm.h',
23653a5a1b3Sopenharmony_ci  'netinet/ip.h',
23753a5a1b3Sopenharmony_ci  'netinet/tcp.h',
23853a5a1b3Sopenharmony_ci  'pcreposix.h',
23953a5a1b3Sopenharmony_ci  'poll.h',
24053a5a1b3Sopenharmony_ci  'pwd.h',
24153a5a1b3Sopenharmony_ci  'regex.h',
24253a5a1b3Sopenharmony_ci  'sched.h',
24353a5a1b3Sopenharmony_ci  'stdint.h',
24453a5a1b3Sopenharmony_ci  'sys/atomic.h',
24553a5a1b3Sopenharmony_ci  'sys/capability.h',
24653a5a1b3Sopenharmony_ci  'sys/conf.h',
24753a5a1b3Sopenharmony_ci  'sys/dl.h',
24853a5a1b3Sopenharmony_ci  'sys/eventfd.h',
24953a5a1b3Sopenharmony_ci  'sys/filio.h',
25053a5a1b3Sopenharmony_ci  'sys/ioctl.h',
25153a5a1b3Sopenharmony_ci  'sys/mman.h',
25253a5a1b3Sopenharmony_ci  'sys/prctl.h',
25353a5a1b3Sopenharmony_ci  'sys/resource.h',
25453a5a1b3Sopenharmony_ci  'sys/select.h',
25553a5a1b3Sopenharmony_ci  'sys/socket.h',
25653a5a1b3Sopenharmony_ci  'sys/syscall.h',
25753a5a1b3Sopenharmony_ci  'sys/uio.h',
25853a5a1b3Sopenharmony_ci  'sys/un.h',
25953a5a1b3Sopenharmony_ci  'sys/wait.h',
26053a5a1b3Sopenharmony_ci  'syslog.h',
26153a5a1b3Sopenharmony_ci  'xlocale.h',
26253a5a1b3Sopenharmony_ci]
26353a5a1b3Sopenharmony_ci
26453a5a1b3Sopenharmony_ciforeach h : check_headers
26553a5a1b3Sopenharmony_ci  if cc.has_header(h)
26653a5a1b3Sopenharmony_ci    define = 'HAVE_' + h.underscorify().to_upper()
26753a5a1b3Sopenharmony_ci    cdata.set(define, 1)
26853a5a1b3Sopenharmony_ci  endif
26953a5a1b3Sopenharmony_ciendforeach
27053a5a1b3Sopenharmony_ci
27153a5a1b3Sopenharmony_ciif cc.has_header('valgrind/memcheck.h', required: get_option('valgrind'))
27253a5a1b3Sopenharmony_ci  cdata.set('HAVE_VALGRIND_MEMCHECK_H', 1)
27353a5a1b3Sopenharmony_ciendif
27453a5a1b3Sopenharmony_ci
27553a5a1b3Sopenharmony_ci# FIXME: move this to the above set
27653a5a1b3Sopenharmony_ciif host_machine.system() != 'windows'
27753a5a1b3Sopenharmony_ci  if cc.has_header('pthread.h')
27853a5a1b3Sopenharmony_ci    cdata.set('HAVE_PTHREAD', 1)
27953a5a1b3Sopenharmony_ci  endif
28053a5a1b3Sopenharmony_ciendif
28153a5a1b3Sopenharmony_ci
28253a5a1b3Sopenharmony_ciif cc.has_header_symbol('pthread.h', 'PTHREAD_PRIO_INHERIT')
28353a5a1b3Sopenharmony_ci  cdata.set('HAVE_PTHREAD_PRIO_INHERIT', 1)
28453a5a1b3Sopenharmony_ciendif
28553a5a1b3Sopenharmony_ci
28653a5a1b3Sopenharmony_ci# Headers which are usable
28753a5a1b3Sopenharmony_ci
28853a5a1b3Sopenharmony_cicheck_usable_headers = [
28953a5a1b3Sopenharmony_ci  'cpuid.h',
29053a5a1b3Sopenharmony_ci]
29153a5a1b3Sopenharmony_ci
29253a5a1b3Sopenharmony_ciforeach h : check_usable_headers
29353a5a1b3Sopenharmony_ci  if cc.check_header(h)
29453a5a1b3Sopenharmony_ci    define = 'HAVE_' + h.underscorify().to_upper()
29553a5a1b3Sopenharmony_ci    cdata.set(define, 1)
29653a5a1b3Sopenharmony_ci  endif
29753a5a1b3Sopenharmony_ciendforeach
29853a5a1b3Sopenharmony_ci
29953a5a1b3Sopenharmony_ci# Functions
30053a5a1b3Sopenharmony_ci
30153a5a1b3Sopenharmony_cicheck_functions = [
30253a5a1b3Sopenharmony_ci  'accept4',
30353a5a1b3Sopenharmony_ci  'clock_gettime',
30453a5a1b3Sopenharmony_ci  'ctime_r',
30553a5a1b3Sopenharmony_ci  'fchmod',
30653a5a1b3Sopenharmony_ci  'fchown',
30753a5a1b3Sopenharmony_ci  'fork',
30853a5a1b3Sopenharmony_ci  'fstat',
30953a5a1b3Sopenharmony_ci  'getaddrinfo',
31053a5a1b3Sopenharmony_ci  'getgrgid_r',
31153a5a1b3Sopenharmony_ci  'getgrnam_r',
31253a5a1b3Sopenharmony_ci  'getpwnam_r',
31353a5a1b3Sopenharmony_ci  'getpwuid_r',
31453a5a1b3Sopenharmony_ci  'gettimeofday',
31553a5a1b3Sopenharmony_ci  'getuid',
31653a5a1b3Sopenharmony_ci  'lrintf',
31753a5a1b3Sopenharmony_ci  'lstat',
31853a5a1b3Sopenharmony_ci  'memfd_create',
31953a5a1b3Sopenharmony_ci  'mkfifo',
32053a5a1b3Sopenharmony_ci  'mlock',
32153a5a1b3Sopenharmony_ci  'nanosleep',
32253a5a1b3Sopenharmony_ci  'open64',
32353a5a1b3Sopenharmony_ci  'paccept',
32453a5a1b3Sopenharmony_ci  'pipe',
32553a5a1b3Sopenharmony_ci  'pipe2',
32653a5a1b3Sopenharmony_ci  'posix_fadvise',
32753a5a1b3Sopenharmony_ci  'posix_madvise',
32853a5a1b3Sopenharmony_ci  'posix_memalign',
32953a5a1b3Sopenharmony_ci  'ppoll',
33053a5a1b3Sopenharmony_ci  'readlink',
33153a5a1b3Sopenharmony_ci  'setegid',
33253a5a1b3Sopenharmony_ci  'seteuid',
33353a5a1b3Sopenharmony_ci  'setpgid',
33453a5a1b3Sopenharmony_ci  'setregid',
33553a5a1b3Sopenharmony_ci  'setresgid',
33653a5a1b3Sopenharmony_ci  'setresuid',
33753a5a1b3Sopenharmony_ci  'setreuid',
33853a5a1b3Sopenharmony_ci  'setsid',
33953a5a1b3Sopenharmony_ci  'sig2str',
34053a5a1b3Sopenharmony_ci  'sigaction',
34153a5a1b3Sopenharmony_ci  'strerror_r',
34253a5a1b3Sopenharmony_ci  'strtod_l',
34353a5a1b3Sopenharmony_ci  'strtof',
34453a5a1b3Sopenharmony_ci  'symlink',
34553a5a1b3Sopenharmony_ci  'sysconf',
34653a5a1b3Sopenharmony_ci  'uname',
34753a5a1b3Sopenharmony_ci]
34853a5a1b3Sopenharmony_ci
34953a5a1b3Sopenharmony_ciforeach f : check_functions
35053a5a1b3Sopenharmony_ci  if cc.has_function(f)
35153a5a1b3Sopenharmony_ci    define = 'HAVE_' + f.underscorify().to_upper()
35253a5a1b3Sopenharmony_ci
35353a5a1b3Sopenharmony_ci    if f == 'posix_memalign' and host_machine.system() == 'windows'
35453a5a1b3Sopenharmony_ci      message('Win32/mingw32 does not properly define posix_memalign.')
35553a5a1b3Sopenharmony_ci    elif f == 'fork' and host_machine.system() == 'windows'
35653a5a1b3Sopenharmony_ci      # __builtin_fork is defined and compiles properly, but calling __builtin_fork() does not.
35753a5a1b3Sopenharmony_ci      # This causes Meson to think that Windows has a fork() which causes a link error...
35853a5a1b3Sopenharmony_ci      message('Win32/mingw32 does not properly define fork.')
35953a5a1b3Sopenharmony_ci    else
36053a5a1b3Sopenharmony_ci      cdata.set(define, 1)
36153a5a1b3Sopenharmony_ci    endif
36253a5a1b3Sopenharmony_ci  endif
36353a5a1b3Sopenharmony_ciendforeach
36453a5a1b3Sopenharmony_ci
36553a5a1b3Sopenharmony_ciif cc.has_header_symbol('sys/syscall.h', 'SYS_memfd_create') \
36653a5a1b3Sopenharmony_ci  or cc.has_function('memfd_create')
36753a5a1b3Sopenharmony_ci  cdata.set('HAVE_MEMFD', 1)
36853a5a1b3Sopenharmony_ciendif
36953a5a1b3Sopenharmony_ci
37053a5a1b3Sopenharmony_ciif cc.has_function('dgettext')
37153a5a1b3Sopenharmony_ci  if host_machine.system() != 'windows'
37253a5a1b3Sopenharmony_ci    libintl_dep = []
37353a5a1b3Sopenharmony_ci  else
37453a5a1b3Sopenharmony_ci    libintl_dep = cc.find_library('intl')
37553a5a1b3Sopenharmony_ci  endif
37653a5a1b3Sopenharmony_cielse
37753a5a1b3Sopenharmony_ci  libintl_dep = cc.find_library('intl')
37853a5a1b3Sopenharmony_ciendif
37953a5a1b3Sopenharmony_ci
38053a5a1b3Sopenharmony_ci# Symbols
38153a5a1b3Sopenharmony_ci
38253a5a1b3Sopenharmony_ciif cc.has_header_symbol('signal.h', 'SIGXCPU')
38353a5a1b3Sopenharmony_ci  cdata.set('HAVE_SIGXCPU', 1)
38453a5a1b3Sopenharmony_ciendif
38553a5a1b3Sopenharmony_ci
38653a5a1b3Sopenharmony_ciif not cc.has_header_symbol('netinet/in.h', 'INADDR_NONE')
38753a5a1b3Sopenharmony_ci  if not cc.has_header_symbol('winsock2.h', 'INADDR_NONE')
38853a5a1b3Sopenharmony_ci    # Define INADDR_NONE if not found (Solaris)
38953a5a1b3Sopenharmony_ci    cdata.set('INADDR_NONE', '0xffffffff')
39053a5a1b3Sopenharmony_ci  endif
39153a5a1b3Sopenharmony_ciendif
39253a5a1b3Sopenharmony_ci
39353a5a1b3Sopenharmony_cicheck_decls = [
39453a5a1b3Sopenharmony_ci  [ 'environ', 'unistd.h', '#define _GNU_SOURCE' ],
39553a5a1b3Sopenharmony_ci  [ 'SOUND_PCM_READ_RATE', 'sys/soundcard.h', '' ],
39653a5a1b3Sopenharmony_ci  [ 'SOUND_PCM_READ_CHANNELS', 'sys/soundcard.h', '' ],
39753a5a1b3Sopenharmony_ci  [ 'SOUND_PCM_READ_BITS', 'sys/soundcard.h', '' ],
39853a5a1b3Sopenharmony_ci]
39953a5a1b3Sopenharmony_ci
40053a5a1b3Sopenharmony_ciforeach s : check_decls
40153a5a1b3Sopenharmony_ci  if cc.has_header_symbol(s[1], s[0], prefix : s[2])
40253a5a1b3Sopenharmony_ci    define = 'HAVE_DECL_' + s[0].to_upper()
40353a5a1b3Sopenharmony_ci    cdata.set(define, 1)
40453a5a1b3Sopenharmony_ci  endif
40553a5a1b3Sopenharmony_ciendforeach
40653a5a1b3Sopenharmony_ci
40753a5a1b3Sopenharmony_ci# Types
40853a5a1b3Sopenharmony_ci
40953a5a1b3Sopenharmony_ci# FIXME: do we ever care about gid_t not being defined / smaller than an int?
41053a5a1b3Sopenharmony_cicdata.set('GETGROUPS_T', 'gid_t')
41153a5a1b3Sopenharmony_ci
41253a5a1b3Sopenharmony_ci# Include paths
41353a5a1b3Sopenharmony_ci
41453a5a1b3Sopenharmony_ciconfiginc = include_directories('.')
41553a5a1b3Sopenharmony_citopinc = include_directories('src')
41653a5a1b3Sopenharmony_ci
41753a5a1b3Sopenharmony_ci# CFLAGS/LDFLAGS
41853a5a1b3Sopenharmony_ci
41953a5a1b3Sopenharmony_cipa_c_args = ['-DHAVE_CONFIG_H', '-D_GNU_SOURCE']
42053a5a1b3Sopenharmony_ciserver_c_args = ['-D__INCLUDED_FROM_PULSE_AUDIO']
42153a5a1b3Sopenharmony_cicdata.set('MESON_BUILD', 1)
42253a5a1b3Sopenharmony_ci
42353a5a1b3Sopenharmony_ci# On ELF systems we don't want the libraries to be unloaded since we don't clean them up properly,
42453a5a1b3Sopenharmony_ci# so we request the nodelete flag to be enabled.
42553a5a1b3Sopenharmony_ci# On other systems, we don't really know how to do that, but it's welcome if somebody can tell.
42653a5a1b3Sopenharmony_ci# Windows doesn't support this flag.
42753a5a1b3Sopenharmony_ciif host_machine.system() != 'windows'
42853a5a1b3Sopenharmony_ci  nodelete_link_args = ['-Wl,-z,nodelete']
42953a5a1b3Sopenharmony_cielse
43053a5a1b3Sopenharmony_ci  nodelete_link_args = []
43153a5a1b3Sopenharmony_ciendif
43253a5a1b3Sopenharmony_ci
43353a5a1b3Sopenharmony_ci# Code coverage
43453a5a1b3Sopenharmony_ci
43553a5a1b3Sopenharmony_ciif get_option('gcov')
43653a5a1b3Sopenharmony_ci  add_project_arguments('--coverage', language: ['c', 'cpp'])
43753a5a1b3Sopenharmony_ci  add_project_link_arguments('--coverage', language: ['c', 'cpp'])
43853a5a1b3Sopenharmony_ciendif
43953a5a1b3Sopenharmony_ci
44053a5a1b3Sopenharmony_ci# Core Dependencies
44153a5a1b3Sopenharmony_ci
44253a5a1b3Sopenharmony_cilibm_dep = cc.find_library('m', required : true)
44353a5a1b3Sopenharmony_ci
44453a5a1b3Sopenharmony_cithread_dep = dependency('threads')
44553a5a1b3Sopenharmony_ciforeach f : [
44653a5a1b3Sopenharmony_ci  'pthread_getname_np',
44753a5a1b3Sopenharmony_ci  'pthread_setaffinity_np',
44853a5a1b3Sopenharmony_ci  'pthread_setname_np',
44953a5a1b3Sopenharmony_ci]
45053a5a1b3Sopenharmony_ci  if cc.has_function(f, dependencies : thread_dep)
45153a5a1b3Sopenharmony_ci    define = 'HAVE_' + f.underscorify().to_upper()
45253a5a1b3Sopenharmony_ci    cdata.set(define, 1)
45353a5a1b3Sopenharmony_ci  endif
45453a5a1b3Sopenharmony_ciendforeach
45553a5a1b3Sopenharmony_ci
45653a5a1b3Sopenharmony_cicap_dep = cc.find_library('cap', required : false)
45753a5a1b3Sopenharmony_ci
45853a5a1b3Sopenharmony_cishm_dep = cc.find_library('rt', required : false)
45953a5a1b3Sopenharmony_ciif cc.has_function('shm_open', dependencies : shm_dep)
46053a5a1b3Sopenharmony_ci  cdata.set('HAVE_SHM_OPEN', 1)
46153a5a1b3Sopenharmony_ciendif
46253a5a1b3Sopenharmony_ci
46353a5a1b3Sopenharmony_cidl_dep = cc.find_library('dl', required : false)
46453a5a1b3Sopenharmony_ciif cc.has_function('dladdr', dependencies : dl_dep)
46553a5a1b3Sopenharmony_ci  cdata.set('HAVE_DLADDR', 1)
46653a5a1b3Sopenharmony_ciendif
46753a5a1b3Sopenharmony_ci
46853a5a1b3Sopenharmony_cihave_iconv = false
46953a5a1b3Sopenharmony_ciif cc.has_function('iconv_open')
47053a5a1b3Sopenharmony_ci  iconv_dep = dependency('', required : false)
47153a5a1b3Sopenharmony_ci  have_iconv = true
47253a5a1b3Sopenharmony_ci  # tell the libiconv header to pretend to be libc iconv
47353a5a1b3Sopenharmony_ci  cdata.set('LIBICONV_PLUG', 1)
47453a5a1b3Sopenharmony_cielse
47553a5a1b3Sopenharmony_ci  iconv_dep = cc.find_library('iconv', required : false)
47653a5a1b3Sopenharmony_ci  have_iconv = iconv_dep.found()
47753a5a1b3Sopenharmony_ciendif
47853a5a1b3Sopenharmony_ciif have_iconv
47953a5a1b3Sopenharmony_ci  cdata.set('HAVE_ICONV', 1)
48053a5a1b3Sopenharmony_ci  iconvconsttest = '''#include <iconv.h>
48153a5a1b3Sopenharmony_cisize_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
48253a5a1b3Sopenharmony_ci'''
48353a5a1b3Sopenharmony_ci  if cc.compiles(iconvconsttest, dependencies : iconv_dep)
48453a5a1b3Sopenharmony_ci    cdata.set('ICONV_CONST', '')
48553a5a1b3Sopenharmony_ci  else
48653a5a1b3Sopenharmony_ci    cdata.set('ICONV_CONST', 'const')
48753a5a1b3Sopenharmony_ci  endif
48853a5a1b3Sopenharmony_ciendif
48953a5a1b3Sopenharmony_ci
49053a5a1b3Sopenharmony_ci# Used for backtraces on BSD
49153a5a1b3Sopenharmony_ciexecinfo_dep = cc.find_library('execinfo', required : false)
49253a5a1b3Sopenharmony_ci
49353a5a1b3Sopenharmony_ci# Atomic operations
49453a5a1b3Sopenharmony_ci
49553a5a1b3Sopenharmony_ciif get_option('atomic-arm-memory-barrier')
49653a5a1b3Sopenharmony_ci    cdata.set('ATOMIC_ARM_MEMORY_BARRIER_ENABLED', 1)
49753a5a1b3Sopenharmony_ciendif
49853a5a1b3Sopenharmony_ci
49953a5a1b3Sopenharmony_cineed_libatomic_ops = false
50053a5a1b3Sopenharmony_ci
50153a5a1b3Sopenharmony_ciatomictest = '''void func() {
50253a5a1b3Sopenharmony_ci  volatile int atomic = 2;
50353a5a1b3Sopenharmony_ci  __sync_bool_compare_and_swap (&atomic, 2, 3);
50453a5a1b3Sopenharmony_ci}
50553a5a1b3Sopenharmony_ci'''
50653a5a1b3Sopenharmony_ci
50753a5a1b3Sopenharmony_ciif cc.compiles(atomictest)
50853a5a1b3Sopenharmony_ci  cdata.set('HAVE_ATOMIC_BUILTINS', 1)
50953a5a1b3Sopenharmony_ci
51053a5a1b3Sopenharmony_ci  newatomictest = '''void func() {
51153a5a1b3Sopenharmony_ci    int c = 0;
51253a5a1b3Sopenharmony_ci    __atomic_store_n(&c, 4, __ATOMIC_SEQ_CST);
51353a5a1b3Sopenharmony_ci  }
51453a5a1b3Sopenharmony_ci  '''
51553a5a1b3Sopenharmony_ci
51653a5a1b3Sopenharmony_ci  if(cc.compiles(newatomictest))
51753a5a1b3Sopenharmony_ci    cdata.set('HAVE_ATOMIC_BUILTINS_MEMORY_MODEL', 1)
51853a5a1b3Sopenharmony_ci  endif
51953a5a1b3Sopenharmony_ci
52053a5a1b3Sopenharmony_cielif host_machine.cpu_family() == 'arm'
52153a5a1b3Sopenharmony_ci  if host_machine.system() == 'linux' and get_option('atomic-arm-linux-helpers')
52253a5a1b3Sopenharmony_ci    cdata.set('ATOMIC_ARM_LINUX_HELPERS', 1)
52353a5a1b3Sopenharmony_ci  else
52453a5a1b3Sopenharmony_ci    armatomictest = '''int func() {
52553a5a1b3Sopenharmony_ci      volatile int a=0;
52653a5a1b3Sopenharmony_ci      int o=0, n=1, r;
52753a5a1b3Sopenharmony_ci      asm volatile (
52853a5a1b3Sopenharmony_ci	      "ldrex    %0, [%1]\n"
52953a5a1b3Sopenharmony_ci	      "subs  %0, %0, %2\n"
53053a5a1b3Sopenharmony_ci	      "strexeq %0, %3, [%1]\n"
53153a5a1b3Sopenharmony_ci	      : "=&r" (r)
53253a5a1b3Sopenharmony_ci	      : "r" (&a), "Ir" (o), "r" (n)
53353a5a1b3Sopenharmony_ci      : "cc");
53453a5a1b3Sopenharmony_ci      return (a==1 ? 0 : -1);
53553a5a1b3Sopenharmony_ci    }
53653a5a1b3Sopenharmony_ci    '''
53753a5a1b3Sopenharmony_ci
53853a5a1b3Sopenharmony_ci    if cc.compiles(armatomictest)
53953a5a1b3Sopenharmony_ci      cdata.set('ATOMIC_ARM_INLINE_ASM', 1)
54053a5a1b3Sopenharmony_ci    else
54153a5a1b3Sopenharmony_ci      need_libatomic_ops = true
54253a5a1b3Sopenharmony_ci    endif
54353a5a1b3Sopenharmony_ci  endif # arm && !linux
54453a5a1b3Sopenharmony_ci
54553a5a1b3Sopenharmony_cielif not ['freebsd', 'netbsd'].contains(host_machine.system())
54653a5a1b3Sopenharmony_ci  need_libatomic_ops = true
54753a5a1b3Sopenharmony_ciendif # !atomic helpers && !arm
54853a5a1b3Sopenharmony_ci
54953a5a1b3Sopenharmony_ciif need_libatomic_ops
55053a5a1b3Sopenharmony_ci  assert(cc.has_header('atomic_ops.h'), 'Need libatomic_ops')
55153a5a1b3Sopenharmony_ci
55253a5a1b3Sopenharmony_ci  cdata.set('AO_REQUIRE_CAS', 1)
55353a5a1b3Sopenharmony_ci
55453a5a1b3Sopenharmony_ci  if host_machine.system() != 'windows'
55553a5a1b3Sopenharmony_ci    libatomic_ops_dep = cc.find_library('atomic_ops', required : true)
55653a5a1b3Sopenharmony_ci  else
55753a5a1b3Sopenharmony_ci    libatomic_ops_dep = dependency('', required: false)
55853a5a1b3Sopenharmony_ci  endif
55953a5a1b3Sopenharmony_cielse
56053a5a1b3Sopenharmony_ci  libatomic_ops_dep = dependency('', required: false)
56153a5a1b3Sopenharmony_ciendif
56253a5a1b3Sopenharmony_ci
56353a5a1b3Sopenharmony_ci# ARM checks
56453a5a1b3Sopenharmony_ci# ARMV6 instructions we need
56553a5a1b3Sopenharmony_ciif host_machine.cpu_family() == 'arm'
56653a5a1b3Sopenharmony_ci  armv6test = '''int func() {
56753a5a1b3Sopenharmony_ci    volatile int a = -60000, b = 0xaaaabbbb, c = 0xccccdddd;
56853a5a1b3Sopenharmony_ci    asm volatile ("ldr r0, %2 \n"
56953a5a1b3Sopenharmony_ci                  "ldr r2, %3 \n"
57053a5a1b3Sopenharmony_ci                  "ldr r3, %4 \n"
57153a5a1b3Sopenharmony_ci                  "ssat r1, #8, r0 \n"
57253a5a1b3Sopenharmony_ci                  "str r1, %0 \n"
57353a5a1b3Sopenharmony_ci                  "pkhbt r1, r3, r2, LSL #8 \n"
57453a5a1b3Sopenharmony_ci                  "str r1, %1 \n"
57553a5a1b3Sopenharmony_ci                  : "=m" (a), "=m" (b)
57653a5a1b3Sopenharmony_ci                  : "m" (a), "m" (b), "m" (c)
57753a5a1b3Sopenharmony_ci                  : "r0", "r1", "r2", "r3", "cc");
57853a5a1b3Sopenharmony_ci    return (a == -128 && b == 0xaabbdddd) ? 0 : -1;
57953a5a1b3Sopenharmony_ci  }
58053a5a1b3Sopenharmony_ci  '''
58153a5a1b3Sopenharmony_ci
58253a5a1b3Sopenharmony_ci  if cc.compiles(armv6test)
58353a5a1b3Sopenharmony_ci    cdata.set('HAVE_ARMV6', 1)
58453a5a1b3Sopenharmony_ci  endif
58553a5a1b3Sopenharmony_ciendif
58653a5a1b3Sopenharmony_ci# NEON checks are automatically done by the unstable-simd module
58753a5a1b3Sopenharmony_ci
58853a5a1b3Sopenharmony_ci# Dependencies common to client, daemon and modules
58953a5a1b3Sopenharmony_ci
59053a5a1b3Sopenharmony_ciif get_option('ipv6')
59153a5a1b3Sopenharmony_ci  cdata.set('HAVE_IPV6', 1)
59253a5a1b3Sopenharmony_ciendif
59353a5a1b3Sopenharmony_ci
59453a5a1b3Sopenharmony_cidbus_dep = dependency('dbus-1', version : '>= 1.4.12', required : get_option('dbus'))
59553a5a1b3Sopenharmony_ciif dbus_dep.found()
59653a5a1b3Sopenharmony_ci  cdata.set('HAVE_DBUS', 1)
59753a5a1b3Sopenharmony_ciendif
59853a5a1b3Sopenharmony_ci
59953a5a1b3Sopenharmony_ciglib_dep = dependency('glib-2.0', version : '>= 2.28.0', required: get_option('glib'))
60053a5a1b3Sopenharmony_ciif glib_dep.found()
60153a5a1b3Sopenharmony_ci  cdata.set('HAVE_GLIB', 1)
60253a5a1b3Sopenharmony_ci  cdata.set('HAVE_GLIB20', 1) # to match the AM_CONDITIONAL for CMake file generation
60353a5a1b3Sopenharmony_ciendif
60453a5a1b3Sopenharmony_ci
60553a5a1b3Sopenharmony_cisndfile_dep = dependency('sndfile', version : '>= 1.0.20')
60653a5a1b3Sopenharmony_ci
60753a5a1b3Sopenharmony_cilibsystemd_dep = dependency('libsystemd', required : get_option('systemd'))
60853a5a1b3Sopenharmony_ciif libsystemd_dep.found()
60953a5a1b3Sopenharmony_ci  cdata.set('HAVE_SYSTEMD_DAEMON', 1)
61053a5a1b3Sopenharmony_ci  cdata.set('HAVE_SYSTEMD_LOGIN', 1)
61153a5a1b3Sopenharmony_ci  cdata.set('HAVE_SYSTEMD_JOURNAL', 1)
61253a5a1b3Sopenharmony_ciendif
61353a5a1b3Sopenharmony_ci
61453a5a1b3Sopenharmony_cix11_dep = dependency('x11-xcb', required : get_option('x11'))
61553a5a1b3Sopenharmony_ci
61653a5a1b3Sopenharmony_ci# OSS support
61753a5a1b3Sopenharmony_ciif cc.has_header('sys/soundcard.h', required: get_option('oss-output'))
61853a5a1b3Sopenharmony_ci  # OSS output via daemon module-detect
61953a5a1b3Sopenharmony_ci  cdata.set('HAVE_OSS_OUTPUT', 1)
62053a5a1b3Sopenharmony_ci  # OSS wrapper
62153a5a1b3Sopenharmony_ci  cdata.set('HAVE_OSS_WRAPPER', 1)
62253a5a1b3Sopenharmony_ci  cdata.set('PULSEDSP_LOCATION', pulsedsp_location)
62353a5a1b3Sopenharmony_ciendif
62453a5a1b3Sopenharmony_ci
62553a5a1b3Sopenharmony_cifftw_dep = dependency('fftw3f', required : get_option('fftw'))
62653a5a1b3Sopenharmony_ciif fftw_dep.found()
62753a5a1b3Sopenharmony_ci  cdata.set('HAVE_FFTW', 1)
62853a5a1b3Sopenharmony_ciendif
62953a5a1b3Sopenharmony_ci
63053a5a1b3Sopenharmony_ci# Client library dependencies
63153a5a1b3Sopenharmony_ci
63253a5a1b3Sopenharmony_ciif get_option('client')
63353a5a1b3Sopenharmony_ci  asyncns_dep = dependency('libasyncns', version : '>= 0.1', required : get_option('asyncns'))
63453a5a1b3Sopenharmony_ci  if asyncns_dep.found()
63553a5a1b3Sopenharmony_ci    cdata.set('HAVE_LIBASYNCNS', 1)
63653a5a1b3Sopenharmony_ci  endif
63753a5a1b3Sopenharmony_ci
63853a5a1b3Sopenharmony_ci  gtk_dep = dependency('gtk+-3.0', required : get_option('gtk'))
63953a5a1b3Sopenharmony_ci  if gtk_dep.found()
64053a5a1b3Sopenharmony_ci    cdata.set('HAVE_GTK', 1)
64153a5a1b3Sopenharmony_ci  endif
64253a5a1b3Sopenharmony_ciendif
64353a5a1b3Sopenharmony_ci
64453a5a1b3Sopenharmony_ci# Daemon and module dependencies
64553a5a1b3Sopenharmony_ci
64653a5a1b3Sopenharmony_ciif get_option('daemon')
64753a5a1b3Sopenharmony_ci  # FIXME: make sure it's >= 2.2
64853a5a1b3Sopenharmony_ci  ltdl_dep = cc.find_library('ltdl', required : true)
64953a5a1b3Sopenharmony_ci
65053a5a1b3Sopenharmony_ci  # FIXME: can meson support libtool -dlopen/-dlpreopen things?
65153a5a1b3Sopenharmony_ci  #        and do we still want to support this at all?
65253a5a1b3Sopenharmony_ci  cdata.set('DISABLE_LIBTOOL_PRELOAD', 1)
65353a5a1b3Sopenharmony_ci
65453a5a1b3Sopenharmony_ci  if get_option('database') == 'tdb'
65553a5a1b3Sopenharmony_ci    database_dep = dependency('tdb')
65653a5a1b3Sopenharmony_ci  elif get_option('database') == 'gdbm'
65753a5a1b3Sopenharmony_ci    database_dep = cc.find_library('gdbm', required : true)
65853a5a1b3Sopenharmony_ci  else
65953a5a1b3Sopenharmony_ci    database_dep = dependency('', required: false)
66053a5a1b3Sopenharmony_ci  endif
66153a5a1b3Sopenharmony_ci
66253a5a1b3Sopenharmony_ci  if get_option('legacy-database-entry-format')
66353a5a1b3Sopenharmony_ci    cdata.set('ENABLE_LEGACY_DATABASE_ENTRY_FORMAT', 1)
66453a5a1b3Sopenharmony_ci  endif
66553a5a1b3Sopenharmony_ci
66653a5a1b3Sopenharmony_ci  if get_option('stream-restore-clear-old-devices')
66753a5a1b3Sopenharmony_ci    cdata.set('STREAM_RESTORE_CLEAR_OLD_DEVICES', 1)
66853a5a1b3Sopenharmony_ci  endif
66953a5a1b3Sopenharmony_ci
67053a5a1b3Sopenharmony_ci  if get_option('running-from-build-tree')
67153a5a1b3Sopenharmony_ci    cdata.set('HAVE_RUNNING_FROM_BUILD_TREE', 1)
67253a5a1b3Sopenharmony_ci  endif
67353a5a1b3Sopenharmony_ci
67453a5a1b3Sopenharmony_ci  if get_option('enable-smoother-2')
67553a5a1b3Sopenharmony_ci    cdata.set('USE_SMOOTHER_2', 1)
67653a5a1b3Sopenharmony_ci  endif
67753a5a1b3Sopenharmony_ci
67853a5a1b3Sopenharmony_ci  alsa_dep = dependency('alsa', version : '>= 1.0.24', required : get_option('alsa'))
67953a5a1b3Sopenharmony_ci  if alsa_dep.found()
68053a5a1b3Sopenharmony_ci    cdata.set('HAVE_ALSA', 1)
68153a5a1b3Sopenharmony_ci    cdata.set('HAVE_ALSA_UCM', 1)
68253a5a1b3Sopenharmony_ci  endif
68353a5a1b3Sopenharmony_ci
68453a5a1b3Sopenharmony_ci  gio_dep = dependency('gio-2.0', version : '>= 2.26.0')
68553a5a1b3Sopenharmony_ci  if get_option('gsettings').enabled()
68653a5a1b3Sopenharmony_ci    assert(gio_dep.found(), 'GSettings support needs glib I/O library (GIO)')
68753a5a1b3Sopenharmony_ci    cdata.set('HAVE_GSETTINGS', 1)
68853a5a1b3Sopenharmony_ci  else
68953a5a1b3Sopenharmony_ci    cdata.set('HAVE_GSETTINGS', 0)
69053a5a1b3Sopenharmony_ci  endif
69153a5a1b3Sopenharmony_ci
69253a5a1b3Sopenharmony_ci  have_orcc = false
69353a5a1b3Sopenharmony_ci  orcc_args = []
69453a5a1b3Sopenharmony_ci  orc_dep = dependency('orc-0.4', version : '>= 0.4.11', required : get_option('orc'))
69553a5a1b3Sopenharmony_ci  orcc = find_program('orcc', required : get_option('orc'))
69653a5a1b3Sopenharmony_ci  if orc_dep.found() and orcc.found()
69753a5a1b3Sopenharmony_ci    have_orcc = true
69853a5a1b3Sopenharmony_ci    orcc_args = [orcc]
69953a5a1b3Sopenharmony_ci    #orcc_args = [orcc, '--include', 'glib.h']
70053a5a1b3Sopenharmony_ci    cdata.set('HAVE_ORC', 1)
70153a5a1b3Sopenharmony_ci  else
70253a5a1b3Sopenharmony_ci    cdata.set('DISABLE_ORC', 1)
70353a5a1b3Sopenharmony_ci  endif
70453a5a1b3Sopenharmony_ci
70553a5a1b3Sopenharmony_ci  samplerate_dep = dependency('samplerate', version : '>= 0.1.0', required : get_option('samplerate'))
70653a5a1b3Sopenharmony_ci  if samplerate_dep.found()
70753a5a1b3Sopenharmony_ci    cdata.set('HAVE_LIBSAMPLERATE', 1)
70853a5a1b3Sopenharmony_ci  endif
70953a5a1b3Sopenharmony_ci
71053a5a1b3Sopenharmony_ci  speex_dep = dependency('speexdsp', version : '>= 1.2', required : get_option('speex'))
71153a5a1b3Sopenharmony_ci  if speex_dep.found()
71253a5a1b3Sopenharmony_ci    cdata.set('HAVE_SPEEX', 1)
71353a5a1b3Sopenharmony_ci  endif
71453a5a1b3Sopenharmony_ci
71553a5a1b3Sopenharmony_ci  soxr_dep = dependency('soxr', version : '>= 0.1.1', required : get_option('soxr'))
71653a5a1b3Sopenharmony_ci  if soxr_dep.found()
71753a5a1b3Sopenharmony_ci    cdata.set('HAVE_SOXR', 1)
71853a5a1b3Sopenharmony_ci  endif
71953a5a1b3Sopenharmony_ci
72053a5a1b3Sopenharmony_ci  webrtc_dep = dependency('webrtc-audio-processing', version : '>= 0.2', required : get_option('webrtc-aec'))
72153a5a1b3Sopenharmony_ci  if webrtc_dep.found()
72253a5a1b3Sopenharmony_ci    cdata.set('HAVE_WEBRTC', 1)
72353a5a1b3Sopenharmony_ci  endif
72453a5a1b3Sopenharmony_ci
72553a5a1b3Sopenharmony_ci  systemd_dep = dependency('systemd', required : get_option('systemd'))
72653a5a1b3Sopenharmony_ci  if systemd_dep.found() and systemduserunitdir == ''
72753a5a1b3Sopenharmony_ci    systemduserunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir')
72853a5a1b3Sopenharmony_ci  endif
72953a5a1b3Sopenharmony_ci
73053a5a1b3Sopenharmony_ci  libelogind_dep = dependency('libelogind', required : get_option('elogind'))
73153a5a1b3Sopenharmony_ci  if libelogind_dep.found()
73253a5a1b3Sopenharmony_ci    cdata.set('HAVE_SYSTEMD_LOGIN', 1)
73353a5a1b3Sopenharmony_ci  endif
73453a5a1b3Sopenharmony_ci
73553a5a1b3Sopenharmony_ci  tcpwrap_dep = cc.find_library('wrap', required: get_option('tcpwrap'))
73653a5a1b3Sopenharmony_ci  if cc.has_header('tcpd.h') and cc.has_function('hosts_access', dependencies : tcpwrap_dep)
73753a5a1b3Sopenharmony_ci    cdata.set('HAVE_LIBWRAP', 1)
73853a5a1b3Sopenharmony_ci  endif
73953a5a1b3Sopenharmony_ci
74053a5a1b3Sopenharmony_ci  if x11_dep.found()
74153a5a1b3Sopenharmony_ci    xcb_dep  = dependency('xcb',  required : true, version : '>= 1.6')
74253a5a1b3Sopenharmony_ci    ice_dep  = dependency('ice',  required : true)
74353a5a1b3Sopenharmony_ci    sm_dep   = dependency('sm',   required : true)
74453a5a1b3Sopenharmony_ci    xtst_dep = dependency('xtst', required : true)
74553a5a1b3Sopenharmony_ci    cdata.set('HAVE_X11', 1)
74653a5a1b3Sopenharmony_ci    if cc.has_function('XSetIOErrorExitHandler', dependencies: x11_dep)
74753a5a1b3Sopenharmony_ci      cdata.set('HAVE_XSETIOERROREXITHANDLER', 1)
74853a5a1b3Sopenharmony_ci    endif
74953a5a1b3Sopenharmony_ci  endif
75053a5a1b3Sopenharmony_ci
75153a5a1b3Sopenharmony_ci  avahi_dep = dependency('avahi-client', version : '>= 0.6.0', required : get_option('avahi'), disabler : true)
75253a5a1b3Sopenharmony_ci  if avahi_dep.found()
75353a5a1b3Sopenharmony_ci    cdata.set('HAVE_AVAHI', 1)
75453a5a1b3Sopenharmony_ci  else
75553a5a1b3Sopenharmony_ci    cdata.set('HAVE_AVAHI', 0)
75653a5a1b3Sopenharmony_ci  endif
75753a5a1b3Sopenharmony_ci
75853a5a1b3Sopenharmony_ci  sbc_dep = dependency('sbc', version : '>= 1.0', required : false)
75953a5a1b3Sopenharmony_ci
76053a5a1b3Sopenharmony_ci  bluez_dep = dependency('bluez', required : get_option('bluez5'))
76153a5a1b3Sopenharmony_ci
76253a5a1b3Sopenharmony_ci  if bluez_dep.found()
76353a5a1b3Sopenharmony_ci    assert(dbus_dep.found(), 'BlueZ requires D-Bus support')
76453a5a1b3Sopenharmony_ci    assert(sbc_dep.found(), 'BlueZ requires SBC support')
76553a5a1b3Sopenharmony_ci    cdata.set('HAVE_SBC', 1)
76653a5a1b3Sopenharmony_ci    cdata.set('HAVE_BLUEZ', 1)
76753a5a1b3Sopenharmony_ci    cdata.set('HAVE_BLUEZ_5', 1)
76853a5a1b3Sopenharmony_ci    if get_option('bluez5-native-headset')
76953a5a1b3Sopenharmony_ci      cdata.set('HAVE_BLUEZ_5_NATIVE_HEADSET', 1)
77053a5a1b3Sopenharmony_ci    endif
77153a5a1b3Sopenharmony_ci    if get_option('bluez5-ofono-headset')
77253a5a1b3Sopenharmony_ci      cdata.set('HAVE_BLUEZ_5_OFONO_HEADSET', 1)
77353a5a1b3Sopenharmony_ci    endif
77453a5a1b3Sopenharmony_ci  endif
77553a5a1b3Sopenharmony_ci
77653a5a1b3Sopenharmony_ci  jack_dep = dependency('jack', version : '>= 0.117.0', required : get_option('jack'))
77753a5a1b3Sopenharmony_ci  if jack_dep.found()
77853a5a1b3Sopenharmony_ci    cdata.set('HAVE_JACK', 1)
77953a5a1b3Sopenharmony_ci  endif
78053a5a1b3Sopenharmony_ci
78153a5a1b3Sopenharmony_ci  lirc_dep = dependency('lirc', required : get_option('lirc'))
78253a5a1b3Sopenharmony_ci  if lirc_dep.found()
78353a5a1b3Sopenharmony_ci    cdata.set('HAVE_LIRC', 1)
78453a5a1b3Sopenharmony_ci  endif
78553a5a1b3Sopenharmony_ci
78653a5a1b3Sopenharmony_ci  openssl_dep = dependency('openssl', version : '>= 0.9', required : get_option('openssl'))
78753a5a1b3Sopenharmony_ci  if openssl_dep.found()
78853a5a1b3Sopenharmony_ci    cdata.set('HAVE_OPENSSL', 1)
78953a5a1b3Sopenharmony_ci  endif
79053a5a1b3Sopenharmony_ci
79153a5a1b3Sopenharmony_ci  udev_dep = dependency('libudev', version : '>= 143', required : get_option('udev'))
79253a5a1b3Sopenharmony_ci  if udev_dep.found()
79353a5a1b3Sopenharmony_ci    cdata.set('HAVE_UDEV', 1)
79453a5a1b3Sopenharmony_ci  endif
79553a5a1b3Sopenharmony_ci
79653a5a1b3Sopenharmony_ci  if get_option('hal-compat')
79753a5a1b3Sopenharmony_ci    cdata.set('HAVE_HAL_COMPAT', 1)
79853a5a1b3Sopenharmony_ci  endif
79953a5a1b3Sopenharmony_ci
80053a5a1b3Sopenharmony_ci  gst_dep = dependency('gstreamer-1.0', version : '>= 1.14', required : get_option('gstreamer'))
80153a5a1b3Sopenharmony_ci  gstapp_dep = dependency('gstreamer-app-1.0', required : get_option('gstreamer'))
80253a5a1b3Sopenharmony_ci  gstrtp_dep = dependency('gstreamer-rtp-1.0', required : get_option('gstreamer'))
80353a5a1b3Sopenharmony_ci
80453a5a1b3Sopenharmony_ci  have_gstreamer = false
80553a5a1b3Sopenharmony_ci  if gst_dep.found() and gstapp_dep.found() and gstrtp_dep.found()
80653a5a1b3Sopenharmony_ci    assert(gio_dep.found(), 'GStreamer-based RTP needs glib I/O library (GIO)')
80753a5a1b3Sopenharmony_ci    have_gstreamer = true
80853a5a1b3Sopenharmony_ci  endif
80953a5a1b3Sopenharmony_ci
81053a5a1b3Sopenharmony_ci  bluez5_gst_dep = dependency('gstreamer-1.0', version : '>= 1.14', required : get_option('bluez5-gstreamer'))
81153a5a1b3Sopenharmony_ci  bluez5_gstapp_dep = dependency('gstreamer-app-1.0', required : get_option('bluez5-gstreamer'))
81253a5a1b3Sopenharmony_ci  have_bluez5_gstreamer = false
81353a5a1b3Sopenharmony_ci  if bluez5_gst_dep.found() and bluez5_gstapp_dep.found()
81453a5a1b3Sopenharmony_ci    have_bluez5_gstreamer = true
81553a5a1b3Sopenharmony_ci    cdata.set('HAVE_GSTLDAC', 1)
81653a5a1b3Sopenharmony_ci    cdata.set('HAVE_GSTAPTX', 1)
81753a5a1b3Sopenharmony_ci  endif
81853a5a1b3Sopenharmony_ciendif
81953a5a1b3Sopenharmony_ci
82053a5a1b3Sopenharmony_ci# These are required for the CMake file generation
82153a5a1b3Sopenharmony_cicdata.set('PA_LIBDIR', libdir)
82253a5a1b3Sopenharmony_cicdata.set('PA_INCDIR', includedir)
82353a5a1b3Sopenharmony_ci
82453a5a1b3Sopenharmony_ci# Test dependencies
82553a5a1b3Sopenharmony_ci
82653a5a1b3Sopenharmony_cicheck_dep = dependency('check', version : '>= 0.9.10', required : get_option('tests'))
82753a5a1b3Sopenharmony_ci
82853a5a1b3Sopenharmony_ci# Subdirs
82953a5a1b3Sopenharmony_ci
83053a5a1b3Sopenharmony_ciif get_option('doxygen')
83153a5a1b3Sopenharmony_ci  subdir('doxygen')
83253a5a1b3Sopenharmony_ciendif
83353a5a1b3Sopenharmony_ciif get_option('client')
83453a5a1b3Sopenharmony_ci  subdir('po')
83553a5a1b3Sopenharmony_ciendif
83653a5a1b3Sopenharmony_ciif get_option('man')
83753a5a1b3Sopenharmony_ci  subdir('man')
83853a5a1b3Sopenharmony_ciendif
83953a5a1b3Sopenharmony_cisubdir('shell-completion/bash')
84053a5a1b3Sopenharmony_cisubdir('shell-completion/zsh')
84153a5a1b3Sopenharmony_cisubdir('src')
84253a5a1b3Sopenharmony_ciif get_option('client')
84353a5a1b3Sopenharmony_ci subdir('vala')
84453a5a1b3Sopenharmony_ciendif
84553a5a1b3Sopenharmony_ci
84653a5a1b3Sopenharmony_ci# Now generate config.h from everything above
84753a5a1b3Sopenharmony_ciconfigure_file(output : 'config.h', configuration : cdata)
84853a5a1b3Sopenharmony_ci
84953a5a1b3Sopenharmony_ciif get_option('client')
85053a5a1b3Sopenharmony_ci
85153a5a1b3Sopenharmony_ci  # pkg-config files
85253a5a1b3Sopenharmony_ci
85353a5a1b3Sopenharmony_ci  pc_cdata = configuration_data()
85453a5a1b3Sopenharmony_ci
85553a5a1b3Sopenharmony_ci  pc_cdata.set('prefix', prefix)
85653a5a1b3Sopenharmony_ci  pc_cdata.set('exec_prefix', prefix)
85753a5a1b3Sopenharmony_ci  pc_cdata.set('libdir', libdir)
85853a5a1b3Sopenharmony_ci  pc_cdata.set('includedir', includedir)
85953a5a1b3Sopenharmony_ci  pc_cdata.set('modlibexecdir', modlibexecdir)
86053a5a1b3Sopenharmony_ci  pc_cdata.set('PACKAGE_VERSION', pa_version_str)
86153a5a1b3Sopenharmony_ci  pc_cdata.set('PA_MAJORMINOR', pa_version_major_minor)
86253a5a1b3Sopenharmony_ci  # FIXME: the line below is wrong. Currently the meson thread dep lacks documentation,
86353a5a1b3Sopenharmony_ci  # and doesn't allow introspection, ie. none of get_pkgconfig_variable() or
86453a5a1b3Sopenharmony_ci  # get_configtool_variable() work with it, so we have no way to get this flag right,
86553a5a1b3Sopenharmony_ci  # unless we do all the work ourselves. See current work in glib, also meson #553.
86653a5a1b3Sopenharmony_ci  pc_cdata.set('PTHREAD_LIBS', '-pthread')
86753a5a1b3Sopenharmony_ci
86853a5a1b3Sopenharmony_ci  pc_files = [
86953a5a1b3Sopenharmony_ci    'libpulse.pc',
87053a5a1b3Sopenharmony_ci    'libpulse-simple.pc',
87153a5a1b3Sopenharmony_ci  ]
87253a5a1b3Sopenharmony_ci
87353a5a1b3Sopenharmony_ci  if glib_dep.found()
87453a5a1b3Sopenharmony_ci    pc_files += 'libpulse-mainloop-glib.pc'
87553a5a1b3Sopenharmony_ci  endif
87653a5a1b3Sopenharmony_ci
87753a5a1b3Sopenharmony_ci  foreach file : pc_files
87853a5a1b3Sopenharmony_ci    configure_file(
87953a5a1b3Sopenharmony_ci      input : file + '.in',
88053a5a1b3Sopenharmony_ci      output : file,
88153a5a1b3Sopenharmony_ci      configuration : pc_cdata,
88253a5a1b3Sopenharmony_ci      install_dir : pkgconfigdir)
88353a5a1b3Sopenharmony_ci  endforeach
88453a5a1b3Sopenharmony_ci
88553a5a1b3Sopenharmony_ci  # CMake files
88653a5a1b3Sopenharmony_ci
88753a5a1b3Sopenharmony_ci  m4 = find_program('m4', required: true)
88853a5a1b3Sopenharmony_ci
88953a5a1b3Sopenharmony_ci  cmakedir = join_paths(libdir, 'cmake', 'PulseAudio')
89053a5a1b3Sopenharmony_ci
89153a5a1b3Sopenharmony_ci  cmake_template_file = configure_file(
89253a5a1b3Sopenharmony_ci    input : 'PulseAudioConfig.cmake.in',
89353a5a1b3Sopenharmony_ci    output : 'PulseAudioConfig.cmake.tmp',
89453a5a1b3Sopenharmony_ci    configuration: cdata,
89553a5a1b3Sopenharmony_ci  )
89653a5a1b3Sopenharmony_ci
89753a5a1b3Sopenharmony_ci  custom_target('PulseAudioConfig.cmake',
89853a5a1b3Sopenharmony_ci    input : cmake_template_file,
89953a5a1b3Sopenharmony_ci    output : 'PulseAudioConfig.cmake',
90053a5a1b3Sopenharmony_ci    capture : true,
90153a5a1b3Sopenharmony_ci    command : [m4, '@INPUT@'],
90253a5a1b3Sopenharmony_ci    build_by_default : true,
90353a5a1b3Sopenharmony_ci    install : true,
90453a5a1b3Sopenharmony_ci    install_dir : cmakedir,
90553a5a1b3Sopenharmony_ci  )
90653a5a1b3Sopenharmony_ci
90753a5a1b3Sopenharmony_ci  configure_file(
90853a5a1b3Sopenharmony_ci    input : 'PulseAudioConfigVersion.cmake.in',
90953a5a1b3Sopenharmony_ci    output : 'PulseAudioConfigVersion.cmake',
91053a5a1b3Sopenharmony_ci    configuration: cdata,
91153a5a1b3Sopenharmony_ci    install : true,
91253a5a1b3Sopenharmony_ci    install_dir : cmakedir,
91353a5a1b3Sopenharmony_ci  )
91453a5a1b3Sopenharmony_ci
91553a5a1b3Sopenharmony_ciendif # client
91653a5a1b3Sopenharmony_ci
91753a5a1b3Sopenharmony_ci############################################################
91853a5a1b3Sopenharmony_ci
91953a5a1b3Sopenharmony_ci# Final summary
92053a5a1b3Sopenharmony_ci
92153a5a1b3Sopenharmony_cisummary = [
92253a5a1b3Sopenharmony_ci  '',
92353a5a1b3Sopenharmony_ci  '---{ @0@ @1@ }---'.format(meson.project_name(), meson.project_version()),
92453a5a1b3Sopenharmony_ci  '',
92553a5a1b3Sopenharmony_ci  'prefix:                        @0@'.format(prefix),
92653a5a1b3Sopenharmony_ci  'bindir:                        @0@'.format(bindir),
92753a5a1b3Sopenharmony_ci  'libdir:                        @0@'.format(libdir),
92853a5a1b3Sopenharmony_ci  'libexecdir:                    @0@'.format(libexecdir),
92953a5a1b3Sopenharmony_ci  'mandir:                        @0@'.format(mandir),
93053a5a1b3Sopenharmony_ci  'datadir:                       @0@'.format(datadir),
93153a5a1b3Sopenharmony_ci  'sysconfdir:                    @0@'.format(sysconfdir),
93253a5a1b3Sopenharmony_ci  'localstatedir:                 @0@'.format(localstatedir),
93353a5a1b3Sopenharmony_ci  'modlibexecdir:                 @0@'.format(modlibexecdir),
93453a5a1b3Sopenharmony_ci  'alsadatadir:                   @0@'.format(alsadatadir),
93553a5a1b3Sopenharmony_ci  'System Runtime Path:           @0@'.format(cdata.get_unquoted('PA_SYSTEM_RUNTIME_PATH')),
93653a5a1b3Sopenharmony_ci  'System State Path:             @0@'.format(cdata.get_unquoted('PA_SYSTEM_STATE_PATH')),
93753a5a1b3Sopenharmony_ci  'System Config Path:            @0@'.format(cdata.get_unquoted('PA_SYSTEM_CONFIG_PATH')),
93853a5a1b3Sopenharmony_ci  'Bash completions directory:    @0@'.format(bashcompletiondir),
93953a5a1b3Sopenharmony_ci  'Zsh completions directory:     @0@'.format(zshcompletiondir),
94053a5a1b3Sopenharmony_ci  'Compiler:                      @0@ @1@'.format(cc.get_id(), cc.version()),
94153a5a1b3Sopenharmony_ci#  'CFLAGS:                        @0@'.format(${CFLAGS}),
94253a5a1b3Sopenharmony_ci#  'CPPFLAGS:                      @0@'.format(${CPPFLAGS}),
94353a5a1b3Sopenharmony_ci#  'LIBS:                          @0@'.format(${LIBS}),
94453a5a1b3Sopenharmony_ci  '',
94553a5a1b3Sopenharmony_ci  'Enable pulseaudio daemon:      @0@'.format(get_option('daemon')),
94653a5a1b3Sopenharmony_ci  'Enable pulseaudio client:      @0@'.format(get_option('client')),
94753a5a1b3Sopenharmony_ci  '',
94853a5a1b3Sopenharmony_ci  'Enable memfd shared memory:    @0@'.format(cdata.has('HAVE_MEMFD')),
94953a5a1b3Sopenharmony_ci  'Enable X11:                    @0@'.format(x11_dep.found()),
95053a5a1b3Sopenharmony_ci  'Enable D-Bus:                  @0@'.format(dbus_dep.found()),
95153a5a1b3Sopenharmony_ci  'Enable GLib 2:                 @0@'.format(glib_dep.found()),
95253a5a1b3Sopenharmony_ci  'Enable systemd integration:    @0@'.format(libsystemd_dep.found()),
95353a5a1b3Sopenharmony_ci  'Enable FFTW:                   @0@'.format(fftw_dep.found()),
95453a5a1b3Sopenharmony_ci  'Enable IPv6:                   @0@'.format(get_option('ipv6')),
95553a5a1b3Sopenharmony_ci  'Enable Gcov coverage:          @0@'.format(get_option('gcov')),
95653a5a1b3Sopenharmony_ci  'Enable Valgrind:               @0@'.format(cdata.has('HAVE_VALGRIND_MEMCHECK_H')),
95753a5a1b3Sopenharmony_ci  'Enable man pages:              @0@'.format(get_option('man')),
95853a5a1b3Sopenharmony_ci  'Enable unit tests:             @0@'.format(get_option('tests')),
95953a5a1b3Sopenharmony_ci]
96053a5a1b3Sopenharmony_ci
96153a5a1b3Sopenharmony_ciif get_option('client')
96253a5a1b3Sopenharmony_cisummary += [
96353a5a1b3Sopenharmony_ci  '',
96453a5a1b3Sopenharmony_ci  '--- Pulseaudio client features ---',
96553a5a1b3Sopenharmony_ci  '',
96653a5a1b3Sopenharmony_ci  'Enable Gtk+ 3:                 @0@'.format(gtk_dep.found()),
96753a5a1b3Sopenharmony_ci  'Enable Async DNS:              @0@'.format(asyncns_dep.found()),
96853a5a1b3Sopenharmony_ci  'Enable OSS Wrapper:            @0@'.format(cdata.has('HAVE_OSS_WRAPPER')),
96953a5a1b3Sopenharmony_ci]
97053a5a1b3Sopenharmony_ciendif
97153a5a1b3Sopenharmony_ci
97253a5a1b3Sopenharmony_ciif get_option('daemon')
97353a5a1b3Sopenharmony_cisummary += [
97453a5a1b3Sopenharmony_ci  '',
97553a5a1b3Sopenharmony_ci  '--- Pulseaudio daemon features ---',
97653a5a1b3Sopenharmony_ci  '',
97753a5a1b3Sopenharmony_ci  'Safe X11 I/O errors:           @0@'.format(cdata.has('HAVE_XSETIOERROREXITHANDLER')),
97853a5a1b3Sopenharmony_ci  'Enable Avahi:                  @0@'.format(avahi_dep.found()),
97953a5a1b3Sopenharmony_ci  'Enable OSS Output:             @0@'.format(cdata.has('HAVE_OSS_OUTPUT')),
98053a5a1b3Sopenharmony_ci#  'Enable EsounD:                 @0@'.format(${ENABLE_ESOUND}),
98153a5a1b3Sopenharmony_ci  'Enable Alsa:                   @0@'.format(alsa_dep.found()),
98253a5a1b3Sopenharmony_ci  'Enable Jack:                   @0@'.format(jack_dep.found()),
98353a5a1b3Sopenharmony_ci  'Enable LIRC:                   @0@'.format(lirc_dep.found()),
98453a5a1b3Sopenharmony_ci#  'Enable CoreAudio:              @0@'.format(${ENABLE_COREAUDIO}),
98553a5a1b3Sopenharmony_ci#  'Enable Solaris:                @0@'.format(${ENABLE_SOLARIS}),
98653a5a1b3Sopenharmony_ci#  'Enable WaveOut:                @0@'.format(${ENABLE_WAVEOUT}),
98753a5a1b3Sopenharmony_ci  'Enable GSettings:              @0@'.format(gio_dep.found()),
98853a5a1b3Sopenharmony_ci  'Enable BlueZ 5:              @0@'.format(cdata.has('HAVE_BLUEZ_5')),
98953a5a1b3Sopenharmony_ci  '  Enable native headsets:    @0@'.format(cdata.has('HAVE_BLUEZ_5_NATIVE_HEADSET')),
99053a5a1b3Sopenharmony_ci  '  Enable  ofono headsets:    @0@'.format(cdata.has('HAVE_BLUEZ_5_OFONO_HEADSET')),
99153a5a1b3Sopenharmony_ci  '  Enable GStreamer based codecs: @0@'.format(have_bluez5_gstreamer),
99253a5a1b3Sopenharmony_ci  'Enable GStreamer:              @0@'.format(have_gstreamer),
99353a5a1b3Sopenharmony_ci  'Enable libsamplerate:          @0@'.format(samplerate_dep.found()),
99453a5a1b3Sopenharmony_ci  'Enable ORC:                    @0@'.format(have_orcc),
99553a5a1b3Sopenharmony_ci  'Enable Adrian echo canceller:  @0@'.format(get_option('adrian-aec')),
99653a5a1b3Sopenharmony_ci  'Enable Speex (resampler, AEC): @0@'.format(speex_dep.found()),
99753a5a1b3Sopenharmony_ci  'Enable SoXR (resampler):       @0@'.format(soxr_dep.found()),
99853a5a1b3Sopenharmony_ci  'Enable WebRTC echo canceller:  @0@'.format(webrtc_dep.found()),
99953a5a1b3Sopenharmony_ci  '',
100053a5a1b3Sopenharmony_ci  'Enable udev:                   @0@'.format(udev_dep.found()),
100153a5a1b3Sopenharmony_ci  '  Enable HAL->udev compat:     @0@'.format(get_option('hal-compat')),
100253a5a1b3Sopenharmony_ci  'Enable systemd units:          @0@'.format(systemd_dep.found()),
100353a5a1b3Sopenharmony_ci  'Enable elogind:                @0@'.format(libelogind_dep.found()),
100453a5a1b3Sopenharmony_ci  'Enable TCP Wrappers:           @0@'.format(tcpwrap_dep.found()),
100553a5a1b3Sopenharmony_ci  'Enable OpenSSL (for Airtunes): @0@'.format(openssl_dep.found()),
100653a5a1b3Sopenharmony_ci  'Database:                      @0@'.format(get_option('database')),
100753a5a1b3Sopenharmony_ci  'Legacy Database Entry Support: @0@'.format(get_option('legacy-database-entry-format')),
100853a5a1b3Sopenharmony_ci  'module-stream-restore:',
100953a5a1b3Sopenharmony_ci  '  Clear old devices:           @0@'.format(get_option('stream-restore-clear-old-devices')),
101053a5a1b3Sopenharmony_ci  'Running from build tree:       @0@'.format(get_option('running-from-build-tree')),
101153a5a1b3Sopenharmony_ci  'System User:                   @0@'.format(cdata.get_unquoted('PA_SYSTEM_USER')),
101253a5a1b3Sopenharmony_ci  'System Group:                  @0@'.format(cdata.get_unquoted('PA_SYSTEM_GROUP')),
101353a5a1b3Sopenharmony_ci  'Access Group:                  @0@'.format(cdata.get_unquoted('PA_ACCESS_GROUP')),
101453a5a1b3Sopenharmony_ci#  'Enable per-user EsounD socket: @0@'.format(${ENABLE_PER_USER_ESOUND_SOCKET}),
101553a5a1b3Sopenharmony_ci#  'Force preopen:                 @0@'.format(${FORCE_PREOPEN}),
101653a5a1b3Sopenharmony_ci#  'Preopened modules:             @0@'.format(${PREOPEN_MODS}),
101753a5a1b3Sopenharmony_ci]
101853a5a1b3Sopenharmony_ciendif
101953a5a1b3Sopenharmony_ci
102053a5a1b3Sopenharmony_cimessage('\n    '.join(summary))
102153a5a1b3Sopenharmony_ci
102253a5a1b3Sopenharmony_ci# Sanity checks
102353a5a1b3Sopenharmony_ci
102453a5a1b3Sopenharmony_ciif get_option('daemon') and not speex_dep.found() and not webrtc_dep.found() and not get_option('adrian-aec')
102553a5a1b3Sopenharmony_ci  error('At least one echo canceller implementation must be available!')
102653a5a1b3Sopenharmony_ciendif
102753a5a1b3Sopenharmony_ci
102853a5a1b3Sopenharmony_ciif get_option('daemon') and samplerate_dep.found()
102953a5a1b3Sopenharmony_ci  warning('Support for libsamplerate is DEPRECATED')
103053a5a1b3Sopenharmony_ciendif
103153a5a1b3Sopenharmony_ci
103253a5a1b3Sopenharmony_ciif host_machine.system() != 'windows' and not dbus_dep.found()
103353a5a1b3Sopenharmony_ci  message = [
103453a5a1b3Sopenharmony_ci    'You do not have D-Bus support enabled. It is strongly recommended',
103553a5a1b3Sopenharmony_ci    'that you enable D-Bus support if your platform supports it.',
103653a5a1b3Sopenharmony_ci    'Many parts of PulseAudio use D-Bus, from ConsoleKit interaction',
103753a5a1b3Sopenharmony_ci    'to the Device Reservation Protocol to speak to JACK, Bluetooth',
103853a5a1b3Sopenharmony_ci    'support and even a native control protocol for communicating and',
103953a5a1b3Sopenharmony_ci    'controlling the PulseAudio daemon itself.',
104053a5a1b3Sopenharmony_ci  ]
104153a5a1b3Sopenharmony_ci  warning('\n' + '\n'.join(message))
104253a5a1b3Sopenharmony_ciendif
104353a5a1b3Sopenharmony_ci
104453a5a1b3Sopenharmony_ciif get_option('daemon') and host_machine.system() == 'linux' and not udev_dep.found()
104553a5a1b3Sopenharmony_ci  message = [
104653a5a1b3Sopenharmony_ci    'You do not have udev support enabled. It is strongly recommended',
104753a5a1b3Sopenharmony_ci    'that you enable udev support if your platform supports it as it is',
104853a5a1b3Sopenharmony_ci    'the primary method used to detect hardware audio devices (on Linux)',
104953a5a1b3Sopenharmony_ci    'and is thus a critical part of PulseAudio on that platform.',
105053a5a1b3Sopenharmony_ci  ]
105153a5a1b3Sopenharmony_ci  warning('\n' + '\n'.join(message))
105253a5a1b3Sopenharmony_ciendif
105353a5a1b3Sopenharmony_ci
105453a5a1b3Sopenharmony_ciif get_option('daemon') and host_machine.system() != 'windows' and not speex_dep.found()
105553a5a1b3Sopenharmony_ci  message = [
105653a5a1b3Sopenharmony_ci    'You do not have speex support enabled. It is strongly recommended',
105753a5a1b3Sopenharmony_ci    'that you enable speex support if your platform supports it as it is',
105853a5a1b3Sopenharmony_ci    'the primary method used for audio resampling and is thus a critical',
105953a5a1b3Sopenharmony_ci    'part of PulseAudio on that platform.',
106053a5a1b3Sopenharmony_ci  ]
106153a5a1b3Sopenharmony_ci  warning('\n' + '\n'.join(message))
106253a5a1b3Sopenharmony_ciendif
1063