spice/server/meson.build
Frediano Ziglio 1201113acd build: Better version checks and handling for Meson
Strip dirty and git hash.
Check that there are at least 3 numbers at the beginning.

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-18 09:40:28 +01:00

237 lines
6.7 KiB
Meson

spice_server_include += [include_directories('.')]
#
# generate spice-version.h
#
if meson.project_version().startswith('UNKNOWN')
major = '0'
minor = '0'
micro = '1'
else
additional_commits = false
increment_micro = 0
# remove the "-dirty" from version, increment micro later if found
version_info = meson.project_version().split('-dirty')
if version_info.length() > 1
increment_micro = 1
endif
# remove the "-" from version, increment micro later if found
version_info = version_info[0].split('-')
if version_info.length() > 1
additional_commits = true
increment_micro = 1
endif
version_info = version_info[0].split('.')
if ((not additional_commits and version_info.length() != 3)
or (additional_commits and version_info.length() != 4))
error('Invalid version @0@'.format(meson.project_version()))
endif
major = '@0@'.format(version_info[0].to_int())
minor = '@0@'.format(version_info[1].to_int())
micro = '@0@'.format(version_info[2].to_int() + increment_micro)
endif
cmd = run_command('printf', ['0x%02x%02x%02x', major, minor, micro], check : true)
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-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('spice-server-enums',
sources : 'spice-server.h',
symbol_prefix : 'SPICE',
c_template: 'spice-server-enums.c.tmpl',
h_template: 'spice-server-enums.h.tmpl')
spice_server_sources = [
spice_server_headers,
spice_server_enums,
'agent-msg-filter.c',
'agent-msg-filter.h',
'cache-item.h',
'char-device.cpp',
'char-device.h',
'common-graphics-channel.cpp',
'common-graphics-channel.h',
'cursor-channel.cpp',
'cursor-channel-client.cpp',
'cursor-channel-client.h',
'cursor-channel.h',
'utils.hpp',
'safe-list.hpp',
'dcc.cpp',
'dcc.h',
'dcc-private.h',
'dcc-send.cpp',
'dispatcher.cpp',
'dispatcher.h',
'display-channel.cpp',
'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.cpp',
'image-cache.h',
'image-encoders.cpp',
'image-encoders.h',
'inputs-channel.cpp',
'inputs-channel-client.cpp',
'inputs-channel-client.h',
'inputs-channel.h',
'jpeg-encoder.c',
'jpeg-encoder.h',
'main-channel.cpp',
'main-channel-client.cpp',
'main-channel-client.h',
'main-channel.h',
'main-dispatcher.cpp',
'main-dispatcher.h',
'memslot.c',
'memslot.h',
'migration-protocol.h',
'mjpeg-encoder.c',
'net-utils.c',
'net-utils.h',
'pixmap-cache.cpp',
'pixmap-cache.h',
'red-channel.cpp',
'red-channel-capabilities.c',
'red-channel-capabilities.h',
'red-channel-client.cpp',
'red-channel-client.h',
'red-channel.h',
'red-client.cpp',
'red-client.h',
'red-common.h',
'red-parse-qxl.cpp',
'red-parse-qxl.h',
'red-pipe-item.cpp',
'red-pipe-item.h',
'red-qxl.cpp',
'red-qxl.h',
'red-record-qxl.c',
'red-record-qxl.h',
'red-replay-qxl.cpp',
'reds.cpp',
'reds.h',
'reds-private.h',
'red-stream.cpp',
'red-stream.h',
'red-worker.cpp',
'red-worker.h',
'sound.cpp',
'sound.h',
'spice-bitmap-utils.c',
'spice-bitmap-utils.h',
'spicevmc.cpp',
'spice-wrapped.h',
'stat-file.c',
'stat-file.h',
'stat.h',
'stream-channel.cpp',
'stream-channel.h',
'sys-socket.c',
'sys-socket.h',
'red-stream-device.cpp',
'red-stream-device.h',
'sw-canvas.c',
'tree.cpp',
'tree.h',
'utils.c',
'utils.h',
'video-encoder.h',
'video-stream.cpp',
'video-stream.h',
'websocket.c',
'websocket.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.cpp',
'smartcard.h',
'smartcard-channel-client.cpp',
'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 = library('spice-server', spice_server_sources,
version : spice_server_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,
gnu_symbol_visibility : 'hidden')
if get_option('tests')
if get_option('default_library') == 'both'
spice_server_shared_lib = spice_server_libs.get_shared_lib()
spice_server_static_lib = spice_server_libs.get_static_lib()
elif get_option('default_library') == 'shared'
spice_server_shared_lib = spice_server_libs
# create static library extracting objects from shared one, avoid to
# install static library using both_libraries
spice_server_static_lib = static_library('spice-server-static',
objects: spice_server_libs.extract_all_objects(),
dependencies : spice_server_deps)
else
# here we use the static library to link to utilities (currently spice-server-replay)
spice_server_shared_lib = spice_server_libs
spice_server_static_lib = spice_server_libs
endif
subdir('tests')
endif
pc = import('pkgconfig')
pc.generate(spice_server_libs,
description : 'SPICE server library',
subdirs : 'spice-server',
requires : 'spice-protocol')