[PATCH v1 0/7] Fix build without XDR library

It's not much that's left when no XDR library is found, but some users might want just stateless drivers. BTW: there is still one pending issue - if no XDR library is found then remote driver is turned off which in turn means libvirtd is turned off. Until here it makes sense. But what I don't understand is why qemu driver depends on libvirtd, since it has embed mode. Transitively, why any driver depends on libvird? Michal Prívozník (7): libvirt-stream: Don't require RPC module rpc: Separate out socket code into another static lib rpc: Build only when XDR is available logging: Build log manager only when RPC is available admin: Build only when RPC is available meson: Require XDR for wireshark meson: Detect XDR only when needed examples/c/admin/meson.build | 36 +++++----- meson.build | 47 ++++++------ src/admin/meson.build | 36 +++++----- src/libvirt-stream.c | 6 +- src/libvirt_logging.syms | 18 +++++ src/libvirt_private.syms | 9 --- src/libvirt_remote.syms | 56 --------------- src/libvirt_socket.syms | 65 +++++++++++++++++ src/logging/meson.build | 31 ++++---- src/meson.build | 98 ++++++++++++------------- src/rpc/meson.build | 136 ++++++++++++++++++++--------------- tools/meson.build | 44 ++++++------ 12 files changed, 322 insertions(+), 260 deletions(-) create mode 100644 src/libvirt_logging.syms create mode 100644 src/libvirt_socket.syms -- 2.32.0

When implementing sparse streams, one of improvements I did was to increase client buffer size for sending/receiving stream data (commit v1.3.5-rc1~502). Previously, we were using 64KiB buffer while packets on RPC are 256KiB (usable data is slightly less because of the header). This meant that it took multiple calls of virStreamRecv()/virStreamSend() to serve a single packet of data. In my fix, I've included the virnetprotocol.h file which provides VIR_NET_MESSAGE_LEGACY_PAYLOAD_MAX macro which is the exact size of data in a single packet. However, including the file from libvirt-stream.c which implements public APIs is not right. If RPC module is not built then the file doesn't exists. Redefine the macro and drop the include. The size can never change anyways. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/libvirt-stream.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libvirt-stream.c b/src/libvirt-stream.c index 873d7b1d4e..86b13f39de 100644 --- a/src/libvirt-stream.c +++ b/src/libvirt-stream.c @@ -23,12 +23,16 @@ #include "datatypes.h" #include "viralloc.h" #include "virlog.h" -#include "rpc/virnetprotocol.h" VIR_LOG_INIT("libvirt.stream"); #define VIR_FROM_THIS VIR_FROM_STREAMS +/* To avoid dragging in RPC code (which may be not compiled in), + * redefine this constant. Its value can't ever change, so we're + * safe to do so. */ +#define VIR_NET_MESSAGE_LEGACY_PAYLOAD_MAX 262120 + /** * virStreamNew: -- 2.32.0

