cppspec.c: Treat two non-option arguments as input and output file.
1999-05-10 18:21 -0400 Zack Weinberg <zack@rabi.phys.columbia.edu> * cppspec.c: Treat two non-option arguments as input and output file. Three or more non-option args is an error. Clean up. * gcc.c (default_compilers): Pass -$ to the preprocessor. * cp/lang-specs.h,ch/lang-specs.h,f/lang-specs.h, objc/lang-specs.h: Likewise. From-SVN: r26870
This commit is contained in:
parent
2c826217f4
commit
54ff00f60b
|
@ -1,3 +1,27 @@
|
||||||
|
1999-05-10 18:21 -0400 Zack Weinberg <zack@rabi.columbia.edu>
|
||||||
|
|
||||||
|
* cppfiles.c (initialize_input_buffer): New function.
|
||||||
|
(finclude): Call it, if pfile->input_buffer is NULL. Accept
|
||||||
|
any character device as an input file.
|
||||||
|
(read_and_prescan): Use pfile->input_buffer and
|
||||||
|
pfile->input_speccase.
|
||||||
|
* cppinit.c (cpp_cleanup): Free pfile->input_buffer and
|
||||||
|
pfile->input_speccase.
|
||||||
|
* cpplib.h (cpp_reader): Add input_buffer, input_speccase, and
|
||||||
|
input_buffer_len members. Use memcpy in CPP_PUTS_Q.
|
||||||
|
|
||||||
|
* cppmain.c: Buffer output in the token_buffer; throttle
|
||||||
|
number of calls to fwrite; check for errors from fwrite.
|
||||||
|
|
||||||
|
1999-05-10 18:21 -0400 Zack Weinberg <zack@rabi.phys.columbia.edu>
|
||||||
|
|
||||||
|
* cppspec.c: Treat two non-option arguments as input and
|
||||||
|
output file. Three or more non-option args is an error.
|
||||||
|
Clean up.
|
||||||
|
* gcc.c (default_compilers): Pass -$ to the preprocessor.
|
||||||
|
* cp/lang-specs.h, ch/lang-specs.h, f/lang-specs.h,
|
||||||
|
objc/lang-specs.h: Likewise.
|
||||||
|
|
||||||
Mon May 10 12:59:20 1999 Jeffrey A Law (law@cygnus.com)
|
Mon May 10 12:59:20 1999 Jeffrey A Law (law@cygnus.com)
|
||||||
|
|
||||||
* optabs.c (emit_cmp_and_jump_insns): Handle the case where both
|
* optabs.c (emit_cmp_and_jump_insns): Handle the case where both
|
||||||
|
|
143
gcc/cppspec.c
143
gcc/cppspec.c
|
@ -57,13 +57,13 @@ Boston, MA 02111-1307, USA. */
|
||||||
#define WORD_SWITCH_TAKES_ARG(STR) DEFAULT_WORD_SWITCH_TAKES_ARG (STR)
|
#define WORD_SWITCH_TAKES_ARG(STR) DEFAULT_WORD_SWITCH_TAKES_ARG (STR)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Suffixes for known sorts of input files. We let gcc.c worry about
|
/* Suffixes for known sorts of input files. Note that we do not list
|
||||||
which are appropriate preprocessor input. */
|
files which are normally considered to have been preprocessed already,
|
||||||
|
since the user's expectation is that `cpp' always preprocesses. */
|
||||||
static const char *const known_suffixes[] =
|
static const char *const known_suffixes[] =
|
||||||
{
|
{
|
||||||
".c", ".C", ".s", ".S", ".m",
|
".c", ".C", ".S", ".m",
|
||||||
".cc", ".cxx", ".cpp", ".cp", ".c++",
|
".cc", ".cxx", ".cpp", ".cp", ".c++",
|
||||||
".i", ".ii", ".mi", ".o", ".a",
|
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -79,34 +79,30 @@ lang_specific_driver (errfn, in_argc, in_argv, in_added_libraries)
|
||||||
char **argv = *in_argv;
|
char **argv = *in_argv;
|
||||||
|
|
||||||
/* Do we need to read stdin? */
|
/* Do we need to read stdin? */
|
||||||
int read_stdin;
|
int read_stdin = 1;
|
||||||
|
|
||||||
/* Do we need to insert -E? */
|
/* Do we need to insert -E? */
|
||||||
int need_E;
|
int need_E = 1;
|
||||||
|
|
||||||
/* Do we need to fixup files with unrecognized suffixes? */
|
/* Have we seen an input file? */
|
||||||
int need_fixups;
|
int seen_input = 0;
|
||||||
|
|
||||||
/* Table of input files with unrecognized suffixes. */
|
/* Positions to insert -xc, -xassembler-with-cpp, and -o, if necessary.
|
||||||
char *urs_tab;
|
0 means unnecessary. */
|
||||||
int urs_count;
|
int lang_c_here = 0;
|
||||||
int urs_block;
|
int lang_S_here = 0;
|
||||||
|
int o_here = 0;
|
||||||
|
|
||||||
|
/* Do we need to fix up an input file with an unrecognized suffix? */
|
||||||
|
int need_fixups = 1;
|
||||||
|
|
||||||
int i, j, quote;
|
int i, j, quote;
|
||||||
char **new_argv;
|
char **new_argv;
|
||||||
int new_argc;
|
int new_argc;
|
||||||
|
|
||||||
/* First pass. If we see an -S or -c, barf. If we see an input file,
|
/* First pass. If we see an -S or -c, barf. If we see an input file,
|
||||||
turn off read_stdin, and if it has an unrecognizable suffix, mark
|
turn off read_stdin. If we see a second input file, it is actually
|
||||||
it for fixup. */
|
the output file. If we see a third input file, barf. */
|
||||||
urs_tab = xmalloc (argc);
|
|
||||||
memset (urs_tab, 0, argc);
|
|
||||||
urs_count = 0;
|
|
||||||
urs_block = 0;
|
|
||||||
quote = 0;
|
|
||||||
read_stdin = 1;
|
|
||||||
need_E = 1;
|
|
||||||
need_fixups = 1;
|
|
||||||
for (i = 1; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
{
|
{
|
||||||
if (quote == 1)
|
if (quote == 1)
|
||||||
|
@ -127,7 +123,7 @@ lang_specific_driver (errfn, in_argc, in_argv, in_added_libraries)
|
||||||
{
|
{
|
||||||
(*errfn) ("`%s' is not a legal option to the preprocessor",
|
(*errfn) ("`%s' is not a legal option to the preprocessor",
|
||||||
argv[i]);
|
argv[i]);
|
||||||
goto done;
|
return;
|
||||||
}
|
}
|
||||||
else if (argv[i][1] == 'x')
|
else if (argv[i][1] == 'x')
|
||||||
{
|
{
|
||||||
|
@ -144,76 +140,81 @@ lang_specific_driver (errfn, in_argc, in_argv, in_added_libraries)
|
||||||
}
|
}
|
||||||
else /* not an option */
|
else /* not an option */
|
||||||
{
|
{
|
||||||
int l = strlen (argv[i]);
|
seen_input++;
|
||||||
int known = 0;
|
if (seen_input == 3)
|
||||||
const char *const *suff;
|
|
||||||
|
|
||||||
read_stdin = 0;
|
|
||||||
for (suff = known_suffixes; *suff; suff++)
|
|
||||||
if (!strcmp (*suff, &argv[i][l - strlen(*suff)]))
|
|
||||||
{
|
|
||||||
known = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (known)
|
|
||||||
{
|
{
|
||||||
if (urs_block)
|
(*errfn) ("too many input files");
|
||||||
{
|
return;
|
||||||
urs_block = 0;
|
}
|
||||||
urs_tab[i] = 2;
|
else if (seen_input == 2)
|
||||||
urs_count++;
|
{
|
||||||
}
|
o_here = i;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!urs_block)
|
read_stdin = 0;
|
||||||
|
if (need_fixups)
|
||||||
{
|
{
|
||||||
urs_block = 1;
|
int l = strlen (argv[i]);
|
||||||
urs_tab[i] = 1;
|
int known = 0;
|
||||||
urs_count++;
|
const char *const *suff;
|
||||||
|
|
||||||
|
for (suff = known_suffixes; *suff; suff++)
|
||||||
|
if (!strcmp (*suff, &argv[i][l - strlen(*suff)]))
|
||||||
|
{
|
||||||
|
known = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! known)
|
||||||
|
{
|
||||||
|
/* .s files are a special case; we have to treat
|
||||||
|
them like .S files so -D__ASSEMBLER__ will be
|
||||||
|
in effect. */
|
||||||
|
if (!strcmp (".s", &argv[i][l - 2]))
|
||||||
|
lang_S_here = i;
|
||||||
|
else
|
||||||
|
lang_c_here = i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we were given an -E option and an input file, and no input
|
/* If we don't need to edit the command line, we can bail early. */
|
||||||
files have unrecognized suffixes, we can bail early. */
|
|
||||||
if (!need_E && !read_stdin && (!need_fixups || urs_count == 0))
|
new_argc = argc + need_E + read_stdin
|
||||||
goto done;
|
+ !!o_here + !!lang_c_here + !!lang_S_here;
|
||||||
|
|
||||||
|
if (new_argc == argc)
|
||||||
|
return;
|
||||||
|
|
||||||
new_argc = argc + need_E + read_stdin + (need_fixups ? urs_count : 0);
|
|
||||||
new_argv = xmalloc (new_argc * sizeof(char *));
|
new_argv = xmalloc (new_argc * sizeof(char *));
|
||||||
|
|
||||||
new_argv[0] = argv[0];
|
new_argv[0] = argv[0];
|
||||||
|
j = 1;
|
||||||
|
|
||||||
if (need_E)
|
if (need_E)
|
||||||
|
new_argv[j++] = "-E";
|
||||||
|
|
||||||
|
for (i = 1; i < argc; i++, j++)
|
||||||
{
|
{
|
||||||
new_argv[1] = "-E";
|
if (i == lang_c_here)
|
||||||
j = 2;
|
new_argv[j++] = "-xc";
|
||||||
|
else if (i == lang_S_here)
|
||||||
|
new_argv[j++] = "-xassembler-with-cpp";
|
||||||
|
else if (i == o_here)
|
||||||
|
new_argv[j++] = "-o";
|
||||||
|
|
||||||
|
new_argv[j] = argv[i];
|
||||||
}
|
}
|
||||||
else
|
|
||||||
j = 1;
|
|
||||||
|
|
||||||
if (need_fixups)
|
|
||||||
for (i = 1; i < argc; i++, j++)
|
|
||||||
{
|
|
||||||
if (urs_tab[i])
|
|
||||||
new_argv[j++] = (urs_tab[i] == 1) ? "-xc" : "-xnone";
|
|
||||||
|
|
||||||
new_argv[j] = argv[i];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
memcpy (&new_argv[j], &argv[1], (argc - 1)*sizeof (char *));
|
|
||||||
|
|
||||||
if (read_stdin)
|
if (read_stdin)
|
||||||
new_argv[j] = "-";
|
new_argv[j] = "-";
|
||||||
|
|
||||||
*in_argc = new_argc;
|
*in_argc = new_argc;
|
||||||
*in_argv = new_argv;
|
*in_argv = new_argv;
|
||||||
|
}
|
||||||
done:
|
|
||||||
free (urs_tab);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Called before linking. Returns 0 on success and -1 on failure. */
|
/* Called before linking. Returns 0 on success and -1 on failure. */
|
||||||
int lang_specific_pre_link ()
|
int lang_specific_pre_link ()
|
||||||
|
|
12
gcc/gcc.c
12
gcc/gcc.c
|
@ -595,7 +595,7 @@ static struct compiler default_compilers[] =
|
||||||
{
|
{
|
||||||
#if USE_CPPLIB
|
#if USE_CPPLIB
|
||||||
"%{E|M|MM:cpp -lang-c %{ansi:-std=c89} %{std*} %{nostdinc*}\
|
"%{E|M|MM:cpp -lang-c %{ansi:-std=c89} %{std*} %{nostdinc*}\
|
||||||
%{C} %{v} %{A*} %{I*} %{P} %I\
|
%{C} %{v} %{A*} %{I*} %{P} %{$} %I\
|
||||||
%{C:%{!E:%eGNU C does not support -C without using -E}}\
|
%{C:%{!E:%eGNU C does not support -C without using -E}}\
|
||||||
%{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
|
%{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
|
||||||
-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2\
|
-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2\
|
||||||
|
@ -631,7 +631,7 @@ static struct compiler default_compilers[] =
|
||||||
%{!pipe:%g.s} %A\n }}}}"
|
%{!pipe:%g.s} %A\n }}}}"
|
||||||
#else /* ! USE_CPPLIB */
|
#else /* ! USE_CPPLIB */
|
||||||
"cpp -lang-c %{ansi:-std=c89} %{std*} %{nostdinc*}\
|
"cpp -lang-c %{ansi:-std=c89} %{std*} %{nostdinc*}\
|
||||||
%{C} %{v} %{A*} %{I*} %{P} %I\
|
%{C} %{v} %{A*} %{I*} %{P} %{$} %I\
|
||||||
%{C:%{!E:%eGNU C does not support -C without using -E}}\
|
%{C:%{!E:%eGNU C does not support -C without using -E}}\
|
||||||
%{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
|
%{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
|
||||||
-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2\
|
-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2\
|
||||||
|
@ -659,7 +659,7 @@ static struct compiler default_compilers[] =
|
||||||
}},
|
}},
|
||||||
{"-",
|
{"-",
|
||||||
{"%{E:cpp -lang-c %{ansi:-std=c89} %{std*} %{nostdinc*}\
|
{"%{E:cpp -lang-c %{ansi:-std=c89} %{std*} %{nostdinc*}\
|
||||||
%{C} %{v} %{A*} %{I*} %{P} %I\
|
%{C} %{v} %{A*} %{I*} %{P} %{$} %I\
|
||||||
%{C:%{!E:%eGNU C does not support -C without using -E}}\
|
%{C:%{!E:%eGNU C does not support -C without using -E}}\
|
||||||
%{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
|
%{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
|
||||||
-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2\
|
-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2\
|
||||||
|
@ -676,9 +676,9 @@ static struct compiler default_compilers[] =
|
||||||
{".h", {"@c-header"}},
|
{".h", {"@c-header"}},
|
||||||
{"@c-header",
|
{"@c-header",
|
||||||
{"%{!E:%eCompilation of header file requested} \
|
{"%{!E:%eCompilation of header file requested} \
|
||||||
cpp %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %I\
|
cpp %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I\
|
||||||
%{C:%{!E:%eGNU C does not support -C without using -E}}\
|
%{C:%{!E:%eGNU C does not support -C without using -E}}\
|
||||||
%{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
|
%{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
|
||||||
-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2\
|
-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2\
|
||||||
%{std=*:%{!std=gnu*:-trigraphs -D__STRICT_ANSI__}}\
|
%{std=*:%{!std=gnu*:-trigraphs -D__STRICT_ANSI__}}\
|
||||||
%{!undef:%{!std=*:%p}%{std=gnu*:%p} %P} %{trigraphs}\
|
%{!undef:%{!std=*:%p}%{std=gnu*:%p} %P} %{trigraphs}\
|
||||||
|
@ -707,7 +707,7 @@ static struct compiler default_compilers[] =
|
||||||
%i %A\n }}}}"}},
|
%i %A\n }}}}"}},
|
||||||
{".S", {"@assembler-with-cpp"}},
|
{".S", {"@assembler-with-cpp"}},
|
||||||
{"@assembler-with-cpp",
|
{"@assembler-with-cpp",
|
||||||
{"cpp -lang-asm %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %I\
|
{"cpp -lang-asm %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I\
|
||||||
%{C:%{!E:%eGNU C does not support -C without using -E}}\
|
%{C:%{!E:%eGNU C does not support -C without using -E}}\
|
||||||
%{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG} %{trigraphs}\
|
%{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG} %{trigraphs}\
|
||||||
-$ %{!undef:%p %P} -D__ASSEMBLER__ \
|
-$ %{!undef:%p %P} -D__ASSEMBLER__ \
|
||||||
|
|
Loading…
Reference in New Issue