libinput/meson.build

779 lines
27 KiB
Meson
Raw Normal View History

project('libinput', 'c', 'cpp',
version : '1.10.900',
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)
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 ############
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
)
git_version_h = vcs_tag(['git', 'describe'],
'unknown',
input : 'src/libinput-git-version.h.in',
output :'libinput-git-version.h')
# 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',
2017-11-29 11:30:54 +10:00
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')
)
libinput_record_sources = [ 'tools/libinput-record.c', git_version_h ]
tools: add a libinput-record tool This is a tool that does effectively the same job as evemu-record. evemu has two disadvantages: its API is clunky and hard to extend even for simple features. And it has a custom file format that requires special processing but is difficult to extend and hard to write manually. e.g. the bitmasks require keeping a line number state to know which bit an entry refers to. libinput-record records the same data but the output is YAML. That can be processed easier and extended in the future without breaking the parsing. We can (in the future) also interleave the evemu output with libinput's debug output, thus having a single file where the events can be compared and analysed without the need for replaying. Likewise, we can easily annotate the file with parsable bits of information without having to shove all that into a comment (like version numbers of libinput, kernel, etc). User-visible differences to evemu-record: * the output file requires an explicit -o or --output-file argument * no evemu-describe equivalent, if you just want the description simply cancel before any events are sent * to see key codes, a --show-keycodes flag must be supplied, otherwise all 'normal' keys end up as KEY_A. This protects against inadvertent information leakage * supports a --multiple option to record multiple devices simultaneously. All recordings have the same time offset, it is thus possible to reproduce bugs that depend on the interaction of more than one device. And to answer the question of: why a printf-approach to writing out yaml instead of a library, it's simply that we want to be able to have real-time output of the recording. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-11-23 11:01:45 +10:00
executable('libinput-record',
libinput_record_sources,
dependencies : deps_tools,
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 : join_paths(get_option('mandir'), '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 : 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-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.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)