There's nothing RPC specific about virnettlscontext.c or virnetsocket.c. We use TLS for other things than just RPC encryption (e.g. for generating random numbers) and sockets can be used even without RPC. Move these two sources into a static library (virt_socket) so that other areas can use it even when RPC is disabled. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/libvirt_remote.syms | 56 ----------------------------------- src/libvirt_socket.syms | 65 +++++++++++++++++++++++++++++++++++++++++ src/rpc/meson.build | 24 +++++++++++++-- 3 files changed, 87 insertions(+), 58 deletions(-) create mode 100644 src/libvirt_socket.syms diff --git a/src/libvirt_remote.syms b/src/libvirt_remote.syms index 942e1013a6..1089796066 100644 --- a/src/libvirt_remote.syms +++ b/src/libvirt_remote.syms @@ -225,62 +225,6 @@ virNetServerServiceTimerActive; virNetServerServiceToggle; -# rpc/virnetsocket.h -virNetSocketAccept; -virNetSocketAddIOCallback; -virNetSocketCheckProtocols; -virNetSocketClose; -virNetSocketDupFD; -virNetSocketGetFD; -virNetSocketGetPath; -virNetSocketGetPort; -virNetSocketGetSELinuxContext; -virNetSocketGetUNIXIdentity; -virNetSocketHasCachedData; -virNetSocketHasPassFD; -virNetSocketHasPendingData; -virNetSocketIsLocal; -virNetSocketListen; -virNetSocketLocalAddrStringSASL; -virNetSocketNewConnectCommand; -virNetSocketNewConnectExternal; -virNetSocketNewConnectLibSSH2; -virNetSocketNewConnectSockFD; -virNetSocketNewConnectSSH; -virNetSocketNewConnectTCP; -virNetSocketNewConnectUNIX; -virNetSocketNewListenFD; -virNetSocketNewListenTCP; -virNetSocketNewListenUNIX; -virNetSocketNewPostExecRestart; -virNetSocketPreExecRestart; -virNetSocketRead; -virNetSocketRecvFD; -virNetSocketRemoteAddrStringSASL; -virNetSocketRemoteAddrStringURI; -virNetSocketRemoveIOCallback; -virNetSocketSendFD; -virNetSocketSetBlocking; -virNetSocketSetTLSSession; -virNetSocketUpdateIOCallback; -virNetSocketWrite; - - -# rpc/virnettlscontext.h -virNetTLSContextCheckCertificate; -virNetTLSContextNewClient; -virNetTLSContextNewClientPath; -virNetTLSContextNewServer; -virNetTLSContextNewServerPath; -virNetTLSInit; -virNetTLSSessionGetHandshakeStatus; -virNetTLSSessionGetKeySize; -virNetTLSSessionGetX509DName; -virNetTLSSessionHandshake; -virNetTLSSessionNew; -virNetTLSSessionRead; -virNetTLSSessionSetIOCallbacks; -virNetTLSSessionWrite; # Let emacs know we want case-insensitive sorting diff --git a/src/libvirt_socket.syms b/src/libvirt_socket.syms new file mode 100644 index 0000000000..3669166225 --- /dev/null +++ b/src/libvirt_socket.syms @@ -0,0 +1,65 @@ +# +# TLS and socket specific symbols +# + +# rpc/virnetsocket.h +virNetSocketAccept; +virNetSocketAddIOCallback; +virNetSocketCheckProtocols; +virNetSocketClose; +virNetSocketDupFD; +virNetSocketGetFD; +virNetSocketGetPath; +virNetSocketGetPort; +virNetSocketGetSELinuxContext; +virNetSocketGetUNIXIdentity; +virNetSocketHasCachedData; +virNetSocketHasPassFD; +virNetSocketHasPendingData; +virNetSocketIsLocal; +virNetSocketListen; +virNetSocketLocalAddrStringSASL; +virNetSocketNewConnectCommand; +virNetSocketNewConnectExternal; +virNetSocketNewConnectLibSSH2; +virNetSocketNewConnectSockFD; +virNetSocketNewConnectSSH; +virNetSocketNewConnectTCP; +virNetSocketNewConnectUNIX; +virNetSocketNewListenFD; +virNetSocketNewListenTCP; +virNetSocketNewListenUNIX; +virNetSocketNewPostExecRestart; +virNetSocketPreExecRestart; +virNetSocketRead; +virNetSocketRecvFD; +virNetSocketRemoteAddrStringSASL; +virNetSocketRemoteAddrStringURI; +virNetSocketRemoveIOCallback; +virNetSocketSendFD; +virNetSocketSetBlocking; +virNetSocketSetTLSSession; +virNetSocketUpdateIOCallback; +virNetSocketWrite; + + +# rpc/virnettlscontext.h +virNetTLSContextCheckCertificate; +virNetTLSContextNewClient; +virNetTLSContextNewClientPath; +virNetTLSContextNewServer; +virNetTLSContextNewServerPath; +virNetTLSInit; +virNetTLSSessionGetHandshakeStatus; +virNetTLSSessionGetKeySize; +virNetTLSSessionGetX509DName; +virNetTLSSessionHandshake; +virNetTLSSessionNew; +virNetTLSSessionRead; +virNetTLSSessionSetIOCallbacks; +virNetTLSSessionWrite; + +# Let emacs know we want case-insensitive sorting +# Local Variables: +# sort-fold-case: t +# End: diff --git a/src/rpc/meson.build b/src/rpc/meson.build index cc1424140a..6c32610d29 100644 --- a/src/rpc/meson.build +++ b/src/rpc/meson.build @@ -1,10 +1,30 @@ genprotocol_prog = find_program('genprotocol.pl') gendispatch_prog = find_program('gendispatch.pl') -rpc_sources = [ - 'virnetmessage.c', +socket_sources = [ 'virnettlscontext.c', 'virnetsocket.c', +] + +virt_socket_lib = static_library( + 'virt_socket', + [ + socket_sources, + ], + dependencies: [ + gnutls_dep, + src_dep, + ], +) + +libvirt_libs += [ + virt_socket_lib +] + +used_sym_files += 'libvirt_socket.syms' + +rpc_sources = [ + 'virnetmessage.c', 'virkeepalive.c', ] -- 2.32.0

