You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

928 lines
30 KiB

From dd247cfb51ceb2d1af15ddcf5729e0fd9c9c01e5 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Thu, 17 May 2018 15:41:43 +1000
Subject: [PATCH libinput 1/7] Revert "Drop autotools"
This reverts commit 302aaa548e70cc2eeea0bf107462e921b577d3ee.
---
Makefile.am | 13 +++
autogen.sh | 13 +++
configure.ac | 282 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
doc/Makefile.am | 116 ++++++++++++++++++++++
m4/.gitignore | 5 +
src/Makefile.am | 80 ++++++++++++++++
test/Makefile.am | 182 +++++++++++++++++++++++++++++++++++
tools/.gitignore | 1 +
tools/Makefile.am | 79 +++++++++++++++
udev/.gitignore | 6 ++
udev/Makefile.am | 51 ++++++++++
11 files changed, 828 insertions(+)
create mode 100644 Makefile.am
create mode 100755 autogen.sh
create mode 100644 configure.ac
create mode 100644 doc/Makefile.am
create mode 100644 m4/.gitignore
create mode 100644 src/Makefile.am
create mode 100644 test/Makefile.am
create mode 100644 tools/.gitignore
create mode 100644 tools/Makefile.am
create mode 100644 udev/.gitignore
create mode 100644 udev/Makefile.am
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 00000000..f897ceec
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,13 @@
+SUBDIRS = src doc test tools udev
+
+ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
+
+valgrind:
+ (cd test; $(MAKE) valgrind)
+
+AM_DISTCHECK_CONFIGURE_FLAGS = --disable-test-run
+
+gcov:
+ (cd test; $(MAKE) gcov)
+
+EXTRA_DIST = meson.build meson_options.txt
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 00000000..8b8a3ab8
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+test -n "$srcdir" || srcdir=`dirname "$0"`
+test -n "$srcdir" || srcdir=.
+(
+ cd "$srcdir" &&
+ autoreconf --force -v --install
+) || exit
+
+git config --local --get format.subjectPrefix >/dev/null 2>&1 ||
+ git config --local format.subjectPrefix "PATCH libinput"
+
+test -n "$NOCONFIGURE" || exec "$srcdir/configure" "$@"
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 00000000..eabc9e14
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,282 @@
+AC_PREREQ([2.64])
+
+m4_define([libinput_major_version], [1])
+m4_define([libinput_minor_version], [8])
+m4_define([libinput_micro_version], [0])
+m4_define([libinput_version],
+ [libinput_major_version.libinput_minor_version.libinput_micro_version])
+
+AC_INIT([libinput],
+ [libinput_version],
+ [https://bugs.freedesktop.org/enter_bug.cgi?product=Wayland&component=libinput&version=libinput_version],
+ [libinput],
+ [http://www.freedesktop.org/wiki/Software/libinput/])
+
+AC_SUBST([LIBINPUT_VERSION_MAJOR], [libinput_major_version])
+AC_SUBST([LIBINPUT_VERSION_MINOR], [libinput_minor_version])
+AC_SUBST([LIBINPUT_VERSION_MICRO], [libinput_micro_version])
+AC_SUBST([LIBINPUT_VERSION], [libinput_version])
+
+AC_DEFINE([LIBINPUT_VERSION_MAJOR], [libinput_major_version], "libinput major version number")
+AC_DEFINE([LIBINPUT_VERSION_MINOR], [libinput_minor_version], "libinput minor version number")
+AC_DEFINE([LIBINPUT_VERSION_MICRO], [libinput_micro_version], "libinput micro version number")
+
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_AUX_DIR([.])
+
+AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-xz])
+
+# Before making a release, the LIBINPUT_LT_VERSION string should be
+# modified.
+# The string is of the form C:R:A.
+# a) If binary compatibility has been broken (eg removed or changed interfaces)
+# change to C+1:0:0. DO NOT DO THIS! Use symbol versioning instead and
+# do b) instead.
+# 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_VERSION=23:0:13
+AC_SUBST(LIBINPUT_LT_VERSION)
+
+AM_SILENT_RULES([yes])
+AC_USE_SYSTEM_EXTENSIONS
+
+# Check for programs
+AC_PROG_CC_C99
+AC_PROG_CXX # Only used by build C++ test
+AC_PROG_GREP
+AC_PROG_SED
+
+# Only used for testing the hwdb
+AM_PATH_PYTHON([3.0],, [:])
+AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
+
+# Initialize libtool
+LT_PREREQ([2.2])
+LT_INIT
+
+AC_CHECK_DECL(static_assert, [],
+ [AC_DEFINE(static_assert(...), [/* */], [noop static_assert() replacement]),
+ AC_MSG_RESULT([no])],
+ [[#include <assert.h>]])
+
+PKG_PROG_PKG_CONFIG()
+PKG_CHECK_MODULES(MTDEV, [mtdev >= 1.1.0])
+PKG_CHECK_MODULES(LIBUDEV, [libudev])
+PKG_CHECK_MODULES(LIBEVDEV, [libevdev >= 1.3])
+
+AC_CHECK_LIB([m], [atan2])
+AC_CHECK_LIB([rt], [clock_gettime])
+
+if test "x$GCC" = "xyes"; then
+ GCC_CXXFLAGS="-Wall -Wextra -Wno-unused-parameter -g -fvisibility=hidden"
+ GCC_CFLAGS="$GCC_CXXFLAGS -Wmissing-prototypes -Wstrict-prototypes"
+fi
+AC_SUBST(GCC_CFLAGS)
+AC_SUBST(GCC_CXXFLAGS)
+
+######################
+# udev configuration #
+######################
+udev_dir_default="$libdir/udev"
+AC_ARG_WITH(udev-dir,
+ AS_HELP_STRING([--with-udev-dir=DIR],
+ [udev base directory [[default=$udev_dir_default]]]),
+ [],
+ [with_udev_dir="yes"])
+AS_CASE($with_udev_dir,
+ [no|""], [AC_MSG_ERROR([You must define a udev base directory])],
+ [yes], [udevdir="$udev_dir_default"],
+ [udevdir="$with_udev_dir"])
+UDEV_DIR=${udevdir}
+AC_SUBST(UDEV_DIR)
+
+################################
+# enable/disable documentation #
+################################
+AC_ARG_ENABLE([documentation],
+ [AC_HELP_STRING([--enable-documentation],
+ [Enable building the documentation (default=yes)])],
+ [build_documentation="$enableval"],
+ [build_documentation="yes"])
+
+if test "x$build_documentation" = "xyes"; then
+ AC_PATH_PROG(DOXYGEN, doxygen)
+ if test "x$DOXYGEN" = "x"; then
+ AC_MSG_ERROR([Documentation build requested but doxygen not found. Install doxygen or disable the documentation using --disable-documentation])
+ fi
+
+ AC_MSG_CHECKING([for compatible doxygen version])
+ doxygen_version=`$DOXYGEN --version`
+ AS_VERSION_COMPARE([$doxygen_version], [1.8.3],
+ [AC_MSG_RESULT([no])
+ DOXYGEN=""],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([yes])])
+ if test "x$DOXYGEN" = "x"; then
+ AC_MSG_ERROR([Doxygen $doxygen_version too old. Doxygen 1.8.3+ required for documentation build. Install required doxygen version or disable the documentation using --disable-documentation])
+ fi
+
+ AC_PATH_PROG(DOT, dot)
+ if test "x$DOT" = "x"; then
+ AC_MSG_ERROR([Documentation build requested but graphviz's dot not found. Install graphviz or disable the documentation using --disable-documentation])
+ fi
+
+ AC_MSG_CHECKING([for compatible dot version])
+ dot_version=`$DOT -V 2>&1|$GREP -oP '(?<=version\W)@<:@0-9.@:>@*(?=\W(.*))'`
+ AS_VERSION_COMPARE([$dot_version], [2.26.0],
+ [AC_MSG_RESULT([no])
+ DOT=""],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([yes])])
+ if test "x$DOT" = "x"; then
+ AC_MSG_ERROR([Graphviz dot $dot_version too old. Graphviz 2.26+ required for documentation build. Install required graphviz version or disable the documentation using --disable-documentation])
+ fi
+fi
+
+########################################
+# enable/disable the debug-gui feature #
+########################################
+AC_ARG_ENABLE(debug-gui,
+ AS_HELP_STRING([--enable-debug-gui], [Enable the 'debug-gui' feature in the libinput tool (default=yes)]),
+ [build_debug_gui="$enableval"],
+ [build_debug_gui="yes"])
+
+if test "x$build_debug_gui" = "xyes"; then
+ PKG_CHECK_MODULES(CAIRO, [cairo])
+ PKG_CHECK_MODULES(GTK, [glib-2.0 gtk+-3.0])
+ AC_DEFINE(BUILD_DEBUG_GUI, 1, [Build debug-gui support])
+fi
+
+
+########################
+# enable/disable tests #
+########################
+AC_ARG_ENABLE(tests,
+ AS_HELP_STRING([--enable-tests], [Build the tests (default=yes)]),
+ [build_tests="$enableval"],
+ [build_tests="yes"])
+
+
+if test "x$build_tests" = "xyes"; then
+ PKG_CHECK_MODULES(CHECK, [check >= 0.9.10])
+
+ AC_PATH_PROG(VALGRIND, [valgrind])
+
+ AC_ARG_WITH(libunwind,
+ AS_HELP_STRING([--without-libunwind],[Do not use libunwind]))
+
+ if test "x$with_libunwind" != "xno"; then
+ PKG_CHECK_MODULES(LIBUNWIND, [libunwind])
+ AC_DEFINE(HAVE_LIBUNWIND, 1, [Have libunwind support])
+ HAVE_LIBUNWIND="yes"
+ fi
+
+ AC_PATH_PROG(ADDR2LINE, [addr2line])
+ if test "x$ADDR2LINE" != "x"; then
+ AC_DEFINE_UNQUOTED(HAVE_ADDR2LINE, 1, [addr2line found])
+ AC_DEFINE_UNQUOTED(ADDR2LINE, ["$ADDR2LINE"], [Path to addr2line])
+ fi
+fi
+
+AC_ARG_ENABLE(test-run,
+ AS_HELP_STRING([--enable-test-run], [For internal use only]),
+ [run_tests="$enableval"],
+ [run_tests="yes"])
+
+# Used by the udev rules so we can use callouts during testing without
+# installing everything first. Default is the empty string so the installed
+# rule will use udev's default path. Override is in udev/Makefile.am
+AC_SUBST(UDEV_TEST_PATH, "")
+AC_PATH_PROG(SED, [sed])
+
+###########################
+# enable/disable libwacom #
+###########################
+
+AC_ARG_ENABLE(libwacom,
+ AS_HELP_STRING([--enable-libwacom],
+ [Use libwacom for tablet identification (default=enabled)]),
+ [use_libwacom="$enableval"],
+ [use_libwacom="yes"])
+if test "x$use_libwacom" = "xyes"; then
+ PKG_CHECK_MODULES(LIBWACOM, [libwacom >= 0.20], [HAVE_LIBWACOM="yes"])
+ AC_DEFINE(HAVE_LIBWACOM, 1, [Build with libwacom])
+
+ OLD_LIBS=$LIBS
+ OLD_CFLAGS=$CFLAGS
+ LIBS="$LIBS $LIBWACOM_LIBS"
+ CFLAGS="$CFLAGS $LIBWACOM_CFLAGS"
+ AC_MSG_CHECKING([if libwacom_get_paired_device is available])
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[#include <libwacom/libwacom.h>]],
+ [[libwacom_get_paired_device(NULL)]])],
+ [AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_LIBWACOM_GET_PAIRED_DEVICE, [1],
+ [libwacom_get_paired_device() is available])
+ [libwacom_have_get_paired_device=yes]],
+ [AC_MSG_RESULT([no])
+ [libwacom_have_get_paired_device=no]])
+ LIBS=$OLD_LIBS
+ CFLAGS=$OLD_CFLAGS
+fi
+
+AM_CONDITIONAL(HAVE_LIBWACOM_GET_PAIRED_DEVICE,
+ [test "x$libwacom_have_get_paired_device" == "xyes"])
+
+
+#######################
+# enable/disable gcov #
+#######################
+
+AC_ARG_ENABLE([gcov],
+ [AS_HELP_STRING([--enable-gcov],
+ [Enable to enable coverage testing (default:disabled)])],
+ [enable_gcov="$enableval"],
+ [enable_gcov=no])
+if test "x$enable_gcov" != "xno"; then
+ GCOV_CFLAGS="-fprofile-arcs -ftest-coverage"
+ GCOV_LDFLAGS="-fprofile-arcs -ftest-coverage"
+ enable_gcov=yes
+fi
+
+AM_CONDITIONAL([GCOV_ENABLED], [test "x$enable_gcov" != "xno"])
+AC_SUBST([GCOV_CFLAGS])
+AC_SUBST([GCOV_LDFLAGS])
+
+AM_CONDITIONAL(HAVE_VALGRIND, [test "x$VALGRIND" != "x"])
+AM_CONDITIONAL(BUILD_TESTS, [test "x$build_tests" = "xyes"])
+AM_CONDITIONAL(RUN_TESTS, [test "x$run_tests" = "xyes"])
+AM_CONDITIONAL(BUILD_DOCS, [test "x$build_documentation" = "xyes"])
+AM_CONDITIONAL(HAVE_LIBUNWIND, [test "x$HAVE_LIBUNWIND" = "xyes"])
+AM_CONDITIONAL(BUILD_DEBUG_GUI, [test "x$build_debug_gui" = "xyes"])
+
+AC_CONFIG_FILES([Makefile
+ doc/Makefile
+ doc/libinput.doxygen
+ src/Makefile
+ src/libinput.pc
+ src/libinput-uninstalled.pc
+ src/libinput-version.h
+ test/Makefile
+ tools/Makefile
+ udev/Makefile
+ udev/80-libinput-device-groups.rules
+ udev/90-libinput-model-quirks.rules])
+AC_CONFIG_FILES([test/symbols-leak-test],
+ [chmod +x test/symbols-leak-test])
+AC_OUTPUT
+
+AC_MSG_RESULT([
+ Prefix ${prefix}
+ udev base dir ${UDEV_DIR}
+
+ libwacom enabled ${use_libwacom}
+ Build documentation ${build_documentation}
+ Build tests ${build_tests}
+ Tests use valgrind ${VALGRIND}
+ Tests use libunwind ${HAVE_LIBUNWIND}
+ Build GUI event tool ${build_debug_gui}
+ Enable gcov profiling ${enable_gcov}
+ ])
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 00000000..382f64da
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,116 @@
+EXTRA_DIST = \
+ middle-button-emulation.svg \
+ touchpad-tap-state-machine.svg \
+ touchpad-softbutton-state-machine.svg
+
+header_files = \
+ $(top_srcdir)/src/libinput.h \
+ $(top_srcdir)/README.md \
+ $(srcdir)/absolute-axes.dox \
+ $(srcdir)/absolute-coordinate-ranges.dox \
+ $(srcdir)/building.dox \
+ $(srcdir)/clickpad-softbuttons.dox \
+ $(srcdir)/contributing.dox \
+ $(srcdir)/device-configuration-via-udev.dox \
+ $(srcdir)/faqs.dox \
+ $(srcdir)/gestures.dox \
+ $(srcdir)/middle-button-emulation.dox \
+ $(srcdir)/normalization-of-relative-motion.dox \
+ $(srcdir)/palm-detection.dox \
+ $(srcdir)/page-hierarchy.dox \
+ $(srcdir)/pointer-acceleration.dox \
+ $(srcdir)/reporting-bugs.dox \
+ $(srcdir)/scrolling.dox \
+ $(srcdir)/seats.dox \
+ $(srcdir)/switches.dox \
+ $(srcdir)/t440-support.dox \
+ $(srcdir)/tablet-support.dox \
+ $(srcdir)/tapping.dox \
+ $(srcdir)/test-suite.dox \
+ $(srcdir)/timestamps.dox \
+ $(srcdir)/tools.dox \
+ $(srcdir)/touchpad-jumping-cursors.dox \
+ $(srcdir)/touchpad-pressure.dox \
+ $(srcdir)/touchpads.dox \
+ $(srcdir)/what-is-libinput.dox
+
+diagram_files = \
+ $(srcdir)/dot/seats-sketch.gv \
+ $(srcdir)/dot/seats-sketch-libinput.gv \
+ $(srcdir)/dot/libinput-stack-wayland.gv \
+ $(srcdir)/dot/libinput-stack-xorg.gv \
+ $(srcdir)/dot/libinput-stack-gnome.gv \
+ $(srcdir)/dot/evemu.gv \
+ $(srcdir)/svg/button-scrolling.svg \
+ $(srcdir)/svg/clickfinger.svg \
+ $(srcdir)/svg/clickfinger-distance.svg \
+ $(srcdir)/svg/edge-scrolling.svg \
+ $(srcdir)/svg/gesture-2fg-ambiguity.svg \
+ $(srcdir)/svg/palm-detection.svg \
+ $(srcdir)/svg/pinch-gestures.svg \
+ $(srcdir)/svg/pinch-gestures-softbuttons.svg \
+ $(srcdir)/svg/ptraccel-linear.svg \
+ $(srcdir)/svg/ptraccel-low-dpi.svg \
+ $(srcdir)/svg/ptraccel-touchpad.svg \
+ $(srcdir)/svg/ptraccel-trackpoint.svg \
+ $(srcdir)/svg/software-buttons.svg \
+ $(srcdir)/svg/swipe-gestures.svg \
+ $(srcdir)/svg/tablet-axes.svg \
+ $(srcdir)/svg/tablet-cintiq24hd-modes.svg \
+ $(srcdir)/svg/tablet-interfaces.svg \
+ $(srcdir)/svg/tablet-intuos-modes.svg \
+ $(srcdir)/svg/tablet-left-handed.svg \
+ $(srcdir)/svg/tablet-out-of-bounds.svg \
+ $(srcdir)/svg/tablet.svg \
+ $(srcdir)/svg/tap-n-drag.svg \
+ $(srcdir)/svg/thumb-detection.svg \
+ $(srcdir)/svg/top-software-buttons.svg \
+ $(srcdir)/svg/touchscreen-gestures.svg \
+ $(srcdir)/svg/twofinger-scrolling.svg
+
+style_files = \
+ style/header.html \
+ style/footer.html \
+ style/customdoxygen.css \
+ style/bootstrap.css \
+ style/libinputdoxygen.css
+
+if BUILD_DOCS
+
+noinst_DATA = html/index.html
+
+html/index.html: libinput.doxygen $(header_files) $(diagram_files) $(style_files)
+ $(AM_V_GEN)(cat $<; \
+ echo "INPUT = $(header_files)"; \
+ ) | $(DOXYGEN) -
+
+clean-local:
+ $(AM_V_at)rm -rf html
+
+doc_src= $(shell find html -type f -printf "html/%P\n" 2>/dev/null)
+EXTRA_DIST += $(builddir)/html/index.html \
+ $(doc_src)
+endif
+
+EXTRA_DIST += $(diagram_files) \
+ $(header_files) \
+ $(style_files)
+
+local_svg = $(shell find $(srcdir)/svg -type f -printf "$(srcdir)/svg/%P\n" 2>/dev/null)
+local_dotfiles = $(shell find $(srcdir)/dot -type f -printf "$(srcdir)/dot/%P\n" 2>/dev/null)
+
+check:
+ @files=`echo $(local_svg) $(local_dotfiles) $(diagram_files) | tr ' ' '\n' | sort | uniq -u` && \
+ test -z "$$files" || (\
+ echo "SVG/dotfiles files present but missing from the Makefile.am:" && \
+ echo "$$files" && \
+ test)
+
+# make sure doc was built before running dist
+dist-hook:
+ @test -f $(distdir)/html/index.html || (\
+ echo "******************************************************" && \
+ echo "Couldn't find documentation files, refusing make dist." && \
+ echo "Install doxygen to build documentation for the tarball." && \
+ echo "******************************************************" && \
+ test )
diff --git a/m4/.gitignore b/m4/.gitignore
new file mode 100644
index 00000000..38066ddf
--- /dev/null
+++ b/m4/.gitignore
@@ -0,0 +1,5 @@
+libtool.m4
+ltoptions.m4
+ltsugar.m4
+ltversion.m4
+lt~obsolete.m4
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 00000000..6723d5ae
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,80 @@
+lib_LTLIBRARIES = libinput.la
+noinst_LTLIBRARIES = libinput-util.la \
+ libfilter.la
+
+include_HEADERS = \
+ libinput.h
+
+libinput_la_SOURCES = \
+ libinput.c \
+ libinput.h \
+ libinput-private.h \
+ evdev.c \
+ evdev.h \
+ evdev-lid.c \
+ evdev-middle-button.c \
+ evdev-mt-touchpad.c \
+ evdev-mt-touchpad.h \
+ evdev-mt-touchpad-tap.c \
+ evdev-mt-touchpad-buttons.c \
+ evdev-mt-touchpad-edge-scroll.c \
+ evdev-mt-touchpad-gestures.c \
+ evdev-tablet.c \
+ evdev-tablet.h \
+ evdev-tablet-pad.c \
+ evdev-tablet-pad.h \
+ evdev-tablet-pad-leds.c \
+ filter.c \
+ filter.h \
+ filter-private.h \
+ path-seat.h \
+ path-seat.c \
+ udev-seat.c \
+ udev-seat.h \
+ timer.c \
+ timer.h \
+ ../include/linux/input.h
+
+libinput_la_LIBADD = $(MTDEV_LIBS) \
+ $(LIBUDEV_LIBS) \
+ $(LIBEVDEV_LIBS) \
+ $(LIBWACOM_LIBS) \
+ libinput-util.la
+libinput_la_LDFLAGS = $(GCOV_LDFLAGS) \
+ -version-info $(LIBINPUT_LT_VERSION) -shared \
+ -Wl,--version-script=$(srcdir)/libinput.sym
+
+libinput_la_CFLAGS = -I$(top_srcdir)/include \
+ $(MTDEV_CFLAGS) \
+ $(LIBUDEV_CFLAGS) \
+ $(LIBEVDEV_CFLAGS) \
+ $(LIBWACOM_CFLAGS) \
+ $(GCC_CFLAGS) \
+ $(GCOV_CFLAGS)
+EXTRA_libinput_la_DEPENDENCIES = $(srcdir)/libinput.sym
+
+libinput_util_la_SOURCES = \
+ libinput-util.c \
+ libinput-util.h
+
+libinput_util_la_LIBADD =
+libinput_util_la_LDFLAGS = $(GCOV_LDFLAGS)
+libinput_util_la_CFLAGS = -I$(top_srcdir)/include \
+ $(LIBUDEV_CFLAGS) \
+ $(GCC_CFLAGS) \
+ $(GCOV_CFLAGS)
+
+libfilter_la_SOURCES = \
+ filter.c \
+ filter.h \
+ filter-private.h
+libfilter_la_LIBADD =
+libfilter_la_CFLAGS =
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libinput.pc
+
+AM_CFLAGS = $(GCC_CFLAGS)
+
+DISTCLEANFILES = libinput-version.h
+EXTRA_DIST = libinput-version.h.in libinput.sym libinput-restore-selinux-context.sh
diff --git a/test/Makefile.am b/test/Makefile.am
new file mode 100644
index 00000000..5cb89a65
--- /dev/null
+++ b/test/Makefile.am
@@ -0,0 +1,182 @@
+if BUILD_TESTS
+AM_CPPFLAGS = -I$(top_srcdir)/include \
+ -I$(top_srcdir)/src \
+ $(CHECK_CFLAGS) \
+ $(LIBEVDEV_CFLAGS) \
+ $(LIBUDEV_CFLAGS) \
+ -I$(top_builddir)/src # for libinput-version.h
+
+AM_CFLAGS = $(GCC_CFLAGS) $(GCOV_CFLAGS)
+AM_CXXFLAGS = $(GCC_CXXFLAGS)
+
+TEST_LIBS = liblitest.la $(CHECK_LIBS) $(LIBUDEV_LIBS) $(LIBEVDEV_LIBS) $(top_builddir)/src/libinput.la
+noinst_LTLIBRARIES = liblitest.la
+liblitest_la_SOURCES = \
+ litest.h \
+ litest-int.h \
+ litest-device-acer-hawaii-keyboard.c \
+ litest-device-acer-hawaii-touchpad.c \
+ litest-device-alps-semi-mt.c \
+ litest-device-alps-dualpoint.c \
+ litest-device-anker-mouse-kbd.c \
+ litest-device-apple-appletouch.c \
+ litest-device-apple-internal-keyboard.c \
+ litest-device-apple-magicmouse.c \
+ litest-device-asus-rog-gladius.c \
+ litest-device-atmel-hover.c \
+ litest-device-bcm5974.c \
+ litest-device-calibrated-touchscreen.c \
+ litest-device-cyborg-rat-5.c \
+ litest-device-elantech-touchpad.c \
+ litest-device-generic-singletouch.c \
+ litest-device-huion-pentablet.c \
+ litest-device-keyboard.c \
+ litest-device-keyboard-all-codes.c \
+ litest-device-keyboard-razer-blackwidow.c \
+ litest-device-lid-switch.c \
+ litest-device-lid-switch-surface3.c \
+ litest-device-logitech-trackball.c \
+ litest-device-nexus4-touch-screen.c \
+ litest-device-magic-trackpad.c \
+ litest-device-mouse.c \
+ litest-device-mouse-wheel-tilt.c \
+ litest-device-mouse-roccat.c \
+ litest-device-mouse-low-dpi.c \
+ litest-device-mouse-wheel-click-angle.c \
+ litest-device-mouse-wheel-click-count.c \
+ litest-device-ms-surface-cover.c \
+ litest-device-protocol-a-touch-screen.c \
+ litest-device-qemu-usb-tablet.c \
+ litest-device-synaptics.c \
+ litest-device-synaptics-hover.c \
+ litest-device-synaptics-i2c.c \
+ litest-device-synaptics-rmi4.c \
+ litest-device-synaptics-st.c \
+ litest-device-synaptics-t440.c \
+ litest-device-synaptics-x1-carbon-3rd.c \
+ litest-device-trackpoint.c \
+ litest-device-touch-screen.c \
+ litest-device-touchscreen-fuzz.c \
+ litest-device-wacom-bamboo-16fg-pen.c \
+ litest-device-wacom-cintiq-12wx-pen.c \
+ litest-device-wacom-cintiq-13hdt-finger.c \
+ litest-device-wacom-cintiq-13hdt-pad.c \
+ litest-device-wacom-cintiq-13hdt-pen.c \
+ litest-device-wacom-cintiq-24hd-pen.c \
+ litest-device-wacom-cintiq-24hdt-pad.c \
+ litest-device-wacom-ekr.c \
+ litest-device-wacom-hid4800-pen.c \
+ litest-device-wacom-intuos3-pad.c \
+ litest-device-wacom-intuos5-finger.c \
+ litest-device-wacom-intuos5-pad.c \
+ litest-device-wacom-intuos5-pen.c \
+ litest-device-wacom-isdv4-e6-pen.c \
+ litest-device-wacom-isdv4-e6-finger.c \
+ litest-device-waltop-tablet.c \
+ litest-device-wheel-only.c \
+ litest-device-xen-virtual-pointer.c \
+ litest-device-vmware-virtual-usb-mouse.c \
+ litest-device-yubikey.c \
+ litest.c
+liblitest_la_LIBADD = $(top_builddir)/src/libinput-util.la
+liblitest_la_CFLAGS = $(AM_CFLAGS) \
+ -DLIBINPUT_MODEL_QUIRKS_UDEV_RULES_FILE="\"$(abs_top_builddir)/udev/90-libinput-model-quirks-litest.rules\"" \
+ -DLIBINPUT_MODEL_QUIRKS_UDEV_HWDB_FILE="\"$(abs_top_srcdir)/udev/90-libinput-model-quirks.hwdb\"" \
+ -DLIBINPUT_TEST_DEVICE_RULES_FILE="\"$(abs_top_srcdir)/udev/80-libinput-test-device.rules\"" \
+ -DLIBINPUT_DEVICE_GROUPS_RULES_FILE="\"$(abs_top_srcdir)/udev/80-libinput-device-groups-litest.rules\""
+if HAVE_LIBUNWIND
+liblitest_la_LIBADD += $(LIBUNWIND_LIBS) -ldl
+liblitest_la_CFLAGS += $(LIBUNWIND_CFLAGS)
+endif
+
+run_tests = \
+ test-litest-selftest \
+ libinput-test-suite-runner
+
+build_tests = \
+ test-build-cxx \
+ test-build-linker \
+ test-build-pedantic-c99 \
+ test-build-std-gnuc90
+
+noinst_PROGRAMS = $(build_tests) $(run_tests)
+noinst_SCRIPTS = symbols-leak-test
+
+if RUN_TESTS
+TESTS = $(run_tests) symbols-leak-test
+endif
+
+libinput_test_suite_runner_SOURCES = test-udev.c \
+ test-path.c \
+ test-pointer.c \
+ test-touch.c \
+ test-log.c \
+ test-tablet.c \
+ test-pad.c \
+ test-touchpad.c \
+ test-touchpad-tap.c \
+ test-touchpad-buttons.c \
+ test-trackpoint.c \
+ test-trackball.c \
+ test-misc.c \
+ test-keyboard.c \
+ test-device.c \
+ test-gestures.c \
+ test-lid.c
+
+libinput_test_suite_runner_CFLAGS = $(AM_CFLAGS) -DLIBINPUT_LT_VERSION="\"$(LIBINPUT_LT_VERSION)\""
+libinput_test_suite_runner_LDADD = $(TEST_LIBS)
+libinput_test_suite_runner_LDFLAGS = -no-install
+
+test_litest_selftest_SOURCES = litest-selftest.c litest.c litest-int.h litest.h
+test_litest_selftest_CFLAGS = -DLITEST_DISABLE_BACKTRACE_LOGGING -DLITEST_NO_MAIN $(liblitest_la_CFLAGS)
+test_litest_selftest_LDADD = $(TEST_LIBS)
+test_litest_selftest_LDFLAGS = -no-install
+if HAVE_LIBUNWIND
+test_litest_selftest_LDADD += $(LIBUNWIND_LIBS) -ldl
+test_litest_selftest_CFLAGS += $(LIBUNWIND_CFLAGS)
+endif
+
+# build-test only
+test_build_pedantic_c99_SOURCES = build-pedantic.c
+test_build_pedantic_c99_CFLAGS = -std=c99 -pedantic -Werror
+
+test_build_std_gnuc90_SOURCES = build-pedantic.c
+test_build_std_gnuc90_CFLAGS = -std=gnu90 -Werror
+
+# test for linking with the minimal linker flags
+test_build_linker_SOURCES = build-pedantic.c
+test_build_linker_CFLAGS = -I$(top_srcdir)/src
+test_build_linker_LDADD = $(top_builddir)/src/libinput.la $(top_builddir)/src/libinput-util.la
+
+# test including from C++
+test_build_cxx_SOURCES = build-cxx.cc
+test_build_cxx_CXXFLAGS = -Wall -Wextra -Wno-unused-parameter $(AM_CXXFLAGS)
+
+if HAVE_VALGRIND
+VALGRIND_FLAGS=--leak-check=full \
+ --quiet \
+ --error-exitcode=3 \
+ --suppressions=$(srcdir)/valgrind.suppressions
+
+valgrind: check-am
+ $(MAKE) check-TESTS TEST_SUITE_LOG="test-suite-valgrind.log" LOG_COMPILER="$(VALGRIND)" LOG_FLAGS="$(VALGRIND_FLAGS)" CK_FORK=no USING_VALGRIND=yes
+
+check: valgrind
+
+DISTCLEANFILES=test-suite-valgrind.log
+
+endif
+endif
+EXTRA_DIST=valgrind.suppressions
+
+if GCOV_ENABLED
+
+CLEANFILES = gcov-reports/*.gcov gcov-reports/summary.txt *.gcno *.gcda
+
+gcov: generate-gcov-report.sh check-TESTS
+ $(AM_V_GEN)$(srcdir)/generate-gcov-report.sh gcov-reports $(top_builddir)/src $(builddir)
+else
+gcov:
+ @echo "Run ./configure --enable-gcov to produce gcov reports" && false
+endif
diff --git a/tools/.gitignore b/tools/.gitignore
new file mode 100644
index 00000000..efc83c45
--- /dev/null
+++ b/tools/.gitignore
@@ -0,0 +1 @@
+ptraccel-debug
diff --git a/tools/Makefile.am b/tools/Makefile.am
new file mode 100644
index 00000000..2c8660bf
--- /dev/null
+++ b/tools/Makefile.am
@@ -0,0 +1,79 @@
+noinst_PROGRAMS = ptraccel-debug
+bin_PROGRAMS = libinput
+toolsdir = $(libexecdir)/libinput
+tools_PROGRAMS =
+bin_SCRIPTS = libinput-list-devices.compat libinput-debug-events.compat
+noinst_LTLIBRARIES = libshared.la
+
+AM_CPPFLAGS = -I$(top_srcdir)/include \
+ -I$(top_srcdir)/src \
+ -I$(top_builddir)/src # for libinput-version.h
+AM_CFLAGS = $(GCC_CFLAGS)
+AM_CXXFLAGS = $(GCC_CXXFLAGS)
+
+libshared_la_SOURCES = \
+ shared.c \
+ shared.h
+libshared_la_CFLAGS = $(AM_CFLAGS) $(LIBEVDEV_CFLAGS) $(LIBUDEV_CFLAGS) \
+ -DLIBINPUT_TOOL_PATH="\"@libexecdir@/libinput\""
+libshared_la_LIBADD = $(LIBEVDEV_LIBS) $(LIBUDEV_LIBS) ../src/libinput.la
+
+ptraccel_debug_SOURCES = ptraccel-debug.c
+ptraccel_debug_LDADD = ../src/libfilter.la ../src/libinput.la
+ptraccel_debug_LDFLAGS = -no-install
+
+libinput_SOURCES = libinput-tool.c
+libinput_LDADD = ../src/libinput.la libshared.la $(LIBUDEV_LIBS) $(LIBEVDEV_LIBS)
+libinput_CFLAGS = $(AM_CFLAGS) $(LIBUDEV_CFLAGS) $(LIBEVDEV_CFLAGS)
+dist_man1_MANS = libinput.1
+
+tools_PROGRAMS += libinput-list-devices
+libinput_list_devices_SOURCES = libinput-list-devices.c $(shared_sources)
+libinput_list_devices_LDADD = ../src/libinput.la libshared.la $(LIBUDEV_LIBS) $(LIBEVDEV_LIBS)
+libinput_list_devices_CFLAGS = $(AM_CFLAGS) $(LIBUDEV_CFLAGS) $(LIBEVDEV_CFLAGS)
+dist_man1_MANS += libinput-list-devices.1
+
+tools_PROGRAMS += libinput-debug-events
+libinput_debug_events_SOURCES = libinput-debug-events.c $(shared_sources)
+libinput_debug_events_LDADD = ../src/libinput.la libshared.la $(LIBUDEV_LIBS) $(LIBEVDEV_LIBS)
+libinput_debug_events_CFLAGS = $(AM_CFLAGS) $(LIBUDEV_CFLAGS) $(LIBEVDEV_CFLAGS)
+dist_man1_MANS += libinput-debug-events.1
+
+tools_PROGRAMS += libinput-measure
+libinput_measure_SOURCES = libinput-measure.c $(shared_sources)
+libinput_measure_LDADD = ../src/libinput.la libshared.la $(LIBUDEV_LIBS) $(LIBEVDEV_LIBS)
+libinput_measure_CFLAGS = $(AM_CFLAGS) $(LIBUDEV_CFLAGS) $(LIBEVDEV_CFLAGS) \
+ -DLIBINPUT_TOOL_PATH="\"@libexecdir@/libinput\""
+dist_man1_MANS += libinput-measure.1
+
+tools_PROGRAMS += libinput-measure-touchpad-tap
+libinput_measure_touchpad_tap_SOURCES = \
+ libinput-measure-touchpad-tap.c
+libinput_measure_touchpad_tap_LDADD = ../src/libinput.la libshared.la $(LIBUDEV_LIBS) $(LIBEVDEV_LIBS)
+libinput_measure_touchpad_tap_CFLAGS = $(AM_CFLAGS) $(LIBUDEV_CFLAGS) $(LIBEVDEV_CFLAGS)
+dist_man1_MANS += libinput-measure-touchpad-tap.1
+
+if BUILD_DEBUG_GUI
+tools_PROGRAMS += libinput-debug-gui
+libinput_debug_gui_SOURCES = libinput-debug-gui.c
+libinput_debug_gui_LDADD = ../src/libinput.la libshared.la $(CAIRO_LIBS) $(GTK_LIBS) $(LIBEVDEV_LIBS) $(LIBUDEV_LIBS)
+libinput_debug_gui_CFLAGS = $(AM_CFLAGS) $(CAIRO_CFLAGS) $(GTK_CFLAGS) $(LIBEVDEV_CFLAGS) $(LIBUDEV_CFLAGS)
+dist_man1_MANS += libinput-debug-gui.1
+endif
+
+EXTRA_DIST = make-ptraccel-graphs.sh install-compat-scripts.sh $(bin_SCRIPTS)
+
+install-data-hook:
+ (cd $(DESTDIR)$(bindir) && mv libinput-list-devices.compat libinput-list-devices)
+ (cd $(DESTDIR)$(bindir) && mv libinput-debug-events.compat libinput-debug-events)
+
+uninstall-local:
+ rm -f $(DESTDIR)$(bindir)/libinput-list-devices
+ rm -f $(DESTDIR)$(bindir)/libinput-debug-events
+
+SUFFIXES = .man
+.man.1:
+ $(AM_V_GEN)$(SED) -e 's|\@LIBINPUT_VERSION\@|$(PACKAGE_VERSION)|' < $< > $@
+CLEANFILES = *.1
+EXTRA_DIST += $(dist_man1_MANS:.1=.man)
+
diff --git a/udev/.gitignore b/udev/.gitignore
new file mode 100644
index 00000000..cad377a8
--- /dev/null
+++ b/udev/.gitignore
@@ -0,0 +1,6 @@
+libinput-device-group
+libinput-model-quirks
+80-libinput-device-groups-litest.rules
+80-libinput-device-groups.rules
+90-libinput-model-quirks-litest.rules
+90-libinput-model-quirks.rules
diff --git a/udev/Makefile.am b/udev/Makefile.am
new file mode 100644
index 00000000..2c852a09
--- /dev/null
+++ b/udev/Makefile.am
@@ -0,0 +1,51 @@
+udevdir=$(UDEV_DIR)
+udev_PROGRAMS = libinput-device-group \
+ libinput-model-quirks
+
+litest_rules = 80-libinput-device-groups-litest.rules \
+ 90-libinput-model-quirks-litest.rules
+noinst_SCRIPTS = $(litest_rules)
+
+libinput_device_group_SOURCES = libinput-device-group.c
+libinput_device_group_CFLAGS = -I$(top_srcdir)/src \
+ $(LIBUDEV_CFLAGS) \
+ $(GCC_CFLAGS)
+libinput_device_group_LDADD = $(LIBUDEV_LIBS)
+
+if HAVE_LIBWACOM_GET_PAIRED_DEVICE
+libinput_device_group_CFLAGS += $(LIBWACOM_CFLAGS)
+libinput_device_group_LDADD += $(LIBWACOM_LIBS)
+endif
+
+libinput_model_quirks_SOURCES = libinput-model-quirks.c
+libinput_model_quirks_CFLAGS = \
+ -I$(top_srcdir)/src \
+ $(LIBUDEV_CFLAGS) \
+ $(GCC_CFLAGS)
+libinput_model_quirks_LDADD = $(LIBUDEV_LIBS)
+
+udev_rulesdir=$(UDEV_DIR)/rules.d
+dist_udev_rules_DATA = \
+ 80-libinput-device-groups.rules \
+ 90-libinput-model-quirks.rules
+
+udev_hwdbdir=$(UDEV_DIR)/hwdb.d
+dist_udev_hwdb_DATA = \
+ 90-libinput-model-quirks.hwdb
+
+%-litest.rules: %.rules.in
+ $(SED) -e "s|\@UDEV_TEST_PATH\@|$(abs_builddir)/|" < $^ > $@
+
+CLEANFILES = $(litest_rules)
+DISTCLEANFILES = \
+ 80-libinput-device-groups.rules \
+ 90-libinput-model-quirks.rules
+EXTRA_DIST = 80-libinput-test-device.rules
+
+TEST_EXTENSIONS = .py
+
+if HAVE_PYTHON
+TESTS = parse_hwdb.py
+PY_LOG_COMPILER = $(PYTHON)
+endif
+EXTRA_DIST += parse_hwdb.py
--
2.14.3