libinput build instructions

Instructions on how to build libinput and its tools and how to build against libinput.

The build instruction on this page detail how to overwrite your system-provided libinput with one from the git repository, see see Reverting to the system-provided libinput packge to revert to the previous state.

# Building libinput

libinput uses automake, a build is usually the three-step process below. A successful build requires the Build dependencies to be installed at configure time.

$> git clone git://anongit.freedesktop.org/git/wayland/libinput
$> cd libinput
$> ./autogen.sh --prefix=/usr --libdir=/usr/lib64
$> make
$> sudo make install
$> sudo udevadm hwdb --update

Note
  On Debian-based distributions including Ubuntu and its derivatives skip the `--libdir=/usr/lib64` argument.

## Verifying the install

To verify the install worked correctly, check that libinput.so.x.x.x is in the library path and that all symlinks point to the new library.

    $> ls -l /usr/lib64/libinput.*
    -rwxr-xr-x 1 root root    946 Apr 28  2015 /usr/lib64/libinput.la
    lrwxrwxrwx 1 root root     19 Feb  1 15:12 /usr/lib64/libinput.so -> libinput.so.10.11.2
    lrwxrwxrwx 1 root root     19 Feb  1 15:12 /usr/lib64/libinput.so.10 -> libinput.so.10.11.2
    -rwxr-xr-x 1 root root 204992 Feb  1 15:12 /usr/lib64/libinput.so.10.11.2

The .so installed from git master may have a lower number than the system-provided one. In that case, manually adjust the symlinks to point to the newly installed .so.x.x.x

## Reverting to the system-provided libinput packge

The recommended way to revert to the system install is to use the package manager to reinstall the libinput package. In some cases, this may leave files in the system (e.g. `/usr/lib/libinput.la`) but these files are usually harmless. To definitely remove all files, run the following command from the libinput source directory:

$> sudo make uninstall
# WARNING: Do not restart the computer/X/the Wayland compositor after make
# uninstall, reinstall the system package immediately!

The following commands reinstall the current system package for libinput, overwriting manually installed files.

- Debian/Ubuntu based distributions: `sudo apt-get install --reinstall libinput`
- Fedora 22 and later: `sudo dnf reinstall libinput`
- RHEL/CentOS/Fedora 21 and earlier: `sudo yum reinstall libinput`
- openSUSE: `sudo zypper install --force libinput10`
- Arch: `sudo packman -S libinput`

## Build dependencies

libinput has a few build-time dependencies that must be installed prior to running configure. In most cases, it is sufficient to install the dependencies that your distribution uses to build the libinput package. These can be installed with one of the following commands:

- Debian/Ubuntu based distributions: `sudo apt-get build-dep libinput`
- Fedora 22 and later: `sudo dnf builddep libinput`
- RHEL/CentOS/Fedora 21 and earlier: `sudo yum-builddep libinput`
- openSUSE:

      $> sudo zypper modifyrepo --enable `zypper repos | grep source | awk '{print $5}'`
      $> sudo zypper source-install -d libinput10
      $> sudo zypper install autoconf automake libtool
      $> sudo zypper modifyrepo --disable `zypper repos | grep source | awk '{print $5}'`

- Arch:

      $> abs extra/libinput
      $> cd $(mktemp -d)
      $> cp /var/abs/extra/libinput/PKGBUILD .
      $> makepkg --syncdeps --nobuild

If dependencies are missing, a message `No package 'foo' found` will be shown during the configure stage. See this blog post here. for instructions on how to fix it.

## Building without libwacom

libwacom is required by libinput's tablet code to gather additional information about tablets that is not available from the kernel device itself. libwacom is required by default but can be skipped when Building libinput with the `--disable-libwacom` argument.

$> ./autogen.sh --disable-libwacom --prefix=/usr --libdir=/usr/lib64

It is not recommended to disable libwacom unless libinput is used in an environment where tablet support is not required. libinput provides tablet support even without libwacom, but some features may be missing or working differently.

## Building the graphical helper tool

Only the commandline Helper tools are installed by distributions. The event-gui graphical helper tools is only available in the source repository.

The graphical helper tool is optional and requires extra libraries to build. If these libraries are not detected, the tool will not be built. If you need the tool for debugging purposes, use the `--enable-event-gui` argument when Building libinput.

$> ./autogen.sh --enable-event-gui --prefix=/usr --libdir=/usr/lib64

As usual, any missing library headers will then trigger an error and can be addressed one-by-one.

# Building against libinput

libinput provides a pkg-config file. Software that uses libinput should use pkg-config and the `PKG_CHECK_MODULES` autoconf macro. Otherwise, the most rudimentary way to compile and link a program against libinput is:

    gcc -o myprogram myprogram.c `pkg-config --cflags --libs libinput`

For further information on using pkgconfig see the pkg-config documentation.