diff --git a/tools/wrc/Makefile.in b/tools/wrc/Makefile.in index d502e4b7dae..c81276ebc68 100644 --- a/tools/wrc/Makefile.in +++ b/tools/wrc/Makefile.in @@ -15,7 +15,9 @@ C_SRCS = \ LEX_SRCS = parser.l BISON_SRCS = parser.y -wrc_EXTRADEFS = -DINCLUDEDIR="\"${includedir}\"" +wrc_EXTRADEFS = \ + -DINCLUDEDIR="\"${includedir}\"" \ + -DBIN_TO_INCLUDEDIR=\"`$(MAKEDEP) -R ${bindir} ${includedir}`\" EXTRALIBS = $(GETTEXTPO_LIBS) -lwpp diff --git a/tools/wrc/wrc.c b/tools/wrc/wrc.c index 014b1772919..d171bfa2ef1 100644 --- a/tools/wrc/wrc.c +++ b/tools/wrc/wrc.c @@ -154,6 +154,8 @@ static char *output_name; /* The name given by the -o option */ char *input_name = NULL; /* The name given on the command-line */ static char *temp_name = NULL; /* Temporary file for preprocess pipe */ +static const char *includedir; + int line_number = 1; /* The current line */ int char_number = 1; /* The current char pos within the line */ @@ -327,6 +329,27 @@ static void set_target( const char *target ) free( cpu ); } +static void init_argv0_dir( const char *argv0 ) +{ +#ifndef _WIN32 + char *p, *dir; + +#if defined(__linux__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) + dir = realpath( "/proc/self/exe", NULL ); +#elif defined (__FreeBSD__) || defined(__DragonFly__) + dir = realpath( "/proc/curproc/file", NULL ); +#else + dir = realpath( argv0, NULL ); +#endif + if (!dir) return; + if (!(p = strrchr( dir, '/' ))) return; + if (p == dir) p++; + *p = 0; + includedir = strmake( "%s/%s", dir, BIN_TO_INCLUDEDIR ); + free( dir ); +#endif +} + int main(int argc,char *argv[]) { int optc; @@ -347,6 +370,7 @@ int main(int argc,char *argv[]) #ifdef SIGHUP signal( SIGHUP, exit_on_signal ); #endif + init_argv0_dir( argv[0] ); /* Set the default defined stuff */ set_version_defines(); @@ -508,6 +532,11 @@ int main(int argc,char *argv[]) { static const char *incl_dirs[] = { INCLUDEDIR, "/usr/include", "/usr/local/include" }; + if (includedir) + { + wpp_add_include_path( strmake( "%s/wine/msvcrt", includedir )); + wpp_add_include_path( strmake( "%s/wine/windows", includedir )); + } for (i = 0; i < ARRAY_SIZE(incl_dirs); i++) { if (i && !strcmp( incl_dirs[i], incl_dirs[0] )) continue;