[pulseaudio-discuss] [PATCH] build-sys: First pass at a meson-ified build system

Arun Raghavan arun at arunraghavan.net
Sun Dec 10 07:16:30 UTC 2017


On Sat, 9 Dec 2017, at 10:58 PM, Felipe Sateler wrote:
> On Sat, Dec 9, 2017 at 2:59 AM, Arun Raghavan <arun at arunraghavan.net>
> wrote:
> > (Note: this patch depends on the symdef header removal work from a few
> > days ago)
> >
> > This is a working implementation of a build with meson. The server,
> > utils, and most modules build with this, and it is possible to run from
> > a build tree and play/capture audio on ALSA devices.
> >
> > There are a number of FIXMEs, of course, and a number of features that
> > need to be enabled (modules, dependencies, installation, etc.), but this
> > should provide everything we need to get there relatively quickly.
> >
> 
> This is nice. Build times should be greatly reduced. As a datapoint,
> you can check how the systemd debian package takes about hallf the
> time since version 234, when meson was introduced.
> 
> https://buildd.debian.org/status/logs.php?pkg=systemd&arch=amd64&suite=sid
> 
> > To use this, install meson (distro package, or mesonbuild.com) and run:
> >
> >   $ cd <pulseaudio src dir>
> >   $ meson <builddir>
> >   $ ninja -C <builddir>
> > ---
> >  meson.build                       | 218 ++++++++++++++++++++++++++++++++++++++
> >  meson_options.txt                 |  13 +++
> >  src/daemon/daemon-conf.c          |   4 +
> >  src/daemon/main.c                 |   9 ++
> >  src/daemon/meson.build            |  34 ++++++
> >  src/meson.build                   | 194 +++++++++++++++++++++++++++++++++
> >  src/modules/alsa/meson.build      |  31 ++++++
> >  src/modules/meson.build           | 127 ++++++++++++++++++++++
> >  src/modules/module-role-cork.c    |   2 +-
> >  src/modules/module-role-ducking.c |   2 +-
> >  src/pulse/meson.build             |  73 +++++++++++++
> >  src/pulsecore/meson.build         | 170 +++++++++++++++++++++++++++++
> >  src/pulsecore/module.c            |   4 +
> >  src/utils/meson.build             |  67 ++++++++++++
> >  14 files changed, 946 insertions(+), 2 deletions(-)
> >  create mode 100644 meson.build
> >  create mode 100644 meson_options.txt
> >  create mode 100644 src/daemon/meson.build
> >  create mode 100644 src/meson.build
> >  create mode 100644 src/modules/alsa/meson.build
> >  create mode 100644 src/modules/meson.build
> >  create mode 100644 src/pulse/meson.build
> >  create mode 100644 src/pulsecore/meson.build
> >  create mode 100644 src/utils/meson.build
> >
> > diff --git a/meson.build b/meson.build
> > new file mode 100644
> > index 000000000..1b00dc1e0
> > --- /dev/null
> > +++ b/meson.build
> > @@ -0,0 +1,218 @@
> > +project('pulseaudio', 'c', 'cpp',
> > +        version : '10.99.1',
> > +        meson_version : '>= 0.31.0',
> > +        default_options : [ 'c_std=gnu11', 'cpp_std=c++11' ]
> > +        )
> > +
> > +pa_version = meson.project_version()
> > +version_split = pa_version.split('.')
> > +pa_version_major = version_split[0]
> > +pa_version_minor = version_split[1]
> > +pa_version_micro = version_split[2]
> > +pa_version_major_minor = pa_version_major + '.' + pa_version_minor
> > +
> > +pa_api_version = 12
> > +pa_protocol_version = 31
> > +
> > +apiversion = '1.0'
> > +soversion = 0
> > +# maintaining compatibility with the previous libtool versioning
> > +# current = minor * 100 + micro
> > +libversion = '@0 at .@1 at .0'.format(soversion, pa_version_minor.to_int() * 100 + pa_version_micro.to_int())
> 
> This gives 0.9901.0 instead of 0.20.2

Yeah, we need to fix it up to do the right thing. Let's fix this in a
subsequent patch.

My intention is to not have this be complete, but to have it land in
some usable state and incrementally make it better. I expect we'll be
supporting autofoo + meson for a while until there is parity between the
two (across platforms).
 
