[Spice-devel] [PATCH spice-server 2/3] Add support for building with meson

Frediano Ziglio fziglio at redhat.com
Tue Jul 24 06:56:34 UTC 2018


> 
> On 22/07/18 11:31, Frediano Ziglio wrote:
> >>
> >> Signed-off-by: Eduardo Lima (Etrunko) <etrunko at redhat.com>
> >> ---
> >>  Makefile.am                           |   2 +
> >>  build-aux/meson/check_spice-common.sh |   2 +
> >>  docs/Makefile.am                      |   1 +
> >>  docs/manual/Makefile.am               |   1 +
> >>  docs/manual/meson.build               |  18 ++++
> >>  docs/meson.build                      |  14 +++
> >>  meson.build                           | 188
> >>  ++++++++++++++++++++++++++++++++++
> >>  meson_options.txt                     |  52 ++++++++++
> >>  server/Makefile.am                    |   1 +
> >>  server/meson.build                    | 187
> >>  +++++++++++++++++++++++++++++++++
> >>  server/tests/Makefile.am              |   1 +
> >>  server/tests/meson.build              |  85 +++++++++++++++
> >>  subprojects/spice-common              |   2 +-
> >>  tools/Makefile.am                     |   4 +
> >>  tools/meson.build                     |   4 +
> >>  15 files changed, 561 insertions(+), 1 deletion(-)
> >>  create mode 100755 build-aux/meson/check_spice-common.sh
> >>  create mode 100644 docs/manual/meson.build
> >>  create mode 100644 docs/meson.build
> >>  create mode 100644 meson.build
> >>  create mode 100644 meson_options.txt
> >>  create mode 100644 server/meson.build
> >>  create mode 100644 server/tests/meson.build
> >>  create mode 100644 tools/meson.build
> >>
> >> diff --git a/Makefile.am b/Makefile.am
> >> index 3845f2b5..774348de 100644
> >> --- a/Makefile.am
> >> +++ b/Makefile.am
> >> @@ -17,6 +17,8 @@ DISTCHECK_CONFIGURE_FLAGS =			\
> >>  	$(NULL)
> >>  
> >>  EXTRA_DIST =					\
> >> +	meson.build				\
> >> +	meson_options.txt			\
> >>  	build-aux/git-version-gen		\
> >>  	.version				\
> >>  	$(NULL)
> >> diff --git a/build-aux/meson/check_spice-common.sh
> >> b/build-aux/meson/check_spice-common.sh
> >> new file mode 100755
> >> index 00000000..98b30aff
> >> --- /dev/null
> >> +++ b/build-aux/meson/check_spice-common.sh
> >> @@ -0,0 +1,2 @@
> >> +#!/bin/sh
> >> +git --git-dir="${MESON_SOURCE_ROOT}/.git" submodule update --init
> >> --recursive subprojects/spice-common || exit 1
> >> diff --git a/docs/Makefile.am b/docs/Makefile.am
> >> index 45667a60..aa4298fd 100644
> >> --- a/docs/Makefile.am
> >> +++ b/docs/Makefile.am
> >> @@ -2,6 +2,7 @@ NULL =
> >>  ASCIIDOC_FLAGS = -a icons -a toc
> >>  
> >>  EXTRA_DIST =					\
> >> +	meson.build				\
> >>  	spice_style.html			\
> >>  	spice_style.txt				\
> >>  	spice_threading_model.html		\
> >> diff --git a/docs/manual/Makefile.am b/docs/manual/Makefile.am
> >> index 24a11fe0..bffccfd3 100644
> >> --- a/docs/manual/Makefile.am
> >> +++ b/docs/manual/Makefile.am
> >> @@ -3,6 +3,7 @@ SUFFIXES = .html
> >>  ASCIIDOC_FLAGS = -a icons -a toc
> >>  
> >>  EXTRA_DIST =					\
> >> +	meson.build				\
> >>  	images/icons/important.png		\
> >>  	images/icons/note.png			\
> >>  	manual.html				\
> >> diff --git a/docs/manual/meson.build b/docs/manual/meson.build
> >> new file mode 100644
> >> index 00000000..4218b546
> >> --- /dev/null
> >> +++ b/docs/manual/meson.build
> >> @@ -0,0 +1,18 @@
> >> +txt = files('manual.txt')
> >> +
> >> +if asciidoc.found()
> >> +  custom_target('manual.html',
> >> +                input : txt,
> >> +                output : 'manual.html',
> >> +                build_by_default : true,
> >> +                command : [asciidoc, '-n', asciidoc_args, '-o',
> >> '@OUTPUT@',
> >> '@INPUT@'])
> >> +endif
> >> +
> >> +a2x = find_program('a2x', required : false)
> >> +if a2x.found()
> >> +  custom_target('manual.chunked',
> >> +                input : txt,
> >> +                output : 'manual.chunked',
> >> +                build_by_default : true,
> >> +                command : [a2x, '-f', 'chunked', '-D',
> >> meson.current_build_dir(), asciidoc_args, '@INPUT@'])
> >> +endif
> >> diff --git a/docs/meson.build b/docs/meson.build
> >> new file mode 100644
> >> index 00000000..82864bb8
> >> --- /dev/null
> >> +++ b/docs/meson.build
> >> @@ -0,0 +1,14 @@
> >> +if get_option('manual')
> >> +  asciidoc = find_program('asciidoc', required : false)
> >> +  if asciidoc.found()
> >> +    asciidoc_args = ['-a', 'data-uri', '-a', 'icons', '-a', 'toc']
> >> +    foreach doc : ['style', 'threading_model']
> >> +      custom_target('spice_ at 0@.html'.format(doc),
> >> +                    input : 'spice_ at 0@.txt'.format(doc),
> >> +                    output : 'spice_ at 0@.html'.format(doc),
> >> +                    build_by_default: true,
> >> +                    command : [asciidoc, '-n', asciidoc_args, '-o',
> >> '@OUTPUT@', '@INPUT@'])
> >> +    endforeach
> >> +  endif
> >> +  subdir('manual')
> >> +endif
> >> diff --git a/meson.build b/meson.build
> >> new file mode 100644
> >> index 00000000..a564daf1
> >> --- /dev/null
> >> +++ b/meson.build
> >> @@ -0,0 +1,188 @@
> >> +#
> >> +# 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', 'c',
> >> +         version : run_command('build-aux/git-version-gen',
> >> '.tarball-version').stdout().strip(),
> >> +         license : 'LGPLv2.1',
> >> +         meson_version : '>= 0.47.0')
> >> +
> >> +message ('Updating submodules')
> >> +run_command ('build-aux/meson/check_spice-common.sh', check : true)
> >> +
> > 
> > I don't really like the idea to require git or a git submodule command
> > here.
> > Source code should compile also from an environment without network (think
> > building from a mock or other restrict containerized build) and from
> > a tarball without git stuff.
> > 
> 
> I agree, but wouldn't this also be a problem with autotools build? As
> from tarball, spice-common will be shipped as part of this one.
> 

