]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
vms-c.c (vms_construct_include_filename): New function.
authorTristan Gingold <gingold@gcc.gnu.org>
Fri, 9 Mar 2012 10:13:35 +0000 (10:13 +0000)
committerTristan Gingold <gingold@gcc.gnu.org>
Fri, 9 Mar 2012 10:13:35 +0000 (10:13 +0000)
2012-03-09  Tristan Gingold  <gingold@adacore.com>

* config/vms/vms-c.c (vms_construct_include_filename): New function.
(vms_c_register_includes): Reference it.

From-SVN: r185133

gcc/ChangeLog
gcc/config/vms/vms-c.c

index 1bce1c7a68551b1443577ca9f9f24efc156e8ce9..3b05846fb6dca61bec54ab49e2640fbda897ae1e 100644 (file)
@@ -1,3 +1,8 @@
+2012-03-09  Tristan Gingold  <gingold@adacore.com>
+
+       * config/vms/vms-c.c (vms_construct_include_filename): New function.
+       (vms_c_register_includes): Reference it.
+
 2012-03-09  Andrew Pinski  <apinski@cavium.com>
 
        PR middle-end/51988
@@ -7,8 +12,8 @@
        value_replacement instead of just the singleton one.
        (value_replacement): Change return type to int.  Return 0 instead of
        false.
-       Allow the middle basic block to contain more than just the definings
-       tatement. 
+       Allow the middle basic block to contain more than just the defining
+       statement.
        Handle non empty middle basic blocks.
        * Makefile.in (tree-ssa-phiopt.o): Add tree-pretty-print.h.
 
index 4a2d19c40d110551335d585b5485a8422433adf1..69b054d3d8bde61223634f6775be79a2fade693b 100644 (file)
@@ -304,6 +304,36 @@ vms_c_register_pragma (void)
   c_register_pragma (NULL, "__extern_prefix", vms_pragma_extern_prefix);
 }
 
+/* Canonicalize the filename (remove directory prefix, force the .h extension),
+   and append it to the directory to create the path, but don't
+   turn / into // or // into ///; // may be a namespace escape.  */
+
+static char *
+vms_construct_include_filename (const char *fname, cpp_dir *dir)
+{
+  size_t dlen, flen;
+  char *path;
+  const char *fbasename = lbasename (fname);
+  size_t i;
+
+  dlen = dir->len;
+  flen = strlen (fbasename) + 2;
+  path = XNEWVEC (char, dlen + 1 + flen + 1);
+  memcpy (path, dir->name, dlen);
+  if (dlen && !IS_DIR_SEPARATOR (path[dlen - 1]))
+    path[dlen++] = '/';
+  for (i = 0; i < flen; i++)
+    if (fbasename[i] == '.')
+      break;
+    else
+      path[dlen + i] = TOLOWER (fbasename[i]);
+  path[dlen + i + 0] = '.';
+  path[dlen + i + 1] = 'h';
+  path[dlen + i + 2] = 0;
+
+  return path;
+}
+
 /* Standard modules list.  */
 static const char * const vms_std_modules[] = { "rtldef", "starlet_c", NULL };
 
@@ -341,7 +371,7 @@ vms_c_register_includes (const char *sysroot,
               p->next = NULL;
               p->name = path;
               p->sysp = 1;
-              p->construct = 0;
+              p->construct = vms_construct_include_filename;
               p->user_supplied_p = 0;
               add_cpp_dir_path (p, SYSTEM);
             }