[libvirt PATCH 156/351] meson: src: build libvirt-admin.so library

Pavel Hrdina phrdina at redhat.com
Thu Jul 16 09:56:32 UTC 2020


We have to compile the libvirt-admin.so outside of src/admin directory
because it depends on libvirt.so.

Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
---
 configure.ac              |  1 -
 m4/virt-win-symbols.m4    | 31 ----------------
 src/Makefile.am           |  1 -
 src/admin/Makefile.inc.am | 75 ---------------------------------------
 src/admin/meson.build     | 43 ++++++++++++++++++++++
 src/meson.build           | 44 +++++++++++++++++++++++
 src/remote/meson.build    |  2 ++
 7 files changed, 89 insertions(+), 108 deletions(-)
 delete mode 100644 m4/virt-win-symbols.m4

diff --git a/configure.ac b/configure.ac
index e6c7e50bb14..af52f957cb2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -91,7 +91,6 @@ PKG_PROG_PKG_CONFIG
 
 
 dnl MinGW checks
-LIBVIRT_WIN_CHECK_SYMBOLS
 LIBVIRT_WIN_CHECK_WINDRES
 
 
diff --git a/m4/virt-win-symbols.m4 b/m4/virt-win-symbols.m4
deleted file mode 100644
index 5ffee491877..00000000000
--- a/m4/virt-win-symbols.m4
+++ /dev/null
@@ -1,31 +0,0 @@
-dnl The MinGW symbols checks
-dnl
-dnl Copyright (C) 2016 Red Hat, Inc.
-dnl
-dnl This library is free software; you can redistribute it and/or
-dnl modify it under the terms of the GNU Lesser General Public
-dnl License as published by the Free Software Foundation; either
-dnl version 2.1 of the License, or (at your option) any later version.
-dnl
-dnl This library is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-dnl Lesser General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU Lesser General Public
-dnl License along with this library.  If not, see
-dnl <http://www.gnu.org/licenses/>.
-dnl
-
-AC_DEFUN([LIBVIRT_WIN_CHECK_SYMBOLS], [
-  LIBVIRT_ADMIN_SYMBOL_FILE=admin/libvirt_admin.syms
-  case "$host" in
-    *-*-mingw* )
-      # Also set the symbol file to .def, so src/Makefile generates libvirt.def
-      # from libvirt.syms and passes libvirt.def instead of libvirt.syms to the
-      # linker
-      LIBVIRT_ADMIN_SYMBOL_FILE=admin/libvirt_admin.def
-      ;;
-  esac
-  AC_SUBST([LIBVIRT_ADMIN_SYMBOL_FILE])
-])
diff --git a/src/Makefile.am b/src/Makefile.am
index 45aee9bea1d..71a55e235f2 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -29,7 +29,6 @@ AM_LDFLAGS_MOD_NOUNDEF = $(AM_LDFLAGS_MOD) $(NO_UNDEFINED_LDFLAGS)
 nodist_conf_DATA =
 DRIVER_SOURCE_FILES =
 STATEFUL_DRIVER_SOURCE_FILES =
-lib_LTLIBRARIES =
 noinst_LTLIBRARIES =
 mod_LTLIBRARIES =
 INSTALL_DATA_DIRS =
diff --git a/src/admin/Makefile.inc.am b/src/admin/Makefile.inc.am
index afe44437b74..bdaed14cd19 100644
--- a/src/admin/Makefile.inc.am
+++ b/src/admin/Makefile.inc.am
@@ -1,65 +1,9 @@
 # vim: filetype=automake
 
-ADMIN_PROTOCOL = $(srcdir)/admin/admin_protocol.x
-
-ADMIN_PROTOCOL_GENERATED = \
-	admin/admin_client.h \
-	$(NULL)
-
-GENERATED_SYM_FILES += admin/libvirt_admin.syms admin/libvirt_admin.def
-
 ADMIN_SYM_FILES = $(srcdir)/admin/libvirt_admin_private.syms
 
 conf_DATA += admin/libvirt-admin.conf
 
-lib_LTLIBRARIES += libvirt-admin.la
-
-libvirt_admin_la_SOURCES = \
-	admin/libvirt-admin.c \
-	$(DATATYPES_SOURCES)
-
-nodist_libvirt_admin_la_SOURCES = \
-	$(ADMIN_PROTOCOL_GENERATED)
-
-libvirt_admin_la_LDFLAGS = \
-	$(VERSION_SCRIPT_FLAGS)$(LIBVIRT_ADMIN_SYMBOL_FILE) \
-	-version-info $(LIBVIRT_VERSION_INFO) \
-	$(LIBVIRT_NODELETE) \
-	$(AM_LDFLAGS) \
-	$(NULL)
-
-libvirt_admin_la_LIBADD = \
-	libvirt.la \
-	$(XDR_LIBS) \
-	$(CAPNG_LIBS) \
-	$(YAJL_LIBS) \
-	$(DEVMAPPER_LIBS) \
-	$(LIBXML_LIBS) \
-	$(GLIB_LIBS) \
-	$(SSH2_LIBS) \
-	$(SASL_LIBS) \
-	$(GNUTLS_LIBS) \
-	$(LIBSSH_LIBS)
-
-if WITH_DTRACE_PROBES
-libvirt_admin_la_LIBADD += libvirt_probes.lo
-endif WITH_DTRACE_PROBES
-
-libvirt_admin_la_CFLAGS = \
-	$(AM_CFLAGS) \
-	-I$(builddir)/admin \
-	-I$(builddir)/access \
-	-I$(srcdir)/remote \
-	-I$(srcdir)/rpc \
-	-I$(builddir)/rpc \
-	$(XDR_CFLAGS) \
-	$(CAPNG_CFLAGS) \
-	$(YAJL_CFLAGS) \
-	$(SSH2_CFLAGS) \
-	$(SASL_CFLAGS) \
-	$(GNUTLS_CFLAGS) \
-	$(LIBSSH_CFLAGS)
-
 if WITH_LINUX
 check-admin-symfile: admin/libvirt_admin.syms libvirt-admin.la
 	$(AM_V_GEN)$(RUNUTF8) $(PYTHON) $(top_srcdir)/scripts/check-symfile.py \
