[Mesa-dev] [PATCH 6/8 v.2] glcpp: Add --disable-line-continuations argument to standalone glcpp
Kenneth Graunke
kenneth at whitecape.org
Thu Jan 3 19:47:02 PST 2013
On 01/03/2013 04:00 PM, Carl Worth wrote:
> This will allow testing of disabled line-continuation on a case-by-case basis,
> (with the option communicated to the preprocessor via the GL context).
> ---
>
> Kenneth Graunke <kenneth at whitecape.org> writes:
>> Why not use getopt()? The standalone GLSL compiler already does, so it
>> doesn't add another dependency.
>>
>> For the single option you've added here, your code is reasonable, but
>> ad-hoc option parsing gets out of control quick.
>
> Fair enough. See attached updated patch.
>
> Matt Turner <mattst88 at gmail.com> writes:
>> I'd probably just make these six function calls a single one.
>
> This is done as well.
>
> Thanks for the review, guys. I really appreciate it.
>
> -Carl
>
> src/glsl/glcpp/glcpp.c | 41 +++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 39 insertions(+), 2 deletions(-)
>
> diff --git a/src/glsl/glcpp/glcpp.c b/src/glsl/glcpp/glcpp.c
> index 79fbdac..b77dfed 100644
> --- a/src/glsl/glcpp/glcpp.c
> +++ b/src/glsl/glcpp/glcpp.c
> @@ -24,6 +24,8 @@
> #include <stdio.h>
> #include <string.h>
> #include <errno.h>
> +#include <getopt.h>
> +
> #include "glcpp.h"
> #include "main/mtypes.h"
> #include "main/shaderobj.h"
> @@ -100,8 +102,31 @@ static void
> init_fake_gl_context (struct gl_context *gl_ctx)
> {
> gl_ctx->API = API_OPENGL_COMPAT;
> + gl_ctx->Const.DisableGLSLLineContinuations = false;
> +}
> +
> +static void
> +usage (void)
> +{
> + fprintf (stderr,
> + "Usage: glcpp [OPTIONS] [--] [<filename>]\n"
> + "\n"
> + "Pre-process the given filename (stdin if no filename given).\n"
> + "The following options are supported:\n"
> + " --disable-line-continuations Do not interpret lines ending with a\n"
> + " backslash ('\\') as a line continuation.\n");
> }
>
> +enum {
> + DISABLE_LINE_CONTINUATIONS_OPT = CHAR_MAX + 1
> +};
> +
> +const static struct option
> +long_options[] = {
> + {"disable-line-continuations", no_argument, 0, DISABLE_LINE_CONTINUATIONS_OPT },
> + {0, 0, 0, 0 }
> +};
> +
> int
> main (int argc, char *argv[])
> {
> @@ -111,11 +136,23 @@ main (int argc, char *argv[])
> const char *shader;
> int ret;
> struct gl_context gl_ctx;
> + int c;
>
> init_fake_gl_context (&gl_ctx);
>
> - if (argc) {
> - filename = argv[1];
> + while ((c = getopt_long(argc, argv, "", long_options, NULL)) != -1) {
> + switch (c) {
> + case DISABLE_LINE_CONTINUATIONS_OPT:
> + gl_ctx.Const.DisableGLSLLineContinuations = true;
> + break;
> + default:
> + usage ();
> + exit (1);
> + }
> + }
> +
> + if (optind < argc) {
> + filename = argv[optind];
> }
How about:
if (optind == argc - 1) {
filename = argv[optind];
} else if (optind < argc) {
usage ();
exit (1);
}
That way, it rejects things like "glcpp foo.frag extracruft". I tested
this with various combinations of --disable-line-continuations, --,
filenames, and extra cruft, and it seems to be correct.
Either way,
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
> shader = load_text_file (ctx, filename);
More information about the mesa-dev
mailing list