[PATCH v2 libinput] FreeBSD portability fixes

Greg V greg at unrelenting.technology
Fri Dec 1 13:59:43 UTC 2017


---
 .gitignore            |  1 +
 include/linux/input.h |  4 ++++
 meson.build           | 39 ++++++++++++++++++++++++++++++++++++++-
 src/libinput-util.h   |  4 ++++
 test/litest.c         |  9 ++++-----
 test/litest.h         |  8 ++++++++
 test/test-pointer.c   |  2 ++
 7 files changed, 61 insertions(+), 6 deletions(-)

diff --git a/.gitignore b/.gitignore
index d35d0c3e..a2ef14cd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@
 *.gcda
 *.gcno
 tags
+/build
diff --git a/include/linux/input.h b/include/linux/input.h
index 06316b27..11ff9cce 100644
--- a/include/linux/input.h
+++ b/include/linux/input.h
@@ -8,10 +8,14 @@
 #ifndef _INPUT_H
 #define _INPUT_H
 
+#include <config.h>
+
 #include <sys/time.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
+#ifdef __linux__
 #include <linux/types.h>
+#endif
 
 #include "input-event-codes.h"
 
diff --git a/meson.build b/meson.build
index b82fd42e..29329e6e 100644
--- a/meson.build
+++ b/meson.build
@@ -39,6 +39,35 @@ if cc.get_define('static_assert', prefix : prefix) == ''
 	config_h.set('static_assert(...)', '/* */')
 endif
 
+if not cc.has_header_symbol('errno.h', 'program_invocation_short_name', prefix : prefix)
+	if cc.has_header_symbol('stdlib.h', 'getprogname')
+		config_h.set('program_invocation_short_name', 'getprogname()')
+	endif
+endif
+
+if cc.has_header('xlocale.h')
+	config_h.set('HAVE_XLOCALE_H', '1')
+endif
+
+if not cc.has_header_symbol('sys/ptrace.h', 'PTRACE_ATTACH', prefix : prefix)
+	config_h.set('PTRACE_ATTACH', 'PT_ATTACH')
+	config_h.set('PTRACE_CONT', 'PT_CONTINUE')
+	config_h.set('PTRACE_DETACH', 'PT_DETACH')
+endif
+
+if target_machine.system() != 'linux'
+	config_h.set('__u8', 'uint8_t')
+	config_h.set('__u16', 'uint16_t')
+	config_h.set('__u32', 'uint32_t')
+	config_h.set('__u64', 'uint64_t')
+	config_h.set('__s8', 'int8_t')
+	config_h.set('__s16', 'int16_t')
+	config_h.set('__s32', 'int32_t')
+	config_h.set('__s64', 'int64_t')
+	config_h.set('_IOC_READ', 'IOC_OUT')
+	config_h.set('_IOC_WRITE', 'IOC_IN')
+endif
+
 # Dependencies
 pkgconfig = import('pkgconfig')
 dep_udev = dependency('libudev')
@@ -47,6 +76,11 @@ dep_libevdev = dependency('libevdev', version : '>= 0.4')
 dep_lm = cc.find_library('m', required : false)
 dep_rt = cc.find_library('rt', required : false)
 
+if target_machine.system() != 'linux'
+	dep_libepoll = declare_dependency(link_args : ['-lepoll-shim'], include_directories : [
+		include_directories(join_paths(get_option('prefix'), 'include', 'libepoll-shim')) ])
+endif
+
 # Include directories
 includes_include = include_directories('include')
 includes_src = include_directories('src')
@@ -193,6 +227,9 @@ deps_libinput = [
 	dep_libwacom,
 	dep_libinput_util
 ]
+if target_machine.system() != 'linux'
+	deps_libinput += [ dep_libepoll ]
+endif
 
 libinput_version_h_config = configuration_data()
 libinput_version_h_config.set('LIBINPUT_VERSION_MAJOR', libinput_version[0])
@@ -601,7 +638,7 @@ if get_option('tests')
 		'test/litest.c'
 	]
 
-	dep_dl = cc.find_library('dl')
+	dep_dl = cc.find_library('dl', required : false)
 	deps_litest = [
 		dep_libinput,
 		dep_check,
diff --git a/src/libinput-util.h b/src/libinput-util.h
index 57bcdbb5..6bd95474 100644
--- a/src/libinput-util.h
+++ b/src/libinput-util.h
@@ -31,11 +31,15 @@
 #include <errno.h>
 #include <limits.h>
 #include <locale.h>
+#ifdef HAVE_XLOCALE_H
+#include <xlocale.h>
+#endif
 #include <math.h>
 #include <stdarg.h>
 #include <stdbool.h>
 #include <stddef.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <time.h>
 #include <unistd.h>
diff --git a/test/litest.c b/test/litest.c
index 05726726..fd56347a 100644
--- a/test/litest.c
+++ b/test/litest.c
@@ -42,7 +42,6 @@
 #include "linux/input.h"
 #include <sys/ptrace.h>
 #include <sys/resource.h>
-#include <sys/sendfile.h>
 #include <sys/timerfd.h>
 #include <sys/wait.h>
 #include <sys/stat.h>
@@ -1032,7 +1031,7 @@ litest_copy_file(const char *dest, const char *src, const char *header)
 				 src,
 				 strerror(errno));
 	/* lazy, just check for error and empty file copy */
-	litest_assert_int_gt(sendfile(out, in, NULL, 40960), 0);
+	litest_assert_int_gt(litest_send_file(out, in), 0);
 	close(out);
 	close(in);
 
@@ -3537,10 +3536,10 @@ is_debugger_attached(void)
 
 	if (pid == 0) {
 		int ppid = getppid();
-		if (ptrace(PTRACE_ATTACH, ppid, NULL, NULL) == 0) {
+		if (ptrace(PTRACE_ATTACH, ppid, NULL, 0) == 0) {
 			waitpid(ppid, NULL, 0);
-			ptrace(PTRACE_CONT, NULL, NULL);
-			ptrace(PTRACE_DETACH, ppid, NULL, NULL);
+			ptrace(PTRACE_CONT, ppid, NULL, 0);
+			ptrace(PTRACE_DETACH, ppid, NULL, 0);
 			rc = 0;
 		} else {
 			rc = 1;
diff --git a/test/litest.h b/test/litest.h
index faa469c0..7406c125 100644
--- a/test/litest.h
+++ b/test/litest.h
@@ -1006,6 +1006,14 @@ litest_touchpad_is_external(struct litest_device *dev)
 	return is_external;
 }
 
+static inline int
+litest_send_file(int sock, int fd)
+{
+	char buf[40960];
+	int n = read(fd, buf, 40960);
+	return write(sock, buf, n);
+}
+
 #undef ck_assert_double_eq
 #undef ck_assert_double_ne
 #undef ck_assert_double_lt
diff --git a/test/test-pointer.c b/test/test-pointer.c
index 7324c0f6..14801aeb 100644
--- a/test/test-pointer.c
+++ b/test/test-pointer.c
@@ -30,7 +30,9 @@
 #include <libinput.h>
 #include <math.h>
 #include <unistd.h>
+#ifdef __linux__
 #include <values.h>
+#endif
 
 #include "libinput-util.h"
 #include "litest.h"
-- 
2.15.0



More information about the wayland-devel mailing list