[virt-tools-list] [PATCH virt-viewer 2/2] Add support for building with meson/ninja
Eduardo Lima (Etrunko)
etrunko at redhat.com
Wed Sep 12 09:07:59 UTC 2018
Signed-off-by: Eduardo Lima (Etrunko) <etrunko at redhat.com>
---
data/meson.build | 16 ++++
icons/meson.build | 14 ++++
man/meson.build | 16 ++++
meson.build | 206 ++++++++++++++++++++++++++++++++++++++++++++++
meson_options.txt | 25 ++++++
po/meson.build | 2 +
src/meson.build | 116 ++++++++++++++++++++++++++
tests/meson.build | 16 ++++
8 files changed, 411 insertions(+)
create mode 100644 data/meson.build
create mode 100644 icons/meson.build
create mode 100644 man/meson.build
create mode 100644 meson.build
create mode 100644 meson_options.txt
create mode 100644 po/meson.build
create mode 100644 src/meson.build
create mode 100644 tests/meson.build
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 0000000..f57e751
--- /dev/null
+++ b/data/meson.build
@@ -0,0 +1,16 @@
+intltool = find_program('intltool-merge')
+podir = join_paths(meson.source_root(), 'po')
+
+targets = {'remote-viewer.desktop' : 'applications',
+ 'remote-viewer.appdata.xml' : 'appdata',
+ 'virt-viewer-mime.xml' : 'mime/packages'}
+
+foreach target, dir : targets
+ style = target.split('.')[-1]
+ custom_target(target,
+ input : '@0 at .in'.format(target),
+ output : target,
+ command : [intltool, '-- at 0@-style'.format(style), podir, '@INPUT@', '@OUTPUT@'],
+ install : true,
+ install_dir : join_paths(virt_viewer_datadir, dir))
+endforeach
diff --git a/icons/meson.build b/icons/meson.build
new file mode 100644
index 0000000..8a7741f
--- /dev/null
+++ b/icons/meson.build
@@ -0,0 +1,14 @@
+dirs = [
+ '16x16',
+ '22x22',
+ '24x24',
+ '32x32',
+ '48x48',
+ '256x256'
+]
+
+foreach d : dirs
+ file = files('@0@/virt-viewer.png'.format(d))
+ dir = join_paths(virt_viewer_datadir, 'icons', 'hicolor', d, 'apps')
+ install_data(file, install_dir : dir)
+endforeach
diff --git a/man/meson.build b/man/meson.build
new file mode 100644
index 0000000..9d79bd0
--- /dev/null
+++ b/man/meson.build
@@ -0,0 +1,16 @@
+pod2man = find_program('pod2man')
+manuals = ['remote-viewer', 'virt-viewer']
+
+if pod2man.found()
+ foreach m : manuals
+ man = '@0 at .1'.format(m)
+ pod = '@0 at .pod'.format(m)
+ custom_target(man,
+ output : man,
+ input : pod,
+ install : true,
+ install_dir : join_paths(virt_viewer_datadir, 'man', 'man1'),
+ build_by_default : true,
+ command : [pod2man, '-c', 'Virtualization Support', '@INPUT@', '@OUTPUT@'])
+ endforeach
+endif
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..4c6729d
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,206 @@
+project('virt-viewer', 'c',
+ version : '8.0',
+ license : 'GPLv2',
+ meson_vesrion : '>= 0.47.0')
+
+#
+# globals
+#
+virt_viewer_deps = []
+virt_viewer_include = [include_directories('.')]
+virt_viewer_config_data = configuration_data()
+virt_viewer_package_name = meson.project_name()
+virt_viewer_version = meson.project_version()
+virt_viewer_datadir = join_paths(get_option('prefix'), get_option('datadir'))
+virt_viewer_localedir = join_paths(virt_viewer_datadir, 'locale')
+
+virt_viewer_cflags = ['-DG_LOG_DOMAIN="@0@"'.format(virt_viewer_package_name),
+ '-Wall',
+ '-Wmissing-prototypes',
+ '-std=c99',
+ '-Wnested-externs',
+ '-Wpointer-arith',
+ '-Wextra',
+ '-Wshadow',
+ '-Wcast-align',
+ '-Wwrite-strings',
+ '-Waggregate-return',
+ '-Winline',
+ '-Wredundant-decls',
+ '-Wdeprecated-declarations',
+ '-Wno-sign-compare',
+ '-Wno-cast-function-type',
+ '-Werror']
+
+compiler = meson.get_compiler('c')
+
+# dependency versions
+glib2_version='2.38'
+glib2_major_minor = glib2_version.split('.')
+glib2_required = '>= @0@'.format(glib2_version)
+glib2_encoded_version='GLIB_VERSION_ at 0@_ at 1@'.format(glib2_major_minor[0], glib2_major_minor[1])
+
+gtk_version='3.12'
+gtk_major_minor = gtk_version.split('.')
+gtk_required = '>= @0@'.format(gtk_version)
+gtk_encoded_version='GDK_VERSION_ at 0@_ at 1@'.format(gtk_major_minor[0], gtk_major_minor[1])
+
+libxml2_required='>= 2.6.0'
+libvirt_required='>= 0.10.0'
+libvirt_glib_required='>= 0.1.8'
+gtk_vnc_required='>= 0.4.0'
+spice_gtk_required='>= 0.35'
+spice_protocol_required='>= 0.12.7'
+govirt_required='>= 0.3.3'
+rest_required='>= 0.8'
+
+#
+# check system headers
+#
+headers = ['sys/socket.h', 'sys/un.h', 'windows.h']
+foreach header : headers
+ if compiler.has_header(header)
+ virt_viewer_config_data.set('HAVE_ at 0@'.format(header.underscorify().to_upper()), '1')
+ endif
+endforeach
+
+#
+# check system functions
+#
+functions = ['fork', 'socketpair']
+foreach function : functions
+ if compiler.has_function(function)
+ virt_viewer_config_data.set('HAVE_ at 0@'.format(function.underscorify().to_upper()), '1')
+ endif
+endforeach
+
+#
+# Check for dependencies
+#
+virt_viewer_deps = [compiler.find_library('m')]
+
+# mandatory deps
+deps = {'glib-2.0' : glib2_required,
+ 'gio-2.0' : glib2_required,
+ 'gthread-2.0' : glib2_required,
+ 'gmodule-export-2.0': glib2_required,
+ 'gtk+-3.0' : gtk_required,
+ 'libxml-2.0' : libxml2_required}
+
+foreach dep, version : deps
+ virt_viewer_deps += dependency(dep, version : version)
+endforeach
+virt_viewer_cflags += ['-DGLIB_VERSION_MIN_REQUIRED=@0@'.format(glib2_encoded_version),
+ '-DGLIB_VERSION_MAX_ALLOWED=@0@'.format(glib2_encoded_version),
+ '-DGDK_VERSION_MIN_REQUIRED=@0@'.format(gtk_encoded_version),
+ '-DGDK_VERSION_MAX_ALLOWED=@0@'.format(gtk_encoded_version)]
+
+# optional deps
+
+# libvirt
+virt_viewer_has_libvirt = false
+
+libvirt_dep = dependency('libvirt', version : libvirt_required, required : get_option('libvirt'))
+libvirt_glib_dep = dependency('libvirt-glib-1.0', version : libvirt_glib_required, required : get_option('libvirt'))
+
+if libvirt_dep.found() and libvirt_glib_dep.found()
+ virt_viewer_deps += [libvirt_dep, libvirt_glib_dep]
+
+ if compiler.has_function('virDomainOpenGraphicsFD', dependencies : libvirt_dep)
+ virt_viewer_config_data.set('HAVE_VIR_DOMAIN_OPEN_GRAPHICS_FD', '1')
+ endif
+
+ virt_viewer_config_data.set('HAVE_LIBVIRT', '1')
+ virt_viewer_has_libvirt = true
+endif
+
+# gtk-vnc
+virt_viewer_has_gtk_vnc = false
+gtk_vnc_dep = dependency('gtk-vnc-2.0', version : gtk_vnc_required, required : get_option('gtk-vnc'))
+
+if gtk_vnc_dep.found()
+ virt_viewer_deps += gtk_vnc_dep
+ virt_viewer_config_data.set('HAVE_GTK_VNC', '1')
+ virt_viewer_has_gtk_vnc = true
+endif
+
+# spice-gtk
+virt_viewer_has_spice_gtk = false
+spice_protocol_dep = dependency('spice-protocol', version : spice_protocol_required, required : get_option('spice-gtk'))
+spice_glib_dep = dependency('spice-client-glib-2.0', version : spice_gtk_required, required : get_option('spice-gtk'))
+spice_gtk_dep = dependency('spice-client-gtk-3.0', version : spice_gtk_required, required : get_option('spice-gtk'))
+
+if spice_protocol_dep.found() and spice_glib_dep.found() and spice_gtk_dep.found()
+ virt_viewer_deps += [spice_protocol_dep, spice_glib_dep, spice_gtk_dep]
+ virt_viewer_config_data.set('HAVE_SPICE_GTK', '1')
+ virt_viewer_has_spice_gtk = true
+endif
+
+# ovirt
+virt_viewer_has_ovirt = false
+rest_dep = dependency('rest-0.7', version : rest_required, required : get_option('ovirt'))
+ovirt_dep = dependency('govirt-1.0', version : govirt_required, required: get_option('ovirt'))
+
+if rest_dep.found() and ovirt_dep.found()
+ virt_viewer_deps += [rest_dep, ovirt_dep]
+
+ if (compiler.has_function('ovirt_api_search_vms', dependencies : ovirt_dep) and
+ compiler.has_function('ovirt_vm_get_host', dependencies : ovirt_dep) and
+ compiler.has_function('ovirt_host_get_cluster', dependencies : ovirt_dep) and
+ compiler.has_function('ovirt_cluster_get_data_center', dependencies : ovirt_dep))
+ virt_viewer_config_data.set('HAVE_OVIRT_DATA_CENTER', '1')
+ endif
+
+ virt_viewer_config_data.set('HAVE_OVIRT', '1')
+ virt_viewer_has_ovirt = true
+endif
+
+osid = get_option('osid')
+if osid.strip() != ''
+ virt_viewer_config_data.set_quoted('REMOTE_VIEWER_OS_ID', osid)
+endif
+
+buildid = get_option('buildid')
+if buildid.strip() == '0'
+ buildid = ''
+else
+ buildid = '- at 0@'.format(buildid)
+endif
+
+virt_viewer_config_data.set_quoted('BUILDID', '@0@'.format(buildid))
+
+#
+# global C defines
+#
+add_project_arguments(compiler.get_supported_arguments(virt_viewer_cflags),
+ language : 'c')
+
+#
+# Subdirectories
+#
+subdir('src')
+subdir('tests')
+subdir('icons')
+subdir('po')
+subdir('data')
+subdir('man')
+
+#
+# Write config.h
+#
+
+config_data = {'PACKAGE' : virt_viewer_package_name,
+ 'GETTEXT_PACKAGE' : virt_viewer_package_name,
+ 'VERSION' : virt_viewer_version,
+ 'PACKAGE_VERSION' : virt_viewer_version,
+ 'LOCALE_DIR' : virt_viewer_localedir}
+
+foreach key, value : config_data
+ virt_viewer_config_data.set_quoted(key, value)
+endforeach
+
+virt_viewer_config_data.set('_GNU_SOURCE', '')
+
+configure_file(output : 'config.h',
+ install : false,
+ configuration : virt_viewer_config_data)
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..cb39516
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,25 @@
+option('libvirt',
+ type : 'feature',
+ description: 'Enable libvirt')
+
+option('gtk-vnc',
+ type : 'feature',
+ description: 'Enable gtk-vnc')
+
+option('spice-gtk',
+ type : 'feature',
+ description: 'Enable spice-gtk')
+
+option('ovirt',
+ type : 'feature',
+ description: 'Enable ovirt')
+
+option('osid',
+ type : 'string',
+ description: 'OS ID for this build')
+
+option('buildid',
+ type : 'string',
+ value : '0',
+ description: 'Set additional build version details')
+
diff --git a/po/meson.build b/po/meson.build
new file mode 100644
index 0000000..a2a36b8
--- /dev/null
+++ b/po/meson.build
@@ -0,0 +1,2 @@
+i18n = import('i18n')
+i18n.gettext('virt-viewer')
diff --git a/src/meson.build b/src/meson.build
new file mode 100644
index 0000000..29026f5
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,116 @@
+virt_viewer_include += [include_directories('.')]
+gnome = import('gnome')
+
+virt_viewer_gresource = files('resources/virt-viewer.gresource.xml')
+virt_viewer_resources = gnome.compile_resources('virt-viewer-resources',
+ virt_viewer_gresource,
+ source_dir : 'resources',
+ c_name : 'virt_viewer')
+virt_viewer_enums = gnome.mkenums_simple('virt-viewer-enums', sources : ['virt-viewer-display.h'])
+
+# libvirt-viewer-util
+libvirt_viewer_util_sources = [
+ 'virt-viewer-util.h',
+ 'virt-viewer-util.c',
+]
+
+libvirt_viewer_util_lib = static_library('virt-viewer-util', libvirt_viewer_util_sources,
+ include_directories : virt_viewer_include,
+ dependencies : virt_viewer_deps,
+ install : false)
+
+# libvirt-viewer
+libvirt_viewer_sources = [
+ virt_viewer_resources,
+ virt_viewer_enums,
+ 'glib-compat.h',
+ 'glib-compat.c',
+ 'virt-viewer-auth.h',
+ 'virt-viewer-auth.c',
+ 'virt-viewer-app.h',
+ 'virt-viewer-app.c',
+ 'virt-viewer-file.h',
+ 'virt-viewer-file.c',
+ 'virt-viewer-session.h',
+ 'virt-viewer-session.c',
+ 'virt-viewer-display.h',
+ 'virt-viewer-display.c',
+ 'virt-viewer-notebook.h',
+ 'virt-viewer-notebook.c',
+ 'virt-viewer-window.h',
+ 'virt-viewer-window.c',
+ 'virt-viewer-vm-connection.h',
+ 'virt-viewer-vm-connection.c',
+ 'virt-viewer-timed-revealer.c',
+ 'virt-viewer-timed-revealer.h',
+]
+
+if virt_viewer_has_gtk_vnc
+ libvirt_viewer_sources += ['virt-viewer-session-vnc.h',
+ 'virt-viewer-session-vnc.c',
+ 'virt-viewer-display-vnc.h',
+ 'virt-viewer-display-vnc.c']
+endif
+
+if virt_viewer_has_spice_gtk
+ libvirt_viewer_sources += ['virt-viewer-session-spice.h',
+ 'virt-viewer-session-spice.c',
+ 'virt-viewer-display-spice.h',
+ 'virt-viewer-display-spice.c',
+ 'virt-viewer-file-transfer-dialog.h',
+ 'virt-viewer-file-transfer-dialog.c']
+endif
+
+if virt_viewer_has_ovirt
+ libvirt_viewer_sources += ['ovirt-foreign-menu.h',
+ 'ovirt-foreign-menu.c',
+ 'remote-viewer-iso-list-dialog.c',
+ 'remote-viewer-iso-list-dialog.h']
+endif
+
+libvirt_viewer_lib = static_library('virt-viewer', libvirt_viewer_sources,
+ include_directories : virt_viewer_include,
+ dependencies : virt_viewer_deps,
+ install: false)
+
+# remote-viewer
+remote_viewer_sources = [
+ virt_viewer_enums[1],
+ 'remote-viewer.h',
+ 'remote-viewer.c',
+ 'remote-viewer-connect.c',
+ 'remote-viewer-connect.h',
+ 'remote-viewer-main.c',
+]
+
+executable('remote-viewer',
+ remote_viewer_sources,
+ include_directories : virt_viewer_include,
+ dependencies : virt_viewer_deps,
+ link_with : [libvirt_viewer_util_lib, libvirt_viewer_lib],
+ install : false)
+
+# virt-viewer
+virt_viewer_sources = [
+ virt_viewer_enums[1],
+ 'virt-viewer.h',
+ 'virt-viewer.c',
+ 'virt-viewer-main.c',
+]
+
+if virt_viewer_has_libvirt
+ executable('virt-viewer',
+ virt_viewer_sources,
+ include_directories : virt_viewer_include,
+ dependencies : virt_viewer_deps,
+ link_with : [libvirt_viewer_util_lib, libvirt_viewer_lib],
+ install : true)
+endif
+
+# virt-viewer.rc
+virt_viewer_rc = configuration_data()
+virt_viewer_rc.set('VERSION', virt_viewer_version)
+virt_viewer_rc.set('PACKAGE_STRING', '@0@ @1@'.format(virt_viewer_package_name, virt_viewer_version))
+configure_file(input : 'virt-viewer.rc.in',
+ output : 'virt-viewer.rc',
+ configuration : virt_viewer_rc)
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 0000000..3e41a7f
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,16 @@
+tests = {
+ 'test-version-compare' : [],
+ 'test-monitor-mapping' : [],
+ 'test-hotkeys' : [libvirt_viewer_lib],
+ 'test-monitor-alignment' : [],
+}
+
+foreach t, libs : tests
+ test(t,
+ executable(t,
+ ['@0 at .c'.format(t), virt_viewer_enums[1]],
+ include_directories : virt_viewer_include,
+ dependencies : virt_viewer_deps,
+ link_with : [libvirt_viewer_util_lib, libs],
+ install : false))
+endforeach
--
2.17.1
More information about the virt-tools-list
mailing list