Our RPC layer is as tied to XDR as possible. Therefore, if we haven't detected and XDR library there's not much sense in trying to build RPC layer. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/rpc/meson.build | 112 ++++++++++++++++++++++---------------------- 1 file changed, 57 insertions(+), 55 deletions(-) diff --git a/src/rpc/meson.build b/src/rpc/meson.build index 6c32610d29..7fde92e6cf 100644 --- a/src/rpc/meson.build +++ b/src/rpc/meson.build @@ -83,59 +83,67 @@ rpc_client_sources = [ 'virnetclient.c', ] -virt_rpc_lib = static_library( - 'virt_net_rpc', - [ - rpc_sources, - rpc_gen_headers, - rpc_gen_sources, - ], - dependencies: [ - gnutls_dep, - libssh2_dep, - libssh_dep, - sasl_dep, - secdriver_dep, - src_dep, - xdr_dep, - ], -) +if conf.has('WITH_REMOTE') + virt_rpc_lib = static_library( + 'virt_net_rpc', + [ + rpc_sources, + rpc_gen_headers, + rpc_gen_sources, + ], + dependencies: [ + gnutls_dep, + libssh2_dep, + libssh_dep, + sasl_dep, + secdriver_dep, + src_dep, + xdr_dep, + ], + ) -check_protocols += { - 'name': 'virnetprotocol', - 'lib': virt_rpc_lib, -} + check_protocols += { + 'name': 'virnetprotocol', + 'lib': virt_rpc_lib, + } -check_protocols += { - 'name': 'virkeepaliveprotocol', - 'lib': virt_rpc_lib, -} + check_protocols += { + 'name': 'virkeepaliveprotocol', + 'lib': virt_rpc_lib, + } -virt_rpc_server_lib = static_library( - 'virt_net_rpc_server', - [ - rpc_server_sources, - rpc_gen_headers, - ], - dependencies: [ - sasl_dep, - src_dep, - xdr_dep, - ], -) + virt_rpc_server_lib = static_library( + 'virt_net_rpc_server', + [ + rpc_server_sources, + rpc_gen_headers, + ], + dependencies: [ + sasl_dep, + src_dep, + xdr_dep, + ], + ) -virt_rpc_client_lib = static_library( - 'virt_net_rpc_client', - [ - rpc_client_sources, - rpc_gen_headers, - ], - dependencies: [ - sasl_dep, - src_dep, - xdr_dep, - ], -) + virt_rpc_client_lib = static_library( + 'virt_net_rpc_client', + [ + rpc_client_sources, + rpc_gen_headers, + ], + dependencies: [ + sasl_dep, + src_dep, + xdr_dep, + ], + ) + + libvirt_libs += [ + virt_rpc_lib, + virt_rpc_client_lib, + virt_rpc_server_lib, + ] +endif rpc_inc_dir = include_directories('.') @@ -143,9 +151,3 @@ rpc_dep = declare_dependency( include_directories: [ rpc_inc_dir ], sources: [ rpc_gen_headers ], ) - -libvirt_libs += [ - virt_rpc_lib, - virt_rpc_client_lib, - virt_rpc_server_lib, -] -- 2.32.0

