[Spice-devel] [PATCH spice-gtk 1/3] Add support for building with meson
Christophe Fergeau
cfergeau at redhat.com
Thu May 3 15:24:55 UTC 2018
Hey,
So I've experimented with this today, couple of comments/suggested
improvements/fixes/missing things/...
It might be worth to have some short document somewhere describing the
meson/ninja equivalent for (at least)
make CFLAGS="-Wno-error"
./configure (eg meson configure --prefix "/home/foo")
make dist
make check
I noticed "ninja" does not build the tests while "make" does. During the
tests, test-mock-acl-helper is considered a standalone test which
should be run as part of "ninja test", while it's not supposed to be run
this way, it's a helper for usb-acl-helper.c
I don't know how to skip the error:
"Installing /home/teuf/redhat/spice-gtk/data/org.spice-space.lowlevelusbaccess.policy to /usr/share/polkit-1/actions"
"PermissionError: [Errno 13] Permission denied: '/usr/share/polkit-1/actions/org.spice-space.lowlevelusbaccess.policy'"
(ie is there a 'make -k' equivalent?)
src/meson.build still has:
# FIXME: provide install script for setuid https://github.com/mesonbuild/meson/issues/3328
#-chown root $(DESTDIR)$(acldir)/spice-client-glib-usb-acl-helper
#-chmod u+s $(DESTDIR)$(acldir)/spice-client-glib-usb-acl-helper
We also lost this bit of magic with meson, -Werror is always enabled,
while with autoconf/automake we had:
AC_ARG_ENABLE([werror],
AS_HELP_STRING([--enable-werror], [Use -Werror (if supported)]),
[set_werror="$enableval"],
[if test -d $srcdir/.git; then
is_git_version=true
set_werror=yes
else
set_werror=no
fi])
so that when building release tarballs we don't have -Werror by default.
See attachment for some proposed changes that can be squashed in.
Christophe
On Fri, Apr 27, 2018 at 04:25:41PM -0300, Eduardo Lima (Etrunko) wrote:
> Signed-off-by: Eduardo Lima (Etrunko) <etrunko at redhat.com>
> ---
> Makefile.am | 4 +
> data/Makefile.am | 1 +
> data/meson.build | 4 +
> doc/Makefile.am | 2 +
> doc/meson.build | 1 +
> doc/reference/Makefile.am | 2 +
> doc/reference/meson.build | 51 ++++++
> man/Makefile.am | 1 +
> man/meson.build | 11 ++
> meson.build | 405 ++++++++++++++++++++++++++++++++++++++++++
> meson_options.txt | 94 ++++++++++
> po/meson.build | 3 +
> src/Makefile.am | 1 +
> src/meson.build | 371 ++++++++++++++++++++++++++++++++++++++
> subprojects/spice-common.wrap | 4 +
> tests/Makefile.am | 2 +
> tests/meson.build | 28 +++
> tools/Makefile.am | 2 +
> tools/meson.build | 30 ++++
> vapi/Makefile.am | 1 +
> vapi/meson.build | 13 ++
> 21 files changed, 1031 insertions(+)
> create mode 100644 data/meson.build
> create mode 100644 doc/meson.build
> create mode 100644 doc/reference/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 subprojects/spice-common.wrap
> create mode 100644 tests/meson.build
> create mode 100644 tools/meson.build
> create mode 100644 vapi/meson.build
>
> diff --git a/Makefile.am b/Makefile.am
> index 8717cbc..7d7faf4 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -25,6 +25,10 @@ endif
> DISTCLEANFILES = $(pkgconfig_DATA)
>
> EXTRA_DIST = \
> + meson.build \
> + meson_options.txt \
> + po/meson.build \
> + subprojects/spice-common.wrap \
> build-aux/git-version-gen \
> gtk-doc.make \
> .version \
> diff --git a/data/Makefile.am b/data/Makefile.am
> index 59e90f9..457079e 100644
> --- a/data/Makefile.am
> +++ b/data/Makefile.am
> @@ -1,6 +1,7 @@
> NULL=
>
> EXTRA_DIST = \
> + meson.build \
> org.spice-space.lowlevelusbaccess.policy \
> $(NULL)
>
> diff --git a/data/meson.build b/data/meson.build
> new file mode 100644
> index 0000000..ba549eb
> --- /dev/null
> +++ b/data/meson.build
> @@ -0,0 +1,4 @@
> +if spice_gtk_has_polkit
> + install_data('org.spice-space.lowlevelusbaccess.policy',
> + install_dir : spice_gtk_policy_dir)
> +endif
> diff --git a/doc/Makefile.am b/doc/Makefile.am
> index 034926c..870cd26 100644
> --- a/doc/Makefile.am
> +++ b/doc/Makefile.am
> @@ -1,3 +1,5 @@
> SUBDIRS = reference
>
> +EXTRA_DIST = meson.build
> +
> -include $(top_srcdir)/git.mk
> diff --git a/doc/meson.build b/doc/meson.build
> new file mode 100644
> index 0000000..ead14c4
> --- /dev/null
> +++ b/doc/meson.build
> @@ -0,0 +1 @@
> +subdir('reference')
> diff --git a/doc/reference/Makefile.am b/doc/reference/Makefile.am
> index 9fda456..0cc26c9 100644
> --- a/doc/reference/Makefile.am
> +++ b/doc/reference/Makefile.am
> @@ -66,6 +66,8 @@ GTKDOC_LIBS = $(top_builddir)/src/libspice-client-glib-2.0.la $(top_builddir)/sr
>
> include $(top_srcdir)/gtk-doc.make
>
> +EXTRA_DIST += meson.build
> +
> # Comment this out if you want 'make check' to test you doc status
> # and run some sanity checks
> if ENABLE_GTK_DOC
> diff --git a/doc/reference/meson.build b/doc/reference/meson.build
> new file mode 100644
> index 0000000..7ac703f
> --- /dev/null
> +++ b/doc/reference/meson.build
> @@ -0,0 +1,51 @@
> +ignore_headers = [
> + 'bio-gio.h',
> + 'channel-display-priv.h',
> + 'channel-usbredir-priv.h',
> + 'client_sw_canvas.h',
> + 'continuation.h',
> + 'coroutine.h',
> + 'decode.h',
> + 'desktop-integration.h',
> + 'display',
> + 'gio-coroutine.h',
> + 'giopipe.h',
> + 'smartcard-manager-priv.h',
> + 'spice-audio-priv.h',
> + 'spice-channel-cache.h',
> + 'spice-channel-priv.h',
> + 'spice-cmdline.h',
> + 'spice-common.h',
> + 'spice-file-transfer-task-priv.h',
> + 'spice-grabsequence-priv.h',
> + 'spice-gstaudio.h',
> + 'spice-gtk-session-priv.h',
> + 'spice-marshal.h',
> + 'spice-pulse.h',
> + 'spice-session-priv.h',
> + 'spice-uri-priv.h',
> + 'spice-util-priv.h',
> + 'spice-widget-priv.h',
> + 'spicy-connect.h',
> + 'usb-acl-helper.h',
> + 'usb-device-manager-priv.h',
> + 'usbdk_api.h',
> + 'usbutil.h',
> + 'vmcstream.h',
> + 'vncdisplaykeymap.h',
> + 'win-usb-dev.h',
> +]
> +
> +spice_gtk_doc_dep = declare_dependency(include_directories: spice_gtk_include,
> + link_args : spice_gtk_link_args,
> + link_with : [spice_client_gtk_lib, spice_client_glib_lib])
> +
> +gnome.gtkdoc('spice-gtk',
> + content_files : ['spice-gtk-overrides.txt', 'spice-gtk-overrides.txt'],
> + dependencies : spice_gtk_doc_dep,
> + main_xml : 'spice-gtk-docs.xml',
> + gobject_typesfile : files('spice-gtk.types'),
> + ignore_headers : ignore_headers,
> + install : true,
> + scan_args : ['--deprecated-guards="SPICE_DISABLE_DEPRECATED"', '--ignore-decorators="G_GNUC_INTERNAL"'],
> + src_dir : join_paths(meson.source_root(), 'src'))
> diff --git a/man/Makefile.am b/man/Makefile.am
> index a8f7e3f..7d5341b 100644
> --- a/man/Makefile.am
> +++ b/man/Makefile.am
> @@ -5,6 +5,7 @@ dist_man_MANS = \
> $(NULL)
>
> EXTRA_DIST = \
> + meson.build \
> spice-client.pod \
> $(NULL)
>
> diff --git a/man/meson.build b/man/meson.build
> new file mode 100644
> index 0000000..de07ba4
> --- /dev/null
> +++ b/man/meson.build
> @@ -0,0 +1,11 @@
> +pod2man = find_program('pod2man')
> +
> +if pod2man.found()
> + custom_target('spice-client.1',
> + output : 'spice-client.1',
> + input : 'spice-client.pod',
> + install : true,
> + install_dir : join_paths(spice_gtk_datadir, 'man', 'man1'),
> + build_by_default : true,
> + command : [pod2man, '-c', 'Spice-GTK Documentation', '@INPUT@', '@OUTPUT@'])
> +endif
> diff --git a/meson.build b/meson.build
> new file mode 100644
> index 0000000..082ecae
> --- /dev/null
> +++ b/meson.build
> @@ -0,0 +1,405 @@
> +#
> +# project definition
> +#
> +# TODO: double check meson.project_version()
> +# Ideally we would use the output of git-version-gen as input for meson, because
> +# we can not check the result of the command before declaring project().
> +#
> +project('spice-gtk', 'c',
> + version : run_command('build-aux/git-version-gen', '.tarball-version').stdout().strip(),
> + license : 'LGPLv2.1',
> + meson_version : '>= 0.46.0')
> +
> +#
> +# global C defines
> +#
> +spice_gtk_datadir = join_paths(get_option('prefix'), get_option('datadir'))
> +spice_gtk_locale_dir = join_paths(spice_gtk_datadir, 'locale')
> +spice_gtk_introspection_typelib_dir = join_paths(spice_gtk_datadir, 'girepository-1.0')
> +spice_gtk_libdir = join_paths(get_option('prefix'), get_option('libdir'))
> +spice_gtk_introspection_gir_dir = join_paths(spice_gtk_libdir, 'gir-1.0')
> +spice_gtk_global_cflags = [#'-std=c99', # fails compiling spice-common/bitops.h
> + '-DHAVE_CONFIG_H',
> + '-DSPICE_COMPILATION',
> + '-DG_LOG_DOMAIN="GSpice"',
> + '-DLOCALE_DIR="@0@"'.format(spice_gtk_locale_dir),
> + #'-Werror',
> + '-Wall',
> + '-Wextra',
> + '-Wno-sign-compare',
> + '-Wno-unused-parameter',
> + ]
> +
> +foreach arg : spice_gtk_global_cflags
> + add_project_arguments(arg, language : 'c')
> +endforeach
> +
> +# other global vars
> +compiler = meson.get_compiler('c')
> +spice_gtk_config_data = configuration_data()
> +spice_protocol_min_version='0.12.13'
> +spice_gtk_include = [include_directories('.')]
> +spice_gtk_c_args = []
> +spice_gtk_libs = []
> +spice_gtk_deps = []
> +spice_gtk_link_args = []
> +spice_gtk_host_system = host_machine.system()
> +
> +#
> +# Spice common subproject
> +#
> +spice_common_options = ['protocol-version=@0@'.format(spice_protocol_min_version),
> + 'generate-code=client']
> +
> +spice_common = subproject('spice-common', default_options : spice_common_options)
> +spice_gtk_config_data.merge_from(spice_common.get_variable('spice_common_config_data'))
> +spice_gtk_deps += spice_common.get_variable('spice_common_client_dep')
> +
> +#
> +# check for system headers
> +#
> +headers = ['termios.h',
> + 'X11/XKBlib.h']
> +
> +foreach header : headers
> + if compiler.has_header(header)
> + spice_gtk_config_data.set('HAVE_ at 0@'.format(header.underscorify().to_upper()), '1')
> + endif
> +endforeach
> +
> +spice_gtk_has_egl = compiler.has_header('epoxy/egl.h')
> +if spice_gtk_has_egl
> + spice_gtk_config_data.set('HAVE_EPOXY_EGL_H', '1')
> + spice_gtk_config_data.set('HAVE_EGL', '1') # FIXME: Use single define?
> +endif
> +#
> +# check for system functions
> +#
> +foreach func : ['clearenv', 'strtok_r']
> + if compiler.has_function(func)
> + spice_gtk_config_data.set('HAVE_ at 0@'.format(func.to_upper()), '1')
> + endif
> +endforeach
> +
> +#
> +# check for mandatory dependencies
> +#
> +deps = ['cairo', 'libjpeg', 'zlib']
> +if spice_gtk_host_system == 'windows'
> + deps += 'gio-windows-2.0'
> +else
> + deps += 'gio-unix-2.0'
> +endif
> +
> +foreach dep : deps
> + spice_gtk_deps += dependency(dep)
> +endforeach
> +
> +deps = ['librt', 'libm']
> +if spice_gtk_host_system == 'windows'
> + deps += ['libws2_32', 'libgdi32']
> +endif
> +
> +foreach dep : deps
> + spice_gtk_deps += compiler.find_library(dep)
> +endforeach
> +
> +#
> +# Non-mandatory/optional dependencies
> +#
> +
> +# gtk
> +spice_gtk_has_gtk = false
> +spice_gtk_gtk_version_required = '>= 3.12'
> +if get_option('gtk')
> + gtk_dep = dependency('gtk+-3.0', version : spice_gtk_gtk_version_required)
> + gtk_encoded_version='GDK_VERSION_3_12'
> + spice_gtk_c_args += ['-DGDK_VERSION_MIN_REQUIRED=@0@'.format(gtk_encoded_version),
> + '-DGDK_VERSION_MAX_ALLOWED=@0@'.format(gtk_encoded_version)]
> + if compiler.has_function('gdk_event_get_scancode', dependencies : gtk_dep)
> + spice_gtk_config_data.set('HAVE_GDK_EVENT_GET_SCANCODE', '1')
> + endif
> + spice_gtk_deps += gtk_dep
> + spice_gtk_deps += dependency('x11')
> + if spice_gtk_host_system != 'windows'
> + spice_gtk_deps += dependency('epoxy')
> + endif
> + spice_gtk_has_gtk = true
> +endif
> +
> +# webdav
> +spice_gtk_has_phodav = false
> +if get_option('webdav')
> + spice_gtk_deps += dependency('libphodav-2.0')
> + spice_gtk_deps += dependency('libsoup-2.4', version : '>= 2.49.91')
> + spice_gtk_config_data.set('USE_PHODAV', '1')
> + spice_gtk_has_phodav = true
> +endif
> +
> +# pulse
> +spice_gtk_has_pulse = false
> +if get_option('pulse')
> + deps = ['libpulse', 'libpulse-mainloop-glib']
> + foreach dep : deps
> + spice_gtk_deps += dependency(dep)
> + endforeach
> + spice_gtk_config_data.set('HAVE_PULSE', '1')
> + spice_gtk_has_pulse = true
> +endif
> +
> +# gstaudio
> +gst_base_deps = ['gstreamer-1.0', 'gstreamer-base-1.0', 'gstreamer-app-1.0']
> +spice_gtk_has_gstaudio = false
> +if get_option('gstaudio')
> + deps = gst_base_deps + ['gstreamer-audio-1.0']
> + foreach dep : deps
> + spice_gtk_deps += dependency(dep)
> + endforeach
> + spice_gtk_config_data.set('HAVE_GSTAUDIO', '1')
> + spice_gtk_has_gstaudio = true
> +endif
> +
> +# gstvideo
> +spice_gtk_has_gstvideo = false
> +if get_option('gstvideo')
> + deps = ['gstreamer-video-1.0']
> + if not spice_gtk_has_gstaudio
> + deps += gst_base_deps
> + endif
> + foreach dep : deps
> + spice_gtk_deps += dependency(dep)
> + endforeach
> + spice_gtk_config_data.set('HAVE_GSTVIDEO', '1')
> + spice_gtk_has_gstvideo = true
> +endif
> +
> +# builtin-mjpeg
> +spice_gtk_has_builtin_mjpeg = false
> +if get_option('builtin-mjpeg')
> + spice_gtk_config_data.set('HAVE_BUILTIN_MJPEG', '1')
> + spice_gtk_has_builtin_mjpeg = true
> +endif
> +
> +if not spice_gtk_has_gstvideo and not spice_gtk_has_builtin_mjpeg
> + warning('No builtin MJPEG or GStreamer decoder, video will not be streamed')
> +endif
> +
> +# usbredir
> +spice_gtk_has_usbredir = false
> +if get_option('usbredir')
> + usb_dep = dependency('libusbredirparser-0.5', required : false)
> + if not usb_dep.found()
> + usb_dep = dependency('libusbredirparser', version : '>= 0.4')
> + endif
> + spice_gtk_deps += usb_dep
> +
> + deps = [['libusbredirhost', '>= 0.4.2'],
> + ['libusb-1.0', '>= 1.0.9']]
> +
> + foreach dep : deps
> + usb_dep = dependency(dep[0], version : dep[1])
> + spice_gtk_deps += usb_dep
> + endforeach
> +
> + if spice_gtk_host_system != 'windows'
> + if usb_dep.version().version_compare('>= 1.0.16')
> + spice_gtk_config_data.set('USE_LIBUSB_HOTPLUG', '1')
> + else
> + spice_gtk_deps += dependency('gudev-1.0')
> + spice_gtk_config_data.set('USE_GUDEV', '1')
> + endif
> + endif
> +
> + spice_gtk_config_data.set('USE_USBREDIR', '1')
> + spice_gtk_has_usbredir = true
> +endif
> +
> +# polkit
> +spice_gtk_has_polkit = false
> +if get_option('polkit')
> + polkit_dep = dependency('polkit-gobject-1', version : '>= 0.96')# ,required : false)
> + if polkit_dep.found()
> + spice_gtk_policy_dir = polkit_dep.get_pkgconfig_variable('policydir')
> + foreach func : ['polkit_authority_get_sync', 'polkit_authorization_result_get_dismissed']
> + if compiler.has_function(func, dependencies : polkit_dep)
> + spice_gtk_config_data.set('HAVE_ at 0@'.format(func.to_upper()), '1')
> + endif
> + endforeach
> +
> + if not compiler.has_function('acl_get_file')
> + acl_dep = compiler.find_library('acl')
> + if not compiler.has_function('acl_get_file', dependencies : acl_dep)
> + error('PolicyKit support requested, but some required packages are not available')
> + endif
> + spice_gtk_deps += acl_dep
> + endif
> + endif
> +
> + spice_gtk_deps += polkit_dep
> + spice_gtk_config_data.set('USE_POLKIT', '1')
> + spice_gtk_has_polkit = true
> +endif
> +
> +if spice_gtk_has_usbredir and not spice_gtk_has_polkit
> + warning('Building with usbredir support, but *not* building the usb acl helper')
> +endif
> +
> +# pie
> +spice_gtk_has_pie = false
> +if get_option('pie')
> + spice_gtk_has_pie = true
> +endif
> +
> +# usb-acl-helper-dir
> +spice_gtk_usb_acl_helper_dir = get_option('usb-acl-helper-dir')
> +if spice_gtk_usb_acl_helper_dir.strip() == ''
> + spice_gtk_usb_acl_helper_dir = join_paths(get_option('prefix'), get_option('bindir'))
> +endif
> +spice_gtk_c_args += '-DACL_HELPER_PATH="@0@"'.format(spice_gtk_usb_acl_helper_dir)
> +
> +# usb-ids-path
> +spice_gtk_usb_ids_path = get_option('usb-ids-path')
> +if spice_gtk_usb_ids_path.strip() == ''
> + usbutils = dependency('usbutils', required : false)
> + if usbutils.found()
> + spice_gtk_usb_ids_path = usbutils.get_pkgconfig_variable('usbids')
> + endif
> +endif
> +
> +if spice_gtk_usb_ids_path.strip() != ''
> + spice_gtk_config_data.set('WITH_USBIDS', '1')
> + spice_gtk_c_args += '-DUSB_IDS="@0@"'.format(spice_gtk_usb_ids_path)
> +endif
> +
> +
> +# coroutine
> +spice_gtk_coroutine = get_option('coroutine')
> +if spice_gtk_coroutine == 'ucontext'
> + if compiler.has_function('makecontext') and compiler.has_function('swapcontext') and compiler.has_function('getcontext')
> + spice_gtk_config_data.set('WITH_UCONTEXT', '1')
> + if spice_gtk_host_system == 'darwin'
> + spice_gtk_config_data.set('_XOPEN_SOURCE', '1')
> + endif
> + else
> + spice_gtk_coroutine = 'gthread'
> + endif
> +endif
> +
> +if spice_gtk_coroutine == 'gthread'
> + spice_gtk_config_data.set('WITH_GTHREAD', '1')
> +endif
> +
> +if spice_gtk_coroutine == 'winfiber'
> + spice_gtk_config_data.set('WITH_WINFIBER', '1')
> +endif
> +
> +# introspection
> +spice_gtk_has_introspection = false
> +if get_option('introspection')
> + spice_gtk_deps += dependency('gobject-introspection-1.0', version : '>= 0.94')
> + spice_gtk_has_introspection = true
> +endif
> +
> +# vala (depends on introspection)
> +spice_gtk_has_vala = false
> +if spice_gtk_has_introspection and get_option('vapi')
> + vapigen_dep = dependency('vapigen')
> + vapidir = vapigen_dep.get_pkgconfig_variable('vapidir')
> + vapigen = dependency('vapigen').get_pkgconfig_variable('vapigen')
> + spice_gtk_has_vala = true
> +endif
> +
> +# dbus
> +if get_option('dbus')
> + spice_gtk_config_data.set('USE_GDBUS', '1')
> +else
> + warning('No D-Bus support, desktop integration and USB redirection may not work properly')
> +endif
> +
> +# lz4 FIXME: Duplicated in spice-server. Move check to spice-common (see smartcard below)?
> +spice_gtk_has_lz4 = false
> +if get_option('lz4')
> + lz4_dep = dependency('liblz4', required : false, version : '>= 129')
> + if not lz4_dep.found()
> + lz4_dep = dependency('liblz4', version : '>= 1.7.3')
> + endif
> +
> + spice_gtk_deps += lz4_dep
> + spice_gtk_config_data.set('USE_LZ4', '1')
> + spice_gtk_has_lz4 = true
> +endif
> +
> +# sasl FIXME: Duplicated in spice-server. Move check to spice-common (see smartcard below)?
> +spice_gtk_has_sasl = false
> +if get_option('sasl')
> + spice_gtk_deps += dependency('libsasl2')
> + spice_gtk_config_data.set('HAVE_SASL', '1')
> + spice_gtk_has_sasl = true
> +endif
> +
> +# checks for smartcard are done in spice_common
> +spice_gtk_has_smartcard = false
> +if get_option('smartcard')
> + if not spice_common.get_variable('spice_common_has_smartcard')
> + error('Building with smartcard support but dependency not found')
> + else
> + spice_gtk_has_smartcard = true
> + endif
> +endif
> +
> +
> +#
> +# Subdirectories
> +#
> +subdir('src')
> +subdir('tools')
> +subdir('tests')
> +subdir('doc')
> +subdir('data')
> +subdir('man')
> +subdir('po')
> +subdir('vapi')
> +
> +#
> +# write config.h
> +#
> +proj_version = meson.project_version()
> +proj_name = meson.project_name()
> +config_data = [['VERSION', proj_version],
> + ['PACKAGE_VERSION', proj_version],
> + ['GETTEXT_PACKAGE', proj_name],
> + ['PACKAGE_STRING', '@0@ @1@'.format(proj_name, proj_version)],
> + ['PACKAGE_BUGREPORT', 'spice-devel at lists.freedesktop.org']]
> +foreach conf : config_data
> + spice_gtk_config_data.set_quoted(conf[0], conf[1])
> +endforeach
> +
> +configure_file(output : 'config.h',
> + install : false,
> + configuration : spice_gtk_config_data)
> +
> +#
> +# write spice-client-glib.pc
> +#
> +pkgconfig = import('pkgconfig')
> +pkgconfig.generate(name : 'spice-client-glib-2.0',
> + version : meson.project_version(),
> + description : 'SPICE Client GLib 2.0 library',
> + subdirs : ['spice-client-glib-2.0'],
> + libraries : spice_client_glib_lib,
> + requires : ['spice-protocol >= @0@'.format(spice_protocol_min_version)],
> + variables : ['exec_prefix=${prefix}'])
> +
> +#
> +# write spice-client-gtk.pc
> +#
> +if spice_gtk_has_gtk
> + spice_gtk_requires = 'gtk+3.0 @0@ spice-client-glib-2.0'.format(spice_gtk_gtk_version_required)
> + pkgconfig.generate(name : 'spice-client-gtk-3.0',
> + version : meson.project_version(),
> + description : 'SPICE Client Gtk 3.0 library',
> + subdirs : ['spice-client-gtk-3.0'],
> + libraries : spice_client_gtk_lib,
> + requires : spice_gtk_requires,
> + variables : ['exec_prefix=${prefix}'])
> + endif
> diff --git a/meson_options.txt b/meson_options.txt
> new file mode 100644
> index 0000000..90ea24b
> --- /dev/null
> +++ b/meson_options.txt
> @@ -0,0 +1,94 @@
> +option('gtk',
> + type : 'boolean',
> + value : true,
> + description: 'Enable gtk+ (default=true)')
> +
> +option('webdav',
> + type : 'boolean',
> + value : true,
> + description: 'Enable webdav support (default=true)')
> +
> +option('pulse',
> + type : 'boolean',
> + value : true,
> + description: 'Enable the PulseAudio backend (default=true)')
> +
> +option('gstaudio',
> + type : 'boolean',
> + value : true,
> + description : 'Enable the GStreamer 1.0 audio backend (default=true)')
> +
> +option('gstvideo',
> + type : 'boolean',
> + value : true,
> + description : 'Enable GStreamer video support (default=true)')
> +
> +option('builtin-mjpeg',
> + type : 'boolean',
> + value : true,
> + description : 'Enable the builtin mjpeg video decoder (default=true)')
> +
> +option('usbredir',
> + type : 'boolean',
> + value : true,
> + description : 'Enable usbredir support (default=true)')
> +
> +option('polkit',
> + type : 'boolean',
> + value : true,
> + description : 'Enable PolicyKit support for the USB acl helper (default=true)')
> +
> +option('pie',
> + type : 'boolean',
> + value : true,
> + description : 'Enable position-independent-executable support for the USB acl helper (default=true)')
> +
> +option('usb-acl-helper-dir',
> + type : 'string',
> + value : '',
> + description : 'Directory where the USB ACL helper binary should be installed')
> +
> +option('usb-ids-path',
> + type : 'string',
> + value : '',
> + description : 'Specify the path to usb.ids')
> +
> +option('coroutine',
> + type : 'combo',
> + choices : ['ucontext', 'gthread', 'winfiber'],
> + description : 'Use ucontext or GThread for coroutines')
> +
> +option('introspection',
> + type : 'boolean',
> + value : true,
> + description: 'Check for GObject instrospection requirements (default=true)')
> +
> +option('vapi',
> + type : 'boolean',
> + value : true,
> + description: 'Check for vala requirements (default=true)')
> +
> +option('dbus',
> + type : 'boolean',
> + value : true,
> + description: 'Enable dbus support for desktop integration (disabling automount) (default=true)')
> +
> +option('alignment-checks',
> + type : 'boolean',
> + value : false,
> + description : 'Enable runtime checks for cast alignment (default=false)')
> +
> +option('lz4',
> + type : 'boolean',
> + value : true,
> + description: 'Enable lz4 compression support (default=true)')
> +
> +option('sasl',
> + type : 'boolean',
> + value : true,
> + description : 'Use cyrus SASL authentication (default=true)')
> +
> +option('smartcard',
> + type : 'boolean',
> + value : true,
> + description : 'Enable smartcard support (default=true)')
> diff --git a/po/meson.build b/po/meson.build
> new file mode 100644
> index 0000000..60c27a7
> --- /dev/null
> +++ b/po/meson.build
> @@ -0,0 +1,3 @@
> +i18n = import('i18n')
> +i18n.gettext(meson.project_name(),
> + args : '--directory=@0@'.format(meson.source_root()))
> diff --git a/src/Makefile.am b/src/Makefile.am
> index f49c766..d2a749c 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -25,6 +25,7 @@ CLEANFILES = $(GLIBGENS) $(KEYMAPS)
> BUILT_SOURCES = $(GLIBGENS) $(KEYMAPS)
>
> EXTRA_DIST = \
> + meson.build \
> decode-glz-tmpl.c \
> $(KEYMAPS) \
> $(KEYMAP_CSV) \
> diff --git a/src/meson.build b/src/meson.build
> new file mode 100644
> index 0000000..1979e84
> --- /dev/null
> +++ b/src/meson.build
> @@ -0,0 +1,371 @@
> +spice_gtk_include += [include_directories('.')]
> +
> +#
> +# Source files for spice-client-glib
> +#
> +
> +# generate spice-version.h
> +version_info = meson.project_version().split('.')
> +major = '@0@'.format(version_info[0])
> +minor = '@0@'.format(version_info[1])
> +micro = version_info[2].split('-')[0]
> +if micro == ''
> + micro = '0'
> +endif
> +version_data = configuration_data()
> +version_data.set('SPICE_GTK_MAJOR_VERSION', major)
> +version_data.set('SPICE_GTK_MINOR_VERSION', minor)
> +version_data.set('SPICE_GTK_MICRO_VERSION', micro)
> +spice_version_h = configure_file(input : 'spice-version.h.in',
> + output : 'spice-version.h',
> + configuration : version_data)
> +
> +spice_client_glib_headers = [
> + spice_version_h,
> + 'channel-cursor.h',
> + 'channel-display.h',
> + 'channel-inputs.h',
> + 'channel-main.h',
> + 'channel-playback.h',
> + 'channel-port.h',
> + 'channel-record.h',
> + 'channel-smartcard.h',
> + 'channel-usbredir.h',
> + 'channel-webdav.h',
> + 'smartcard-manager.h',
> + 'spice-audio.h',
> + 'spice-channel.h',
> + 'spice-client.h',
> + 'spice-file-transfer-task.h',
> + 'spice-option.h',
> + 'spice-session.h',
> + 'spice-types.h',
> + 'spice-uri.h',
> + 'spice-util.h',
> + 'usb-device-manager.h',
> +]
> +
> +install_headers(spice_client_glib_headers, subdir : 'spice-client-glib-2.0')
> +
> +# generate spice-marshal.[ch]
> +gnome = import('gnome')
> +spice_marshals = gnome.genmarshal('spice-marshal', sources : 'spice-marshal.txt')
> +
> +# generate spice-glib-enums.[ch]
> +spice_client_glib_enums = gnome.mkenums_simple('spice-glib-enums',
> + sources : ['spice-channel.h', 'channel-inputs.h', 'spice-session.h'],
> + install_header : true,
> + install_dir : 'spice-client-glib-2.0')
> +
> +spice_client_glib_introspection_sources = [
> + spice_client_glib_headers,
> + spice_client_glib_enums,
> + 'channel-cursor.c',
> + 'channel-display.c',
> + 'channel-inputs.c',
> + 'channel-main.c',
> + 'channel-playback.c',
> + 'channel-port.c',
> + 'channel-record.c',
> + 'channel-smartcard.c',
> + 'channel-usbredir.c',
> + 'channel-webdav.c',
> + 'smartcard-manager.c',
> + 'spice-audio.c',
> + 'spice-channel.c',
> + 'spice-client.c',
> + 'spice-option.c',
> + 'spice-session.c',
> + 'spice-util.c',
> + 'usb-device-manager.c',
> +]
> +
> +spice_client_glib_sources = [
> + spice_marshals,
> + spice_client_glib_introspection_sources,
> + 'bio-gio.c',
> + 'bio-gio.h',
> + 'channel-base.c',
> + 'channel-display-priv.h',
> + 'channel-playback-priv.h',
> + 'channel-usbredir-priv.h',
> + 'client_sw_canvas.c',
> + 'client_sw_canvas.h',
> + 'coroutine.h',
> + 'decode-glz.c',
> + 'decode.h',
> + 'decode-jpeg.c',
> + 'decode-zlib.c',
> + 'gio-coroutine.c',
> + 'gio-coroutine.h',
> + 'smartcard-manager-priv.h',
> + 'spice-audio-priv.h',
> + 'spice-channel-cache.h',
> + 'spice-channel-priv.h',
> + 'spice-common.h',
> + 'spice-file-transfer-task.c',
> + 'spice-file-transfer-task-priv.h',
> + 'spice-glib-main.c',
> + 'spice-option.h',
> + 'spice-session-priv.h',
> + 'spice-uri.c',
> + 'spice-uri-priv.h',
> + 'spice-util-priv.h',
> + 'usb-device-manager-priv.h',
> + 'usbutil.c',
> + 'usbutil.h',
> + 'vmcstream.c',
> + 'vmcstream.h',
> +]
> +
> +if spice_gtk_has_builtin_mjpeg
> + spice_client_glib_sources += 'channel-display-mjpeg.c'
> +endif
> +
> +if spice_gtk_has_gstaudio
> + spice_client_glib_sources += ['spice-gstaudio.c',
> + 'spice-gstaudio.h']
> +endif
> +
> +if spice_gtk_has_gstvideo
> + spice_client_glib_sources += 'channel-display-gst.c'
> +endif
> +
> +if spice_gtk_has_polkit
> + spice_client_glib_sources += ['usb-acl-helper.c',
> + 'usb-acl-helper.h']
> +endif
> +
> +if spice_gtk_has_phodav
> + spice_client_glib_sources += ['giopipe.c',
> + 'giopipe.h']
> +endif
> +
> +if spice_gtk_has_pulse
> + spice_client_glib_sources += ['spice-pulse.c',
> + 'spice-pulse.h']
> +endif
> +
> +if spice_gtk_coroutine == 'gthread'
> + spice_client_glib_sources += 'coroutine_gthread.c'
> +elif spice_gtk_coroutine == 'ucontext'
> + spice_client_glib_sources += ['continuation.c',
> + 'continuation.h',
> + 'coroutine_ucontext.c']
> +elif spice_gtk_coroutine == 'winfiber'
> + spice_client_glib_sources += 'coroutine_winfibers.c'
> +endif
> +
> +if spice_gtk_has_usbredir and spice_gtk_host_system == 'windows'
> + spice_client_glib_sources += ['usbdk_api.c',
> + 'usbdk_api.h',
> + 'win-usb-dev.c',
> + 'win-usb-dev.h']
> +endif
> +
> +#
> +# libspice-client-glib-2.0.so
> +#
> +
> +# custom link_args
> +# TODO: Instead of relying on the output of ld, this should be handled
> +# automatically. For compiler args, there is get_supported_arguments(),
> +# but nothing for linker args currently.
> +# https://github.com/mesonbuild/meson/issues/3335
> +ld_cmd = run_command('ld', '--help').stdout().strip()
> +
> +# Check for how to avoid indirect lib deps (--no-copy-dt-needed-entries)
> +# from virt-linker-no-indirect
> +#if ld_cmd.contains('--no-copy-dt-needed-entries')
> +# spice_server_link_args += '-Wl,--no-copy-dt-needed-entries'
> +#endif
> +
> +# Check for how to force completely read-only GOT table (relro)
> +# from virt-link-relro.m4
> +#if ld_cmd.contains('-z relro')
> +# spice_server_link_args += ['-Wl,-z', '-Wl,relro']
> +#endif
> +
> +# version-script
> +# TODO: should be done automatically, https://github.com/mesonbuild/meson/issues/3047
> +if ld_cmd.contains('--version-script')
> + spice_client_glib_syms = files('map-file')
> + spice_client_glib_syms_path = join_paths(meson.current_source_dir(), 'map-file')
> + spice_gtk_link_args += '-Wl,--version-script=@0@'.format(spice_client_glib_syms_path)
> +else
> + spice_client_glib_syms = files('spice-glib-sym-file')
> + spice_client_glib_syms_path = join_paths(meson.current_source_dir(), 'spice-glib-sym-file')
> + spice_gtk_link_args += ['-export-symbols', spice_client_glib_syms_path]
> +endif
> +
> +if ld_cmd.contains('-z now')
> + spice_gtk_link_args += ['-Wl,-z', '-Wl,now']
> +endif
> +
> +spice_client_glib_lib = library('spice-client-glib-2.0', spice_client_glib_sources,
> + version : '8.6.0',
> + install : true,
> + include_directories : spice_gtk_include,
> + c_args : spice_gtk_c_args,
> + link_args : spice_gtk_link_args,
> + link_depends : spice_client_glib_syms,
> + link_with : spice_gtk_libs,
> + dependencies : spice_gtk_deps)
> +
> +spice_client_glib_dep = declare_dependency(sources : [spice_marshals[1], spice_client_glib_enums[1]],
> + link_with : spice_client_glib_lib,
> + include_directories : spice_gtk_include,
> + compile_args : spice_gtk_c_args,
> + link_args : spice_gtk_link_args,
> + dependencies : spice_gtk_deps)
> +
> +#
> +# SpiceClientGLib-2.0.gir
> +#
> +spice_client_glib_introspection_dep = declare_dependency(include_directories: spice_gtk_include,
> + link_args : spice_gtk_link_args,
> + link_with : spice_client_glib_lib)
> +
> +spice_client_glib_gir = gnome.generate_gir(spice_client_glib_lib,
> + build_by_default : spice_gtk_has_introspection,
> + dependencies : spice_client_glib_introspection_dep,
> + export_packages : 'spice-client-glib-2.0',
> + extra_args : ['--accept-unprefixed'],
> + header : 'spice-client.h',
> + includes : ['GObject-2.0', 'Gio-2.0'],
> + identifier_prefix : 'Spice',
> + symbol_prefix : 'spice',
> + install : spice_gtk_has_introspection,
> + install_dir_gir : spice_gtk_introspection_gir_dir,
> + install_dir_typelib : spice_gtk_introspection_typelib_dir,
> + namespace : 'SpiceClientGLib',
> + nsversion : '2.0',
> + sources : spice_client_glib_introspection_sources)
> +
> +#
> +# spice-client-glib-usb-acl-helper
> +#
> +if spice_gtk_has_polkit
> + executable('spice-client-glib-usb-acl-helper',
> + 'spice-client-glib-usb-acl-helper.c',
> + include_directories : spice_gtk_include,
> + install_dir : spice_gtk_usb_acl_helper_dir,
> + c_args : spice_gtk_c_args,
> + link_args : spice_gtk_link_args,
> + dependencies : spice_gtk_deps)
> + # FIXME: provide install script for setuid https://github.com/mesonbuild/meson/issues/3328
> + #-chown root $(DESTDIR)$(acldir)/spice-client-glib-usb-acl-helper
> + #-chmod u+s $(DESTDIR)$(acldir)/spice-client-glib-usb-acl-helper
> +endif
> +
> +
> +if spice_gtk_has_gtk
> + #
> + # Source files for spice-client-gtk
> + #
> +
> + spice_client_gtk_headers = [
> + 'spice-client-gtk.h',
> + 'spice-grabsequence.h',
> + 'spice-gtk-session.h',
> + 'spice-widget.h',
> + 'usb-device-widget.h',
> + ]
> +
> + install_headers(spice_client_gtk_headers, subdir : 'spice-client-gtk-3.0')
> +
> + # generate spice-widget-enums.[ch]
> + spice_widget_enums = gnome.mkenums_simple('spice-widget-enums',
> + sources : 'spice-widget.h',
> + install_header : true,
> + install_dir : 'spice-client-gtk-3.0')
> +
> + spice_client_gtk_introspection_sources = [
> + spice_client_gtk_headers,
> + spice_widget_enums,
> + 'spice-grabsequence.c',
> + 'spice-gtk-session.c',
> + 'spice-widget.c',
> + 'usb-device-widget.c',
> + ]
> +
> + spice_client_gtk_sources = [
> + spice_marshals,
> + spice_client_gtk_introspection_sources,
> + 'desktop-integration.c',
> + 'desktop-integration.h',
> + 'spice-file-transfer-task.h',
> + 'spice-grabsequence.h',
> + 'spice-grabsequence-priv.h',
> + 'spice-gtk-session-priv.h',
> + 'spice-util.c',
> + 'spice-util-priv.h',
> + 'spice-widget-cairo.c',
> + 'spice-widget-priv.h',
> + 'vncdisplaykeymap.c',
> + 'vncdisplaykeymap.h',
> + ]
> +
> + if spice_gtk_has_egl
> + spice_client_gtk_sources += 'spice-widget-egl.c'
> + endif
> +
> + # keymaps
> + python = import('python3').find_python()
> + keymapgen = files('./keycodemapdb/tools/keymap-gen')
> + keymapcsv = files('./keycodemapdb/data/keymaps.csv')
> + keymaps = ['xorgevdev',
> + 'xorgkbd',
> + 'xorgxquartz',
> + 'xorgxwin',
> + 'osx',
> + 'win32',
> + 'x11']
> +
> + foreach keymap : keymaps
> + varname = 'keymap_ at 0@2xtkbd'.format(keymap)
> + target = 'vncdisplay at 0@.c'.format(varname)
> + cmd = [python, keymapgen, '--lang', 'glib2', '--varname', varname, 'code-map', keymapcsv, keymap, 'xtkbd']
> + custom_target(target,
> + output : target,
> + capture : true,
> + build_by_default: true,
> + command : cmd)
> +
> + endforeach
> +
> + #
> + # libspice-client-gtk.so
> + #
> + spice_client_gtk_lib = library('spice-client-gtk-3.0', spice_client_gtk_sources,
> + version : '5.0.0',
> + install : true,
> + dependencies : spice_client_glib_dep)
> +
> + spice_client_gtk_dep = declare_dependency(sources : spice_widget_enums[1],
> + link_with : spice_client_gtk_lib,
> + dependencies : spice_client_glib_dep)
> +
> + #
> + # SpiceClientGtk-3.0.gir
> + #
> + spice_client_gtk_introspection_dep = declare_dependency(include_directories: spice_gtk_include,
> + link_args : spice_gtk_link_args,
> + link_with : [spice_client_gtk_lib, spice_client_glib_lib])
> +
> + spice_client_gtk_gir = gnome.generate_gir(spice_client_gtk_lib,
> + build_by_default : spice_gtk_has_introspection,
> + dependencies : spice_client_gtk_introspection_dep,
> + export_packages : 'spice-client-gtk-3.0',
> + extra_args : ['--accept-unprefixed'],
> + header : 'spice-widget.h',
> + includes : ['GObject-2.0', 'Gtk-3.0', 'SpiceClientGLib-2.0'],
> + identifier_prefix : 'Spice',
> + symbol_prefix : 'spice',
> + install : spice_gtk_has_introspection,
> + install_dir_gir : spice_gtk_introspection_gir_dir,
> + install_dir_typelib : spice_gtk_introspection_typelib_dir,
> + namespace : 'SpiceClientGtk',
> + nsversion : '3.0',
> + sources : spice_client_gtk_introspection_sources)
> +endif
> diff --git a/subprojects/spice-common.wrap b/subprojects/spice-common.wrap
> new file mode 100644
> index 0000000..6117c63
> --- /dev/null
> +++ b/subprojects/spice-common.wrap
> @@ -0,0 +1,4 @@
> +[wrap-git]
> +directory=spice-common
> +url=https://gitlab.com/etrunko/spice-common.git
> +revision=meson
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index 3a0188d..bfa43a3 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -1,5 +1,7 @@
> NULL =
>
> +EXTRA_DIST = meson.build
> +
> noinst_PROGRAMS =
> TESTS = test-coroutine \
> test-util \
> diff --git a/tests/meson.build b/tests/meson.build
> new file mode 100644
> index 0000000..321856b
> --- /dev/null
> +++ b/tests/meson.build
> @@ -0,0 +1,28 @@
> +tests_sources = [
> + 'util.c',
> + 'coroutine.c',
> + 'session.c',
> + 'uri.c',
> + 'file-transfer.c',
> +]
> +
> +if spice_gtk_has_phodav
> + tests_sources += 'pipe.c'
> +endif
> +
> +if spice_gtk_has_polkit
> + tests_sources += [
> + 'usb-acl-helper.c',
> + 'mock-acl-helper.c',
> + ]
> +endif
> +
> +foreach src : tests_sources
> + name = 'test- at 0@'.format(src).split('.')[0]
> + exe = executable(name,
> + sources : src,
> + c_args : '-DTESTDIR="@0@"'.format(meson.current_build_dir()),
> + objects : spice_client_glib_lib.extract_all_objects(),
> + dependencies : spice_client_glib_dep)
> + test(name, exe)
> +endforeach
> diff --git a/tools/Makefile.am b/tools/Makefile.am
> index 1e3deed..18786ae 100644
> --- a/tools/Makefile.am
> +++ b/tools/Makefile.am
> @@ -1,5 +1,7 @@
> bin_PROGRAMS = spicy-stats spicy-screenshot
>
> +EXTRA_DIST = meson.build
> +
> TOOLS_CPPFLAGS = \
> -DSPICE_COMPILATION \
> -I$(top_builddir)/src \
> diff --git a/tools/meson.build b/tools/meson.build
> new file mode 100644
> index 0000000..19a0e71
> --- /dev/null
> +++ b/tools/meson.build
> @@ -0,0 +1,30 @@
> +spice_cmdline_sources = [
> + 'spice-cmdline.c',
> + 'spice-cmdline.h',
> +]
> +
> +#
> +# spicy-stats and spicy-screenshot
> +#
> +foreach exe : ['spicy-stats', 'spicy-screenshot']
> + executable(exe,
> + sources : spice_cmdline_sources + ['@0 at .c'.format(exe)],
> + c_args : '-Wno-deprecated-declarations',
> + dependencies : spice_client_glib_dep)
> +endforeach
> +
> +#
> +# spicy
> +#
> +if spice_gtk_has_gtk
> + spicy_sources = [
> + 'spicy.c',
> + 'spicy-connect.c',
> + 'spicy-connect.h',
> + ]
> +
> + executable('spicy',
> + sources : spicy_sources + spice_cmdline_sources,
> + c_args : '-Wno-deprecated-declarations',
> + dependencies : spice_client_gtk_dep)
> +endif
> diff --git a/vapi/Makefile.am b/vapi/Makefile.am
> index aaab848..494ad83 100644
> --- a/vapi/Makefile.am
> +++ b/vapi/Makefile.am
> @@ -15,6 +15,7 @@ dist_vapi_DATA += spice-client-gtk-3.0.deps
> endif
>
> EXTRA_DIST = \
> + meson.build \
> spice-client-gtk-3.0.deps \
> SpiceClientGLib-2.0.metadata \
> $(NULL)
> diff --git a/vapi/meson.build b/vapi/meson.build
> new file mode 100644
> index 0000000..426ae3a
> --- /dev/null
> +++ b/vapi/meson.build
> @@ -0,0 +1,13 @@
> +if spice_gtk_has_vala
> + gnome.generate_vapi('spice-client-glib-2.0',
> + install : true,
> + packages : 'gio-2.0',
> + sources : spice_client_glib_gir[0])
> + if spice_gtk_has_gtk
> + gnome.generate_vapi('spice-client-gtk-3.0',
> + install : true,
> + packages : ['gtk+-3.0', 'spice-client-glib-2.0'],
> + gir_dirs : join_paths(meson.build_root(), 'src'),
> + sources : spice_client_gtk_gir[0])
> + endif
> +endif
> --
> 2.14.3
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
From 0dabed79143e351665130bfab37f96f1a470b64a Mon Sep 17 00:00:00 2001
From: Christophe Fergeau <cfergeau at redhat.com>
Date: Wed, 28 Mar 2018 12:53:48 +0200
Subject: [spice-gtk 1/2] Use single spice-common submodule for now
While we keep both an automake-based build system and a meson one, it's
better to keep using a git submodule rather than a .wrap meson file.
This way we only have a single place to update on submodule updates.
---
build-aux/meson/check_spice-common.sh | 8 ++++++++
meson.build | 4 ++++
subprojects/spice-common | 1 +
subprojects/spice-common.wrap | 4 ----
4 files changed, 13 insertions(+), 4 deletions(-)
create mode 100755 build-aux/meson/check_spice-common.sh
create mode 120000 subprojects/spice-common
delete mode 100644 subprojects/spice-common.wrap
diff --git a/build-aux/meson/check_spice-common.sh b/build-aux/meson/check_spice-common.sh
new file mode 100755
index 00000000..a1acce69
--- /dev/null
+++ b/build-aux/meson/check_spice-common.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+if [ ! -f "${MESON_SOURCE_ROOT}/spice-common/meson.build" ]
+then
+ git \
+ --git-dir="${MESON_SOURCE_ROOT}/.git" \
+ submodule update --init --recursive subprojects/spice-common
+fi
diff --git a/meson.build b/meson.build
index 082ecaec..db6879a3 100644
--- a/meson.build
+++ b/meson.build
@@ -10,6 +10,9 @@ project('spice-gtk', 'c',
license : 'LGPLv2.1',
meson_version : '>= 0.46.0')
+message ('Updating submodules')
+run_command ('build-aux/meson/check_spice-common.sh')
+
#
# global C defines
#
@@ -28,6 +31,7 @@ spice_gtk_global_cflags = [#'-std=c99', # fails compiling spice-common/bitops.h
'-Wextra',
'-Wno-sign-compare',
'-Wno-unused-parameter',
+ '-Wno-cast-function-type',
]
foreach arg : spice_gtk_global_cflags
diff --git a/subprojects/spice-common b/subprojects/spice-common
new file mode 120000
index 00000000..c21cc896
--- /dev/null
+++ b/subprojects/spice-common
@@ -0,0 +1 @@
+../spice-common
\ No newline at end of file
diff --git a/subprojects/spice-common.wrap b/subprojects/spice-common.wrap
deleted file mode 100644
index 6117c631..00000000
--- a/subprojects/spice-common.wrap
+++ /dev/null
@@ -1,4 +0,0 @@
-[wrap-git]
-directory=spice-common
-url=https://gitlab.com/etrunko/spice-common.git
-revision=meson
--
2.17.0
From 3e2e145d670ea6e321c21a1cf56478f39c70df97 Mon Sep 17 00:00:00 2001
From: Christophe Fergeau <cfergeau at redhat.com>
Date: Thu, 3 May 2018 16:11:05 +0200
Subject: [spice-gtk 2/2] misc improvements
Mostly installation related (enum files going to wrong dir, binaries not
being installed, gir/typelib files not needing an explicit installation
dir, ...)
Also moves some of the -DXXX="yyy" passed as CPPFLAGS to config.h
---
man/meson.build | 2 +-
meson.build | 19 ++++++++++---------
src/meson.build | 11 +++++------
tools/meson.build | 2 ++
4 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/man/meson.build b/man/meson.build
index de07ba44..8dde3804 100644
--- a/man/meson.build
+++ b/man/meson.build
@@ -5,7 +5,7 @@ if pod2man.found()
output : 'spice-client.1',
input : 'spice-client.pod',
install : true,
- install_dir : join_paths(spice_gtk_datadir, 'man', 'man1'),
+ install_dir : join_paths(datadir, 'man', 'man1'),
build_by_default : true,
command : [pod2man, '-c', 'Spice-GTK Documentation', '@INPUT@', '@OUTPUT@'])
endif
diff --git a/meson.build b/meson.build
index db6879a3..1e2d4804 100644
--- a/meson.build
+++ b/meson.build
@@ -13,19 +13,19 @@ project('spice-gtk', 'c',
message ('Updating submodules')
run_command ('build-aux/meson/check_spice-common.sh')
+# Directory variables
+bindir = get_option('bindir')
+datadir = get_option('datadir')
+includedir = get_option('includedir')
+prefix = get_option('prefix')
+
#
# global C defines
#
-spice_gtk_datadir = join_paths(get_option('prefix'), get_option('datadir'))
-spice_gtk_locale_dir = join_paths(spice_gtk_datadir, 'locale')
-spice_gtk_introspection_typelib_dir = join_paths(spice_gtk_datadir, 'girepository-1.0')
-spice_gtk_libdir = join_paths(get_option('prefix'), get_option('libdir'))
-spice_gtk_introspection_gir_dir = join_paths(spice_gtk_libdir, 'gir-1.0')
spice_gtk_global_cflags = [#'-std=c99', # fails compiling spice-common/bitops.h
'-DHAVE_CONFIG_H',
'-DSPICE_COMPILATION',
'-DG_LOG_DOMAIN="GSpice"',
- '-DLOCALE_DIR="@0@"'.format(spice_gtk_locale_dir),
#'-Werror',
'-Wall',
'-Wextra',
@@ -257,9 +257,9 @@ endif
# usb-acl-helper-dir
spice_gtk_usb_acl_helper_dir = get_option('usb-acl-helper-dir')
if spice_gtk_usb_acl_helper_dir.strip() == ''
- spice_gtk_usb_acl_helper_dir = join_paths(get_option('prefix'), get_option('bindir'))
+ spice_gtk_usb_acl_helper_dir = join_paths(prefix, bindir)
endif
-spice_gtk_c_args += '-DACL_HELPER_PATH="@0@"'.format(spice_gtk_usb_acl_helper_dir)
+spice_gtk_config_data.set('ACL_HELPER_PATH', '"@0@"'.format(spice_gtk_usb_acl_helper_dir))
# usb-ids-path
spice_gtk_usb_ids_path = get_option('usb-ids-path')
@@ -272,7 +272,7 @@ endif
if spice_gtk_usb_ids_path.strip() != ''
spice_gtk_config_data.set('WITH_USBIDS', '1')
- spice_gtk_c_args += '-DUSB_IDS="@0@"'.format(spice_gtk_usb_ids_path)
+ spice_gtk_config_data.set('USB_IDS', spice_gtk_usb_ids_path)
endif
@@ -372,6 +372,7 @@ proj_name = meson.project_name()
config_data = [['VERSION', proj_version],
['PACKAGE_VERSION', proj_version],
['GETTEXT_PACKAGE', proj_name],
+ ['LOCALE_DIR', join_paths(prefix, get_option('localedir'))],
['PACKAGE_STRING', '@0@ @1@'.format(proj_name, proj_version)],
['PACKAGE_BUGREPORT', 'spice-devel at lists.freedesktop.org']]
foreach conf : config_data
diff --git a/src/meson.build b/src/meson.build
index 1979e84b..e3dce880 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -54,8 +54,9 @@ spice_marshals = gnome.genmarshal('spice-marshal', sources : 'spice-marshal.txt'
# generate spice-glib-enums.[ch]
spice_client_glib_enums = gnome.mkenums_simple('spice-glib-enums',
sources : ['spice-channel.h', 'channel-inputs.h', 'spice-session.h'],
+ body_prefix : '#include "config.h"',
install_header : true,
- install_dir : 'spice-client-glib-2.0')
+ install_dir : join_paths(includedir, 'spice-client-glib-2.0'))
spice_client_glib_introspection_sources = [
spice_client_glib_headers,
@@ -236,8 +237,6 @@ spice_client_glib_gir = gnome.generate_gir(spice_client_glib_lib,
identifier_prefix : 'Spice',
symbol_prefix : 'spice',
install : spice_gtk_has_introspection,
- install_dir_gir : spice_gtk_introspection_gir_dir,
- install_dir_typelib : spice_gtk_introspection_typelib_dir,
namespace : 'SpiceClientGLib',
nsversion : '2.0',
sources : spice_client_glib_introspection_sources)
@@ -252,6 +251,7 @@ if spice_gtk_has_polkit
install_dir : spice_gtk_usb_acl_helper_dir,
c_args : spice_gtk_c_args,
link_args : spice_gtk_link_args,
+ install : true,
dependencies : spice_gtk_deps)
# FIXME: provide install script for setuid https://github.com/mesonbuild/meson/issues/3328
#-chown root $(DESTDIR)$(acldir)/spice-client-glib-usb-acl-helper
@@ -276,9 +276,10 @@ if spice_gtk_has_gtk
# generate spice-widget-enums.[ch]
spice_widget_enums = gnome.mkenums_simple('spice-widget-enums',
+ body_prefix : '#include "config.h"',
sources : 'spice-widget.h',
install_header : true,
- install_dir : 'spice-client-gtk-3.0')
+ install_dir : join_paths(includedir, 'spice-client-gtk-3.0'))
spice_client_gtk_introspection_sources = [
spice_client_gtk_headers,
@@ -363,8 +364,6 @@ if spice_gtk_has_gtk
identifier_prefix : 'Spice',
symbol_prefix : 'spice',
install : spice_gtk_has_introspection,
- install_dir_gir : spice_gtk_introspection_gir_dir,
- install_dir_typelib : spice_gtk_introspection_typelib_dir,
namespace : 'SpiceClientGtk',
nsversion : '3.0',
sources : spice_client_gtk_introspection_sources)
diff --git a/tools/meson.build b/tools/meson.build
index 19a0e712..33e53c2a 100644
--- a/tools/meson.build
+++ b/tools/meson.build
@@ -10,6 +10,7 @@ foreach exe : ['spicy-stats', 'spicy-screenshot']
executable(exe,
sources : spice_cmdline_sources + ['@0 at .c'.format(exe)],
c_args : '-Wno-deprecated-declarations',
+ install : true,
dependencies : spice_client_glib_dep)
endforeach
@@ -26,5 +27,6 @@ if spice_gtk_has_gtk
executable('spicy',
sources : spicy_sources + spice_cmdline_sources,
c_args : '-Wno-deprecated-declarations',
+ install : true,
dependencies : spice_client_gtk_dep)
endif
--
2.17.0
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20180503/90db4a8f/attachment-0001.sig>
More information about the Spice-devel
mailing list