summaryrefslogtreecommitdiffstats
path: root/gcc/cppinit.c
diff options
context:
space:
mode:
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2000-03-04 19:42:04 +0000
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2000-03-04 19:42:04 +0000
commit62adb1fe3bb6c8175d557d5e74e1b63cb03d3623 (patch)
treeb5fe0ea6f7acb88432c113e0e8949eba769d06b3 /gcc/cppinit.c
parent85b5244c3c06d63def55f498b9de8f76f938f390 (diff)
downloadppe42-gcc-62adb1fe3bb6c8175d557d5e74e1b63cb03d3623.tar.gz
ppe42-gcc-62adb1fe3bb6c8175d557d5e74e1b63cb03d3623.zip
* mkdeps.c, mkdeps.h: New files.
* po/POTFILES.in: Add them. * Makefile.in (LIBCPP_OBJS): Add mkdeps.o. (cpplib.o, cppinit.o): Depend on mkdeps.h. (mkdeps.o): New target. * cppfiles.c: Delete deps_output. * cppinit.c: Include mkdeps.h. Delete known_suffixes, OBJECT_SUFFIX, and base_name. (cpp_cleanup): Use deps_free. Free ihash->name when clearing the include hash. (initialize_dependency_output): Use deps_init, deps_add_target, deps_calc_target, and deps_add_dep. Remove all the unnecessary string bashing. (cpp_finish): Use deps_write. Remove an unnecessary nesting level. * cpplib.c (do_include): Use deps_add_dep. * cpplib.h (struct cpp_reader): Replace deps_buffer, deps_allocated_size, deps_size, deps_column members with single pointer to a struct deps. Delete prototype of deps_output. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32329 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cppinit.c')
-rw-r--r--gcc/cppinit.c134
1 files changed, 26 insertions, 108 deletions
diff --git a/gcc/cppinit.c b/gcc/cppinit.c
index 269220c3142..daac637fe95 100644
--- a/gcc/cppinit.c
+++ b/gcc/cppinit.c
@@ -28,6 +28,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "prefix.h"
#include "intl.h"
#include "version.h"
+#include "mkdeps.h"
/* Predefined symbols, built-in macros, and the default include path. */
@@ -75,23 +76,6 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define REGISTER_PREFIX ""
#endif
-/* Suffix for object files, and known input-file extensions. */
-static const char * const known_suffixes[] =
-{
- ".c", ".C", ".s", ".S", ".m",
- ".cc", ".cxx", ".cpp", ".cp", ".c++",
- NULL
-};
-
-#ifndef OBJECT_SUFFIX
-# ifdef VMS
-# define OBJECT_SUFFIX ".obj"
-# else
-# define OBJECT_SUFFIX ".o"
-# endif
-#endif
-
-
/* This is the default list of directories to search for include files.
It may be overridden by the various -I and -ixxx options.
@@ -296,29 +280,6 @@ path_include (pfile, pend, list, path)
while (1);
}
-/* Find the base name of a (partial) pathname FNAME.
- Returns a pointer into the string passed in.
- Accepts Unix (/-separated) paths on all systems,
- DOS and VMS paths on those systems. */
-static char *
-base_name (fname)
- const char *fname;
-{
- char *s = (char *)fname;
- char *p;
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- if (ISALPHA (s[0]) && s[1] == ':') s += 2;
- if ((p = rindex (s, '\\'))) s = p + 1;
-#elif defined VMS
- if ((p = rindex (s, ':'))) s = p + 1; /* Skip device. */
- if ((p = rindex (s, ']'))) s = p + 1; /* Skip directory. */
- if ((p = rindex (s, '>'))) s = p + 1; /* Skip alternate (int'n'l) dir. */
-#endif
- if ((p = rindex (s, '/'))) s = p + 1;
- return s;
-}
-
-
/* Append DIR to include path PATH. DIR must be permanently allocated
and writable. */
static void
@@ -442,13 +403,6 @@ cpp_cleanup (pfile)
pfile->token_buffer = NULL;
}
- if (pfile->deps_buffer)
- {
- free (pfile->deps_buffer);
- pfile->deps_buffer = NULL;
- pfile->deps_allocated_size = 0;
- }
-
if (pfile->input_buffer)
{
free (pfile->input_buffer);
@@ -457,6 +411,9 @@ cpp_cleanup (pfile)
pfile->input_buffer_len = 0;
}
+ if (pfile->deps)
+ deps_free (pfile->deps);
+
while (pfile->if_stack)
{
IF_STACK_FRAME *temp = pfile->if_stack;
@@ -470,10 +427,8 @@ cpp_cleanup (pfile)
while (imp)
{
struct include_hash *next = imp->next;
-#if 0
- /* This gets freed elsewhere - I think. */
- free (imp->name);
-#endif
+
+ free ((PTR) imp->name);
free (imp);
imp = next;
}
@@ -610,51 +565,18 @@ initialize_dependency_output (pfile)
opts->print_deps_append = 1;
}
- /* Print the expected object file name as the target of this Make-rule. */
- pfile->deps_allocated_size = 200;
- pfile->deps_buffer = (char *) xmalloc (pfile->deps_allocated_size);
- pfile->deps_buffer[0] = 0;
- pfile->deps_size = 0;
- pfile->deps_column = 0;
+ pfile->deps = deps_init ();
+ /* Print the expected object file name as the target of this Make-rule. */
if (opts->deps_target)
- deps_output (pfile, opts->deps_target, ':');
+ deps_add_target (pfile->deps, opts->deps_target);
else if (*opts->in_fname == 0)
- deps_output (pfile, "-", ':');
+ deps_add_target (pfile->deps, "-");
else
- {
- char *p, *q, *r;
- int len, x;
-
- /* Discard all directory prefixes from filename. */
- q = base_name (opts->in_fname);
-
- /* Copy remainder to mungable area. */
- len = strlen (q);
- p = (char *) alloca (len + 8);
- strcpy (p, q);
-
- /* Output P, but remove known suffixes. */
- q = p + len;
- /* Point to the filename suffix. */
- r = strrchr (p, '.');
- if (r)
- /* Compare against the known suffixes. */
- for (x = 0; known_suffixes[x]; x++)
- if (strncmp (known_suffixes[x], r, q - r) == 0)
- {
- /* Make q point to the bit we're going to overwrite
- with an object suffix. */
- q = r;
- break;
- }
+ deps_calc_target (pfile->deps, opts->in_fname);
- /* Supply our own suffix. */
- strcpy (q, OBJECT_SUFFIX);
-
- deps_output (pfile, p, ':');
- deps_output (pfile, opts->in_fname, ' ');
- }
+ if (opts->in_fname)
+ deps_add_dep (pfile->deps, opts->in_fname);
}
/* And another subroutine. This one sets up the standard include path. */
@@ -923,29 +845,25 @@ cpp_finish (pfile)
cpp_ice (pfile, "buffers still stacked in cpp_finish");
cpp_pop_buffer (pfile);
- if (opts->print_deps)
+ /* Don't write the deps file if preprocessing has failed. */
+ if (opts->print_deps && pfile->errors == 0)
{
/* Stream on which to print the dependency information. */
FILE *deps_stream = 0;
- /* Don't actually write the deps file if compilation has failed. */
- if (pfile->errors == 0)
- {
- const char *deps_mode = opts->print_deps_append ? "a" : "w";
- if (opts->deps_file == 0)
- deps_stream = stdout;
- else if ((deps_stream = fopen (opts->deps_file, deps_mode)) == 0)
- cpp_notice_from_errno (pfile, opts->deps_file);
+ const char *deps_mode = opts->print_deps_append ? "a" : "w";
+ if (opts->deps_file == 0)
+ deps_stream = stdout;
+ else if ((deps_stream = fopen (opts->deps_file, deps_mode)) == 0)
+ cpp_notice_from_errno (pfile, opts->deps_file);
- if (deps_stream)
+ if (deps_stream)
+ {
+ deps_write (pfile->deps, deps_stream, 72);
+ if (opts->deps_file)
{
- fputs (pfile->deps_buffer, deps_stream);
- putc ('\n', deps_stream);
- if (opts->deps_file)
- {
- if (ferror (deps_stream) || fclose (deps_stream) != 0)
- cpp_fatal (pfile, "I/O error on output");
- }
+ if (ferror (deps_stream) || fclose (deps_stream) != 0)
+ cpp_fatal (pfile, "I/O error on output");
}
}
}
OpenPOWER on IntegriCloud