blob: e0a4f2911d858b184359cb94a00f06d2b594a805 [file] [log] [blame] [edit]
project('libinput', 'c', 'cpp',
version : '1.10.7',
license : 'MIT/Expat',
default_options : [ 'c_std=gnu99', 'warning_level=2' ],
meson_version : '>= 0.40.0')
libinput_version = meson.project_version().split('.')
# We use libtool-version numbers because it's easier to understand.
# Before making a release, the libinput_so_*
# numbers should be modified. The components are of the form C:R:A.
# a) If binary compatibility has been broken (eg removed or changed interfaces)
# change to C+1:0:0.
# b) If interfaces have been changed or added, but binary compatibility has
# been preserved, change to C+1:0:A+1
# c) If the interface is the same as the previous version, change to C:R+1:A
libinput_lt_c=23
libinput_lt_r=0
libinput_lt_a=13
# convert to soname
libinput_so_version = '@0@.@1@.@2@'.format((libinput_lt_c - libinput_lt_a),
libinput_lt_a, libinput_lt_r)
# Compiler setup
cc = meson.get_compiler('c')
cppflags = ['-Wno-unused-parameter', '-g', '-fvisibility=hidden']
cflags = cppflags + ['-Wmissing-prototypes', '-Wstrict-prototypes']
add_project_arguments(cflags, language : 'c')
add_project_arguments(cppflags, language : 'cpp')
config_h = configuration_data()
config_h.set('_GNU_SOURCE', '1')
prefix = '''#define _GNU_SOURCE 1
#include <assert.h>
'''
if cc.get_define('static_assert', prefix : prefix) == ''
config_h.set('static_assert(...)', '/* */')
endif
# Dependencies
pkgconfig = import('pkgconfig')
dep_udev = dependency('libudev')
dep_mtdev = dependency('mtdev', version : '>= 1.1.0')
dep_libevdev = dependency('libevdev', version : '>= 0.4')
dep_lm = cc.find_library('m', required : false)
dep_rt = cc.find_library('rt', required : false)
# Include directories
includes_include = include_directories('include')
includes_src = include_directories('src')
############ libwacom configuration ############
have_libwacom = get_option('libwacom')
config_h.set10('HAVE_LIBWACOM', have_libwacom)
if have_libwacom
dep_libwacom = dependency('libwacom', version : '>= 0.20')
code = '''
#include <libwacom/libwacom.h>
int main(void) { libwacom_get_paired_device(NULL); }
'''
result = cc.links(code,
name : 'libwacom_get_paired_device check',
dependencies : dep_libwacom)
config_h.set10('HAVE_LIBWACOM_GET_PAIRED_DEVICE', result)
else
dep_libwacom = declare_dependency()
endif
############ udev bits ############
udev_dir = get_option('udev-dir')
if udev_dir == ''
udev_dir = join_paths(get_option('prefix'), 'lib', 'udev')
endif
udev_rules_dir = join_paths(udev_dir, 'rules.d')
udev_hwdb_dir = join_paths(udev_dir, 'hwdb.d')
executable('libinput-device-group',
'udev/libinput-device-group.c',
dependencies : [dep_udev, dep_libwacom],
include_directories : [includes_src, includes_include],
install : true,
install_dir : udev_dir)
executable('libinput-model-quirks',
'udev/libinput-model-quirks.c',
dependencies : dep_udev,
include_directories : [includes_src, includes_include],
install : true,
install_dir : udev_dir)
model_quirks = files('udev/90-libinput-model-quirks.hwdb')
parse_hwdb_py = find_program('udev/parse_hwdb.py')
test('parse-hwdb',
parse_hwdb_py,
args : model_quirks)
udev_rules_config = configuration_data()
udev_rules_config.set('UDEV_TEST_PATH', '')
configure_file(input : 'udev/80-libinput-device-groups.rules.in',
output : '80-libinput-device-groups.rules',
install : true,
install_dir : udev_rules_dir,
configuration : udev_rules_config)
configure_file(input : 'udev/90-libinput-model-quirks.rules.in',
output : '90-libinput-model-quirks.rules',
install : true,
install_dir : udev_rules_dir,
configuration : udev_rules_config)
configure_file(input : model_quirks,
output : '90-libinput-model-quirks.hwdb',
install : true,
install_dir : udev_hwdb_dir,
configuration : udev_rules_config)
litest_udev_rules_config = configuration_data()
litest_udev_rules_config.set('UDEV_TEST_PATH', meson.build_root() + '/')
litest_groups_rules_file = configure_file(input : 'udev/80-libinput-device-groups.rules.in',
output : '80-libinput-device-groups-litest.rules',
install : false,
configuration : litest_udev_rules_config)
litest_model_quirks_file = configure_file(input : 'udev/90-libinput-model-quirks.rules.in',
output : '90-libinput-model-quirks-litest.rules',
install : false,
configuration : litest_udev_rules_config)
############ libinput-util.a ############
src_libinput_util = [
'src/libinput-util.c',
'src/libinput-util.h'
]
libinput_util = static_library('libinput-util',
src_libinput_util,
dependencies : dep_udev,
include_directories : includes_include)
dep_libinput_util = declare_dependency(link_with : libinput_util)
############ libfilter.a ############
src_libfilter = [
'src/filter.c',
'src/filter.h',
'src/filter-private.h'
]
libfilter = static_library('filter', src_libfilter,
dependencies : dep_udev,
include_directories : includes_include)
dep_libfilter = declare_dependency(link_with : libfilter)
############ libinput.so ############
install_headers('src/libinput.h')
src_libinput = [
'src/libinput.c',
'src/libinput.h',
'src/libinput-private.h',
'src/evdev.c',
'src/evdev.h',
'src/evdev-debounce.c',
'src/evdev-fallback.c',
'src/evdev-fallback.h',
'src/evdev-middle-button.c',
'src/evdev-mt-touchpad.c',
'src/evdev-mt-touchpad.h',
'src/evdev-mt-touchpad-tap.c',
'src/evdev-mt-touchpad-buttons.c',
'src/evdev-mt-touchpad-edge-scroll.c',
'src/evdev-mt-touchpad-gestures.c',
'src/evdev-tablet.c',
'src/evdev-tablet.h',
'src/evdev-tablet-pad.c',
'src/evdev-tablet-pad.h',
'src/evdev-tablet-pad-leds.c',
'src/filter.c',
'src/filter.h',
'src/filter-private.h',
'src/path-seat.h',
'src/path-seat.c',
'src/udev-seat.c',
'src/udev-seat.h',
'src/timer.c',
'src/timer.h',
'include/linux/input.h'
]
deps_libinput = [
dep_mtdev,
dep_udev,
dep_libevdev,
dep_lm,
dep_rt,
dep_libwacom,
dep_libinput_util
]
libinput_version_h_config = configuration_data()
libinput_version_h_config.set('LIBINPUT_VERSION_MAJOR', libinput_version[0])
libinput_version_h_config.set('LIBINPUT_VERSION_MINOR', libinput_version[1])
libinput_version_h_config.set('LIBINPUT_VERSION_MICRO', libinput_version[2])
libinput_version_h_config.set('LIBINPUT_VERSION', meson.project_version())
libinput_version_h = configure_file(
input : 'src/libinput-version.h.in',
output : 'libinput-version.h',
configuration : libinput_version_h_config,
install : false,
)
mapfile = join_paths(meson.source_root(), 'src', 'libinput.sym')
version_flag = '-Wl,--version-script,@0@'.format(mapfile)
lib_libinput = shared_library('input',
src_libinput,
include_directories : [include_directories('.'), includes_include],
dependencies : deps_libinput,
version : libinput_so_version,
link_args : version_flag,
link_depends : mapfile,
install : true
)
dep_libinput = declare_dependency(
link_with : lib_libinput,
dependencies : deps_libinput)
pkgconfig.generate(
filebase : 'libinput',
name : 'Libinput',
description : 'Input device library',
version : meson.project_version(),
libraries : lib_libinput
)
# Restore the SELinux context for the libinput.so.a.b.c on install
# meson bug https://github.com/mesonbuild/meson/issues/1967
meson.add_install_script('src/libinput-restore-selinux-context.sh',
join_paths(get_option('prefix'), get_option('libdir')),
lib_libinput.full_path())
############ documentation ############
if get_option('documentation')
doxygen = find_program('doxygen')
doxygen_version_cmd = run_command(doxygen.path(), '--version')
if doxygen_version_cmd.returncode() != 0
error('Command "doxygen --version" failed.')
endif
doxygen_version = doxygen_version_cmd.stdout()
if doxygen_version.version_compare('< 1.8.3')
error('doxygen needs to be at least version 1.8.3 (have @0@)'.format(doxygen_version))
endif
dot = find_program('dot')
grep = find_program('grep')
dot_version_cmd = run_command(dot.path(), '-V')
if dot_version_cmd.returncode() != 0
error('Command "dot -V" failed.')
endif
# dot -V output is (to stderr):
# dot - graphviz version 2.38.0 (20140413.2041)
dot_version = dot_version_cmd.stderr().split(' ')[4]
if dot_version.version_compare('< 2.26')
error('Graphviz dot needs to be at least version 2.26 (have @0@)'.format(dot_version))
endif
src_doxygen = [
# source files
meson.source_root() + '/src/libinput.h',
# written docs
meson.source_root() + '/doc/absolute-axes.dox',
meson.source_root() + '/doc/absolute-coordinate-ranges.dox',
meson.source_root() + '/doc/building.dox',
meson.source_root() + '/doc/button_debouncing.dox',
meson.source_root() + '/doc/clickpad-softbuttons.dox',
meson.source_root() + '/doc/contributing.dox',
meson.source_root() + '/doc/device-configuration-via-udev.dox',
meson.source_root() + '/doc/faqs.dox',
meson.source_root() + '/doc/gestures.dox',
meson.source_root() + '/doc/middle-button-emulation.dox',
meson.source_root() + '/doc/normalization-of-relative-motion.dox',
meson.source_root() + '/doc/palm-detection.dox',
meson.source_root() + '/doc/page-hierarchy.dox',
meson.source_root() + '/doc/pointer-acceleration.dox',
meson.source_root() + '/doc/reporting-bugs.dox',
meson.source_root() + '/doc/scrolling.dox',
meson.source_root() + '/doc/seats.dox',
meson.source_root() + '/doc/switches.dox',
meson.source_root() + '/doc/t440-support.dox',
meson.source_root() + '/doc/tablet-support.dox',
meson.source_root() + '/doc/tapping.dox',
meson.source_root() + '/doc/test-suite.dox',
meson.source_root() + '/doc/timestamps.dox',
meson.source_root() + '/doc/tools.dox',
meson.source_root() + '/doc/touchpad-jumping-cursors.dox',
meson.source_root() + '/doc/touchpad-pressure.dox',
meson.source_root() + '/doc/touchpads.dox',
meson.source_root() + '/doc/trackpoints.dox',
meson.source_root() + '/doc/what-is-libinput.dox',
# dot drawings
meson.source_root() + '/doc/dot/seats-sketch.gv',
meson.source_root() + '/doc/dot/seats-sketch-libinput.gv',
meson.source_root() + '/doc/dot/libinput-stack-wayland.gv',
meson.source_root() + '/doc/dot/libinput-stack-xorg.gv',
meson.source_root() + '/doc/dot/libinput-stack-gnome.gv',
meson.source_root() + '/doc/dot/evemu.gv',
# svgs
meson.source_root() + '/doc/svg/button-debouncing-wave-diagram.svg',
meson.source_root() + '/doc/svg/button-scrolling.svg',
meson.source_root() + '/doc/svg/clickfinger.svg',
meson.source_root() + '/doc/svg/clickfinger-distance.svg',
meson.source_root() + '/doc/svg/edge-scrolling.svg',
meson.source_root() + '/doc/svg/gesture-2fg-ambiguity.svg',
meson.source_root() + '/doc/svg/palm-detection.svg',
meson.source_root() + '/doc/svg/pinch-gestures.svg',
meson.source_root() + '/doc/svg/pinch-gestures-softbuttons.svg',
meson.source_root() + '/doc/svg/ptraccel-linear.svg',
meson.source_root() + '/doc/svg/ptraccel-low-dpi.svg',
meson.source_root() + '/doc/svg/ptraccel-touchpad.svg',
meson.source_root() + '/doc/svg/ptraccel-trackpoint.svg',
meson.source_root() + '/doc/svg/software-buttons.svg',
meson.source_root() + '/doc/svg/swipe-gestures.svg',
meson.source_root() + '/doc/svg/tablet-axes.svg',
meson.source_root() + '/doc/svg/tablet-cintiq24hd-modes.svg',
meson.source_root() + '/doc/svg/tablet-interfaces.svg',
meson.source_root() + '/doc/svg/tablet-intuos-modes.svg',
meson.source_root() + '/doc/svg/tablet-left-handed.svg',
meson.source_root() + '/doc/svg/tablet-out-of-bounds.svg',
meson.source_root() + '/doc/svg/tablet.svg',
meson.source_root() + '/doc/svg/tap-n-drag.svg',
meson.source_root() + '/doc/svg/thumb-detection.svg',
meson.source_root() + '/doc/svg/top-software-buttons.svg',
meson.source_root() + '/doc/svg/touchscreen-gestures.svg',
meson.source_root() + '/doc/svg/twofinger-scrolling.svg',
# style files
meson.source_root() + '/doc/style/header.html',
meson.source_root() + '/doc/style/footer.html',
meson.source_root() + '/doc/style/customdoxygen.css',
meson.source_root() + '/doc/style/bootstrap.css',
meson.source_root() + '/doc/style/libinputdoxygen.css',
meson.source_root() + '/README.md'
]
doc_config = configuration_data()
doc_config.set('PACKAGE_NAME', meson.project_name())
doc_config.set('PACKAGE_VERSION', meson.project_version())
doc_config.set('top_srcdir', meson.source_root())
doc_config.set('INPUT', ' '.join(src_doxygen))
doxyfile = configure_file(input : 'doc/libinput.doxygen.in',
output : 'libinput.doxygen',
configuration : doc_config,
install : false)
custom_target('doxygen',
input : [ doxyfile ] + src_doxygen,
output : [ 'html' ],
command : [ doxygen, doxyfile ],
install : false,
build_by_default : true)
endif
############ tools ############
libinput_tool_path = join_paths(get_option('prefix'), get_option('libexecdir'), 'libinput')
config_h.set_quoted('LIBINPUT_TOOL_PATH', libinput_tool_path)
tools_shared_sources = [ 'tools/shared.c',
'tools/shared.h' ]
deps_tools_shared = [ dep_libinput, dep_libevdev ]
lib_tools_shared = static_library('tools_shared',
tools_shared_sources,
include_directories : [includes_src, includes_include],
dependencies : deps_tools_shared)
dep_tools_shared = declare_dependency(link_with : lib_tools_shared,
dependencies : deps_tools_shared)
man_config = configuration_data()
man_config.set('LIBINPUT_VERSION', meson.project_version())
deps_tools = [ dep_tools_shared, dep_libinput ]
libinput_debug_events_sources = [ 'tools/libinput-debug-events.c' ]
executable('libinput-debug-events',
libinput_debug_events_sources,
dependencies : deps_tools,
include_directories : [includes_src, includes_include],
install_dir : libinput_tool_path,
install : true
)
configure_file(input : 'tools/libinput-debug-events.man',
output : 'libinput-debug-events.1',
configuration : man_config,
install : true,
install_dir : join_paths(get_option('mandir'), 'man1')
)
libinput_list_devices_sources = [ 'tools/libinput-list-devices.c' ]
executable('libinput-list-devices',
libinput_list_devices_sources,
dependencies : deps_tools,
include_directories : [includes_src, includes_include],
install_dir : libinput_tool_path,
install : true,
)
configure_file(input : 'tools/libinput-list-devices.man',
output : 'libinput-list-devices.1',
configuration : man_config,
install : true,
install_dir : join_paths(get_option('mandir'), 'man1')
)
libinput_measure_sources = [ 'tools/libinput-measure.c' ]
executable('libinput-measure',
libinput_measure_sources,
dependencies : deps_tools,
include_directories : [includes_src, includes_include],
install_dir : libinput_tool_path,
install : true,
)
configure_file(input : 'tools/libinput-measure.man',
output : 'libinput-measure.1',
configuration : man_config,
install : true,
install_dir : join_paths(get_option('mandir'), 'man1')
)
install_data('tools/libinput-measure-touchpad-tap',
install_dir : libinput_tool_path)
configure_file(input : 'tools/libinput-measure-touchpad-tap.man',
output : 'libinput-measure-touchpad-tap.1',
configuration : man_config,
install : true,
install_dir : join_paths(get_option('mandir'), 'man1')
)
install_data('tools/libinput-measure-touchpad-pressure',
install_dir : libinput_tool_path)
configure_file(input : 'tools/libinput-measure-touchpad-pressure.man',
output : 'libinput-measure-touchpad-pressure.1',
configuration : man_config,
install : true,
install_dir : join_paths(get_option('mandir'), 'man1')
)
install_data('tools/libinput-measure-touch-size',
install_dir : libinput_tool_path)
configure_file(input : 'tools/libinput-measure-touch-size.man',
output : 'libinput-measure-touch-size.1',
configuration : man_config,
install : true,
install_dir : join_paths(get_option('mandir'), 'man1')
)
install_data('tools/libinput-measure-trackpoint-range',
install_dir : libinput_tool_path)
configure_file(input : 'tools/libinput-measure-trackpoint-range.man',
output : 'libinput-measure-trackpoint-range.1',
configuration : man_config,
install : true,
install_dir : join_paths(get_option('mandir'), 'man1')
)
if get_option('debug-gui')
dep_gtk = dependency('gtk+-3.0', version : '>= 3.20')
dep_cairo = dependency('cairo')
dep_glib = dependency('glib-2.0')
debug_gui_sources = [ 'tools/libinput-debug-gui.c' ]
deps_debug_gui = [
dep_gtk,
dep_cairo,
dep_glib,
] + deps_tools
executable('libinput-debug-gui',
debug_gui_sources,
dependencies : deps_debug_gui,
include_directories : [includes_src, includes_include],
install_dir : libinput_tool_path,
install : true
)
configure_file(input : 'tools/libinput-debug-gui.man',
output : 'libinput-debug-gui.1',
configuration : man_config,
install : true,
install_dir : join_paths(get_option('mandir'), 'man1')
)
endif
libinput_sources = [ 'tools/libinput-tool.c' ]
executable('libinput',
libinput_sources,
dependencies : deps_tools,
include_directories : [includes_src, includes_include],
install : true
)
configure_file(input : 'tools/libinput.man',
output : 'libinput.1',
configuration : man_config,
install : true,
install_dir : join_paths(get_option('mandir'), 'man1')
)
meson.add_install_script('tools/install-compat-scripts.sh',
join_paths(get_option('prefix'), get_option('bindir')))
ptraccel_debug_sources = [ 'tools/ptraccel-debug.c' ]
executable('ptraccel-debug',
ptraccel_debug_sources,
dependencies : [ dep_libfilter, dep_libinput ],
include_directories : [includes_src, includes_include],
install : false
)
############ tests ############
if get_option('tests')
dep_check = dependency('check', version : '>= 0.9.10')
valgrind = find_program('valgrind')
addr2line = find_program('addr2line')
if addr2line.found()
config_h.set('HAVE_ADDR2LINE', '1')
config_h.set_quoted('ADDR2LINE', addr2line.path())
endif
dep_libunwind = dependency('libunwind', required : false)
config_h.set10('HAVE_LIBUNWIND', dep_libunwind.found())
# for inhibit support during test run
dep_libsystemd = dependency('libsystemd', version : '>= 221', required : false)
config_h.set10('HAVE_LIBSYSTEMD', dep_libsystemd.found())
lib_litest_sources = [
'test/litest.h',
'test/litest-int.h',
'test/litest-device-acer-hawaii-keyboard.c',
'test/litest-device-acer-hawaii-touchpad.c',
'test/litest-device-alps-semi-mt.c',
'test/litest-device-alps-dualpoint.c',
'test/litest-device-anker-mouse-kbd.c',
'test/litest-device-apple-appletouch.c',
'test/litest-device-apple-internal-keyboard.c',
'test/litest-device-apple-magicmouse.c',
'test/litest-device-asus-rog-gladius.c',
'test/litest-device-atmel-hover.c',
'test/litest-device-bcm5974.c',
'test/litest-device-calibrated-touchscreen.c',
'test/litest-device-cyborg-rat-5.c',
'test/litest-device-elantech-touchpad.c',
'test/litest-device-generic-singletouch.c',
'test/litest-device-gpio-keys.c',
'test/litest-device-huion-pentablet.c',
'test/litest-device-hp-wmi-hotkeys.c',
'test/litest-device-ignored-mouse.c',
'test/litest-device-keyboard.c',
'test/litest-device-keyboard-all-codes.c',
'test/litest-device-keyboard-razer-blackwidow.c',
'test/litest-device-keyboard-razer-blade-stealth.c',
'test/litest-device-keyboard-razer-blade-stealth-videoswitch.c',
'test/litest-device-lid-switch.c',
'test/litest-device-lid-switch-surface3.c',
'test/litest-device-logitech-trackball.c',
'test/litest-device-nexus4-touch-screen.c',
'test/litest-device-magic-trackpad.c',
'test/litest-device-mouse.c',
'test/litest-device-mouse-wheel-tilt.c',
'test/litest-device-mouse-roccat.c',
'test/litest-device-mouse-low-dpi.c',
'test/litest-device-mouse-wheel-click-angle.c',
'test/litest-device-mouse-wheel-click-count.c',
'test/litest-device-ms-nano-transceiver-mouse.c',
'test/litest-device-ms-surface-cover.c',
'test/litest-device-protocol-a-touch-screen.c',
'test/litest-device-qemu-usb-tablet.c',
'test/litest-device-synaptics.c',
'test/litest-device-synaptics-hover.c',
'test/litest-device-synaptics-i2c.c',
'test/litest-device-synaptics-rmi4.c',
'test/litest-device-synaptics-st.c',
'test/litest-device-synaptics-t440.c',
'test/litest-device-synaptics-x1-carbon-3rd.c',
'test/litest-device-thinkpad-extrabuttons.c',
'test/litest-device-trackpoint.c',
'test/litest-device-touch-screen.c',
'test/litest-device-touchscreen-fuzz.c',
'test/litest-device-uclogic-tablet.c',
'test/litest-device-wacom-bamboo-2fg-finger.c',
'test/litest-device-wacom-bamboo-2fg-pad.c',
'test/litest-device-wacom-bamboo-2fg-pen.c',
'test/litest-device-wacom-bamboo-16fg-pen.c',
'test/litest-device-wacom-cintiq-12wx-pen.c',
'test/litest-device-wacom-cintiq-13hdt-finger.c',
'test/litest-device-wacom-cintiq-13hdt-pad.c',
'test/litest-device-wacom-cintiq-13hdt-pen.c',
'test/litest-device-wacom-cintiq-24hd-pen.c',
'test/litest-device-wacom-cintiq-24hdt-pad.c',
'test/litest-device-wacom-ekr.c',
'test/litest-device-wacom-hid4800-pen.c',
'test/litest-device-wacom-intuos3-pad.c',
'test/litest-device-wacom-intuos5-finger.c',
'test/litest-device-wacom-intuos5-pad.c',
'test/litest-device-wacom-intuos5-pen.c',
'test/litest-device-wacom-isdv4-e6-pen.c',
'test/litest-device-wacom-isdv4-e6-finger.c',
'test/litest-device-wacom-mobilestudio-pro-pad.c',
'test/litest-device-waltop-tablet.c',
'test/litest-device-wheel-only.c',
'test/litest-device-xen-virtual-pointer.c',
'test/litest-device-vmware-virtual-usb-mouse.c',
'test/litest-device-yubikey.c',
'test/litest.c'
]
dep_dl = cc.find_library('dl')
deps_litest = [
dep_libinput,
dep_check,
dep_libunwind,
dep_udev,
dep_libevdev,
dep_dl,
dep_lm,
dep_libsystemd,
]
configure_file(input : 'udev/80-libinput-test-device.rules',
output : '80-libinput-test-device.rules',
install : false,
configuration : udev_rules_config)
config_h.set_quoted('LIBINPUT_MODEL_QUIRKS_UDEV_RULES_FILE',
join_paths(meson.build_root(), '90-libinput-model-quirks.rules'))
config_h.set_quoted('LIBINPUT_MODEL_QUIRKS_UDEV_HWDB_FILE',
join_paths(meson.build_root(), '90-libinput-model-quirks.hwdb'))
config_h.set_quoted('LIBINPUT_TEST_DEVICE_RULES_FILE',
join_paths(meson.build_root(), '80-libinput-test-device.rules'))
config_h.set_quoted('LIBINPUT_DEVICE_GROUPS_RULES_FILE',
join_paths(meson.build_root(), '80-libinput-device-groups.rules'))
lib_litest = static_library('litest',
lib_litest_sources,
include_directories : [includes_src, includes_include],
dependencies : deps_litest)
dep_litest = declare_dependency(link_with : lib_litest,
dependencies : deps_litest)
def_no_main = '-DLITEST_NO_MAIN'
def_disable_backtrace = '-DLITEST_DISABLE_BACKTRACE_LOGGING'
defs_litest_selftest = [
def_no_main,
def_disable_backtrace
]
test_litest_selftest_sources = lib_litest_sources + [
'test/litest-selftest.c',
'test/litest.c',
'test/litest-int.h',
'test/litest.h'
]
test_litest_selftest = executable('test-litest-selftest',
test_litest_selftest_sources,
include_directories : [includes_src, includes_include],
dependencies : deps_litest,
c_args : defs_litest_selftest,
install : false)
test('test-litest-selftest', test_litest_selftest)
test_symbols_leak = find_program('test/symbols-leak-test.in')
test('symbols-leak-test',
test_symbols_leak,
args : [ meson.current_source_dir() ])
libinput_test_runner_sources = lib_litest_sources + [
'src/libinput-util.h',
'src/libinput-util.c',
'test/test-udev.c',
'test/test-path.c',
'test/test-pointer.c',
'test/test-touch.c',
'test/test-log.c',
'test/test-tablet.c',
'test/test-pad.c',
'test/test-touchpad.c',
'test/test-touchpad-tap.c',
'test/test-touchpad-buttons.c',
'test/test-trackpoint.c',
'test/test-trackball.c',
'test/test-misc.c',
'test/test-keyboard.c',
'test/test-device.c',
'test/test-gestures.c',
'test/test-switch.c'
]
def_LT_VERSION = '-DLIBINPUT_LT_VERSION="@0@:@1@:@2@"'.format(libinput_lt_c, libinput_lt_r, libinput_lt_a)
libinput_test_runner = executable('libinput-test-suite-runner',
libinput_test_runner_sources,
include_directories : [includes_src, includes_include],
dependencies : deps_litest,
c_args : [ def_LT_VERSION ],
install : false)
test('libinput-test-suite-runner',
libinput_test_runner,
timeout : 1200)
# build-test only
executable('test-build-pedantic',
'test/build-pedantic.c',
dependencies : [dep_udev],
include_directories : [includes_src, includes_include],
c_args : ['-std=c99', '-pedantic', '-Werror'],
install : false)
# build-test only
executable('test-build-std-gnuc90',
'test/build-pedantic.c',
dependencies : [dep_udev],
include_directories : [includes_src, includes_include],
c_args : ['-std=gnu90', '-Werror'],
install : false)
# test for linking with the minimal linker flags
executable('test-build-linker',
'test/build-pedantic.c',
include_directories : [includes_src, includes_include],
dependencies : [ dep_libinput, dep_libinput_util ],
install : false)
# test including from C++
executable('test-build-cxx',
'test/build-cxx.cc',
dependencies : [dep_udev],
include_directories : [includes_src, includes_include],
install : false)
valgrind_env = environment()
valgrind_env.set('CK_FORK', 'no')
valgrind_env.set('USING_VALGRIND', '1')
valgrind_suppressions_file = join_paths(meson.source_root(), 'test', 'valgrind.suppressions')
add_test_setup('valgrind',
exe_wrapper : [ valgrind,
'--leak-check=full',
'--error-exitcode=3',
'--suppressions=' + valgrind_suppressions_file ],
env : valgrind_env,
timeout_multiplier : 100)
endif
############ output files ############
configure_file(output : 'config.h', install : false, configuration : config_h)