diff --git a/debugger/Makefile.in b/debugger/Makefile.in index 848f14b2c5d..cca07f708ce 100644 --- a/debugger/Makefile.in +++ b/debugger/Makefile.in @@ -32,8 +32,6 @@ EXTRA_OBJS = y.tab.o lex.yy.o all: $(PROGRAMS) -depend: y.tab.h - @MAKE_RULES@ y.tab.c y.tab.h: dbg.y diff --git a/programs/winhelp/Makefile.in b/programs/winhelp/Makefile.in index 696fa28a32d..30509d953d9 100644 --- a/programs/winhelp/Makefile.in +++ b/programs/winhelp/Makefile.in @@ -22,8 +22,6 @@ RC_SRCS = rsrc.rc all: $(PROGRAMS) -depend: y.tab.h - @MAKE_RULES@ $(SPEC_SRCS:.spec=.spec.c): $(RC_SRCS:.rc=.res) diff --git a/tools/makedep.c b/tools/makedep.c index 4c253e2f337..f29ca2726ea 100644 --- a/tools/makedep.c +++ b/tools/makedep.c @@ -18,6 +18,8 @@ typedef struct _INCL_FILE struct _INCL_FILE *next; char *name; char *filename; + struct _INCL_FILE *included_by; /* file that included this one */ + int included_line; /* line where this file was included */ struct _INCL_FILE *owner; struct _INCL_FILE *files[MAX_INCLUDES]; } INCL_FILE; @@ -77,6 +79,23 @@ static char *xstrdup( const char *str ) } +/******************************************************************* + * is_generated + * + * Test if a given file type is generated during the make process + */ +static int is_generated( const char *name ) +{ + static const char * const extensions[] = { ".tab.h", ".mc.rc" }; + int i, len = strlen(name); + for (i = 0; i < sizeof(extensions)/sizeof(extensions[0]); i++) + { + if (len <= strlen(extensions[i])) continue; + if (!strcmp( name + len - strlen(extensions[i]), extensions[i] )) return 1; + } + return 0; +} + /******************************************************************* * add_include_path * @@ -115,7 +134,7 @@ static INCL_FILE *add_src_file( const char *name ) * * Add an include file if it doesn't already exists. */ -static INCL_FILE *add_include( INCL_FILE *pFile, const char *name ) +static INCL_FILE *add_include( INCL_FILE *pFile, const char *name, int line ) { INCL_FILE **p = &firstInclude; int pos; @@ -134,6 +153,8 @@ static INCL_FILE *add_include( INCL_FILE *pFile, const char *name ) *p = xmalloc( sizeof(INCL_FILE) ); memset( *p, 0, sizeof(INCL_FILE) ); (*p)->name = xstrdup(name); + (*p)->included_by = pFile; + (*p)->included_line = line; } pFile->files[pos] = *p; return *p; @@ -191,6 +212,12 @@ static FILE *open_include_file( INCL_FILE *pFile ) if (firstPath) perror( pFile->name ); else fprintf( stderr, "%s: %s: File not found\n", ProgramName, pFile->name ); + while (pFile->included_by) + { + fprintf( stderr, " %s was first included from %s:%d\n", + pFile->name, pFile->included_by->name, pFile->included_line ); + pFile = pFile->included_by; + } exit(1); } return file; @@ -205,8 +232,17 @@ static void parse_file( INCL_FILE *pFile, int src ) char buffer[1024]; char *include; int line = 0; + FILE *file; + + if (is_generated( pFile->name )) + { + /* file is generated during make, don't try to open it */ + pFile->filename = xstrdup( pFile->name ); + return; + } + + file = src ? open_src_file( pFile ) : open_include_file( pFile ); - FILE *file = src ? open_src_file( pFile ) : open_include_file( pFile ); while (fgets( buffer, sizeof(buffer)-1, file )) { char *p = buffer; @@ -227,7 +263,7 @@ static void parse_file( INCL_FILE *pFile, int src ) exit(1); } *p = 0; - add_include( pFile, include ); + add_include( pFile, include, line ); } fclose(file); } @@ -263,6 +299,7 @@ static void output_src( FILE *file, INCL_FILE *pFile, int *column ) { char *obj = xstrdup( pFile->name ); char *ext = strrchr( obj, '.' ); + if (ext && strchr( ext, '/' )) ext = NULL; if (ext) { *ext++ = 0; @@ -278,9 +315,9 @@ static void output_src( FILE *file, INCL_FILE *pFile, int *column ) { *column += fprintf( file, "%s.res: %s", obj, pFile->filename ); } - else if (!strcmp( ext, "rc16" )) /* Win16 resource file */ + else if (!strcmp( ext, "mc" )) /* message file */ { - *column += fprintf( file, "%s.s: %s", obj, pFile->filename ); + *column += fprintf( file, "%s.mc.rc: %s", obj, pFile->filename ); } else { diff --git a/tools/wmc/Makefile.in b/tools/wmc/Makefile.in index 8dca51f9757..807bfca1c18 100644 --- a/tools/wmc/Makefile.in +++ b/tools/wmc/Makefile.in @@ -20,7 +20,7 @@ EXTRA_OBJS = y.tab.o all: $(PROGRAMS) -depend mcl.o: y.tab.h +mcl.o: y.tab.h @MAKE_RULES@ diff --git a/tools/wrc/Makefile.in b/tools/wrc/Makefile.in index e8dc189ee7e..58aa52d3002 100644 --- a/tools/wrc/Makefile.in +++ b/tools/wrc/Makefile.in @@ -25,8 +25,6 @@ EXTRA_OBJS = y.tab.o lex.yy.o all: $(PROGRAMS) -depend: y.tab.h ppy.tab.h - @MAKE_RULES@ wrc: $(OBJS) $(TOPOBJDIR)/libwine_unicode.$(LIBEXT)