> > +
> > +prefix = get_option('prefix')
> > +datadir = join_paths(prefix, get_option('datadir'))
> > +localstatedir = join_paths(prefix, get_option('localstatedir'))
> > +sysconfdir = join_paths(prefix, get_option('sysconfdir'))
> > +
> > +cc = meson.get_compiler('c')
> > +
> > +cdata = configuration_data()
> > +cdata.set_quoted('PACKAGE', 'pulseaudio')
> > +cdata.set_quoted('PACKAGE_NAME', 'pulseaudio')
> > +cdata.set_quoted('PACKAGE_VERSION', pa_version)
> > +cdata.set_quoted('CANONICAL_HOST', host_machine.cpu())
> > +cdata.set_quoted('PA_MACHINE_ID', join_paths(sysconfdir, 'machine-id'))
> > +cdata.set_quoted('PA_MACHINE_ID_FALLBACK', join_paths(localstatedir, 'lib', 'dbus', 'machine-id'))
> > +cdata.set_quoted('PA_SRCDIR', join_paths(meson.current_source_dir(), 'src'))
> > +cdata.set_quoted('PA_BUILDDIR', meson.current_build_dir())
> > +cdata.set_quoted('PA_SOEXT', '.so')
> > +cdata.set_quoted('PA_DEFAULT_CONFIG_DIR', join_paths(sysconfdir, 'pulse'))
> > +cdata.set_quoted('PA_BINARY', join_paths(prefix, get_option('bindir'), 'pulseaudio'))
> > +cdata.set_quoted('PA_SYSTEM_RUNTIME_PATH', join_paths(localstatedir, 'run', 'pulse'))
> > +cdata.set_quoted('PA_SYSTEM_CONFIG_PATH', join_paths(localstatedir, 'lib', 'pulse'))
> > +cdata.set_quoted('PA_SYSTEM_STATE_PATH', join_paths(localstatedir, 'lib', 'pulse'))
> > +cdata.set_quoted('PA_DLSEARCHPATH', join_paths(prefix, get_option('libdir'), 'pulse-' + pa_version_major_minor, 'modules'))
> > +cdata.set_quoted('PA_SYSTEM_USER', get_option('system_user'))
> > +cdata.set_quoted('PA_SYSTEM_GROUP', get_option('system_group'))
> > +cdata.set_quoted('PA_ACCESS_GROUP', get_option('access_group'))
> > +cdata.set_quoted('PA_CFLAGS', 'Not yet supported on meson')
> > +cdata.set_quoted('PA_ALSA_PATHS_DIR', join_paths(datadir, 'pulseaudio', 'alsa-mixer', 'paths'))
> > +cdata.set_quoted('PA_ALSA_PROFILE_SETS_DIR', join_paths(datadir, 'pulseaudio', 'alsa-mixer', 'profile-sets'))
> > +cdata.set_quoted('DESKTOPFILEDIR', join_paths(datadir, 'applications'))
> > +
> > +# Headers
> > +
> > +check_headers = [
> > +  'arpa/inet.h',
> > +  'cpuid.h',
> > +  'grp.h',
> > +  'langinfo.h',
> > +  'locale.h',
> > +  'netdb.h',
> > +  'netinet/in.h',
> > +  'netinet/in_systm.h',
> > +  'netinet/ip.h',
> > +  'netinet/tcp.h',
> > +  'pcreposix.h',
> > +  'poll.h',
> > +  'pwd.h',
> > +  'regex.h',
> > +  'sched.h',
> > +  'sys/capability.h',
> > +  'sys/ioctl.h',
> > +  'sys/mman.h',
> > +  'sys/prctl.h',
> > +  'sys/resource.h',
> > +  'sys/select.h',
> > +  'sys/socket.h',
> > +  'sys/un.h',
> 
> I notice at least the following are missing:
> 
> sys/wait.h
> execinfo.h
> sys/syscall.h
> byteswap.h
> sys/eventfd.h
> linux/input.h
> sys/conf.h
> 
> Some of these cause real problems. For example, waitpid is used even
> though HAVE_SYS_WAIT_H is not defined.

Right, I see you've got some patches to do this, so I'll pull that in
once we have this base patch in.

> > +  'valgrind/memcheck.h',
> > +  'xlocale.h',
> > +]
> > +
> > +foreach h : check_headers
> > +  if cc.has_header(h)
> > +    define = 'HAVE_' + h.underscorify().to_upper()
> > +    cdata.set(define, 1)
> > +  endif
> > +endforeach
> > +
> > +# FIXME: move this to the above set
> > +if cc.has_header('pthread.h')
> > +  cdata.set('HAVE_PTHREAD', 1)
> > +endif
> > +
> > +# Functions
> > +
> > +check_functions = [
> > +  'accept4',
> > +  'clock_gettime',
> > +  'fchmod',
> > +  'fchown',
> > +  'fork',
> > +  'fstat',
> > +  'getaddrinfo',
> > +  'gettimeofday',
> > +  'getuid',
> > +  'lstat',
> > +  'mlock',
> > +  'nanosleep',
> > +  'paccept',
> > +  'pipe',
> > +  'pipe2',
> > +  'posix_madvise',
> > +  'readlink',
> > +  'setegid',
> > +  'seteuid',
> > +  'setregid',
> > +  'setreuid',
> > +  'setresgid',
> > +  'setresuid',
> > +  'setsid',
> > +  'sig2str',
> > +  'sigaction',
> > +  'strtod_l',
> > +  'symlink',
> > +  'sysconf',
> > +  'uname',
> > +]
> > +
> > +foreach f : check_functions
> > +  if cc.has_function(f)
> > +    define = 'HAVE_' + f.underscorify().to_upper()
> > +    cdata.set(define, 1)
> > +  endif
> > +endforeach
> > +
> > +shm_dep = cc.find_library('rt', required : false)
> > +if shm_dep.found()
> > +  cdata.set('HAVE_SHM_OPEN', 1)
> > +endif
> > +
> > +if cc.has_function('SYS_memfd_create', prefix : '#include <sys/syscall.h>')
> > +  cdata.set('HAVE_MEMFD', 1)
> > +endif
> 
> configure has the option to enable or disable this. This meson script
> autodetects only. I think the ability to explicitly disable/enable
> (and error out if dependencies are not found) is nice to keep when
> moving to meson. That is, this should become something like:
> 
> want_memfd = get_option('memfd')
> if want_memfd != 'false'
>   has_memfd = cc.has_function('SYS_memfd_create', prefix : '#include
> <sys/syscall.h>')
>   if has_memfd
>     cdata.set('HAVE_MEMFD', 1)
>   elif want_memfd == 'true'
>     error('Memfd was requested but it was not found')
>   endif
> endif
> 
> plus a meson_options.txt:
> 
> option('memfd', type: 'combo', choices: ['auto', 'true', 'false'],
>   description: 'Enable Linux memfd shared memory')
> 
> This applies to a lot of the checks.

This may be a hard, but in the long run, I actually would like to remove
automagic dependencies. This makes builds more consistent, and removes a
lot of (imo unnecessary) if/else-ery.

So we would have want_memfd on by default (maybe conditional on OS ==
Linux), and then you could disable it at configure time if you don't
want it.

> > +
> > +# Types
> > +
> > +# FIXME: do we ever care about gid_t not being defined / smaller than an int?
> > +cdata.set('GETGROUPS_T', 'gid_t')
> > +
> > +# Include paths
> > +
> > +configinc = include_directories('.')
> > +topinc = include_directories('src')
> > +
> > +# CFLAGS
> > +
> > +pa_c_args = ['-DHAVE_CONFIG_H', '-D_GNU_SOURCE']
> > +server_c_args = ['-D__INCLUDED_FROM_PULSE_AUDIO']
> > +cdata.set('MESON_BUILD', 1)
> > +
> > +# Core Dependencies
> > +
> > +libm_dep = cc.find_library('m', required : true)
> 
> I don't think windows has a libm.

I've focused on the Linux build for now. We'll have to get to the
Windows, OS X, Solaris, ... builds when someone is able to do it.

> > +thread_dep = dependency('threads')
> > +cap_dep = cc.find_library('cap', required : false)
> > +
> > +if get_option('database') == 'tdb'
> > +  database_dep = dependency('tdb')
> > +elif get_option('database') == 'gdbm'
> > +  database_dep = cc.find_library('gdbm', required : true)
> > +endif
> > +
> > +atomictest = '''void func() {
> > +  volatile int atomic = 2;
> > +  __sync_bool_compare_and_swap (&atomic, 2, 3);
> > +}
> > +'''
> > +if cc.compiles(atomictest)
> > +  cdata.set('HAVE_ATOMIC_BUILTINS', true)
> > +else
> > +  # FIXME: check if we need libatomic_ops
> > +endif
> > +
> > +# FIXME: make sure it's >= 2.2
> > +ltdl_dep = cc.find_library('ltdl', required : true)
> > +# FIXME: can meson support libtool -dlopen/-dlpreopen things?
> > +#        and do we still want to support this at all?
> > +cdata.set('DISABLE_LIBTOOL_PRELOAD', 1)
> > +
> > +sndfile_dep = dependency('sndfile', version : '>= 1.0.20')
> > +
> > +dbus_dep = dependency('dbus-1', version : '>= 1.4.12', required : false)
> > +if dbus_dep.found()
> > +  cdata.set('HAVE_DBUS', 1)
> > +endif
> 
> dbus_watch_get_unix_fd needs checking too.

I'll pull this in with your patch later.

> > +
> > +x11_dep = dependency('x11-xcb', required : false)
> > +if x11_dep.found()
> > +  cdata.set('HAVE_X11', 1)
> > +endif
> > +
> > +alsa_dep = dependency('alsa', version : '>= 1.0.24', required : false)
> > +if alsa_dep.found()
> > +  cdata.set('HAVE_ALSA_UCM', 1)
> > +endif
> > +
> > +# FIXME: support ORC
> > +cdata.set('DISABLE_ORC', 1)
> > +
> > +# Module dependencies
> > +udev_dep = dependency('libudev', version : '>= 143', required : false)
> > +
> > +# Now generate config.h from everything avove
> 
> s/avove/above/ :)

