mirror of https://gitee.com/openkylin/qemu.git
174 lines
4.3 KiB
Meson
174 lines
4.3 KiB
Meson
project('libslirp', 'c',
|
|
version : '4.7.0',
|
|
license : 'BSD-3-Clause',
|
|
default_options : ['warning_level=1', 'c_std=gnu99'],
|
|
meson_version : '>= 0.50',
|
|
)
|
|
|
|
version = meson.project_version()
|
|
varr = version.split('.')
|
|
major_version = varr[0]
|
|
minor_version = varr[1]
|
|
micro_version = varr[2]
|
|
|
|
conf = configuration_data()
|
|
conf.set('SLIRP_MAJOR_VERSION', major_version)
|
|
conf.set('SLIRP_MINOR_VERSION', minor_version)
|
|
conf.set('SLIRP_MICRO_VERSION', micro_version)
|
|
|
|
full_version = run_command('build-aux/git-version-gen',
|
|
'@0@/.tarball-version'.format(meson.current_source_dir()),
|
|
check : true).stdout().strip()
|
|
if full_version.startswith('UNKNOWN')
|
|
full_version = meson.project_version()
|
|
elif not full_version.startswith(meson.project_version())
|
|
error('meson.build project version @0@ does not match git-describe output @1@'
|
|
.format(meson.project_version(), full_version))
|
|
endif
|
|
conf.set_quoted('SLIRP_VERSION_STRING', full_version + get_option('version_suffix'))
|
|
|
|
# libtool versioning - this applies to libslirp
|
|
#
|
|
# See http://sources.redhat.com/autobook/autobook/autobook_91.html#SEC91 for details
|
|
#
|
|
# - If interfaces have been changed or added, but binary compatibility
|
|
# has been preserved, change:
|
|
# CURRENT += 1
|
|
# REVISION = 0
|
|
# AGE += 1
|
|
# - If binary compatibility has been broken (eg removed or changed
|
|
# interfaces), change:
|
|
# CURRENT += 1
|
|
# REVISION = 0
|
|
# AGE = 0
|
|
# - If the interface is the same as the previous version, but bugs are
|
|
# fixed, change:
|
|
# REVISION += 1
|
|
lt_current = 4
|
|
lt_revision = 0
|
|
lt_age = 4
|
|
lt_version = '@0@.@1@.@2@'.format(lt_current - lt_age, lt_age, lt_revision)
|
|
|
|
host_system = host_machine.system()
|
|
|
|
glib_dep = dependency('glib-2.0')
|
|
|
|
cc = meson.get_compiler('c')
|
|
add_project_arguments(cc.get_supported_arguments('-Wmissing-prototypes', '-Wstrict-prototypes',
|
|
'-Wredundant-decls', '-Wundef', '-Wwrite-strings'),
|
|
language: 'c', native: false)
|
|
|
|
platform_deps = []
|
|
|
|
if host_system == 'windows'
|
|
platform_deps += [
|
|
cc.find_library('ws2_32'),
|
|
cc.find_library('iphlpapi')
|
|
]
|
|
elif host_system == 'darwin'
|
|
platform_deps += [
|
|
cc.find_library('resolv')
|
|
]
|
|
endif
|
|
|
|
cargs = [
|
|
'-DG_LOG_DOMAIN="Slirp"',
|
|
]
|
|
|
|
if cc.check_header('valgrind/valgrind.h')
|
|
cargs += [ '-DHAVE_VALGRIND=1' ]
|
|
endif
|
|
|
|
sources = [
|
|
'src/arp_table.c',
|
|
'src/bootp.c',
|
|
'src/cksum.c',
|
|
'src/dhcpv6.c',
|
|
'src/dnssearch.c',
|
|
'src/if.c',
|
|
'src/ip6_icmp.c',
|
|
'src/ip6_input.c',
|
|
'src/ip6_output.c',
|
|
'src/ip_icmp.c',
|
|
'src/ip_input.c',
|
|
'src/ip_output.c',
|
|
'src/mbuf.c',
|
|
'src/misc.c',
|
|
'src/ncsi.c',
|
|
'src/ndp_table.c',
|
|
'src/sbuf.c',
|
|
'src/slirp.c',
|
|
'src/socket.c',
|
|
'src/state.c',
|
|
'src/stream.c',
|
|
'src/tcp_input.c',
|
|
'src/tcp_output.c',
|
|
'src/tcp_subr.c',
|
|
'src/tcp_timer.c',
|
|
'src/tftp.c',
|
|
'src/udp.c',
|
|
'src/udp6.c',
|
|
'src/util.c',
|
|
'src/version.c',
|
|
'src/vmstate.c',
|
|
]
|
|
|
|
mapfile = 'src/libslirp.map'
|
|
vflag = []
|
|
vflag_test = '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(), mapfile)
|
|
if cc.has_link_argument(vflag_test)
|
|
vflag += vflag_test
|
|
endif
|
|
|
|
install_devel = not meson.is_subproject()
|
|
|
|
configure_file(
|
|
input : 'src/libslirp-version.h.in',
|
|
output : 'libslirp-version.h',
|
|
install : install_devel,
|
|
install_dir : join_paths(get_option('includedir'), 'slirp'),
|
|
configuration : conf
|
|
)
|
|
|
|
lib = library('slirp', sources,
|
|
version : lt_version,
|
|
c_args : cargs,
|
|
link_args : vflag,
|
|
link_depends : mapfile,
|
|
dependencies : [glib_dep, platform_deps],
|
|
install : install_devel or get_option('default_library') == 'shared',
|
|
)
|
|
|
|
pingtest = executable('pingtest', 'test/pingtest.c',
|
|
link_with: [ lib ],
|
|
include_directories: [ 'src' ],
|
|
dependencies : [ platform_deps ]
|
|
)
|
|
|
|
test('ping', pingtest)
|
|
|
|
if install_devel
|
|
install_headers(['src/libslirp.h'], subdir : 'slirp')
|
|
|
|
pkg = import('pkgconfig')
|
|
|
|
pkg.generate(
|
|
version : version,
|
|
libraries : lib,
|
|
requires : [
|
|
'glib-2.0',
|
|
],
|
|
name : 'slirp',
|
|
description : 'User-space network stack',
|
|
filebase : 'slirp',
|
|
subdirs : 'slirp',
|
|
)
|
|
else
|
|
if get_option('default_library') == 'both'
|
|
lib = lib.get_static_lib()
|
|
endif
|
|
libslirp_dep = declare_dependency(
|
|
include_directories: include_directories('.', 'src'),
|
|
link_with: lib)
|
|
endif
|