On Thu, Nov 23, 2017 at 09:15:27PM +0300, Greg V wrote: > - some items in meson were missing a dependency on udev > - libdl does not exist on FreeBSD, dlopen is in libc > - no linux/types.h on FreeBSD > - stdarg.h included when variadic functions are used > - and other fixes > --- > include/linux/input.h | 11 +++++++++++ > meson.build | 9 +++++++-- > src/evdev.h | 1 + > src/libinput-private.h | 1 + > src/libinput-util.h | 4 ++++ > src/libinput.c | 1 + > src/libinput.h | 1 + > test/litest.c | 27 +++++++++++++++++++++++++-- > test/litest.h | 1 + > test/test-log.c | 1 + > test/test-misc.c | 1 + > test/test-pointer.c | 2 ++ > test/test-tablet.c | 1 + > tools/libinput-debug-events.c | 1 + > tools/libinput-debug-gui.c | 1 + > tools/ptraccel-debug.c | 8 +++++++- > 16 files changed, 66 insertions(+), 5 deletions(-) > > diff --git a/include/linux/input.h b/include/linux/input.h > index 06316b27..95134d8e 100644 > --- a/include/linux/input.h > +++ b/include/linux/input.h > @@ -11,7 +11,18 @@ > #include <sys/time.h> > #include <sys/ioctl.h> > #include <sys/types.h> > +#ifdef __FreeBSD__ > +#define __u8 uint8_t > +#define __u16 uint16_t > +#define __u32 uint32_t > +#define __u64 uint64_t > +#define __s16 int16_t > +#define __s32 int32_t > +#define _IOC_READ IOC_OUT > +#define _IOC_WRITE IOC_IN > +#else > #include <linux/types.h> > +#endif
I'd rather have these defines in the config.h for BSD if possible. This header file should be modified as little as possible. > #include "input-event-codes.h" > > diff --git a/meson.build b/meson.build > index 13c6a27f..5d9db605 100644 > --- a/meson.build > +++ b/meson.build > @@ -145,7 +145,9 @@ src_libfilter = [ > 'src/filter.h', > 'src/filter-private.h' > ] > -libfilter = static_library('filter', src_libfilter) > +libfilter = static_library('filter', src_libfilter, > + dependencies : dep_udev, > + include_directories : includes_include) > dep_libfilter = declare_dependency(link_with : libfilter) > > ############ libinput.so ############ > @@ -598,7 +600,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, > @@ -689,12 +691,14 @@ if get_option('tests') > # build-test only > executable('test-build-pedantic', > 'test/build-pedantic.c', > + dependencies : [dep_udev], > include_directories : [includes_src, includes_include], > c_args : ['-std=c99', '-pedantic', '-Werror'], > install : false) > # build-test only > executable('test-build-std-gnuc90', > 'test/build-pedantic.c', > + dependencies : [dep_udev], > include_directories : [includes_src, includes_include], > c_args : ['-std=gnu90', '-Werror'], > install : false) > @@ -707,6 +711,7 @@ if get_option('tests') > # test including from C++ > executable('test-build-cxx', > 'test/build-cxx.cc', > + dependencies : [dep_udev], > include_directories : [includes_src, includes_include], > install : false) > I split those into a separate commit, pushed, thanks. > diff --git a/src/evdev.h b/src/evdev.h > index 11ed7da5..75223852 100644 > --- a/src/evdev.h > +++ b/src/evdev.h > @@ -29,6 +29,7 @@ > #include "config.h" > > #include <stdbool.h> > +#include <stdarg.h> I split all the stdarg.h into a separate commit, pushed, thanks. > diff --git a/src/libinput-util.h b/src/libinput-util.h > index 57bcdbb5..a4522f6b 100644 > --- a/src/libinput-util.h > +++ b/src/libinput-util.h > @@ -30,7 +30,11 @@ > #include <assert.h> > #include <errno.h> > #include <limits.h> > +#ifdef __FreeBSD__ > +#include <xlocale.h> > +#else > #include <locale.h> > +#endif is there a freebsd image on the docker registry that's reliable? adding this to circleci seems like the only way to make sure it keeps building. > #include <math.h> > #include <stdarg.h> > #include <stdbool.h> > diff --git a/src/libinput.c b/src/libinput.c > index 49de8f27..d85693a4 100644 > --- a/src/libinput.c > +++ b/src/libinput.c > @@ -28,6 +28,7 @@ > #include <inttypes.h> > #include <stdio.h> > #include <stdlib.h> > +#include <stdarg.h> > #include <string.h> > #include <sys/epoll.h> > #include <unistd.h> > diff --git a/src/libinput.h b/src/libinput.h > index 1a06bc7c..759bce91 100644 > --- a/src/libinput.h > +++ b/src/libinput.h > @@ -31,6 +31,7 @@ extern "C" { > > #include <stdlib.h> > #include <stdint.h> > +#include <stdarg.h> > #include <libudev.h> > > #define LIBINPUT_ATTRIBUTE_PRINTF(_format, _args) \ > diff --git a/test/litest.c b/test/litest.c > index 3ca319c2..c27c2369 100644 > --- a/test/litest.c > +++ b/test/litest.c > @@ -36,12 +36,17 @@ > #include <stdint.h> > #include <stdio.h> > #include <stdlib.h> > +#include <stdarg.h> > #include <time.h> > #include <unistd.h> > #include "linux/input.h" > #include <sys/ptrace.h> > #include <sys/resource.h> > +#ifdef __linux__ > #include <sys/sendfile.h> > +#elif __FreeBSD__ > +#include <sys/socket.h> > +#endif > #include <sys/timerfd.h> > #include <sys/wait.h> > #include <sys/stat.h> > @@ -1031,7 +1036,13 @@ 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( > +#ifdef __linux__ > + sendfile(out, in, NULL, 40960) > +#elif __FreeBSD__ > + sendfile(out, in, 0, 40960, NULL, NULL, 0) > +#endif > + , 0); I really dislike having ifdefs for parameter order inside a function. Please make this a static inline that does nothing but the ifdefs. Bonus points for finding a function that does the same job that we don't need ifdefs. It's the test suite, I'd rather go for readability than efficiency. > close(out); > close(in); > > @@ -3536,10 +3547,17 @@ is_debugger_attached(void) > > if (pid == 0) { > int ppid = getppid(); > +#ifdef __linux__ > if (ptrace(PTRACE_ATTACH, ppid, NULL, NULL) == 0) { > waitpid(ppid, NULL, 0); > ptrace(PTRACE_CONT, NULL, NULL); oh. this one looks like it's buggy anyway but just happens to work. I'm surprised nothing warned about it. > ptrace(PTRACE_DETACH, ppid, NULL, NULL); > +#elif __FreeBSD__ > + if (ptrace(PT_ATTACH, ppid, NULL, 0) == 0) { > + waitpid(ppid, NULL, 0); > + ptrace(PT_CONTINUE, ppid, NULL, 0); > + ptrace(PT_DETACH, ppid, NULL, 0); > +#endif afaict the only difference between linux and bsd here is the name of the PTRACE_ defines - they can be in the config.h again. > rc = 0; > } else { > rc = 1; > @@ -3608,7 +3626,12 @@ main(int argc, char **argv) > if (getuid() != 0) { > fprintf(stderr, > "%s must be run as root.\n", > - program_invocation_short_name); > +#ifdef __linux__ > + program_invocation_short_name > +#else > + argv[0] > +#endif no. think of something nicer please. either a global, or using basename(argv[0]) or something else. But I'm not having ifdefs for this. same for the ptraccel-debug one. Cheers, Peter > + ); > return 77; > } > > diff --git a/test/litest.h b/test/litest.h > index b7667ffe..faa469c0 100644 > --- a/test/litest.h > +++ b/test/litest.h > @@ -27,6 +27,7 @@ > #define LITEST_H > > #include <stdbool.h> > +#include <stdarg.h> > #include <check.h> > #include <libevdev/libevdev.h> > #include <libevdev/libevdev-uinput.h> > diff --git a/test/test-log.c b/test/test-log.c > index 2705a81e..02ff0185 100644 > --- a/test/test-log.c > +++ b/test/test-log.c > @@ -28,6 +28,7 @@ > #include <fcntl.h> > #include <libinput.h> > #include <unistd.h> > +#include <stdarg.h> > > #include "litest.h" > > diff --git a/test/test-misc.c b/test/test-misc.c > index 32081c03..94cbfcc1 100644 > --- a/test/test-misc.c > +++ b/test/test-misc.c > @@ -29,6 +29,7 @@ > #include <libinput.h> > #include <libinput-util.h> > #include <unistd.h> > +#include <stdarg.h> > > #include "litest.h" > #include "libinput-util.h" > 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" > diff --git a/test/test-tablet.c b/test/test-tablet.c > index 218b6e40..bc089389 100644 > --- a/test/test-tablet.c > +++ b/test/test-tablet.c > @@ -29,6 +29,7 @@ > #include <libinput.h> > #include <unistd.h> > #include <stdbool.h> > +#include <stdarg.h> > > #include "libinput-util.h" > #include "evdev-tablet.h" > diff --git a/tools/libinput-debug-events.c b/tools/libinput-debug-events.c > index 56810c57..33f51d0e 100644 > --- a/tools/libinput-debug-events.c > +++ b/tools/libinput-debug-events.c > @@ -29,6 +29,7 @@ > #include <getopt.h> > #include <poll.h> > #include <stdio.h> > +#include <stdarg.h> > #include <signal.h> > #include <string.h> > #include <time.h> > diff --git a/tools/libinput-debug-gui.c b/tools/libinput-debug-gui.c > index 43ae5499..ab49ad66 100644 > --- a/tools/libinput-debug-gui.c > +++ b/tools/libinput-debug-gui.c > @@ -31,6 +31,7 @@ > #include <math.h> > #include <stdio.h> > #include <stdlib.h> > +#include <stdarg.h> > #include <string.h> > #include <unistd.h> > > diff --git a/tools/ptraccel-debug.c b/tools/ptraccel-debug.c > index 93be523f..262b8587 100644 > --- a/tools/ptraccel-debug.c > +++ b/tools/ptraccel-debug.c > @@ -190,7 +190,13 @@ print_accel_func_trackpoint(struct motion_filter *filter, > static void > usage(void) > { > - printf("Usage: %s [options] [dx1] [dx2] [...] > gnuplot.data\n", > program_invocation_short_name); > + printf("Usage: %s [options] [dx1] [dx2] [...] > gnuplot.data\n", > +#ifdef __linux__ > + program_invocation_short_name > +#else > + "ptraccel-debug" > +#endif > + ); > printf("\n" > "Options:\n" > "--mode=<motion|accel|delta|sequence> \n" > -- > 2.15.0 > > _______________________________________________ > wayland-devel mailing list > wayland-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/wayland-devel > _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel