diff options
author | peter <peter@FreeBSD.org> | 1996-09-18 05:35:50 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 1996-09-18 05:35:50 +0000 |
commit | d4691e641ba47cb86eef80f5c879e13f9d961724 (patch) | |
tree | 5b7ea73fc49c8998d9dc87d3eeff5b96439e6856 /contrib/gcc/cppmain.c | |
download | FreeBSD-src-d4691e641ba47cb86eef80f5c879e13f9d961724.zip FreeBSD-src-d4691e641ba47cb86eef80f5c879e13f9d961724.tar.gz |
Import of unmodified (but trimmed) gcc-2.7.2. The bigger parts of the
non-i386, non-unix, and generatable files have been trimmed, but can easily
be added in later if needed.
gcc-2.7.2.1 will follow shortly, it's a very small delta to this and it's
handy to have both available for reference for such little cost.
The freebsd-specific changes will then be committed, and once the dust has
settled, the bmakefiles will be committed to use this code.
Diffstat (limited to 'contrib/gcc/cppmain.c')
-rw-r--r-- | contrib/gcc/cppmain.c | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/contrib/gcc/cppmain.c b/contrib/gcc/cppmain.c new file mode 100644 index 0000000..506ce05 --- /dev/null +++ b/contrib/gcc/cppmain.c @@ -0,0 +1,100 @@ +/* CPP main program, using CPP Library. + Copyright (C) 1995 Free Software Foundation, Inc. + Written by Per Bothner, 1994-95. + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + +#include "cpplib.h" +#include <stdio.h> + +#ifndef EMACS +#include "config.h" +#endif /* not EMACS */ + +extern char *getenv (); + +char *progname; + +cpp_reader parse_in; +cpp_options options; + +/* More 'friendly' abort that prints the line and file. + config.h can #define abort fancy_abort if you like that sort of thing. */ + +void +fancy_abort () +{ + fatal ("Internal gcc abort."); +} + + +int +main (argc, argv) + int argc; + char **argv; +{ + char *p; + int i; + int argi = 1; /* Next argument to handle. */ + struct cpp_options *opts = &options; + + p = argv[0] + strlen (argv[0]); + while (p != argv[0] && p[-1] != '/') --p; + progname = p; + + init_parse_file (&parse_in); + parse_in.data = opts; + + init_parse_options (opts); + + argi += cpp_handle_options (&parse_in, argc - argi , argv + argi); + if (argi < argc) + fatal ("Invalid option `%s'", argv[argi]); + parse_in.show_column = 1; + + i = push_parse_file (&parse_in, opts->in_fname); + if (i != SUCCESS_EXIT_CODE) + return i; + + /* Now that we know the input file is valid, open the output. */ + + if (!opts->out_fname || !strcmp (opts->out_fname, "")) + opts->out_fname = "stdout"; + else if (! freopen (opts->out_fname, "w", stdout)) + cpp_pfatal_with_name (&parse_in, opts->out_fname); + + for (;;) + { + enum cpp_token kind; + if (! opts->no_output) + { + fwrite (parse_in.token_buffer, 1, CPP_WRITTEN (&parse_in), stdout); + } + parse_in.limit = parse_in.token_buffer; + kind = cpp_get_token (&parse_in); + if (kind == CPP_EOF) + break; + } + + cpp_finish (&parse_in); + + if (parse_in.errors) + exit (FATAL_EXIT_CODE); + exit (SUCCESS_EXIT_CODE); +} |