On Thu, Oct 12, 2017 at 10:09:43AM +0300, Pekka Paalanen wrote:
> On Wed, 11 Oct 2017 17:31:33 +0800
> Jonas Ådahl <jad...@gmail.com> wrote:
> 
> > Add a --strict flag for making wayland-scanner fail if the DTD
> > verification fails. This is useful for testing, so that a test case can
> > fail a scan when the protocol doesn't comply with the DTD.
> > 
> > Signed-off-by: Jonas Ådahl <jad...@gmail.com>
> > ---
> > 
> > This could be used by wayland-protocols (and others) to verify that
> > protocols comply to the DTD. wayland-protocols already test-scans
> > protocols,  but protocols that doesn't pass the DTD just results in
> > warnings, the test still succeeds. I realize this could probably be
> > done by also using the dtd file directly, so this would only be for
> > convenience.
> > 
> > 
> > Jonas
> > 
> > 
> >  src/scanner.c | 15 +++++++++++++--
> >  1 file changed, 13 insertions(+), 2 deletions(-)
> > 
> > diff --git a/src/scanner.c b/src/scanner.c
> > index c345ed6..1308fc7 100644
> > --- a/src/scanner.c
> > +++ b/src/scanner.c
> > @@ -72,7 +72,9 @@ usage(int ret)
> >                     "                                 the scanner was built 
> > against.\n"
> >                     "    -c,  --include-core-only     include the core 
> > version of the headers,\n"
> >                     "                                 that is e.g. 
> > wayland-client-core.h instead\n"
> > -                   "                                 of 
> > wayland-client.h.\n");
> > +                   "                                 of 
> > wayland-client.h.\n"
> > +                   "    -s,  --strict                exit immediately with 
> > an error if DTD\n"
> > +                   "                                 verification 
> > fails.\n");
> 
> Hi Jonas,
> 
> I like the idea, but with a caveat, and I'd like to propose to take it
> a little further.
> 
> Let's not limit the --strict option to just DTD validation. I assume
> the scanner could do also other kinds of checks that we would not be
> able to turn into errors by default because of backwards compatibility.
> It would be useful for --strict to switch also those warnings into
> errors.
> 
> Backwards compatiblity brings me to the caveat. We should be very
> explicit in the scanner documentation that --strict does not preserve
> backwards compatibility. We need to allow ourselves to add more
> warnings in the future, DTD or otherwise, but we cannot add them if we
> imply --strict to remain backwards compatible. In essence, --strict
> would be like gcc's -Werror.

This sounds like a good idea.

> 
> That also means that projects using --strict do so on their own. I
> would guess that wayland-protocols could still use --strict since it's
> only testing, and testing can be disabled(?) via configure. Or vice
> versa, enabling --strict in wayland-protocols tests would require
> explicit enabling via configure or meson options. I suppose
> distributors would prefer the latter.

With the meson stuff, tests can be indeed be disabled. When being
enabled, I'd make the --strict thing only run on 'meson test' anyway
(however so far I have only managed to have meson always scan and build
the build testing part as part of the general build step).

Jonas

> 
> 
> Thanks,
> pq
> 
> >     exit(ret);
> >  }
> >  
> > @@ -1801,6 +1803,7 @@ int main(int argc, char *argv[])
> >     bool help = false;
> >     bool core_headers = false;
> >     bool version = false;
> > +   bool strict = false;
> >     bool fail = false;
> >     int opt;
> >     enum {
> > @@ -1813,11 +1816,12 @@ int main(int argc, char *argv[])
> >             { "help",              no_argument, NULL, 'h' },
> >             { "version",           no_argument, NULL, 'v' },
> >             { "include-core-only", no_argument, NULL, 'c' },
> > +           { "strict",            no_argument, NULL, 's' },
> >             { 0,                   0,           NULL, 0 }
> >     };
> >  
> >     while (1) {
> > -           opt = getopt_long(argc, argv, "hvc", options, NULL);
> > +           opt = getopt_long(argc, argv, "hvcs", options, NULL);
> >  
> >             if (opt == -1)
> >                     break;
> > @@ -1832,6 +1836,9 @@ int main(int argc, char *argv[])
> >             case 'c':
> >                     core_headers = true;
> >                     break;
> > +           case 's':
> > +                   strict = true;
> > +                   break;
> >             default:
> >                     fail = true;
> >                     break;
> > @@ -1894,6 +1901,10 @@ int main(int argc, char *argv[])
> >             "* WARNING: XML failed validation against built-in DTD *\n"
> >             "*                                                     *\n"
> >             "*******************************************************\n");
> > +           if (strict) {
> > +                   fclose(input);
> > +                   exit(EXIT_FAILURE);
> > +           }
> >     }
> >  
> >     /* create XML parser */
> 


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

Reply via email to