function.
(if_exists_else_spec_function): New function.
* doc/invoke.texi: Document the if-exists-else spec function.
* config/netbsd-elf.h (NETBSD_STARTFILE_SPEC): For -static, use
"%:if-exists-else(crtbeginT%O%s crtbegin%O%s)".
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@59480
138bc75d-0d04-0410-961f-
82ee72b054a4
%{p:gcrt0%O%s} \
%{!p:crt0%O%s}}} \
%:if-exists(crti%O%s) \
- %{!shared:crtbegin%O%s} %{shared:crtbeginS%O%s}"
+ %{static:%:if-exists-else(crtbeginT%O%s crtbegin%O%s)} \
+ %{!static: \
+ %{!shared:crtbegin%O%s} %{shared:crtbeginS%O%s}}"
#undef STARTFILE_SPEC
#define STARTFILE_SPEC NETBSD_STARTFILE_SPEC
*startfile:
crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
@end smallexample
-@end table
+
+@item @code{if-exists-else}
+The @code{if-exists-else} spec function is similar to the @code{if-exists}
+spec function, except that it takes two arguments. The first argument is
+an absolute pathname to a file. If the file exists, @code{if-exists-else}
+returns the pathname. If it does not exist, it returns the second argument.
+This way, @code{if-exists-else} can be used to select one file or another,
+based on the existence of the first. Here is a small example of its usage:
+
+@smallexample
+*startfile:
+crt0%O%s %:if-exists(crti%O%s) %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
+@end smallexample
+@end table
@item %@{@code{S}@}
Substitutes the @code{-S} switch, if that switch was given to GCC@.
#endif
static const char *if_exists_spec_function PARAMS ((int, const char **));
+static const char *if_exists_else_spec_function PARAMS ((int, const char **));
\f
/* The Specs Language
static const struct spec_function static_spec_functions[] =
{
{ "if-exists", if_exists_spec_function },
+ { "if-exists-else", if_exists_else_spec_function },
{ 0, 0 }
};
return NULL;
}
+
+/* if-exists-else built-in spec function.
+
+ This is like if-exists, but takes an additional argument which
+ is returned if the first argument does not exist. */
+
+static const char *
+if_exists_else_spec_function (argc, argv)
+ int argc;
+ const char **argv;
+{
+ /* Must have exactly two arguments. */
+ if (argc != 2)
+ return NULL;
+
+ if (IS_ABSOLUTE_PATHNAME (argv[0]) && ! access (argv[0], R_OK))
+ return argv[0];
+
+ return argv[1];
+}