libinput/meson.build
Peter Hutterer dbe41d8023 Drop explicit version requirement for libevdev
The minimum version of libevdev we require is so old that we really don't need
an explicity requirement here anymore.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2018-12-11 12:37:40 +10:00

854 lines
28 KiB
Meson

project('libinput', 'c', 'cpp',
version : '1.12.3',
license : 'MIT/Expat',
default_options : [ 'c_std=gnu99', 'warning_level=2' ],
meson_version : '>= 0.41.0')
libinput_version = meson.project_version().split('.')
dir_data = join_paths(get_option('prefix'), get_option('datadir'), 'libinput')
dir_sysconf = join_paths(get_option('prefix'), get_option('sysconfdir'), 'libinput')
dir_libexec = join_paths(get_option('prefix'), get_option('libexecdir'), 'libinput')
dir_lib = join_paths(get_option('prefix'), get_option('libdir'))
dir_man1 = join_paths(get_option('prefix'), get_option('mandir'), 'man1')
dir_system_udev = join_paths(get_option('prefix'), 'lib', 'udev')
dir_src_quirks = join_paths(meson.source_root(), 'quirks')
dir_src_test = join_paths(meson.source_root(), 'test')
dir_src = join_paths(meson.source_root(), 'src')
dir_udev = get_option('udev-dir')
if dir_udev == ''
dir_udev = dir_system_udev
endif
dir_udev_callouts = dir_udev
dir_udev_rules = join_paths(dir_udev, 'rules.d')
dir_udev_hwdb = join_paths(dir_udev, 'hwdb.d')
# 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
config_h = configuration_data()
config_h.set('_GNU_SOURCE', '1')
if get_option('buildtype') == 'debug' or get_option('buildtype') == 'debugoptimized'
config_h.set_quoted('MESON_BUILD_ROOT', meson.build_root())
else
config_h.set_quoted('MESON_BUILD_ROOT', '')
endif
prefix = '''#define _GNU_SOURCE 1
#include <assert.h>
'''
if cc.get_define('static_assert', prefix : prefix) == ''
config_h.set('static_assert(...)', '/* */')
endif
# Coverity breaks because it doesn't define _Float128 correctly, you'll end
# up with a bunch of messages in the form:
# "/usr/include/stdlib.h", line 133: error #20: identifier "_Float128" is
# undefined
# extern _Float128 strtof128 (const char *__restrict __nptr,
# ^
# We don't use float128 ourselves, it gets pulled in from math.h or
# something, so let's just define it as uint128 and move on.
# Unfortunately we can't detect the coverity build at meson configure
# time, we only know it fails at runtime. So make this an option instead, to
# be removed when coverity fixes this again.
if get_option('coverity')
config_h.set('_Float128', '__uint128_t')
config_h.set('_Float32', 'int')
config_h.set('_Float32x', 'int')
config_h.set('_Float64', 'long')
config_h.set('_Float64x', 'long')
endif
if cc.has_header_symbol('dirent.h', 'versionsort', prefix : prefix)
config_h.set('HAVE_VERSIONSORT', '1')
endif
if not cc.has_header_symbol('errno.h', 'program_invocation_short_name', prefix : prefix)
if cc.has_header_symbol('stdlib.h', 'getprogname')
config_h.set('program_invocation_short_name', 'getprogname()')
endif
endif
if cc.has_header('xlocale.h')
config_h.set('HAVE_XLOCALE_H', '1')
endif
if not cc.has_header_symbol('sys/ptrace.h', 'PTRACE_ATTACH', prefix : prefix)
config_h.set('PTRACE_ATTACH', 'PT_ATTACH')
config_h.set('PTRACE_CONT', 'PT_CONTINUE')
config_h.set('PTRACE_DETACH', 'PT_DETACH')
endif
# Dependencies
pkgconfig = import('pkgconfig')
dep_udev = dependency('libudev')
dep_mtdev = dependency('mtdev', version : '>= 1.1.0')
dep_libevdev = dependency('libevdev')
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)
code = '''
#include <libwacom/libwacom.h>
int main(void) { libwacom_get_button_evdev_code(NULL, 'A'); }
'''
result = cc.links(code,
name : 'libwacom_get_button_evdev_code check',
dependencies : dep_libwacom)
config_h.set10('HAVE_LIBWACOM_GET_BUTTON_EVDEV_CODE', result)
else
dep_libwacom = declare_dependency()
endif
############ udev bits ############
executable('libinput-device-group',
'udev/libinput-device-group.c',
dependencies : [dep_udev, dep_libwacom],
include_directories : [includes_src, includes_include],
install : true,
install_dir : dir_udev_callouts)
executable('libinput-model-quirks',
'udev/libinput-model-quirks.c',
dependencies : [dep_udev, dep_libevdev],
include_directories : [includes_src, includes_include],
install : true,
install_dir : dir_udev_callouts)
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 : dir_udev_rules,
configuration : udev_rules_config)
configure_file(input : 'udev/90-libinput-model-quirks.rules.in',
output : '90-libinput-model-quirks.rules',
install : true,
install_dir : dir_udev_rules,
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)
############ libepoll-shim (BSD) ############
if cc.has_header_symbol('sys/epoll.h', 'epoll_create1', prefix : prefix)
# epoll is built-in (Linux, illumos)
dep_libepoll = declare_dependency()
else
# epoll is implemented in userspace by libepoll-shim (FreeBSD)
dir_libepoll = get_option('epoll-dir')
if dir_libepoll == ''
dir_libepoll = get_option('prefix')
endif
includes_epoll = include_directories(join_paths(dir_libepoll, 'include/libepoll-shim'))
dep_libepoll = cc.find_library('epoll-shim', dirs : join_paths(dir_libepoll, 'lib'))
code = '''
#include <sys/epoll.h>
int main(void) { epoll_create1(0); }
'''
if not cc.links(code,
name : 'libepoll-shim check',
dependencies : [dep_libepoll, dep_rt],
include_directories : includes_epoll) # note: wants an include_directories object
error('No built-in epoll or libepoll-shim found.')
endif
dep_libepoll = declare_dependency(
include_directories : includes_epoll,
dependencies : [dep_libepoll, dep_rt])
endif
############ 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, dep_libevdev],
include_directories : includes_include)
dep_libinput_util = declare_dependency(link_with : libinput_util)
############ libfilter.a ############
src_libfilter = [
'src/filter.c',
'src/filter-flat.c',
'src/filter-low-dpi.c',
'src/filter-mouse.c',
'src/filter-touchpad.c',
'src/filter-touchpad-x230.c',
'src/filter-tablet.c',
'src/filter-trackpoint.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)
############ libquirks.a #############
libinput_data_path = dir_data
libinput_data_override_path = join_paths(dir_sysconf, 'local-overrides.quirks')
config_h.set_quoted('LIBINPUT_QUIRKS_DIR', dir_data)
config_h.set_quoted('LIBINPUT_QUIRKS_OVERRIDE_FILE', libinput_data_override_path)
quirks_data = [
'quirks/10-generic-keyboard.quirks',
'quirks/10-generic-lid.quirks',
'quirks/10-generic-trackball.quirks',
'quirks/30-vendor-aiptek.quirks',
'quirks/30-vendor-alps.quirks',
'quirks/30-vendor-cyapa.quirks',
'quirks/30-vendor-elantech.quirks',
'quirks/30-vendor-huion.quirks',
'quirks/30-vendor-ibm.quirks',
'quirks/30-vendor-kensington.quirks',
'quirks/30-vendor-logitech.quirks',
'quirks/30-vendor-microsoft.quirks',
'quirks/30-vendor-razer.quirks',
'quirks/30-vendor-synaptics.quirks',
'quirks/30-vendor-wacom.quirks',
'quirks/30-vendor-vmware.quirks',
'quirks/50-system-acer.quirks',
'quirks/50-system-apple.quirks',
'quirks/50-system-asus.quirks',
'quirks/50-system-chicony.quirks',
'quirks/50-system-cyborg.quirks',
'quirks/50-system-dell.quirks',
'quirks/50-system-google.quirks',
'quirks/50-system-hp.quirks',
'quirks/50-system-lenovo.quirks',
'quirks/50-system-system76.quirks',
]
config_h.set_quoted('LIBINPUT_QUIRKS_FILES', ':'.join(quirks_data))
config_h.set_quoted('LIBINPUT_QUIRKS_SRCDIR', dir_src_quirks)
install_data(quirks_data, install_dir : dir_data)
src_libquirks = [
'src/quirks.c',
'src/quirks.h',
]
deps_libquirks = [dep_udev, dep_libinput_util]
libquirks = static_library('quirks', src_libquirks,
dependencies : deps_libquirks,
include_directories : includes_include)
dep_libquirks = declare_dependency(link_with : libquirks)
############ libinput.so ############
install_headers('src/libinput.h')
src_libinput = src_libfilter + [
'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/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_libepoll,
dep_lm,
dep_rt,
dep_libwacom,
dep_libinput_util,
dep_libquirks
]
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(dir_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
)
git_version_h = vcs_tag(command : ['git', 'describe'],
fallback : 'unknown',
input : 'src/libinput-git-version.h.in',
output :'libinput-git-version.h')
if meson.version().version_compare('<0.43.0')
# 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',
dir_lib, lib_libinput.full_path())
endif
############ documentation ############
if get_option('documentation')
subdir('doc/api')
subdir('doc/user')
endif
############ tools ############
libinput_tool_path = dir_libexec
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 : dir_man1,
)
libinput_quirks_sources = [ 'tools/libinput-quirks.c' ]
libinput_quirks = executable('libinput-quirks',
libinput_quirks_sources,
dependencies : [dep_libquirks, dep_tools_shared, dep_libinput],
include_directories : [includes_src, includes_include],
install_dir : libinput_tool_path,
install : true
)
test('validate-quirks',
libinput_quirks,
args: ['validate', '--data-dir=@0@'.format(dir_src_quirks)]
)
configure_file(input : 'tools/libinput-quirks.man',
output : 'libinput-quirks.1',
configuration : man_config,
install : true,
install_dir : dir_man1,
)
# Same man page for the subtools to stay consistent with the other tools
configure_file(input : 'tools/libinput-quirks.man',
output : 'libinput-quirks-list.1',
configuration : man_config,
install : true,
install_dir : dir_man1,
)
configure_file(input : 'tools/libinput-quirks.man',
output : 'libinput-quirks-validate.1',
configuration : man_config,
install : true,
install_dir : dir_man1,
)
libinput_list_devices_sources = [ 'tools/libinput-list-devices.c' ]
libinput_list_devices = executable('libinput-list-devices',
libinput_list_devices_sources,
dependencies : deps_tools,
include_directories : [includes_src, includes_include],
install_dir : libinput_tool_path,
install : true,
)
test('list-devices', libinput_list_devices)
configure_file(input : 'tools/libinput-list-devices.man',
output : 'libinput-list-devices.1',
configuration : man_config,
install : true,
install_dir : dir_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 : dir_man1,
)
src_python_tools = files(
'tools/libinput-measure-fuzz.py',
'tools/libinput-measure-touchpad-tap.py',
'tools/libinput-measure-touchpad-pressure.py',
'tools/libinput-measure-touch-size.py',
)
config_noop = configuration_data()
# Set a dummy replacement to silence meson warnings:
# meson.build:487: WARNING: Got an empty configuration_data() object and
# found no substitutions in the input file 'foo'. If you
# want to copy a file to the build dir, use the 'copy:'
# keyword argument added in 0.47.0
config_noop.set('dummy', 'dummy')
foreach t : src_python_tools
configure_file(input: t,
output: '@BASENAME@',
configuration : config_noop,
install : true,
install_dir : libinput_tool_path
)
endforeach
src_man = files(
'tools/libinput-measure-fuzz.man',
'tools/libinput-measure-touchpad-tap.man',
'tools/libinput-measure-touchpad-pressure.man',
'tools/libinput-measure-touch-size.man',
)
foreach m : src_man
configure_file(input : m,
output : '@BASENAME@.1',
configuration : man_config,
install : true,
install_dir : dir_man1)
endforeach
libinput_record_sources = [ 'tools/libinput-record.c', git_version_h ]
executable('libinput-record',
libinput_record_sources,
dependencies : deps_tools + [dep_udev],
include_directories : [includes_src, includes_include],
install_dir : libinput_tool_path,
install : true,
)
configure_file(input : 'tools/libinput-record.man',
output : 'libinput-record.1',
configuration : man_config,
install : true,
install_dir : dir_man1,
)
install_data('tools/libinput-replay',
install_dir : libinput_tool_path)
configure_file(input : 'tools/libinput-replay.man',
output : 'libinput-replay.1',
configuration : man_config,
install : true,
install_dir : dir_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 : dir_man1,
)
endif
libinput_sources = [ 'tools/libinput-tool.c' ]
libinput_tool = 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 : dir_man1,
)
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
)
# Don't run the test during a release build because we rely on the magic
# subtool lookup
if get_option('buildtype') == 'debug' or get_option('buildtype') == 'debugoptimized'
test('tool-option-parsing',
find_program('tools/test-tool-option-parsing.py'),
args : [libinput_tool.full_path()],
timeout : 120)
endif
# the libinput tools check whether we execute from the builddir, this is
# the test to verify that lookup. We test twice, once as normal test
# run from the builddir, once after copying to /tmp
test_builddir_lookup = executable('test-builddir-lookup',
'tools/test-builddir-lookup.c',
dependencies : [ dep_tools_shared],
include_directories : [includes_src, includes_include],
install : false)
test('tools-builddir-lookup',
test_builddir_lookup,
args : ['--builddir-is-set'])
test('tools-builddir-lookup-installed',
find_program('tools/helper-copy-and-exec-from-tmp.sh'),
args : [test_builddir_lookup.full_path(), '--builddir-is-null'],
env : ['LD_LIBRARY_PATH=@0@'.format(meson.build_root())],
workdir : '/tmp')
############ tests ############
test('symbols-leak-test',
find_program('test/symbols-leak-test'),
args : [ join_paths(dir_src, 'libinput.sym'), dir_src])
# 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)
# This is the test suite runner, we allow disabling that one because of
# dependencies
if get_option('tests')
dep_check = dependency('check', version : '>= 0.9.10')
valgrind = find_program('valgrind')
leftover_rules = find_program('test/check-leftover-udev-rules.sh')
test('leftover-rules', leftover_rules, is_parallel : false)
gstack = find_program('gstack', required : false)
config_h.set10('HAVE_GSTACK', gstack.found())
# for inhibit support during test run
dep_libsystemd = dependency('libsystemd', version : '>= 221', required : false)
config_h.set10('HAVE_LIBSYSTEMD', dep_libsystemd.found())
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-aiptek-tablet.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-x220.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-invalid-range.c',
'test/litest-device-touchscreen-fuzz.c',
'test/litest-device-touchscreen-mt-tool.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_udev,
dep_libevdev,
dep_dl,
dep_lm,
dep_libsystemd,
dep_libquirks,
]
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_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'))
config_h.set_quoted('LIBINPUT_MODEL_QUIRKS_UDEV_RULES_FILE',
join_paths(meson.build_root(), '90-libinput-model-quirks.rules'))
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 = [
'test/litest-selftest.c',
'test/litest.c',
'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)
libinput_test_runner_sources = 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',
'test/test-quirks.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)
test('libinput-test-deviceless',
libinput_test_runner,
args: ['--filter-deviceless'])
valgrind_env = environment()
valgrind_env.set('CK_FORK', 'no')
valgrind_env.set('USING_VALGRIND', '1')
valgrind_suppressions_file = join_paths(dir_src_test, 'valgrind.suppressions')
add_test_setup('valgrind',
exe_wrapper : [ valgrind,
'--leak-check=full',
'--gen-suppressions=all',
'--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)