pkgconfig = import('pkgconfig')
pkgconfig_libs = []
+liblxc_dependencies = []
+oss_fuzz_dependencies = []
+
# Version.
liblxc_version = '1.7.0'
version_data = configuration_data()
if cc.has_function('io_uring_prep_poll_add', prefix: '#include <liburing.h>', dependencies: liburing) == false
error('liburing version does not support IORING_POLL_ADD_MULTI')
endif
+ pkgconfig_libs += liburing
+ liblxc_dependencies += liburing
srcconf.set10('HAVE_LIBURING', true)
else
has_sd_bus = false
endif
- if not cc.has_function('sd_bus_call_method_async', prefix: '#include <systemd/sd-bus.h>', dependencies: libsystemd)
+ if not cc.has_function('sd_bus_call_method_async', prefix: '#include <systemd/sd-bus.h>', dependencies: libsystemd)
if not sd_bus_optional
error('libsystemd misses required sd_bus_call_method_async function')
endif
has_sd_bus = false
endif
+ if has_sd_bus
+ liblxc_dependencies += libsystemd
+ if want_oss_fuzz
+ oss_fuzz_dependencies += libsystemd
+ endif
+ endif
+
srcconf.set10('HAVE_LIBSYSTEMD', has_sd_bus)
else
has_sd_bus = false
## Threads.
threads = dependency('threads')
+liblxc_dependencies += threads
## Seccomp.
if want_seccomp
libseccomp = dependency('libseccomp', required: false)
srcconf.set10('HAVE_SECCOMP', libseccomp.found())
pkgconfig_libs += libseccomp
+ liblxc_dependencies += libseccomp
if libseccomp.found()
if libseccomp.version().version_compare('>=2.5.0')
# https://github.com/seccomp/libseccomp/commit/dead12bc788b259b148cc4d93b970ef0bd602b1a
]
# We get -1 if the size cannot be determined
- if cc.sizeof(decl, prefix: seccomp_headers, args: '-D_GNU_SOURCE') > 0
+ if cc.sizeof(decl, prefix: seccomp_headers, args: '-D_GNU_SOURCE', dependencies: libseccomp) > 0
srcconf.set10('HAVE_' + decl.underscorify().to_upper(), true)
else
srcconf.set10('HAVE_' + decl.underscorify().to_upper(), false)
libselinux = dependency('libselinux', required: false)
srcconf.set10('HAVE_SELINUX', libselinux.found())
pkgconfig_libs += libselinux
+ liblxc_dependencies += libselinux
else
srcconf.set10('HAVE_SELINUX', false)
endif
if want_apparmor
libapparmor = dependency('libapparmor', required: false)
srcconf.set10('HAVE_APPARMOR', libapparmor.found())
+ # We do not use the AppArmor library at runtime, so it's not in our pkg-config.
+ liblxc_dependencies += libapparmor
else
srcconf.set10('HAVE_APPARMOR', false)
endif
libopenssl = dependency('openssl', required: false)
srcconf.set10('HAVE_OPENSSL', libopenssl.found())
pkgconfig_libs += libopenssl
+ liblxc_dependencies += libopenssl
else
srcconf.set10('HAVE_OPENSSL', false)
endif
endif
srcconf.set10('HAVE_LIBCAP', libcap.found())
pkgconfig_libs += libcap
+ liblxc_dependencies += libcap
libcap_static = dependency('libcap', required: false, static: true)
if not libcap_static.found()
libutil = cc.find_library('util', required: false)
-oss_fuzz_dependencies = []
if want_oss_fuzz
srcconf.set10('FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION', true)
srcconf.set10('RUN_ON_OSS_FUZZ', true)
have = cc.has_function('fmemopen', prefix: '#include <stdio.h>', args: '-D_GNU_SOURCE')
srcconf.set10('HAVE_FMEMOPEN', have)
-have_openpty = cc.has_function('openpty', dependencies: libutil, prefix: '#include <pty.h>')
-srcconf.set10('HAVE_OPENPTY', have_openpty)
+have = cc.has_function('openpty', dependencies: libutil, prefix: '#include <pty.h>')
+srcconf.set10('HAVE_OPENPTY', have)
+if have
+ liblxc_dependencies += libutil
+ if want_oss_fuzz
+ oss_fuzz_dependencies += libutil
+ endif
+endif
have = cc.has_function('pthread_setcancelstate', prefix: '#include <pthread.h>')
srcconf.set10('HAVE_PTHREAD_SETCANCELSTATE', have)
'src/lxc/cgroups',
'src/lxc/storage')
+# Our static sub-project binaries don't (and in fact can't) link to our
+# dependencies directly, but need access to the headers when compiling (most
+# notably seccomp headers).
+liblxc_dependency_headers = []
+foreach dep: liblxc_dependencies
+ liblxc_dependency_headers += dep.partial_dependency(compile_args: true)
+endforeach
+
# Early sub-directories.
subdir('src/include')
subdir('src/lxc')
subdir('src/lxc/pam')
-# Library.
-liblxc_dependencies = [
- threads,
-]
-
-if want_seccomp
- liblxc_dependencies += libseccomp
-endif
-
-if want_capabilities
- liblxc_dependencies += [libcap]
-endif
-
-if want_openssl
- liblxc_dependencies += [libopenssl]
-endif
-
-if want_selinux
- liblxc_dependencies += [libselinux]
-endif
-
-if want_apparmor
- liblxc_dependencies += [libapparmor]
-endif
-
-if want_io_uring
- liblxc_dependencies += [liburing]
-endif
-
-if has_sd_bus
- liblxc_dependencies += [libsystemd]
- if want_oss_fuzz
- oss_fuzz_dependencies += [libsystemd]
- endif
-endif
-
-if have_openpty
- liblxc_dependencies += [libutil]
- if want_oss_fuzz
- oss_fuzz_dependencies += [libutil]
- endif
-endif
-
liblxc_link_whole = [liblxc_static]
liblxc = shared_library(