All the tests fill fail anyway if the validation fails but this is a quick way
to fail everything early.

Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
---
 meson.build                    | 18 +++++++++++-------
 tools/libinput-list-quirks.c   | 24 ++++++++++++++++++++----
 tools/libinput-list-quirks.man | 10 +++++++++-
 3 files changed, 40 insertions(+), 12 deletions(-)

diff --git a/meson.build b/meson.build
index 5e4db287..8ac75cc7 100644
--- a/meson.build
+++ b/meson.build
@@ -489,13 +489,17 @@ configure_file(input : 'tools/libinput-debug-events.man',
               )
 
 libinput_list_quirks_sources = [ 'tools/libinput-list-quirks.c' ]
-executable('libinput-list-quirks',
-          libinput_list_quirks_sources,
-          dependencies : [dep_libquirks, dep_libinput],
-          include_directories : [includes_src, includes_include],
-          install_dir : libinput_tool_path,
-          install : true
-          )
+libinput_list_quirks = executable('libinput-list-quirks',
+                                 libinput_list_quirks_sources,
+                                 dependencies : [dep_libquirks, dep_libinput],
+                                 include_directories : [includes_src, 
includes_include],
+                                 install_dir : libinput_tool_path,
+                                 install : true
+                                )
+test('validate-quirks',
+     libinput_list_quirks,
+     args: ['--validate-only', 
'--data-dir=@0@'.format(join_paths(meson.source_root(), 'data'))]
+     )
 
 configure_file(input : 'tools/libinput-list-quirks.man',
               output : 'libinput-list-quirks.1',
diff --git a/tools/libinput-list-quirks.c b/tools/libinput-list-quirks.c
index 73e84895..009f7d64 100644
--- a/tools/libinput-list-quirks.c
+++ b/tools/libinput-list-quirks.c
@@ -136,21 +136,27 @@ list_device_quirks(struct quirks_context *ctx, struct 
udev_device *device)
 static void
 usage(void)
 {
-       printf("Usage: %s [--data-dir /path/to/data/dir] /dev/input/event0\n",
+       printf("Usage:\n"
+              "  %s [--data-dir /path/to/data/dir] /dev/input/event0\n"
+              "        Print the quirks for the given device\n"
+              "\n",
+              program_invocation_short_name);
+       printf("  %s [--data-dir /path/to/data/dir] --validate-only\n"
+              "        Validate the database\n",
               program_invocation_short_name);
-       printf("Note: this tool also takes a syspath\n");
 }
 
 int
 main(int argc, char **argv)
 {
-       struct udev *udev;
+       struct udev *udev = NULL;
        struct udev_device *device = NULL;
        const char *path;
        const char *data_path = NULL,
                   *override_file = NULL;
        int rc = 1;
        struct quirks_context *quirks;
+       bool validate = false;
 
        while (1) {
                int c;
@@ -158,11 +164,13 @@ main(int argc, char **argv)
                enum {
                        OPT_VERBOSE,
                        OPT_DATADIR,
+                       OPT_VALIDATE,
                };
                static struct option opts[] = {
                        { "help",     no_argument,       0, 'h' },
                        { "verbose",  no_argument,       0, OPT_VERBOSE },
                        { "data-dir", required_argument, 0, OPT_DATADIR },
+                       { "validate-only", no_argument,  0, OPT_VALIDATE },
                        { 0, 0, 0, 0}
                };
 
@@ -184,13 +192,16 @@ main(int argc, char **argv)
                case OPT_DATADIR:
                        data_path = optarg;
                        break;
+               case OPT_VALIDATE:
+                       validate = true;
+                       break;
                default:
                        usage();
                        return 1;
                }
        }
 
-       if (optind >= argc) {
+       if (optind >= argc && !validate) {
                usage();
                return 1;
        }
@@ -214,6 +225,11 @@ main(int argc, char **argv)
                return 1;
        }
 
+       if (validate) {
+               rc = 0;
+               goto out;
+       }
+
        udev = udev_new();
        path = argv[optind];
        if (strneq(path, "/sys/", 5)) {
diff --git a/tools/libinput-list-quirks.man b/tools/libinput-list-quirks.man
index 9d90847e..e18495f3 100644
--- a/tools/libinput-list-quirks.man
+++ b/tools/libinput-list-quirks.man
@@ -2,7 +2,11 @@
 .SH NAME
 libinput\-list\-quirks \- quirk debug helper for libinput
 .SH SYNOPSIS
-.B libinput list\-quirks [\-\-help] [\-\-data\-dir /path/to/dir] 
[\-\-verbose\fB] \fI/dev/input/event0\fB
+.B libinput list\-quirks [\-\-data\-dir /path/to/dir] [\-\-verbose\fB] 
\fI/dev/input/event0\fB
+.br
+.B libinput list\-quirks [\-\-data\-dir /path/to/dir] [\-\-verbose\fB] 
\-\-validate\-only
+.br
+.B libinput list\-quirks [\-\-help]
 .SH DESCRIPTION
 .PP
 The
@@ -20,6 +24,10 @@ Use the given directory as data directory for quirks files.
 .B \-\-help
 Print help
 .TP 8
+.B \-\-validate\-only
+Only validate that the quirks files can be parsed. When this option is
+given, no device file should be supplied.
+.TP 8
 .B \-\-verbose
 Use verbose output, useful for debugging.
 .SH LIBINPUT
-- 
2.14.4

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to