aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2011-11-15 10:25:36 +0000
committerTristan Gingold <gingold@gcc.gnu.org>2011-11-15 10:25:36 +0000
commit0ea069123cedf42fe171371a809b8d33adf411b9 (patch)
tree3f2f27c410346ffc56226b6b4ab99b55b2da6904
parente50e723eec48cdf285b27e51fead37b385d5f891 (diff)
downloadgcc-0ea069123cedf42fe171371a809b8d33adf411b9.zip
gcc-0ea069123cedf42fe171371a809b8d33adf411b9.tar.gz
gcc-0ea069123cedf42fe171371a809b8d33adf411b9.tar.bz2
incpath.c (get_added_cpp_dirs): New function.
2011-11-15 Tristan Gingold <gingold@adacore.com> * incpath.c (get_added_cpp_dirs): New function. * incpath.h (get_added_cpp_dirs): Declare. * config/vms/vms-c.c (vms_c_register_includes): New function. (vms_std_modules): New variable. * config/vms/vms.h (TARGET_EXTRA_INCLUDES): Define. (vms_c_register_includes): Declare. From-SVN: r181380
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/vms/vms-c.c47
-rw-r--r--gcc/config/vms/vms.h3
-rw-r--r--gcc/incpath.c9
-rw-r--r--gcc/incpath.h1
5 files changed, 69 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index eab0ca4..31e6968 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,14 @@
2011-11-15 Tristan Gingold <gingold@adacore.com>
+ * incpath.c (get_added_cpp_dirs): New function.
+ * incpath.h (get_added_cpp_dirs): Declare.
+ * config/vms/vms-c.c (vms_c_register_includes): New function.
+ (vms_std_modules): New variable.
+ * config/vms/vms.h (TARGET_EXTRA_INCLUDES): Define.
+ (vms_c_register_includes): Declare.
+
+2011-11-15 Tristan Gingold <gingold@adacore.com>
+
* c-family/c-pragma.h (pragma_extern_prefix): Declare.
* c-family/c-pragma.c (pragma_extern_prefix): Make it public.
* config/vms/vms-c.c (saved_extern_prefix): New variable.
diff --git a/gcc/config/vms/vms-c.c b/gcc/config/vms/vms-c.c
index 19291b6..b3e0d95 100644
--- a/gcc/config/vms/vms-c.c
+++ b/gcc/config/vms/vms-c.c
@@ -283,3 +283,50 @@ vms_c_register_pragma (void)
c_register_pragma (NULL, "__message", vms_pragma_message);
c_register_pragma (NULL, "__extern_prefix", vms_pragma_extern_prefix);
}
+
+/* Standard modules list. */
+static const char * const vms_std_modules[] = { "rtldef", "starlet_c", NULL };
+
+/* Find include modules in the include path. */
+
+void
+vms_c_register_includes (const char *sysroot,
+ const char *iprefix ATTRIBUTE_UNUSED, int stdinc)
+{
+ static const char dir_separator_str[] = { DIR_SEPARATOR, 0 };
+ struct cpp_dir *dir;
+
+ /* Add on standard include pathes. */
+ if (!stdinc)
+ return;
+
+ for (dir = get_added_cpp_dirs (SYSTEM); dir != NULL; dir = dir->next)
+ {
+ const char * const *lib;
+ for (lib = vms_std_modules; *lib != NULL; lib++)
+ {
+ char *path;
+ struct stat st;
+
+ if (sysroot != NULL)
+ path = concat (sysroot, dir->name, dir_separator_str, *lib, NULL);
+ else
+ path = concat (dir->name, dir_separator_str, *lib, NULL);
+
+ if (stat (path, &st) == 0 && S_ISDIR (st.st_mode))
+ {
+ cpp_dir *p;
+
+ p = XNEW (cpp_dir);
+ p->next = NULL;
+ p->name = path;
+ p->sysp = 1;
+ p->construct = 0;
+ p->user_supplied_p = 0;
+ add_cpp_dir_path (p, SYSTEM);
+ }
+ else
+ free (path);
+ }
+ }
+}
diff --git a/gcc/config/vms/vms.h b/gcc/config/vms/vms.h
index 0da9d85..62e8636c 100644
--- a/gcc/config/vms/vms.h
+++ b/gcc/config/vms/vms.h
@@ -34,6 +34,9 @@ along with GCC; see the file COPYING3. If not see
} \
} while (0)
+extern void vms_c_register_includes (const char *, const char *, int);
+#define TARGET_EXTRA_INCLUDES vms_c_register_includes
+
/* Tell compiler we want to support VMS pragmas */
#define REGISTER_TARGET_PRAGMAS() vms_c_register_pragma ()
diff --git a/gcc/incpath.c b/gcc/incpath.c
index 07a765f..6b683a0 100644
--- a/gcc/incpath.c
+++ b/gcc/incpath.c
@@ -460,6 +460,15 @@ register_include_chains (cpp_reader *pfile, const char *sysroot,
cpp_set_include_chains (pfile, heads[QUOTE], heads[BRACKET],
quote_ignores_source_dir);
}
+
+/* Return the current chain of cpp dirs. */
+
+struct cpp_dir *
+get_added_cpp_dirs (int chain)
+{
+ return heads[chain];
+}
+
#if !(defined TARGET_EXTRA_INCLUDES) || !(defined TARGET_EXTRA_PRE_INCLUDES)
static void hook_void_charptr_charptr_int (const char *sysroot ATTRIBUTE_UNUSED,
const char *iprefix ATTRIBUTE_UNUSED,
diff --git a/gcc/incpath.h b/gcc/incpath.h
index df5b6b1..4c647a3 100644
--- a/gcc/incpath.h
+++ b/gcc/incpath.h
@@ -22,6 +22,7 @@ extern void register_include_chains (cpp_reader *, const char *,
const char *, const char *,
int, int, int);
extern void add_cpp_dir_path (struct cpp_dir *, int);
+extern struct cpp_dir *get_added_cpp_dirs (int);
struct target_c_incpath_s {
/* Do extra includes processing. STDINC is false iff -nostdinc was given. */