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
This commit is contained in:
Tristan Gingold 2011-11-15 10:25:36 +00:00 committed by Tristan Gingold
parent e50e723eec
commit 0ea069123c
5 changed files with 69 additions and 0 deletions

View File

@ -1,3 +1,12 @@
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.

View File

@ -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);
}
}
}

View File

@ -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 ()

View File

@ -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,

View File

@ -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. */