The logging manager is very closely tied to RPC. If we are building without RPC support there's not much use for the manager, in fact it fails to build. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/libvirt_logging.syms | 18 ++++++++++++++++++ src/libvirt_private.syms | 9 --------- src/logging/meson.build | 31 ++++++++++++++++++------------- 3 files changed, 36 insertions(+), 22 deletions(-) create mode 100644 src/libvirt_logging.syms diff --git a/src/libvirt_logging.syms b/src/libvirt_logging.syms new file mode 100644 index 0000000000..e2a1a7109f --- /dev/null +++ b/src/libvirt_logging.syms @@ -0,0 +1,18 @@ +# +# Domain logging specific symbols +# + + +# logging/log_manager.h +virLogManagerDomainAppendMessage; +virLogManagerDomainGetLogFilePosition; +virLogManagerDomainOpenLogFile; +virLogManagerDomainReadLogFile; +virLogManagerFree; +virLogManagerNew; + + +# Let emacs know we want case-insensitive sorting +# Local Variables: +# sort-fold-case: t +# End: diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 7be5b51100..9900bfbe27 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1666,15 +1666,6 @@ virLockManagerPluginUsesState; virLockManagerRelease; -# logging/log_manager.h -virLogManagerDomainAppendMessage; -virLogManagerDomainGetLogFilePosition; -virLogManagerDomainOpenLogFile; -virLogManagerDomainReadLogFile; -virLogManagerFree; -virLogManagerNew; - - # security/security_driver.h virSecurityDriverLookup; diff --git a/src/logging/meson.build b/src/logging/meson.build index 996d4265fc..89e06a0d5a 100644 --- a/src/logging/meson.build +++ b/src/logging/meson.build @@ -32,20 +32,25 @@ log_daemon_sources = files( 'log_handler.c', ) -log_driver_lib = static_library( - 'virt_log_driver', - [ - log_driver_sources, - log_protocol_generated, - ], - dependencies: [ - rpc_dep, - src_dep, - xdr_dep, - ], -) +if conf.has('WITH_REMOTE') + log_driver_lib = static_library( + 'virt_log_driver', + [ + log_driver_sources, + log_protocol_generated, + ], + dependencies: [ + rpc_dep, + src_dep, + xdr_dep, + ], + ) -libvirt_libs += log_driver_lib + libvirt_libs += log_driver_lib + used_sym_files += 'libvirt_logging.syms' +else + sym_files += 'libvirt_logging.syms' +endif if conf.has('WITH_LIBVIRTD') log_daemon_generated = custom_target( -- 2.32.0