Fixed locally, thanks.

> > +configure_file(output : 'config.h', configuration : cdata)
> > +
> > +subdir('src')
> 
> Is there really a benefit to splitting the meson.build files?

I find this more manageable than one large monolithic file.

> > diff --git a/meson_options.txt b/meson_options.txt
> > new file mode 100644
> > index 000000000..233a1846b
> > --- /dev/null
> > +++ b/meson_options.txt
> > @@ -0,0 +1,13 @@
> > +option('system_user',
> > +        type : 'string', value : 'pulse',
> > +        description : 'User for running the PulseAudio daemon as a system-wide instance (pulse)')
> > +option('system_group',
> > +        type : 'string', value : 'pulse',
> > +        description : 'Group for running the PulseAudio daemon as a system-wide instance (pulse)')
> > +option('access_group',
> > +        type : 'string', value : 'pulse-access',
> > +        description : 'Group which is allowed access to a system-wide PulseAudio daemon (pulse-access)')
> > +option('database',
> > +        type : 'combo', value : 'tdb',
> > +        choices : [ 'gdbm', 'tdb', 'simple' ],
> > +        description : 'Database backend')
> > diff --git a/src/daemon/daemon-conf.c b/src/daemon/daemon-conf.c
> > index 988312672..6a3957859 100644
> > --- a/src/daemon/daemon-conf.c
> > +++ b/src/daemon/daemon-conf.c
> > @@ -157,7 +157,11 @@ pa_daemon_conf *pa_daemon_conf_new(void) {
> >  #else
> >      if (pa_run_from_build_tree()) {
> >          pa_log_notice("Detected that we are run from the build tree, fixing search path.");
> > +#ifdef MESON_BUILD
> > +        c->dl_search_path = pa_xstrdup(PA_BUILDDIR PA_PATH_SEP "src" PA_PATH_SEP "modules");
> > +#else
> >          c->dl_search_path = pa_xstrdup(PA_BUILDDIR);
> > +#endif
> 
> This can be avoided by having the modules be declared directly from
> the top-level meson.build.t

imo the manageability of not having everything in one big file is worse
this bit of kludge. We could make it nicer by defining a
PA_MODULE_BUILDDIR and have that defined by the build system in a next
step.

> >      } else
> >          c->dl_search_path = pa_xstrdup(PA_DLSEARCHPATH);
> >  #endif
> > diff --git a/src/daemon/main.c b/src/daemon/main.c
> > index 55af4eca6..a1dbd81f9 100644
> > --- a/src/daemon/main.c
> > +++ b/src/daemon/main.c
> > @@ -98,6 +98,15 @@
> >  #include "ltdl-bind-now.h"
> >  #include "server-lookup.h"
> >
> > +#ifdef DISABLE_LIBTOOL_PRELOAD
> > +/* FIXME: work around a libtool bug by making sure we have 2 elements. Bug has
> > + * been reported: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=29576 */
> > +const lt_dlsymlist lt_preloaded_symbols[] = {
> > +    { "@PROGRAM@", NULL },
> > +    { NULL, NULL }
> > +};
> > +#endif
> > +
> >  #ifdef HAVE_LIBWRAP
> >  /* Only one instance of these variables */
> >  int allow_severity = LOG_INFO;
> > diff --git a/src/daemon/meson.build b/src/daemon/meson.build
> > new file mode 100644
> > index 000000000..3bf4a3b89
> > --- /dev/null
> > +++ b/src/daemon/meson.build
> > @@ -0,0 +1,34 @@
> > +pulseaudio_sources = [
> > +  'caps.c',
> > +  'cmdline.c',
> > +  'cpulimit.c',
> > +  'daemon-conf.c',
> > +  'dumpmodules.c',
> > +  'ltdl-bind-now.c',
> > +  'main.c',
> > +]
> > +
> > +pulseaudio_headers = [
> > +  'caps.h',
> > +  'cmdline.h',
> > +  'cpulimit.h',
> > +  'daemon-conf.h',
> > +  'dumpmodules.h',
> > +  'ltdl-bind-now.h',
> > +]
> > +
> > +if dbus_dep.found()
> > +  pulseaudio_sources += 'server-lookup.c'
> > +  pulseaudio_headers += 'server-lookup.h'
> > +endif
> > +
> > +# FIXME: man pages, dependencies
> > +executable('pulseaudio',
> > +  pulseaudio_sources,
> > +  pulseaudio_headers,
> > +  install: true,
> > +  include_directories : [configinc, topinc],
> > +  link_with : [libpulsecore, libpulsecommon, libpulse],
> > +  dependencies : [ltdl_dep, cap_dep, dbus_dep],
> > +  c_args : pa_c_args,
> > +)
> > diff --git a/src/meson.build b/src/meson.build
> > new file mode 100644
> > index 000000000..1cc3b40e8
> > --- /dev/null
> > +++ b/src/meson.build
> > @@ -0,0 +1,194 @@
> > +libpulsecommon_sources = [
> > +  'pulse/client-conf.c',
> > +  'pulse/fork-detect.c',
> > +  'pulse/format.c',
> > +  'pulse/json.c',
> > +  'pulse/xmalloc.c',
> > +  'pulse/proplist.c',
> > +  'pulse/utf8.c',
> > +  'pulse/channelmap.c',
> > +  'pulse/sample.c',
> > +  'pulse/util.c',
> > +  'pulse/timeval.c',
> > +  'pulse/rtclock.c',
> > +  'pulse/volume.c',
> > +  'pulsecore/authkey.c',
> > +  'pulsecore/conf-parser.c',
> > +  'pulsecore/core-error.c',
> > +  'pulsecore/core-format.c',
> > +  'pulsecore/core-rtclock.c',
> > +  'pulsecore/core-util.c',
> > +  'pulsecore/dynarray.c',
> > +  'pulsecore/fdsem.c',
> > +  'pulsecore/flist.c',
> > +  'pulsecore/g711.c',
> > +  'pulsecore/hashmap.c',
> > +  'pulsecore/i18n.c',
> > +  'pulsecore/idxset.c',
> > +  'pulsecore/arpa-inet.c',
> > +  'pulsecore/iochannel.c',
> > +  'pulsecore/ioline.c',
> > +  'pulsecore/ipacl.c',
> > +  'pulsecore/lock-autospawn.c',
> > +  'pulsecore/log.c',
> > +  'pulsecore/ratelimit.c',
> > +  'pulsecore/mcalign.c',
> > +  'pulsecore/memblock.c',
> > +  'pulsecore/memblockq.c',
> > +  'pulsecore/memchunk.c',
> > +  'pulsecore/mutex-posix.c',
> > +  'pulsecore/native-common.c',
> > +  'pulsecore/once.c',
> > +  'pulsecore/packet.c',
> > +  'pulsecore/parseaddr.c',
> > +  'pulsecore/pdispatch.c',
> > +  'pulsecore/pid.c',
> > +  'pulsecore/pipe.c',
> > +  'pulsecore/memtrap.c',
> > +  'pulsecore/aupdate.c',
> > +  'pulsecore/proplist-util.c',
> > +  'pulsecore/pstream-util.c',
> > +  'pulsecore/pstream.c',
> > +  'pulsecore/queue.c',
> > +  'pulsecore/random.c',
> > +  'pulsecore/srbchannel.c',
> > +  'pulsecore/sample-util.c',
> > +  'pulsecore/semaphore-posix.c',
> > +  'pulsecore/shm.c',
> > +  'pulsecore/bitset.c',
> > +  'pulsecore/socket-client.c',
> > +  'pulsecore/socket-server.c',
> > +  'pulsecore/socket-util.c',
> > +  'pulsecore/strbuf.c',
> > +  'pulsecore/strlist.c',
> > +  'pulsecore/svolume_c.c',
> > +  'pulsecore/svolume_mmx.c',
> > +  'pulsecore/tagstruct.c',
> > +  'pulsecore/thread-posix.c',
> > +  'pulsecore/time-smoother.c',
> > +  'pulsecore/tokenizer.c',
> > +  'pulsecore/usergroup.c',
> > +  'pulsecore/sndfile-util.c',
> > +  'pulsecore/svolume_arm.c',
> > +]
> > +
> > +libpulsecommon_headers = [
> > +  'pulse/client-conf.h',
> > +  'pulse/fork-detect.h',
> > +  'pulse/format.h',
> > +  'pulse/json.h',
> > +  'pulse/xmalloc.h',
> > +  'pulse/proplist.h',
> > +  'pulse/utf8.h',
> > +  'pulse/channelmap.h',
> > +  'pulse/sample.h',
> > +  'pulse/util.h',
> > +  'pulse/timeval.h',
> > +  'pulse/rtclock.h',
> > +  'pulse/volume.h',
> > +  'pulsecore/atomic.h',
> > +  'pulsecore/authkey.h',
> > +  'pulsecore/conf-parser.h',
> > +  'pulsecore/core-error.h',
> > +  'pulsecore/core-format.h',
> > +  'pulsecore/core-rtclock.h',
> > +  'pulsecore/core-util.h',
> > +  'pulsecore/creds.h',
> > +  'pulsecore/dynarray.h',
> > +  'pulsecore/endianmacros.h',
> > +  'pulsecore/fdsem.h',
> > +  'pulsecore/flist.h',
> > +  'pulsecore/g711.h',
> > +  'pulsecore/hashmap.h',
> > +  'pulsecore/i18n.h',
> > +  'pulsecore/idxset.h',
> > +  'pulsecore/arpa-inet.h',
> > +  'pulsecore/iochannel.h',
> > +  'pulsecore/ioline.h',
> > +  'pulsecore/ipacl.h',
> > +  'pulsecore/llist.h',
> > +  'pulsecore/lock-autospawn.h',
> > +  'pulsecore/log.h',
> > +  'pulsecore/ratelimit.h',
> > +  'pulsecore/macro.h',
> > +  'pulsecore/mcalign.h',
> > +  'pulsecore/mem.h',
> > +  'pulsecore/memblock.h',
> > +  'pulsecore/memblockq.h',
> > +  'pulsecore/memchunk.h',
> > +  'pulsecore/mutex.h',
> > +  'pulsecore/native-common.h',
> > +  'pulsecore/once.h',
> > +  'pulsecore/packet.h',
> > +  'pulsecore/parseaddr.h',
> > +  'pulsecore/pdispatch.h',
> > +  'pulsecore/pid.h',
> > +  'pulsecore/pipe.h',
> > +  'pulsecore/memtrap.h',
> > +  'pulsecore/aupdate.h',
> > +  'pulsecore/proplist-util.h',
> > +  'pulsecore/pstream-util.h',
> > +  'pulsecore/pstream.h',
> > +  'pulsecore/queue.h',
> > +  'pulsecore/random.h',
> > +  'pulsecore/refcnt.h',
> > +  'pulsecore/srbchannel.h',
> > +  'pulsecore/sample-util.h',
> > +  'pulsecore/semaphore.h',
> > +  'pulsecore/shm.h',
> > +  'pulsecore/bitset.h',
> > +  'pulsecore/socket-client.h',
> > +  'pulsecore/socket-server.h',
> > +  'pulsecore/socket-util.h',
> > +  'pulsecore/strbuf.h',
> > +  'pulsecore/strlist.h',
> > +  'pulsecore/tagstruct.h',
> > +  'pulsecore/thread.h',
> > +  'pulsecore/time-smoother.h',
> > +  'pulsecore/tokenizer.h',
> > +  'pulsecore/usergroup.h',
> > +  'pulsecore/sndfile-util.h',
> > +  'pulsecore/socket.h',
> > +]
> > +
> > +if dbus_dep.found()
> > +  libpulsecommon_sources += [
> > +    'pulsecore/dbus-util.c',
> > +    'pulsecore/rtkit.c',
> > +  ]
> > +  libpulsecommon_headers += [
> > +    'pulsecore/dbus-util.h',
> > +    'pulsecore/rtkit.h',
> > +  ]
> > +endif
> > +
> > +if x11_dep.found()
> > +  libpulsecommon_sources += [
> > +    'pulse/client-conf-x11.c',
> > +    'pulsecore/x11prop.c',
> > +  ]
> > +  libpulsecommon_headers += [
> > +    'pulse/client-conf-x11.h',
> > +    'pulsecore/x11prop.h',
> > +  ]
> > +endif
> > +
> > +# FIXME: Do non-POSIX thread things
> > +# FIXME: Do SIMD things
> > +
> > +libpulsecommon = shared_library('pulsecommon-' + pa_version_major_minor,
> > +  libpulsecommon_sources,
> > +  libpulsecommon_headers,
> > +  include_directories : [configinc, topinc],
> > +  c_args : [pa_c_args],
> > +  install : true,
> > +  dependencies : [libm_dep, thread_dep, shm_dep, sndfile_dep, dbus_dep, x11_dep],
> > +  implicit_include_directories : false)
> > +
> > +libpulsecommon_dep = declare_dependency(link_with: libpulsecommon)
> > +
> > +subdir('pulse')
> > +subdir('pulsecore')
> > +subdir('daemon')
> > +subdir('modules')
> > +subdir('utils')
> > diff --git a/src/modules/alsa/meson.build b/src/modules/alsa/meson.build
> > new file mode 100644
> > index 000000000..e2a45e2c7
> > --- /dev/null
> > +++ b/src/modules/alsa/meson.build
> > @@ -0,0 +1,31 @@
> > +libalsa_util_sources = [
> > +  'alsa-util.c',
> > +  'alsa-ucm.c',
> > +  'alsa-mixer.c',
> > +  'alsa-sink.c',
> > +  'alsa-source.c',
> > +  '../reserve-wrap.c',
> > +]
> > +
> > +libalsa_util_headers = [
> > +  'alsa-util.h',
> > +  'alsa-ucm.h',
> > +  'alsa-mixer.h',
> > +  'alsa-sink.h',
> > +  'alsa-source.h',
> > +  '../reserve-wrap.h',
> > +]
> > +
> > +if dbus_dep.found()
> > +    libalsa_util_sources += [ '../reserve.c', '../reserve-monitor.c' ]
> > +    libalsa_util_headers += [ '../reserve.h', '../reserve-monitor.h' ]
> > +endif
> > +
> > +libalsa_util = static_library('libalsa_util',
> > +  libalsa_util_sources,
> > +  libalsa_util_headers,
> > +  c_args : [pa_c_args, server_c_args],
> > +  include_directories : [configinc, topinc],
> > +  dependencies : [libpulse_dep, libpulsecore_dep, alsa_dep, dbus_dep],
> > +  install : false
> > +)
> > diff --git a/src/modules/meson.build b/src/modules/meson.build
> > new file mode 100644
> > index 000000000..3d6b53fe8
> > --- /dev/null
> > +++ b/src/modules/meson.build
> > @@ -0,0 +1,127 @@
> > +# module name, sources, [headers, extra flags, extra deps, extra libs]
> > +all_modules = [
> > +  [ 'module-allow-passthrough', 'module-allow-passthrough.c' ],
> > +  [ 'module-always-sink', 'module-always-sink.c' ],
> > +  [ 'module-always-source', 'module-always-source.c' ],
> > +  [ 'module-augment-properties', 'module-augment-properties.c' ],
> > +  [ 'module-bluetooth-discover', 'bluetooth/module-bluetooth-discover.c' ],
> > +  [ 'module-bluetooth-policy', 'bluetooth/module-bluetooth-policy.c' ],
> > +#  [ 'module-bluez4-device', 'bluetooth/module-bluez4-device.c' ],
> > +#  [ 'module-bluez4-discover', 'bluetooth/module-bluez4-discover.c' ],
> > +#  [ 'module-bluez5-device', 'bluetooth/module-bluez5-device.c' ],
> > +#  [ 'module-bluez5-discover', 'bluetooth/module-bluez5-discover.c' ],
> > +#  [ 'module-bonjour-publish', 'macosx/module-bonjour-publish.c' ],
> > +  [ 'module-card-restore', 'module-card-restore.c' ],
> > +  [ 'module-cli', 'module-cli.c' ],
> > +  [ 'module-cli-protocol-tcp', 'module-protocol-stub.c', [], ['-DUSE_PROTOCOL_CLI', '-DUSE_TCP_SOCKETS'] ],
> > +  [ 'module-cli-protocol-unix', 'module-protocol-stub.c', [], ['-DUSE_PROTOCOL_CLI', '-DUSE_UNIX_SOCKETS'] ],
> > +  [ 'module-combine', 'module-combine.c' ],
> > +  [ 'module-combine-sink', 'module-combine-sink.c' ],
> > +#  [ 'module-console-kit', 'module-console-kit.c' ],
> > +#  [ 'module-coreaudio-detect', 'macosx/module-coreaudio-detect.c' ],
> > +#  [ 'module-coreaudio-device', 'macosx/module-coreaudio-device.c' ],
> > +#  [ 'module-dbus-protocol', 'module-dbus-protocol.c' ]
> > +  [ 'module-default-device-restore', 'module-default-device-restore.c', [], [], [], libprotocol_native ],
> > +  [ 'module-detect', 'module-detect.c' ],
> > +  [ 'module-device-manager', 'module-device-manager.c' ],
> > +  [ 'module-device-restore', 'module-device-restore.c', [], [], [dbus_dep], libprotocol_native ],
> > +#  [ 'module-echo-cancel', 'module-echo-cancel.c' ],
> > +  [ 'module-equalizer-sink', 'module-equalizer-sink.c', [], [], [dbus_dep] ],
> > +  [ 'module-esound-compat-spawnfd', 'module-esound-compat-spawnfd.c' ],
> > +  [ 'module-esound-compat-spawnpid', 'module-esound-compat-spawnpid.c' ],
> > +#  [ 'module-esound-protocol-tcp', 'module-protocol-stub.c' ],
> > +#  [ 'module-esound-protocol-unix', 'module-protocol-stub.c' ],
> > +  [ 'module-esound-sink', 'module-esound-sink.c' ],
> > +  [ 'module-filter-apply', 'module-filter-apply.c' ],
> > +  [ 'module-filter-heuristics', 'module-filter-heuristics.c' ],
> > +#  [ 'module-gconf', 'gconf/module-gconf.c' ],
> > +  [ 'module-hal-detect', 'module-hal-detect-compat.c' ],
> > +  [ 'module-http-protocol-tcp', 'module-protocol-stub.c', [], ['-DUSE_PROTOCOL_HTTP', '-DUSE_TCP_SOCKETS'] ],
> > +  [ 'module-http-protocol-unix', 'module-protocol-stub.c', [], ['-DUSE_PROTOCOL_HTTP', '-DUSE_UNIX_SOCKETS'] ],
> > +  [ 'module-intended-roles', 'module-intended-roles.c' ],
> > +#  [ 'module-jackdbus-detect', 'jack/module-jackdbus-detect.c' ],
> > +#  [ 'module-jack-sink', 'jack/module-jack-sink.c' ],
> > +#  [ 'module-jack-source', 'jack/module-jack-source.c' ],
> > +#  [ 'module-ladspa-sink', 'module-ladspa-sink.c' ],
> > +#  [ 'module-lirc', 'module-lirc.c' ],
> > +  [ 'module-loopback', 'module-loopback.c' ],
> > +  [ 'module-match', 'module-match.c' ],
> > +#  [ 'module-mmkbd-evdev', 'module-mmkbd-evdev.c' ],
> > +  [ 'module-native-protocol-fd', 'module-native-protocol-fd.c' ],
> > +  [ 'module-native-protocol-tcp', 'module-protocol-stub.c', [], ['-DUSE_PROTOCOL_NATIVE', '-DUSE_TCP_SOCKETS'], [], libprotocol_native ],
> > +  [ 'module-native-protocol-unix', 'module-protocol-stub.c', [], ['-DUSE_PROTOCOL_NATIVE', '-DUSE_UNIX_SOCKETS'], [], libprotocol_native ],
> > +  [ 'module-null-sink', 'module-null-sink.c' ],
> > +  [ 'module-null-source', 'module-null-source.c' ],
> > +#  [ 'module-oss', 'oss/module-oss.c' ],
> > +  [ 'module-pipe-sink', 'module-pipe-sink.c' ],
> > +  [ 'module-pipe-source', 'module-pipe-source.c' ],
> > +  [ 'module-position-event-sounds', 'module-position-event-sounds.c' ],
> > +#  [ 'module-raop-discover', 'raop/module-raop-discover.c' ],
> > +#  [ 'module-raop-sink', 'raop/module-raop-sink.c' ],
> > +  [ 'module-remap-sink', 'module-remap-sink.c' ],
> > +  [ 'module-remap-source', 'module-remap-source.c' ],
> > +  [ 'module-rescue-streams', 'module-rescue-streams.c' ],
> > +  [ 'module-role-cork', ['module-role-cork.c', 'stream-interaction.c'], 'stream-interaction.h' ],
> > +  [ 'module-role-ducking', ['module-role-ducking.c', 'stream-interaction.c'], 'stream-interaction.h' ],
> > +  [ 'module-rtp-recv', 'rtp/module-rtp-recv.c' ],
> > +  [ 'module-rtp-send', 'rtp/module-rtp-send.c' ],
> > +  [ 'module-rygel-media-server', 'module-rygel-media-server.c', [], [], [dbus_dep] ],
> > +  [ 'module-simple-protocol-tcp', 'module-protocol-stub.c', [], ['-DUSE_PROTOCOL_SIMPLE', '-DUSE_TCP_SOCKETS'] ],
> > +  [ 'module-simple-protocol-unix', 'module-protocol-stub.c', [], ['-DUSE_PROTOCOL_SIMPLE', '-DUSE_UNIX_SOCKETS'] ],
> > +  [ 'module-sine', 'module-sine.c' ],
> > +  [ 'module-sine-source', 'module-sine-source.c' ],
> > +#  [ 'module-solaris', 'module-solaris.c' ],
> > +  [ 'module-stream-restore', 'module-stream-restore.c', [], [], [dbus_dep], libprotocol_native ],
> > +  [ 'module-suspend-on-idle', 'module-suspend-on-idle.c' ],
> > +  [ 'module-switch-on-connect', 'module-switch-on-connect.c' ],
> > +  [ 'module-switch-on-port-available', 'module-switch-on-port-available.c' ],
> > +  [ 'module-systemd-login', 'module-systemd-login.c' ],
> > +  [ 'module-tunnel-sink', 'module-tunnel.c' ],
> > +  [ 'module-tunnel-sink-new', 'module-tunnel-sink-new.c' ],
> > +  [ 'module-tunnel-source', 'module-tunnel.c' ],
> > +  [ 'module-tunnel-source-new', 'module-tunnel-source-new.c' ],
> > +  [ 'module-virtual-sink', 'module-virtual-sink.c' ],
> > +  [ 'module-virtual-source', 'module-virtual-source.c' ],
> > +  [ 'module-virtual-surround-sink', 'module-virtual-surround-sink.c' ],
> > +  [ 'module-volume-restore', 'module-volume-restore.c' ],
> > +#  [ 'module-waveout', 'module-waveout.c' ],
> > +#  [ 'module-x11-bell', 'x11/module-x11-bell.c' ],
> > +#  [ 'module-x11-cork-request', 'x11/module-x11-cork-request.c' ],
> > +#  [ 'module-x11-publish', 'x11/module-x11-publish.c' ],
> > +#  [ 'module-x11-xsmp', 'x11/module-x11-xsmp.c' ],
> > +#  [ 'module-zeroconf-discover', 'module-zeroconf-discover.c' ],
> > +#  [ 'module-zeroconf-publish', 'module-zeroconf-publish.c' ],
> > +]
> > +
> > +if alsa_dep.found()
> > +  subdir('alsa')
> > +  all_modules += [
> > +    [ 'module-alsa-card', 'alsa/module-alsa-card.c', [], [], [alsa_dep], libalsa_util ],
> > +    [ 'module-alsa-sink', 'alsa/module-alsa-sink.c', [], [], [alsa_dep], libalsa_util ],
> > +    [ 'module-alsa-source', 'alsa/module-alsa-source.c', [], [], [alsa_dep], libalsa_util ],
> > +  ]
> > +endif
> > +
> > +if udev_dep.found()
> > +  all_modules += [ [ 'module-udev-detect', 'module-udev-detect.c', [], [], [udev_dep] ] ]
> > +endif
> > +
> > +foreach m : all_modules
> > +  name = m[0]
> > +  sources = m[1]
> > +  headers = m.get(2, [])
> > +  extra_flags = m.get(3, [])
> > +  extra_deps = m.get(4, [])
> > +  extra_libs = m.get(5, [])
> > +
> > +  mod = shared_module(name,
> > +    sources,
> > +    headers,
> > +    include_directories : [configinc, topinc],
> > +    c_args : [pa_c_args, server_c_args, '-DPA_MODULE_NAME=' + name.underscorify()] + extra_flags,
> > +    install : true,
> > +    dependencies : [thread_dep, libpulse_dep, libpulsecore_dep] + extra_deps,
> > +    link_with : extra_libs,
> > +    name_prefix : '',
> > +    implicit_include_directories : false)
> > +endforeach
> > diff --git a/src/modules/module-role-cork.c b/src/modules/module-role-cork.c
> > index b3c9d5f92..a13457eff 100644
> > --- a/src/modules/module-role-cork.c
> > +++ b/src/modules/module-role-cork.c
> > @@ -23,7 +23,7 @@
> >
> >  #include <pulsecore/macro.h>
> >  #include <pulsecore/core.h>
> > -#include <stream-interaction.h>
> > +#include "stream-interaction.h"
> >
> >  PA_MODULE_AUTHOR("Lennart Poettering");
> >  PA_MODULE_DESCRIPTION("Mute & cork streams with certain roles while others exist");
> > diff --git a/src/modules/module-role-ducking.c b/src/modules/module-role-ducking.c
> > index a1308c2a7..1b2ecd735 100644
> > --- a/src/modules/module-role-ducking.c
> > +++ b/src/modules/module-role-ducking.c
> > @@ -23,7 +23,7 @@
> >
> >  #include <pulsecore/macro.h>
> >  #include <pulsecore/core.h>
> > -#include <stream-interaction.h>
> > +#include "stream-interaction.h"
> >
> >  PA_MODULE_AUTHOR("Flavio Ceolin <flavio.ceolin at profusion.mobi>");
> >  PA_MODULE_DESCRIPTION("Apply a ducking effect based on streams roles");
> > diff --git a/src/pulse/meson.build b/src/pulse/meson.build
> > new file mode 100644
> > index 000000000..d1d816ffd
> > --- /dev/null
> > +++ b/src/pulse/meson.build
> > @@ -0,0 +1,73 @@
> > +libpulse_sources = [
> > +  'channelmap.c',
> > +  'context.c',
> > +  'direction.c',
> > +  'error.c',
> > +  'ext-device-manager.c',
> > +  'ext-device-restore.c',
> > +  'ext-stream-restore.c',
> > +  'format.c',
> > +  'introspect.c',
> > +  'mainloop-api.c',
> > +  'mainloop-signal.c',
> > +  'mainloop.c',
> > +  'operation.c',
> > +  'proplist.c',
> > +  'rtclock.c',
> > +  'sample.c',
> > +  'scache.c',
> > +  'stream.c',
> > +  'subscribe.c',
> > +  'thread-mainloop.c',
> > +  'timeval.c',
> > +  'utf8.c',
> > +  'util.c',
> > +  'volume.c',
> > +  'xmalloc.c',
> > +]
> > +
> > +libpulse_headers = [
> > +  'cdecl.h',
> > +  'channelmap.h',
> > +  'context.h',
> > +  'def.h',
> > +  'direction.h',
> > +  'error.h',
> > +  'ext-device-manager.h',
> > +  'ext-device-restore.h',
> > +  'ext-stream-restore.h',
> > +  'format.h',
> > +  'gccmacro.h',
> > +  'internal.h',
> > +  'introspect.h',
> > +  'mainloop-api.h',
> > +  'mainloop-signal.h',
> > +  'mainloop.h',
> > +  'operation.h',
> > +  'proplist.h',
> > +  'pulseaudio.h',
> > +  'rtclock.h',
> > +  'sample.h',
> > +  'scache.h',
> > +  'stream.h',
> > +  'subscribe.h',
> > +  'thread-mainloop.h',
> > +  'timeval.h',
> > +  'utf8.h',
> > +  'util.h',
> > +  'volume.h',
> > +  'xmalloc.h',
> > +]
> > +
> > +libpulse = shared_library('pulse',
> > +  libpulse_sources,
> > +  libpulse_headers,
> > +  version : libversion,
> > +  include_directories : [configinc, topinc],
> > +  c_args : [pa_c_args],
> > +  soversion : soversion,
> > +  install : true,
> > +  dependencies : [libm_dep, thread_dep, libpulsecommon_dep, dbus_dep],
> > +  implicit_include_directories : false)
> > +
> > +libpulse_dep = declare_dependency(link_with: libpulse)
> > diff --git a/src/pulsecore/meson.build b/src/pulsecore/meson.build
> > new file mode 100644
> > index 000000000..2d584dcbd
> > --- /dev/null
> > +++ b/src/pulsecore/meson.build
> > @@ -0,0 +1,170 @@
> > +libpulsecore_sources = [
> > +  'asyncmsgq.c',
> > +  'asyncq.c',
> > +  'auth-cookie.c',
> > +  'card.c',
> > +  'cli-command.c',
> > +  'cli-text.c',
> > +  'client.c',
> > +  'core-scache.c',
> > +  'core-subscribe.c',
> > +  'core.c',
> > +  'cpu.c',
> > +  'cpu-arm.c',
> > +  'cpu-orc.c',
> > +  'cpu-x86.c',
> > +  'device-port.c',
> > +  'ffmpeg/resample2.c',
> > +  'filter/biquad.c',
> > +  'filter/crossover.c',
> > +  'filter/lfe-filter.c',
> > +  'hook-list.c',
> > +  'ltdl-helper.c',
> > +  'mix.c',
> > +  'modargs.c',
> > +  'modinfo.c',
> > +  'module.c',
> > +  'msgobject.c',
> > +  'namereg.c',
> > +  'object.c',
> > +  'play-memblockq.c',
> > +  'play-memchunk.c',
> > +  'remap.c',
> > +  'resampler.c',
> > +  'resampler/ffmpeg.c',
> > +  'resampler/peaks.c',
> > +  'resampler/trivial.c',
> > +  'rtpoll.c',
> > +  'sconv-s16be.c',
> > +  'sconv-s16le.c',
> > +  'sconv.c',
> > +  'shared.c',
> > +  'sink.c',
> > +  'sink-input.c',
> > +  'sioman.c',
> > +  'sound-file-stream.c',
> > +  'sound-file.c',
> > +  'source.c',
> > +  'source-output.c',
> > +  'start-child.c',
> > +  'stream-util.c',
> > +  'thread-mq.c',
> > +]
> > +
> > +libpulsecore_headers = [
> > +  'asyncmsgq.h',
> > +  'asyncq.h',
> > +  'auth-cookie.h',
> > +  'card.h',
> > +  'cli-command.h',
> > +  'cli-text.h',
> > +  'client.h',
> > +  'core.h',
> > +  'core-scache.h',
> > +  'core-subscribe.h',
> > +  'cpu.h',
> > +  'cpu-arm.h',
> > +  'cpu-orc.h',
> > +  'cpu-x86.h',
> > +  'database.h',
> > +  'device-port.h',
> > +  'ffmpeg/avcodec.h',
> > +  'ffmpeg/dsputil.h',
> > +  'filter/biquad.h',
> > +  'filter/crossover.h',
> > +  'filter/lfe-filter.h',
> > +  'hook-list.h',
> > +  'ltdl-helper.h',
> > +  'mix.h',
> > +  'modargs.h',
> > +  'modinfo.h',
> > +  'module.h',
> > +  'msgobject.h',
> > +  'namereg.h',
> > +  'object.h',
> > +  'play-memblockq.h',
> > +  'play-memchunk.h',
> > +  'remap.h',
> > +  'resampler.h',
> > +  'rtpoll.h',
> > +  'sconv.h',
> > +  'sconv-s16be.h',
> > +  'sconv-s16le.h',
> > +  'shared.h',
> > +  'sink-input.h',
> > +  'sink.h',
> > +  'sioman.h',
> > +  'sound-file-stream.h',
> > +  'sound-file.h',
> > +  'source-output.h',
> > +  'source.h',
> > +  'start-child.h',
> > +  'stream-util.h',
> > +  'thread-mq.h',
> > +  'typedefs.h',
> > +]
> > +
> > +if get_option('database') == 'tdb'
> > +  libpulsecore_sources += 'database-tdb.c'
> > +  database_c_args = '-DHAVE_TDB'
> > +elif get_option('database') == 'gdbm'
> > +  libpulsecore_sources += 'database-gdbm.c'
> > +  database_c_args = '-DHAVE_GDBM'
> > +else
> > +  libpulsecore_sources += 'database-simple.c'
> > +  database_c_args = '-DHAVE_SIMPLEDB'
> > +endif
> > +
> > +if dbus_dep.found()
> > +  libpulsecore_sources += [
> > +    'dbus-shared.c',
> > +    'protocol-dbus.c',
> > +  ]
> > +  libpulsecore_headers += [
> > +    'dbus-shared.h',
> > +    'protocol-dbus.h',
> > +  ]
> > +endif
> > +
> > +# FIXME: walk through dependencies and add files
> > +
> > +# FIXME: SIMD support (ORC)
> > +simd = import('unstable-simd')
> > +libpulsecore_simd = simd.check('libpulsecore_simd',
> > +  mmx : ['remap_mmx.c', 'svolume_mmx.c'],
> > +  sse : ['remap_sse.c', 'sconv_sse.c', 'svolume_sse.c'],
> > +  neon : ['remap_neon.c', 'sconv_neon.c', 'svolume_neon.c'],
> > +  c_args : [pa_c_args],
> > +  include_directories : [configinc, topinc],
> > +  implicit_include_directories : false,
> > +  compiler : cc)
> > +libpulsecore_simd_lib = libpulsecore_simd[0]
> > +cdata.merge_from(libpulsecore_simd[1])
> > +
> > +# FIXME: Implement Windows support
> > +#'mutex-win32.c',
> > +#'poll-win32.c',
> > +#'semaphore-win32.c',
> > +#'thread-win32.c',
> > +
> > +libpulsecore = shared_library('pulsecore-' + pa_version_major_minor,
> > +  libpulsecore_sources,
> > +  libpulsecore_headers,
> > +  include_directories : [configinc, topinc],
> > +  c_args : [pa_c_args, server_c_args],
> > +  install : true,
> > +  link_with : libpulsecore_simd_lib,
> > +  dependencies : [libm_dep, libpulsecommon_dep, libpulse_dep, ltdl_dep, shm_dep, sndfile_dep, database_dep, dbus_dep, x11_dep],
> > +  implicit_include_directories : false)
> > +
> > +libpulsecore_dep = declare_dependency(link_with: libpulsecore)
> > +
> > +# For modules that need protocol native functionality
> > +libprotocol_native = static_library('protocol_native',
> > +  'protocol-native.c',
> > +  ['protocol-native.h', 'native-common.h'],
> > +  c_args : [pa_c_args, server_c_args, database_c_args],
> > +  include_directories : [configinc, topinc],
> > +  dependencies : [libpulse_dep, libpulsecore_dep, dbus_dep],
> > +  install : false
> > +)
> 
> This one is shared in the autotools build.

Fixed locally.

> > diff --git a/src/pulsecore/module.c b/src/pulsecore/module.c
> > index 0478b6fb8..70b816072 100644
> > --- a/src/pulsecore/module.c
> > +++ b/src/pulsecore/module.c
> > @@ -84,7 +84,11 @@ bool pa_module_exists(const char *name) {
> >      state = NULL;
> >      if (PA_UNLIKELY(pa_run_from_build_tree())) {
> >          while ((p = pa_split(paths, ":", &state))) {
> > +#ifdef MESON_BUILD
> > +            pathname = pa_sprintf_malloc("%s" PA_PATH_SEP "src" PA_PATH_SEP "modules" PA_PATH_SEP "%s" PA_SOEXT, p, n);
> > +#else
> >              pathname = pa_sprintf_malloc("%s" PA_PATH_SEP ".libs" PA_PATH_SEP "%s" PA_SOEXT, p, n);
> > +#endif
> >              result = access(pathname, F_OK) == 0 ? true : false;
> >              pa_log_debug("Checking for existence of '%s': %s", pathname, result ? "success" : "failure");
> >              pa_xfree(pathname);
> > diff --git a/src/utils/meson.build b/src/utils/meson.build
> > new file mode 100644
> > index 000000000..e407d0721
> > --- /dev/null
> > +++ b/src/utils/meson.build
> > @@ -0,0 +1,67 @@
> > +pacat_sources = [
> > +  'pacat.c',
> > +]
> > +
> > +# FIXME: man pages
> > +executable('pacat',
> > +  pacat_sources,
> > +  install: true,
> > +  include_directories : [configinc, topinc],
> > +  link_with : [libpulsecommon, libpulse],
> > +  dependencies : [sndfile_dep],
> > +  c_args : pa_c_args,
> > +)
> > +
> > +pactl_sources = [
> > +  'pactl.c',
> > +]
> > +
> > +# FIXME: man pages
> > +executable('pactl',
> > +  pactl_sources,
> > +  install: true,
> > +  include_directories : [configinc, topinc],
> > +  link_with : [libpulsecommon, libpulse],
> > +  dependencies : [sndfile_dep],
> > +  c_args : pa_c_args,
> > +)
> > +
> > +pasuspender_sources = [
> > +  'pasuspender.c',
> > +]
> > +
> > +# FIXME: man pages
> > +executable('pasuspender',
> > +  pasuspender_sources,
> > +  install: true,
> > +  include_directories : [configinc, topinc],
> > +  link_with : [libpulsecommon, libpulse],
> > +  c_args : pa_c_args,
> > +)
> > +
> > +pacmd_sources = [
> > +  'pacmd.c',
> > +]
> > +
> > +# FIXME: man pages
> > +executable('pacmd',
> > +  pacmd_sources,
> > +  install: true,
> > +  include_directories : [configinc, topinc],
> > +  link_with : [libpulsecommon, libpulse],
> > +  c_args : pa_c_args,
> > +)
> > +
> > +pax11publish_sources = [
> > +  'pax11publish.c',
> > +]
> > +
> > +# FIXME: man pages
> > +executable('pax11publish',
> > +  pax11publish_sources,
> > +  install: true,
> > +  include_directories : [configinc, topinc],
> > +  link_with : [libpulsecommon, libpulse],
> > +  dependencies : [x11_dep],
> > +  c_args : pa_c_args,
> > +)
> 
> Shouldn't this be conditional on x11_dep being found?

Yes, that makes sense. I wonder if meson automatically won't build a
target whose dep is not found.

Cheers,
Arun


More information about the pulseaudio-discuss mailing list