[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