PR binutils/11711
[deliverable/binutils-gdb.git] / binutils / windres.c
index c3b1f50d7e407f65488c1bac4e144c5e6a106e8c..05b7559f7447a4fc8fa36b277bd32391c87007b0 100644 (file)
 #include "safe-ctype.h"
 #include "obstack.h"
 #include "windres.h"
-
-/* Defined in bfd/binary.c.  Used to set architecture and machine of input
-   binary files.  */
-extern enum bfd_architecture  bfd_external_binary_architecture;
-extern unsigned long          bfd_external_machine;
+#include <sys/stat.h>
 
 /* Used by resrc.c at least.  */
 
@@ -731,12 +727,15 @@ quot (const char *string)
 
 /* Long options.  */
 
-/* 150 isn't special; it's just an arbitrary non-ASCII char value.  */
-
-#define OPTION_PREPROCESSOR    150
-#define OPTION_USE_TEMP_FILE   (OPTION_PREPROCESSOR + 1)
-#define OPTION_NO_USE_TEMP_FILE        (OPTION_USE_TEMP_FILE + 1)
-#define OPTION_YYDEBUG         (OPTION_NO_USE_TEMP_FILE + 1)
+enum option_values
+{
+  /* 150 isn't special; it's just an arbitrary non-ASCII char value.  */
+  OPTION_PREPROCESSOR  = 150,
+  OPTION_USE_TEMP_FILE,
+  OPTION_NO_USE_TEMP_FILE,
+  OPTION_YYDEBUG,
+  OPTION_INCLUDE_DIR
+};
 
 static const struct option long_options[] =
 {
@@ -746,7 +745,7 @@ static const struct option long_options[] =
   {"output-format", required_argument, 0, 'O'},
   {"target", required_argument, 0, 'F'},
   {"preprocessor", required_argument, 0, OPTION_PREPROCESSOR},
-  {"include-dir", required_argument, 0, 'I'},
+  {"include-dir", required_argument, 0, OPTION_INCLUDE_DIR},
   {"define", required_argument, 0, 'D'},
   {"undefine", required_argument, 0, 'U'},
   {"verbose", no_argument, 0, 'v'},
@@ -923,12 +922,27 @@ main (int argc, char **argv)
          input_format_tmp = format_from_name (optarg, 0);
          if (input_format_tmp != RES_FORMAT_UNKNOWN)
            {
-             fprintf (stderr,
-                      _("Option -I is deprecated for setting the input format, please use -J instead.\n"));
-             input_format = input_format_tmp;
-             break;
+             struct stat statbuf;
+             char modebuf[11];
+             
+             if (stat (optarg, & statbuf) == 0
+                 /* Coded this way to avoid importing knowledge of S_ISDIR into this file.  */
+                 && (mode_string (statbuf.st_mode, modebuf), modebuf[0] == 'd'))
+               /* We have a -I option with a directory name that just happens
+                  to match a format name as well.  eg: -I res  Assume that the
+                  user knows what they are doing and do not complain.  */
+               ;
+             else
+               {
+                 fprintf (stderr,
+                          _("Option -I is deprecated for setting the input format, please use -J instead.\n"));
+                 input_format = input_format_tmp;
+                 break;
+               }
            }
+         /* Fall through.  */
 
+       case OPTION_INCLUDE_DIR:
          if (preprocargs == NULL)
            {
              quotedarg = quot (optarg);
@@ -1062,71 +1076,18 @@ main (int argc, char **argv)
   return 0;
 }
 
-static int
-find_arch_match(const char *tname,const char **arch)
-{
-  while (*arch != NULL)
-    {
-      const char *in_a = strstr (*arch, tname);
-      char end_ch = (in_a ? in_a[strlen(tname)] : 0);
-
-      if (in_a && (in_a == *arch || in_a[-1] == ':')
-         && end_ch == 0)
-        {
-         def_target_arch = *arch;
-         return 1;
-        }
-      arch++;
-    }
-  return 0;
-}
-
 static void
 set_endianess (bfd *abfd, const char *target)
 {
   const bfd_target *target_vec;
 
   def_target_arch = NULL;
-  target_vec = bfd_find_target (target, abfd);
+  target_vec = bfd_get_target_info (target, abfd, &target_is_bigendian, NULL,
+                                   &def_target_arch);
   if (! target_vec)
     fatal ("Can't detect target endianess and architecture.");
-  target_is_bigendian = ((target_vec->byteorder == BFD_ENDIAN_BIG) ? 1 : 0);
-
-  {
-    const char *  tname = target_vec->name;
-    const char ** arches = bfd_arch_list();
-
-    if (arches && tname)
-      {
-       char *hyp = strchr (tname, '-');
-
-       if (hyp != NULL)
-         {
-           tname = ++hyp;
-
-           /* Make sure we dectect architecture names
-              for triplets like "pe-arm-wince-little".  */
-           if (!find_arch_match (tname, arches))
-             {
-               char *new_tname = (char *) alloca (strlen (hyp) + 1);
-               strcpy (new_tname, hyp);
-               while ((hyp = strrchr (new_tname, '-')) != NULL)
-                 {
-                   *hyp = 0;
-                   if (find_arch_match (new_tname, arches))
-                     break;
-                 }
-             }
-         }
-       else
-         find_arch_match (tname, arches);
-      }
-
-    free (arches);
-
-    if (! def_target_arch)
-      fatal ("Can't detect architecture.");
-  }
+  if (! def_target_arch)
+    fatal ("Can't detect architecture.");
 }
 
 bfd *
This page took 0.025071 seconds and 4 git commands to generate.