From 0ea069123cedf42fe171371a809b8d33adf411b9 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Tue, 15 Nov 2011 10:25:36 +0000 Subject: [PATCH] incpath.c (get_added_cpp_dirs): New function. 2011-11-15 Tristan Gingold * 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 --- gcc/ChangeLog | 9 ++++++++ gcc/config/vms/vms-c.c | 47 ++++++++++++++++++++++++++++++++++++++++++ gcc/config/vms/vms.h | 3 +++ gcc/incpath.c | 9 ++++++++ gcc/incpath.h | 1 + 5 files changed, 69 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index eab0ca46c8b..31e6968c58e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2011-11-15 Tristan Gingold + + * 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 * c-family/c-pragma.h (pragma_extern_prefix): Declare. diff --git a/gcc/config/vms/vms-c.c b/gcc/config/vms/vms-c.c index 19291b62877..b3e0d955f19 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 0da9d85a89c..62e8636cae4 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 07a765f3fc0..6b683a053dc 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 df5b6b18129..4c647a39fe7 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. */ -- 2.30.2