diff options
author | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-01-06 00:15:29 +0000 |
---|---|---|
committer | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-01-06 00:15:29 +0000 |
commit | 7b4b68f2b36eb1df3557ded0d8f2cc23f018ec20 (patch) | |
tree | dfcf1a323ecd306223b732c5c47577888caad329 /gcc/mkdeps.c | |
parent | 3756cb898648463100db98f76d7b68a1b77cf95e (diff) | |
download | gcc-7b4b68f2b36eb1df3557ded0d8f2cc23f018ec20.tar.gz |
* cpp.texi: Update for -MQ.
* cppinit.c (cpp_create_reader): Always create pfile->deps.
(cpp_cleanup): Always free pfile->deps.
(initialize_dependency_output): Don't create pfile->deps.
(cpp_handle_option): Similarly.
(OPT_MQ): New.
* gcc.c (cpp_options): Handle -MQ.
(DEFAULT_WORD_SWITCH_TAKES_ARG): Add -MQ.
* mkdeps.c (base_name): Remove.
(deps_init): Don't allocate vector space until it's needed.
(deps_free): Only free vectors if allocated.
(deps_add_target, deps_add_dep): Update for initial allocation.
(deps_add_default_target): Don't strip to the base_name.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38735 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/mkdeps.c')
-rw-r--r-- | gcc/mkdeps.c | 61 |
1 files changed, 19 insertions, 42 deletions
diff --git a/gcc/mkdeps.c b/gcc/mkdeps.c index f83d82f9e30..a128a6f326f 100644 --- a/gcc/mkdeps.c +++ b/gcc/mkdeps.c @@ -38,7 +38,6 @@ struct deps }; static const char *munge PARAMS ((const char *)); -static const char *base_name PARAMS ((const char *)); /* Given a filename, quote characters in that filename which are significant to Make. Note that it's not possible to quote all such @@ -107,33 +106,6 @@ munge (filename) return buffer; } -/* Given a pathname, calculate the non-directory part. This always - knows how to handle Unix-style pathnames, and understands VMS and - DOS paths on those systems. */ - -/* 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 const char * -base_name (fname) - const char *fname; -{ - const char *s = fname; - const char *p; -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (ISALPHA (s[0]) && s[1] == ':') s += 2; - if ((p = strrchr (s, '\\'))) s = p + 1; -#elif defined VMS - if ((p = strrchr (s, ':'))) s = p + 1; /* Skip device. */ - if ((p = strrchr (s, ']'))) s = p + 1; /* Skip directory. */ - if ((p = strrchr (s, '>'))) s = p + 1; /* Skip alternate (int'n'l) dir. */ -#endif - if ((p = strrchr (s, '/'))) s = p + 1; - return s; -} - /* Public routines. */ struct deps * @@ -141,15 +113,15 @@ deps_init () { struct deps *d = (struct deps *) xmalloc (sizeof (struct deps)); - /* Allocate space for the vectors now. */ + /* Allocate space for the vectors only if we need it. */ - d->targetv = (const char **) xmalloc (2 * sizeof (const char *)); - d->depv = (const char **) xmalloc (8 * sizeof (const char *)); + d->targetv = 0; + d->depv = 0; d->ntargets = 0; - d->targets_size = 2; + d->targets_size = 0; d->ndeps = 0; - d->deps_size = 8; + d->deps_size = 0; return d; } @@ -160,14 +132,20 @@ deps_free (d) { unsigned int i; - for (i = 0; i < d->ntargets; i++) - free ((PTR) d->targetv[i]); + if (d->targetv) + { + for (i = 0; i < d->ntargets; i++) + free ((PTR) d->targetv[i]); + free (d->targetv); + } - for (i = 0; i < d->ndeps; i++) - free ((PTR) d->depv[i]); + if (d->depv) + { + for (i = 0; i < d->ndeps; i++) + free ((PTR) d->depv[i]); + free (d->depv); + } - free (d->targetv); - free (d->depv); free (d); } @@ -181,7 +159,7 @@ deps_add_target (d, t, quote) { if (d->ntargets == d->targets_size) { - d->targets_size *= 2; + d->targets_size = d->targets_size * 2 + 4; d->targetv = (const char **) xrealloc (d->targetv, d->targets_size * sizeof (const char *)); } @@ -212,7 +190,6 @@ deps_add_default_target (d, tgt) deps_add_target (d, "-", 1); else { - tgt = base_name (tgt); o = (char *) alloca (strlen (tgt) + 8); strcpy (o, tgt); @@ -239,7 +216,7 @@ deps_add_dep (d, t) if (d->ndeps == d->deps_size) { - d->deps_size *= 2; + d->deps_size *= 2 + 8; d->depv = (const char **) xrealloc (d->depv, d->deps_size * sizeof (const char *)); } |