makedep: Add support for magic comments in .rc files so we can generate proper dependencies for them.
diff --git a/tools/makedep.c b/tools/makedep.c index 759d3bd..1d070b2 100644 --- a/tools/makedep.c +++ b/tools/makedep.c
@@ -629,6 +629,63 @@ /******************************************************************* + * parse_rc_file + */ +static void parse_rc_file( INCL_FILE *pFile, FILE *file ) +{ + char *buffer, *include; + + input_line = 0; + while ((buffer = get_line( file ))) + { + char quote; + char *p = buffer; + while (*p && isspace(*p)) p++; + + if (p[0] == '/' && p[1] == '*') /* check for magic makedep comment */ + { + p += 2; + while (*p && isspace(*p)) p++; + if (strncmp( p, "@makedep:", 9 )) continue; + p += 9; + while (*p && isspace(*p)) p++; + quote = '"'; + if (*p == quote) + { + include = ++p; + while (*p && *p != quote) p++; + } + else + { + include = p; + while (*p && !isspace(*p) && *p != '*') p++; + } + if (!*p) + fatal_error( "%s:%d: Malformed makedep comment\n", pFile->filename, input_line ); + *p = 0; + } + else /* check for #include */ + { + if (*p++ != '#') continue; + while (*p && isspace(*p)) p++; + if (strncmp( p, "include", 7 )) continue; + p += 7; + while (*p && isspace(*p)) p++; + if (*p != '\"' && *p != '<' ) continue; + quote = *p++; + if (quote == '<') quote = '>'; + include = p; + while (*p && (*p != quote)) p++; + if (!*p) fatal_error( "%s:%d: Malformed #include directive\n", + pFile->filename, input_line ); + *p = 0; + } + add_include( pFile, include, input_line, (quote == '>') ); + } +} + + +/******************************************************************* * parse_generated_idl */ static void parse_generated_idl( INCL_FILE *source ) @@ -688,8 +745,13 @@ parse_idl_file( pFile, file, 1 ); else if (strendswith( pFile->filename, ".idl" )) parse_idl_file( pFile, file, 0 ); - else + else if (strendswith( pFile->filename, ".c" ) || + strendswith( pFile->filename, ".h" ) || + strendswith( pFile->filename, ".l" ) || + strendswith( pFile->filename, ".y" )) parse_c_file( pFile, file ); + else if (strendswith( pFile->filename, ".rc" )) + parse_rc_file( pFile, file ); fclose(file); }