2 * Copyright © 2010 Intel Corporation
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
30 #include "main/mtypes.h"
31 #include "main/shaderobj.h"
36 _mesa_reference_shader(struct gl_context
*ctx
, struct gl_shader
**ptr
,
43 /* Read from fp until EOF and return a string of everything read.
46 load_text_fp (void *ctx
, FILE *fp
)
51 size_t total_read
= 0;
55 if (total_read
+ CHUNK
+ 1 > text_size
) {
56 text_size
= text_size
? text_size
* 2 : CHUNK
+ 1;
57 text
= reralloc_size (ctx
, text
, text_size
);
59 fprintf (stderr
, "Out of memory\n");
63 bytes
= fread (text
+ total_read
, 1, CHUNK
, fp
);
71 text
[total_read
] = '\0';
77 load_text_file(void *ctx
, const char *filename
)
82 if (filename
== NULL
|| strcmp (filename
, "-") == 0)
83 return load_text_fp (ctx
, stdin
);
85 fp
= fopen (filename
, "r");
87 fprintf (stderr
, "Failed to open file %s: %s\n",
88 filename
, strerror (errno
));
92 text
= load_text_fp (ctx
, fp
);
99 /* Initialize only those things that glcpp cares about.
102 init_fake_gl_context (struct gl_context
*gl_ctx
)
104 gl_ctx
->API
= API_OPENGL_COMPAT
;
105 gl_ctx
->Const
.DisableGLSLLineContinuations
= false;
112 "Usage: glcpp [OPTIONS] [--] [<filename>]\n"
114 "Pre-process the given filename (stdin if no filename given).\n"
115 "The following options are supported:\n"
116 " --disable-line-continuations Do not interpret lines ending with a\n"
117 " backslash ('\\') as a line continuation.\n");
121 DISABLE_LINE_CONTINUATIONS_OPT
= CHAR_MAX
+ 1
124 const static struct option
126 {"disable-line-continuations", no_argument
, 0, DISABLE_LINE_CONTINUATIONS_OPT
},
131 main (int argc
, char *argv
[])
133 char *filename
= NULL
;
134 void *ctx
= ralloc(NULL
, void*);
135 char *info_log
= ralloc_strdup(ctx
, "");
138 struct gl_context gl_ctx
;
141 init_fake_gl_context (&gl_ctx
);
143 while ((c
= getopt_long(argc
, argv
, "", long_options
, NULL
)) != -1) {
145 case DISABLE_LINE_CONTINUATIONS_OPT
:
146 gl_ctx
.Const
.DisableGLSLLineContinuations
= true;
154 if (optind
+ 1 < argc
) {
155 printf ("Unexpected argument: %s\n", argv
[optind
+1]);
160 filename
= argv
[optind
];
163 shader
= load_text_file (ctx
, filename
);
167 ret
= glcpp_preprocess(ctx
, &shader
, &info_log
, NULL
, &gl_ctx
);
169 printf("%s", shader
);
170 fprintf(stderr
, "%s", info_log
);