mirror of
https://gitlab.freedesktop.org/libevdev/libevdev.git
synced 2025-12-20 05:40:05 +01:00
Compare commits
59 commits
libevdev-1
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
be44b6e6a8 | ||
|
|
139b58e135 | ||
|
|
c6bf238c4e | ||
|
|
f3a9c2038d | ||
|
|
9289c9826c | ||
|
|
a30a461e82 | ||
|
|
d093b4752a | ||
|
|
ac0056961c | ||
|
|
d06abb81e5 | ||
|
|
cfd803566c | ||
|
|
1a8324aeb8 | ||
|
|
72fa564092 | ||
|
|
2342d8c9ee | ||
|
|
54c083378e | ||
|
|
5501633d51 | ||
|
|
080d1d097a | ||
|
|
414757317d | ||
|
|
fb5402020f | ||
|
|
de6ae19483 | ||
|
|
82560ca9d7 | ||
|
|
1ee2399ba8 | ||
|
|
d852e59dd0 | ||
|
|
8d8a3d8fc7 | ||
|
|
cd9bea914c | ||
|
|
179fc4d370 | ||
|
|
703999edec | ||
|
|
5db8e66bd3 | ||
|
|
2e0a0cd271 | ||
|
|
97d0e4d151 | ||
|
|
d21d826b63 | ||
|
|
d399abca1a | ||
|
|
d7139f1314 | ||
|
|
1cc8c6d491 | ||
|
|
f201583026 | ||
|
|
4582559b66 | ||
|
|
fb3741e0cd | ||
|
|
bb4404dd91 | ||
|
|
db0d4271ed | ||
|
|
689d1eb01c | ||
|
|
2eb0bb4be4 | ||
|
|
d8c491f57e | ||
|
|
54f4c054ea | ||
|
|
b2e12fe926 | ||
|
|
50ac79078e | ||
|
|
37f71a8493 | ||
|
|
6be54f75c8 | ||
|
|
427af9d248 | ||
|
|
6d0d778e59 | ||
|
|
ac3d44ee7a | ||
|
|
46ed9e53e4 | ||
|
|
1e9fb4fe02 | ||
|
|
1489287bf1 | ||
|
|
136efe0399 | ||
|
|
f45bc03d9f | ||
|
|
4f66455160 | ||
|
|
09fd1f4e66 | ||
|
|
7820dc8b08 | ||
|
|
df826a3c54 | ||
|
|
011946d446 |
21 changed files with 744 additions and 664 deletions
421
.gitlab-ci.yml
421
.gitlab-ci.yml
|
|
@ -4,29 +4,18 @@
|
|||
# #
|
||||
########################################
|
||||
|
||||
.templates_sha: &template_sha 0c312d9c7255f46e741d43bcd1930f09cd12efe7 # see https://docs.gitlab.com/ee/ci/yaml/#includefile
|
||||
.templates_sha: &template_sha e195d80f35b45cc73668be3767b923fd76c70ed5 # see https://docs.gitlab.com/ee/ci/yaml/#includefile
|
||||
|
||||
include:
|
||||
# Alpine container builder template
|
||||
- project: 'freedesktop/ci-templates'
|
||||
ref: *template_sha
|
||||
file: '/templates/alpine.yml'
|
||||
# Arch container builder template
|
||||
- project: 'freedesktop/ci-templates'
|
||||
ref: *template_sha
|
||||
file: '/templates/arch.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'
|
||||
file:
|
||||
- '/templates/alpine.yml'
|
||||
- '/templates/arch.yml'
|
||||
- '/templates/debian.yml'
|
||||
- '/templates/fedora.yml'
|
||||
- '/templates/ubuntu.yml'
|
||||
- '/templates/ci-fairy.yml'
|
||||
|
||||
stages:
|
||||
- prep # rebuild the container images if there is a change
|
||||
|
|
@ -38,10 +27,16 @@ stages:
|
|||
- container_clean # clean up unused container images
|
||||
- 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:
|
||||
# The upstrem repository we will check for images
|
||||
FDO_UPSTREAM_REPO: libevdev/libevdev
|
||||
LIBEVDEV_SKIP_ROOT_TESTS: 1
|
||||
GIT_DEPTH: 1
|
||||
MESON_BUILDDIR: 'build dir'
|
||||
|
||||
|
|
@ -51,9 +46,9 @@ variables:
|
|||
- _build/test/test-suite.log
|
||||
- $MESON_BUILDDIR/meson-logs/
|
||||
expire_in: 1 week
|
||||
when: on_failure
|
||||
when: always
|
||||
reports:
|
||||
junit: $MESON_BUILDDIR/junit-*.xml
|
||||
junit: $MESON_BUILDDIR/*junit*.xml
|
||||
|
||||
.autotools_build:
|
||||
extends:
|
||||
|
|
@ -66,59 +61,57 @@ variables:
|
|||
- make check
|
||||
- if ! [[ -z "$MAKE_ARGS" ]]; then make $MAKE_ARGS; fi
|
||||
- popd > /dev/null
|
||||
variables:
|
||||
LIBEVDEV_SKIP_ROOT_TESTS: 1
|
||||
|
||||
.meson_build:
|
||||
extends:
|
||||
- .default_artifacts
|
||||
script:
|
||||
- .gitlab-ci/meson-build.sh
|
||||
- .gitlab-ci/meson-build.sh --run-test
|
||||
variables:
|
||||
MESON_TEST_ARGS: '--no-suite=needs-uinput'
|
||||
|
||||
.fedora:34:
|
||||
.fedora:40:
|
||||
extends: .fdo.distribution-image@fedora
|
||||
variables:
|
||||
FDO_DISTRIBUTION_TAG: '2022-02-02.0'
|
||||
FDO_DISTRIBUTION_VERSION: '34'
|
||||
FDO_DISTRIBUTION_TAG: '2024-11-25.0'
|
||||
FDO_DISTRIBUTION_VERSION: '40'
|
||||
|
||||
.fedora:35:
|
||||
.fedora:41:
|
||||
extends: .fdo.distribution-image@fedora
|
||||
variables:
|
||||
FDO_DISTRIBUTION_TAG: '2022-02-02.0'
|
||||
FDO_DISTRIBUTION_VERSION: '35'
|
||||
FDO_DISTRIBUTION_TAG: '2024-11-25.0'
|
||||
FDO_DISTRIBUTION_VERSION: '41'
|
||||
|
||||
.ubuntu:21.04:
|
||||
.ubuntu:24.10:
|
||||
extends: .fdo.distribution-image@ubuntu
|
||||
variables:
|
||||
FDO_DISTRIBUTION_TAG: '2022-02-02.0'
|
||||
FDO_DISTRIBUTION_VERSION: '21.04'
|
||||
|
||||
.ubuntu:21.10:
|
||||
extends: .fdo.distribution-image@ubuntu
|
||||
variables:
|
||||
FDO_DISTRIBUTION_TAG: '2022-02-02.0'
|
||||
FDO_DISTRIBUTION_VERSION: '21.10'
|
||||
FDO_DISTRIBUTION_TAG: '2024-11-25.0'
|
||||
FDO_DISTRIBUTION_VERSION: '24.10'
|
||||
|
||||
.debian:stable:
|
||||
extends: .fdo.distribution-image@debian
|
||||
variables:
|
||||
FDO_DISTRIBUTION_TAG: '2022-02-02.0'
|
||||
FDO_DISTRIBUTION_TAG: '2024-11-25.0'
|
||||
FDO_DISTRIBUTION_VERSION: 'stable'
|
||||
|
||||
.debian:sid:
|
||||
extends: .fdo.distribution-image@debian
|
||||
variables:
|
||||
FDO_DISTRIBUTION_TAG: '2022-02-02.0'
|
||||
FDO_DISTRIBUTION_TAG: '2024-11-25.0'
|
||||
FDO_DISTRIBUTION_VERSION: 'sid'
|
||||
|
||||
.arch:rolling:
|
||||
extends: .fdo.distribution-image@arch
|
||||
variables:
|
||||
FDO_DISTRIBUTION_TAG: '2022-02-02.0'
|
||||
FDO_DISTRIBUTION_TAG: '2024-11-25.0'
|
||||
FDO_DISTRIBUTION_VERSION: 'rolling'
|
||||
|
||||
.alpine:latest:
|
||||
extends: .fdo.distribution-image@alpine
|
||||
variables:
|
||||
FDO_DISTRIBUTION_TAG: '2022-02-02.0'
|
||||
FDO_DISTRIBUTION_TAG: '2024-11-25.0'
|
||||
FDO_DISTRIBUTION_VERSION: 'latest'
|
||||
|
||||
|
||||
|
|
@ -134,14 +127,11 @@ variables:
|
|||
# $SRCDIR/.gitlab-ci/generate-gitlab-ci.py
|
||||
#
|
||||
check-ci-script:
|
||||
image: golang:alpine
|
||||
extends:
|
||||
- .fdo.ci-fairy
|
||||
stage: prep
|
||||
before_script:
|
||||
- apk add python3 py-pip git
|
||||
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||
script:
|
||||
- ci-fairy generate-template
|
||||
- git diff --exit-code && exit 0 || true
|
||||
- ci-fairy generate-template --verify && exit 0 || true
|
||||
- echo "Committed gitlab-ci.yml differs from generated gitlab-ci.yml. Please verify"
|
||||
- exit 1
|
||||
|
||||
|
|
@ -150,13 +140,13 @@ check-ci-script:
|
|||
#
|
||||
|
||||
check-commit:
|
||||
image: golang:alpine
|
||||
extends:
|
||||
- .fdo.ci-fairy
|
||||
stage: prep
|
||||
before_script:
|
||||
- apk add python3 py-pip git
|
||||
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||
script:
|
||||
- ci-fairy check-commits --signed-off-by --junit-xml=results.xml
|
||||
- ci-fairy -vv check-commits --junit-xml=results.xml && exit 0 || true
|
||||
- echo "Error checking the commit message format. Please verify"
|
||||
- exit 1
|
||||
except:
|
||||
- master@libevdev/libevdev
|
||||
variables:
|
||||
|
|
@ -170,11 +160,9 @@ check-commit:
|
|||
#
|
||||
|
||||
check-merge-request:
|
||||
image: golang:alpine
|
||||
extends:
|
||||
- .fdo.ci-fairy
|
||||
stage: merge-check
|
||||
before_script:
|
||||
- apk add python3 py-pip git
|
||||
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||
script:
|
||||
- ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml
|
||||
artifacts:
|
||||
|
|
@ -182,11 +170,13 @@ check-merge-request:
|
|||
reports:
|
||||
junit: results.xml
|
||||
allow_failure: true
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
|
||||
|
||||
|
||||
.fedora.packages:
|
||||
variables:
|
||||
FDO_DISTRIBUTION_PACKAGES: 'git gcc gcc-c++ meson automake autoconf libtool make pkgconfig python3 check-devel valgrind binutils doxygen xz clang-analyzer'
|
||||
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'
|
||||
|
||||
.ubuntu.packages:
|
||||
variables:
|
||||
|
|
@ -198,123 +188,46 @@ check-merge-request:
|
|||
|
||||
.arch.packages:
|
||||
variables:
|
||||
FDO_DISTRIBUTION_PACKAGES: 'git gcc meson automake autoconf libtool make pkgconfig python3 check valgrind binutils doxygen'
|
||||
FDO_DISTRIBUTION_PACKAGES: 'git gc meson automake autoconf libtool make pkgconfig python3 check valgrind binutils doxygen'
|
||||
|
||||
.alpine.packages:
|
||||
variables:
|
||||
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:35@qemu-prep:
|
||||
extends:
|
||||
- .fedora:35
|
||||
- .fedora.packages
|
||||
- .fdo.qemu-build@fedora
|
||||
stage: prep
|
||||
tags:
|
||||
- kvm
|
||||
variables:
|
||||
GIT_STRATEGY: none
|
||||
FDO_DISTRIBUTION_TAG: qemu-2022-02-02.0
|
||||
allow_failure: true
|
||||
|
||||
# Always rebuilds the container
|
||||
.fedora:35@qemu-forced-rebuild:
|
||||
extends:
|
||||
- .fedora:35@qemu-prep
|
||||
variables:
|
||||
FDO_FORCE_REBUILD: 1
|
||||
only:
|
||||
- schedules
|
||||
|
||||
# This is the actual job
|
||||
fedora:35@qemu-prep:
|
||||
extends: .fedora:35@qemu-prep
|
||||
|
||||
fedora:35@qemu-forced-rebuild:
|
||||
extends: .fedora:35@qemu-forced-rebuild
|
||||
|
||||
|
||||
# Pulls in the container from upstream or rebuilds it if missing
|
||||
fedora:34@container-prep:
|
||||
fedora:40@container-prep:
|
||||
extends:
|
||||
- .fedora:34
|
||||
- .fedora:40
|
||||
- .fedora.packages
|
||||
- .fdo.container-build@fedora
|
||||
stage: prep
|
||||
variables:
|
||||
GIT_STRATEGY: none
|
||||
|
||||
# Always rebuilds the container
|
||||
fedora:34@container-forced-rebuild:
|
||||
extends:
|
||||
- fedora:34@container-prep
|
||||
only:
|
||||
- schedules
|
||||
variables:
|
||||
FDO_FORCE_REBUILD: 1
|
||||
|
||||
|
||||
# Pulls in the container from upstream or rebuilds it if missing
|
||||
fedora:35@container-prep:
|
||||
fedora:41@container-prep:
|
||||
extends:
|
||||
- .fedora:35
|
||||
- .fedora:41
|
||||
- .fedora.packages
|
||||
- .fdo.container-build@fedora
|
||||
stage: prep
|
||||
variables:
|
||||
GIT_STRATEGY: none
|
||||
|
||||
# Always rebuilds the container
|
||||
fedora:35@container-forced-rebuild:
|
||||
extends:
|
||||
- fedora:35@container-prep
|
||||
only:
|
||||
- schedules
|
||||
variables:
|
||||
FDO_FORCE_REBUILD: 1
|
||||
|
||||
|
||||
# Pulls in the container from upstream or rebuilds it if missing
|
||||
ubuntu:21.04@container-prep:
|
||||
ubuntu:24.10@container-prep:
|
||||
extends:
|
||||
- .ubuntu:21.04
|
||||
- .ubuntu:24.10
|
||||
- .ubuntu.packages
|
||||
- .fdo.container-build@ubuntu
|
||||
stage: prep
|
||||
variables:
|
||||
GIT_STRATEGY: none
|
||||
|
||||
# Always rebuilds the container
|
||||
ubuntu:21.04@container-forced-rebuild:
|
||||
extends:
|
||||
- ubuntu:21.04@container-prep
|
||||
only:
|
||||
- schedules
|
||||
variables:
|
||||
FDO_FORCE_REBUILD: 1
|
||||
|
||||
|
||||
# Pulls in the container from upstream or rebuilds it if missing
|
||||
ubuntu:21.10@container-prep:
|
||||
extends:
|
||||
- .ubuntu:21.10
|
||||
- .ubuntu.packages
|
||||
- .fdo.container-build@ubuntu
|
||||
stage: prep
|
||||
variables:
|
||||
GIT_STRATEGY: none
|
||||
|
||||
# Always rebuilds the container
|
||||
ubuntu:21.10@container-forced-rebuild:
|
||||
extends:
|
||||
- ubuntu:21.10@container-prep
|
||||
only:
|
||||
- schedules
|
||||
variables:
|
||||
FDO_FORCE_REBUILD: 1
|
||||
|
||||
|
||||
# Pulls in the container from upstream or rebuilds it if missing
|
||||
debian:stable@container-prep:
|
||||
|
|
@ -326,15 +239,6 @@ debian:stable@container-prep:
|
|||
variables:
|
||||
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
|
||||
debian:sid@container-prep:
|
||||
|
|
@ -346,15 +250,6 @@ debian:sid@container-prep:
|
|||
variables:
|
||||
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
|
||||
arch:rolling@container-prep:
|
||||
|
|
@ -366,15 +261,6 @@ arch:rolling@container-prep:
|
|||
variables:
|
||||
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
|
||||
alpine:latest@container-prep:
|
||||
|
|
@ -386,15 +272,6 @@ alpine:latest@container-prep:
|
|||
variables:
|
||||
GIT_STRATEGY: none
|
||||
|
||||
# Always rebuilds the container
|
||||
alpine:latest@container-forced-rebuild:
|
||||
extends:
|
||||
- alpine:latest@container-prep
|
||||
only:
|
||||
- schedules
|
||||
variables:
|
||||
FDO_FORCE_REBUILD: 1
|
||||
|
||||
|
||||
#################################################################
|
||||
# #
|
||||
|
|
@ -408,11 +285,9 @@ alpine:latest@container-forced-rebuild:
|
|||
# the registry and will remove any that are not tagged with the provided
|
||||
# $container_image:$tag
|
||||
.container-clean:
|
||||
extends:
|
||||
- .fdo.ci-fairy
|
||||
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:
|
||||
# Go to your Profile, Settings, Access Tokens
|
||||
# Create a personal token with 'api' scope, copy the value.
|
||||
|
|
@ -427,33 +302,26 @@ alpine:latest@container-forced-rebuild:
|
|||
only:
|
||||
- schedules
|
||||
|
||||
### fedora 34
|
||||
fedora:34@container-clean:
|
||||
### fedora 40
|
||||
fedora:40@container-clean:
|
||||
extends:
|
||||
- .fedora:34
|
||||
- .fedora:40
|
||||
- .container-clean
|
||||
needs: ["fedora:34@container-prep"]
|
||||
needs: ["fedora:40@container-prep"]
|
||||
|
||||
### fedora 35
|
||||
fedora:35@container-clean:
|
||||
### fedora 41
|
||||
fedora:41@container-clean:
|
||||
extends:
|
||||
- .fedora:35
|
||||
- .fedora:41
|
||||
- .container-clean
|
||||
needs: ["fedora:35@container-prep"]
|
||||
needs: ["fedora:41@container-prep"]
|
||||
|
||||
### ubuntu 21.04
|
||||
ubuntu:21.04@container-clean:
|
||||
### ubuntu 24.10
|
||||
ubuntu:24.10@container-clean:
|
||||
extends:
|
||||
- .ubuntu:21.04
|
||||
- .ubuntu:24.10
|
||||
- .container-clean
|
||||
needs: ["ubuntu:21.04@container-prep"]
|
||||
|
||||
### ubuntu 21.10
|
||||
ubuntu:21.10@container-clean:
|
||||
extends:
|
||||
- .ubuntu:21.10
|
||||
- .container-clean
|
||||
needs: ["ubuntu:21.10@container-prep"]
|
||||
needs: ["ubuntu:24.10@container-prep"]
|
||||
|
||||
### debian stable
|
||||
debian:stable@container-clean:
|
||||
|
|
@ -503,68 +371,51 @@ alpine:latest@container-clean:
|
|||
- .meson_build
|
||||
stage: build
|
||||
dependencies: []
|
||||
variables:
|
||||
NINJA_ARGS: "dist"
|
||||
|
||||
|
||||
fedora:34@autotools-build:
|
||||
fedora:40@autotools-build:
|
||||
extends:
|
||||
- .fedora:34
|
||||
- .fedora:40
|
||||
- .autotools-build@template
|
||||
stage: autotools
|
||||
needs: ['fedora:34@container-prep']
|
||||
needs: ['fedora:40@container-prep']
|
||||
|
||||
fedora:34@meson-build:
|
||||
fedora:40@meson-build:
|
||||
extends:
|
||||
- .fedora:34
|
||||
- .fedora:40
|
||||
- .meson-build@template
|
||||
stage: meson
|
||||
needs: ['fedora:34@container-prep']
|
||||
needs: ['fedora:40@container-prep']
|
||||
|
||||
|
||||
fedora:35@autotools-build:
|
||||
fedora:41@autotools-build:
|
||||
extends:
|
||||
- .fedora:35
|
||||
- .fedora:41
|
||||
- .autotools-build@template
|
||||
stage: autotools
|
||||
needs: ['fedora:35@container-prep']
|
||||
needs: ['fedora:41@container-prep']
|
||||
|
||||
fedora:35@meson-build:
|
||||
fedora:41@meson-build:
|
||||
extends:
|
||||
- .fedora:35
|
||||
- .fedora:41
|
||||
- .meson-build@template
|
||||
stage: meson
|
||||
needs: ['fedora:35@container-prep']
|
||||
needs: ['fedora:41@container-prep']
|
||||
|
||||
|
||||
ubuntu:21.04@autotools-build:
|
||||
ubuntu:24.10@autotools-build:
|
||||
extends:
|
||||
- .ubuntu:21.04
|
||||
- .ubuntu:24.10
|
||||
- .autotools-build@template
|
||||
stage: autotools
|
||||
needs: ['ubuntu:21.04@container-prep']
|
||||
needs: ['ubuntu:24.10@container-prep']
|
||||
|
||||
ubuntu:21.04@meson-build:
|
||||
ubuntu:24.10@meson-build:
|
||||
extends:
|
||||
- .ubuntu:21.04
|
||||
- .ubuntu:24.10
|
||||
- .meson-build@template
|
||||
stage: meson
|
||||
needs: ['ubuntu:21.04@container-prep']
|
||||
|
||||
|
||||
ubuntu:21.10@autotools-build:
|
||||
extends:
|
||||
- .ubuntu:21.10
|
||||
- .autotools-build@template
|
||||
stage: autotools
|
||||
needs: ['ubuntu:21.10@container-prep']
|
||||
|
||||
ubuntu:21.10@meson-build:
|
||||
extends:
|
||||
- .ubuntu:21.10
|
||||
- .meson-build@template
|
||||
stage: meson
|
||||
needs: ['ubuntu:21.10@container-prep']
|
||||
needs: ['ubuntu:24.10@container-prep']
|
||||
|
||||
|
||||
debian:stable@autotools-build:
|
||||
|
|
@ -633,10 +484,10 @@ alpine:latest@meson-build:
|
|||
# because they're supposed to fail equally on all
|
||||
.fedora-custom-build@autotools-template:
|
||||
extends:
|
||||
- .fedora:34
|
||||
- .fedora:40
|
||||
- .autotools-build@template
|
||||
stage: build
|
||||
needs: ['fedora:34@container-prep']
|
||||
needs: ['fedora:40@container-prep']
|
||||
|
||||
no-valgrind:autotools:
|
||||
extends: .fedora-custom-build@autotools-template
|
||||
|
|
@ -675,10 +526,10 @@ enable-gcov:autotools:
|
|||
|
||||
.fedora-custom-build@meson-template:
|
||||
extends:
|
||||
- .fedora:34
|
||||
- .fedora:40
|
||||
- .meson-build@template
|
||||
stage: build
|
||||
needs: ['fedora:34@container-prep']
|
||||
needs: ['fedora:40@container-prep']
|
||||
|
||||
no-valgrind:meson:
|
||||
extends: .fedora-custom-build@meson-template
|
||||
|
|
@ -691,7 +542,6 @@ no-check:meson:
|
|||
- dnf remove -y check check-devel
|
||||
variables:
|
||||
MESON_ARGS: -Dtests=disabled
|
||||
SKIP_MESON_TEST: 1
|
||||
|
||||
# doxygen is required for dist
|
||||
no-doxygen:meson:
|
||||
|
|
@ -710,7 +560,6 @@ no-doxygen-check-valgrind:meson:
|
|||
variables:
|
||||
MESON_ARGS: -Dtests=disabled -Ddocumentation=disabled
|
||||
NINJA_ARGS: ''
|
||||
SKIP_MESON_TEST: 1
|
||||
|
||||
enable-gcov:meson:
|
||||
extends: .fedora-custom-build@meson-template
|
||||
|
|
@ -721,7 +570,6 @@ scan-build:meson:
|
|||
extends: .fedora-custom-build@meson-template
|
||||
variables:
|
||||
NINJA_ARGS: 'scan-build'
|
||||
SKIP_MESON_TEST: 1
|
||||
|
||||
static-build:meson:
|
||||
extends: .fedora-custom-build@meson-template
|
||||
|
|
@ -732,7 +580,7 @@ static-build:meson:
|
|||
|
||||
soname:
|
||||
extends:
|
||||
- .fedora:34
|
||||
- .fedora:40
|
||||
stage: build
|
||||
script:
|
||||
- ./autogen.sh --prefix=$PWD/prefix-autotools/
|
||||
|
|
@ -741,7 +589,7 @@ soname:
|
|||
- meson "$MESON_BUILDDIR" --prefix=$PWD/prefix-meson/
|
||||
- ninja -C "$MESON_BUILDDIR" install
|
||||
- ls -l $PWD/prefix-meson/lib64/libevdev.so.2.3.0
|
||||
needs: ['fedora:34@container-prep']
|
||||
needs: ['fedora:40@container-prep']
|
||||
|
||||
#################################################################
|
||||
# #
|
||||
|
|
@ -757,66 +605,48 @@ soname:
|
|||
exit 1 ;
|
||||
fi
|
||||
|
||||
.qemu@fedora:35:
|
||||
# build on the host, then run a systemd service to execute the test suite
|
||||
# inside the qemu VM handled by b2c
|
||||
.build-in-b2c@template:
|
||||
extends:
|
||||
- .fedora:35
|
||||
stage: VM
|
||||
image: $CI_REGISTRY_IMAGE/$FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION:qemu-$FDO_DISTRIBUTION_TAG
|
||||
- .default_artifacts
|
||||
tags:
|
||||
- kvm
|
||||
variables:
|
||||
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:
|
||||
# start our vm, no args required
|
||||
- /app/vmctl start
|
||||
# first build in the host container
|
||||
- .gitlab-ci/meson-build.sh --skip-test
|
||||
|
||||
- *check_tainted
|
||||
# pull b2c
|
||||
- curl -L -o /app/boot2container https://gitlab.freedesktop.org/gfx-ci/boot2container/-/raw/2ff65156ba67fa8a0c309a4fc16c5df1a88a3844/vm2c.py
|
||||
- chmod +x /app/boot2container
|
||||
|
||||
- "scp -r $PWD vm:"
|
||||
- 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 sshenv vm:~/$CI_PROJECT_NAME/.meson_environment"
|
||||
- /app/vmctl exec "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 -r vm:$CI_PROJECT_NAME/"$MESON_BUILDDIR" .
|
||||
|
||||
- *check_tainted
|
||||
|
||||
- /app/vmctl stop
|
||||
|
||||
- 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:35@qemu-prep']
|
||||
# runs the test suite only
|
||||
- /app/boot2container
|
||||
|
||||
qemu:meson:
|
||||
extends: .qemu@fedora:35
|
||||
stage: VM
|
||||
extends:
|
||||
- .fdo.distribution-image@fedora
|
||||
- .fedora:41
|
||||
- .build-in-b2c@template
|
||||
needs:
|
||||
- "fedora:41@container-prep"
|
||||
|
||||
qemu:meson:valgrind:
|
||||
extends: .qemu@fedora:35
|
||||
extends:
|
||||
- qemu:meson
|
||||
variables:
|
||||
MESON_TEST_ARGS: '--setup=valgrind'
|
||||
|
||||
|
||||
meson-from-tarball:
|
||||
extends:
|
||||
- .fedora:35
|
||||
- .fedora:41
|
||||
stage: tarballs
|
||||
script:
|
||||
- export INSTALLDIR="$PWD/_inst"
|
||||
|
|
@ -824,26 +654,26 @@ meson-from-tarball:
|
|||
- pushd _build > /dev/null
|
||||
- ../autogen.sh --disable-silent-rules $CONFIGURE_FLAGS
|
||||
- make
|
||||
- make distcheck
|
||||
- make dist
|
||||
- popd > /dev/null
|
||||
- mkdir -p _tarball_dir
|
||||
- tar xf _build/libevdev-*.tar.xz -C _tarball_dir
|
||||
- pushd _tarball_dir/libevdev-*/ > /dev/null
|
||||
- meson "$MESON_BUILDDIR" --prefix="$INSTALLDIR"
|
||||
- ninja -C "$MESON_BUILDDIR" test
|
||||
- meson test -C "$MESON_BUILDDIR" --no-suite="needs-uinput"
|
||||
- ninja -C "$MESON_BUILDDIR" install
|
||||
- popd > /dev/null
|
||||
- ls -lR $INSTALLDIR
|
||||
needs: ['fedora:35@container-prep']
|
||||
needs: ['fedora:41@container-prep']
|
||||
|
||||
autotools-from-tarball:
|
||||
extends:
|
||||
- .fedora:35
|
||||
- .fedora:41
|
||||
stage: tarballs
|
||||
script:
|
||||
- export INSTALLDIR="$PWD/_inst"
|
||||
- meson "$MESON_BUILDDIR"
|
||||
- ninja -C "$MESON_BUILDDIR" dist
|
||||
- meson dist -C "$MESON_BUILDDIR" --no-tests
|
||||
- mkdir -p _tarball_dir
|
||||
- tar xf "$MESON_BUILDDIR"/meson-dist/libevdev-*.xz -C _tarball_dir
|
||||
- pushd _tarball_dir/libevdev-*/ > /dev/null
|
||||
|
|
@ -856,4 +686,7 @@ autotools-from-tarball:
|
|||
- popd > /dev/null
|
||||
- popd > /dev/null
|
||||
- ls -lR $INSTALLDIR
|
||||
needs: ['fedora:35@container-prep']
|
||||
variables:
|
||||
LIBEVDEV_SKIP_ROOT_TESTS: 1
|
||||
|
||||
needs: ['fedora:41@container-prep']
|
||||
|
|
|
|||
|
|
@ -6,15 +6,16 @@
|
|||
# #
|
||||
########################################
|
||||
|
||||
.templates_sha: &template_sha 0c312d9c7255f46e741d43bcd1930f09cd12efe7 # see https://docs.gitlab.com/ee/ci/yaml/#includefile
|
||||
.templates_sha: &template_sha e195d80f35b45cc73668be3767b923fd76c70ed5 # see https://docs.gitlab.com/ee/ci/yaml/#includefile
|
||||
|
||||
include:
|
||||
{% for distribution in distributions|map(attribute='name')|unique()|sort() %}
|
||||
# {{ distribution.capitalize() }} container builder template
|
||||
- project: 'freedesktop/ci-templates'
|
||||
ref: *template_sha
|
||||
file: '/templates/{{distribution}}.yml'
|
||||
file:
|
||||
{% for distribution in distributions|map(attribute='name')|unique()|sort() %}
|
||||
- '/templates/{{distribution}}.yml'
|
||||
{% endfor %}
|
||||
- '/templates/ci-fairy.yml'
|
||||
|
||||
stages:
|
||||
- prep # rebuild the container images if there is a change
|
||||
|
|
@ -26,10 +27,16 @@ stages:
|
|||
- container_clean # clean up unused container images
|
||||
- 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:
|
||||
# The upstrem repository we will check for images
|
||||
FDO_UPSTREAM_REPO: libevdev/libevdev
|
||||
LIBEVDEV_SKIP_ROOT_TESTS: 1
|
||||
GIT_DEPTH: 1
|
||||
MESON_BUILDDIR: 'build dir'
|
||||
|
||||
|
|
@ -39,9 +46,9 @@ variables:
|
|||
- _build/test/test-suite.log
|
||||
- $MESON_BUILDDIR/meson-logs/
|
||||
expire_in: 1 week
|
||||
when: on_failure
|
||||
when: always
|
||||
reports:
|
||||
junit: $MESON_BUILDDIR/junit-*.xml
|
||||
junit: $MESON_BUILDDIR/*junit*.xml
|
||||
|
||||
.autotools_build:
|
||||
extends:
|
||||
|
|
@ -54,12 +61,16 @@ variables:
|
|||
- make check
|
||||
- if ! [[ -z "$MAKE_ARGS" ]]; then make $MAKE_ARGS; fi
|
||||
- popd > /dev/null
|
||||
variables:
|
||||
LIBEVDEV_SKIP_ROOT_TESTS: 1
|
||||
|
||||
.meson_build:
|
||||
extends:
|
||||
- .default_artifacts
|
||||
script:
|
||||
- .gitlab-ci/meson-build.sh
|
||||
- .gitlab-ci/meson-build.sh --run-test
|
||||
variables:
|
||||
MESON_TEST_ARGS: '--no-suite=needs-uinput'
|
||||
|
||||
{# Generate templates for every distribution/version combination we want, any
|
||||
job can then just extends: .name:version and the images will sort
|
||||
|
|
@ -87,14 +98,11 @@ variables:
|
|||
# $SRCDIR/.gitlab-ci/generate-gitlab-ci.py
|
||||
#
|
||||
check-ci-script:
|
||||
image: golang:alpine
|
||||
extends:
|
||||
- .fdo.ci-fairy
|
||||
stage: prep
|
||||
before_script:
|
||||
- apk add python3 py-pip git
|
||||
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||
script:
|
||||
- ci-fairy generate-template
|
||||
- git diff --exit-code && exit 0 || true
|
||||
- ci-fairy generate-template --verify && exit 0 || true
|
||||
- echo "Committed gitlab-ci.yml differs from generated gitlab-ci.yml. Please verify"
|
||||
- exit 1
|
||||
|
||||
|
|
@ -103,13 +111,13 @@ check-ci-script:
|
|||
#
|
||||
|
||||
check-commit:
|
||||
image: golang:alpine
|
||||
extends:
|
||||
- .fdo.ci-fairy
|
||||
stage: prep
|
||||
before_script:
|
||||
- apk add python3 py-pip git
|
||||
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||
script:
|
||||
- ci-fairy check-commits --signed-off-by --junit-xml=results.xml
|
||||
- ci-fairy -vv check-commits --junit-xml=results.xml && exit 0 || true
|
||||
- echo "Error checking the commit message format. Please verify"
|
||||
- exit 1
|
||||
except:
|
||||
- master@libevdev/libevdev
|
||||
variables:
|
||||
|
|
@ -123,11 +131,9 @@ check-commit:
|
|||
#
|
||||
|
||||
check-merge-request:
|
||||
image: golang:alpine
|
||||
extends:
|
||||
- .fdo.ci-fairy
|
||||
stage: merge-check
|
||||
before_script:
|
||||
- apk add python3 py-pip git
|
||||
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
|
||||
script:
|
||||
- ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml
|
||||
artifacts:
|
||||
|
|
@ -135,6 +141,8 @@ check-merge-request:
|
|||
reports:
|
||||
junit: results.xml
|
||||
allow_failure: true
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
|
||||
|
||||
|
||||
{% for distro in distributions %}
|
||||
|
|
@ -144,39 +152,6 @@ check-merge-request:
|
|||
|
||||
{% endfor %}
|
||||
|
||||
{% for distro in distributions if distro.want_qemu %}
|
||||
{% set version = "{}".format(distro.versions|last()) %}
|
||||
# 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
|
||||
|
||||
# This is the actual job
|
||||
{{distro.name}}:{{version}}@qemu-prep:
|
||||
extends: .{{distro.name}}:{{version}}@qemu-prep
|
||||
|
||||
{{distro.name}}:{{version}}@qemu-forced-rebuild:
|
||||
extends: .{{distro.name}}:{{version}}@qemu-forced-rebuild
|
||||
{% endfor %}
|
||||
|
||||
{% for distro in distributions %}
|
||||
{% for version in distro.versions %}
|
||||
|
||||
|
|
@ -190,15 +165,6 @@ check-merge-request:
|
|||
variables:
|
||||
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 %}
|
||||
|
||||
|
|
@ -214,11 +180,9 @@ check-merge-request:
|
|||
# the registry and will remove any that are not tagged with the provided
|
||||
# $container_image:$tag
|
||||
.container-clean:
|
||||
extends:
|
||||
- .fdo.ci-fairy
|
||||
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:
|
||||
# Go to your Profile, Settings, Access Tokens
|
||||
# Create a personal token with 'api' scope, copy the value.
|
||||
|
|
@ -264,8 +228,6 @@ check-merge-request:
|
|||
- .meson_build
|
||||
stage: build
|
||||
dependencies: []
|
||||
variables:
|
||||
NINJA_ARGS: "dist"
|
||||
|
||||
{% for distro in distributions %}
|
||||
{% for version in distro.versions %}
|
||||
|
|
@ -368,7 +330,6 @@ no-check:meson:
|
|||
- dnf remove -y check check-devel
|
||||
variables:
|
||||
MESON_ARGS: -Dtests=disabled
|
||||
SKIP_MESON_TEST: 1
|
||||
|
||||
# doxygen is required for dist
|
||||
no-doxygen:meson:
|
||||
|
|
@ -387,7 +348,6 @@ no-doxygen-check-valgrind:meson:
|
|||
variables:
|
||||
MESON_ARGS: -Dtests=disabled -Ddocumentation=disabled
|
||||
NINJA_ARGS: ''
|
||||
SKIP_MESON_TEST: 1
|
||||
|
||||
enable-gcov:meson:
|
||||
extends: .fedora-custom-build@meson-template
|
||||
|
|
@ -398,7 +358,6 @@ scan-build:meson:
|
|||
extends: .fedora-custom-build@meson-template
|
||||
variables:
|
||||
NINJA_ARGS: 'scan-build'
|
||||
SKIP_MESON_TEST: 1
|
||||
|
||||
static-build:meson:
|
||||
extends: .fedora-custom-build@meson-template
|
||||
|
|
@ -434,64 +393,46 @@ soname:
|
|||
exit 1 ;
|
||||
fi
|
||||
|
||||
{% for distro in distributions if distro.want_qemu %}
|
||||
{% set version = "{}".format(distro.versions|last()) %}
|
||||
.qemu@{{distro.name}}:{{version}}:
|
||||
# build on the host, then run a systemd service to execute the test suite
|
||||
# inside the qemu VM handled by b2c
|
||||
.build-in-b2c@template:
|
||||
extends:
|
||||
- .{{distro.name}}:{{version}}
|
||||
stage: VM
|
||||
image: $CI_REGISTRY_IMAGE/$FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION:qemu-$FDO_DISTRIBUTION_TAG
|
||||
- .default_artifacts
|
||||
tags:
|
||||
- kvm
|
||||
variables:
|
||||
MESON_BUILDDIR: build_dir
|
||||
B2C_KERNEL: {{ b2c.kernel }}
|
||||
B2C_IMAGE: $FDO_DISTRIBUTION_IMAGE
|
||||
B2C_COMMAND: .gitlab-ci/start-in-systemd.sh
|
||||
script:
|
||||
# start our vm, no args required
|
||||
- /app/vmctl start
|
||||
# first build in the host container
|
||||
- .gitlab-ci/meson-build.sh --skip-test
|
||||
|
||||
- *check_tainted
|
||||
# pull b2c
|
||||
- curl -L -o /app/boot2container https://gitlab.freedesktop.org/gfx-ci/boot2container/-/raw/{{b2c.version}}/vm2c.py
|
||||
- chmod +x /app/boot2container
|
||||
|
||||
- "scp -r $PWD vm:"
|
||||
- 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 sshenv vm:~/$CI_PROJECT_NAME/.meson_environment"
|
||||
- /app/vmctl exec "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 -r vm:$CI_PROJECT_NAME/"$MESON_BUILDDIR" .
|
||||
|
||||
- *check_tainted
|
||||
|
||||
- /app/vmctl stop
|
||||
|
||||
- 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: ['{{distro.name}}:{{version}}@qemu-prep']
|
||||
# runs the test suite only
|
||||
- /app/boot2container
|
||||
|
||||
{% for distro in distributions if distro.use_for_qemu_tests %}
|
||||
{% set version = "{}".format(distro.versions|last()) %}
|
||||
qemu:meson:
|
||||
extends: .qemu@{{distro.name}}:{{version}}
|
||||
stage: VM
|
||||
extends:
|
||||
- .fdo.distribution-image@{{distro.name}}
|
||||
- .{{distro.name}}:{{version}}
|
||||
- .build-in-b2c@template
|
||||
needs:
|
||||
- "{{distro.name}}:{{version}}@container-prep"
|
||||
|
||||
qemu:meson:valgrind:
|
||||
extends: .qemu@{{distro.name}}:{{version}}
|
||||
extends:
|
||||
- qemu:meson
|
||||
variables:
|
||||
MESON_TEST_ARGS: '--setup=valgrind'
|
||||
|
||||
{% endfor %}
|
||||
|
||||
{% for distro in distributions if distro.use_for_tarball_tests %}
|
||||
|
|
@ -506,13 +447,13 @@ meson-from-tarball:
|
|||
- pushd _build > /dev/null
|
||||
- ../autogen.sh --disable-silent-rules $CONFIGURE_FLAGS
|
||||
- make
|
||||
- make distcheck
|
||||
- make dist
|
||||
- popd > /dev/null
|
||||
- mkdir -p _tarball_dir
|
||||
- tar xf _build/libevdev-*.tar.xz -C _tarball_dir
|
||||
- pushd _tarball_dir/libevdev-*/ > /dev/null
|
||||
- meson "$MESON_BUILDDIR" --prefix="$INSTALLDIR"
|
||||
- ninja -C "$MESON_BUILDDIR" test
|
||||
- meson test -C "$MESON_BUILDDIR" --no-suite="needs-uinput"
|
||||
- ninja -C "$MESON_BUILDDIR" install
|
||||
- popd > /dev/null
|
||||
- ls -lR $INSTALLDIR
|
||||
|
|
@ -525,7 +466,7 @@ autotools-from-tarball:
|
|||
script:
|
||||
- export INSTALLDIR="$PWD/_inst"
|
||||
- meson "$MESON_BUILDDIR"
|
||||
- ninja -C "$MESON_BUILDDIR" dist
|
||||
- meson dist -C "$MESON_BUILDDIR" --no-tests
|
||||
- mkdir -p _tarball_dir
|
||||
- tar xf "$MESON_BUILDDIR"/meson-dist/libevdev-*.xz -C _tarball_dir
|
||||
- pushd _tarball_dir/libevdev-*/ > /dev/null
|
||||
|
|
@ -538,5 +479,8 @@ autotools-from-tarball:
|
|||
- popd > /dev/null
|
||||
- popd > /dev/null
|
||||
- ls -lR $INSTALLDIR
|
||||
variables:
|
||||
LIBEVDEV_SKIP_ROOT_TESTS: 1
|
||||
|
||||
needs: ['{{distro.name}}:{{version}}@container-prep']
|
||||
{% endfor %}
|
||||
|
|
|
|||
|
|
@ -3,16 +3,17 @@
|
|||
#
|
||||
|
||||
# We're happy to rebuild all containers when one changes.
|
||||
.default_tag: &default_tag '2022-02-02.0'
|
||||
.default_tag: &default_tag '2024-11-25.0'
|
||||
|
||||
distributions:
|
||||
- name: fedora
|
||||
tag: *default_tag
|
||||
want_qemu: true
|
||||
use_for_tarball_tests: true
|
||||
# only one distro for qemu tests
|
||||
use_for_qemu_tests: true
|
||||
versions:
|
||||
- '34'
|
||||
- '35'
|
||||
- '40'
|
||||
- '41'
|
||||
packages:
|
||||
- git
|
||||
- gcc
|
||||
|
|
@ -30,11 +31,18 @@ distributions:
|
|||
- doxygen
|
||||
- xz
|
||||
- clang-analyzer
|
||||
# below packages are for the qemu runs, so optional
|
||||
- systemd-udev
|
||||
- qemu-img
|
||||
- qemu-system-x86-core
|
||||
- qemu-system-aarch64-core
|
||||
- jq
|
||||
- python3-click
|
||||
- python3-rich
|
||||
- name: ubuntu
|
||||
tag: *default_tag
|
||||
versions:
|
||||
- '21.04'
|
||||
- '21.10'
|
||||
- '24.10'
|
||||
packages:
|
||||
- git
|
||||
- gcc
|
||||
|
|
@ -78,7 +86,7 @@ distributions:
|
|||
- 'rolling'
|
||||
packages:
|
||||
- git
|
||||
- gcc
|
||||
- gc
|
||||
- meson
|
||||
- automake
|
||||
- autoconf
|
||||
|
|
@ -111,3 +119,7 @@ distributions:
|
|||
- doxygen
|
||||
- xz
|
||||
- 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,9 +1,43 @@
|
|||
#!/bin/bash
|
||||
#!/usr/bin/env 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
|
||||
. .meson_environment
|
||||
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
|
||||
echo "\$MESON_BUILDDIR undefined."
|
||||
exit 1
|
||||
|
|
@ -13,43 +47,42 @@ fi
|
|||
# run and debug locally.
|
||||
if [[ -z "$CI_JOB_ID" ]] || [[ -z "$CI_JOB_NAME" ]]; then
|
||||
echo "Missing \$CI_JOB_ID or \$CI_JOB_NAME".
|
||||
CI_PROJECT_NAME=$(basename "$PWD")
|
||||
CI_JOB_ID=$(date +%s)
|
||||
CI_JOB_NAME='libevdev-job-local'
|
||||
CI_JOB_NAME="$CI_PROJECT_NAME-job-local"
|
||||
echo "Simulating gitlab environment: "
|
||||
echo " CI_JOB_ID=$CI_JOB_ID"
|
||||
echo " CI_JOB_NAME=$CI_JOB_NAME"
|
||||
fi
|
||||
|
||||
if [[ -n "$FDO_CI_CONCURRENT" ]]; then
|
||||
jobcount="-j$FDO_CI_CONCURRENT"
|
||||
export MESON_TESTTHREADS="$FDO_CI_CONCURRENT"
|
||||
fi
|
||||
|
||||
echo "*************************************************"
|
||||
echo "builddir: $MESON_BUILDDIR"
|
||||
echo "meson args: $MESON_ARGS"
|
||||
echo "ninja args: $NINJA_ARGS"
|
||||
echo "meson test args: $MESON_TEST_ARGS"
|
||||
echo "job count: ${jobcount-0}"
|
||||
echo "*************************************************"
|
||||
|
||||
set -e
|
||||
|
||||
rm -rf "$MESON_BUILDDIR"
|
||||
meson "$MESON_BUILDDIR" $MESON_ARGS
|
||||
if [[ -z "$MESON_SKIP_SETUP" ]]; then
|
||||
rm -rf "$MESON_BUILDDIR"
|
||||
meson setup "$MESON_BUILDDIR" $MESON_ARGS
|
||||
fi
|
||||
meson configure "$MESON_BUILDDIR"
|
||||
ninja -C "$MESON_BUILDDIR" $NINJA_ARGS
|
||||
|
||||
if [[ ! -z "$SKIP_MESON_TEST" ]]; then
|
||||
echo "Skipping meson test"
|
||||
exit 0
|
||||
if [[ -z "$MESON_SKIP_BUILD" ]]; then
|
||||
if [[ -n "$NINJA_ARGS" ]]; then
|
||||
ninja_args="--ninja-args $NINJA_ARGS"
|
||||
fi
|
||||
meson compile -v -C "$MESON_BUILDDIR" $jobcount $ninja_args
|
||||
fi
|
||||
|
||||
# we still want to generate the reports, even if meson test fails
|
||||
set +e
|
||||
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
|
||||
if [[ -n "$MESON_RUN_TEST" ]]; then
|
||||
meson test -C "$MESON_BUILDDIR" $MESON_TEST_ARGS --print-errorlogs
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -1,128 +0,0 @@
|
|||
#!/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)
|
||||
69
.gitlab-ci/start-in-systemd.sh
Executable file
69
.gitlab-ci/start-in-systemd.sh
Executable file
|
|
@ -0,0 +1,69 @@
|
|||
#!/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
|
||||
|
|
@ -7,8 +7,8 @@ AC_PREREQ([2.62])
|
|||
|
||||
# change meson version too
|
||||
AC_INIT([libevdev],
|
||||
[1.13.0],
|
||||
[https://bugs.freedesktop.org/enter_bug.cgi?product=libevdev],
|
||||
[1.13.6],
|
||||
[https://gitlab.freedesktop.org/libevdev/libevdev/issues/],
|
||||
[libevdev],
|
||||
[http://freedesktop.org/wiki/Software/libevdev/])
|
||||
|
||||
|
|
@ -59,12 +59,9 @@ AC_CHECK_LIB([m], [round])
|
|||
|
||||
PKG_PROG_PKG_CONFIG()
|
||||
PKG_CHECK_MODULES(CHECK, [check >= 0.9.9], [HAVE_CHECK="yes"], [HAVE_CHECK="no"])
|
||||
if test "x$HAVE_CHECK" = "xyes"; then
|
||||
AC_PATH_PROG(VALGRIND, [valgrind])
|
||||
else
|
||||
if test "x$HAVE_CHECK" != "xyes"; then
|
||||
AC_MSG_WARN([check not found - skipping building unit tests])
|
||||
fi
|
||||
AM_CONDITIONAL(HAVE_VALGRIND, [test "x$VALGRIND" != "x"])
|
||||
AM_CONDITIONAL(ENABLE_RUNTIME_TESTS, [test "x$HAVE_CHECK" = "xyes"])
|
||||
AM_CONDITIONAL(ENABLE_STATIC_LINK_TEST, [test "x$enable_static" = "xyes"])
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#define INPUT_PROP_TOPBUTTONPAD 0x04 /* softbuttons at top of pad */
|
||||
#define INPUT_PROP_POINTING_STICK 0x05 /* is a pointing stick */
|
||||
#define INPUT_PROP_ACCELEROMETER 0x06 /* has accelerometer */
|
||||
#define INPUT_PROP_PRESSUREPAD 0x07 /* pressure triggers clicks */
|
||||
|
||||
#define INPUT_PROP_MAX 0x1f
|
||||
#define INPUT_PROP_CNT (INPUT_PROP_MAX + 1)
|
||||
|
|
@ -519,6 +520,7 @@
|
|||
#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_EOS 0x1c1
|
||||
|
|
@ -600,8 +602,14 @@
|
|||
#define BTN_DPAD_LEFT 0x222
|
||||
#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_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_TASKMANAGER 0x241 /* AL Task/Project Manager */
|
||||
|
|
@ -614,10 +622,27 @@
|
|||
#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_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_NEXT 0x261
|
||||
#define KEY_KBDINPUTASSIST_PREVGROUP 0x262
|
||||
|
|
@ -758,6 +783,9 @@
|
|||
#define KEY_KBD_LCD_MENU4 0x2bb
|
||||
#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_HAPPY1 0x2c0
|
||||
#define BTN_TRIGGER_HAPPY2 0x2c1
|
||||
|
|
@ -862,6 +890,7 @@
|
|||
#define ABS_TOOL_WIDTH 0x1c
|
||||
|
||||
#define ABS_VOLUME 0x20
|
||||
#define ABS_PROFILE 0x21
|
||||
|
||||
#define ABS_MISC 0x28
|
||||
|
||||
|
|
@ -917,7 +946,8 @@
|
|||
#define SW_MUTE_DEVICE 0x0e /* set = device disabled */
|
||||
#define SW_PEN_INSERTED 0x0f /* set = pen inserted */
|
||||
#define SW_MACHINE_COVER 0x10 /* set = cover closed */
|
||||
#define SW_MAX 0x10
|
||||
#define SW_USB_INSERT 0x11 /* set = USB audio device connected */
|
||||
#define SW_MAX 0x11
|
||||
#define SW_CNT (SW_MAX+1)
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#define INPUT_PROP_TOPBUTTONPAD 0x04 /* softbuttons at top of pad */
|
||||
#define INPUT_PROP_POINTING_STICK 0x05 /* is a pointing stick */
|
||||
#define INPUT_PROP_ACCELEROMETER 0x06 /* has accelerometer */
|
||||
#define INPUT_PROP_PRESSUREPAD 0x07 /* pressure triggers clicks */
|
||||
|
||||
#define INPUT_PROP_MAX 0x1f
|
||||
#define INPUT_PROP_CNT (INPUT_PROP_MAX + 1)
|
||||
|
|
@ -519,6 +520,7 @@
|
|||
#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_EOS 0x1c1
|
||||
|
|
@ -600,8 +602,14 @@
|
|||
#define BTN_DPAD_LEFT 0x222
|
||||
#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_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_TASKMANAGER 0x241 /* AL Task/Project Manager */
|
||||
|
|
@ -614,10 +622,27 @@
|
|||
#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_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_NEXT 0x261
|
||||
#define KEY_KBDINPUTASSIST_PREVGROUP 0x262
|
||||
|
|
@ -758,6 +783,9 @@
|
|||
#define KEY_KBD_LCD_MENU4 0x2bb
|
||||
#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_HAPPY1 0x2c0
|
||||
#define BTN_TRIGGER_HAPPY2 0x2c1
|
||||
|
|
@ -862,6 +890,7 @@
|
|||
#define ABS_TOOL_WIDTH 0x1c
|
||||
|
||||
#define ABS_VOLUME 0x20
|
||||
#define ABS_PROFILE 0x21
|
||||
|
||||
#define ABS_MISC 0x28
|
||||
|
||||
|
|
@ -917,7 +946,8 @@
|
|||
#define SW_MUTE_DEVICE 0x0e /* set = device disabled */
|
||||
#define SW_PEN_INSERTED 0x0f /* set = pen inserted */
|
||||
#define SW_MACHINE_COVER 0x10 /* set = cover closed */
|
||||
#define SW_MAX 0x10
|
||||
#define SW_USB_INSERT 0x11 /* set = USB audio device connected */
|
||||
#define SW_MAX 0x11
|
||||
#define SW_CNT (SW_MAX+1)
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -6,14 +6,16 @@
|
|||
* under the terms of the GNU General Public License version 2 as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
#ifndef _INPUT_H
|
||||
#define _INPUT_H
|
||||
#ifndef _UAPI_INPUT_H
|
||||
#define _UAPI_INPUT_H
|
||||
|
||||
|
||||
#ifndef __KERNEL__
|
||||
#include <sys/time.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/types.h>
|
||||
#include <linux/types.h>
|
||||
#endif
|
||||
|
||||
#include "input-event-codes.h"
|
||||
|
||||
|
|
@ -273,6 +275,7 @@ struct input_mask {
|
|||
#define BUS_CEC 0x1E
|
||||
#define BUS_INTEL_ISHTP 0x1F
|
||||
#define BUS_AMD_SFH 0x20
|
||||
#define BUS_SDW 0x21
|
||||
|
||||
/*
|
||||
* MT_TOOL types
|
||||
|
|
@ -426,6 +429,24 @@ struct ff_rumble_effect {
|
|||
__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
|
||||
* @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING,
|
||||
|
|
@ -462,6 +483,7 @@ struct ff_effect {
|
|||
struct ff_periodic_effect periodic;
|
||||
struct ff_condition_effect condition[2]; /* One for each axis */
|
||||
struct ff_rumble_effect rumble;
|
||||
struct ff_haptic_effect haptic;
|
||||
} u;
|
||||
};
|
||||
|
||||
|
|
@ -469,6 +491,7 @@ struct ff_effect {
|
|||
* Force feedback effect types
|
||||
*/
|
||||
|
||||
#define FF_HAPTIC 0x4f
|
||||
#define FF_RUMBLE 0x50
|
||||
#define FF_PERIODIC 0x51
|
||||
#define FF_CONSTANT 0x52
|
||||
|
|
@ -478,7 +501,7 @@ struct ff_effect {
|
|||
#define FF_INERTIA 0x56
|
||||
#define FF_RAMP 0x57
|
||||
|
||||
#define FF_EFFECT_MIN FF_RUMBLE
|
||||
#define FF_EFFECT_MIN FF_HAPTIC
|
||||
#define FF_EFFECT_MAX FF_RAMP
|
||||
|
||||
/*
|
||||
|
|
@ -513,4 +536,4 @@ struct ff_effect {
|
|||
#define FF_MAX 0x7f
|
||||
#define FF_CNT (FF_MAX+1)
|
||||
|
||||
#endif /* _INPUT_H */
|
||||
#endif /* _UAPI_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 > $@
|
||||
|
||||
|
||||
EXTRA_DIST = make-event-names.py libevdev.sym
|
||||
EXTRA_DIST = make-event-names.py libevdev.sym ../include
|
||||
CLEANFILES = event-names.h
|
||||
BUILT_SOURCES = event-names.h
|
||||
|
||||
|
|
|
|||
|
|
@ -42,19 +42,19 @@ startswith(const char *str, size_t len, const char *prefix, size_t plen)
|
|||
static inline int
|
||||
bit_is_set(const unsigned long *array, int bit)
|
||||
{
|
||||
return !!(array[bit / LONG_BITS] & (1LL << (bit % LONG_BITS)));
|
||||
return !!(array[bit / LONG_BITS] & (1ULL << (bit % LONG_BITS)));
|
||||
}
|
||||
|
||||
static inline void
|
||||
set_bit(unsigned long *array, int bit)
|
||||
{
|
||||
array[bit / LONG_BITS] |= (1LL << (bit % LONG_BITS));
|
||||
array[bit / LONG_BITS] |= (1ULL << (bit % LONG_BITS));
|
||||
}
|
||||
|
||||
static inline void
|
||||
clear_bit(unsigned long *array, int bit)
|
||||
{
|
||||
array[bit / LONG_BITS] &= ~(1LL << (bit % LONG_BITS));
|
||||
array[bit / LONG_BITS] &= ~(1ULL << (bit % LONG_BITS));
|
||||
}
|
||||
|
||||
static inline void
|
||||
|
|
|
|||
|
|
@ -805,23 +805,34 @@ push_mt_sync_events(struct libevdev *dev,
|
|||
int rc;
|
||||
|
||||
for (int slot = 0; slot < dev->num_slots; slot++) {
|
||||
/* stopped touches were already terminated in
|
||||
* terminate_slots */
|
||||
if (changes[slot].state == TOUCH_STOPPED ||
|
||||
!bit_is_set(changes[slot].axes, ABS_MT_SLOT))
|
||||
continue;
|
||||
bool have_slot_event = false;
|
||||
|
||||
queue_push_event(dev, EV_ABS, ABS_MT_SLOT, slot);
|
||||
last_reported_slot = slot;
|
||||
if (!bit_is_set(changes[slot].axes, ABS_MT_SLOT))
|
||||
continue;
|
||||
|
||||
for (int axis = ABS_MT_MIN; axis <= ABS_MT_MAX; axis++) {
|
||||
if (axis == ABS_MT_SLOT ||
|
||||
!libevdev_has_event_code(dev, EV_ABS, axis))
|
||||
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,
|
||||
*slot_value(dev, slot, axis));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ extern "C" {
|
|||
* License information
|
||||
* ===================
|
||||
* libevdev is licensed under the
|
||||
* [X11 license](http://cgit.freedesktop.org/libevdev/tree/COPYING).
|
||||
* [MIT license](http://cgit.freedesktop.org/libevdev/tree/COPYING).
|
||||
*
|
||||
* Bindings
|
||||
* ===================
|
||||
|
|
@ -500,11 +500,11 @@ extern "C" {
|
|||
* <dd>supported, see libevdev_enable_event_code()</dd>
|
||||
* <dt>EVIOCGKEYCODE:</dt>
|
||||
* <dd>currently not supported</dd>
|
||||
* <dt>EVIOCGKEYCODE:</dt>
|
||||
* <dd>currently not supported</dd>
|
||||
* <dt>EVIOCSKEYCODE:</dt>
|
||||
* <dd>currently not supported</dd>
|
||||
* <dt>EVIOCSKEYCODE:</dt>
|
||||
* <dt>EVIOCGKEYCODE_V2:</dt>
|
||||
* <dd>currently not supported</dd>
|
||||
* <dt>EVIOCSKEYCODE_V2:</dt>
|
||||
* <dd>currently not supported</dd>
|
||||
* <dt>EVIOCGNAME:</dt>
|
||||
* <dd>supported, see libevdev_get_name()</dd>
|
||||
|
|
@ -544,6 +544,10 @@ extern "C" {
|
|||
* <dt>EVIOCREVOKE:</dt>
|
||||
* <dd>currently not supported, see
|
||||
* 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>
|
||||
*
|
||||
*/
|
||||
|
|
@ -1559,8 +1563,7 @@ int libevdev_get_event_value(const struct libevdev *dev, unsigned int type, unsi
|
|||
*
|
||||
* @return 0 on success, or -1 on failure.
|
||||
* @retval -1
|
||||
* - the device does not have the event type or
|
||||
* - code enabled, or the code is outside the, or
|
||||
* - the device does not have the event type or code enabled, or
|
||||
* - the code is outside the allowed limits for the given type, or
|
||||
* - the type cannot be set, or
|
||||
* - the value is not permitted for the given code.
|
||||
|
|
|
|||
81
meson.build
81
meson.build
|
|
@ -1,5 +1,5 @@
|
|||
project('libevdev', 'c',
|
||||
version: '1.13.0', # change autotools version too
|
||||
version: '1.13.6', # change autotools version too
|
||||
license: 'MIT/Expat',
|
||||
default_options: [ 'c_std=gnu99', 'warning_level=2' ],
|
||||
meson_version: '>= 0.56.0')
|
||||
|
|
@ -55,8 +55,7 @@ event_names_h = configure_file(input: 'libevdev/libevdev.h',
|
|||
install_headers('libevdev/libevdev.h',
|
||||
'libevdev/libevdev-uinput.h',
|
||||
subdir: 'libevdev-1.0/libevdev')
|
||||
src_libevdev = [
|
||||
event_names_h,
|
||||
src_libevdev = [event_names_h] + files(
|
||||
'libevdev/libevdev.h',
|
||||
'libevdev/libevdev-int.h',
|
||||
'libevdev/libevdev-util.h',
|
||||
|
|
@ -67,7 +66,7 @@ src_libevdev = [
|
|||
'libevdev/libevdev-names.c',
|
||||
'include/linux/input.h',
|
||||
'include/linux/uinput.h',
|
||||
]
|
||||
)
|
||||
|
||||
mapfile = dir_src / 'libevdev.sym'
|
||||
version_flag = '-Wl,--version-script,@0@'.format(mapfile)
|
||||
|
|
@ -81,7 +80,9 @@ lib_libevdev = library('evdev',
|
|||
install: true
|
||||
)
|
||||
|
||||
dep_libevdev = declare_dependency(link_with: lib_libevdev)
|
||||
inc_libevdev = include_directories('.')
|
||||
dep_libevdev = declare_dependency(link_with: lib_libevdev,
|
||||
include_directories: [inc_libevdev])
|
||||
|
||||
pkgconfig.generate(
|
||||
filebase: 'libevdev',
|
||||
|
|
@ -101,34 +102,36 @@ install_man(manpage)
|
|||
|
||||
|
||||
# tools
|
||||
executable('libevdev-events',
|
||||
sources: ['tools/libevdev-events.c'],
|
||||
include_directories: [includes_include],
|
||||
dependencies: dep_libevdev,
|
||||
install: false)
|
||||
executable('libevdev-list-codes',
|
||||
sources: ['tools/libevdev-list-codes.c'],
|
||||
include_directories: [includes_include],
|
||||
dependencies: dep_libevdev,
|
||||
install: false)
|
||||
executable('touchpad-edge-detector',
|
||||
sources: ['tools/touchpad-edge-detector.c'],
|
||||
include_directories: [includes_include],
|
||||
dependencies: [dep_libevdev, dep_lm],
|
||||
install: true)
|
||||
executable('mouse-dpi-tool',
|
||||
sources: ['tools/mouse-dpi-tool.c'],
|
||||
include_directories: [includes_include],
|
||||
dependencies: dep_libevdev,
|
||||
install: true)
|
||||
executable('libevdev-tweak-device',
|
||||
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')
|
||||
if not get_option('tools').disabled()
|
||||
executable('libevdev-events',
|
||||
sources: ['tools/libevdev-events.c'],
|
||||
include_directories: [includes_include],
|
||||
dependencies: dep_libevdev,
|
||||
install: false)
|
||||
executable('libevdev-list-codes',
|
||||
sources: ['tools/libevdev-list-codes.c'],
|
||||
include_directories: [includes_include],
|
||||
dependencies: dep_libevdev,
|
||||
install: false)
|
||||
executable('touchpad-edge-detector',
|
||||
sources: ['tools/touchpad-edge-detector.c'],
|
||||
include_directories: [includes_include],
|
||||
dependencies: [dep_libevdev, dep_lm],
|
||||
install: true)
|
||||
executable('mouse-dpi-tool',
|
||||
sources: ['tools/mouse-dpi-tool.c'],
|
||||
include_directories: [includes_include],
|
||||
dependencies: dep_libevdev,
|
||||
install: true)
|
||||
executable('libevdev-tweak-device',
|
||||
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
|
||||
dep_check = dependency('check', version: '>= 0.9.9',
|
||||
|
|
@ -162,7 +165,7 @@ if dep_check.found()
|
|||
include_directories: [includes_include],
|
||||
dependencies: [dep_libevdev, dep_check],
|
||||
install: false)
|
||||
test('test-event-codes', test_event_codes, suite: 'library')
|
||||
test('test-event-codes', test_event_codes, suite: ['library', 'needs-uinput'])
|
||||
|
||||
test_internals = executable('test-internals',
|
||||
sources: src_common + [
|
||||
|
|
@ -171,7 +174,7 @@ if dep_check.found()
|
|||
include_directories: [includes_include],
|
||||
dependencies: [dep_libevdev, dep_check],
|
||||
install: false)
|
||||
test('test-internals', test_internals, suite: 'library')
|
||||
test('test-internals', test_internals, suite: ['library', 'needs-uinput'])
|
||||
|
||||
test_uinput = executable('test-uinput',
|
||||
sources: src_common + [
|
||||
|
|
@ -180,7 +183,7 @@ if dep_check.found()
|
|||
include_directories: [includes_include],
|
||||
dependencies: [dep_libevdev, dep_check],
|
||||
install: false)
|
||||
test('test-uinput', test_uinput, suite: 'library')
|
||||
test('test-uinput', test_uinput, suite: ['library', 'needs-uinput'])
|
||||
|
||||
test_libevdev = executable('test-libevdev',
|
||||
sources: src_common + [
|
||||
|
|
@ -191,7 +194,7 @@ if dep_check.found()
|
|||
include_directories: [includes_include],
|
||||
dependencies: [dep_libevdev, dep_check],
|
||||
install: false)
|
||||
test('test-libevdev', test_libevdev, suite: 'library', env: ['CK_DEFAULT_TIMEOUT=10'])
|
||||
test('test-libevdev', test_libevdev, suite: ['library', 'needs-uinput'], env: ['CK_DEFAULT_TIMEOUT=10'])
|
||||
|
||||
test_kernel = executable('test-kernel',
|
||||
sources: src_common + [
|
||||
|
|
@ -200,7 +203,7 @@ if dep_check.found()
|
|||
include_directories: [includes_include],
|
||||
dependencies: [dep_libevdev, dep_check],
|
||||
install: false)
|
||||
test('test-kernel', test_kernel, suite: 'kernel')
|
||||
test('test-kernel', test_kernel, suite: ['kernel', 'needs-uinput'])
|
||||
|
||||
|
||||
valgrind = find_program('valgrind', required: false)
|
||||
|
|
@ -230,8 +233,6 @@ endif
|
|||
|
||||
doxygen = find_program('doxygen', required: get_option('documentation'))
|
||||
if doxygen.found()
|
||||
doxygen = find_program('doxygen')
|
||||
|
||||
src_doxygen = files(
|
||||
# source files
|
||||
dir_src / 'libevdev.h',
|
||||
|
|
|
|||
|
|
@ -2,11 +2,15 @@ option('tests',
|
|||
type: 'feature',
|
||||
value: 'enabled',
|
||||
description: 'Build the tests')
|
||||
option('tools',
|
||||
type: 'feature',
|
||||
value: 'enabled',
|
||||
description: 'Build the tools')
|
||||
option('documentation',
|
||||
type: 'feature',
|
||||
value: 'enabled',
|
||||
description: 'Build the documentation')
|
||||
option('coverity',
|
||||
type: 'boolean',
|
||||
value: 'false',
|
||||
value: false,
|
||||
description: 'Enable coverity build fixes, see meson.build for details')
|
||||
|
|
|
|||
|
|
@ -89,24 +89,11 @@ test_kernel_SOURCES = \
|
|||
test_kernel_CFLAGS = -I$(top_srcdir)
|
||||
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
|
||||
|
||||
CLEANFILES = gcov-reports/*.gcov gcov-reports/summary.txt *.gcno *.gcda
|
||||
|
||||
gcov-report: generate-gcov-report.sh check-TESTS
|
||||
gcov-report: generate-gcov-report.sh
|
||||
$(AM_V_GEN)$(srcdir)/generate-gcov-report.sh gcov-reports $(top_builddir)/libevdev $(builddir)
|
||||
|
||||
gcov: gcov-report
|
||||
|
|
|
|||
|
|
@ -158,7 +158,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_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_MAX), "SW_MACHINE_COVER");
|
||||
ck_assert_str_eq(libevdev_event_code_get_name(EV_SW, SW_MAX), "SW_USB_INSERT");
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
|
|
|||
|
|
@ -617,12 +617,12 @@ START_TEST(test_syn_delta_sw)
|
|||
EV_SYN, SYN_DROPPED,
|
||||
EV_SW, SW_HEADPHONE_INSERT,
|
||||
EV_SW, SW_MICROPHONE_INSERT,
|
||||
EV_SW, SW_MAX,
|
||||
EV_SW, SW_MACHINE_COVER, /* Replace with SW_MAX once runners are on 6.16 */
|
||||
-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_MAX, 1);
|
||||
uinput_device_event(uidev, EV_SW, SW_MACHINE_COVER, 1);
|
||||
uinput_device_event(uidev, EV_SYN, SYN_REPORT, 0);
|
||||
rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_FORCE_SYNC, &ev);
|
||||
ck_assert_int_eq(rc, LIBEVDEV_READ_STATUS_SYNC);
|
||||
|
|
@ -635,7 +635,7 @@ START_TEST(test_syn_delta_sw)
|
|||
assert_event(&ev, EV_SW, SW_MICROPHONE_INSERT, 1);
|
||||
rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_SYNC, &ev);
|
||||
ck_assert_int_eq(rc, LIBEVDEV_READ_STATUS_SYNC);
|
||||
assert_event(&ev, EV_SW, SW_MAX, 1);
|
||||
assert_event(&ev, EV_SW, SW_MACHINE_COVER, 1);
|
||||
rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_SYNC, &ev);
|
||||
ck_assert_int_eq(rc, LIBEVDEV_READ_STATUS_SYNC);
|
||||
assert_event(&ev, EV_SYN, SYN_REPORT, 0);
|
||||
|
|
@ -644,7 +644,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_MICROPHONE_INSERT), 1);
|
||||
ck_assert_int_eq(libevdev_get_event_value(dev, EV_SW, SW_MAX), 1);
|
||||
ck_assert_int_eq(libevdev_get_event_value(dev, EV_SW, SW_MACHINE_COVER), 1);
|
||||
|
||||
uinput_device_free(uidev);
|
||||
libevdev_free(dev);
|
||||
|
|
@ -1008,6 +1008,206 @@ START_TEST(test_syn_delta_tracking_ids_btntool)
|
|||
}
|
||||
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)
|
||||
{
|
||||
struct uinput_device* uidev;
|
||||
|
|
@ -2060,6 +2260,7 @@ TEST_SUITE_ROOT_PRIVILEGES(libevdev_events)
|
|||
add_test(s, test_syn_delta_late_sync);
|
||||
add_test(s, test_syn_delta_tracking_ids);
|
||||
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_incomplete_sync);
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ int main(void)
|
|||
srunner_add_suite(sr, t->setup());
|
||||
}
|
||||
|
||||
srunner_run_all(sr, CK_NORMAL);
|
||||
srunner_run_all(sr, CK_ENV);
|
||||
|
||||
failed = srunner_ntests_failed(sr);
|
||||
srunner_free(sr);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,36 @@
|
|||
|
||||
set -e
|
||||
|
||||
make
|
||||
rsync --delete -avz doc/html/ freedesktop.org:/srv/www.freedesktop.org/www/software/libevdev/doc/latest
|
||||
tag="$1"
|
||||
case $tag in
|
||||
-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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue