[PATCH wayland] scanner: Add --strict flag
Jonas Ådahl
jadahl at gmail.com
Thu Oct 12 07:24:05 UTC 2017
On Thu, Oct 12, 2017 at 10:09:43AM +0300, Pekka Paalanen wrote:
> On Wed, 11 Oct 2017 17:31:33 +0800
> Jonas Ådahl <jadahl at 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 <jadahl at 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 */
>
More information about the wayland-devel
mailing list