@@ -77,22 +21,3 @@ check-admin-drivername:
 		$(srcdir)/admin/libvirt_admin_public.syms
 
 check-admin: check-admin-symfile check-admin-symsorting check-admin-drivername
-
-admin/admin_client.h: $(srcdir)/rpc/gendispatch.pl \
-		$(ADMIN_PROTOCOL) Makefile.am
-	$(AM_V_GEN)$(PERL) -w $(srcdir)/rpc/gendispatch.pl --mode=client \
-	  admin ADMIN $(ADMIN_PROTOCOL) \
-	  > admin/admin_client.h
-
-admin/libvirt_admin.syms: admin/libvirt_admin_public.syms $(ADMIN_SYM_FILES) \
-		$(top_builddir)/config.status
-	$(AM_V_GEN)rm -f $@-tmp $@ ; \
-	printf '# WARNING: generated from the following:\n# $^\n\n' >$@-tmp && \
-	cat $(srcdir)/admin/libvirt_admin_public.syms >>$@-tmp && \
-	printf '\n\n# Private symbols\n\n' >>$@-tmp && \
-	printf 'LIBVIRT_ADMIN_PRIVATE_$(VERSION) {\n\n'  >>$@-tmp && \
-	printf 'global:\n\n' >>$@-tmp && \
-	cat $(ADMIN_SYM_FILES) >>$@-tmp && \
-	printf '\n\nlocal:\n*;\n\n};' >>$@-tmp && \
-	chmod a-w $@-tmp && \
-	mv $@-tmp admin/libvirt_admin.syms
diff --git a/src/admin/meson.build b/src/admin/meson.build
index 31d1a437fbe..3522d789a00 100644
--- a/src/admin/meson.build
+++ b/src/admin/meson.build
@@ -35,6 +35,47 @@ admin_driver_generated += custom_target(
   capture: true,
 )
 
+admin_sources = files(
+  'libvirt-admin.c',
+)
+
+admin_client_generated = custom_target(
+  'admin_client.h',
+  input: admin_driver_protocol,
+  output: 'admin_client.h',
+  command: [
+    gendispatch_prog, '--mode=client', 'admin', 'ADMIN', '@INPUT@',
+  ],
+  capture: true,
+)
+
+libvirt_admin_syms = custom_target(
+  'libvirt_admin.syms',
+  input: [
+    'libvirt_admin_public.syms',
+    'libvirt_admin_private.syms',
+  ],
+  output: 'libvirt_admin.syms',
+  command: [ gen_sym_files_prog, 'LIBVIRT_ADMIN_PRIVATE_' + meson.project_version(), '@INPUT@' ],
+  capture: true,
+)
+libvirt_admin_syms_file = libvirt_admin_syms
+if host_machine.system() == 'windows'
+  libvirt_admin_def = custom_target(
+    'libvirt_admin.def',
+    input: libvirt_admin_syms,
+    output: 'libvirt_admin.def',
+    command: [ gen_def_files_prog, '@INPUT@' ],
+    capture: true,
+  )
+  libvirt_admin_syms_file = libvirt_admin_def
+endif
+
+libvirt_admin_syms_flags = '@0@@1@'.format(
+  version_script_flags,
+  libvirt_admin_syms_file.full_path(),
+)
+
 admin_driver_lib = static_library(
   'virt_admin_driver',
   [
@@ -50,3 +91,5 @@ admin_driver_lib = static_library(
 )
 
 libvirt_libs += admin_driver_lib
+
+admin_inc_dir = include_directories('.')
diff --git a/src/meson.build b/src/meson.build
index f324b165f99..9c088014415 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -355,3 +355,47 @@ libvirt_lxc_lib = shared_library(
   version: libvirt_lib_version,
   soversion: libvirt_so_version,
 )
+
+
+# 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: libdir,
+  version: libvirt_lib_version,
+  soversion: libvirt_so_version,
+)
diff --git a/src/remote/meson.build b/src/remote/meson.build
index a667f15ecf2..3de6c5ee1f4 100644
--- a/src/remote/meson.build
+++ b/src/remote/meson.build
@@ -65,3 +65,5 @@ if conf.has('WITH_REMOTE')
 else
   sym_files += 'libvirt_remote.syms'
 endif
+
+remote_inc_dir = include_directories('.')
-- 
2.26.2




More information about the libvir-list mailing list