The admin module is very closely tied to RPC. If we are building without RPC support there's not much use for the admin module, in fact it fails to build. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- examples/c/admin/meson.build | 36 ++++++------- src/admin/meson.build | 36 ++++++------- src/meson.build | 98 ++++++++++++++++++------------------ tools/meson.build | 44 ++++++++-------- 4 files changed, 111 insertions(+), 103 deletions(-) diff --git a/examples/c/admin/meson.build b/examples/c/admin/meson.build index 094408a63c..aa7811ebe5 100644 --- a/examples/c/admin/meson.build +++ b/examples/c/admin/meson.build @@ -8,20 +8,22 @@ example_admin_files = [ 'threadpool_params', ] -foreach name : example_admin_files - source_file = '@0@.c'.format(name) - executable( - name, - [ - source_file, - ], - include_directories: [ - libvirt_inc, - ], - link_with: [ - libvirt_lib, - libvirt_admin_lib, - ], - ) - install_data(source_file, install_dir: example_dir / 'c' / 'admin') -endforeach +if conf.has('WITH_REMOTE') + foreach name : example_admin_files + source_file = '@0@.c'.format(name) + executable( + name, + [ + source_file, + ], + include_directories: [ + libvirt_inc, + ], + link_with: [ + libvirt_lib, + libvirt_admin_lib, + ], + ) + install_data(source_file, install_dir: example_dir / 'c' / 'admin') + endforeach +endif diff --git a/src/admin/meson.build b/src/admin/meson.build index f787c6665b..130997fb87 100644 --- a/src/admin/meson.build +++ b/src/admin/meson.build @@ -91,24 +91,26 @@ libvirt_admin_syms_flags = '@0@@1@'.format( libvirt_admin_syms_file.full_path(), ) -admin_driver_lib = static_library( - 'virt_admin_driver', - [ - admin_driver_sources, - admin_driver_generated, - ], - dependencies: [ - rpc_dep, - sasl_dep, - src_dep, - xdr_dep, - ], -) +if conf.has('WITH_REMOTE') + admin_driver_lib = static_library( + 'virt_admin_driver', + [ + admin_driver_sources, + admin_driver_generated, + ], + dependencies: [ + rpc_dep, + sasl_dep, + src_dep, + xdr_dep, + ], + ) -check_protocols += { - 'name': 'admin_protocol', - 'lib': admin_driver_lib, -} + check_protocols += { + 'name': 'admin_protocol', + 'lib': admin_driver_lib, + } +endif virt_conf_files += files('libvirt-admin.conf') diff --git a/src/meson.build b/src/meson.build index 2bd88e6699..2408344ef7 100644 --- a/src/meson.build +++ b/src/meson.build @@ -517,48 +517,48 @@ libvirt_lxc_lib = shared_library( # libvirt-admin.so - -libvirt_admin_lib = shared_library( - 'virt-admin', - [ - admin_sources, - admin_client_generated, - admin_driver_generated, - datatypes_sources, - dtrace_gen_objects, - ], - dependencies: [ - capng_dep, - devmapper_dep, - gnutls_dep, - libssh2_dep, - libssh_dep, - sasl_dep, - src_dep, - rpc_dep, - xdr_dep, - yajl_dep, - ], - include_directories: [ - admin_inc_dir, - remote_inc_dir, - ], - link_args: [ - libvirt_admin_syms_flags, - libvirt_nodelete, - ], - link_with: [ - libvirt_lib, - ], - link_depends: [ - libvirt_admin_syms_file, - ], - install: true, - install_rpath: libvirt_rpath, - version: libvirt_lib_version, - soversion: libvirt_so_version, -) - +if conf.has('WITH_REMOTE') + libvirt_admin_lib = shared_library( + 'virt-admin', + [ + admin_sources, + admin_client_generated, + admin_driver_generated, + datatypes_sources, + dtrace_gen_objects, + ], + dependencies: [ + capng_dep, + devmapper_dep, + gnutls_dep, + libssh2_dep, + libssh_dep, + sasl_dep, + src_dep, + rpc_dep, + xdr_dep, + yajl_dep, + ], + include_directories: [ + admin_inc_dir, + remote_inc_dir, + ], + link_args: [ + libvirt_admin_syms_flags, + libvirt_nodelete, + ], + link_with: [ + libvirt_lib, + ], + link_depends: [ + libvirt_admin_syms_file, + ], + install: true, + install_rpath: libvirt_rpath, + version: libvirt_lib_version, + soversion: libvirt_so_version, + ) +endif # build libvirt shared modules @@ -919,12 +919,14 @@ if host_machine.system() == 'linux' env: runutf8, ) - test( - 'check-admin-symfile', - python3_prog, - args: [ check_symfile_prog.path(), libvirt_admin_syms, libvirt_admin_lib ], - env: runutf8, - ) + if conf.has('WITH_REMOTE') + test( + 'check-admin-symfile', + python3_prog, + args: [ check_symfile_prog.path(), libvirt_admin_syms, libvirt_admin_lib ], + env: runutf8, + ) + endif endif test( diff --git a/tools/meson.build b/tools/meson.build index 3fba313e5f..22fa3604ba 100644 --- a/tools/meson.build +++ b/tools/meson.build @@ -206,27 +206,29 @@ executable( install_rpath: libvirt_rpath, ) -executable( - 'virt-admin', - [ - 'virt-admin.c', - 'virt-admin-completer.c', - ], - dependencies: [ - tools_dep, - readline_dep, - ], - link_args: [ - coverage_flags, - ], - link_with: [ - libvirt_admin_lib, - libvirt_shell_lib, - ], - install: true, - install_dir: bindir, - install_rpath: libvirt_rpath, -) +if conf.has('WITH_REMOTE') + executable( + 'virt-admin', + [ + 'virt-admin.c', + 'virt-admin-completer.c', + ], + dependencies: [ + tools_dep, + readline_dep, + ], + link_args: [ + coverage_flags, + ], + link_with: [ + libvirt_admin_lib, + libvirt_shell_lib, + ], + install: true, + install_dir: bindir, + install_rpath: libvirt_rpath, + ) +endif tools_conf = configuration_data() tools_conf.set('PACKAGE', meson.project_name()) -- 2.32.0

