+2007-02-22 Mark Mitchell <mark@codesourcery.com>
+
+ * gcc.c (getenv_spec_function): New function.
+ (static_spec_functions): Add it.
+ * config/vxworks.h (VXWORKS_TARGET_DIR): Remove.
+ (VXWORKS_ADDITIONAL_CPP_SPEC): Use getenv to find the VxWorks
+ header files.
+
2007-02-22 Michael Matz <matz@suse.de
PR c++/29433
like a traditional Unix, with more external files. Most of our specs
must be aware of the difference. */
-/* The directory containing the VxWorks target headers. */
-#define VXWORKS_TARGET_DIR "/home/tornado/base6/target"
+/* We look for the VxWorks header files using the environment
+ variables that are set in VxWorks to indicate the location of the
+ system header files. We use -idirafter so that the GCC's own
+ header-file directories (containing <stddef.h>, etc.) come before
+ the VxWorks system header directories. */
/* Since we provide a default -isystem, expand -isystem on the command
line early. */
#define VXWORKS_ADDITIONAL_CPP_SPEC " \
%{!nostdinc:%{isystem*}} \
%{mrtp: -D__RTP__=1 \
- %{!nostdinc:-isystem " VXWORKS_TARGET_DIR "/usr/h}} \
+ %{!nostdinc:-idirafter %:getenv(WIND_USR /h)}} \
%{!mrtp:-D_WRS_KERNEL=1 \
- %{!nostdinc:-isystem " VXWORKS_TARGET_DIR "/h}}"
+ %{!nostdinc:-idirafter %:getenv(WIND_BASE /target/h)}}"
/* The references to __init and __fini will be satisfied by
libc_internal.a. */
static const char *convert_filename (const char *, int, int);
#endif
+static const char *getenv_spec_function (int, const char **);
static const char *if_exists_spec_function (int, const char **);
static const char *if_exists_else_spec_function (int, const char **);
static const char *replace_outfile_spec_function (int, const char **);
static const struct spec_function static_spec_functions[] =
{
+ { "getenv", getenv_spec_function },
{ "if-exists", if_exists_spec_function },
{ "if-exists-else", if_exists_else_spec_function },
{ "replace-outfile", replace_outfile_spec_function },
}
}
\f
+/* getenv built-in spec function.
+
+ Returns the value of the environment variable given by its first
+ argument, concatenated with the second argument. If the
+ environment variable is not defined, a fatal error is issued. */
+
+static const char *
+getenv_spec_function (int argc, const char **argv)
+{
+ char *value;
+
+ if (argc != 2)
+ return NULL;
+
+ value = getenv (argv[0]);
+ if (!value)
+ fatal ("environment variable \"%s\" not defined", argv[0]);
+
+ return concat (value, argv[1], NULL);
+}
+
/* if-exists built-in spec function.
Checks to see if the file specified by the absolute pathname in