]> Git Repo - binutils.git/blobdiff - binutils/resrc.c
* windres.c: add verbose option
[binutils.git] / binutils / resrc.c
index 9ba3c11780726be0a30dcb3a5e1e0610b8089377..41c9ccacfbe101e7ed331766d3fb536357108f13 100644 (file)
@@ -120,6 +120,52 @@ static void get_data
   PARAMS ((FILE *, unsigned char *, unsigned long, const char *));
 static void define_fontdirs PARAMS ((void));
 \f
+/* look for the preprocessor program */
+
+FILE *
+look_for_default (cmd, prefix, end_prefix, preprocargs, filename)
+     char *cmd;
+     char *prefix;
+     int end_prefix;
+     char *preprocargs;
+     char *filename;
+{
+  char *path = getenv ("PATH");
+  char *space;
+  int found;
+  struct stat s;
+
+  strcpy (cmd, prefix);
+
+  sprintf (cmd+end_prefix, "%s", DEFAULT_PREPROCESSOR);
+  space = strchr (cmd+end_prefix, ' ');
+  if (space)
+    *space = 0;
+
+  if (strchr (cmd, '/'))
+    {
+      found = stat (cmd, &s);
+
+      if (found < 0)
+       {
+         if (verbose)
+           fprintf (stderr, "Tried `%s'\n", cmd);
+         return 0;
+       }
+    }
+
+  strcpy (cmd, prefix);
+
+  sprintf (cmd+end_prefix, "%s %s %s",
+          DEFAULT_PREPROCESSOR, preprocargs, filename);
+
+  if (verbose)
+    fprintf (stderr, "Using `%s'\n", cmd);
+
+  cpp_pipe = popen (cmd, FOPEN_RT);
+  return cpp_pipe;
+}
+
 /* Read an rc file.  */
 
 struct res_directory *
@@ -131,21 +177,78 @@ read_rc_file (filename, preprocessor, preprocargs, language)
 {
   char *cmd;
 
-  if (preprocessor == NULL)
-    preprocessor = DEFAULT_PREPROCESSOR;
-
   if (preprocargs == NULL)
     preprocargs = "";
   if (filename == NULL)
     filename = "-";
 
-  cmd = xmalloc (strlen (preprocessor)
-                + strlen (preprocargs)
-                + strlen (filename)
-                + 10);
-  sprintf (cmd, "%s %s %s", preprocessor, preprocargs, filename);
+  if (preprocessor)
+    {
+      cmd = xmalloc (strlen (preprocessor)
+                    + strlen (preprocargs)
+                    + strlen (filename)
+                    + 10);
+      sprintf (cmd, "%s %s %s", preprocessor, preprocargs, filename);
 
-  cpp_pipe = popen (cmd, FOPEN_RT);
+      cpp_pipe = popen (cmd, FOPEN_RT);
+    }
+  else
+    {
+      char *dash, *slash, *cp;
+
+      preprocessor = DEFAULT_PREPROCESSOR;
+
+      cmd = xmalloc (strlen (program_name)
+                    + strlen (preprocessor)
+                    + strlen (preprocargs)
+                    + strlen (filename)
+                    + 10);
+
+
+      dash = slash = 0;
+      for (cp=program_name; *cp; cp++)
+       {
+         if (*cp == '-')
+           dash = cp;
+         if (
+#if defined(__DJGPP__) || defined (__CYGWIN__) || defined(__WIN32__)
+             *cp == ':' || *cp == '\\' ||
+#endif
+             *cp == '/')
+           {
+             slash = cp;
+             dash = 0;
+           }
+       }
+
+      cpp_pipe = 0;
+
+      if (dash)
+       {
+         /* First, try looking for a prefixed gcc in the windres
+            directory, with the same prefix as windres */
+
+         cpp_pipe = look_for_default (cmd, program_name, dash-program_name+1,
+                                      preprocargs, filename);
+       }
+
+      if (slash && !cpp_pipe)
+       {
+         /* Next, try looking for a gcc in the same directory as
+             that windres */
+
+         cpp_pipe = look_for_default (cmd, program_name, slash-program_name+1,
+                                      preprocargs, filename);
+       }
+
+      if (!cpp_pipe)
+       {
+         /* Sigh, try the default */
+
+         cpp_pipe = look_for_default (cmd, "", 0, preprocargs, filename);
+       }
+
+    }
   if (cpp_pipe == NULL)
     fatal (_("can't popen `%s': %s"), cmd, strerror (errno));
   free (cmd);
This page took 0.026297 seconds and 4 git commands to generate.