Signed-off-by: Eduardo Lima (Etrunko) <etrunko@xxxxxxxxxx> --- In v2: - Add meson.build files to EXTRA_DIST - Fix typo meson meson_vesrion -> meson_version - Minimal cleanups --- Makefile.am | 3 + data/Makefile.am | 1 + data/meson.build | 16 ++++ icons/Makefile.am | 2 + icons/meson.build | 14 ++++ man/Makefile.am | 1 + man/meson.build | 16 ++++ meson.build | 203 ++++++++++++++++++++++++++++++++++++++++++++++ meson_options.txt | 25 ++++++ po/meson.build | 2 + src/Makefile.am | 1 + src/meson.build | 116 ++++++++++++++++++++++++++ tests/Makefile.am | 2 + tests/meson.build | 16 ++++ 14 files changed, 418 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/Makefile.am b/Makefile.am index d33367a..dcbe49b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -19,6 +19,9 @@ EXTRA_DIST = \ build-aux/vc-list-files \ AUTHORS.in \ README.md \ + meson.build \ + meson_options.txt \ + po/meson.build \ $(NULL) DISTCLEAN_FILES = \ diff --git a/data/Makefile.am b/data/Makefile.am index 54be2b1..afc3be8 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -4,6 +4,7 @@ MANUFACTURER = Virt Manager Project EXTRA_DIST = \ virt-viewer.wxs.in \ + meson.build \ $(NULL) # this make sure those files are regenerated when they change 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@.in'.format(target), + output : target, + command : [intltool, '--@0@-style'.format(style), podir, '@INPUT@', '@OUTPUT@'], + install : true, + install_dir : join_paths(virt_viewer_datadir, dir)) +endforeach diff --git a/icons/Makefile.am b/icons/Makefile.am index 0b4c247..978a0c0 100644 --- a/icons/Makefile.am +++ b/icons/Makefile.am @@ -10,4 +10,6 @@ ico_sizes = 16 32 48 256 %.ico: $(foreach s,$(ico_sizes),$(s)x$(s)/%.png) $(AM_V_GEN)$(ICOTOOL) -c -o $@ $^ +EXTRA_DIST = meson.build + -include $(top_srcdir)/git.mk 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/Makefile.am b/man/Makefile.am index 39b6019..7db1b20 100644 --- a/man/Makefile.am +++ b/man/Makefile.am @@ -8,6 +8,7 @@ dist_man_MANS = \ EXTRA_DIST = \ remote-viewer.pod \ virt-viewer.pod \ + meson.build \ $(NULL) MAINTAINERCLEANFILES = $(dist_man_MANS) 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@.1'.format(m) + pod = '@0@.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..578a3d3 --- /dev/null +++ b/meson.build @@ -0,0 +1,203 @@ +project('virt-viewer', 'c', + version : '8.0', + license : 'GPLv2', + meson_version : '>= 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_required = '>= @0@'.format(glib2_version) +gtk_version = '3.12' +gtk_required = '>= @0@'.format(gtk_version) +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_@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_@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 + +glib2_encoded_version = 'GLIB_VERSION_@0@'.format(glib2_version.underscorify()) +gtk_encoded_version = 'GDK_VERSION_@0@'.format(gtk_version.underscorify()) + +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 = '-@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/Makefile.am b/src/Makefile.am index 0472908..4b61797 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -22,6 +22,7 @@ EXTRA_DIST = \ virt-viewer-enums.c.etemplate \ virt-viewer-enums.h.etemplate \ resources/virt-viewer.gresource.xml \ + meson.build \ $(NULL) ENUMS_FILES = \ 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/Makefile.am b/tests/Makefile.am index dfa161b..e58bdf8 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -48,4 +48,6 @@ redirect_test_LDFLAGS = -Wl,--subsystem,windows redirect_test_CPPFLAGS = $(GLIB2_CFLAGS) endif +EXTRA_DIST = meson.build + -include $(top_srcdir)/git.mk 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@.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 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list