On Thu, 2008-04-17 at 05:49 -0700, Mark Glines via RT wrote: > It looks like this is a parsing bug, caused by some weird stuff in one > of my header files. The top of my /usr/include/GL/gl_mangle.h looks > like this: > > #if 0 > #define GL_MANGLE_C1 "DO NOT EDIT!!! - TO REGENERATE from gl.h, EXECUTE > THIS FILE IN SHELL (/bin/sh) and save the output" > #define GL_MANGLE_C2 "This file is used to create GL function protypes > and aliases for the function names" > files="gl.h glext.h" > #define GL_MANGLE_C3 "get regeneration header - copy everything in this > file above the 'REGENERATE_TO_END' line" > awk '!done; /^\/\*REGENERATE_TO_END/ {done=1}' $0 > echo "" > #define GL_MANGLE_C4 get aliases > grep '^GLAPI' $files | sed -e 's/.*ENTRY gl\([^( ]*\).*$/#define > gl\1 MANGLE(\1)/' | sort | uniq > echo "" > echo "#endif /* GL_MANGLE_H */" > exit > #endif /* REGENERATION */
Oh man, that's just nasty. What the heck was that coder thinking?!? Clearly the problem is too much exposure to sed and awk. :-) I was hoping to not have to try to parse that kind of mess correctly, but it looks like I've got three options: 1. Parse the headers for real, instead of the current "80% solution". 2. Special case '#if 0 ... #endif'. 3. Parse the define *values*, and toss any that don't look right. I'm thinking #3, since it's probably best to have that safety check anyway, and it's probably the easiest. I'll work on that one. > Pretty, huh. Oh yeah. Nice catch, thank you! -'f