The way our wireshark dissector works is by providing decoders for primitive types (like integers, string, double, etc.) and then parsing virsomethingprotocol.x files and generating complex decoders for RPC. This obviously means that XDR is required for the dissector, but corresponding check was missing. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- meson.build | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/meson.build b/meson.build index cea8bbfa0c..c5f0ee7287 100644 --- a/meson.build +++ b/meson.build @@ -1310,6 +1310,16 @@ endif wireshark_version = '2.6.0' wireshark_dep = dependency('wireshark', version: '>=' + wireshark_version, required: get_option('wireshark_dissector')) +if wireshark_dep.found() + if not xdr_dep.found() + if get_option('wireshark_dissector').enabled() + error('XDR is required for wireshark plugin') + else + wireshark_dep = dependency('', required: false) + endif + endif +endif + if wireshark_dep.found() wireshark_plugindir = get_option('wireshark_plugindir') if wireshark_plugindir == '' -- 2.32.0

If remote driver was disabled there is no need to check whether host has a XDR library installed. Resolves: https://gitlab.com/libvirt/libvirt/-/issues/196 Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- meson.build | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/meson.build b/meson.build index c5f0ee7287..624f37819f 100644 --- a/meson.build +++ b/meson.build @@ -883,32 +883,27 @@ endforeach # early checks where lot of other packages depend on the result -# On MinGW portablexdr provides XDR functions, on linux they are -# provided by libtirpc and on FreeBSD/macOS there is no need to -# use extra library as it's provided by libc directly. -if host_machine.system() == 'windows' - xdr_dep = cc.find_library('portablexdr', required: false) -elif host_machine.system() == 'linux' - xdr_dep = dependency('libtirpc', required: false) -elif host_machine.system() in [ 'freebsd', 'darwin' ] - xdr_dep = cc.find_library('c', required: false) -else - xdr_dep = dependency('', required: false) -endif - if not get_option('driver_remote').disabled() - use_remote = true - - if not xdr_dep.found() - use_remote = false - if get_option('driver_remote').enabled() - error('XDR is required for remote driver') - endif + # On MinGW portablexdr provides XDR functions, on linux they are + # provided by libtirpc and on FreeBSD/macOS there is no need to + # use extra library as it's provided by libc directly. + if host_machine.system() == 'windows' + xdr_dep = cc.find_library('portablexdr', required: get_option('driver_remote')) + elif host_machine.system() == 'linux' + xdr_dep = dependency('libtirpc', required: get_option('driver_remote')) + elif host_machine.system() in [ 'freebsd', 'darwin' ] + xdr_dep = cc.find_library('c', required: get_option('driver_remote')) + else + xdr_dep = dependency('', required: false) endif - if use_remote + if xdr_dep.found() conf.set('WITH_REMOTE', 1) + elif get_option('driver_remote').enabled() + error('XDR is required for remote driver') endif +else + xdr_dep = dependency('', required: false) endif -- 2.32.0

On a Wednesday in 2021, Michal Privoznik wrote:
It's not much that's left when no XDR library is found, but some users might want just stateless drivers.
BTW: there is still one pending issue - if no XDR library is found then remote driver is turned off which in turn means libvirtd is turned off. Until here it makes sense. But what I don't understand is why qemu driver depends on libvirtd, since it has embed mode. Transitively, why any driver depends on libvird?
Michal Prívozník (7): libvirt-stream: Don't require RPC module rpc: Separate out socket code into another static lib rpc: Build only when XDR is available logging: Build log manager only when RPC is available admin: Build only when RPC is available meson: Require XDR for wireshark meson: Detect XDR only when needed
examples/c/admin/meson.build | 36 +++++----- meson.build | 47 ++++++------ src/admin/meson.build | 36 +++++----- src/libvirt-stream.c | 6 +- src/libvirt_logging.syms | 18 +++++ src/libvirt_private.syms | 9 --- src/libvirt_remote.syms | 56 --------------- src/libvirt_socket.syms | 65 +++++++++++++++++ src/logging/meson.build | 31 ++++---- src/meson.build | 98 ++++++++++++------------- src/rpc/meson.build | 136 ++++++++++++++++++++--------------- tools/meson.build | 44 ++++++------ 12 files changed, 322 insertions(+), 260 deletions(-) create mode 100644 src/libvirt_logging.syms create mode 100644 src/libvirt_socket.syms
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano
participants (2)
-
Ján Tomko
-
Michal Privoznik