On 24/07/18 03:56, Frediano Ziglio wrote: >> >> On 22/07/18 11:31, Frediano Ziglio wrote: >>>> >>>> Signed-off-by: Eduardo Lima (Etrunko) <etrunko@xxxxxxxxxx> >>>> --- >>>> 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_@0@.html'.format(doc), >>>> + input : 'spice_@0@.txt'.format(doc), >>>> + output : 'spice_@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_@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_@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@-@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 Likewise, it has also been present in 129 and above. > >> 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@0@'.format(t[0]), >>>> 'stat-test.c', >>>> + c_args : >>>> ['-DTEST_NAME=stat_test@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@.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 > -- Eduardo de Barros Lima (Etrunko) Software Engineer - RedHat etrunko@xxxxxxxxxx _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel