mirror of
https://gitlab.freedesktop.org/libevdev/libevdev.git
synced 2025-12-27 03:20:07 +01:00
Compare commits
No commits in common. "master" and "libevdev-1.10.0" have entirely different histories.
master
...
libevdev-1
48 changed files with 1383 additions and 1025 deletions
545
.gitlab-ci.yml
545
.gitlab-ci.yml
|
|
@ -4,18 +4,33 @@
|
||||||
# #
|
# #
|
||||||
########################################
|
########################################
|
||||||
|
|
||||||
.templates_sha: &template_sha e195d80f35b45cc73668be3767b923fd76c70ed5 # see https://docs.gitlab.com/ee/ci/yaml/#includefile
|
.templates_sha: &template_sha ca99d9418390fb5faaa7f2407b94c733d7ec6a37 # see https://docs.gitlab.com/ee/ci/yaml/#includefile
|
||||||
|
|
||||||
include:
|
include:
|
||||||
|
# Alpine container builder template
|
||||||
- project: 'freedesktop/ci-templates'
|
- project: 'freedesktop/ci-templates'
|
||||||
ref: *template_sha
|
ref: *template_sha
|
||||||
file:
|
file: '/templates/alpine.yml'
|
||||||
- '/templates/alpine.yml'
|
# Arch container builder template
|
||||||
- '/templates/arch.yml'
|
- project: 'freedesktop/ci-templates'
|
||||||
- '/templates/debian.yml'
|
ref: *template_sha
|
||||||
- '/templates/fedora.yml'
|
file: '/templates/arch.yml'
|
||||||
- '/templates/ubuntu.yml'
|
# Centos container builder template
|
||||||
- '/templates/ci-fairy.yml'
|
- project: 'freedesktop/ci-templates'
|
||||||
|
ref: *template_sha
|
||||||
|
file: '/templates/centos.yml'
|
||||||
|
# Debian container builder template
|
||||||
|
- project: 'freedesktop/ci-templates'
|
||||||
|
ref: *template_sha
|
||||||
|
file: '/templates/debian.yml'
|
||||||
|
# Fedora container builder template
|
||||||
|
- project: 'freedesktop/ci-templates'
|
||||||
|
ref: *template_sha
|
||||||
|
file: '/templates/fedora.yml'
|
||||||
|
# Ubuntu container builder template
|
||||||
|
- project: 'freedesktop/ci-templates'
|
||||||
|
ref: *template_sha
|
||||||
|
file: '/templates/ubuntu.yml'
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- prep # rebuild the container images if there is a change
|
- prep # rebuild the container images if there is a change
|
||||||
|
|
@ -27,16 +42,10 @@ stages:
|
||||||
- container_clean # clean up unused container images
|
- container_clean # clean up unused container images
|
||||||
- merge-check # check for a merge request
|
- merge-check # check for a merge request
|
||||||
|
|
||||||
workflow:
|
|
||||||
rules:
|
|
||||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
||||||
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
|
|
||||||
when: never
|
|
||||||
- if: $CI_COMMIT_BRANCH
|
|
||||||
|
|
||||||
variables:
|
variables:
|
||||||
# The upstrem repository we will check for images
|
# The upstrem repository we will check for images
|
||||||
FDO_UPSTREAM_REPO: libevdev/libevdev
|
FDO_UPSTREAM_REPO: libevdev/libevdev
|
||||||
|
LIBEVDEV_SKIP_ROOT_TESTS: 1
|
||||||
GIT_DEPTH: 1
|
GIT_DEPTH: 1
|
||||||
MESON_BUILDDIR: 'build dir'
|
MESON_BUILDDIR: 'build dir'
|
||||||
|
|
||||||
|
|
@ -46,9 +55,9 @@ variables:
|
||||||
- _build/test/test-suite.log
|
- _build/test/test-suite.log
|
||||||
- $MESON_BUILDDIR/meson-logs/
|
- $MESON_BUILDDIR/meson-logs/
|
||||||
expire_in: 1 week
|
expire_in: 1 week
|
||||||
when: always
|
when: on_failure
|
||||||
reports:
|
reports:
|
||||||
junit: $MESON_BUILDDIR/*junit*.xml
|
junit: $MESON_BUILDDIR/junit-*.xml
|
||||||
|
|
||||||
.autotools_build:
|
.autotools_build:
|
||||||
extends:
|
extends:
|
||||||
|
|
@ -61,57 +70,71 @@ variables:
|
||||||
- make check
|
- make check
|
||||||
- if ! [[ -z "$MAKE_ARGS" ]]; then make $MAKE_ARGS; fi
|
- if ! [[ -z "$MAKE_ARGS" ]]; then make $MAKE_ARGS; fi
|
||||||
- popd > /dev/null
|
- popd > /dev/null
|
||||||
variables:
|
|
||||||
LIBEVDEV_SKIP_ROOT_TESTS: 1
|
|
||||||
|
|
||||||
.meson_build:
|
.meson_build:
|
||||||
extends:
|
extends:
|
||||||
- .default_artifacts
|
- .default_artifacts
|
||||||
script:
|
script:
|
||||||
- .gitlab-ci/meson-build.sh --run-test
|
- .gitlab-ci/meson-build.sh
|
||||||
variables:
|
|
||||||
MESON_TEST_ARGS: '--no-suite=needs-uinput'
|
|
||||||
|
|
||||||
.fedora:40:
|
.fedora:31:
|
||||||
extends: .fdo.distribution-image@fedora
|
extends: .fdo.distribution-image@fedora
|
||||||
variables:
|
variables:
|
||||||
FDO_DISTRIBUTION_TAG: '2024-11-25.0'
|
FDO_DISTRIBUTION_TAG: '2020-09-11.0'
|
||||||
FDO_DISTRIBUTION_VERSION: '40'
|
FDO_DISTRIBUTION_VERSION: '31'
|
||||||
|
|
||||||
.fedora:41:
|
.fedora:32:
|
||||||
extends: .fdo.distribution-image@fedora
|
extends: .fdo.distribution-image@fedora
|
||||||
variables:
|
variables:
|
||||||
FDO_DISTRIBUTION_TAG: '2024-11-25.0'
|
FDO_DISTRIBUTION_TAG: '2020-09-11.0'
|
||||||
FDO_DISTRIBUTION_VERSION: '41'
|
FDO_DISTRIBUTION_VERSION: '32'
|
||||||
|
|
||||||
.ubuntu:24.10:
|
.ubuntu:20.04:
|
||||||
extends: .fdo.distribution-image@ubuntu
|
extends: .fdo.distribution-image@ubuntu
|
||||||
variables:
|
variables:
|
||||||
FDO_DISTRIBUTION_TAG: '2024-11-25.0'
|
FDO_DISTRIBUTION_TAG: '2020-09-11.0'
|
||||||
FDO_DISTRIBUTION_VERSION: '24.10'
|
FDO_DISTRIBUTION_VERSION: '20.04'
|
||||||
|
|
||||||
|
.ubuntu:19.10:
|
||||||
|
extends: .fdo.distribution-image@ubuntu
|
||||||
|
variables:
|
||||||
|
FDO_DISTRIBUTION_TAG: '2020-09-11.0'
|
||||||
|
FDO_DISTRIBUTION_VERSION: '19.10'
|
||||||
|
|
||||||
.debian:stable:
|
.debian:stable:
|
||||||
extends: .fdo.distribution-image@debian
|
extends: .fdo.distribution-image@debian
|
||||||
variables:
|
variables:
|
||||||
FDO_DISTRIBUTION_TAG: '2024-11-25.0'
|
FDO_DISTRIBUTION_TAG: '2020-09-11.0'
|
||||||
FDO_DISTRIBUTION_VERSION: 'stable'
|
FDO_DISTRIBUTION_VERSION: 'stable'
|
||||||
|
|
||||||
.debian:sid:
|
.debian:sid:
|
||||||
extends: .fdo.distribution-image@debian
|
extends: .fdo.distribution-image@debian
|
||||||
variables:
|
variables:
|
||||||
FDO_DISTRIBUTION_TAG: '2024-11-25.0'
|
FDO_DISTRIBUTION_TAG: '2020-09-11.0'
|
||||||
FDO_DISTRIBUTION_VERSION: 'sid'
|
FDO_DISTRIBUTION_VERSION: 'sid'
|
||||||
|
|
||||||
|
.centos:7:
|
||||||
|
extends: .fdo.distribution-image@centos
|
||||||
|
variables:
|
||||||
|
FDO_DISTRIBUTION_TAG: '2020-09-11.0'
|
||||||
|
FDO_DISTRIBUTION_VERSION: '7'
|
||||||
|
|
||||||
|
.centos:8:
|
||||||
|
extends: .fdo.distribution-image@centos
|
||||||
|
variables:
|
||||||
|
FDO_DISTRIBUTION_TAG: '2020-09-11.0'
|
||||||
|
FDO_DISTRIBUTION_VERSION: '8'
|
||||||
|
|
||||||
.arch:rolling:
|
.arch:rolling:
|
||||||
extends: .fdo.distribution-image@arch
|
extends: .fdo.distribution-image@arch
|
||||||
variables:
|
variables:
|
||||||
FDO_DISTRIBUTION_TAG: '2024-11-25.0'
|
FDO_DISTRIBUTION_TAG: '2020-09-11.0'
|
||||||
FDO_DISTRIBUTION_VERSION: 'rolling'
|
FDO_DISTRIBUTION_VERSION: 'rolling'
|
||||||
|
|
||||||
.alpine:latest:
|
.alpine:latest:
|
||||||
extends: .fdo.distribution-image@alpine
|
extends: .fdo.distribution-image@alpine
|
||||||
variables:
|
variables:
|
||||||
FDO_DISTRIBUTION_TAG: '2024-11-25.0'
|
FDO_DISTRIBUTION_TAG: '2020-09-11.0'
|
||||||
FDO_DISTRIBUTION_VERSION: 'latest'
|
FDO_DISTRIBUTION_VERSION: 'latest'
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -127,11 +150,14 @@ variables:
|
||||||
# $SRCDIR/.gitlab-ci/generate-gitlab-ci.py
|
# $SRCDIR/.gitlab-ci/generate-gitlab-ci.py
|
||||||
#
|
#
|
||||||
check-ci-script:
|
check-ci-script:
|
||||||
extends:
|
image: golang:alpine
|
||||||
- .fdo.ci-fairy
|
|
||||||
stage: prep
|
stage: prep
|
||||||
|
before_script:
|
||||||
|
- apk add python3 py-pip git
|
||||||
|
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||||
script:
|
script:
|
||||||
- ci-fairy generate-template --verify && exit 0 || true
|
- ci-fairy generate-template
|
||||||
|
- git diff --exit-code && exit 0 || true
|
||||||
- echo "Committed gitlab-ci.yml differs from generated gitlab-ci.yml. Please verify"
|
- echo "Committed gitlab-ci.yml differs from generated gitlab-ci.yml. Please verify"
|
||||||
- exit 1
|
- exit 1
|
||||||
|
|
||||||
|
|
@ -140,13 +166,13 @@ check-ci-script:
|
||||||
#
|
#
|
||||||
|
|
||||||
check-commit:
|
check-commit:
|
||||||
extends:
|
image: golang:alpine
|
||||||
- .fdo.ci-fairy
|
|
||||||
stage: prep
|
stage: prep
|
||||||
|
before_script:
|
||||||
|
- apk add python3 py-pip git
|
||||||
|
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||||
script:
|
script:
|
||||||
- ci-fairy -vv check-commits --junit-xml=results.xml && exit 0 || true
|
- ci-fairy check-commits --signed-off-by --junit-xml=results.xml
|
||||||
- echo "Error checking the commit message format. Please verify"
|
|
||||||
- exit 1
|
|
||||||
except:
|
except:
|
||||||
- master@libevdev/libevdev
|
- master@libevdev/libevdev
|
||||||
variables:
|
variables:
|
||||||
|
|
@ -160,9 +186,11 @@ check-commit:
|
||||||
#
|
#
|
||||||
|
|
||||||
check-merge-request:
|
check-merge-request:
|
||||||
extends:
|
image: golang:alpine
|
||||||
- .fdo.ci-fairy
|
|
||||||
stage: merge-check
|
stage: merge-check
|
||||||
|
before_script:
|
||||||
|
- apk add python3 py-pip git
|
||||||
|
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||||
script:
|
script:
|
||||||
- ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml
|
- ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml
|
||||||
artifacts:
|
artifacts:
|
||||||
|
|
@ -170,13 +198,11 @@ check-merge-request:
|
||||||
reports:
|
reports:
|
||||||
junit: results.xml
|
junit: results.xml
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
rules:
|
|
||||||
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
|
|
||||||
|
|
||||||
|
|
||||||
.fedora.packages:
|
.fedora.packages:
|
||||||
variables:
|
variables:
|
||||||
FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils doxygen xz clang-analyzer systemd-udev qemu-img qemu-system-x86-core qemu-system-aarch64-core jq python3-click python3-rich'
|
FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils doxygen xz clang-analyzer'
|
||||||
|
|
||||||
.ubuntu.packages:
|
.ubuntu.packages:
|
||||||
variables:
|
variables:
|
||||||
|
|
@ -186,48 +212,153 @@ check-merge-request:
|
||||||
variables:
|
variables:
|
||||||
FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkg-config python3 check valgrind binutils doxygen xz-utils'
|
FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkg-config python3 check valgrind binutils doxygen xz-utils'
|
||||||
|
|
||||||
|
.centos.packages:
|
||||||
|
variables:
|
||||||
|
FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils xz'
|
||||||
|
|
||||||
.arch.packages:
|
.arch.packages:
|
||||||
variables:
|
variables:
|
||||||
FDO_DISTRIBUTION_PACKAGES: 'git gc meson automake autoconf libtool make pkgconfig python3 check valgrind binutils doxygen'
|
FDO_DISTRIBUTION_PACKAGES: 'git gcc meson automake autoconf libtool make pkgconfig python3 check valgrind binutils doxygen'
|
||||||
|
|
||||||
.alpine.packages:
|
.alpine.packages:
|
||||||
variables:
|
variables:
|
||||||
FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkgconfig python3 check-dev valgrind binutils doxygen xz linux-headers'
|
FDO_DISTRIBUTION_PACKAGES: 'git gcc g++ meson automake autoconf libtool make pkgconfig python3 check-dev valgrind binutils doxygen xz linux-headers'
|
||||||
|
|
||||||
|
|
||||||
|
# Pulls in the qemu container from upstream or rebuilds it if missing
|
||||||
|
.fedora:31@qemu-prep:
|
||||||
|
extends:
|
||||||
|
- .fedora:31
|
||||||
|
- .fedora.packages
|
||||||
|
- .fdo.qemu-build@fedora
|
||||||
|
stage: prep
|
||||||
|
tags:
|
||||||
|
- kvm
|
||||||
|
variables:
|
||||||
|
GIT_STRATEGY: none
|
||||||
|
FDO_DISTRIBUTION_TAG: qemu-2020-09-11.0
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
|
# Always rebuilds the container
|
||||||
|
.fedora:31@qemu-forced-rebuild:
|
||||||
|
extends:
|
||||||
|
- .fedora:31@qemu-prep
|
||||||
|
variables:
|
||||||
|
FDO_FORCE_REBUILD: 1
|
||||||
|
only:
|
||||||
|
- schedules
|
||||||
|
|
||||||
|
# Pulls in the qemu container from upstream or rebuilds it if missing
|
||||||
|
.fedora:32@qemu-prep:
|
||||||
|
extends:
|
||||||
|
- .fedora:32
|
||||||
|
- .fedora.packages
|
||||||
|
- .fdo.qemu-build@fedora
|
||||||
|
stage: prep
|
||||||
|
tags:
|
||||||
|
- kvm
|
||||||
|
variables:
|
||||||
|
GIT_STRATEGY: none
|
||||||
|
FDO_DISTRIBUTION_TAG: qemu-2020-09-11.0
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
|
# Always rebuilds the container
|
||||||
|
.fedora:32@qemu-forced-rebuild:
|
||||||
|
extends:
|
||||||
|
- .fedora:32@qemu-prep
|
||||||
|
variables:
|
||||||
|
FDO_FORCE_REBUILD: 1
|
||||||
|
only:
|
||||||
|
- schedules
|
||||||
|
|
||||||
|
|
||||||
|
# This is the actual job
|
||||||
|
fedora:32@qemu-prep:
|
||||||
|
extends: .fedora:32@qemu-prep
|
||||||
|
|
||||||
|
fedora:32@qemu-forced-rebuild:
|
||||||
|
extends: .fedora:32@qemu-forced-rebuild
|
||||||
|
|
||||||
|
|
||||||
# Pulls in the container from upstream or rebuilds it if missing
|
# Pulls in the container from upstream or rebuilds it if missing
|
||||||
fedora:40@container-prep:
|
fedora:31@container-prep:
|
||||||
extends:
|
extends:
|
||||||
- .fedora:40
|
- .fedora:31
|
||||||
- .fedora.packages
|
- .fedora.packages
|
||||||
- .fdo.container-build@fedora
|
- .fdo.container-build@fedora
|
||||||
stage: prep
|
stage: prep
|
||||||
variables:
|
variables:
|
||||||
GIT_STRATEGY: none
|
GIT_STRATEGY: none
|
||||||
|
|
||||||
|
# Always rebuilds the container
|
||||||
|
fedora:31@container-forced-rebuild:
|
||||||
|
extends:
|
||||||
|
- fedora:31@container-prep
|
||||||
|
only:
|
||||||
|
- schedules
|
||||||
|
variables:
|
||||||
|
FDO_FORCE_REBUILD: 1
|
||||||
|
|
||||||
|
|
||||||
# Pulls in the container from upstream or rebuilds it if missing
|
# Pulls in the container from upstream or rebuilds it if missing
|
||||||
fedora:41@container-prep:
|
fedora:32@container-prep:
|
||||||
extends:
|
extends:
|
||||||
- .fedora:41
|
- .fedora:32
|
||||||
- .fedora.packages
|
- .fedora.packages
|
||||||
- .fdo.container-build@fedora
|
- .fdo.container-build@fedora
|
||||||
stage: prep
|
stage: prep
|
||||||
variables:
|
variables:
|
||||||
GIT_STRATEGY: none
|
GIT_STRATEGY: none
|
||||||
|
|
||||||
|
# Always rebuilds the container
|
||||||
|
fedora:32@container-forced-rebuild:
|
||||||
|
extends:
|
||||||
|
- fedora:32@container-prep
|
||||||
|
only:
|
||||||
|
- schedules
|
||||||
|
variables:
|
||||||
|
FDO_FORCE_REBUILD: 1
|
||||||
|
|
||||||
|
|
||||||
# Pulls in the container from upstream or rebuilds it if missing
|
# Pulls in the container from upstream or rebuilds it if missing
|
||||||
ubuntu:24.10@container-prep:
|
ubuntu:20.04@container-prep:
|
||||||
extends:
|
extends:
|
||||||
- .ubuntu:24.10
|
- .ubuntu:20.04
|
||||||
- .ubuntu.packages
|
- .ubuntu.packages
|
||||||
- .fdo.container-build@ubuntu
|
- .fdo.container-build@ubuntu
|
||||||
stage: prep
|
stage: prep
|
||||||
variables:
|
variables:
|
||||||
GIT_STRATEGY: none
|
GIT_STRATEGY: none
|
||||||
|
|
||||||
|
# Always rebuilds the container
|
||||||
|
ubuntu:20.04@container-forced-rebuild:
|
||||||
|
extends:
|
||||||
|
- ubuntu:20.04@container-prep
|
||||||
|
only:
|
||||||
|
- schedules
|
||||||
|
variables:
|
||||||
|
FDO_FORCE_REBUILD: 1
|
||||||
|
|
||||||
|
|
||||||
|
# Pulls in the container from upstream or rebuilds it if missing
|
||||||
|
ubuntu:19.10@container-prep:
|
||||||
|
extends:
|
||||||
|
- .ubuntu:19.10
|
||||||
|
- .ubuntu.packages
|
||||||
|
- .fdo.container-build@ubuntu
|
||||||
|
stage: prep
|
||||||
|
variables:
|
||||||
|
GIT_STRATEGY: none
|
||||||
|
|
||||||
|
# Always rebuilds the container
|
||||||
|
ubuntu:19.10@container-forced-rebuild:
|
||||||
|
extends:
|
||||||
|
- ubuntu:19.10@container-prep
|
||||||
|
only:
|
||||||
|
- schedules
|
||||||
|
variables:
|
||||||
|
FDO_FORCE_REBUILD: 1
|
||||||
|
|
||||||
|
|
||||||
# Pulls in the container from upstream or rebuilds it if missing
|
# Pulls in the container from upstream or rebuilds it if missing
|
||||||
debian:stable@container-prep:
|
debian:stable@container-prep:
|
||||||
|
|
@ -239,6 +370,15 @@ debian:stable@container-prep:
|
||||||
variables:
|
variables:
|
||||||
GIT_STRATEGY: none
|
GIT_STRATEGY: none
|
||||||
|
|
||||||
|
# Always rebuilds the container
|
||||||
|
debian:stable@container-forced-rebuild:
|
||||||
|
extends:
|
||||||
|
- debian:stable@container-prep
|
||||||
|
only:
|
||||||
|
- schedules
|
||||||
|
variables:
|
||||||
|
FDO_FORCE_REBUILD: 1
|
||||||
|
|
||||||
|
|
||||||
# Pulls in the container from upstream or rebuilds it if missing
|
# Pulls in the container from upstream or rebuilds it if missing
|
||||||
debian:sid@container-prep:
|
debian:sid@container-prep:
|
||||||
|
|
@ -250,6 +390,55 @@ debian:sid@container-prep:
|
||||||
variables:
|
variables:
|
||||||
GIT_STRATEGY: none
|
GIT_STRATEGY: none
|
||||||
|
|
||||||
|
# Always rebuilds the container
|
||||||
|
debian:sid@container-forced-rebuild:
|
||||||
|
extends:
|
||||||
|
- debian:sid@container-prep
|
||||||
|
only:
|
||||||
|
- schedules
|
||||||
|
variables:
|
||||||
|
FDO_FORCE_REBUILD: 1
|
||||||
|
|
||||||
|
|
||||||
|
# Pulls in the container from upstream or rebuilds it if missing
|
||||||
|
centos:7@container-prep:
|
||||||
|
extends:
|
||||||
|
- .centos:7
|
||||||
|
- .centos.packages
|
||||||
|
- .fdo.container-build@centos
|
||||||
|
stage: prep
|
||||||
|
variables:
|
||||||
|
GIT_STRATEGY: none
|
||||||
|
|
||||||
|
# Always rebuilds the container
|
||||||
|
centos:7@container-forced-rebuild:
|
||||||
|
extends:
|
||||||
|
- centos:7@container-prep
|
||||||
|
only:
|
||||||
|
- schedules
|
||||||
|
variables:
|
||||||
|
FDO_FORCE_REBUILD: 1
|
||||||
|
|
||||||
|
|
||||||
|
# Pulls in the container from upstream or rebuilds it if missing
|
||||||
|
centos:8@container-prep:
|
||||||
|
extends:
|
||||||
|
- .centos:8
|
||||||
|
- .centos.packages
|
||||||
|
- .fdo.container-build@centos
|
||||||
|
stage: prep
|
||||||
|
variables:
|
||||||
|
GIT_STRATEGY: none
|
||||||
|
|
||||||
|
# Always rebuilds the container
|
||||||
|
centos:8@container-forced-rebuild:
|
||||||
|
extends:
|
||||||
|
- centos:8@container-prep
|
||||||
|
only:
|
||||||
|
- schedules
|
||||||
|
variables:
|
||||||
|
FDO_FORCE_REBUILD: 1
|
||||||
|
|
||||||
|
|
||||||
# Pulls in the container from upstream or rebuilds it if missing
|
# Pulls in the container from upstream or rebuilds it if missing
|
||||||
arch:rolling@container-prep:
|
arch:rolling@container-prep:
|
||||||
|
|
@ -261,6 +450,15 @@ arch:rolling@container-prep:
|
||||||
variables:
|
variables:
|
||||||
GIT_STRATEGY: none
|
GIT_STRATEGY: none
|
||||||
|
|
||||||
|
# Always rebuilds the container
|
||||||
|
arch:rolling@container-forced-rebuild:
|
||||||
|
extends:
|
||||||
|
- arch:rolling@container-prep
|
||||||
|
only:
|
||||||
|
- schedules
|
||||||
|
variables:
|
||||||
|
FDO_FORCE_REBUILD: 1
|
||||||
|
|
||||||
|
|
||||||
# Pulls in the container from upstream or rebuilds it if missing
|
# Pulls in the container from upstream or rebuilds it if missing
|
||||||
alpine:latest@container-prep:
|
alpine:latest@container-prep:
|
||||||
|
|
@ -272,6 +470,15 @@ alpine:latest@container-prep:
|
||||||
variables:
|
variables:
|
||||||
GIT_STRATEGY: none
|
GIT_STRATEGY: none
|
||||||
|
|
||||||
|
# Always rebuilds the container
|
||||||
|
alpine:latest@container-forced-rebuild:
|
||||||
|
extends:
|
||||||
|
- alpine:latest@container-prep
|
||||||
|
only:
|
||||||
|
- schedules
|
||||||
|
variables:
|
||||||
|
FDO_FORCE_REBUILD: 1
|
||||||
|
|
||||||
|
|
||||||
#################################################################
|
#################################################################
|
||||||
# #
|
# #
|
||||||
|
|
@ -285,9 +492,11 @@ alpine:latest@container-prep:
|
||||||
# the registry and will remove any that are not tagged with the provided
|
# the registry and will remove any that are not tagged with the provided
|
||||||
# $container_image:$tag
|
# $container_image:$tag
|
||||||
.container-clean:
|
.container-clean:
|
||||||
extends:
|
|
||||||
- .fdo.ci-fairy
|
|
||||||
stage: container_clean
|
stage: container_clean
|
||||||
|
image: golang:alpine
|
||||||
|
before_script:
|
||||||
|
- apk add python3 py-pip git
|
||||||
|
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||||
script:
|
script:
|
||||||
# Go to your Profile, Settings, Access Tokens
|
# Go to your Profile, Settings, Access Tokens
|
||||||
# Create a personal token with 'api' scope, copy the value.
|
# Create a personal token with 'api' scope, copy the value.
|
||||||
|
|
@ -302,26 +511,33 @@ alpine:latest@container-prep:
|
||||||
only:
|
only:
|
||||||
- schedules
|
- schedules
|
||||||
|
|
||||||
### fedora 40
|
### fedora 31
|
||||||
fedora:40@container-clean:
|
fedora:31@container-clean:
|
||||||
extends:
|
extends:
|
||||||
- .fedora:40
|
- .fedora:31
|
||||||
- .container-clean
|
- .container-clean
|
||||||
needs: ["fedora:40@container-prep"]
|
needs: ["fedora:31@container-prep"]
|
||||||
|
|
||||||
### fedora 41
|
### fedora 32
|
||||||
fedora:41@container-clean:
|
fedora:32@container-clean:
|
||||||
extends:
|
extends:
|
||||||
- .fedora:41
|
- .fedora:32
|
||||||
- .container-clean
|
- .container-clean
|
||||||
needs: ["fedora:41@container-prep"]
|
needs: ["fedora:32@container-prep"]
|
||||||
|
|
||||||
### ubuntu 24.10
|
### ubuntu 20.04
|
||||||
ubuntu:24.10@container-clean:
|
ubuntu:20.04@container-clean:
|
||||||
extends:
|
extends:
|
||||||
- .ubuntu:24.10
|
- .ubuntu:20.04
|
||||||
- .container-clean
|
- .container-clean
|
||||||
needs: ["ubuntu:24.10@container-prep"]
|
needs: ["ubuntu:20.04@container-prep"]
|
||||||
|
|
||||||
|
### ubuntu 19.10
|
||||||
|
ubuntu:19.10@container-clean:
|
||||||
|
extends:
|
||||||
|
- .ubuntu:19.10
|
||||||
|
- .container-clean
|
||||||
|
needs: ["ubuntu:19.10@container-prep"]
|
||||||
|
|
||||||
### debian stable
|
### debian stable
|
||||||
debian:stable@container-clean:
|
debian:stable@container-clean:
|
||||||
|
|
@ -337,6 +553,20 @@ debian:sid@container-clean:
|
||||||
- .container-clean
|
- .container-clean
|
||||||
needs: ["debian:sid@container-prep"]
|
needs: ["debian:sid@container-prep"]
|
||||||
|
|
||||||
|
### centos 7
|
||||||
|
centos:7@container-clean:
|
||||||
|
extends:
|
||||||
|
- .centos:7
|
||||||
|
- .container-clean
|
||||||
|
needs: ["centos:7@container-prep"]
|
||||||
|
|
||||||
|
### centos 8
|
||||||
|
centos:8@container-clean:
|
||||||
|
extends:
|
||||||
|
- .centos:8
|
||||||
|
- .container-clean
|
||||||
|
needs: ["centos:8@container-prep"]
|
||||||
|
|
||||||
### arch rolling
|
### arch rolling
|
||||||
arch:rolling@container-clean:
|
arch:rolling@container-clean:
|
||||||
extends:
|
extends:
|
||||||
|
|
@ -371,51 +601,68 @@ alpine:latest@container-clean:
|
||||||
- .meson_build
|
- .meson_build
|
||||||
stage: build
|
stage: build
|
||||||
dependencies: []
|
dependencies: []
|
||||||
|
variables:
|
||||||
|
NINJA_ARGS: "dist"
|
||||||
|
|
||||||
|
|
||||||
fedora:40@autotools-build:
|
fedora:31@autotools-build:
|
||||||
extends:
|
extends:
|
||||||
- .fedora:40
|
- .fedora:31
|
||||||
- .autotools-build@template
|
- .autotools-build@template
|
||||||
stage: autotools
|
stage: autotools
|
||||||
needs: ['fedora:40@container-prep']
|
needs: ['fedora:31@container-prep']
|
||||||
|
|
||||||
fedora:40@meson-build:
|
fedora:31@meson-build:
|
||||||
extends:
|
extends:
|
||||||
- .fedora:40
|
- .fedora:31
|
||||||
- .meson-build@template
|
- .meson-build@template
|
||||||
stage: meson
|
stage: meson
|
||||||
needs: ['fedora:40@container-prep']
|
needs: ['fedora:31@container-prep']
|
||||||
|
|
||||||
|
|
||||||
fedora:41@autotools-build:
|
fedora:32@autotools-build:
|
||||||
extends:
|
extends:
|
||||||
- .fedora:41
|
- .fedora:32
|
||||||
- .autotools-build@template
|
- .autotools-build@template
|
||||||
stage: autotools
|
stage: autotools
|
||||||
needs: ['fedora:41@container-prep']
|
needs: ['fedora:32@container-prep']
|
||||||
|
|
||||||
fedora:41@meson-build:
|
fedora:32@meson-build:
|
||||||
extends:
|
extends:
|
||||||
- .fedora:41
|
- .fedora:32
|
||||||
- .meson-build@template
|
- .meson-build@template
|
||||||
stage: meson
|
stage: meson
|
||||||
needs: ['fedora:41@container-prep']
|
needs: ['fedora:32@container-prep']
|
||||||
|
|
||||||
|
|
||||||
ubuntu:24.10@autotools-build:
|
ubuntu:20.04@autotools-build:
|
||||||
extends:
|
extends:
|
||||||
- .ubuntu:24.10
|
- .ubuntu:20.04
|
||||||
- .autotools-build@template
|
- .autotools-build@template
|
||||||
stage: autotools
|
stage: autotools
|
||||||
needs: ['ubuntu:24.10@container-prep']
|
needs: ['ubuntu:20.04@container-prep']
|
||||||
|
|
||||||
ubuntu:24.10@meson-build:
|
ubuntu:20.04@meson-build:
|
||||||
extends:
|
extends:
|
||||||
- .ubuntu:24.10
|
- .ubuntu:20.04
|
||||||
- .meson-build@template
|
- .meson-build@template
|
||||||
stage: meson
|
stage: meson
|
||||||
needs: ['ubuntu:24.10@container-prep']
|
needs: ['ubuntu:20.04@container-prep']
|
||||||
|
|
||||||
|
|
||||||
|
ubuntu:19.10@autotools-build:
|
||||||
|
extends:
|
||||||
|
- .ubuntu:19.10
|
||||||
|
- .autotools-build@template
|
||||||
|
stage: autotools
|
||||||
|
needs: ['ubuntu:19.10@container-prep']
|
||||||
|
|
||||||
|
ubuntu:19.10@meson-build:
|
||||||
|
extends:
|
||||||
|
- .ubuntu:19.10
|
||||||
|
- .meson-build@template
|
||||||
|
stage: meson
|
||||||
|
needs: ['ubuntu:19.10@container-prep']
|
||||||
|
|
||||||
|
|
||||||
debian:stable@autotools-build:
|
debian:stable@autotools-build:
|
||||||
|
|
@ -448,6 +695,28 @@ debian:sid@meson-build:
|
||||||
needs: ['debian:sid@container-prep']
|
needs: ['debian:sid@container-prep']
|
||||||
|
|
||||||
|
|
||||||
|
centos:7@autotools-build:
|
||||||
|
extends:
|
||||||
|
- .centos:7
|
||||||
|
- .autotools-build@template
|
||||||
|
stage: autotools
|
||||||
|
variables:
|
||||||
|
MAKE_ARGS: '' # disable distcheck, requires doxygen
|
||||||
|
needs: ['centos:7@container-prep']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
centos:8@autotools-build:
|
||||||
|
extends:
|
||||||
|
- .centos:8
|
||||||
|
- .autotools-build@template
|
||||||
|
stage: autotools
|
||||||
|
variables:
|
||||||
|
MAKE_ARGS: '' # disable distcheck, requires doxygen
|
||||||
|
needs: ['centos:8@container-prep']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
arch:rolling@autotools-build:
|
arch:rolling@autotools-build:
|
||||||
extends:
|
extends:
|
||||||
- .arch:rolling
|
- .arch:rolling
|
||||||
|
|
@ -484,10 +753,10 @@ alpine:latest@meson-build:
|
||||||
# because they're supposed to fail equally on all
|
# because they're supposed to fail equally on all
|
||||||
.fedora-custom-build@autotools-template:
|
.fedora-custom-build@autotools-template:
|
||||||
extends:
|
extends:
|
||||||
- .fedora:40
|
- .fedora:31
|
||||||
- .autotools-build@template
|
- .autotools-build@template
|
||||||
stage: build
|
stage: build
|
||||||
needs: ['fedora:40@container-prep']
|
needs: ['fedora:31@container-prep']
|
||||||
|
|
||||||
no-valgrind:autotools:
|
no-valgrind:autotools:
|
||||||
extends: .fedora-custom-build@autotools-template
|
extends: .fedora-custom-build@autotools-template
|
||||||
|
|
@ -526,10 +795,10 @@ enable-gcov:autotools:
|
||||||
|
|
||||||
.fedora-custom-build@meson-template:
|
.fedora-custom-build@meson-template:
|
||||||
extends:
|
extends:
|
||||||
- .fedora:40
|
- .fedora:31
|
||||||
- .meson-build@template
|
- .meson-build@template
|
||||||
stage: build
|
stage: build
|
||||||
needs: ['fedora:40@container-prep']
|
needs: ['fedora:31@container-prep']
|
||||||
|
|
||||||
no-valgrind:meson:
|
no-valgrind:meson:
|
||||||
extends: .fedora-custom-build@meson-template
|
extends: .fedora-custom-build@meson-template
|
||||||
|
|
@ -542,6 +811,7 @@ no-check:meson:
|
||||||
- dnf remove -y check check-devel
|
- dnf remove -y check check-devel
|
||||||
variables:
|
variables:
|
||||||
MESON_ARGS: -Dtests=disabled
|
MESON_ARGS: -Dtests=disabled
|
||||||
|
SKIP_MESON_TEST: 1
|
||||||
|
|
||||||
# doxygen is required for dist
|
# doxygen is required for dist
|
||||||
no-doxygen:meson:
|
no-doxygen:meson:
|
||||||
|
|
@ -560,6 +830,7 @@ no-doxygen-check-valgrind:meson:
|
||||||
variables:
|
variables:
|
||||||
MESON_ARGS: -Dtests=disabled -Ddocumentation=disabled
|
MESON_ARGS: -Dtests=disabled -Ddocumentation=disabled
|
||||||
NINJA_ARGS: ''
|
NINJA_ARGS: ''
|
||||||
|
SKIP_MESON_TEST: 1
|
||||||
|
|
||||||
enable-gcov:meson:
|
enable-gcov:meson:
|
||||||
extends: .fedora-custom-build@meson-template
|
extends: .fedora-custom-build@meson-template
|
||||||
|
|
@ -570,6 +841,7 @@ scan-build:meson:
|
||||||
extends: .fedora-custom-build@meson-template
|
extends: .fedora-custom-build@meson-template
|
||||||
variables:
|
variables:
|
||||||
NINJA_ARGS: 'scan-build'
|
NINJA_ARGS: 'scan-build'
|
||||||
|
SKIP_MESON_TEST: 1
|
||||||
|
|
||||||
static-build:meson:
|
static-build:meson:
|
||||||
extends: .fedora-custom-build@meson-template
|
extends: .fedora-custom-build@meson-template
|
||||||
|
|
@ -580,7 +852,7 @@ static-build:meson:
|
||||||
|
|
||||||
soname:
|
soname:
|
||||||
extends:
|
extends:
|
||||||
- .fedora:40
|
- .fedora:31
|
||||||
stage: build
|
stage: build
|
||||||
script:
|
script:
|
||||||
- ./autogen.sh --prefix=$PWD/prefix-autotools/
|
- ./autogen.sh --prefix=$PWD/prefix-autotools/
|
||||||
|
|
@ -589,7 +861,7 @@ soname:
|
||||||
- meson "$MESON_BUILDDIR" --prefix=$PWD/prefix-meson/
|
- meson "$MESON_BUILDDIR" --prefix=$PWD/prefix-meson/
|
||||||
- ninja -C "$MESON_BUILDDIR" install
|
- ninja -C "$MESON_BUILDDIR" install
|
||||||
- ls -l $PWD/prefix-meson/lib64/libevdev.so.2.3.0
|
- ls -l $PWD/prefix-meson/lib64/libevdev.so.2.3.0
|
||||||
needs: ['fedora:40@container-prep']
|
needs: ['fedora:31@container-prep']
|
||||||
|
|
||||||
#################################################################
|
#################################################################
|
||||||
# #
|
# #
|
||||||
|
|
@ -599,54 +871,74 @@ soname:
|
||||||
|
|
||||||
.check_tainted: &check_tainted |
|
.check_tainted: &check_tainted |
|
||||||
# make sure the kernel is not tainted
|
# make sure the kernel is not tainted
|
||||||
if [[ "$(/app/vmctl exec cat /proc/sys/kernel/tainted)" -gt 0 ]];
|
if [[ "$(ssh localhost -p 5555 cat /proc/sys/kernel/tainted)" -gt 0 ]];
|
||||||
then
|
then
|
||||||
echo tainted kernel ;
|
echo tainted kernel ;
|
||||||
exit 1 ;
|
exit 1 ;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# build on the host, then run a systemd service to execute the test suite
|
.qemu@fedora:32:
|
||||||
# inside the qemu VM handled by b2c
|
|
||||||
.build-in-b2c@template:
|
|
||||||
extends:
|
extends:
|
||||||
- .default_artifacts
|
- .fedora:32
|
||||||
|
stage: VM
|
||||||
|
image: $CI_REGISTRY_IMAGE/$FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION:qemu-$FDO_DISTRIBUTION_TAG
|
||||||
tags:
|
tags:
|
||||||
- kvm
|
- kvm
|
||||||
variables:
|
variables:
|
||||||
MESON_BUILDDIR: build_dir
|
MESON_BUILDDIR: build_dir
|
||||||
B2C_KERNEL: https://gitlab.freedesktop.org/api/v4/projects/libevdev%2Fhid-tools/packages/generic/kernel-x86_64/v6.5/bzImage
|
|
||||||
B2C_IMAGE: $FDO_DISTRIBUTION_IMAGE
|
|
||||||
B2C_COMMAND: .gitlab-ci/start-in-systemd.sh
|
|
||||||
script:
|
script:
|
||||||
# first build in the host container
|
# start our vm, no args required
|
||||||
- .gitlab-ci/meson-build.sh --skip-test
|
- /app/start_vm.sh
|
||||||
|
|
||||||
# pull b2c
|
- *check_tainted
|
||||||
- curl -L -o /app/boot2container https://gitlab.freedesktop.org/gfx-ci/boot2container/-/raw/2ff65156ba67fa8a0c309a4fc16c5df1a88a3844/vm2c.py
|
|
||||||
- chmod +x /app/boot2container
|
|
||||||
|
|
||||||
# runs the test suite only
|
- "scp -P 5555 -r $PWD localhost:"
|
||||||
- /app/boot2container
|
- echo "CI_JOB_ID=\"$CI_JOB_ID\"" > sshenv
|
||||||
|
- echo "CI_JOB_NAME=\"$CI_JOB_NAME\"" >> sshenv
|
||||||
|
- echo "MESON_BUILDDIR=\"$MESON_BUILDDIR\"" >> sshenv
|
||||||
|
- echo "MESON_TEST_ARGS=\"$MESON_TEST_ARGS\"" >> sshenv
|
||||||
|
- echo "NINJA_ARGS=\"$NINJA_ARGS\"" >> sshenv
|
||||||
|
- "scp -P 5555 sshenv localhost:~/$CI_PROJECT_NAME/.meson_environment"
|
||||||
|
- ssh localhost -p 5555 "cd $CI_PROJECT_NAME ; .gitlab-ci/meson-build.sh" && touch .success || true
|
||||||
|
# no matter the results of the tests, we want to fetch the logs
|
||||||
|
- scp -P 5555 -r localhost:$CI_PROJECT_NAME/"$MESON_BUILDDIR" .
|
||||||
|
|
||||||
|
- *check_tainted
|
||||||
|
|
||||||
|
- ssh localhost -p 5555 halt || true
|
||||||
|
- sleep 2
|
||||||
|
- pkill qemu || true
|
||||||
|
|
||||||
|
- if [[ ! -e .success ]] ;
|
||||||
|
then
|
||||||
|
exit 1 ;
|
||||||
|
fi
|
||||||
|
artifacts:
|
||||||
|
name: "qemu-meson-logs-$CI_JOB_NAME"
|
||||||
|
when: always
|
||||||
|
expire_in: 1 week
|
||||||
|
paths:
|
||||||
|
- $MESON_BUILDDIR/meson-logs
|
||||||
|
- console.out
|
||||||
|
reports:
|
||||||
|
junit: $MESON_BUILDDIR/junit-*.xml
|
||||||
|
|
||||||
|
retry:
|
||||||
|
max: 2
|
||||||
|
when: script_failure
|
||||||
|
needs: ['fedora:32@qemu-prep']
|
||||||
|
|
||||||
qemu:meson:
|
qemu:meson:
|
||||||
stage: VM
|
extends: .qemu@fedora:32
|
||||||
extends:
|
|
||||||
- .fdo.distribution-image@fedora
|
|
||||||
- .fedora:41
|
|
||||||
- .build-in-b2c@template
|
|
||||||
needs:
|
|
||||||
- "fedora:41@container-prep"
|
|
||||||
|
|
||||||
qemu:meson:valgrind:
|
qemu:meson:valgrind:
|
||||||
extends:
|
extends: .qemu@fedora:32
|
||||||
- qemu:meson
|
|
||||||
variables:
|
variables:
|
||||||
MESON_TEST_ARGS: '--setup=valgrind'
|
MESON_TEST_ARGS: '--setup=valgrind'
|
||||||
|
|
||||||
|
|
||||||
meson-from-tarball:
|
meson-from-tarball:
|
||||||
extends:
|
extends:
|
||||||
- .fedora:41
|
- .fedora:32
|
||||||
stage: tarballs
|
stage: tarballs
|
||||||
script:
|
script:
|
||||||
- export INSTALLDIR="$PWD/_inst"
|
- export INSTALLDIR="$PWD/_inst"
|
||||||
|
|
@ -654,26 +946,26 @@ meson-from-tarball:
|
||||||
- pushd _build > /dev/null
|
- pushd _build > /dev/null
|
||||||
- ../autogen.sh --disable-silent-rules $CONFIGURE_FLAGS
|
- ../autogen.sh --disable-silent-rules $CONFIGURE_FLAGS
|
||||||
- make
|
- make
|
||||||
- make dist
|
- make distcheck
|
||||||
- popd > /dev/null
|
- popd > /dev/null
|
||||||
- mkdir -p _tarball_dir
|
- mkdir -p _tarball_dir
|
||||||
- tar xf _build/libevdev-*.tar.xz -C _tarball_dir
|
- tar xf _build/libevdev-*.tar.xz -C _tarball_dir
|
||||||
- pushd _tarball_dir/libevdev-*/ > /dev/null
|
- pushd _tarball_dir/libevdev-*/ > /dev/null
|
||||||
- meson "$MESON_BUILDDIR" --prefix="$INSTALLDIR"
|
- meson "$MESON_BUILDDIR" --prefix="$INSTALLDIR"
|
||||||
- meson test -C "$MESON_BUILDDIR" --no-suite="needs-uinput"
|
- ninja -C "$MESON_BUILDDIR" test
|
||||||
- ninja -C "$MESON_BUILDDIR" install
|
- ninja -C "$MESON_BUILDDIR" install
|
||||||
- popd > /dev/null
|
- popd > /dev/null
|
||||||
- ls -lR $INSTALLDIR
|
- ls -lR $INSTALLDIR
|
||||||
needs: ['fedora:41@container-prep']
|
needs: ['fedora:32@container-prep']
|
||||||
|
|
||||||
autotools-from-tarball:
|
autotools-from-tarball:
|
||||||
extends:
|
extends:
|
||||||
- .fedora:41
|
- .fedora:32
|
||||||
stage: tarballs
|
stage: tarballs
|
||||||
script:
|
script:
|
||||||
- export INSTALLDIR="$PWD/_inst"
|
- export INSTALLDIR="$PWD/_inst"
|
||||||
- meson "$MESON_BUILDDIR"
|
- meson "$MESON_BUILDDIR"
|
||||||
- meson dist -C "$MESON_BUILDDIR" --no-tests
|
- ninja -C "$MESON_BUILDDIR" dist
|
||||||
- mkdir -p _tarball_dir
|
- mkdir -p _tarball_dir
|
||||||
- tar xf "$MESON_BUILDDIR"/meson-dist/libevdev-*.xz -C _tarball_dir
|
- tar xf "$MESON_BUILDDIR"/meson-dist/libevdev-*.xz -C _tarball_dir
|
||||||
- pushd _tarball_dir/libevdev-*/ > /dev/null
|
- pushd _tarball_dir/libevdev-*/ > /dev/null
|
||||||
|
|
@ -686,7 +978,4 @@ autotools-from-tarball:
|
||||||
- popd > /dev/null
|
- popd > /dev/null
|
||||||
- popd > /dev/null
|
- popd > /dev/null
|
||||||
- ls -lR $INSTALLDIR
|
- ls -lR $INSTALLDIR
|
||||||
variables:
|
needs: ['fedora:32@container-prep']
|
||||||
LIBEVDEV_SKIP_ROOT_TESTS: 1
|
|
||||||
|
|
||||||
needs: ['fedora:41@container-prep']
|
|
||||||
|
|
@ -6,16 +6,15 @@
|
||||||
# #
|
# #
|
||||||
########################################
|
########################################
|
||||||
|
|
||||||
.templates_sha: &template_sha e195d80f35b45cc73668be3767b923fd76c70ed5 # see https://docs.gitlab.com/ee/ci/yaml/#includefile
|
.templates_sha: &template_sha ca99d9418390fb5faaa7f2407b94c733d7ec6a37 # see https://docs.gitlab.com/ee/ci/yaml/#includefile
|
||||||
|
|
||||||
include:
|
include:
|
||||||
|
{% for distribution in distributions|map(attribute='name')|unique()|sort() %}
|
||||||
|
# {{ distribution.capitalize() }} container builder template
|
||||||
- project: 'freedesktop/ci-templates'
|
- project: 'freedesktop/ci-templates'
|
||||||
ref: *template_sha
|
ref: *template_sha
|
||||||
file:
|
file: '/templates/{{distribution}}.yml'
|
||||||
{% for distribution in distributions|map(attribute='name')|unique()|sort() %}
|
|
||||||
- '/templates/{{distribution}}.yml'
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
- '/templates/ci-fairy.yml'
|
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- prep # rebuild the container images if there is a change
|
- prep # rebuild the container images if there is a change
|
||||||
|
|
@ -27,16 +26,10 @@ stages:
|
||||||
- container_clean # clean up unused container images
|
- container_clean # clean up unused container images
|
||||||
- merge-check # check for a merge request
|
- merge-check # check for a merge request
|
||||||
|
|
||||||
workflow:
|
|
||||||
rules:
|
|
||||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
||||||
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
|
|
||||||
when: never
|
|
||||||
- if: $CI_COMMIT_BRANCH
|
|
||||||
|
|
||||||
variables:
|
variables:
|
||||||
# The upstrem repository we will check for images
|
# The upstrem repository we will check for images
|
||||||
FDO_UPSTREAM_REPO: libevdev/libevdev
|
FDO_UPSTREAM_REPO: libevdev/libevdev
|
||||||
|
LIBEVDEV_SKIP_ROOT_TESTS: 1
|
||||||
GIT_DEPTH: 1
|
GIT_DEPTH: 1
|
||||||
MESON_BUILDDIR: 'build dir'
|
MESON_BUILDDIR: 'build dir'
|
||||||
|
|
||||||
|
|
@ -46,9 +39,9 @@ variables:
|
||||||
- _build/test/test-suite.log
|
- _build/test/test-suite.log
|
||||||
- $MESON_BUILDDIR/meson-logs/
|
- $MESON_BUILDDIR/meson-logs/
|
||||||
expire_in: 1 week
|
expire_in: 1 week
|
||||||
when: always
|
when: on_failure
|
||||||
reports:
|
reports:
|
||||||
junit: $MESON_BUILDDIR/*junit*.xml
|
junit: $MESON_BUILDDIR/junit-*.xml
|
||||||
|
|
||||||
.autotools_build:
|
.autotools_build:
|
||||||
extends:
|
extends:
|
||||||
|
|
@ -61,16 +54,12 @@ variables:
|
||||||
- make check
|
- make check
|
||||||
- if ! [[ -z "$MAKE_ARGS" ]]; then make $MAKE_ARGS; fi
|
- if ! [[ -z "$MAKE_ARGS" ]]; then make $MAKE_ARGS; fi
|
||||||
- popd > /dev/null
|
- popd > /dev/null
|
||||||
variables:
|
|
||||||
LIBEVDEV_SKIP_ROOT_TESTS: 1
|
|
||||||
|
|
||||||
.meson_build:
|
.meson_build:
|
||||||
extends:
|
extends:
|
||||||
- .default_artifacts
|
- .default_artifacts
|
||||||
script:
|
script:
|
||||||
- .gitlab-ci/meson-build.sh --run-test
|
- .gitlab-ci/meson-build.sh
|
||||||
variables:
|
|
||||||
MESON_TEST_ARGS: '--no-suite=needs-uinput'
|
|
||||||
|
|
||||||
{# Generate templates for every distribution/version combination we want, any
|
{# Generate templates for every distribution/version combination we want, any
|
||||||
job can then just extends: .name:version and the images will sort
|
job can then just extends: .name:version and the images will sort
|
||||||
|
|
@ -98,11 +87,14 @@ variables:
|
||||||
# $SRCDIR/.gitlab-ci/generate-gitlab-ci.py
|
# $SRCDIR/.gitlab-ci/generate-gitlab-ci.py
|
||||||
#
|
#
|
||||||
check-ci-script:
|
check-ci-script:
|
||||||
extends:
|
image: golang:alpine
|
||||||
- .fdo.ci-fairy
|
|
||||||
stage: prep
|
stage: prep
|
||||||
|
before_script:
|
||||||
|
- apk add python3 py-pip git
|
||||||
|
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||||
script:
|
script:
|
||||||
- ci-fairy generate-template --verify && exit 0 || true
|
- ci-fairy generate-template
|
||||||
|
- git diff --exit-code && exit 0 || true
|
||||||
- echo "Committed gitlab-ci.yml differs from generated gitlab-ci.yml. Please verify"
|
- echo "Committed gitlab-ci.yml differs from generated gitlab-ci.yml. Please verify"
|
||||||
- exit 1
|
- exit 1
|
||||||
|
|
||||||
|
|
@ -111,13 +103,13 @@ check-ci-script:
|
||||||
#
|
#
|
||||||
|
|
||||||
check-commit:
|
check-commit:
|
||||||
extends:
|
image: golang:alpine
|
||||||
- .fdo.ci-fairy
|
|
||||||
stage: prep
|
stage: prep
|
||||||
|
before_script:
|
||||||
|
- apk add python3 py-pip git
|
||||||
|
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||||
script:
|
script:
|
||||||
- ci-fairy -vv check-commits --junit-xml=results.xml && exit 0 || true
|
- ci-fairy check-commits --signed-off-by --junit-xml=results.xml
|
||||||
- echo "Error checking the commit message format. Please verify"
|
|
||||||
- exit 1
|
|
||||||
except:
|
except:
|
||||||
- master@libevdev/libevdev
|
- master@libevdev/libevdev
|
||||||
variables:
|
variables:
|
||||||
|
|
@ -131,9 +123,11 @@ check-commit:
|
||||||
#
|
#
|
||||||
|
|
||||||
check-merge-request:
|
check-merge-request:
|
||||||
extends:
|
image: golang:alpine
|
||||||
- .fdo.ci-fairy
|
|
||||||
stage: merge-check
|
stage: merge-check
|
||||||
|
before_script:
|
||||||
|
- apk add python3 py-pip git
|
||||||
|
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||||
script:
|
script:
|
||||||
- ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml
|
- ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml
|
||||||
artifacts:
|
artifacts:
|
||||||
|
|
@ -141,8 +135,6 @@ check-merge-request:
|
||||||
reports:
|
reports:
|
||||||
junit: results.xml
|
junit: results.xml
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
rules:
|
|
||||||
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
|
|
||||||
|
|
||||||
|
|
||||||
{% for distro in distributions %}
|
{% for distro in distributions %}
|
||||||
|
|
@ -152,6 +144,43 @@ check-merge-request:
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for distro in distributions %}
|
||||||
|
{% if distro.want_qemu %}
|
||||||
|
{% for version in distro.versions %}
|
||||||
|
# Pulls in the qemu container from upstream or rebuilds it if missing
|
||||||
|
.{{ distro.name }}:{{ version }}@qemu-prep:
|
||||||
|
extends:
|
||||||
|
- .{{ distro.name }}:{{ version }}
|
||||||
|
- .{{ distro.name}}.packages
|
||||||
|
- .fdo.qemu-build@fedora
|
||||||
|
stage: prep
|
||||||
|
tags:
|
||||||
|
- kvm
|
||||||
|
variables:
|
||||||
|
GIT_STRATEGY: none
|
||||||
|
FDO_DISTRIBUTION_TAG: qemu-{{ distro.tag }}
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
|
# Always rebuilds the container
|
||||||
|
.{{ distro.name }}:{{ version }}@qemu-forced-rebuild:
|
||||||
|
extends:
|
||||||
|
- .{{ distro.name }}:{{ version }}@qemu-prep
|
||||||
|
variables:
|
||||||
|
FDO_FORCE_REBUILD: 1
|
||||||
|
only:
|
||||||
|
- schedules
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
# This is the actual job
|
||||||
|
fedora:32@qemu-prep:
|
||||||
|
extends: .fedora:32@qemu-prep
|
||||||
|
|
||||||
|
fedora:32@qemu-forced-rebuild:
|
||||||
|
extends: .fedora:32@qemu-forced-rebuild
|
||||||
|
|
||||||
{% for distro in distributions %}
|
{% for distro in distributions %}
|
||||||
{% for version in distro.versions %}
|
{% for version in distro.versions %}
|
||||||
|
|
||||||
|
|
@ -165,6 +194,15 @@ check-merge-request:
|
||||||
variables:
|
variables:
|
||||||
GIT_STRATEGY: none
|
GIT_STRATEGY: none
|
||||||
|
|
||||||
|
# Always rebuilds the container
|
||||||
|
{{ distro.name }}:{{ version }}@container-forced-rebuild:
|
||||||
|
extends:
|
||||||
|
- {{ distro.name }}:{{ version }}@container-prep
|
||||||
|
only:
|
||||||
|
- schedules
|
||||||
|
variables:
|
||||||
|
FDO_FORCE_REBUILD: 1
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
|
@ -180,9 +218,11 @@ check-merge-request:
|
||||||
# the registry and will remove any that are not tagged with the provided
|
# the registry and will remove any that are not tagged with the provided
|
||||||
# $container_image:$tag
|
# $container_image:$tag
|
||||||
.container-clean:
|
.container-clean:
|
||||||
extends:
|
|
||||||
- .fdo.ci-fairy
|
|
||||||
stage: container_clean
|
stage: container_clean
|
||||||
|
image: golang:alpine
|
||||||
|
before_script:
|
||||||
|
- apk add python3 py-pip git
|
||||||
|
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||||
script:
|
script:
|
||||||
# Go to your Profile, Settings, Access Tokens
|
# Go to your Profile, Settings, Access Tokens
|
||||||
# Create a personal token with 'api' scope, copy the value.
|
# Create a personal token with 'api' scope, copy the value.
|
||||||
|
|
@ -228,6 +268,8 @@ check-merge-request:
|
||||||
- .meson_build
|
- .meson_build
|
||||||
stage: build
|
stage: build
|
||||||
dependencies: []
|
dependencies: []
|
||||||
|
variables:
|
||||||
|
NINJA_ARGS: "dist"
|
||||||
|
|
||||||
{% for distro in distributions %}
|
{% for distro in distributions %}
|
||||||
{% for version in distro.versions %}
|
{% for version in distro.versions %}
|
||||||
|
|
@ -269,13 +311,12 @@ check-merge-request:
|
||||||
#
|
#
|
||||||
# We only run the build option combinations on one image
|
# We only run the build option combinations on one image
|
||||||
# because they're supposed to fail equally on all
|
# because they're supposed to fail equally on all
|
||||||
{% set custom_build_distro = distributions|selectattr("name", "equalto", "fedora")|first() %}
|
|
||||||
.fedora-custom-build@autotools-template:
|
.fedora-custom-build@autotools-template:
|
||||||
extends:
|
extends:
|
||||||
- .{{custom_build_distro.name}}:{{custom_build_distro.versions|first()}}
|
- .fedora:31
|
||||||
- .autotools-build@template
|
- .autotools-build@template
|
||||||
stage: build
|
stage: build
|
||||||
needs: ['{{custom_build_distro.name}}:{{custom_build_distro.versions|first()}}@container-prep']
|
needs: ['fedora:31@container-prep']
|
||||||
|
|
||||||
no-valgrind:autotools:
|
no-valgrind:autotools:
|
||||||
extends: .fedora-custom-build@autotools-template
|
extends: .fedora-custom-build@autotools-template
|
||||||
|
|
@ -314,10 +355,10 @@ enable-gcov:autotools:
|
||||||
|
|
||||||
.fedora-custom-build@meson-template:
|
.fedora-custom-build@meson-template:
|
||||||
extends:
|
extends:
|
||||||
- .{{custom_build_distro.name}}:{{custom_build_distro.versions|first()}}
|
- .fedora:31
|
||||||
- .meson-build@template
|
- .meson-build@template
|
||||||
stage: build
|
stage: build
|
||||||
needs: ['{{custom_build_distro.name}}:{{custom_build_distro.versions|first()}}@container-prep']
|
needs: ['fedora:31@container-prep']
|
||||||
|
|
||||||
no-valgrind:meson:
|
no-valgrind:meson:
|
||||||
extends: .fedora-custom-build@meson-template
|
extends: .fedora-custom-build@meson-template
|
||||||
|
|
@ -330,6 +371,7 @@ no-check:meson:
|
||||||
- dnf remove -y check check-devel
|
- dnf remove -y check check-devel
|
||||||
variables:
|
variables:
|
||||||
MESON_ARGS: -Dtests=disabled
|
MESON_ARGS: -Dtests=disabled
|
||||||
|
SKIP_MESON_TEST: 1
|
||||||
|
|
||||||
# doxygen is required for dist
|
# doxygen is required for dist
|
||||||
no-doxygen:meson:
|
no-doxygen:meson:
|
||||||
|
|
@ -348,6 +390,7 @@ no-doxygen-check-valgrind:meson:
|
||||||
variables:
|
variables:
|
||||||
MESON_ARGS: -Dtests=disabled -Ddocumentation=disabled
|
MESON_ARGS: -Dtests=disabled -Ddocumentation=disabled
|
||||||
NINJA_ARGS: ''
|
NINJA_ARGS: ''
|
||||||
|
SKIP_MESON_TEST: 1
|
||||||
|
|
||||||
enable-gcov:meson:
|
enable-gcov:meson:
|
||||||
extends: .fedora-custom-build@meson-template
|
extends: .fedora-custom-build@meson-template
|
||||||
|
|
@ -358,6 +401,7 @@ scan-build:meson:
|
||||||
extends: .fedora-custom-build@meson-template
|
extends: .fedora-custom-build@meson-template
|
||||||
variables:
|
variables:
|
||||||
NINJA_ARGS: 'scan-build'
|
NINJA_ARGS: 'scan-build'
|
||||||
|
SKIP_MESON_TEST: 1
|
||||||
|
|
||||||
static-build:meson:
|
static-build:meson:
|
||||||
extends: .fedora-custom-build@meson-template
|
extends: .fedora-custom-build@meson-template
|
||||||
|
|
@ -368,7 +412,7 @@ static-build:meson:
|
||||||
|
|
||||||
soname:
|
soname:
|
||||||
extends:
|
extends:
|
||||||
- .{{custom_build_distro.name}}:{{custom_build_distro.versions|first()}}
|
- .fedora:31
|
||||||
stage: build
|
stage: build
|
||||||
script:
|
script:
|
||||||
- ./autogen.sh --prefix=$PWD/prefix-autotools/
|
- ./autogen.sh --prefix=$PWD/prefix-autotools/
|
||||||
|
|
@ -377,7 +421,7 @@ soname:
|
||||||
- meson "$MESON_BUILDDIR" --prefix=$PWD/prefix-meson/
|
- meson "$MESON_BUILDDIR" --prefix=$PWD/prefix-meson/
|
||||||
- ninja -C "$MESON_BUILDDIR" install
|
- ninja -C "$MESON_BUILDDIR" install
|
||||||
- ls -l $PWD/prefix-meson/lib64/libevdev.so.2.3.0
|
- ls -l $PWD/prefix-meson/lib64/libevdev.so.2.3.0
|
||||||
needs: ['{{custom_build_distro.name}}:{{custom_build_distro.versions|first()}}@container-prep']
|
needs: ['fedora:31@container-prep']
|
||||||
|
|
||||||
#################################################################
|
#################################################################
|
||||||
# #
|
# #
|
||||||
|
|
@ -387,59 +431,74 @@ soname:
|
||||||
|
|
||||||
.check_tainted: &check_tainted |
|
.check_tainted: &check_tainted |
|
||||||
# make sure the kernel is not tainted
|
# make sure the kernel is not tainted
|
||||||
if [[ "$(/app/vmctl exec cat /proc/sys/kernel/tainted)" -gt 0 ]];
|
if [[ "$(ssh localhost -p 5555 cat /proc/sys/kernel/tainted)" -gt 0 ]];
|
||||||
then
|
then
|
||||||
echo tainted kernel ;
|
echo tainted kernel ;
|
||||||
exit 1 ;
|
exit 1 ;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# build on the host, then run a systemd service to execute the test suite
|
.qemu@fedora:32:
|
||||||
# inside the qemu VM handled by b2c
|
|
||||||
.build-in-b2c@template:
|
|
||||||
extends:
|
extends:
|
||||||
- .default_artifacts
|
- .fedora:32
|
||||||
|
stage: VM
|
||||||
|
image: $CI_REGISTRY_IMAGE/$FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION:qemu-$FDO_DISTRIBUTION_TAG
|
||||||
tags:
|
tags:
|
||||||
- kvm
|
- kvm
|
||||||
variables:
|
variables:
|
||||||
MESON_BUILDDIR: build_dir
|
MESON_BUILDDIR: build_dir
|
||||||
B2C_KERNEL: {{ b2c.kernel }}
|
|
||||||
B2C_IMAGE: $FDO_DISTRIBUTION_IMAGE
|
|
||||||
B2C_COMMAND: .gitlab-ci/start-in-systemd.sh
|
|
||||||
script:
|
script:
|
||||||
# first build in the host container
|
# start our vm, no args required
|
||||||
- .gitlab-ci/meson-build.sh --skip-test
|
- /app/start_vm.sh
|
||||||
|
|
||||||
# pull b2c
|
- *check_tainted
|
||||||
- curl -L -o /app/boot2container https://gitlab.freedesktop.org/gfx-ci/boot2container/-/raw/{{b2c.version}}/vm2c.py
|
|
||||||
- chmod +x /app/boot2container
|
|
||||||
|
|
||||||
# runs the test suite only
|
- "scp -P 5555 -r $PWD localhost:"
|
||||||
- /app/boot2container
|
- echo "CI_JOB_ID=\"$CI_JOB_ID\"" > sshenv
|
||||||
|
- echo "CI_JOB_NAME=\"$CI_JOB_NAME\"" >> sshenv
|
||||||
|
- echo "MESON_BUILDDIR=\"$MESON_BUILDDIR\"" >> sshenv
|
||||||
|
- echo "MESON_TEST_ARGS=\"$MESON_TEST_ARGS\"" >> sshenv
|
||||||
|
- echo "NINJA_ARGS=\"$NINJA_ARGS\"" >> sshenv
|
||||||
|
- "scp -P 5555 sshenv localhost:~/$CI_PROJECT_NAME/.meson_environment"
|
||||||
|
- ssh localhost -p 5555 "cd $CI_PROJECT_NAME ; .gitlab-ci/meson-build.sh" && touch .success || true
|
||||||
|
# no matter the results of the tests, we want to fetch the logs
|
||||||
|
- scp -P 5555 -r localhost:$CI_PROJECT_NAME/"$MESON_BUILDDIR" .
|
||||||
|
|
||||||
|
- *check_tainted
|
||||||
|
|
||||||
|
- ssh localhost -p 5555 halt || true
|
||||||
|
- sleep 2
|
||||||
|
- pkill qemu || true
|
||||||
|
|
||||||
|
- if [[ ! -e .success ]] ;
|
||||||
|
then
|
||||||
|
exit 1 ;
|
||||||
|
fi
|
||||||
|
artifacts:
|
||||||
|
name: "qemu-meson-logs-$CI_JOB_NAME"
|
||||||
|
when: always
|
||||||
|
expire_in: 1 week
|
||||||
|
paths:
|
||||||
|
- $MESON_BUILDDIR/meson-logs
|
||||||
|
- console.out
|
||||||
|
reports:
|
||||||
|
junit: $MESON_BUILDDIR/junit-*.xml
|
||||||
|
|
||||||
|
retry:
|
||||||
|
max: 2
|
||||||
|
when: script_failure
|
||||||
|
needs: ['fedora:32@qemu-prep']
|
||||||
|
|
||||||
{% for distro in distributions if distro.use_for_qemu_tests %}
|
|
||||||
{% set version = "{}".format(distro.versions|last()) %}
|
|
||||||
qemu:meson:
|
qemu:meson:
|
||||||
stage: VM
|
extends: .qemu@fedora:32
|
||||||
extends:
|
|
||||||
- .fdo.distribution-image@{{distro.name}}
|
|
||||||
- .{{distro.name}}:{{version}}
|
|
||||||
- .build-in-b2c@template
|
|
||||||
needs:
|
|
||||||
- "{{distro.name}}:{{version}}@container-prep"
|
|
||||||
|
|
||||||
qemu:meson:valgrind:
|
qemu:meson:valgrind:
|
||||||
extends:
|
extends: .qemu@fedora:32
|
||||||
- qemu:meson
|
|
||||||
variables:
|
variables:
|
||||||
MESON_TEST_ARGS: '--setup=valgrind'
|
MESON_TEST_ARGS: '--setup=valgrind'
|
||||||
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% for distro in distributions if distro.use_for_tarball_tests %}
|
|
||||||
{% set version = "{}".format(distro.versions|last()) %}
|
|
||||||
meson-from-tarball:
|
meson-from-tarball:
|
||||||
extends:
|
extends:
|
||||||
- .{{distro.name}}:{{version}}
|
- .fedora:32
|
||||||
stage: tarballs
|
stage: tarballs
|
||||||
script:
|
script:
|
||||||
- export INSTALLDIR="$PWD/_inst"
|
- export INSTALLDIR="$PWD/_inst"
|
||||||
|
|
@ -447,26 +506,26 @@ meson-from-tarball:
|
||||||
- pushd _build > /dev/null
|
- pushd _build > /dev/null
|
||||||
- ../autogen.sh --disable-silent-rules $CONFIGURE_FLAGS
|
- ../autogen.sh --disable-silent-rules $CONFIGURE_FLAGS
|
||||||
- make
|
- make
|
||||||
- make dist
|
- make distcheck
|
||||||
- popd > /dev/null
|
- popd > /dev/null
|
||||||
- mkdir -p _tarball_dir
|
- mkdir -p _tarball_dir
|
||||||
- tar xf _build/libevdev-*.tar.xz -C _tarball_dir
|
- tar xf _build/libevdev-*.tar.xz -C _tarball_dir
|
||||||
- pushd _tarball_dir/libevdev-*/ > /dev/null
|
- pushd _tarball_dir/libevdev-*/ > /dev/null
|
||||||
- meson "$MESON_BUILDDIR" --prefix="$INSTALLDIR"
|
- meson "$MESON_BUILDDIR" --prefix="$INSTALLDIR"
|
||||||
- meson test -C "$MESON_BUILDDIR" --no-suite="needs-uinput"
|
- ninja -C "$MESON_BUILDDIR" test
|
||||||
- ninja -C "$MESON_BUILDDIR" install
|
- ninja -C "$MESON_BUILDDIR" install
|
||||||
- popd > /dev/null
|
- popd > /dev/null
|
||||||
- ls -lR $INSTALLDIR
|
- ls -lR $INSTALLDIR
|
||||||
needs: ['{{distro.name}}:{{version}}@container-prep']
|
needs: ['fedora:32@container-prep']
|
||||||
|
|
||||||
autotools-from-tarball:
|
autotools-from-tarball:
|
||||||
extends:
|
extends:
|
||||||
- .{{distro.name}}:{{version}}
|
- .fedora:32
|
||||||
stage: tarballs
|
stage: tarballs
|
||||||
script:
|
script:
|
||||||
- export INSTALLDIR="$PWD/_inst"
|
- export INSTALLDIR="$PWD/_inst"
|
||||||
- meson "$MESON_BUILDDIR"
|
- meson "$MESON_BUILDDIR"
|
||||||
- meson dist -C "$MESON_BUILDDIR" --no-tests
|
- ninja -C "$MESON_BUILDDIR" dist
|
||||||
- mkdir -p _tarball_dir
|
- mkdir -p _tarball_dir
|
||||||
- tar xf "$MESON_BUILDDIR"/meson-dist/libevdev-*.xz -C _tarball_dir
|
- tar xf "$MESON_BUILDDIR"/meson-dist/libevdev-*.xz -C _tarball_dir
|
||||||
- pushd _tarball_dir/libevdev-*/ > /dev/null
|
- pushd _tarball_dir/libevdev-*/ > /dev/null
|
||||||
|
|
@ -479,8 +538,4 @@ autotools-from-tarball:
|
||||||
- popd > /dev/null
|
- popd > /dev/null
|
||||||
- popd > /dev/null
|
- popd > /dev/null
|
||||||
- ls -lR $INSTALLDIR
|
- ls -lR $INSTALLDIR
|
||||||
variables:
|
needs: ['fedora:32@container-prep']
|
||||||
LIBEVDEV_SKIP_ROOT_TESTS: 1
|
|
||||||
|
|
||||||
needs: ['{{distro.name}}:{{version}}@container-prep']
|
|
||||||
{% endfor %}
|
|
||||||
|
|
|
||||||
|
|
@ -3,17 +3,14 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
# We're happy to rebuild all containers when one changes.
|
# We're happy to rebuild all containers when one changes.
|
||||||
.default_tag: &default_tag '2024-11-25.0'
|
.default_tag: &default_tag '2020-09-11.0'
|
||||||
|
|
||||||
distributions:
|
distributions:
|
||||||
- name: fedora
|
- name: fedora
|
||||||
tag: *default_tag
|
tag: *default_tag
|
||||||
use_for_tarball_tests: true
|
|
||||||
# only one distro for qemu tests
|
|
||||||
use_for_qemu_tests: true
|
|
||||||
versions:
|
versions:
|
||||||
- '40'
|
- '31'
|
||||||
- '41'
|
- '32'
|
||||||
packages:
|
packages:
|
||||||
- git
|
- git
|
||||||
- gcc
|
- gcc
|
||||||
|
|
@ -31,18 +28,12 @@ distributions:
|
||||||
- doxygen
|
- doxygen
|
||||||
- xz
|
- xz
|
||||||
- clang-analyzer
|
- clang-analyzer
|
||||||
# below packages are for the qemu runs, so optional
|
want_qemu: true
|
||||||
- systemd-udev
|
|
||||||
- qemu-img
|
|
||||||
- qemu-system-x86-core
|
|
||||||
- qemu-system-aarch64-core
|
|
||||||
- jq
|
|
||||||
- python3-click
|
|
||||||
- python3-rich
|
|
||||||
- name: ubuntu
|
- name: ubuntu
|
||||||
tag: *default_tag
|
tag: *default_tag
|
||||||
versions:
|
versions:
|
||||||
- '24.10'
|
- '20.04'
|
||||||
|
- '19.10'
|
||||||
packages:
|
packages:
|
||||||
- git
|
- git
|
||||||
- gcc
|
- gcc
|
||||||
|
|
@ -80,13 +71,37 @@ distributions:
|
||||||
- binutils
|
- binutils
|
||||||
- doxygen
|
- doxygen
|
||||||
- xz-utils
|
- xz-utils
|
||||||
|
- name: centos
|
||||||
|
tag: *default_tag
|
||||||
|
versions:
|
||||||
|
- '7'
|
||||||
|
- '8'
|
||||||
|
packages:
|
||||||
|
- git
|
||||||
|
- gcc
|
||||||
|
- gcc-c++
|
||||||
|
- automake
|
||||||
|
- autoconf
|
||||||
|
- libtool
|
||||||
|
- make
|
||||||
|
- pkgconfig
|
||||||
|
- python3
|
||||||
|
- check-devel
|
||||||
|
- valgrind
|
||||||
|
- binutils
|
||||||
|
- xz
|
||||||
|
build:
|
||||||
|
meson: False
|
||||||
|
extra_variables:
|
||||||
|
# note: the variable value includes the comment because we want that in the gitlab-ci file
|
||||||
|
MAKE_ARGS: "'' # disable distcheck, requires doxygen"
|
||||||
- name: arch
|
- name: arch
|
||||||
tag: *default_tag
|
tag: *default_tag
|
||||||
versions:
|
versions:
|
||||||
- 'rolling'
|
- 'rolling'
|
||||||
packages:
|
packages:
|
||||||
- git
|
- git
|
||||||
- gc
|
- gcc
|
||||||
- meson
|
- meson
|
||||||
- automake
|
- automake
|
||||||
- autoconf
|
- autoconf
|
||||||
|
|
@ -119,7 +134,3 @@ distributions:
|
||||||
- doxygen
|
- doxygen
|
||||||
- xz
|
- xz
|
||||||
- linux-headers
|
- linux-headers
|
||||||
|
|
||||||
b2c:
|
|
||||||
version: 2ff65156ba67fa8a0c309a4fc16c5df1a88a3844
|
|
||||||
kernel: https://gitlab.freedesktop.org/api/v4/projects/libevdev%2Fhid-tools/packages/generic/kernel-x86_64/v6.5/bzImage
|
|
||||||
|
|
|
||||||
|
|
@ -1,43 +1,9 @@
|
||||||
#!/usr/bin/env bash
|
#!/bin/bash
|
||||||
#
|
|
||||||
# This script is sourced from here:
|
|
||||||
# https://gitlab.freedesktop.org/whot/meson-helper
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
set -x
|
|
||||||
if [[ -f .meson_environment ]]; then
|
if [[ -f .meson_environment ]]; then
|
||||||
. .meson_environment
|
. .meson_environment
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If test args are set, we assume we want to run the tests
|
|
||||||
MESON_RUN_TEST="$MESON_TEST_ARGS"
|
|
||||||
|
|
||||||
while [[ $# -gt 0 ]]; do
|
|
||||||
case $1 in
|
|
||||||
--skip-setup)
|
|
||||||
shift
|
|
||||||
MESON_SKIP_SETUP="1"
|
|
||||||
;;
|
|
||||||
--skip-build)
|
|
||||||
shift
|
|
||||||
MESON_SKIP_BUILD="1"
|
|
||||||
;;
|
|
||||||
--skip-test)
|
|
||||||
shift
|
|
||||||
MESON_RUN_TEST=""
|
|
||||||
;;
|
|
||||||
--run-test)
|
|
||||||
shift
|
|
||||||
MESON_RUN_TEST="1"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Unknow commandline argument $1"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ -z "$MESON_BUILDDIR" ]]; then
|
if [[ -z "$MESON_BUILDDIR" ]]; then
|
||||||
echo "\$MESON_BUILDDIR undefined."
|
echo "\$MESON_BUILDDIR undefined."
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -47,42 +13,43 @@ fi
|
||||||
# run and debug locally.
|
# run and debug locally.
|
||||||
if [[ -z "$CI_JOB_ID" ]] || [[ -z "$CI_JOB_NAME" ]]; then
|
if [[ -z "$CI_JOB_ID" ]] || [[ -z "$CI_JOB_NAME" ]]; then
|
||||||
echo "Missing \$CI_JOB_ID or \$CI_JOB_NAME".
|
echo "Missing \$CI_JOB_ID or \$CI_JOB_NAME".
|
||||||
CI_PROJECT_NAME=$(basename "$PWD")
|
|
||||||
CI_JOB_ID=$(date +%s)
|
CI_JOB_ID=$(date +%s)
|
||||||
CI_JOB_NAME="$CI_PROJECT_NAME-job-local"
|
CI_JOB_NAME='libevdev-job-local'
|
||||||
echo "Simulating gitlab environment: "
|
echo "Simulating gitlab environment: "
|
||||||
echo " CI_JOB_ID=$CI_JOB_ID"
|
echo " CI_JOB_ID=$CI_JOB_ID"
|
||||||
echo " CI_JOB_NAME=$CI_JOB_NAME"
|
echo " CI_JOB_NAME=$CI_JOB_NAME"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n "$FDO_CI_CONCURRENT" ]]; then
|
|
||||||
jobcount="-j$FDO_CI_CONCURRENT"
|
|
||||||
export MESON_TESTTHREADS="$FDO_CI_CONCURRENT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "*************************************************"
|
echo "*************************************************"
|
||||||
echo "builddir: $MESON_BUILDDIR"
|
echo "builddir: $MESON_BUILDDIR"
|
||||||
echo "meson args: $MESON_ARGS"
|
echo "meson args: $MESON_ARGS"
|
||||||
echo "ninja args: $NINJA_ARGS"
|
echo "ninja args: $NINJA_ARGS"
|
||||||
echo "meson test args: $MESON_TEST_ARGS"
|
echo "meson test args: $MESON_TEST_ARGS"
|
||||||
echo "job count: ${jobcount-0}"
|
|
||||||
echo "*************************************************"
|
echo "*************************************************"
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [[ -z "$MESON_SKIP_SETUP" ]]; then
|
rm -rf "$MESON_BUILDDIR"
|
||||||
rm -rf "$MESON_BUILDDIR"
|
meson "$MESON_BUILDDIR" $MESON_ARGS
|
||||||
meson setup "$MESON_BUILDDIR" $MESON_ARGS
|
|
||||||
fi
|
|
||||||
meson configure "$MESON_BUILDDIR"
|
meson configure "$MESON_BUILDDIR"
|
||||||
|
ninja -C "$MESON_BUILDDIR" $NINJA_ARGS
|
||||||
|
|
||||||
if [[ -z "$MESON_SKIP_BUILD" ]]; then
|
if [[ ! -z "$SKIP_MESON_TEST" ]]; then
|
||||||
if [[ -n "$NINJA_ARGS" ]]; then
|
echo "Skipping meson test"
|
||||||
ninja_args="--ninja-args $NINJA_ARGS"
|
exit 0
|
||||||
fi
|
|
||||||
meson compile -v -C "$MESON_BUILDDIR" $jobcount $ninja_args
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n "$MESON_RUN_TEST" ]]; then
|
# we still want to generate the reports, even if meson test fails
|
||||||
meson test -C "$MESON_BUILDDIR" $MESON_TEST_ARGS --print-errorlogs
|
set +e
|
||||||
fi
|
meson test -C "$MESON_BUILDDIR" $MESON_TEST_ARGS --print-errorlogs
|
||||||
|
exit_code=$?
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# We need the glob for the testlog so that it picks up those suffixed by a
|
||||||
|
# suite (e.g. testlog-valgrind.json)
|
||||||
|
./.gitlab-ci/meson-junit-report.py \
|
||||||
|
--output="$MESON_BUILDDIR/junit-$CI_JOB_NAME-report.xml" \
|
||||||
|
"$MESON_BUILDDIR"/meson-logs/testlog*.json; \
|
||||||
|
|
||||||
|
exit $exit_code
|
||||||
|
|
|
||||||
128
.gitlab-ci/meson-junit-report.py
Executable file
128
.gitlab-ci/meson-junit-report.py
Executable file
|
|
@ -0,0 +1,128 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
#
|
||||||
|
# meson-junit-report.py: Turns a Meson test log into a JUnit report
|
||||||
|
#
|
||||||
|
# Copyright 2019 GNOME Foundation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import datetime
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
|
||||||
|
|
||||||
|
default_name = os.getenv('CI_PROJECT_NAME', 'unknown')
|
||||||
|
default_job_id = os.getenv('CI_JOB_ID', 'Unknown')
|
||||||
|
default_branch = os.getenv('CI_COMMIT_REF_NAME', 'master')
|
||||||
|
|
||||||
|
|
||||||
|
aparser = argparse.ArgumentParser(description='Turns a Meson test log into a JUnit report')
|
||||||
|
aparser.add_argument('--project-name', metavar='NAME',
|
||||||
|
help='The project name (default: $CI_PROJECT_NAME)',
|
||||||
|
default=default_name)
|
||||||
|
aparser.add_argument('--job-id', metavar='ID',
|
||||||
|
help='The job ID for the report (default: $CI_JOB_ID)',
|
||||||
|
default=default_job_id)
|
||||||
|
aparser.add_argument('--branch', metavar='NAME',
|
||||||
|
help='Branch of the project being tested',
|
||||||
|
default=default_branch)
|
||||||
|
aparser.add_argument('--output', metavar='FILE',
|
||||||
|
help='The output file, stdout by default',
|
||||||
|
type=argparse.FileType('w', encoding='UTF-8'),
|
||||||
|
default=sys.stdout)
|
||||||
|
aparser.add_argument('infile', metavar='FILE',
|
||||||
|
help='The input testlog.json, stdin by default',
|
||||||
|
type=argparse.FileType('r', encoding='UTF-8'),
|
||||||
|
default=sys.stdin)
|
||||||
|
|
||||||
|
args = aparser.parse_args()
|
||||||
|
|
||||||
|
outfile = args.output
|
||||||
|
|
||||||
|
testsuites = ET.Element('testsuites')
|
||||||
|
testsuites.set('id', '{}/{}'.format(args.job_id, args.branch))
|
||||||
|
testsuites.set('package', args.project_name)
|
||||||
|
testsuites.set('timestamp', datetime.datetime.utcnow().isoformat(timespec='minutes'))
|
||||||
|
|
||||||
|
suites = {}
|
||||||
|
for line in args.infile:
|
||||||
|
data = json.loads(line)
|
||||||
|
(full_suite, unit_name) = data['name'].split(' / ')
|
||||||
|
(project_name, suite_name) = full_suite.split(':')
|
||||||
|
|
||||||
|
duration = data['duration']
|
||||||
|
return_code = data['returncode']
|
||||||
|
log = data['stdout']
|
||||||
|
|
||||||
|
unit = {
|
||||||
|
'suite': suite_name,
|
||||||
|
'name': unit_name,
|
||||||
|
'duration': duration,
|
||||||
|
'returncode': return_code,
|
||||||
|
'stdout': log,
|
||||||
|
}
|
||||||
|
|
||||||
|
units = suites.setdefault(suite_name, [])
|
||||||
|
units.append(unit)
|
||||||
|
|
||||||
|
for name, units in suites.items():
|
||||||
|
print('Processing suite {} (units: {})'.format(name, len(units)))
|
||||||
|
|
||||||
|
def if_failed(unit):
|
||||||
|
if not if_skipped(unit) and unit['returncode'] != 0:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def if_skipped(unit):
|
||||||
|
if unit['returncode'] == 77:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def if_succeded(unit):
|
||||||
|
if unit['returncode'] == 0:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
successes = list(filter(if_succeded, units))
|
||||||
|
failures = list(filter(if_failed, units))
|
||||||
|
skips = list(filter(if_skipped, units))
|
||||||
|
print(' - {}: {} pass, {} fail, {} skipped'.format(name, len(successes), len(failures), len(skips)))
|
||||||
|
|
||||||
|
testsuite = ET.SubElement(testsuites, 'testsuite')
|
||||||
|
testsuite.set('name', '{}/{}'.format(args.project_name, name))
|
||||||
|
testsuite.set('tests', str(len(units)))
|
||||||
|
testsuite.set('errors', str(len(failures)))
|
||||||
|
testsuite.set('skipped', str(len(skips)))
|
||||||
|
testsuite.set('failures', str(len(failures)))
|
||||||
|
|
||||||
|
for unit in successes:
|
||||||
|
testcase = ET.SubElement(testsuite, 'testcase')
|
||||||
|
testcase.set('classname', '{}/{}'.format(args.project_name, unit['suite']))
|
||||||
|
testcase.set('name', unit['name'])
|
||||||
|
testcase.set('time', str(unit['duration']))
|
||||||
|
|
||||||
|
for unit in skips:
|
||||||
|
testcase = ET.SubElement(testsuite, 'testcase')
|
||||||
|
testcase.set('classname', '{}/{}'.format(args.project_name, unit['suite']))
|
||||||
|
testcase.set('name', unit['name'])
|
||||||
|
testcase.set('time', str(unit['duration']))
|
||||||
|
|
||||||
|
skip = ET.SubElement(testcase, 'skipped')
|
||||||
|
|
||||||
|
for unit in failures:
|
||||||
|
testcase = ET.SubElement(testsuite, 'testcase')
|
||||||
|
testcase.set('classname', '{}/{}'.format(args.project_name, unit['suite']))
|
||||||
|
testcase.set('name', unit['name'])
|
||||||
|
testcase.set('time', str(unit['duration']))
|
||||||
|
|
||||||
|
failure = ET.SubElement(testcase, 'failure')
|
||||||
|
failure.set('classname', '{}/{}'.format(args.project_name, unit['suite']))
|
||||||
|
failure.set('name', unit['name'])
|
||||||
|
failure.set('type', 'error')
|
||||||
|
failure.text = unit['stdout']
|
||||||
|
|
||||||
|
output = ET.tostring(testsuites, encoding='unicode')
|
||||||
|
outfile.write(output)
|
||||||
|
|
@ -1,69 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -x
|
|
||||||
|
|
||||||
systemd_target=basic.target
|
|
||||||
post_command="/usr/bin/systemctl exit \$EXIT_STATUS"
|
|
||||||
|
|
||||||
while [[ $# -gt 0 ]]; do
|
|
||||||
case $1 in
|
|
||||||
--debug-mode)
|
|
||||||
shift
|
|
||||||
systemd_target=multi-user.target
|
|
||||||
post_command="echo you can now log in as root (no password) and then turn off by running \'/usr/bin/systemctl exit \$EXIT_STATUS\'"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Unknow commandline argument $1"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
WORKDIR=${FDO_DISTRIBUTION_WORKINGDIR:-$PWD}
|
|
||||||
B2C_WORKDIR=${FDO_B2C_WORKDIR:-/app}
|
|
||||||
|
|
||||||
# remove root password for debugging
|
|
||||||
sed -i 's/root:!locked::/root:::/' /etc/shadow
|
|
||||||
|
|
||||||
# create a libevdev test suite service
|
|
||||||
cat <<EOF > /etc/systemd/system/libevdev-testsuite.service
|
|
||||||
|
|
||||||
[Unit]
|
|
||||||
Description=libevdev test suite
|
|
||||||
After=$systemd_target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
StandardOutput=journal+console
|
|
||||||
EnvironmentFile=$B2C_WORKDIR/.b2c_env
|
|
||||||
WorkingDirectory=$WORKDIR
|
|
||||||
ExecStart=$WORKDIR/.gitlab-ci/meson-build.sh --skip-setup --skip-build --run-test
|
|
||||||
|
|
||||||
# exit the container on termination
|
|
||||||
ExecStopPost=$post_command
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=default.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat /etc/systemd/system/libevdev-testsuite.service
|
|
||||||
|
|
||||||
# enable the service
|
|
||||||
systemctl enable libevdev-testsuite.service
|
|
||||||
|
|
||||||
# disable some services we don't need in the CI
|
|
||||||
systemctl mask network-online.target
|
|
||||||
systemctl mask network-pre.target
|
|
||||||
systemctl mask timers.target
|
|
||||||
systemctl mask dnf-makecache.timer
|
|
||||||
systemctl mask systemd-logind.service
|
|
||||||
systemctl mask rpmdb-migrate.service
|
|
||||||
systemctl mask systemd-network-generator.service
|
|
||||||
systemctl mask cryptsetup-pre.target
|
|
||||||
systemctl mask cryptsetup.target
|
|
||||||
|
|
||||||
#change default target
|
|
||||||
systemctl set-default $systemd_target
|
|
||||||
|
|
||||||
# start the system
|
|
||||||
exec /usr/sbin/init
|
|
||||||
|
|
@ -141,7 +141,7 @@ A [good commit message](http://who-t.blogspot.com/2009/12/on-commit-messages.htm
|
||||||
answer three questions:
|
answer three questions:
|
||||||
|
|
||||||
- Why is it necessary? It may fix a bug, it may add a feature, it may
|
- Why is it necessary? It may fix a bug, it may add a feature, it may
|
||||||
improve performance, reliability, stability, or just be a change for the
|
improve performance, reliabilty, stability, or just be a change for the
|
||||||
sake of correctness.
|
sake of correctness.
|
||||||
- How does it address the issue? For short obvious patches this part can be
|
- How does it address the issue? For short obvious patches this part can be
|
||||||
omitted, but it should be a high level description of what the approach
|
omitted, but it should be a high level description of what the approach
|
||||||
|
|
|
||||||
35
COPYING
35
COPYING
|
|
@ -1,26 +1,23 @@
|
||||||
SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
Copyright © 2013 Red Hat, Inc.
|
Copyright © 2013 Red Hat, Inc.
|
||||||
Copyright © 2013 David Herrmann <dh.herrmann@gmail.com>
|
Copyright © 2013 David Herrmann <dh.herrmann@gmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
of this software and associated documentation files (the "Software"), to
|
documentation for any purpose is hereby granted without fee, provided that
|
||||||
deal in the Software without restriction, including without limitation the
|
the above copyright notice appear in all copies and that both that copyright
|
||||||
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
notice and this permission notice appear in supporting documentation, and
|
||||||
sell copies of the Software, and to permit persons to whom the Software is
|
that the name of the copyright holders not be used in advertising or
|
||||||
furnished to do so, subject to the following conditions:
|
publicity pertaining to distribution of the software without specific,
|
||||||
|
written prior permission. The copyright holders make no representations
|
||||||
|
about the suitability of this software for any purpose. It is provided "as
|
||||||
|
is" without express or implied warranty.
|
||||||
|
|
||||||
The above copyright notice and this permission notice (including the next
|
THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
paragraph) shall be included in all copies or substantial portions of the
|
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
Software.
|
EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
OF THIS SOFTWARE.
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
IN THE SOFTWARE.
|
|
||||||
|
|
||||||
The following license is from a Linux kernel header file and there is no GPL
|
The following license is from a Linux kernel header file and there is no GPL
|
||||||
code this package links to.
|
code this package links to.
|
||||||
|
|
|
||||||
28
configure.ac
28
configure.ac
|
|
@ -1,14 +1,29 @@
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
#
|
|
||||||
# Copyright © 2013 Red Hat, Inc.
|
# Copyright © 2013 Red Hat, Inc.
|
||||||
#
|
#
|
||||||
|
# Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
# documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
# the above copyright notice appear in all copies and that both that copyright
|
||||||
|
# notice and this permission notice appear in supporting documentation, and
|
||||||
|
# that the name of the copyright holders not be used in advertising or
|
||||||
|
# publicity pertaining to distribution of the software without specific,
|
||||||
|
# written prior permission. The copyright holders make no representations
|
||||||
|
# about the suitability of this software for any purpose. It is provided "as
|
||||||
|
# is" without express or implied warranty.
|
||||||
|
#
|
||||||
|
# THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
# EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
# OF THIS SOFTWARE.
|
||||||
|
|
||||||
AC_PREREQ([2.62])
|
AC_PREREQ([2.62])
|
||||||
|
|
||||||
# change meson version too
|
# change meson version too
|
||||||
AC_INIT([libevdev],
|
AC_INIT([libevdev],
|
||||||
[1.13.6],
|
[1.10.0],
|
||||||
[https://gitlab.freedesktop.org/libevdev/libevdev/issues/],
|
[https://bugs.freedesktop.org/enter_bug.cgi?product=libevdev],
|
||||||
[libevdev],
|
[libevdev],
|
||||||
[http://freedesktop.org/wiki/Software/libevdev/])
|
[http://freedesktop.org/wiki/Software/libevdev/])
|
||||||
|
|
||||||
|
|
@ -59,9 +74,12 @@ AC_CHECK_LIB([m], [round])
|
||||||
|
|
||||||
PKG_PROG_PKG_CONFIG()
|
PKG_PROG_PKG_CONFIG()
|
||||||
PKG_CHECK_MODULES(CHECK, [check >= 0.9.9], [HAVE_CHECK="yes"], [HAVE_CHECK="no"])
|
PKG_CHECK_MODULES(CHECK, [check >= 0.9.9], [HAVE_CHECK="yes"], [HAVE_CHECK="no"])
|
||||||
if test "x$HAVE_CHECK" != "xyes"; then
|
if test "x$HAVE_CHECK" = "xyes"; then
|
||||||
|
AC_PATH_PROG(VALGRIND, [valgrind])
|
||||||
|
else
|
||||||
AC_MSG_WARN([check not found - skipping building unit tests])
|
AC_MSG_WARN([check not found - skipping building unit tests])
|
||||||
fi
|
fi
|
||||||
|
AM_CONDITIONAL(HAVE_VALGRIND, [test "x$VALGRIND" != "x"])
|
||||||
AM_CONDITIONAL(ENABLE_RUNTIME_TESTS, [test "x$HAVE_CHECK" = "xyes"])
|
AM_CONDITIONAL(ENABLE_RUNTIME_TESTS, [test "x$HAVE_CHECK" = "xyes"])
|
||||||
AM_CONDITIONAL(ENABLE_STATIC_LINK_TEST, [test "x$enable_static" = "xyes"])
|
AM_CONDITIONAL(ENABLE_STATIC_LINK_TEST, [test "x$enable_static" = "xyes"])
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,6 @@
|
||||||
#define INPUT_PROP_TOPBUTTONPAD 0x04 /* softbuttons at top of pad */
|
#define INPUT_PROP_TOPBUTTONPAD 0x04 /* softbuttons at top of pad */
|
||||||
#define INPUT_PROP_POINTING_STICK 0x05 /* is a pointing stick */
|
#define INPUT_PROP_POINTING_STICK 0x05 /* is a pointing stick */
|
||||||
#define INPUT_PROP_ACCELEROMETER 0x06 /* has accelerometer */
|
#define INPUT_PROP_ACCELEROMETER 0x06 /* has accelerometer */
|
||||||
#define INPUT_PROP_PRESSUREPAD 0x07 /* pressure triggers clicks */
|
|
||||||
|
|
||||||
#define INPUT_PROP_MAX 0x1f
|
#define INPUT_PROP_MAX 0x1f
|
||||||
#define INPUT_PROP_CNT (INPUT_PROP_MAX + 1)
|
#define INPUT_PROP_CNT (INPUT_PROP_MAX + 1)
|
||||||
|
|
@ -279,8 +278,7 @@
|
||||||
#define KEY_PAUSECD 201
|
#define KEY_PAUSECD 201
|
||||||
#define KEY_PROG3 202
|
#define KEY_PROG3 202
|
||||||
#define KEY_PROG4 203
|
#define KEY_PROG4 203
|
||||||
#define KEY_ALL_APPLICATIONS 204 /* AC Desktop Show All Applications */
|
#define KEY_DASHBOARD 204 /* AL Dashboard */
|
||||||
#define KEY_DASHBOARD KEY_ALL_APPLICATIONS
|
|
||||||
#define KEY_SUSPEND 205
|
#define KEY_SUSPEND 205
|
||||||
#define KEY_CLOSE 206 /* AC Close */
|
#define KEY_CLOSE 206 /* AC Close */
|
||||||
#define KEY_PLAY 207
|
#define KEY_PLAY 207
|
||||||
|
|
@ -517,10 +515,6 @@
|
||||||
#define KEY_10CHANNELSUP 0x1b8 /* 10 channels up (10+) */
|
#define KEY_10CHANNELSUP 0x1b8 /* 10 channels up (10+) */
|
||||||
#define KEY_10CHANNELSDOWN 0x1b9 /* 10 channels down (10-) */
|
#define KEY_10CHANNELSDOWN 0x1b9 /* 10 channels down (10-) */
|
||||||
#define KEY_IMAGES 0x1ba /* AL Image Browser */
|
#define KEY_IMAGES 0x1ba /* AL Image Browser */
|
||||||
#define KEY_NOTIFICATION_CENTER 0x1bc /* Show/hide the notification center */
|
|
||||||
#define KEY_PICKUP_PHONE 0x1bd /* Answer incoming call */
|
|
||||||
#define KEY_HANGUP_PHONE 0x1be /* Decline incoming call */
|
|
||||||
#define KEY_LINK_PHONE 0x1bf /* AL Phone Syncing */
|
|
||||||
|
|
||||||
#define KEY_DEL_EOL 0x1c0
|
#define KEY_DEL_EOL 0x1c0
|
||||||
#define KEY_DEL_EOS 0x1c1
|
#define KEY_DEL_EOS 0x1c1
|
||||||
|
|
@ -548,7 +542,6 @@
|
||||||
#define KEY_FN_F 0x1e2
|
#define KEY_FN_F 0x1e2
|
||||||
#define KEY_FN_S 0x1e3
|
#define KEY_FN_S 0x1e3
|
||||||
#define KEY_FN_B 0x1e4
|
#define KEY_FN_B 0x1e4
|
||||||
#define KEY_FN_RIGHT_SHIFT 0x1e5
|
|
||||||
|
|
||||||
#define KEY_BRL_DOT1 0x1f1
|
#define KEY_BRL_DOT1 0x1f1
|
||||||
#define KEY_BRL_DOT2 0x1f2
|
#define KEY_BRL_DOT2 0x1f2
|
||||||
|
|
@ -602,14 +595,8 @@
|
||||||
#define BTN_DPAD_LEFT 0x222
|
#define BTN_DPAD_LEFT 0x222
|
||||||
#define BTN_DPAD_RIGHT 0x223
|
#define BTN_DPAD_RIGHT 0x223
|
||||||
|
|
||||||
#define BTN_GRIPL 0x224
|
|
||||||
#define BTN_GRIPR 0x225
|
|
||||||
#define BTN_GRIPL2 0x226
|
|
||||||
#define BTN_GRIPR2 0x227
|
|
||||||
|
|
||||||
#define KEY_ALS_TOGGLE 0x230 /* Ambient light sensor */
|
#define KEY_ALS_TOGGLE 0x230 /* Ambient light sensor */
|
||||||
#define KEY_ROTATE_LOCK_TOGGLE 0x231 /* Display rotation lock */
|
#define KEY_ROTATE_LOCK_TOGGLE 0x231 /* Display rotation lock */
|
||||||
#define KEY_REFRESH_RATE_TOGGLE 0x232 /* Display refresh rate toggle */
|
|
||||||
|
|
||||||
#define KEY_BUTTONCONFIG 0x240 /* AL Button Configuration */
|
#define KEY_BUTTONCONFIG 0x240 /* AL Button Configuration */
|
||||||
#define KEY_TASKMANAGER 0x241 /* AL Task/Project Manager */
|
#define KEY_TASKMANAGER 0x241 /* AL Task/Project Manager */
|
||||||
|
|
@ -620,29 +607,10 @@
|
||||||
#define KEY_VOICECOMMAND 0x246 /* Listening Voice Command */
|
#define KEY_VOICECOMMAND 0x246 /* Listening Voice Command */
|
||||||
#define KEY_ASSISTANT 0x247 /* AL Context-aware desktop assistant */
|
#define KEY_ASSISTANT 0x247 /* AL Context-aware desktop assistant */
|
||||||
#define KEY_KBD_LAYOUT_NEXT 0x248 /* AC Next Keyboard Layout Select */
|
#define KEY_KBD_LAYOUT_NEXT 0x248 /* AC Next Keyboard Layout Select */
|
||||||
#define KEY_EMOJI_PICKER 0x249 /* Show/hide emoji picker (HUTRR101) */
|
|
||||||
#define KEY_DICTATE 0x24a /* Start or Stop Voice Dictation Session (HUTRR99) */
|
|
||||||
#define KEY_CAMERA_ACCESS_ENABLE 0x24b /* Enables programmatic access to camera devices. (HUTRR72) */
|
|
||||||
#define KEY_CAMERA_ACCESS_DISABLE 0x24c /* Disables programmatic access to camera devices. (HUTRR72) */
|
|
||||||
#define KEY_CAMERA_ACCESS_TOGGLE 0x24d /* Toggles the current state of the camera access control. (HUTRR72) */
|
|
||||||
#define KEY_ACCESSIBILITY 0x24e /* Toggles the system bound accessibility UI/command (HUTRR116) */
|
|
||||||
#define KEY_DO_NOT_DISTURB 0x24f /* Toggles the system-wide "Do Not Disturb" control (HUTRR94)*/
|
|
||||||
|
|
||||||
#define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */
|
#define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */
|
||||||
#define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */
|
#define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */
|
||||||
|
|
||||||
/*
|
|
||||||
* Keycodes for hotkeys toggling the electronic privacy screen found on some
|
|
||||||
* laptops on/off. Note when the embedded-controller turns on/off the eprivacy
|
|
||||||
* screen itself then the state should be reported through drm connecter props:
|
|
||||||
* https://www.kernel.org/doc/html/latest/gpu/drm-kms.html#standard-connector-properties
|
|
||||||
* Except when implementing the drm connecter properties API is not possible
|
|
||||||
* because e.g. the firmware does not allow querying the presence and/or status
|
|
||||||
* of the eprivacy screen at boot.
|
|
||||||
*/
|
|
||||||
#define KEY_EPRIVACY_SCREEN_ON 0x252
|
|
||||||
#define KEY_EPRIVACY_SCREEN_OFF 0x253
|
|
||||||
|
|
||||||
#define KEY_KBDINPUTASSIST_PREV 0x260
|
#define KEY_KBDINPUTASSIST_PREV 0x260
|
||||||
#define KEY_KBDINPUTASSIST_NEXT 0x261
|
#define KEY_KBDINPUTASSIST_NEXT 0x261
|
||||||
#define KEY_KBDINPUTASSIST_PREVGROUP 0x262
|
#define KEY_KBDINPUTASSIST_PREVGROUP 0x262
|
||||||
|
|
@ -687,27 +655,6 @@
|
||||||
/* Select an area of screen to be copied */
|
/* Select an area of screen to be copied */
|
||||||
#define KEY_SELECTIVE_SCREENSHOT 0x27a
|
#define KEY_SELECTIVE_SCREENSHOT 0x27a
|
||||||
|
|
||||||
/* Move the focus to the next or previous user controllable element within a UI container */
|
|
||||||
#define KEY_NEXT_ELEMENT 0x27b
|
|
||||||
#define KEY_PREVIOUS_ELEMENT 0x27c
|
|
||||||
|
|
||||||
/* Toggle Autopilot engagement */
|
|
||||||
#define KEY_AUTOPILOT_ENGAGE_TOGGLE 0x27d
|
|
||||||
|
|
||||||
/* Shortcut Keys */
|
|
||||||
#define KEY_MARK_WAYPOINT 0x27e
|
|
||||||
#define KEY_SOS 0x27f
|
|
||||||
#define KEY_NAV_CHART 0x280
|
|
||||||
#define KEY_FISHING_CHART 0x281
|
|
||||||
#define KEY_SINGLE_RANGE_RADAR 0x282
|
|
||||||
#define KEY_DUAL_RANGE_RADAR 0x283
|
|
||||||
#define KEY_RADAR_OVERLAY 0x284
|
|
||||||
#define KEY_TRADITIONAL_SONAR 0x285
|
|
||||||
#define KEY_CLEARVU_SONAR 0x286
|
|
||||||
#define KEY_SIDEVU_SONAR 0x287
|
|
||||||
#define KEY_NAV_INFO 0x288
|
|
||||||
#define KEY_BRIGHTNESS_MENU 0x289
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some keyboards have keys which do not have a defined meaning, these keys
|
* Some keyboards have keys which do not have a defined meaning, these keys
|
||||||
* are intended to be programmed / bound to macros by the user. For most
|
* are intended to be programmed / bound to macros by the user. For most
|
||||||
|
|
@ -783,9 +730,6 @@
|
||||||
#define KEY_KBD_LCD_MENU4 0x2bb
|
#define KEY_KBD_LCD_MENU4 0x2bb
|
||||||
#define KEY_KBD_LCD_MENU5 0x2bc
|
#define KEY_KBD_LCD_MENU5 0x2bc
|
||||||
|
|
||||||
/* Performance Boost key (Alienware)/G-Mode key (Dell) */
|
|
||||||
#define KEY_PERFORMANCE 0x2bd
|
|
||||||
|
|
||||||
#define BTN_TRIGGER_HAPPY 0x2c0
|
#define BTN_TRIGGER_HAPPY 0x2c0
|
||||||
#define BTN_TRIGGER_HAPPY1 0x2c0
|
#define BTN_TRIGGER_HAPPY1 0x2c0
|
||||||
#define BTN_TRIGGER_HAPPY2 0x2c1
|
#define BTN_TRIGGER_HAPPY2 0x2c1
|
||||||
|
|
@ -890,7 +834,6 @@
|
||||||
#define ABS_TOOL_WIDTH 0x1c
|
#define ABS_TOOL_WIDTH 0x1c
|
||||||
|
|
||||||
#define ABS_VOLUME 0x20
|
#define ABS_VOLUME 0x20
|
||||||
#define ABS_PROFILE 0x21
|
|
||||||
|
|
||||||
#define ABS_MISC 0x28
|
#define ABS_MISC 0x28
|
||||||
|
|
||||||
|
|
@ -946,8 +889,7 @@
|
||||||
#define SW_MUTE_DEVICE 0x0e /* set = device disabled */
|
#define SW_MUTE_DEVICE 0x0e /* set = device disabled */
|
||||||
#define SW_PEN_INSERTED 0x0f /* set = pen inserted */
|
#define SW_PEN_INSERTED 0x0f /* set = pen inserted */
|
||||||
#define SW_MACHINE_COVER 0x10 /* set = cover closed */
|
#define SW_MACHINE_COVER 0x10 /* set = cover closed */
|
||||||
#define SW_USB_INSERT 0x11 /* set = USB audio device connected */
|
#define SW_MAX 0x10
|
||||||
#define SW_MAX 0x11
|
|
||||||
#define SW_CNT (SW_MAX+1)
|
#define SW_CNT (SW_MAX+1)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,6 @@
|
||||||
#define INPUT_PROP_TOPBUTTONPAD 0x04 /* softbuttons at top of pad */
|
#define INPUT_PROP_TOPBUTTONPAD 0x04 /* softbuttons at top of pad */
|
||||||
#define INPUT_PROP_POINTING_STICK 0x05 /* is a pointing stick */
|
#define INPUT_PROP_POINTING_STICK 0x05 /* is a pointing stick */
|
||||||
#define INPUT_PROP_ACCELEROMETER 0x06 /* has accelerometer */
|
#define INPUT_PROP_ACCELEROMETER 0x06 /* has accelerometer */
|
||||||
#define INPUT_PROP_PRESSUREPAD 0x07 /* pressure triggers clicks */
|
|
||||||
|
|
||||||
#define INPUT_PROP_MAX 0x1f
|
#define INPUT_PROP_MAX 0x1f
|
||||||
#define INPUT_PROP_CNT (INPUT_PROP_MAX + 1)
|
#define INPUT_PROP_CNT (INPUT_PROP_MAX + 1)
|
||||||
|
|
@ -279,8 +278,7 @@
|
||||||
#define KEY_PAUSECD 201
|
#define KEY_PAUSECD 201
|
||||||
#define KEY_PROG3 202
|
#define KEY_PROG3 202
|
||||||
#define KEY_PROG4 203
|
#define KEY_PROG4 203
|
||||||
#define KEY_ALL_APPLICATIONS 204 /* AC Desktop Show All Applications */
|
#define KEY_DASHBOARD 204 /* AL Dashboard */
|
||||||
#define KEY_DASHBOARD KEY_ALL_APPLICATIONS
|
|
||||||
#define KEY_SUSPEND 205
|
#define KEY_SUSPEND 205
|
||||||
#define KEY_CLOSE 206 /* AC Close */
|
#define KEY_CLOSE 206 /* AC Close */
|
||||||
#define KEY_PLAY 207
|
#define KEY_PLAY 207
|
||||||
|
|
@ -517,10 +515,6 @@
|
||||||
#define KEY_10CHANNELSUP 0x1b8 /* 10 channels up (10+) */
|
#define KEY_10CHANNELSUP 0x1b8 /* 10 channels up (10+) */
|
||||||
#define KEY_10CHANNELSDOWN 0x1b9 /* 10 channels down (10-) */
|
#define KEY_10CHANNELSDOWN 0x1b9 /* 10 channels down (10-) */
|
||||||
#define KEY_IMAGES 0x1ba /* AL Image Browser */
|
#define KEY_IMAGES 0x1ba /* AL Image Browser */
|
||||||
#define KEY_NOTIFICATION_CENTER 0x1bc /* Show/hide the notification center */
|
|
||||||
#define KEY_PICKUP_PHONE 0x1bd /* Answer incoming call */
|
|
||||||
#define KEY_HANGUP_PHONE 0x1be /* Decline incoming call */
|
|
||||||
#define KEY_LINK_PHONE 0x1bf /* AL Phone Syncing */
|
|
||||||
|
|
||||||
#define KEY_DEL_EOL 0x1c0
|
#define KEY_DEL_EOL 0x1c0
|
||||||
#define KEY_DEL_EOS 0x1c1
|
#define KEY_DEL_EOS 0x1c1
|
||||||
|
|
@ -548,7 +542,6 @@
|
||||||
#define KEY_FN_F 0x1e2
|
#define KEY_FN_F 0x1e2
|
||||||
#define KEY_FN_S 0x1e3
|
#define KEY_FN_S 0x1e3
|
||||||
#define KEY_FN_B 0x1e4
|
#define KEY_FN_B 0x1e4
|
||||||
#define KEY_FN_RIGHT_SHIFT 0x1e5
|
|
||||||
|
|
||||||
#define KEY_BRL_DOT1 0x1f1
|
#define KEY_BRL_DOT1 0x1f1
|
||||||
#define KEY_BRL_DOT2 0x1f2
|
#define KEY_BRL_DOT2 0x1f2
|
||||||
|
|
@ -602,14 +595,8 @@
|
||||||
#define BTN_DPAD_LEFT 0x222
|
#define BTN_DPAD_LEFT 0x222
|
||||||
#define BTN_DPAD_RIGHT 0x223
|
#define BTN_DPAD_RIGHT 0x223
|
||||||
|
|
||||||
#define BTN_GRIPL 0x224
|
|
||||||
#define BTN_GRIPR 0x225
|
|
||||||
#define BTN_GRIPL2 0x226
|
|
||||||
#define BTN_GRIPR2 0x227
|
|
||||||
|
|
||||||
#define KEY_ALS_TOGGLE 0x230 /* Ambient light sensor */
|
#define KEY_ALS_TOGGLE 0x230 /* Ambient light sensor */
|
||||||
#define KEY_ROTATE_LOCK_TOGGLE 0x231 /* Display rotation lock */
|
#define KEY_ROTATE_LOCK_TOGGLE 0x231 /* Display rotation lock */
|
||||||
#define KEY_REFRESH_RATE_TOGGLE 0x232 /* Display refresh rate toggle */
|
|
||||||
|
|
||||||
#define KEY_BUTTONCONFIG 0x240 /* AL Button Configuration */
|
#define KEY_BUTTONCONFIG 0x240 /* AL Button Configuration */
|
||||||
#define KEY_TASKMANAGER 0x241 /* AL Task/Project Manager */
|
#define KEY_TASKMANAGER 0x241 /* AL Task/Project Manager */
|
||||||
|
|
@ -620,29 +607,10 @@
|
||||||
#define KEY_VOICECOMMAND 0x246 /* Listening Voice Command */
|
#define KEY_VOICECOMMAND 0x246 /* Listening Voice Command */
|
||||||
#define KEY_ASSISTANT 0x247 /* AL Context-aware desktop assistant */
|
#define KEY_ASSISTANT 0x247 /* AL Context-aware desktop assistant */
|
||||||
#define KEY_KBD_LAYOUT_NEXT 0x248 /* AC Next Keyboard Layout Select */
|
#define KEY_KBD_LAYOUT_NEXT 0x248 /* AC Next Keyboard Layout Select */
|
||||||
#define KEY_EMOJI_PICKER 0x249 /* Show/hide emoji picker (HUTRR101) */
|
|
||||||
#define KEY_DICTATE 0x24a /* Start or Stop Voice Dictation Session (HUTRR99) */
|
|
||||||
#define KEY_CAMERA_ACCESS_ENABLE 0x24b /* Enables programmatic access to camera devices. (HUTRR72) */
|
|
||||||
#define KEY_CAMERA_ACCESS_DISABLE 0x24c /* Disables programmatic access to camera devices. (HUTRR72) */
|
|
||||||
#define KEY_CAMERA_ACCESS_TOGGLE 0x24d /* Toggles the current state of the camera access control. (HUTRR72) */
|
|
||||||
#define KEY_ACCESSIBILITY 0x24e /* Toggles the system bound accessibility UI/command (HUTRR116) */
|
|
||||||
#define KEY_DO_NOT_DISTURB 0x24f /* Toggles the system-wide "Do Not Disturb" control (HUTRR94)*/
|
|
||||||
|
|
||||||
#define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */
|
#define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */
|
||||||
#define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */
|
#define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */
|
||||||
|
|
||||||
/*
|
|
||||||
* Keycodes for hotkeys toggling the electronic privacy screen found on some
|
|
||||||
* laptops on/off. Note when the embedded-controller turns on/off the eprivacy
|
|
||||||
* screen itself then the state should be reported through drm connecter props:
|
|
||||||
* https://www.kernel.org/doc/html/latest/gpu/drm-kms.html#standard-connector-properties
|
|
||||||
* Except when implementing the drm connecter properties API is not possible
|
|
||||||
* because e.g. the firmware does not allow querying the presence and/or status
|
|
||||||
* of the eprivacy screen at boot.
|
|
||||||
*/
|
|
||||||
#define KEY_EPRIVACY_SCREEN_ON 0x252
|
|
||||||
#define KEY_EPRIVACY_SCREEN_OFF 0x253
|
|
||||||
|
|
||||||
#define KEY_KBDINPUTASSIST_PREV 0x260
|
#define KEY_KBDINPUTASSIST_PREV 0x260
|
||||||
#define KEY_KBDINPUTASSIST_NEXT 0x261
|
#define KEY_KBDINPUTASSIST_NEXT 0x261
|
||||||
#define KEY_KBDINPUTASSIST_PREVGROUP 0x262
|
#define KEY_KBDINPUTASSIST_PREVGROUP 0x262
|
||||||
|
|
@ -687,27 +655,6 @@
|
||||||
/* Select an area of screen to be copied */
|
/* Select an area of screen to be copied */
|
||||||
#define KEY_SELECTIVE_SCREENSHOT 0x27a
|
#define KEY_SELECTIVE_SCREENSHOT 0x27a
|
||||||
|
|
||||||
/* Move the focus to the next or previous user controllable element within a UI container */
|
|
||||||
#define KEY_NEXT_ELEMENT 0x27b
|
|
||||||
#define KEY_PREVIOUS_ELEMENT 0x27c
|
|
||||||
|
|
||||||
/* Toggle Autopilot engagement */
|
|
||||||
#define KEY_AUTOPILOT_ENGAGE_TOGGLE 0x27d
|
|
||||||
|
|
||||||
/* Shortcut Keys */
|
|
||||||
#define KEY_MARK_WAYPOINT 0x27e
|
|
||||||
#define KEY_SOS 0x27f
|
|
||||||
#define KEY_NAV_CHART 0x280
|
|
||||||
#define KEY_FISHING_CHART 0x281
|
|
||||||
#define KEY_SINGLE_RANGE_RADAR 0x282
|
|
||||||
#define KEY_DUAL_RANGE_RADAR 0x283
|
|
||||||
#define KEY_RADAR_OVERLAY 0x284
|
|
||||||
#define KEY_TRADITIONAL_SONAR 0x285
|
|
||||||
#define KEY_CLEARVU_SONAR 0x286
|
|
||||||
#define KEY_SIDEVU_SONAR 0x287
|
|
||||||
#define KEY_NAV_INFO 0x288
|
|
||||||
#define KEY_BRIGHTNESS_MENU 0x289
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some keyboards have keys which do not have a defined meaning, these keys
|
* Some keyboards have keys which do not have a defined meaning, these keys
|
||||||
* are intended to be programmed / bound to macros by the user. For most
|
* are intended to be programmed / bound to macros by the user. For most
|
||||||
|
|
@ -783,9 +730,6 @@
|
||||||
#define KEY_KBD_LCD_MENU4 0x2bb
|
#define KEY_KBD_LCD_MENU4 0x2bb
|
||||||
#define KEY_KBD_LCD_MENU5 0x2bc
|
#define KEY_KBD_LCD_MENU5 0x2bc
|
||||||
|
|
||||||
/* Performance Boost key (Alienware)/G-Mode key (Dell) */
|
|
||||||
#define KEY_PERFORMANCE 0x2bd
|
|
||||||
|
|
||||||
#define BTN_TRIGGER_HAPPY 0x2c0
|
#define BTN_TRIGGER_HAPPY 0x2c0
|
||||||
#define BTN_TRIGGER_HAPPY1 0x2c0
|
#define BTN_TRIGGER_HAPPY1 0x2c0
|
||||||
#define BTN_TRIGGER_HAPPY2 0x2c1
|
#define BTN_TRIGGER_HAPPY2 0x2c1
|
||||||
|
|
@ -890,7 +834,6 @@
|
||||||
#define ABS_TOOL_WIDTH 0x1c
|
#define ABS_TOOL_WIDTH 0x1c
|
||||||
|
|
||||||
#define ABS_VOLUME 0x20
|
#define ABS_VOLUME 0x20
|
||||||
#define ABS_PROFILE 0x21
|
|
||||||
|
|
||||||
#define ABS_MISC 0x28
|
#define ABS_MISC 0x28
|
||||||
|
|
||||||
|
|
@ -946,8 +889,7 @@
|
||||||
#define SW_MUTE_DEVICE 0x0e /* set = device disabled */
|
#define SW_MUTE_DEVICE 0x0e /* set = device disabled */
|
||||||
#define SW_PEN_INSERTED 0x0f /* set = pen inserted */
|
#define SW_PEN_INSERTED 0x0f /* set = pen inserted */
|
||||||
#define SW_MACHINE_COVER 0x10 /* set = cover closed */
|
#define SW_MACHINE_COVER 0x10 /* set = cover closed */
|
||||||
#define SW_USB_INSERT 0x11 /* set = USB audio device connected */
|
#define SW_MAX 0x10
|
||||||
#define SW_MAX 0x11
|
|
||||||
#define SW_CNT (SW_MAX+1)
|
#define SW_CNT (SW_MAX+1)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -6,16 +6,14 @@
|
||||||
* under the terms of the GNU General Public License version 2 as published by
|
* under the terms of the GNU General Public License version 2 as published by
|
||||||
* the Free Software Foundation.
|
* the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
#ifndef _UAPI_INPUT_H
|
#ifndef _INPUT_H
|
||||||
#define _UAPI_INPUT_H
|
#define _INPUT_H
|
||||||
|
|
||||||
|
|
||||||
#ifndef __KERNEL__
|
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "input-event-codes.h"
|
#include "input-event-codes.h"
|
||||||
|
|
||||||
|
|
@ -78,16 +76,13 @@ struct input_id {
|
||||||
* Note that input core does not clamp reported values to the
|
* Note that input core does not clamp reported values to the
|
||||||
* [minimum, maximum] limits, such task is left to userspace.
|
* [minimum, maximum] limits, such task is left to userspace.
|
||||||
*
|
*
|
||||||
* The default resolution for main axes (ABS_X, ABS_Y, ABS_Z,
|
* The default resolution for main axes (ABS_X, ABS_Y, ABS_Z)
|
||||||
* ABS_MT_POSITION_X, ABS_MT_POSITION_Y) is reported in units
|
* is reported in units per millimeter (units/mm), resolution
|
||||||
* per millimeter (units/mm), resolution for rotational axes
|
* for rotational axes (ABS_RX, ABS_RY, ABS_RZ) is reported
|
||||||
* (ABS_RX, ABS_RY, ABS_RZ) is reported in units per radian.
|
* in units per radian.
|
||||||
* The resolution for the size axes (ABS_MT_TOUCH_MAJOR,
|
|
||||||
* ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MAJOR, ABS_MT_WIDTH_MINOR)
|
|
||||||
* is reported in units per millimeter (units/mm).
|
|
||||||
* When INPUT_PROP_ACCELEROMETER is set the resolution changes.
|
* When INPUT_PROP_ACCELEROMETER is set the resolution changes.
|
||||||
* The main axes (ABS_X, ABS_Y, ABS_Z) are then reported in
|
* The main axes (ABS_X, ABS_Y, ABS_Z) are then reported in
|
||||||
* units per g (units/g) and in units per degree per second
|
* in units per g (units/g) and in units per degree per second
|
||||||
* (units/deg/s) for rotational axes (ABS_RX, ABS_RY, ABS_RZ).
|
* (units/deg/s) for rotational axes (ABS_RX, ABS_RY, ABS_RZ).
|
||||||
*/
|
*/
|
||||||
struct input_absinfo {
|
struct input_absinfo {
|
||||||
|
|
@ -274,8 +269,6 @@ struct input_mask {
|
||||||
#define BUS_RMI 0x1D
|
#define BUS_RMI 0x1D
|
||||||
#define BUS_CEC 0x1E
|
#define BUS_CEC 0x1E
|
||||||
#define BUS_INTEL_ISHTP 0x1F
|
#define BUS_INTEL_ISHTP 0x1F
|
||||||
#define BUS_AMD_SFH 0x20
|
|
||||||
#define BUS_SDW 0x21
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MT_TOOL types
|
* MT_TOOL types
|
||||||
|
|
@ -429,24 +422,6 @@ struct ff_rumble_effect {
|
||||||
__u16 weak_magnitude;
|
__u16 weak_magnitude;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* struct ff_haptic_effect
|
|
||||||
* @hid_usage: hid_usage according to Haptics page (WAVEFORM_CLICK, etc.)
|
|
||||||
* @vendor_id: the waveform vendor ID if hid_usage is in the vendor-defined range
|
|
||||||
* @vendor_waveform_page: the vendor waveform page if hid_usage is in the vendor-defined range
|
|
||||||
* @intensity: strength of the effect as percentage
|
|
||||||
* @repeat_count: number of times to retrigger effect
|
|
||||||
* @retrigger_period: time before effect is retriggered (in ms)
|
|
||||||
*/
|
|
||||||
struct ff_haptic_effect {
|
|
||||||
__u16 hid_usage;
|
|
||||||
__u16 vendor_id;
|
|
||||||
__u8 vendor_waveform_page;
|
|
||||||
__u16 intensity;
|
|
||||||
__u16 repeat_count;
|
|
||||||
__u16 retrigger_period;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct ff_effect - defines force feedback effect
|
* struct ff_effect - defines force feedback effect
|
||||||
* @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING,
|
* @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING,
|
||||||
|
|
@ -483,7 +458,6 @@ struct ff_effect {
|
||||||
struct ff_periodic_effect periodic;
|
struct ff_periodic_effect periodic;
|
||||||
struct ff_condition_effect condition[2]; /* One for each axis */
|
struct ff_condition_effect condition[2]; /* One for each axis */
|
||||||
struct ff_rumble_effect rumble;
|
struct ff_rumble_effect rumble;
|
||||||
struct ff_haptic_effect haptic;
|
|
||||||
} u;
|
} u;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -491,7 +465,6 @@ struct ff_effect {
|
||||||
* Force feedback effect types
|
* Force feedback effect types
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define FF_HAPTIC 0x4f
|
|
||||||
#define FF_RUMBLE 0x50
|
#define FF_RUMBLE 0x50
|
||||||
#define FF_PERIODIC 0x51
|
#define FF_PERIODIC 0x51
|
||||||
#define FF_CONSTANT 0x52
|
#define FF_CONSTANT 0x52
|
||||||
|
|
@ -501,7 +474,7 @@ struct ff_effect {
|
||||||
#define FF_INERTIA 0x56
|
#define FF_INERTIA 0x56
|
||||||
#define FF_RAMP 0x57
|
#define FF_RAMP 0x57
|
||||||
|
|
||||||
#define FF_EFFECT_MIN FF_HAPTIC
|
#define FF_EFFECT_MIN FF_RUMBLE
|
||||||
#define FF_EFFECT_MAX FF_RAMP
|
#define FF_EFFECT_MAX FF_RAMP
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -536,4 +509,4 @@ struct ff_effect {
|
||||||
#define FF_MAX 0x7f
|
#define FF_MAX 0x7f
|
||||||
#define FF_CNT (FF_MAX+1)
|
#define FF_CNT (FF_MAX+1)
|
||||||
|
|
||||||
#endif /* _UAPI_INPUT_H */
|
#endif /* _INPUT_H */
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ event-names.h: Makefile make-event-names.py
|
||||||
$(PYTHON) $(srcdir)/make-event-names.py $(top_srcdir)/include/linux/@OS@/input.h $(top_srcdir)/include/linux/@OS@/input-event-codes.h > $@
|
$(PYTHON) $(srcdir)/make-event-names.py $(top_srcdir)/include/linux/@OS@/input.h $(top_srcdir)/include/linux/@OS@/input-event-codes.h > $@
|
||||||
|
|
||||||
|
|
||||||
EXTRA_DIST = make-event-names.py libevdev.sym ../include
|
EXTRA_DIST = make-event-names.py libevdev.sym
|
||||||
CLEANFILES = event-names.h
|
CLEANFILES = event-names.h
|
||||||
BUILT_SOURCES = event-names.h
|
BUILT_SOURCES = event-names.h
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef LIBEVDEV_INT_H
|
#ifndef LIBEVDEV_INT_H
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 David Herrmann <dh.herrmann@gmail.com>
|
* Copyright © 2013 David Herrmann <dh.herrmann@gmail.com>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct libevdev_uinput {
|
struct libevdev_uinput {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
@ -468,13 +485,7 @@ libevdev_uinput_write_event(const struct libevdev_uinput *uinput_dev,
|
||||||
unsigned int code,
|
unsigned int code,
|
||||||
int value)
|
int value)
|
||||||
{
|
{
|
||||||
struct input_event ev = {
|
struct input_event ev = { {0,0}, type, code, value };
|
||||||
.input_event_sec = 0,
|
|
||||||
.input_event_usec = 0,
|
|
||||||
.type = type,
|
|
||||||
.code = code,
|
|
||||||
.value = value
|
|
||||||
};
|
|
||||||
int fd = libevdev_uinput_get_fd(uinput_dev);
|
int fd = libevdev_uinput_get_fd(uinput_dev);
|
||||||
int rc, max;
|
int rc, max;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,23 @@
|
||||||
/* SPDX-License-Identifier: MIT */
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
* of this software and associated documentation files (the "Software"), to
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
* deal in the Software without restriction, including without limitation the
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
* sell copies of the Software, and to permit persons to whom the Software is
|
* that the name of the copyright holders not be used in advertising or
|
||||||
* furnished to do so, subject to the following conditions:
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
*
|
*
|
||||||
* The above copyright notice and this permission notice (including the next
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
* paragraph) shall be included in all copies or substantial portions of the
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
* Software.
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
*
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
* OF THIS SOFTWARE.
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
* IN THE SOFTWARE.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef LIBEVDEV_UINPUT_H
|
#ifndef LIBEVDEV_UINPUT_H
|
||||||
|
|
@ -42,13 +40,14 @@ struct libevdev_uinput;
|
||||||
*
|
*
|
||||||
* @code
|
* @code
|
||||||
* int err;
|
* int err;
|
||||||
* int fd, uifd;
|
* int fd, new_fd, uifd;
|
||||||
* struct libevdev *dev;
|
* struct libevdev *dev;
|
||||||
* struct libevdev_uinput *uidev;
|
* struct libevdev_uinput *uidev;
|
||||||
|
* struct input_event ev[2];
|
||||||
*
|
*
|
||||||
* fd = open("/dev/input/event0", O_RDONLY);
|
* fd = open("/dev/input/event0", O_RDONLY);
|
||||||
* if (fd < 0)
|
* if (fd < 0)
|
||||||
* return -errno;
|
* return err;
|
||||||
*
|
*
|
||||||
* err = libevdev_new_from_fd(fd, &dev);
|
* err = libevdev_new_from_fd(fd, &dev);
|
||||||
* if (err != 0)
|
* if (err != 0)
|
||||||
|
|
@ -66,7 +65,7 @@ struct libevdev_uinput;
|
||||||
* err = libevdev_uinput_write_event(uidev, EV_REL, REL_X, -1);
|
* err = libevdev_uinput_write_event(uidev, EV_REL, REL_X, -1);
|
||||||
* if (err != 0)
|
* if (err != 0)
|
||||||
* return err;
|
* return err;
|
||||||
* err = libevdev_uinput_write_event(uidev, EV_SYN, SYN_REPORT, 0);
|
* libevdev_uinput_write_event(uidev, EV_SYN, SYN_REPORT, 0);
|
||||||
* if (err != 0)
|
* if (err != 0)
|
||||||
* return err;
|
* return err;
|
||||||
*
|
*
|
||||||
|
|
@ -108,7 +107,7 @@ struct libevdev_uinput;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
enum libevdev_uinput_open_mode {
|
enum libevdev_uinput_open_mode {
|
||||||
/* intentionally -2 to avoid code like below from accidentally working:
|
/* intentionally -2 to avoid to avoid code like the below from accidentally working:
|
||||||
fd = open("/dev/uinput", O_RDWR); // fails, fd is -1
|
fd = open("/dev/uinput", O_RDWR); // fails, fd is -1
|
||||||
libevdev_uinput_create_from_device(dev, fd, &uidev); // may hide the error */
|
libevdev_uinput_create_from_device(dev, fd, &uidev); // may hide the error */
|
||||||
LIBEVDEV_UINPUT_OPEN_MANAGED = -2 /**< let libevdev open and close @c /dev/uinput */
|
LIBEVDEV_UINPUT_OPEN_MANAGED = -2 /**< let libevdev open and close @c /dev/uinput */
|
||||||
|
|
@ -187,7 +186,7 @@ int libevdev_uinput_get_fd(const struct libevdev_uinput *uinput_dev);
|
||||||
* @ingroup uinput
|
* @ingroup uinput
|
||||||
*
|
*
|
||||||
* Return the syspath representing this uinput device. If the UI_GET_SYSNAME
|
* Return the syspath representing this uinput device. If the UI_GET_SYSNAME
|
||||||
* ioctl is not available, libevdev makes an educated guess.
|
* ioctl not available, libevdev makes an educated guess.
|
||||||
* The UI_GET_SYSNAME ioctl is available since Linux 3.15.
|
* The UI_GET_SYSNAME ioctl is available since Linux 3.15.
|
||||||
*
|
*
|
||||||
* The syspath returned is the one of the input node itself
|
* The syspath returned is the one of the input node itself
|
||||||
|
|
@ -196,8 +195,8 @@ int libevdev_uinput_get_fd(const struct libevdev_uinput *uinput_dev);
|
||||||
*
|
*
|
||||||
* @note This function may return NULL if UI_GET_SYSNAME is not available.
|
* @note This function may return NULL if UI_GET_SYSNAME is not available.
|
||||||
* In that case, libevdev uses ctime and the device name to guess devices.
|
* In that case, libevdev uses ctime and the device name to guess devices.
|
||||||
* To avoid false positives, wait at least 1.5s between creating devices that
|
* To avoid false positives, wait at least wait at least 1.5s between
|
||||||
* have the same name.
|
* creating devices that have the same name.
|
||||||
*
|
*
|
||||||
* @note FreeBSD does not have sysfs, on FreeBSD this function always returns
|
* @note FreeBSD does not have sysfs, on FreeBSD this function always returns
|
||||||
* NULL.
|
* NULL.
|
||||||
|
|
@ -220,7 +219,7 @@ const char* libevdev_uinput_get_syspath(struct libevdev_uinput *uinput_dev);
|
||||||
* @note This function may return NULL. libevdev may have to guess the
|
* @note This function may return NULL. libevdev may have to guess the
|
||||||
* syspath and the device node. See libevdev_uinput_get_syspath() for details.
|
* syspath and the device node. See libevdev_uinput_get_syspath() for details.
|
||||||
*
|
*
|
||||||
* @note On FreeBSD, this function can not return NULL. libudev uses the
|
* @note On FreeBSD, this function can not return NULL. libudev uses the
|
||||||
* UI_GET_SYSNAME ioctl to get the device node on this platform and if that
|
* UI_GET_SYSNAME ioctl to get the device node on this platform and if that
|
||||||
* fails, the call to libevdev_uinput_create_from_device() fails.
|
* fails, the call to libevdev_uinput_create_from_device() fails.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _UTIL_H_
|
#ifndef _UTIL_H_
|
||||||
|
|
@ -42,19 +59,19 @@ startswith(const char *str, size_t len, const char *prefix, size_t plen)
|
||||||
static inline int
|
static inline int
|
||||||
bit_is_set(const unsigned long *array, int bit)
|
bit_is_set(const unsigned long *array, int bit)
|
||||||
{
|
{
|
||||||
return !!(array[bit / LONG_BITS] & (1ULL << (bit % LONG_BITS)));
|
return !!(array[bit / LONG_BITS] & (1LL << (bit % LONG_BITS)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
set_bit(unsigned long *array, int bit)
|
set_bit(unsigned long *array, int bit)
|
||||||
{
|
{
|
||||||
array[bit / LONG_BITS] |= (1ULL << (bit % LONG_BITS));
|
array[bit / LONG_BITS] |= (1LL << (bit % LONG_BITS));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
clear_bit(unsigned long *array, int bit)
|
clear_bit(unsigned long *array, int bit)
|
||||||
{
|
{
|
||||||
array[bit / LONG_BITS] &= ~(1ULL << (bit % LONG_BITS));
|
array[bit / LONG_BITS] &= ~(1LL << (bit % LONG_BITS));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
@ -44,8 +61,7 @@ struct slot_change_state {
|
||||||
};
|
};
|
||||||
|
|
||||||
static int sync_mt_state(struct libevdev *dev,
|
static int sync_mt_state(struct libevdev *dev,
|
||||||
struct slot_change_state changes_out[dev->num_slots]);
|
struct slot_change_state *changes_out);
|
||||||
|
|
||||||
static int
|
static int
|
||||||
update_key_state(struct libevdev *dev, const struct input_event *e);
|
update_key_state(struct libevdev *dev, const struct input_event *e);
|
||||||
|
|
||||||
|
|
@ -805,34 +821,23 @@ push_mt_sync_events(struct libevdev *dev,
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
for (int slot = 0; slot < dev->num_slots; slot++) {
|
for (int slot = 0; slot < dev->num_slots; slot++) {
|
||||||
bool have_slot_event = false;
|
/* stopped touches were already terminated in
|
||||||
|
* terminate_slots */
|
||||||
if (!bit_is_set(changes[slot].axes, ABS_MT_SLOT))
|
if (changes[slot].state == TOUCH_STOPPED ||
|
||||||
|
!bit_is_set(changes[slot].axes, ABS_MT_SLOT))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
queue_push_event(dev, EV_ABS, ABS_MT_SLOT, slot);
|
||||||
|
last_reported_slot = slot;
|
||||||
|
|
||||||
for (int axis = ABS_MT_MIN; axis <= ABS_MT_MAX; axis++) {
|
for (int axis = ABS_MT_MIN; axis <= ABS_MT_MAX; axis++) {
|
||||||
if (axis == ABS_MT_SLOT ||
|
if (axis == ABS_MT_SLOT ||
|
||||||
!libevdev_has_event_code(dev, EV_ABS, axis))
|
!libevdev_has_event_code(dev, EV_ABS, axis))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (bit_is_set(changes[slot].axes, axis)) {
|
if (bit_is_set(changes[slot].axes, axis))
|
||||||
/* We already sent the tracking id -1 in
|
|
||||||
* terminate_slots so don't do that again. There
|
|
||||||
* may be other axes like ABS_MT_TOOL_TYPE that
|
|
||||||
* need to be synced despite no touch being active */
|
|
||||||
if (axis == ABS_MT_TRACKING_ID &&
|
|
||||||
*slot_value(dev, slot, axis) == -1)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!have_slot_event) {
|
|
||||||
queue_push_event(dev, EV_ABS, ABS_MT_SLOT, slot);
|
|
||||||
last_reported_slot = slot;
|
|
||||||
have_slot_event = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
queue_push_event(dev, EV_ABS, axis,
|
queue_push_event(dev, EV_ABS, axis,
|
||||||
*slot_value(dev, slot, axis));
|
*slot_value(dev, slot, axis));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -922,8 +927,7 @@ sync_state(struct libevdev *dev)
|
||||||
bool want_mt_sync = false;
|
bool want_mt_sync = false;
|
||||||
int last_reported_slot = 0;
|
int last_reported_slot = 0;
|
||||||
struct slot_change_state changes[dev->num_slots > 0 ? dev->num_slots : 1];
|
struct slot_change_state changes[dev->num_slots > 0 ? dev->num_slots : 1];
|
||||||
|
memset(changes, 0, sizeof(changes));
|
||||||
memset(changes, 0, sizeof(changes));
|
|
||||||
|
|
||||||
/* see section "Discarding events before synchronizing" in
|
/* see section "Discarding events before synchronizing" in
|
||||||
* libevdev/libevdev.h */
|
* libevdev/libevdev.h */
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,23 @@
|
||||||
/* SPDX-License-Identifier: MIT */
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
* of this software and associated documentation files (the "Software"), to
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
* deal in the Software without restriction, including without limitation the
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
* sell copies of the Software, and to permit persons to whom the Software is
|
* that the name of the copyright holders not be used in advertising or
|
||||||
* furnished to do so, subject to the following conditions:
|
* publicity pertaining to distribution of the software without specific,
|
||||||
*
|
* written prior permission. The copyright holders make no representations
|
||||||
* The above copyright notice and this permission notice (including the next
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
* paragraph) shall be included in all copies or substantial portions of the
|
* is" without express or implied warranty.
|
||||||
* Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
* IN THE SOFTWARE.
|
|
||||||
*
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef LIBEVDEV_H
|
#ifndef LIBEVDEV_H
|
||||||
|
|
@ -163,7 +160,7 @@ extern "C" {
|
||||||
* License information
|
* License information
|
||||||
* ===================
|
* ===================
|
||||||
* libevdev is licensed under the
|
* libevdev is licensed under the
|
||||||
* [MIT license](http://cgit.freedesktop.org/libevdev/tree/COPYING).
|
* [X11 license](http://cgit.freedesktop.org/libevdev/tree/COPYING).
|
||||||
*
|
*
|
||||||
* Bindings
|
* Bindings
|
||||||
* ===================
|
* ===================
|
||||||
|
|
@ -500,11 +497,11 @@ extern "C" {
|
||||||
* <dd>supported, see libevdev_enable_event_code()</dd>
|
* <dd>supported, see libevdev_enable_event_code()</dd>
|
||||||
* <dt>EVIOCGKEYCODE:</dt>
|
* <dt>EVIOCGKEYCODE:</dt>
|
||||||
* <dd>currently not supported</dd>
|
* <dd>currently not supported</dd>
|
||||||
|
* <dt>EVIOCGKEYCODE:</dt>
|
||||||
|
* <dd>currently not supported</dd>
|
||||||
* <dt>EVIOCSKEYCODE:</dt>
|
* <dt>EVIOCSKEYCODE:</dt>
|
||||||
* <dd>currently not supported</dd>
|
* <dd>currently not supported</dd>
|
||||||
* <dt>EVIOCGKEYCODE_V2:</dt>
|
* <dt>EVIOCSKEYCODE:</dt>
|
||||||
* <dd>currently not supported</dd>
|
|
||||||
* <dt>EVIOCSKEYCODE_V2:</dt>
|
|
||||||
* <dd>currently not supported</dd>
|
* <dd>currently not supported</dd>
|
||||||
* <dt>EVIOCGNAME:</dt>
|
* <dt>EVIOCGNAME:</dt>
|
||||||
* <dd>supported, see libevdev_get_name()</dd>
|
* <dd>supported, see libevdev_get_name()</dd>
|
||||||
|
|
@ -544,10 +541,6 @@ extern "C" {
|
||||||
* <dt>EVIOCREVOKE:</dt>
|
* <dt>EVIOCREVOKE:</dt>
|
||||||
* <dd>currently not supported, see
|
* <dd>currently not supported, see
|
||||||
* http://lists.freedesktop.org/archives/input-tools/2014-January/000688.html</dd>
|
* http://lists.freedesktop.org/archives/input-tools/2014-January/000688.html</dd>
|
||||||
* <dt>EVIOCGMASK:</dt>
|
|
||||||
* <dd>currently not supported</dd>
|
|
||||||
* <dt>EVIOCSMASK:</dt>
|
|
||||||
* <dd>currently not supported</dd>
|
|
||||||
* </dl>
|
* </dl>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
@ -638,7 +631,7 @@ extern "C" {
|
||||||
* return ENOMEM;
|
* return ENOMEM;
|
||||||
*
|
*
|
||||||
* err = libevdev_set_fd(dev, fd);
|
* err = libevdev_set_fd(dev, fd);
|
||||||
* if (err < 0)
|
* if (err < 0) {
|
||||||
* printf("Failed (errno %d): %s\n", -err, strerror(-err));
|
* printf("Failed (errno %d): %s\n", -err, strerror(-err));
|
||||||
*
|
*
|
||||||
* libevdev_free(dev);
|
* libevdev_free(dev);
|
||||||
|
|
@ -1522,7 +1515,8 @@ const struct input_absinfo* libevdev_get_abs_info(const struct libevdev *dev, un
|
||||||
* the event.
|
* the event.
|
||||||
*
|
*
|
||||||
* If the device supports ABS_MT_SLOT, the value returned for any ABS_MT_*
|
* If the device supports ABS_MT_SLOT, the value returned for any ABS_MT_*
|
||||||
* event code is undefined. Use libevdev_get_slot_value() instead.
|
* event code is the value of the currently active slot. You should use
|
||||||
|
* libevdev_get_slot_value() instead.
|
||||||
*
|
*
|
||||||
* @param dev The evdev device, already initialized with libevdev_set_fd()
|
* @param dev The evdev device, already initialized with libevdev_set_fd()
|
||||||
* @param type The event type for the code to query (EV_SYN, EV_REL, etc.)
|
* @param type The event type for the code to query (EV_SYN, EV_REL, etc.)
|
||||||
|
|
@ -1563,7 +1557,8 @@ int libevdev_get_event_value(const struct libevdev *dev, unsigned int type, unsi
|
||||||
*
|
*
|
||||||
* @return 0 on success, or -1 on failure.
|
* @return 0 on success, or -1 on failure.
|
||||||
* @retval -1
|
* @retval -1
|
||||||
* - the device does not have the event type or code enabled, or
|
* - the device does not have the event type or
|
||||||
|
* - code enabled, or the code is outside the, or
|
||||||
* - the code is outside the allowed limits for the given type, or
|
* - the code is outside the allowed limits for the given type, or
|
||||||
* - the type cannot be set, or
|
* - the type cannot be set, or
|
||||||
* - the value is not permitted for the given code.
|
* - the value is not permitted for the given code.
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
/* SPDX-License-Identifier: MIT */
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013 David Herrmann <dh.herrmann@gmail.com>
|
* Copyright (c) 2013 David Herrmann <dh.herrmann@gmail.com>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
LIBEVDEV_1 {
|
LIBEVDEV_1 {
|
||||||
|
|
|
||||||
|
|
@ -70,10 +70,10 @@ def print_bits(bits, prefix):
|
||||||
if not hasattr(bits, prefix):
|
if not hasattr(bits, prefix):
|
||||||
return
|
return
|
||||||
print("static const char * const %s_map[%s_MAX + 1] = {" % (prefix, prefix.upper()))
|
print("static const char * const %s_map[%s_MAX + 1] = {" % (prefix, prefix.upper()))
|
||||||
for val, name in sorted(list(getattr(bits, prefix).items())):
|
for val, name in list(getattr(bits, prefix).items()):
|
||||||
print(" [%s] = \"%s\"," % (name, name))
|
print(" [%s] = \"%s\"," % (name, name))
|
||||||
if prefix == "key":
|
if prefix == "key":
|
||||||
for val, name in sorted(list(getattr(bits, "btn").items())):
|
for val, name in list(getattr(bits, "btn").items()):
|
||||||
print(" [%s] = \"%s\"," % (name, name))
|
print(" [%s] = \"%s\"," % (name, name))
|
||||||
print("};")
|
print("};")
|
||||||
print("")
|
print("")
|
||||||
|
|
@ -118,7 +118,7 @@ def print_lookup(bits, prefix):
|
||||||
if not hasattr(bits, prefix):
|
if not hasattr(bits, prefix):
|
||||||
return
|
return
|
||||||
|
|
||||||
names = sorted(list(getattr(bits, prefix).items()))
|
names = list(getattr(bits, prefix).items())
|
||||||
if prefix == "btn":
|
if prefix == "btn":
|
||||||
names = names + btn_additional
|
names = names + btn_additional
|
||||||
|
|
||||||
|
|
|
||||||
107
meson.build
107
meson.build
|
|
@ -1,14 +1,13 @@
|
||||||
project('libevdev', 'c',
|
project('libevdev', 'c',
|
||||||
version: '1.13.6', # change autotools version too
|
version: '1.10.0', # change autotools version too
|
||||||
license: 'MIT/Expat',
|
license: 'MIT/Expat',
|
||||||
default_options: [ 'c_std=gnu99', 'warning_level=2' ],
|
default_options: [ 'c_std=gnu99', 'warning_level=2' ],
|
||||||
meson_version: '>= 0.56.0')
|
meson_version: '>= 0.47.0')
|
||||||
|
|
||||||
libevdev_version = meson.project_version().split('.')
|
libevdev_version = meson.project_version().split('.')
|
||||||
|
|
||||||
dir_root = meson.project_source_root()
|
dir_src = join_paths(meson.source_root(), 'libevdev')
|
||||||
dir_src = dir_root / 'libevdev'
|
dir_src_test = join_paths(meson.source_root(), 'test')
|
||||||
dir_src_test = dir_root / 'test'
|
|
||||||
|
|
||||||
# Include directories
|
# Include directories
|
||||||
includes_include = include_directories('include')
|
includes_include = include_directories('include')
|
||||||
|
|
@ -38,10 +37,10 @@ config_h.set('_GNU_SOURCE', '1')
|
||||||
# Dependencies
|
# Dependencies
|
||||||
pkgconfig = import('pkgconfig')
|
pkgconfig = import('pkgconfig')
|
||||||
dep_lm = cc.find_library('m')
|
dep_lm = cc.find_library('m')
|
||||||
dep_rt = cc.find_library('rt')
|
|
||||||
|
|
||||||
input_h = dir_root / 'include' / 'linux' / host_machine.system() / 'input.h'
|
input_h = join_paths(meson.source_root(), 'include', 'linux', host_machine.system(), 'input.h')
|
||||||
input_event_codes_h = dir_root / 'include' / 'linux' / host_machine.system() / 'input-event-codes.h'
|
uinput_h = join_paths(meson.source_root(), 'include', 'linux', host_machine.system(), 'uinput.h')
|
||||||
|
input_event_codes_h = join_paths(meson.source_root(), 'include', 'linux', host_machine.system(), 'input-event-codes.h')
|
||||||
|
|
||||||
# event-names.h
|
# event-names.h
|
||||||
make_event_names = find_program('libevdev/make-event-names.py')
|
make_event_names = find_program('libevdev/make-event-names.py')
|
||||||
|
|
@ -55,7 +54,8 @@ event_names_h = configure_file(input: 'libevdev/libevdev.h',
|
||||||
install_headers('libevdev/libevdev.h',
|
install_headers('libevdev/libevdev.h',
|
||||||
'libevdev/libevdev-uinput.h',
|
'libevdev/libevdev-uinput.h',
|
||||||
subdir: 'libevdev-1.0/libevdev')
|
subdir: 'libevdev-1.0/libevdev')
|
||||||
src_libevdev = [event_names_h] + files(
|
src_libevdev = [
|
||||||
|
event_names_h,
|
||||||
'libevdev/libevdev.h',
|
'libevdev/libevdev.h',
|
||||||
'libevdev/libevdev-int.h',
|
'libevdev/libevdev-int.h',
|
||||||
'libevdev/libevdev-util.h',
|
'libevdev/libevdev-util.h',
|
||||||
|
|
@ -66,23 +66,24 @@ src_libevdev = [event_names_h] + files(
|
||||||
'libevdev/libevdev-names.c',
|
'libevdev/libevdev-names.c',
|
||||||
'include/linux/input.h',
|
'include/linux/input.h',
|
||||||
'include/linux/uinput.h',
|
'include/linux/uinput.h',
|
||||||
)
|
input_event_codes_h,
|
||||||
|
input_h,
|
||||||
|
uinput_h
|
||||||
|
]
|
||||||
|
|
||||||
mapfile = dir_src / 'libevdev.sym'
|
mapfile = join_paths(dir_src, 'libevdev.sym')
|
||||||
version_flag = '-Wl,--version-script,@0@'.format(mapfile)
|
version_flag = '-Wl,--version-script,@0@'.format(mapfile)
|
||||||
lib_libevdev = library('evdev',
|
lib_libevdev = library('evdev',
|
||||||
src_libevdev,
|
src_libevdev,
|
||||||
include_directories: [includes_include],
|
include_directories: [includes_include],
|
||||||
dependencies: [dep_rt],
|
dependencies: [],
|
||||||
version: libevdev_so_version,
|
version: libevdev_so_version,
|
||||||
link_args: version_flag,
|
link_args: version_flag,
|
||||||
link_depends: mapfile,
|
link_depends: mapfile,
|
||||||
install: true
|
install: true
|
||||||
)
|
)
|
||||||
|
|
||||||
inc_libevdev = include_directories('.')
|
dep_libevdev = declare_dependency(link_with: lib_libevdev)
|
||||||
dep_libevdev = declare_dependency(link_with: lib_libevdev,
|
|
||||||
include_directories: [inc_libevdev])
|
|
||||||
|
|
||||||
pkgconfig.generate(
|
pkgconfig.generate(
|
||||||
filebase: 'libevdev',
|
filebase: 'libevdev',
|
||||||
|
|
@ -102,36 +103,28 @@ install_man(manpage)
|
||||||
|
|
||||||
|
|
||||||
# tools
|
# tools
|
||||||
if not get_option('tools').disabled()
|
executable('libevdev-events',
|
||||||
executable('libevdev-events',
|
sources: ['tools/libevdev-events.c'],
|
||||||
sources: ['tools/libevdev-events.c'],
|
include_directories: [includes_include],
|
||||||
include_directories: [includes_include],
|
dependencies: dep_libevdev,
|
||||||
dependencies: dep_libevdev,
|
install: false)
|
||||||
install: false)
|
executable('touchpad-edge-detector',
|
||||||
executable('libevdev-list-codes',
|
sources: ['tools/touchpad-edge-detector.c'],
|
||||||
sources: ['tools/libevdev-list-codes.c'],
|
include_directories: [includes_include],
|
||||||
include_directories: [includes_include],
|
dependencies: [dep_libevdev, dep_lm],
|
||||||
dependencies: dep_libevdev,
|
install: true)
|
||||||
install: false)
|
executable('mouse-dpi-tool',
|
||||||
executable('touchpad-edge-detector',
|
sources: ['tools/mouse-dpi-tool.c'],
|
||||||
sources: ['tools/touchpad-edge-detector.c'],
|
include_directories: [includes_include],
|
||||||
include_directories: [includes_include],
|
dependencies: dep_libevdev,
|
||||||
dependencies: [dep_libevdev, dep_lm],
|
install: true)
|
||||||
install: true)
|
executable('libevdev-tweak-device',
|
||||||
executable('mouse-dpi-tool',
|
sources: ['tools/libevdev-tweak-device.c'],
|
||||||
sources: ['tools/mouse-dpi-tool.c'],
|
include_directories: [includes_include],
|
||||||
include_directories: [includes_include],
|
dependencies: dep_libevdev,
|
||||||
dependencies: dep_libevdev,
|
install: true)
|
||||||
install: true)
|
install_man('tools/libevdev-tweak-device.1',
|
||||||
executable('libevdev-tweak-device',
|
'tools/touchpad-edge-detector.1')
|
||||||
sources: ['tools/libevdev-tweak-device.c'],
|
|
||||||
include_directories: [includes_include],
|
|
||||||
dependencies: dep_libevdev,
|
|
||||||
install: true)
|
|
||||||
install_man('tools/libevdev-tweak-device.1',
|
|
||||||
'tools/touchpad-edge-detector.1',
|
|
||||||
'tools/mouse-dpi-tool.1')
|
|
||||||
endif
|
|
||||||
|
|
||||||
# tests
|
# tests
|
||||||
dep_check = dependency('check', version: '>= 0.9.9',
|
dep_check = dependency('check', version: '>= 0.9.9',
|
||||||
|
|
@ -165,7 +158,7 @@ if dep_check.found()
|
||||||
include_directories: [includes_include],
|
include_directories: [includes_include],
|
||||||
dependencies: [dep_libevdev, dep_check],
|
dependencies: [dep_libevdev, dep_check],
|
||||||
install: false)
|
install: false)
|
||||||
test('test-event-codes', test_event_codes, suite: ['library', 'needs-uinput'])
|
test('test-event-codes', test_event_codes, suite: 'library')
|
||||||
|
|
||||||
test_internals = executable('test-internals',
|
test_internals = executable('test-internals',
|
||||||
sources: src_common + [
|
sources: src_common + [
|
||||||
|
|
@ -174,7 +167,7 @@ if dep_check.found()
|
||||||
include_directories: [includes_include],
|
include_directories: [includes_include],
|
||||||
dependencies: [dep_libevdev, dep_check],
|
dependencies: [dep_libevdev, dep_check],
|
||||||
install: false)
|
install: false)
|
||||||
test('test-internals', test_internals, suite: ['library', 'needs-uinput'])
|
test('test-internals', test_internals, suite: 'library')
|
||||||
|
|
||||||
test_uinput = executable('test-uinput',
|
test_uinput = executable('test-uinput',
|
||||||
sources: src_common + [
|
sources: src_common + [
|
||||||
|
|
@ -183,7 +176,7 @@ if dep_check.found()
|
||||||
include_directories: [includes_include],
|
include_directories: [includes_include],
|
||||||
dependencies: [dep_libevdev, dep_check],
|
dependencies: [dep_libevdev, dep_check],
|
||||||
install: false)
|
install: false)
|
||||||
test('test-uinput', test_uinput, suite: ['library', 'needs-uinput'])
|
test('test-uinput', test_uinput, suite: 'library')
|
||||||
|
|
||||||
test_libevdev = executable('test-libevdev',
|
test_libevdev = executable('test-libevdev',
|
||||||
sources: src_common + [
|
sources: src_common + [
|
||||||
|
|
@ -194,7 +187,7 @@ if dep_check.found()
|
||||||
include_directories: [includes_include],
|
include_directories: [includes_include],
|
||||||
dependencies: [dep_libevdev, dep_check],
|
dependencies: [dep_libevdev, dep_check],
|
||||||
install: false)
|
install: false)
|
||||||
test('test-libevdev', test_libevdev, suite: ['library', 'needs-uinput'], env: ['CK_DEFAULT_TIMEOUT=10'])
|
test('test-libevdev', test_libevdev, suite: 'library')
|
||||||
|
|
||||||
test_kernel = executable('test-kernel',
|
test_kernel = executable('test-kernel',
|
||||||
sources: src_common + [
|
sources: src_common + [
|
||||||
|
|
@ -203,7 +196,7 @@ if dep_check.found()
|
||||||
include_directories: [includes_include],
|
include_directories: [includes_include],
|
||||||
dependencies: [dep_libevdev, dep_check],
|
dependencies: [dep_libevdev, dep_check],
|
||||||
install: false)
|
install: false)
|
||||||
test('test-kernel', test_kernel, suite: ['kernel', 'needs-uinput'])
|
test('test-kernel', test_kernel, suite: 'kernel')
|
||||||
|
|
||||||
|
|
||||||
valgrind = find_program('valgrind', required: false)
|
valgrind = find_program('valgrind', required: false)
|
||||||
|
|
@ -212,14 +205,14 @@ if dep_check.found()
|
||||||
valgrind_env.set('CK_TIMEOUT_MULTIPLIER', '10')
|
valgrind_env.set('CK_TIMEOUT_MULTIPLIER', '10')
|
||||||
valgrind_env.set('CK_FORK', 'no')
|
valgrind_env.set('CK_FORK', 'no')
|
||||||
valgrind_env.set('RUNNING_ON_VALGRIND', '1')
|
valgrind_env.set('RUNNING_ON_VALGRIND', '1')
|
||||||
valgrind_suppressions_file = dir_src_test / 'valgrind.suppressions'
|
valgrind_suppressions_file = join_paths(dir_src_test, 'valgrind.suppressions')
|
||||||
add_test_setup('valgrind',
|
add_test_setup('valgrind',
|
||||||
exe_wrapper: [ valgrind,
|
exe_wrapper: [ valgrind,
|
||||||
'--leak-check=full',
|
'--leak-check=full',
|
||||||
'--gen-suppressions=all',
|
'--gen-suppressions=all',
|
||||||
'--error-exitcode=3',
|
'--error-exitcode=3',
|
||||||
'--suppressions=' + valgrind_suppressions_file ],
|
'--suppressions=' + valgrind_suppressions_file ],
|
||||||
env: valgrind_env,
|
env: valgrind_env,
|
||||||
timeout_multiplier: 100)
|
timeout_multiplier: 100)
|
||||||
else
|
else
|
||||||
message('valgrind not found, disabling valgrind test suite')
|
message('valgrind not found, disabling valgrind test suite')
|
||||||
|
|
@ -233,10 +226,12 @@ endif
|
||||||
|
|
||||||
doxygen = find_program('doxygen', required: get_option('documentation'))
|
doxygen = find_program('doxygen', required: get_option('documentation'))
|
||||||
if doxygen.found()
|
if doxygen.found()
|
||||||
|
doxygen = find_program('doxygen')
|
||||||
|
|
||||||
src_doxygen = files(
|
src_doxygen = files(
|
||||||
# source files
|
# source files
|
||||||
dir_src / 'libevdev.h',
|
join_paths(dir_src, 'libevdev.h'),
|
||||||
dir_src / 'libevdev-uinput.h',
|
join_paths(dir_src, 'libevdev-uinput.h'),
|
||||||
# style files
|
# style files
|
||||||
'doc/style/bootstrap.css',
|
'doc/style/bootstrap.css',
|
||||||
'doc/style/customdoxygen.css',
|
'doc/style/customdoxygen.css',
|
||||||
|
|
@ -262,8 +257,8 @@ if doxygen.found()
|
||||||
doc_config.set('PACKAGE_NAME', meson.project_name())
|
doc_config.set('PACKAGE_NAME', meson.project_name())
|
||||||
doc_config.set('PACKAGE_VERSION', meson.project_version())
|
doc_config.set('PACKAGE_VERSION', meson.project_version())
|
||||||
doc_config.set('builddir', meson.current_build_dir())
|
doc_config.set('builddir', meson.current_build_dir())
|
||||||
doc_config.set('top_srcdir', dir_root)
|
doc_config.set('top_srcdir', meson.source_root())
|
||||||
doc_config.set('srcdir', dir_root / 'doc')
|
doc_config.set('srcdir', join_paths(meson.source_root(), 'doc'))
|
||||||
|
|
||||||
doxyfile = configure_file(input: 'doc/libevdev.doxygen.in',
|
doxyfile = configure_file(input: 'doc/libevdev.doxygen.in',
|
||||||
output: 'libevdev.doxygen',
|
output: 'libevdev.doxygen',
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,11 @@ option('tests',
|
||||||
type: 'feature',
|
type: 'feature',
|
||||||
value: 'enabled',
|
value: 'enabled',
|
||||||
description: 'Build the tests')
|
description: 'Build the tests')
|
||||||
option('tools',
|
|
||||||
type: 'feature',
|
|
||||||
value: 'enabled',
|
|
||||||
description: 'Build the tools')
|
|
||||||
option('documentation',
|
option('documentation',
|
||||||
type: 'feature',
|
type: 'feature',
|
||||||
value: 'enabled',
|
value: 'enabled',
|
||||||
description: 'Build the documentation')
|
description: 'Build the documentation')
|
||||||
option('coverity',
|
option('coverity',
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
value: false,
|
value: 'false',
|
||||||
description: 'Enable coverity build fixes, see meson.build for details')
|
description: 'Enable coverity build fixes, see meson.build for details')
|
||||||
|
|
|
||||||
|
|
@ -89,11 +89,24 @@ test_kernel_SOURCES = \
|
||||||
test_kernel_CFLAGS = -I$(top_srcdir)
|
test_kernel_CFLAGS = -I$(top_srcdir)
|
||||||
test_kernel_LDADD = $(CHECK_LIBS) $(top_builddir)/libevdev/libevdev.la
|
test_kernel_LDADD = $(CHECK_LIBS) $(top_builddir)/libevdev/libevdev.la
|
||||||
|
|
||||||
|
if HAVE_VALGRIND
|
||||||
|
VALGRIND_FLAGS=--leak-check=full \
|
||||||
|
--quiet \
|
||||||
|
--error-exitcode=3 \
|
||||||
|
--suppressions=$(srcdir)/valgrind.suppressions
|
||||||
|
|
||||||
|
valgrind:
|
||||||
|
$(MAKE) check-TESTS CK_TIMEOUT_MULTIPLIER=10 LOG_COMPILER="$(VALGRIND)" LOG_FLAGS="$(VALGRIND_FLAGS)"
|
||||||
|
|
||||||
|
check_local_deps += valgrind
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
if GCOV_ENABLED
|
if GCOV_ENABLED
|
||||||
|
|
||||||
CLEANFILES = gcov-reports/*.gcov gcov-reports/summary.txt *.gcno *.gcda
|
CLEANFILES = gcov-reports/*.gcov gcov-reports/summary.txt *.gcno *.gcda
|
||||||
|
|
||||||
gcov-report: generate-gcov-report.sh
|
gcov-report: generate-gcov-report.sh check-TESTS
|
||||||
$(AM_V_GEN)$(srcdir)/generate-gcov-report.sh gcov-reports $(top_builddir)/libevdev $(builddir)
|
$(AM_V_GEN)$(srcdir)/generate-gcov-report.sh gcov-reports $(top_builddir)/libevdev $(builddir)
|
||||||
|
|
||||||
gcov: gcov-report
|
gcov: gcov-report
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2019 Red Hat, Inc.
|
* Copyright © 2019 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 David Herrmann <dh.herrmann@gmail.com>
|
* Copyright © 2013 David Herrmann <dh.herrmann@gmail.com>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
@ -158,7 +175,7 @@ START_TEST(test_code_sw_name)
|
||||||
ck_assert_str_eq(libevdev_event_code_get_name(EV_SW, SW_RFKILL_ALL), "SW_RFKILL_ALL");
|
ck_assert_str_eq(libevdev_event_code_get_name(EV_SW, SW_RFKILL_ALL), "SW_RFKILL_ALL");
|
||||||
ck_assert_str_eq(libevdev_event_code_get_name(EV_SW, SW_LINEIN_INSERT), "SW_LINEIN_INSERT");
|
ck_assert_str_eq(libevdev_event_code_get_name(EV_SW, SW_LINEIN_INSERT), "SW_LINEIN_INSERT");
|
||||||
ck_assert_str_eq(libevdev_event_code_get_name(EV_SW, SW_PEN_INSERTED), "SW_PEN_INSERTED");
|
ck_assert_str_eq(libevdev_event_code_get_name(EV_SW, SW_PEN_INSERTED), "SW_PEN_INSERTED");
|
||||||
ck_assert_str_eq(libevdev_event_code_get_name(EV_SW, SW_MAX), "SW_USB_INSERT");
|
ck_assert_str_eq(libevdev_event_code_get_name(EV_SW, SW_MAX), "SW_MACHINE_COVER");
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2014 Red Hat, Inc.
|
* Copyright © 2014 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
@ -617,12 +634,12 @@ START_TEST(test_syn_delta_sw)
|
||||||
EV_SYN, SYN_DROPPED,
|
EV_SYN, SYN_DROPPED,
|
||||||
EV_SW, SW_HEADPHONE_INSERT,
|
EV_SW, SW_HEADPHONE_INSERT,
|
||||||
EV_SW, SW_MICROPHONE_INSERT,
|
EV_SW, SW_MICROPHONE_INSERT,
|
||||||
EV_SW, SW_MACHINE_COVER, /* Replace with SW_MAX once runners are on 6.16 */
|
EV_SW, SW_MAX,
|
||||||
-1);
|
-1);
|
||||||
|
|
||||||
uinput_device_event(uidev, EV_SW, SW_HEADPHONE_INSERT, 1);
|
uinput_device_event(uidev, EV_SW, SW_HEADPHONE_INSERT, 1);
|
||||||
uinput_device_event(uidev, EV_SW, SW_MICROPHONE_INSERT, 1);
|
uinput_device_event(uidev, EV_SW, SW_MICROPHONE_INSERT, 1);
|
||||||
uinput_device_event(uidev, EV_SW, SW_MACHINE_COVER, 1);
|
uinput_device_event(uidev, EV_SW, SW_MAX, 1);
|
||||||
uinput_device_event(uidev, EV_SYN, SYN_REPORT, 0);
|
uinput_device_event(uidev, EV_SYN, SYN_REPORT, 0);
|
||||||
rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_FORCE_SYNC, &ev);
|
rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_FORCE_SYNC, &ev);
|
||||||
ck_assert_int_eq(rc, LIBEVDEV_READ_STATUS_SYNC);
|
ck_assert_int_eq(rc, LIBEVDEV_READ_STATUS_SYNC);
|
||||||
|
|
@ -635,7 +652,7 @@ START_TEST(test_syn_delta_sw)
|
||||||
assert_event(&ev, EV_SW, SW_MICROPHONE_INSERT, 1);
|
assert_event(&ev, EV_SW, SW_MICROPHONE_INSERT, 1);
|
||||||
rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_SYNC, &ev);
|
rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_SYNC, &ev);
|
||||||
ck_assert_int_eq(rc, LIBEVDEV_READ_STATUS_SYNC);
|
ck_assert_int_eq(rc, LIBEVDEV_READ_STATUS_SYNC);
|
||||||
assert_event(&ev, EV_SW, SW_MACHINE_COVER, 1);
|
assert_event(&ev, EV_SW, SW_MAX, 1);
|
||||||
rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_SYNC, &ev);
|
rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_SYNC, &ev);
|
||||||
ck_assert_int_eq(rc, LIBEVDEV_READ_STATUS_SYNC);
|
ck_assert_int_eq(rc, LIBEVDEV_READ_STATUS_SYNC);
|
||||||
assert_event(&ev, EV_SYN, SYN_REPORT, 0);
|
assert_event(&ev, EV_SYN, SYN_REPORT, 0);
|
||||||
|
|
@ -644,7 +661,7 @@ START_TEST(test_syn_delta_sw)
|
||||||
|
|
||||||
ck_assert_int_eq(libevdev_get_event_value(dev, EV_SW, SW_HEADPHONE_INSERT), 1);
|
ck_assert_int_eq(libevdev_get_event_value(dev, EV_SW, SW_HEADPHONE_INSERT), 1);
|
||||||
ck_assert_int_eq(libevdev_get_event_value(dev, EV_SW, SW_MICROPHONE_INSERT), 1);
|
ck_assert_int_eq(libevdev_get_event_value(dev, EV_SW, SW_MICROPHONE_INSERT), 1);
|
||||||
ck_assert_int_eq(libevdev_get_event_value(dev, EV_SW, SW_MACHINE_COVER), 1);
|
ck_assert_int_eq(libevdev_get_event_value(dev, EV_SW, SW_MAX), 1);
|
||||||
|
|
||||||
uinput_device_free(uidev);
|
uinput_device_free(uidev);
|
||||||
libevdev_free(dev);
|
libevdev_free(dev);
|
||||||
|
|
@ -1008,206 +1025,6 @@ START_TEST(test_syn_delta_tracking_ids_btntool)
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
START_TEST(test_syn_delta_mt_tool_type)
|
|
||||||
{
|
|
||||||
struct uinput_device* uidev;
|
|
||||||
struct libevdev *dev;
|
|
||||||
int rc;
|
|
||||||
struct input_event ev;
|
|
||||||
int i;
|
|
||||||
const int num_slots = 15;
|
|
||||||
int slot = -1;
|
|
||||||
unsigned long terminated[NLONGS(num_slots)];
|
|
||||||
struct input_absinfo abs[7] = {
|
|
||||||
{ .value = ABS_X, .maximum = 1000 },
|
|
||||||
{ .value = ABS_Y, .maximum = 1000 },
|
|
||||||
{ .value = ABS_MT_POSITION_X, .maximum = 1000 },
|
|
||||||
{ .value = ABS_MT_POSITION_Y, .maximum = 1000 },
|
|
||||||
{ .value = ABS_MT_TOOL_TYPE, .maximum = MT_TOOL_PALM },
|
|
||||||
{ .value = ABS_MT_SLOT, .maximum = num_slots },
|
|
||||||
{ .value = ABS_MT_TRACKING_ID, .minimum = -1, .maximum = 0xff },
|
|
||||||
};
|
|
||||||
|
|
||||||
test_create_abs_device(&uidev, &dev,
|
|
||||||
ARRAY_LENGTH(abs), abs,
|
|
||||||
EV_SYN, SYN_REPORT,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
for (i = num_slots; i >= 0; i--) {
|
|
||||||
int tool_type = MT_TOOL_FINGER;
|
|
||||||
switch (i) {
|
|
||||||
case 0:
|
|
||||||
case 1:
|
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
tool_type = MT_TOOL_FINGER;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
case 5:
|
|
||||||
case 6:
|
|
||||||
case 7:
|
|
||||||
tool_type = MT_TOOL_PALM;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
uinput_device_event_multiple(uidev,
|
|
||||||
EV_ABS, ABS_MT_SLOT, i,
|
|
||||||
EV_ABS, ABS_MT_TRACKING_ID, i,
|
|
||||||
EV_ABS, ABS_X, 100 + i,
|
|
||||||
EV_ABS, ABS_Y, 500 + i,
|
|
||||||
EV_ABS, ABS_MT_POSITION_X, 100 + i,
|
|
||||||
EV_ABS, ABS_MT_POSITION_Y, 500 + i,
|
|
||||||
EV_ABS, ABS_MT_TOOL_TYPE, tool_type,
|
|
||||||
EV_SYN, SYN_REPORT, 0,
|
|
||||||
-1, -1);
|
|
||||||
do {
|
|
||||||
rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_NORMAL, &ev);
|
|
||||||
ck_assert_int_ne(rc, LIBEVDEV_READ_STATUS_SYNC);
|
|
||||||
} while (rc >= 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* we have a bunch of touches now, and libevdev knows it. Change all
|
|
||||||
* touches */
|
|
||||||
for (i = num_slots; i >= 0; i--) {
|
|
||||||
uinput_device_event(uidev, EV_ABS, ABS_MT_SLOT, i);
|
|
||||||
switch (i) {
|
|
||||||
/* Slot 0 is a finger and stays a finger */
|
|
||||||
case 0:
|
|
||||||
/* Slot 4 is a palm and stays a palm */
|
|
||||||
case 4:
|
|
||||||
uinput_device_event_multiple(uidev,
|
|
||||||
EV_ABS, ABS_X, 200 + i,
|
|
||||||
EV_ABS, ABS_Y, 700 + i,
|
|
||||||
EV_ABS, ABS_MT_POSITION_X, 200 + i,
|
|
||||||
EV_ABS, ABS_MT_POSITION_Y, 700 + i,
|
|
||||||
-1, -1);
|
|
||||||
break;
|
|
||||||
/* Slot 1 is a finger and changes active touch to palm */
|
|
||||||
case 1:
|
|
||||||
uinput_device_event(uidev, EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_PALM);
|
|
||||||
break;
|
|
||||||
/* Slot 2 is a finger and terminates */
|
|
||||||
case 2:
|
|
||||||
/* Slot 6 is a palm and terminates */
|
|
||||||
case 6:
|
|
||||||
uinput_device_event(uidev, EV_ABS, ABS_MT_TRACKING_ID, -1);
|
|
||||||
break;
|
|
||||||
/* Slot 3 is a finger and restarts as finger */
|
|
||||||
case 3:
|
|
||||||
/* Slot 5 is a palm and restarts as finger */
|
|
||||||
case 5:
|
|
||||||
uinput_device_event_multiple(uidev,
|
|
||||||
EV_ABS, ABS_MT_TRACKING_ID, num_slots + i,
|
|
||||||
EV_ABS, ABS_X, 200 + i,
|
|
||||||
EV_ABS, ABS_Y, 700 + i,
|
|
||||||
EV_ABS, ABS_MT_POSITION_X, 200 + i,
|
|
||||||
EV_ABS, ABS_MT_POSITION_Y, 700 + i,
|
|
||||||
EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_FINGER,
|
|
||||||
-1, -1);
|
|
||||||
break;
|
|
||||||
/* Slot 7 is a palm and restarts and terminates again as finger */
|
|
||||||
case 7:
|
|
||||||
uinput_device_event(uidev, EV_ABS, ABS_MT_TRACKING_ID, -1);
|
|
||||||
uinput_device_event(uidev, EV_SYN, SYN_REPORT, 0);
|
|
||||||
uinput_device_event_multiple(uidev,
|
|
||||||
EV_ABS, ABS_MT_TRACKING_ID, num_slots + i,
|
|
||||||
EV_ABS, ABS_X, 200 + i,
|
|
||||||
EV_ABS, ABS_Y, 700 + i,
|
|
||||||
EV_ABS, ABS_MT_POSITION_X, 200 + i,
|
|
||||||
EV_ABS, ABS_MT_POSITION_Y, 700 + i,
|
|
||||||
EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_FINGER,
|
|
||||||
-1, -1);
|
|
||||||
uinput_device_event(uidev, EV_ABS, ABS_MT_TRACKING_ID, -1);
|
|
||||||
uinput_device_event(uidev, EV_SYN, SYN_REPORT, 0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
uinput_device_event(uidev, EV_SYN, SYN_REPORT, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Force sync */
|
|
||||||
rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_FORCE_SYNC, &ev);
|
|
||||||
ck_assert_int_eq(rc, LIBEVDEV_READ_STATUS_SYNC);
|
|
||||||
|
|
||||||
/* now check for the right tracking IDs */
|
|
||||||
memset(terminated, 0, sizeof(terminated));
|
|
||||||
slot = -1;
|
|
||||||
while ((rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_SYNC, &ev)) != -EAGAIN) {
|
|
||||||
if (libevdev_event_is_code(&ev, EV_SYN, SYN_REPORT))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (libevdev_event_is_code(&ev, EV_ABS, ABS_MT_SLOT)) {
|
|
||||||
slot = ev.value;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (libevdev_event_is_code(&ev, EV_ABS, ABS_X) ||
|
|
||||||
libevdev_event_is_code(&ev, EV_ABS, ABS_Y))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
ck_assert_int_ne(slot, -1);
|
|
||||||
|
|
||||||
if (libevdev_event_is_code(&ev, EV_ABS, ABS_MT_TRACKING_ID)) {
|
|
||||||
switch (slot) {
|
|
||||||
case 0:
|
|
||||||
case 1:
|
|
||||||
case 4:
|
|
||||||
ck_abort_msg("No ABS_MT_TRACKING_ID expected for this slot");
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
case 6:
|
|
||||||
case 7:
|
|
||||||
ck_assert_int_eq(ev.value, -1);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
case 5:
|
|
||||||
if (!bit_is_set(terminated, slot)) {
|
|
||||||
ck_assert_int_eq(ev.value, -1);
|
|
||||||
set_bit(terminated, slot);
|
|
||||||
} else {
|
|
||||||
ck_assert_int_eq(ev.value, num_slots + slot);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (libevdev_event_is_code(&ev, EV_ABS, ABS_MT_TOOL_TYPE)) {
|
|
||||||
switch (slot) {
|
|
||||||
case 0:
|
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
case 4:
|
|
||||||
case 6:
|
|
||||||
ck_abort_msg("No ABS_MT_TOOL_TYPE expected for this slot");
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
ck_assert_int_eq(ev.value, MT_TOOL_PALM);
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
case 7:
|
|
||||||
ck_assert_int_eq(ev.value, MT_TOOL_FINGER);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(ev.code) {
|
|
||||||
case ABS_MT_POSITION_X:
|
|
||||||
ck_assert_int_eq(ev.value, 200 + slot);
|
|
||||||
break;
|
|
||||||
case ABS_MT_POSITION_Y:
|
|
||||||
ck_assert_int_eq(ev.value, 700 + slot);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ck_abort();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uinput_device_free(uidev);
|
|
||||||
libevdev_free(dev);
|
|
||||||
}
|
|
||||||
END_TEST
|
|
||||||
|
|
||||||
START_TEST(test_syn_delta_late_sync)
|
START_TEST(test_syn_delta_late_sync)
|
||||||
{
|
{
|
||||||
struct uinput_device* uidev;
|
struct uinput_device* uidev;
|
||||||
|
|
@ -2260,7 +2077,6 @@ TEST_SUITE_ROOT_PRIVILEGES(libevdev_events)
|
||||||
add_test(s, test_syn_delta_late_sync);
|
add_test(s, test_syn_delta_late_sync);
|
||||||
add_test(s, test_syn_delta_tracking_ids);
|
add_test(s, test_syn_delta_tracking_ids);
|
||||||
add_test(s, test_syn_delta_tracking_ids_btntool);
|
add_test(s, test_syn_delta_tracking_ids_btntool);
|
||||||
add_test(s, test_syn_delta_mt_tool_type);
|
|
||||||
|
|
||||||
add_test(s, test_skipped_sync);
|
add_test(s, test_skipped_sync);
|
||||||
add_test(s, test_incomplete_sync);
|
add_test(s, test_incomplete_sync);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
@ -116,11 +133,10 @@ START_TEST(test_event_codes)
|
||||||
test_create_abs_device(&uidev, &dev,
|
test_create_abs_device(&uidev, &dev,
|
||||||
1, &abs,
|
1, &abs,
|
||||||
-1);
|
-1);
|
||||||
} else {
|
} else
|
||||||
test_create_device(&uidev, &dev,
|
test_create_device(&uidev, &dev,
|
||||||
*evbit, code,
|
*evbit, code,
|
||||||
-1);
|
-1);
|
||||||
}
|
|
||||||
|
|
||||||
ck_assert_msg(libevdev_has_event_type(dev, *evbit), "for event type %d\n", *evbit);
|
ck_assert_msg(libevdev_has_event_type(dev, *evbit), "for event type %d\n", *evbit);
|
||||||
ck_assert_msg(libevdev_has_event_code(dev, *evbit, code), "for type %d code %d", *evbit, code);
|
ck_assert_msg(libevdev_has_event_code(dev, *evbit, code), "for type %d code %d", *evbit, code);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
@ -108,7 +125,7 @@ int main(void)
|
||||||
srunner_add_suite(sr, t->setup());
|
srunner_add_suite(sr, t->setup());
|
||||||
}
|
}
|
||||||
|
|
||||||
srunner_run_all(sr, CK_ENV);
|
srunner_run_all(sr, CK_NORMAL);
|
||||||
|
|
||||||
failed = srunner_ntests_failed(sr);
|
failed = srunner_ntests_failed(sr);
|
||||||
srunner_free(sr);
|
srunner_free(sr);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
noinst_PROGRAMS = libevdev-events libevdev-list-codes
|
noinst_PROGRAMS = libevdev-events
|
||||||
bin_PROGRAMS = \
|
bin_PROGRAMS = \
|
||||||
touchpad-edge-detector \
|
touchpad-edge-detector \
|
||||||
mouse-dpi-tool \
|
mouse-dpi-tool \
|
||||||
|
|
@ -10,9 +10,6 @@ libevdev_ldadd = $(top_builddir)/libevdev/libevdev.la
|
||||||
libevdev_events_SOURCES = libevdev-events.c
|
libevdev_events_SOURCES = libevdev-events.c
|
||||||
libevdev_events_LDADD = $(libevdev_ldadd)
|
libevdev_events_LDADD = $(libevdev_ldadd)
|
||||||
|
|
||||||
libevdev_list_codes_SOURCES = libevdev-list-codes.c
|
|
||||||
libevdev_list_codes_LDADD = $(libevdev_ldadd)
|
|
||||||
|
|
||||||
touchpad_edge_detector_SOURCES = touchpad-edge-detector.c
|
touchpad_edge_detector_SOURCES = touchpad-edge-detector.c
|
||||||
touchpad_edge_detector_LDADD = $(libevdev_ldadd)
|
touchpad_edge_detector_LDADD = $(libevdev_ldadd)
|
||||||
|
|
||||||
|
|
@ -24,6 +21,5 @@ libevdev_tweak_device_LDADD = $(libevdev_ldadd)
|
||||||
|
|
||||||
dist_man_MANS = \
|
dist_man_MANS = \
|
||||||
libevdev-tweak-device.1 \
|
libevdev-tweak-device.1 \
|
||||||
mouse-dpi-tool.1 \
|
|
||||||
touchpad-edge-detector.1 \
|
touchpad-edge-detector.1 \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2013 Red Hat, Inc.
|
* Copyright © 2013 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
|
||||||
* Copyright © 2021 Red Hat, Inc.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Lists all event types and codes currently known by libevdev. */
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <linux/input.h>
|
|
||||||
#include "libevdev/libevdev.h"
|
|
||||||
|
|
||||||
static void
|
|
||||||
list_event_codes(unsigned int type, unsigned int max)
|
|
||||||
{
|
|
||||||
const char *typestr = libevdev_event_type_get_name(type);
|
|
||||||
|
|
||||||
if (!typestr)
|
|
||||||
return;
|
|
||||||
|
|
||||||
printf("- %s:\n", typestr);
|
|
||||||
|
|
||||||
for (unsigned int code = 0; code <= max; code++) {
|
|
||||||
const char *str = libevdev_event_code_get_name(type, code);
|
|
||||||
|
|
||||||
if (!str)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
printf(" %d: %s\n", code, str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main (int argc, char **argv)
|
|
||||||
{
|
|
||||||
printf("codes:\n");
|
|
||||||
for (unsigned int type = 0; type <= EV_MAX; type++) {
|
|
||||||
int max = libevdev_event_type_get_max(type);
|
|
||||||
if (max == -1)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
list_event_codes(type, (unsigned int)max);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2014 Red Hat, Inc.
|
* Copyright © 2014 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
* the above copyright notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting documentation, and
|
||||||
|
* that the name of the copyright holders not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. The copyright holders make no representations
|
||||||
|
* about the suitability of this software for any purpose. It is provided "as
|
||||||
|
* is" without express or implied warranty.
|
||||||
|
*
|
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
.TH MOUSE-DPI-TOOL "1"
|
|
||||||
.SH NAME
|
|
||||||
mouse-dpi-tool \- mouse resolution estimation tool
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.BR mouse-dpi-tool " <\fIevdev device\fP>"
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.B mouse-dpi-tool
|
|
||||||
reads relative events (mouse movement events) and calculates the
|
|
||||||
distance covered and maximum frequency of the incoming events.
|
|
||||||
Combined with a measurement of the actual distance physically covered,
|
|
||||||
this allows the mouse's resolution to be estimated.
|
|
||||||
.PP
|
|
||||||
Some mouse devices provide dynamic frequencies, it is
|
|
||||||
recommended to measure multiple times to obtain the highest value.
|
|
||||||
.PP
|
|
||||||
.SH OPTIONS
|
|
||||||
.B mouse-dpi-tool
|
|
||||||
accepts no options.
|
|
||||||
|
|
@ -1,6 +1,24 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2014 Red Hat, Inc.
|
* Copyright © 2014 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software
|
||||||
|
* and its documentation for any purpose is hereby granted without
|
||||||
|
* fee, provided that the above copyright notice appear in all copies
|
||||||
|
* and that both that copyright notice and this permission notice
|
||||||
|
* appear in supporting documentation, and that the name of Red Hat
|
||||||
|
* not be used in advertising or publicity pertaining to distribution
|
||||||
|
* of the software without specific, written prior permission. Red
|
||||||
|
* Hat makes no representations about the suitability of this software
|
||||||
|
* for any purpose. It is provided "as is" without express or implied
|
||||||
|
* warranty.
|
||||||
|
*
|
||||||
|
* THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
|
||||||
|
* NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
|
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
||||||
|
|
@ -2,36 +2,6 @@
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
tag="$1"
|
make
|
||||||
case $tag in
|
rsync --delete -avz doc/html/ freedesktop.org:/srv/www.freedesktop.org/www/software/libevdev/doc/latest
|
||||||
-h|--help)
|
|
||||||
echo "Usage: $0 <tag>"
|
|
||||||
echo "Builds the libevdev documentation and rsyncs it to the freedesktop.org server."
|
|
||||||
echo ""
|
|
||||||
echo "Options:"
|
|
||||||
echo " tag ... the tag to build (default: master)"
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
1*)
|
|
||||||
# Helper so we can run it with the numerical tag only, tags
|
|
||||||
# are all prefixed with libevdev
|
|
||||||
tag="libevdev-$tag"
|
|
||||||
;;
|
|
||||||
**)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
tag=${tag:-master}
|
|
||||||
|
|
||||||
dir=$(mktemp -d --tmpdir='' libevdev-doc.XXX)
|
|
||||||
git clone --depth 1 --branch "$tag" https://gitlab.freedesktop.org/libevdev/libevdev.git "$dir"
|
|
||||||
pushd $dir
|
|
||||||
builddir=_doc_build
|
|
||||||
rm -rf "$builddir"
|
|
||||||
meson setup "$builddir"
|
|
||||||
ninja -C "$builddir"
|
|
||||||
|
|
||||||
# Strip libevdev- prefix from the tag and replace master with latest, whichever applies
|
|
||||||
htmldir=${tag/#libevdev-/}
|
|
||||||
htmldir=${htmldir/master/latest}
|
|
||||||
rsync --delete -avz "$builddir/html/" freedesktop.org:/srv/www.freedesktop.org/www/software/libevdev/doc/${htmldir}
|
|
||||||
popd
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,24 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2014 Red Hat, Inc.
|
* Copyright © 2014 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, distribute, and sell this software
|
||||||
|
* and its documentation for any purpose is hereby granted without
|
||||||
|
* fee, provided that the above copyright notice appear in all copies
|
||||||
|
* and that both that copyright notice and this permission notice
|
||||||
|
* appear in supporting documentation, and that the name of Red Hat
|
||||||
|
* not be used in advertising or publicity pertaining to distribution
|
||||||
|
* of the software without specific, written prior permission. Red
|
||||||
|
* Hat makes no representations about the suitability of this software
|
||||||
|
* for any purpose. It is provided "as is" without express or implied
|
||||||
|
* warranty.
|
||||||
|
*
|
||||||
|
* THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
|
||||||
|
* NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
|
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue