Alexandre Julliard : wrc: Also search the include dir relative to the binary path.

Alexandre Julliard julliard at winehq.org
Thu Jan 30 16:10:22 CST 2020


Module: wine
Branch: master
Commit: 5417826caa984f8eec3e85282f43235502bce3b3
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=5417826caa984f8eec3e85282f43235502bce3b3

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Jan 30 11:30:13 2020 +0100

wrc: Also search the include dir relative to the binary path.

Suggested by Kevin Puetz.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 tools/wrc/Makefile.in |  4 +++-
 tools/wrc/wrc.c       | 29 +++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/tools/wrc/Makefile.in b/tools/wrc/Makefile.in
index d502e4b7da..c81276ebc6 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 014b177291..d171bfa2ef 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;




More information about the wine-cvs mailing list