x11-libs/tslib: Fix CMake <3.10 warning, build w/ 32-bit and printf UB

Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
This commit is contained in:
Andreas Sturmlechner
2025-10-17 13:00:52 +02:00
parent 91b9b3eb30
commit 00d7f2a3d8
3 changed files with 305 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
From eaa4a100fdcb5e2eac02d8b44a73cd6ad9caafd8 Mon Sep 17 00:00:00 2001
From: Andreas Sturmlechner <asturm@gentoo.org>
Date: Fri, 17 Oct 2025 12:44:25 +0200
Subject: [PATCH] Bump minimum CMAKE_MINIMUM_REQUIRED version to 3.5, set range
up to 3.31
CMake 3.31 started to warn about removing < 3.10 compatibility in the future.
CMake 4 dropped < 3.5 compatibility.
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
---
CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 269ea77..6bacc4f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,7 +8,7 @@
#
#
-cmake_minimum_required(VERSION 3.3)
+cmake_minimum_required(VERSION 3.10..3.31)
project(tslib LANGUAGES C)
--
2.51.0

View File

@@ -0,0 +1,213 @@
Source:
[PATCH 1/2]: git master
[PATCH 2/2]: https://github.com/libts/tslib/pull/229
From acc471e96693b3f772b42687c5378591f0ed54ae Mon Sep 17 00:00:00 2001
From: steini2001 <179123067+steini2001@users.noreply.github.com>
Date: Tue, 12 Nov 2024 14:25:15 +0100
Subject: [PATCH 1/2] Fix build on 32bit arches with 64bit time_t and debug
enabled
commit a7a39a6 forgot this one
---
plugins/input-raw.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/input-raw.c b/plugins/input-raw.c
index 0e8a22f..da22720 100644
--- a/plugins/input-raw.c
+++ b/plugins/input-raw.c
@@ -650,8 +650,8 @@ static int ts_input_read_mt(struct tslib_module_info *inf,
#ifdef DEBUG
printf("INPUT-RAW: read type %d code %3d value %4d time %ld.%ld\n",
i->ev[it].type, i->ev[it].code,
- i->ev[it].value, (long)i->ev[it].time.tv_sec,
- (long)i->ev[it].time.tv_usec);
+ i->ev[it].value, (long)i->ev[it].input_event_sec,
+ (long)i->ev[it].input_event_usec);
#endif
switch (i->ev[it].type) {
case EV_KEY:
--
2.51.0
From 32cf8d1b9e38b5eada97b00c73999af48be2d1cb Mon Sep 17 00:00:00 2001
From: steini2001 <179123067+steini2001@users.noreply.github.com>
Date: Tue, 12 Nov 2024 15:02:31 +0100
Subject: [PATCH 2/2] fix printf with 64bit time_t
Printing long long with %ld is UB. Converting long long to long could overflow.
To be compatible with 32bit time_t we need an explicit cast to long long.
---
README.md | 6 +++---
plugins/input-evdev-raw.c | 14 +++++++-------
plugins/input-raw.c | 12 ++++++------
tests/ts_print.c | 2 +-
tests/ts_print_mt.c | 6 +++---
tests/ts_print_raw.c | 2 +-
tests/ts_test.c | 2 +-
tests/ts_test_mt_sdl.c | 6 +++---
8 files changed, 25 insertions(+), 25 deletions(-)
diff --git a/README.md b/README.md
index aaec82d..1d781b8 100644
--- a/README.md
+++ b/README.md
@@ -585,9 +585,9 @@ This is a complete example program, similar to `ts_print_mt.c`:
continue;
#endif
- printf("%ld.%06ld: (slot %d) %6d %6d %6d\n",
- samp_mt[j][i].tv.tv_sec,
- samp_mt[j][i].tv.tv_usec,
+ printf("%lld.%06lld: (slot %d) %6d %6d %6d\n",
+ (long long)samp_mt[j][i].tv.tv_sec,
+ (long long)samp_mt[j][i].tv.tv_usec,
samp_mt[j][i].slot,
samp_mt[j][i].x,
samp_mt[j][i].y,
diff --git a/plugins/input-evdev-raw.c b/plugins/input-evdev-raw.c
index d187645..24208cf 100644
--- a/plugins/input-evdev-raw.c
+++ b/plugins/input-evdev-raw.c
@@ -461,11 +461,11 @@ static int ts_input_read(struct tslib_module_info *inf,
samp->tv = ev.time;
#ifdef DEBUG
fprintf(stderr,
- "RAW nr %d ---------------------> %d %d %d %ld.%ld\n",
+ "RAW nr %d ---------------------> %d %d %d %lld.%06lld\n",
total,
samp->x, samp->y, samp->pressure,
- (long)samp->tv.tv_sec,
- (long)samp->tv.tv_usec);
+ (long long)samp->tv.tv_sec,
+ (long long)samp->tv.tv_usec);
#endif /* DEBUG */
samp++;
total++;
@@ -651,11 +651,11 @@ static int ts_input_read_mt(struct tslib_module_info *inf,
}
#ifdef DEBUG
- printf("INPUT-RAW nr %d: read type %d code %3d value %4d time %ld.%ld\n",
+ printf("INPUT-RAW nr %d: read type %d code %3d value %4d time %lld.%06lld\n",
total,
- ev.type, ev.code,
- ev.value, (long)ev.time.tv_sec,
- (long)ev.time.tv_usec);
+ ev.type, ev.code, ev.value,
+ (long long)ev.time.tv_sec,
+ (long long)ev.time.tv_usec);
#endif
switch (ev.type) {
case EV_KEY:
diff --git a/plugins/input-raw.c b/plugins/input-raw.c
index da22720..ae0cad6 100644
--- a/plugins/input-raw.c
+++ b/plugins/input-raw.c
@@ -393,10 +393,10 @@ static int ts_input_read(struct tslib_module_info *inf,
samp->tv.tv_usec = ev.input_event_usec;
#ifdef DEBUG
fprintf(stderr,
- "RAW---------------------> %d %d %d %ld.%ld\n",
+ "RAW---------------------> %d %d %d %lld.%06lld\n",
samp->x, samp->y, samp->pressure,
- (long)samp->tv.tv_sec,
- (long)samp->tv.tv_usec);
+ (long long)samp->tv.tv_sec,
+ (long long)samp->tv.tv_usec);
#endif /* DEBUG */
samp++;
total++;
@@ -648,10 +648,10 @@ static int ts_input_read_mt(struct tslib_module_info *inf,
for (it = 0; it < rd / sizeof(struct input_event); it++) {
#ifdef DEBUG
- printf("INPUT-RAW: read type %d code %3d value %4d time %ld.%ld\n",
+ printf("INPUT-RAW: read type %d code %3d value %4d time %lld.%06lld\n",
i->ev[it].type, i->ev[it].code,
- i->ev[it].value, (long)i->ev[it].input_event_sec,
- (long)i->ev[it].input_event_usec);
+ i->ev[it].value, (long long)i->ev[it].input_event_sec,
+ (long long)i->ev[it].input_event_usec);
#endif
switch (i->ev[it].type) {
case EV_KEY:
diff --git a/tests/ts_print.c b/tests/ts_print.c
index e9e6c4f..406a087 100644
--- a/tests/ts_print.c
+++ b/tests/ts_print.c
@@ -106,7 +106,7 @@ int main(int argc, char **argv)
if (ret != 1)
continue;
- printf("%ld.%06ld: %6d %6d %6d\n", samp.tv.tv_sec, samp.tv.tv_usec, samp.x, samp.y, samp.pressure);
+ printf("%lld.%06lld: %6d %6d %6d\n", (long long)samp.tv.tv_sec, (long long)samp.tv.tv_usec, samp.x, samp.y, samp.pressure);
}
diff --git a/tests/ts_print_mt.c b/tests/ts_print_mt.c
index 6f18c67..5779ca2 100644
--- a/tests/ts_print_mt.c
+++ b/tests/ts_print_mt.c
@@ -254,10 +254,10 @@ int main(int argc, char **argv)
if (!(samp_mt[j][i].valid & TSLIB_MT_VALID))
continue;
- printf(YELLOW "sample %d - %ld.%06ld -" RESET " (slot %d) %6d %6d %6d\n",
+ printf(YELLOW "sample %d - %lld.%06lld -" RESET " (slot %d) %6d %6d %6d\n",
j,
- samp_mt[j][i].tv.tv_sec,
- samp_mt[j][i].tv.tv_usec,
+ (long long)samp_mt[j][i].tv.tv_sec,
+ (long long)samp_mt[j][i].tv.tv_usec,
samp_mt[j][i].slot,
samp_mt[j][i].x,
samp_mt[j][i].y,
diff --git a/tests/ts_print_raw.c b/tests/ts_print_raw.c
index b9e9466..a4dae3d 100644
--- a/tests/ts_print_raw.c
+++ b/tests/ts_print_raw.c
@@ -83,7 +83,7 @@ int main(int argc, char **argv)
if (ret != 1)
continue;
- printf("%ld.%06ld: %6d %6d %6d\n", samp.tv.tv_sec, samp.tv.tv_usec, samp.x, samp.y, samp.pressure);
+ printf("%lld.%06lld: %6d %6d %6d\n", (long long)samp.tv.tv_sec, (long long)samp.tv.tv_usec, samp.x, samp.y, samp.pressure);
}
diff --git a/tests/ts_test.c b/tests/ts_test.c
index c9ced73..4d6a5ca 100644
--- a/tests/ts_test.c
+++ b/tests/ts_test.c
@@ -202,7 +202,7 @@ int main(int argc, char **argv)
quit_pressed = 1;
}
- printf("%ld.%06ld: %6d %6d %6d\n", samp.tv.tv_sec, samp.tv.tv_usec,
+ printf("%lld.%06lld: %6d %6d %6d\n", (long long)samp.tv.tv_sec, (long long)samp.tv.tv_usec,
samp.x, samp.y, samp.pressure);
if (samp.pressure > 0) {
diff --git a/tests/ts_test_mt_sdl.c b/tests/ts_test_mt_sdl.c
index 556c949..bc4808a 100644
--- a/tests/ts_test_mt_sdl.c
+++ b/tests/ts_test_mt_sdl.c
@@ -200,9 +200,9 @@ int main(int argc, char **argv)
samp_mt[0][i].x, samp_mt[0][i].y);
if (verbose) {
- printf("%ld.%06ld: (slot %d) %6d %6d %6d\n",
- samp_mt[0][i].tv.tv_sec,
- samp_mt[0][i].tv.tv_usec,
+ printf("%lld.%06lld: (slot %d) %6d %6d %6d\n",
+ (long long)samp_mt[0][i].tv.tv_sec,
+ (long long)samp_mt[0][i].tv.tv_usec,
samp_mt[0][i].slot,
samp_mt[0][i].x,
samp_mt[0][i].y,
--
2.51.0

View File

@@ -0,0 +1,62 @@
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit cmake-multilib
DESCRIPTION="Touchscreen Access Library"
HOMEPAGE="https://github.com/kergoth/tslib"
SRC_URI="https://github.com/libts/tslib/releases/download/${PV}/${P}.tar.xz"
LICENSE="LGPL-2 uinput? ( GPL-2+ )"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
IUSE="evdev sdl uinput"
DEPEND="
evdev? ( dev-libs/libevdev[${MULTILIB_USEDEP}] )
sdl? ( media-libs/libsdl2[${MULTILIB_USEDEP}] )
"
RDEPEND="${DEPEND}"
BDEPEND="evdev? ( virtual/pkgconfig )"
DOCS=( AUTHORS NEWS README{,.md} )
PATCHES=(
"${FILESDIR}/${PN}-1.21-optional-utils.patch"
"${FILESDIR}/${P}-cmake4-1.patch" # bug 955696
"${FILESDIR}/${P}-fix-64bit-time_t-printf-ub.patch"
)
src_configure() {
my_configure() {
local mycmakeargs=(
-Denable-input-evdev=$(usex evdev)
-DENABLE_TOOLS=$(usex uinput $(multilib_is_native_abi && echo ON || echo OFF) OFF)
-DENABLE_UTILS=$(multilib_is_native_abi && echo ON || echo OFF)
-Denable-arctic2=ON
-Denable-collie=ON
-Denable-corgi=ON
-Denable-cy8mrln-palmpre=ON
-Denable-dejitter=ON
-Denable-dmc=ON
-Denable-dmc_dus3000=ON
-Denable-galax=ON
-Denable-h3600=ON
-Denable-input=ON
-Denable-linear-h2200=ON
-Denable-linear=ON
-Denable-mk712=ON
-Denable-one-wire-ts-input=ON
-Denable-pthres=ON
-Denable-tatung=ON
-Denable-ucb1x00=ON
-Denable-variance=ON
)
multilib_is_native_abi && mycmakeargs+=( -Dwith-sdl=$(usex sdl) )
cmake_src_configure
}
multilib_parallel_foreach_abi my_configure
}