Is not a problem with autotools, you are supposed to call configure
and configure doesn't call git.
spice-common should be shipped, right, but not the git part. You don't
need the history of the project or any other VCS data.

> >> +#
> >> +# global C defines
> >> +#
> >> +spice_server_global_cflags = ['-fvisibility=hidden',
> >> +                              '-DSPICE_SERVER_INTERNAL',
> >> +                              '-DG_LOG_DOMAIN="Spice"',
> >> +                              '-DHAVE_CONFIG_H',
> >> +                              #'-Werror',
> >> +                              '-Wall',
> >> +                              '-Wextra',
> >> +                              '-Wno-sign-compare',
> >> +                              '-Wno-unused-parameter']
> >> +
> >> +foreach arg : spice_server_global_cflags
> >> +  add_project_arguments(arg, language : 'c')
> >> +endforeach
> >> +
> >> +# other global vars
> >> +compiler = meson.get_compiler('c')
> >> +spice_server_config_data = configuration_data()
> >> +spice_protocol_min_version='0.12.14'
> >> +spice_server_include = [include_directories('.')]
> >> +spice_server_deps = []
> >> +spice_server_link_args = []
> >> +spice_server_requires = ''
> >> +
> >> +#
> >> +# Spice common subproject
> >> +#
> >> +spice_common = subproject('spice-common', default_options :
> >> 'generate-code=server')
> >> +spice_server_config_data.merge_from(spice_common.get_variable('spice_common_config_data'))
> >> +spice_server_deps += spice_common.get_variable('spice_common_server_dep')
> >> +
> >> +#
> >> +# check for system headers
> >> +#
> >> +headers = ['sys/time.h',
> >> +           'execinfo.h',
> >> +           'linux/sockios.h',
> >> +           'pthread_np.h']
> >> +
> >> +foreach header : headers
> >> +  if compiler.has_header(header)
> >> +
> >> spice_server_config_data.set('HAVE_ at 0@'.format(header.underscorify().to_upper()),
> >> '1')
> >> +  endif
> >> +endforeach
> >> +
> >> +# TCP_KEEPIDLE definition in netinet/tcp.h
> >> +if compiler.has_header_symbol('netinet/tcp.h', 'TCP_KEEPIDLE')
> >> +  spice_server_config_data.set('HAVE_TCP_KEEPIDLE', '1')
> >> +endif
> >> +
> >> +#
> >> +# check for mandatory dependencies
> >> +#
> >> +foreach dep : ['libjpeg', 'zlib']
> >> +  spice_server_deps += dependency(dep)
> >> +endforeach
> >> +
> >> +foreach dep : ['librt', 'libm']
> >> +  spice_server_deps += compiler.find_library(dep)
> >> +endforeach
> >> +
> >> +#
> >> +# Non-mandatory/optional dependencies
> >> +#
> >> +optional_deps = [
> >> +                  ['celt051', '>= 0.5.1.1'],
> >> +                  ['opus', '>= 0.9.14'],
> >> +                ]
> >> +foreach dep : optional_deps
> >> +  option_value = get_option(dep[0])
> >> +  if option_value != 'false'
> >> +    d = dependency(dep[0], required: (option_value == 'true'), version :
> >> dep[1])
> >> +    if d.found()
> >> +      spice_server_deps += d
> >> +
> >> spice_server_config_data.set('HAVE_ at 0@'.format(dep[0].underscorify().to_upper()),
> >> '1')
> >> +    endif
> >> +  endif
> >> +endforeach
> >> +
> >> +# gstreamer
> >> +spice_server_has_gstreamer = false
> >> +spice_server_gst_version = get_option('gstreamer')
> >> +if spice_server_gst_version != 'no'
> >> +  gst_deps = ['gstreamer', 'gstreamer-base', 'gstreamer-app',
> >> 'gstreamer-video']
> >> +  foreach dep : gst_deps
> >> +    dep = '@0 at -@1@'.format(dep, spice_server_gst_version)
> >> +    spice_server_deps += dependency(dep)
> >> +  endforeach
> >> +  spice_server_deps += dependency('orc-0.4')
> >> +
> >> +  gst_def = 'HAVE_GSTREAMER'
> >> +  if spice_server_gst_version == '1.0'
> >> +    gst_def = 'HAVE_GSTREAMER_1_0'
> >> +  endif
> >> +
> >> +  spice_server_config_data.set(gst_def, '1')
> >> +  spice_server_has_gstreamer = true
> >> +endif
> >> +
> >> +# lz4
> >> +spice_server_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_server_deps += lz4_dep
> >> +  spice_server_config_data.set('USE_LZ4', '1')
> >> +  spice_server_has_lz4 = true
> > 
> > trying this patch looks like we need to check for
> > LZ4_compress_fast_continue
> > function. Also in m4/spice-deps.m4 there is a check for
> > LZ4_compress_default
> > to verify we can link lz4 library.
> > 
> 
> I remember adding those specific version numbers so that it is not
> required to check for LZ4_compress_default. It was added back in version
> 129, and then they changed the numbering scheme, to Major.Minor.Release,
> with the first one being 1.7.3.
> 

But it is not testing for LZ4_compress_fast_continue

> Meson understands 1.7.3 being smaller than 129, hence the need for both
> checks.
> 

Yes, this is clear, 129 > 1

> >> +endif
> >> +
> >> +# sasl
> >> +spice_server_has_sasl = false
> >> +if get_option('sasl')
> >> +  spice_server_deps += dependency('libsasl2')
> >> +  spice_server_config_data.set('HAVE_SASL', '1')
> >> +  spice_server_has_sasl = true
> >> +endif
> >> +
> >> +# smartcard check
> >> +spice_server_has_smartcard = false
> >> +if get_option('smartcard')
> >> +  smartcard_dep = dependency('libcacard', required : false, version : '>=
> >> 2.5.1')
> >> +  if smartcard_dep.found()
> >> +    spice_server_deps += smartcard_dep
> >> +    spice_server_config_data.set('USE_SMARTCARD', '1')
> >> +  else
> >> +    smartcard012_dep = dependency('libcacard', required : false, version
> >> :
> >> '>= 0.1.2')
> >> +    if smartcard012_dep.found()
> >> +      spice_server_deps += smartcard012_dep
> >> +      spice_server_config_data.set('USE_SMARTCARD_012', '1')
> >> +    endif
> >> +  endif
> >> +
> >> +  spice_server_has_smartcard = smartcard_dep.found() or
> >> smartcard012_dep.found()
> >> +  if not spice_server_has_smartcard
> >> +    error('Building with smartcard support but dependency not found')
> >> +  endif
> >> +endif
> >> +
> >> +#
> >> +# Subdirectories
> >> +#
> >> +subdir('server')
> >> +subdir('tools')
> >> +subdir('docs')
> >> +
> >> +#
> >> +# write config.h
> >> +#
> >> +spice_server_config_data.set_quoted('VERSION', meson.project_version())
> >> +spice_server_config_data.set('SPICE_USE_SAFER_CONTAINEROF', '1')
> >> +
> >> +if get_option('statistics')
> >> +  spice_server_config_data.set('RED_STATISTICS', '1')
> >> +endif
> >> +
> >> +configure_file(output : 'config.h',
> >> +               install : false,
> >> +               configuration : spice_server_config_data)
> >> +
> >> +#
> >> +# write spice-server.pc
> >> +#
> >> +pkgconfig = import('pkgconfig')
> >> +pkgconfig.generate(spice_server_shared_lib,
> >> +                   description : 'SPICE server library',
> >> +                   requires : 'spice-protocol >=
> >> @0@'.format(spice_protocol_min_version),
> >> +                   variables : 'exec_prefix=${prefix}',
> >> +                   subdirs : 'spice-server')
> >> diff --git a/meson_options.txt b/meson_options.txt
> >> new file mode 100644
> >> index 00000000..86f4633d
> >> --- /dev/null
> >> +++ b/meson_options.txt
> >> @@ -0,0 +1,52 @@
> >> +option('gstreamer',
> >> +    type : 'combo',
> >> +    choices : ['1.0', '0.10', 'no'],
> >> +    description : 'Enable gstreamer support')
> >> +
> >> +option('lz4',
> >> +    type : 'boolean',
> >> +    value : true,
> >> +    description: 'Enable lz4 compression support')
> >> +
> >> +option('sasl',
> >> +    type : 'boolean',
> >> +    value : true,
> >> +    description : 'Use cyrus SASL authentication')
> >> +
> >> +option('celt051',
> >> +    type : 'combo',
> >> +    choices : ['true', 'false', 'auto'],
> >> +    value : 'auto',
> >> +    yield : true,
> >> +    description: 'Enable celt051 audio codec')
> >> +
> >> +option('opus',
> >> +    type : 'combo',
> >> +    choices : ['true', 'false', 'auto'],
> >> +    yield : true,
> >> +    description: 'Enable Opus audio codec')
> >> +
> >> +option('smartcard',
> >> +    type : 'boolean',
> >> +    value : true,
> >> +    description : 'Enable smartcard support')
> >> +
> >> +option('alignment-checks',
> >> +    type : 'boolean',
> >> +    value : false,
> >> +    description : 'Enable runtime checks for cast alignment')
> >> +
> >> +option('extra-checks',
> >> +    type : 'boolean',
> >> +    value: false,
> >> +    description : 'Enable extra checks on code')
> >> +
> >> +option('statistics',
> >> +    type : 'boolean',
> >> +    value: false,
> >> +    description : 'Build SPICE with statistic code enabled')
> >> +
> >> +option('manual',
> >> +    type : 'boolean',
> >> +    value : true,
> >> +    description : 'Build SPICE manual')
> >> diff --git a/server/Makefile.am b/server/Makefile.am
> >> index 94051760..e4d1719c 100644
> >> --- a/server/Makefile.am
> >> +++ b/server/Makefile.am
> >> @@ -213,6 +213,7 @@ spice-server-enums.h: spice-server.h
> >> spice-server-enums.h.tmpl
> >>  	$(AM_V_GEN)glib-mkenums --template $(srcdir)/spice-server-enums.h.tmpl
> >>  	$< >
> >>  	$@
> >>  
> >>  EXTRA_DIST =					\
> >> +	meson.build				\
> >>  	spice-bitmap-utils.tmpl.c		\
> >>  	cache-item.tmpl.c			\
> >>  	glz-encode-match.tmpl.c			\
> >> diff --git a/server/meson.build b/server/meson.build
> >> new file mode 100644
> >> index 00000000..e40ec919
> >> --- /dev/null
> >> +++ b/server/meson.build
> >> @@ -0,0 +1,187 @@
> >> +spice_server_include += [include_directories('.')]
> >> +
> >> +#
> >> +# 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].to_int()
> >> +if not version_info[3].contains('git')
> >> +  micro += 1
> >> +endif
> >> +micro = '@0@'.format(micro)
> >> +cmd = run_command('printf', ['"0x%02x%02x%02x"', major, minor, micro])
> >> +version_data = configuration_data()
> >> +version_data.set('SPICE_SERVER_VERSION', cmd.stdout().strip())
> >> +spice_version_h = configure_file(input : 'spice-version.h.in',
> >> +                                 output : 'spice-version.h',
> >> +                                 configuration : version_data)
> >> +
> >> +#
> >> +# libspice-server.so
> >> +#
> >> +spice_server_headers = [
> >> +  spice_version_h,
> >> +  'spice-audio.h',
> >> +  'spice-char.h',
> >> +  'spice-core.h',
> >> +  'spice-experimental.h',
> >> +  'spice-input.h',
> >> +  'spice-migration.h',
> >> +  'spice-qxl.h',
> >> +  'spice-server.h',
> >> +  'spice-replay.h',
> >> +  'spice.h',
> >> +]
> >> +
> >> +install_headers(spice_server_headers, subdir : 'spice-server')
> >> +
> >> +# generate enums
> >> +gnome = import('gnome')
> >> +spice_server_enums = gnome.mkenums_simple('spice-server-enums',
> >> +                                          sources : 'spice-server.h')
> >> +
> >> +spice_server_sources = [
> >> +  spice_server_headers,
> >> +  spice_server_enums,
> >> +  'agent-msg-filter.c',
> >> +  'agent-msg-filter.h',
> >> +  'cache-item.h',
> >> +  'char-device.c',
> >> +  'char-device.h',
> >> +  'common-graphics-channel.c',
> >> +  'common-graphics-channel.h',
> >> +  'cursor-channel.c',
> >> +  'cursor-channel-client.c',
> >> +  'cursor-channel-client.h',
> >> +  'cursor-channel.h',
> >> +  'dcc.c',
> >> +  'dcc.h',
> >> +  'dcc-private.h',
> >> +  'dcc-send.c',
> >> +  'demarshallers.h',
> >> +  'dispatcher.c',
> >> +  'dispatcher.h',
> >> +  'display-channel.c',
> >> +  'display-channel.h',
> >> +  'display-channel-private.h',
> >> +  'display-limits.h',
> >> +  'event-loop.c',
> >> +  'glib-compat.h',
> >> +  'glz-encoder.c',
> >> +  'glz-encoder-dict.c',
> >> +  'glz-encoder-dict.h',
> >> +  'glz-encoder.h',
> >> +  'glz-encoder-priv.h',
> >> +  'image-cache.c',
> >> +  'image-cache.h',
> >> +  'image-encoders.c',
> >> +  'image-encoders.h',
> >> +  'inputs-channel.c',
> >> +  'inputs-channel-client.c',
> >> +  'inputs-channel-client.h',
> >> +  'inputs-channel.h',
> >> +  'jpeg-encoder.c',
> >> +  'jpeg-encoder.h',
> >> +  'main-channel.c',
> >> +  'main-channel-client.c',
> >> +  'main-channel-client.h',
> >> +  'main-channel.h',
> >> +  'main-dispatcher.c',
> >> +  'main-dispatcher.h',
> >> +  'memslot.c',
> >> +  'memslot.h',
> >> +  'migration-protocol.h',
> >> +  'mjpeg-encoder.c',
> >> +  'net-utils.c',
> >> +  'net-utils.h',
> >> +  'pixmap-cache.c',
> >> +  'pixmap-cache.h',
> >> +  'red-channel.c',
> >> +  'red-channel-capabilities.c',
> >> +  'red-channel-capabilities.h',
> >> +  'red-channel-client.c',
> >> +  'red-channel-client.h',
> >> +  'red-channel.h',
> >> +  'red-client.c',
> >> +  'red-client.h',
> >> +  'red-common.h',
> >> +  'red-parse-qxl.c',
> >> +  'red-parse-qxl.h',
> >> +  'red-pipe-item.c',
> >> +  'red-pipe-item.h',
> >> +  'red-qxl.c',
> >> +  'red-qxl.h',
> >> +  'red-record-qxl.c',
> >> +  'red-record-qxl.h',
> >> +  'red-replay-qxl.c',
> >> +  'reds.c',
> >> +  'reds.h',
> >> +  'reds-private.h',
> >> +  'red-stream.c',
> >> +  'red-stream.h',
> >> +  'red-worker.c',
> >> +  'red-worker.h',
> >> +  'sound.c',
> >> +  'sound.h',
> >> +  'spice-bitmap-utils.c',
> >> +  'spice-bitmap-utils.h',
> >> +  'spicevmc.c',
> >> +  'stat-file.c',
> >> +  'stat-file.h',
> >> +  'stat.h',
> >> +  'stream-channel.c',
> >> +  'stream-channel.h',
> >> +  'red-stream-device.c',
> >> +  'red-stream-device.h',
> >> +  'sw-canvas.c',
> >> +  'tree.c',
> >> +  'tree.h',
> >> +  'utils.c',
> >> +  'utils.h',
> >> +  'video-encoder.h',
> >> +  'video-stream.c',
> >> +  'video-stream.h',
> >> +  'zlib-encoder.c',
> >> +  'zlib-encoder.h',
> >> +]
> >> +
> >> +if spice_server_has_lz4 == true
> >> +  spice_server_sources += ['lz4-encoder.c',
> >> +                           'lz4-encoder.h']
> >> +endif
> >> +
> >> +if spice_server_has_smartcard == true
> >> +  spice_server_sources += ['smartcard.c',
> >> +                           'smartcard.h',
> >> +                           'smartcard-channel-client.c',
> >> +                           'smartcard-channel-client.h']
> >> +endif
> >> +
> >> +if spice_server_has_gstreamer == true
> >> +  spice_server_sources += ['gstreamer-encoder.c']
> >> +endif
> >> +
> >> +#
> >> +# custom link_args
> >> +#
> >> +spice_server_syms = files('spice-server.syms')
> >> +spice_server_syms_path = join_paths(meson.current_source_dir(),
> >> 'spice-server.syms')
> >> +spice_server_link_args = ['-Wl,--no-copy-dt-needed-entries',
> >> +                          '-Wl,-z,relro',
> >> +                          '-Wl,-z,now',
> >> +
> >> '-Wl,--version-script=@0@'.format(spice_server_syms_path)]
> >> +
> >> +spice_server_libs = both_libraries('spice-server', spice_server_sources,
> >> +                                   version : '1.12.4',
> > 
> > 1.12.4 ? Is not 1.14.1? I think this version number should be in a more
> > global position (like /meson.build).
> 
> This is what the latest master gives to me. This is not the same scheme
> used by libtool, but the version of the .so itself.
> 
> lrwxrwxrwx. 1 elima elima   25 Jul 23 13:55 libspice-server.so ->
> libspice-server.so.1.12.4
> lrwxrwxrwx. 1 elima elima   25 Jul 23 13:55 libspice-server.so.1 ->
> libspice-server.so.1.12.4
> -rwxrwxr-x. 1 elima elima 6.5M Jul 23 13:55 libspice-server.so.1.12.4
> 

Ok, so is the SO version.

> 
> > 
> >> +                                   install : true,
> >> +                                   include_directories :
> >> spice_server_include,
> >> +                                   link_args :
> >> compiler.get_supported_link_arguments(spice_server_link_args),
> >> +                                   link_depends : spice_server_syms,
> >> +                                   dependencies : spice_server_deps)
> >> +
> >> +spice_server_shared_lib = spice_server_libs.get_shared_lib()
> >> +spice_server_static_lib = spice_server_libs.get_static_lib()
> >> +
> >> +subdir('tests')
> >> diff --git a/server/tests/Makefile.am b/server/tests/Makefile.am
> >> index 4d5c4038..28a3abb5 100644
> >> --- a/server/tests/Makefile.am
> >> +++ b/server/tests/Makefile.am
> >> @@ -4,6 +4,7 @@ NULL =
> >>  VALGRIND_SUPPRESSIONS_FILES = $(srcdir)/valgrind/glib.supp
> >>  EXTRA_DIST =				\
> >>  	$(VALGRIND_SUPPRESSIONS_FILES)	\
> >> +	meson.build			\
> >>  	pki/ca-cert.pem			\
> >>  	pki/server-cert.pem		\
> >>  	pki/server-key.pem		\
> >> diff --git a/server/tests/meson.build b/server/tests/meson.build
> >> new file mode 100644
> >> index 00000000..1c68030e
> >> --- /dev/null
> >> +++ b/server/tests/meson.build
> >> @@ -0,0 +1,85 @@
> >> +test_lib_include = [spice_server_include, include_directories('.')]
> >> +test_lib_deps = [spice_server_deps, dependency('gio-unix-2.0')]
> >> +
> >> +test_lib_sources = [
> >> +  'basic-event-loop.c',
> >> +  'basic-event-loop.h',
> >> +  'test-display-base.c',
> >> +  'test-display-base.h',
> >> +  'test-glib-compat.c',
> >> +  'test-glib-compat.h',
> >> +]
> >> +
> >> +test_libs = []
> >> +test_libs += static_library('testlib', test_lib_sources,
> >> +                            link_with: spice_server_static_lib,
> >> +                            include_directories : test_lib_include,
> >> +                            dependencies : test_lib_deps,
> >> +                            install : false)
> >> +
> >> +stat_test_libs = [['1', '0', '0'], ['2', '0', '1'], ['3', '1', '0'],
> >> ['4',
> >> '1', '1']]
> >> +foreach t : stat_test_libs
> >> +  test_libs += static_library('testlib_stat at 0@'.format(t[0]),
> >> 'stat-test.c',
> >> +                              c_args :
> >> ['-DTEST_NAME=stat_test at 0@'.format(t[0]),
> >> +
> >> '-DTEST_COMPRESS_STAT=@0@'.format(t[1]),
> >> +
> >> '-DTEST_RED_WORKER_STAT=@0@'.format(t[2])],
> >> +                              include_directories : test_lib_include,
> >> +                              dependencies : test_lib_deps,
> >> +                              install : false)
> > 
> > while linking these to all tests? Not a bit issue anyway.
> 
> Yes, just a matter of simplifying the rules, instead of checking which
> tests actually make use of these, just use it for every one.
> 

Make sense, not a big deal in this case.
Maybe a comment in meson file could help.

> > 
> >> +endforeach
> >> +
> >> +tests = [
> >> +  ['test-codecs-parsing', true],
> >> +  ['test-options', true],
> >> +  ['test-stat', true],
> >> +  ['test-stream', true],
> >> +  ['test-agent-msg-filter', true],
> >> +  ['test-loop', true],
> >> +  ['test-qxl-parsing', true],
> >> +  ['test-stat-file', true],
> >> +  ['test-leaks', true],
> >> +  ['test-vdagent', true],
> >> +  ['test-fail-on-null-core-interface', true],
> >> +  ['test-empty-success', true],
> >> +  ['test-channel', true],
> >> +  ['test-stream-device', true],
> >> +  ['test-listen', true],
> >> +  ['test-display-no-ssl', false],
> >> +  ['test-display-streaming', false],
> >> +  ['test-playback', false],
> >> +  ['test-display-resolution-changes', false],
> >> +  ['test-two-servers', false],
> >> +  ['test-display-width-stride', false],
> >> +]
> >> +
> >> +if spice_server_has_sasl
> >> +  tests += [['test-sasl', true],]
> >> +endif
> >> +
> >> +if spice_server_has_gstreamer
> >> +  tests += [['test-gst', false],]
> >> +  if get_option('extra-checks')
> >> +    test('video-encoders', files('video-encoders'))
> >> +  endif
> >> +endif
> >> +
> >> +foreach t : tests
> >> +  exe = executable(t[0],
> >> +                   sources : '@0 at .c'.format(t[0]),
> >> +                   link_with : test_libs,
> >> +                   include_directories : test_lib_include,
> >> +                   c_args :
> >> ['-DSPICE_TOP_SRCDIR="@0@"'.format(meson.source_root())],
> >> +                   dependencies : test_lib_deps,
> >> +                   install : false)
> >> +
> >> +  if t[1]
> >> +    test(t[0], exe)
> >> +  endif
> >> +endforeach
> >> +
> >> +executable('spice-server-replay',
> >> +           sources : ['replay.c', join_paths('..', 'event-loop.c'),
> >> 'basic-event-loop.c', 'basic-event-loop.h'],
> >> +           link_with : spice_server_shared_lib,
> >> +           include_directories : test_lib_include,
> >> +           dependencies : test_lib_deps,
> >> +           install : false)
> >> diff --git a/subprojects/spice-common b/subprojects/spice-common
> >> index f82a6c53..bf27647d 160000
> >> --- a/subprojects/spice-common
> >> +++ b/subprojects/spice-common
> >> @@ -1 +1 @@
> >> -Subproject commit f82a6c5349a9a71485910bd3a57fe588c49d74f8
> >> +Subproject commit bf27647d725d98f549da6461a9736ddca1f4943d
> >> diff --git a/tools/Makefile.am b/tools/Makefile.am
> >> index 03980c5e..cfb0a213 100644
> >> --- a/tools/Makefile.am
> >> +++ b/tools/Makefile.am
> >> @@ -17,3 +17,7 @@ noinst_PROGRAMS = \
> >>  reds_stat_SOURCES = \
> >>  	reds_stat.c \
> >>  	$(NULL)
> >> +
> >> +EXTRA_DIST = \
> >> +	meson.build \
> >> +	$(NULL)
> >> diff --git a/tools/meson.build b/tools/meson.build
> >> new file mode 100644
> >> index 00000000..1d78340b
> >> --- /dev/null
> >> +++ b/tools/meson.build
> >> @@ -0,0 +1,4 @@
> >> +executable('reds_stat', 'reds_stat.c',
> >> +           install : false,
> >> +           include_directories : spice_server_include,
> >> +           dependencies : spice_server_deps)
> > 

We don't need all spice server dependencies for the tools, just
spice-protocol and spice-common, actually only CFLAGS, not
even the libraries. May look similar to the tests but in this case
is too lazy, also could change the final result.

Frediano


More information about the Spice-devel mailing list