forked from conan-io/conan-center-index
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
(conan-io#20346) libinput: Add recipe
* libinput: Add recipe * Link transitively to both libevdev and mtdev * Revert "Link transitively to both libevdev and mtdev" This reverts commit 20d94b1. * Remove comment * Disable debug_gui by default to reduce default number of dependencies * Fix error in the test package * Update * Bump eudev version * Remove comment and only require wayland when debug_gui is enabled
- Loading branch information
1 parent
fad10d5
commit 31cb467
Showing
6 changed files
with
223 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
sources: | ||
"1.25.0": | ||
url: "https://gitlab.freedesktop.org/libinput/libinput/-/archive/1.25.0/libinput-1.25.0.tar.bz2" | ||
sha256: "193bd592298bd9e369c0ef3e5d83a6a9d68ddc4cd3dfc84bbe77920a8d0d57df" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
from conan import ConanFile | ||
from conan.errors import ConanInvalidConfiguration | ||
from conan.tools.env import VirtualBuildEnv | ||
from conan.tools.files import copy, get, rmdir | ||
from conan.tools.gnu import PkgConfigDeps | ||
from conan.tools.layout import basic_layout | ||
from conan.tools.meson import Meson, MesonToolchain | ||
import os | ||
|
||
|
||
required_conan_version = ">=1.53.0" | ||
|
||
|
||
class LibinputConan(ConanFile): | ||
name = "libinput" | ||
description = "libinput is a library that handles input devices for display servers and other applications that need to directly deal with input devices." | ||
license = "MIT" | ||
url = "https://github.com/conan-io/conan-center-index" | ||
homepage = "https://www.freedesktop.org/wiki/Software/libinput/" | ||
topics = ("device", "display", "event", "input") | ||
package_type = "shared-library" | ||
settings = "os", "arch", "compiler", "build_type" | ||
options = { | ||
"epoll_dir": [None, "ANY"], | ||
"debug_gui": [True, False], | ||
"with_libudev": ["eudev", "systemd"], | ||
"with_libwacom": [True, False], | ||
"with_wayland": [True, False], | ||
"with_x11": [True, False], | ||
} | ||
default_options = { | ||
"epoll_dir": None, | ||
"debug_gui": False, | ||
"with_libudev": "systemd", | ||
# todo Package libwacom and enable this option by default. | ||
"with_libwacom": False, | ||
"with_wayland": True, | ||
"with_x11": True, | ||
} | ||
|
||
def configure(self): | ||
self.settings.rm_safe("compiler.cppstd") | ||
self.settings.rm_safe("compiler.libcxx") | ||
if not self.options.debug_gui: | ||
self.options.rm_safe("with_wayland") | ||
self.options.rm_safe("with_x11") | ||
|
||
def layout(self): | ||
basic_layout(self, src_folder="src") | ||
|
||
def requirements(self): | ||
self.requires("mtdev/1.1.6") | ||
self.requires("libevdev/1.13.1") | ||
|
||
if self.options.debug_gui: | ||
self.requires("cairo/1.18.0") | ||
self.requires("glib/2.78.3") | ||
self.requires("gtk/system") | ||
if self.options.with_wayland: | ||
self.requires("wayland/1.22.0") | ||
self.requires("wayland-protocols/1.33") | ||
if self.options.with_x11: | ||
self.requires("xorg/system") | ||
|
||
if self.options.with_libudev == "systemd": | ||
self.requires("libudev/system", transitive_libs=True) | ||
elif self.options.with_libudev == "eudev": | ||
self.requires("eudev/3.2.14", transitive_libs=True) | ||
|
||
def validate(self): | ||
if self.settings.os not in ["FreeBSD", "Linux"]: | ||
raise ConanInvalidConfiguration(f"{self.ref} is not supported on {self.settings.os}.") | ||
if self.options.with_libwacom: | ||
raise ConanInvalidConfiguration(f"The with_libwacom option for {self.ref} is not yet supported. Contributions welcome.") | ||
|
||
def build_requirements(self): | ||
self.tool_requires("meson/1.3.2") | ||
if not self.conf.get("tools.gnu:pkg_config", default=False, check_type=str): | ||
self.tool_requires("pkgconf/2.1.0") | ||
if self.options.debug_gui and self.options.get_safe("with_wayland"): | ||
self.tool_requires("wayland/<host_version>") | ||
|
||
def source(self): | ||
get(self, **self.conan_data["sources"][self.version], strip_root=True) | ||
|
||
def generate(self): | ||
tc = MesonToolchain(self) | ||
tc.project_options["coverity"] = False | ||
tc.project_options["datadir"] = "res" | ||
tc.project_options["documentation"] = False | ||
tc.project_options["epoll-dir"] = '' if self.options.epoll_dir is None else str(self.options.epoll_dir) | ||
tc.project_options["debug-gui"] = self.options.debug_gui | ||
tc.project_options["install-tests"] = False | ||
# Change libexecdir so that the libinput subdirectory in the bin directory doesn't conflict with the libinput executable. | ||
tc.project_options["libexecdir"] = "libexec" | ||
tc.project_options["libwacom"] = self.options.with_libwacom | ||
tc.project_options["tests"] = False | ||
tc.generate() | ||
tc = PkgConfigDeps(self) | ||
tc.generate() | ||
tc = VirtualBuildEnv(self) | ||
tc.generate() | ||
|
||
def build(self): | ||
meson = Meson(self) | ||
meson.configure() | ||
meson.build() | ||
|
||
def package(self): | ||
copy(self, "COPYING", self.source_folder, os.path.join(self.package_folder, "licenses")) | ||
meson = Meson(self) | ||
meson.install() | ||
|
||
copy(self, f"{self.name}-*", os.path.join(self.package_folder, "libexec", self.name), os.path.join(self.package_folder, "bin")) | ||
rmdir(self, os.path.join(self.package_folder, "libexec")) | ||
|
||
rmdir(self, os.path.join(self.package_folder, "etc")) | ||
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) | ||
rmdir(self, os.path.join(self.package_folder, "res", "zsh")) | ||
rmdir(self, os.path.join(self.package_folder, "share")) | ||
|
||
def package_info(self): | ||
self.cpp_info.libs = ["input"] | ||
if self.settings.os in ["Linux", "FreeBSD"]: | ||
self.cpp_info.system_libs.extend(["m", "rt"]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
from conan import ConanFile | ||
from conan.tools.build import can_run | ||
from conan.tools.layout import basic_layout | ||
from conan.tools.meson import Meson | ||
import os | ||
|
||
|
||
class TestPackageConan(ConanFile): | ||
settings = "os", "arch", "compiler", "build_type" | ||
generators = "PkgConfigDeps", "MesonToolchain", "VirtualRunEnv", "VirtualBuildEnv" | ||
test_type = "explicit" | ||
|
||
def layout(self): | ||
basic_layout(self) | ||
|
||
def requirements(self): | ||
self.requires(self.tested_reference_str) | ||
|
||
def build_requirements(self): | ||
self.tool_requires("meson/1.3.2") | ||
if not self.conf.get("tools.gnu:pkg_config", default=False, check_type=str): | ||
self.tool_requires("pkgconf/2.1.0") | ||
|
||
def build(self): | ||
meson = Meson(self) | ||
meson.configure() | ||
meson.build() | ||
|
||
def test(self): | ||
if can_run(self): | ||
bin_path = os.path.join(self.cpp.build.bindir, "test_package") | ||
self.run(bin_path, env="conanrun") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
project('test_package', 'c') | ||
package_dep = dependency('libinput') | ||
executable('test_package', | ||
sources : ['test_package.c'], | ||
dependencies : [package_dep]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
#include <fcntl.h> | ||
#include <stdbool.h> | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <unistd.h> | ||
|
||
#include <libudev.h> | ||
#include <libinput.h> | ||
|
||
static int | ||
open_restricted(const char *path, int flags, void *user_data) | ||
{ | ||
int fd = open(path, flags); | ||
return fd < 0 ? -1 : fd; | ||
} | ||
|
||
static void | ||
close_restricted(int fd, void *user_data) | ||
{ | ||
close(fd); | ||
} | ||
|
||
static const struct libinput_interface interface = { | ||
.open_restricted = open_restricted, | ||
.close_restricted = close_restricted, | ||
}; | ||
|
||
int main(void) { | ||
bool grab = false; | ||
struct libinput *li; | ||
struct udev *udev = udev_new(); | ||
if (!udev) { | ||
fprintf(stderr, "Failed to initialize udev\n"); | ||
return EXIT_FAILURE; | ||
} | ||
|
||
li = libinput_udev_create_context(&interface, &grab, udev); | ||
if (!li) { | ||
fprintf(stderr, "Failed to initialize libinput context from udev\n"); | ||
udev_unref(udev); | ||
return EXIT_FAILURE; | ||
} | ||
|
||
if (libinput_udev_assign_seat(li, "seat0")) { | ||
fprintf(stderr, "Failed to set seat\n"); | ||
libinput_unref(li); | ||
li = NULL; | ||
udev_unref(udev); | ||
return EXIT_FAILURE; | ||
} | ||
|
||
udev_unref(udev); | ||
return EXIT_SUCCESS; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
versions: | ||
"1.25.0": | ||
folder: all |