aboutsummaryrefslogtreecommitdiffstats
path: root/slirp/meson.build
diff options
context:
space:
mode:
Diffstat (limited to 'slirp/meson.build')
-rw-r--r--slirp/meson.build162
1 files changed, 162 insertions, 0 deletions
diff --git a/slirp/meson.build b/slirp/meson.build
new file mode 100644
index 000000000..cb1396ad5
--- /dev/null
+++ b/slirp/meson.build
@@ -0,0 +1,162 @@
+project('libslirp', 'c',
+ version : '4.6.1',
+ 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 = 3
+lt_revision = 1
+lt_age = 3
+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')
+
+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',
+)
+
+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