mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2025-12-27 15:45:54 +00:00
This new version ships the fix for the issue where 'check' keyword could not be used in project definition, so we had to run that command again only to check if it succeeded. https://github.com/mesonbuild/meson/issues/3944 Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com> Acked-by: Frediano Ziglio <fziglio@redhat.com> Acked-by: Victor Toso <victortoso@redhat.com>
242 lines
7.8 KiB
Meson
242 lines
7.8 KiB
Meson
#
|
||
# project definition
|
||
#
|
||
project('spice', 'c',
|
||
version : run_command('build-aux/git-version-gen', '${MESON_SOURCE_ROOT}/.tarball-version', check : true).stdout().strip(),
|
||
license : 'LGPLv2.1',
|
||
meson_version : '>= 0.47.2')
|
||
|
||
message('Updating submodules')
|
||
run_command('build-aux/meson/check-spice-common', check : true)
|
||
|
||
#
|
||
# soversion
|
||
# The versioning is defined by the forumla (CURRENT-AGE.AGE.REVISION)
|
||
#
|
||
# XXX: KEEP IN SYNC WITH configure.ac file
|
||
#
|
||
# Follow the libtool manual for the so version:
|
||
# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
||
# - If the library source code has changed at all since the last update,
|
||
# then increment revision (‘c:r:a’ becomes ‘c:r+1:a’).
|
||
# - If any interfaces have been added, removed, or changed since the last update,
|
||
# increment current, and set revision to 0.
|
||
# - If any interfaces have been added since the last public release,
|
||
# then increment age.
|
||
# - If any interfaces have been removed or changed since the last public release,
|
||
# then set age to 0.
|
||
#
|
||
#
|
||
spice_server_current = 13
|
||
spice_server_revision = 5
|
||
spice_server_age = 12
|
||
spice_server_so_version = '@0@.@1@.@2@'.format(spice_server_current - spice_server_age,
|
||
spice_server_age,
|
||
spice_server_revision)
|
||
message('libspice.so version: ' + spice_server_so_version)
|
||
|
||
# some global vars
|
||
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']
|
||
|
||
compiler = meson.get_compiler('c')
|
||
spice_server_config_data = configuration_data()
|
||
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
|
||
#
|
||
spice_protocol_version='0.12.15'
|
||
|
||
glib_version = '2.38'
|
||
glib_version_info = '>= @0@'.format(glib_version)
|
||
pixman_version = '>= 0.17.7'
|
||
|
||
deps = {'spice-protocol' : '>= @0@'.format(spice_protocol_version),
|
||
'glib-2.0' : glib_version_info,
|
||
'gio-2.0' : glib_version_info,
|
||
'gobject-2.0' : glib_version_info,
|
||
'pixman-1' : pixman_version,
|
||
'openssl' : '>= 1.0.0'}
|
||
|
||
foreach dep, version : deps
|
||
spice_server_deps += dependency(dep, version : version)
|
||
endforeach
|
||
|
||
# TODO: specify minimum version for jpeg and zlib?
|
||
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, version : optional_deps
|
||
d = dependency(dep, required : get_option(dep), version : version)
|
||
if d.found()
|
||
spice_server_deps += d
|
||
spice_server_config_data.set('HAVE_@0@'.format(dep.underscorify().to_upper()), '1')
|
||
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
|
||
|
||
if compiler.has_function('LZ4_compress_fast_continue', dependencies : lz4_dep)
|
||
spice_server_config_data.set('HAVE_LZ4_COMPRESS_FAST_CONTINUE', '1')
|
||
endif
|
||
|
||
spice_server_deps += lz4_dep
|
||
spice_server_config_data.set('USE_LZ4', '1')
|
||
spice_server_has_lz4 = true
|
||
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
|
||
|
||
spice_server_requires += 'libcacard >= 0.1.2 '
|
||
endif
|
||
|
||
#
|
||
# global C defines
|
||
#
|
||
glib_major_minor = glib_version.split('.')
|
||
glib_encoded_version = 'GLIB_VERSION_@0@_@1@'.format(glib_major_minor[0], glib_major_minor[1])
|
||
spice_server_global_cflags += ['-DGLIB_VERSION_MIN_REQUIRED=@0@'.format(glib_encoded_version),
|
||
'-DGLIB_VERSION_MAX_ALLOWED=@0@'.format(glib_encoded_version)]
|
||
|
||
add_project_arguments(compiler.get_supported_arguments(spice_server_global_cflags),
|
||
language : 'c')
|
||
|
||
#
|
||
# 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
|
||
#
|
||
spice_server_pc = configuration_data()
|
||
spice_server_pc.set('prefix', get_option('prefix'))
|
||
spice_server_pc.set('exec_prefix', '${prefix}')
|
||
spice_server_pc.set('libdir', join_paths('${exec_prefix}', get_option('libdir')))
|
||
spice_server_pc.set('includedir', join_paths('${prefix}', get_option('includedir')))
|
||
spice_server_pc.set('VERSION', meson.project_version())
|
||
spice_server_pc.set('SPICE_PROTOCOL_MIN_VER', spice_protocol_version)
|
||
spice_server_requires += 'glib-2.0 @0@ gio-2.0 @0@ gobject-2.0 @0@ pixman-1 @1@ openssl'.format(glib_version_info, pixman_version)
|
||
spice_server_pc.set('SPICE_REQUIRES', spice_server_requires)
|
||
spice_server_pc.set('SPICE_NONPKGCONFIG_LIBS', '-pthread -lm -lrt')
|
||
|
||
configure_file(input : 'spice-server.pc.in',
|
||
output : 'spice-server.pc',
|
||
install_dir : join_paths(get_option('libdir'), 'pkgconfig'),
|
||
configuration : spice_server_pc)
|