/* Header file for modules that link with gcc.c
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
This file is part of GCC.
#include "version.h"
-/* These are exported by gcc.c. */
-extern int do_spec PARAMS ((const char *));
-extern void record_temp_file PARAMS ((const char *, int, int));
-extern void fancy_abort PARAMS ((void)) ATTRIBUTE_NORETURN;
-extern const char *input_filename;
-extern size_t input_filename_length;
-extern void fatal PARAMS ((const char *, ...))
- ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN;
-extern void error PARAMS ((const char *, ...)) ATTRIBUTE_PRINTF_1;
-extern void pfatal_with_name PARAMS ((const char *)) ATTRIBUTE_NORETURN;
+/* The mapping of a spec function name to the C function that
+ implements it. */
+struct spec_function
+{
+ const char *name;
+ const char *(*func) (int, const char **);
+};
-/* Spec files linked with gcc.c must provide definitions for these. */
+/* This defines which switch letters take arguments. */
-/* Called before processing to change/add/remove arguments. */
-extern void lang_specific_driver PARAMS ((int *, const char *const **, int *));
+#define DEFAULT_SWITCH_TAKES_ARG(CHAR) \
+ ((CHAR) == 'D' || (CHAR) == 'U' || (CHAR) == 'o' \
+ || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \
+ || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x' \
+ || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V' \
+ || (CHAR) == 'B' || (CHAR) == 'b')
-/* Called before linking. Returns 0 on success and -1 on failure. */
-extern int lang_specific_pre_link PARAMS ((void));
+/* This defines which multi-letter switches take arguments. */
+
+#define DEFAULT_WORD_SWITCH_TAKES_ARG(STR) \
+ (!strcmp (STR, "Tdata") || !strcmp (STR, "Ttext") \
+ || !strcmp (STR, "Tbss") || !strcmp (STR, "include") \
+ || !strcmp (STR, "imacros") || !strcmp (STR, "aux-info") \
+ || !strcmp (STR, "idirafter") || !strcmp (STR, "iprefix") \
+ || !strcmp (STR, "iwithprefix") || !strcmp (STR, "iwithprefixbefore") \
+ || !strcmp (STR, "iquote") || !strcmp (STR, "isystem") \
+ || !strcmp (STR, "isysroot") \
+ || !strcmp (STR, "-param") || !strcmp (STR, "specs") \
+ || !strcmp (STR, "MF") || !strcmp (STR, "MT") || !strcmp (STR, "MQ"))
+
+
+/* These are exported by gcc.c. */
+extern int do_spec (const char *);
+extern void record_temp_file (const char *, int, int);
+extern void fatal (const char *, ...) ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN;
+extern void error (const char *, ...) ATTRIBUTE_PRINTF_1;
+extern void pfatal_with_name (const char *) ATTRIBUTE_NORETURN;
+extern void set_input (const char *);
+
+/* Spec files linked with gcc.c must provide definitions for these. */
+
+/* Called before processing to change/add/remove arguments. */
+extern void lang_specific_driver (int *, const char *const **, int *);
+
+/* Called before linking. Returns 0 on success and -1 on failure. */
+extern int lang_specific_pre_link (void);
extern int n_infiles;
-/* Number of extra output files that lang_specific_pre_link may generate. */
+/* Number of extra output files that lang_specific_pre_link may generate. */
extern int lang_specific_extra_outfiles;
+/* Table of language-specific spec functions. */
+extern const struct spec_function lang_specific_spec_functions[];
+
/* A vector of corresponding output files is made up later. */
extern const char **outfiles;