1/* Reading and parsing of makefiles for GNU Make.
2Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
31998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
4Foundation, Inc.
5This file is part of GNU Make.
6
7GNU Make is free software; you can redistribute it and/or modify it under the
8terms of the GNU General Public License as published by the Free Software
9Foundation; either version 2, or (at your option) any later version.
10
11GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
13A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License along with
16GNU Make; see the file COPYING.  If not, write to the Free Software
17Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */
18
19#include "make.h"
20
21#include <assert.h>
22
23#include <glob.h>
24
25#include "dep.h"
26#include "filedef.h"
27#include "job.h"
28#include "commands.h"
29#include "variable.h"
30#include "rule.h"
31#include "debug.h"
32#include "hash.h"
33
34
35#ifndef WINDOWS32
36#ifndef _AMIGA
37#ifndef VMS
38#include <pwd.h>
39#else
40struct passwd *getpwnam PARAMS ((char *name));
41#endif
42#endif
43#endif /* !WINDOWS32 */
44
45/* A 'struct ebuffer' controls the origin of the makefile we are currently
46   eval'ing.
47*/
48
49struct ebuffer
50  {
51    char *buffer;       /* Start of the current line in the buffer.  */
52    char *bufnext;      /* Start of the next line in the buffer.  */
53    char *bufstart;     /* Start of the entire buffer.  */
54    unsigned int size;  /* Malloc'd size of buffer. */
55    FILE *fp;           /* File, or NULL if this is an internal buffer.  */
56    struct floc floc;   /* Info on the file in fp (if any).  */
57  };
58
59/* Types of "words" that can be read in a makefile.  */
60enum make_word_type
61  {
62     w_bogus, w_eol, w_static, w_variable, w_colon, w_dcolon, w_semicolon,
63     w_varassign
64  };
65
66
67/* A `struct conditionals' contains the information describing
68   all the active conditionals in a makefile.
69
70   The global variable `conditionals' contains the conditionals
71   information for the current makefile.  It is initialized from
72   the static structure `toplevel_conditionals' and is later changed
73   to new structures for included makefiles.  */
74
75struct conditionals
76  {
77    unsigned int if_cmds;	/* Depth of conditional nesting.  */
78    unsigned int allocated;	/* Elts allocated in following arrays.  */
79    char *ignoring;		/* Are we ignoring or interpreting?
80                                   0=interpreting, 1=not yet interpreted,
81                                   2=already interpreted */
82    char *seen_else;		/* Have we already seen an `else'?  */
83  };
84
85static struct conditionals toplevel_conditionals;
86static struct conditionals *conditionals = &toplevel_conditionals;
87
88
89/* Default directories to search for include files in  */
90
91static char *default_include_directories[] =
92  {
93#if defined(WINDOWS32) && !defined(INCLUDEDIR)
94/*
95 * This completely up to the user when they install MSVC or other packages.
96 * This is defined as a placeholder.
97 */
98#define INCLUDEDIR "."
99#endif
100    INCLUDEDIR,
101#ifndef _AMIGA
102    "/usr/gnu/include",
103    "/usr/local/include",
104    "/usr/include",
105#endif
106    0
107  };
108
109/* List of directories to search for include files in  */
110
111static char **include_directories;
112
113/* Maximum length of an element of the above.  */
114
115static unsigned int max_incl_len;
116
117/* The filename and pointer to line number of the
118   makefile currently being read in.  */
119
120const struct floc *reading_file = 0;
121
122/* The chain of makefiles read by read_makefile.  */
123
124static struct dep *read_makefiles = 0;
125
126static int eval_makefile PARAMS ((char *filename, int flags));
127static int eval PARAMS ((struct ebuffer *buffer, int flags));
128
129static long readline PARAMS ((struct ebuffer *ebuf));
130static void do_define PARAMS ((char *name, unsigned int namelen,
131                               enum variable_origin origin,
132                               struct ebuffer *ebuf));
133static int conditional_line PARAMS ((char *line, int len, const struct floc *flocp));
134static void record_files PARAMS ((struct nameseq *filenames, char *pattern, char *pattern_percent,
135			struct dep *deps, unsigned int cmds_started, char *commands,
136			unsigned int commands_idx, int two_colon,
137                        const struct floc *flocp));
138static void record_target_var PARAMS ((struct nameseq *filenames, char *defn,
139                                       enum variable_origin origin,
140                                       int enabled,
141                                       const struct floc *flocp));
142static enum make_word_type get_next_mword PARAMS ((char *buffer, char *delim,
143                        char **startp, unsigned int *length));
144static void remove_comments PARAMS ((char *line));
145static char *find_char_unquote PARAMS ((char *string, int stop1,
146                                        int stop2, int blank, int ignorevars));
147
148/* Read in all the makefiles and return the chain of their names.  */
149
150struct dep *
151read_all_makefiles (char **makefiles)
152{
153  unsigned int num_makefiles = 0;
154
155  /* Create *_LIST variables, to hold the makefiles, targets, and variables
156     we will be reading. */
157
158  define_variable ("MAKEFILE_LIST", sizeof ("MAKEFILE_LIST")-1, "", o_file, 0);
159
160  DB (DB_BASIC, (_("Reading makefiles...\n")));
161
162  /* If there's a non-null variable MAKEFILES, its value is a list of
163     files to read first thing.  But don't let it prevent reading the
164     default makefiles and don't let the default goal come from there.  */
165
166  {
167    char *value;
168    char *name, *p;
169    unsigned int length;
170
171    {
172      /* Turn off --warn-undefined-variables while we expand MAKEFILES.  */
173      int save = warn_undefined_variables_flag;
174      warn_undefined_variables_flag = 0;
175
176      value = allocated_variable_expand ("$(MAKEFILES)");
177
178      warn_undefined_variables_flag = save;
179    }
180
181    /* Set NAME to the start of next token and LENGTH to its length.
182       MAKEFILES is updated for finding remaining tokens.  */
183    p = value;
184
185    while ((name = find_next_token (&p, &length)) != 0)
186      {
187	if (*p != '\0')
188	  *p++ = '\0';
189	eval_makefile (name, RM_NO_DEFAULT_GOAL|RM_INCLUDED|RM_DONTCARE);
190      }
191
192    free (value);
193  }
194
195  /* Read makefiles specified with -f switches.  */
196
197  if (makefiles != 0)
198    while (*makefiles != 0)
199      {
200	struct dep *tail = read_makefiles;
201	register struct dep *d;
202
203	if (! eval_makefile (*makefiles, 0))
204	  perror_with_name ("", *makefiles);
205
206	/* Find the right element of read_makefiles.  */
207	d = read_makefiles;
208	while (d->next != tail)
209	  d = d->next;
210
211	/* Use the storage read_makefile allocates.  */
212	*makefiles = dep_name (d);
213	++num_makefiles;
214	++makefiles;
215      }
216
217  /* If there were no -f switches, try the default names.  */
218
219  if (num_makefiles == 0)
220    {
221      static char *default_makefiles[] =
222#ifdef VMS
223	/* all lower case since readdir() (the vms version) 'lowercasifies' */
224	{ "makefile.vms", "gnumakefile.", "makefile.", 0 };
225#else
226#ifdef _AMIGA
227	{ "GNUmakefile", "Makefile", "SMakefile", 0 };
228#else /* !Amiga && !VMS */
229	{ "GNUmakefile", "makefile", "Makefile", 0 };
230#endif /* AMIGA */
231#endif /* VMS */
232      register char **p = default_makefiles;
233      while (*p != 0 && !file_exists_p (*p))
234	++p;
235
236      if (*p != 0)
237	{
238	  if (! eval_makefile (*p, 0))
239	    perror_with_name ("", *p);
240	}
241      else
242	{
243	  /* No default makefile was found.  Add the default makefiles to the
244	     `read_makefiles' chain so they will be updated if possible.  */
245	  struct dep *tail = read_makefiles;
246	  /* Add them to the tail, after any MAKEFILES variable makefiles.  */
247	  while (tail != 0 && tail->next != 0)
248	    tail = tail->next;
249	  for (p = default_makefiles; *p != 0; ++p)
250	    {
251	      struct dep *d = alloc_dep ();
252	      d->file = enter_file (*p);
253	      d->file->dontcare = 1;
254	      /* Tell update_goal_chain to bail out as soon as this file is
255		 made, and main not to die if we can't make this file.  */
256	      d->changed = RM_DONTCARE;
257	      if (tail == 0)
258		read_makefiles = d;
259	      else
260		tail->next = d;
261	      tail = d;
262	    }
263	  if (tail != 0)
264	    tail->next = 0;
265	}
266    }
267
268  return read_makefiles;
269}
270
271/* Install a new conditional and return the previous one.  */
272
273static struct conditionals *
274install_conditionals (struct conditionals *new)
275{
276  struct conditionals *save = conditionals;
277
278  bzero ((char *) new, sizeof (*new));
279  conditionals = new;
280
281  return save;
282}
283
284/* Free the current conditionals and reinstate a saved one.  */
285
286static void
287restore_conditionals (struct conditionals *saved)
288{
289  /* Free any space allocated by conditional_line.  */
290  if (conditionals->ignoring)
291    free (conditionals->ignoring);
292  if (conditionals->seen_else)
293    free (conditionals->seen_else);
294
295  /* Restore state.  */
296  conditionals = saved;
297}
298
299static int
300eval_makefile (char *filename, int flags)
301{
302  struct dep *deps;
303  struct ebuffer ebuf;
304  const struct floc *curfile;
305  char *expanded = 0;
306  char *included = 0;
307  int makefile_errno;
308  int r;
309
310  ebuf.floc.filenm = strcache_add (filename);
311  ebuf.floc.lineno = 1;
312
313  if (ISDB (DB_VERBOSE))
314    {
315      printf (_("Reading makefile `%s'"), filename);
316      if (flags & RM_NO_DEFAULT_GOAL)
317	printf (_(" (no default goal)"));
318      if (flags & RM_INCLUDED)
319	printf (_(" (search path)"));
320      if (flags & RM_DONTCARE)
321	printf (_(" (don't care)"));
322      if (flags & RM_NO_TILDE)
323	printf (_(" (no ~ expansion)"));
324      puts ("...");
325    }
326
327  /* First, get a stream to read.  */
328
329  /* Expand ~ in FILENAME unless it came from `include',
330     in which case it was already done.  */
331  if (!(flags & RM_NO_TILDE) && filename[0] == '~')
332    {
333      expanded = tilde_expand (filename);
334      if (expanded != 0)
335	filename = expanded;
336    }
337
338  ebuf.fp = fopen (filename, "r");
339  /* Save the error code so we print the right message later.  */
340  makefile_errno = errno;
341
342  /* If the makefile wasn't found and it's either a makefile from
343     the `MAKEFILES' variable or an included makefile,
344     search the included makefile search path for this makefile.  */
345  if (ebuf.fp == 0 && (flags & RM_INCLUDED) && *filename != '/')
346    {
347      register unsigned int i;
348      for (i = 0; include_directories[i] != 0; ++i)
349	{
350	  included = concat (include_directories[i], "/", filename);
351	  ebuf.fp = fopen (included, "r");
352	  if (ebuf.fp)
353	    {
354	      filename = included;
355	      break;
356	    }
357          free (included);
358	}
359      /* If we're not using it, we already freed it above.  */
360      if (filename != included)
361        included = 0;
362    }
363
364  /* Add FILENAME to the chain of read makefiles.  */
365  deps = alloc_dep ();
366  deps->next = read_makefiles;
367  read_makefiles = deps;
368  deps->file = lookup_file (filename);
369  if (deps->file == 0)
370    deps->file = enter_file (xstrdup (filename));
371  filename = deps->file->name;
372  deps->changed = flags;
373  if (flags & RM_DONTCARE)
374    deps->file->dontcare = 1;
375
376  if (expanded)
377    free (expanded);
378  if (included)
379    free (included);
380
381  /* If the makefile can't be found at all, give up entirely.  */
382
383  if (ebuf.fp == 0)
384    {
385      /* If we did some searching, errno has the error from the last
386	 attempt, rather from FILENAME itself.  Restore it in case the
387	 caller wants to use it in a message.  */
388      errno = makefile_errno;
389      return 0;
390    }
391
392  /* Add this makefile to the list. */
393  do_variable_definition (&ebuf.floc, "MAKEFILE_LIST", filename, o_file,
394                          f_append, 0);
395
396  /* Evaluate the makefile */
397
398  ebuf.size = 200;
399  ebuf.buffer = ebuf.bufnext = ebuf.bufstart = xmalloc (ebuf.size);
400
401  curfile = reading_file;
402  reading_file = &ebuf.floc;
403
404  r = eval (&ebuf, !(flags & RM_NO_DEFAULT_GOAL));
405
406  reading_file = curfile;
407
408  fclose (ebuf.fp);
409
410  free (ebuf.bufstart);
411  alloca (0);
412  return r;
413}
414
415int
416eval_buffer (char *buffer)
417{
418  struct ebuffer ebuf;
419  struct conditionals *saved;
420  struct conditionals new;
421  const struct floc *curfile;
422  int r;
423
424  /* Evaluate the buffer */
425
426  ebuf.size = strlen (buffer);
427  ebuf.buffer = ebuf.bufnext = ebuf.bufstart = buffer;
428  ebuf.fp = NULL;
429
430  ebuf.floc = *reading_file;
431
432  curfile = reading_file;
433  reading_file = &ebuf.floc;
434
435  saved = install_conditionals (&new);
436
437  r = eval (&ebuf, 1);
438
439  restore_conditionals (saved);
440
441  reading_file = curfile;
442
443  alloca (0);
444  return r;
445}
446
447
448/* Read file FILENAME as a makefile and add its contents to the data base.
449
450   SET_DEFAULT is true if we are allowed to set the default goal.  */
451
452
453static int
454eval (struct ebuffer *ebuf, int set_default)
455{
456  char *collapsed = 0;
457  unsigned int collapsed_length = 0;
458  unsigned int commands_len = 200;
459  char *commands;
460  unsigned int commands_idx = 0;
461  unsigned int cmds_started, tgts_started;
462  int ignoring = 0, in_ignored_define = 0;
463  int no_targets = 0;		/* Set when reading a rule without targets.  */
464  struct nameseq *filenames = 0;
465  struct dep *deps = 0;
466  long nlines = 0;
467  int two_colon = 0;
468  char *pattern = 0, *pattern_percent;
469  struct floc *fstart;
470  struct floc fi;
471
472#define record_waiting_files()						      \
473  do									      \
474    { 									      \
475      if (filenames != 0)						      \
476        {                                                                     \
477	  fi.lineno = tgts_started;                                           \
478	  record_files (filenames, pattern, pattern_percent, deps,            \
479                        cmds_started, commands, commands_idx, two_colon,      \
480                        &fi);                                                 \
481        }                                                                     \
482      filenames = 0;							      \
483      commands_idx = 0;							      \
484      no_targets = 0;                                                         \
485      if (pattern) { free(pattern); pattern = 0; }                            \
486    } while (0)
487
488  pattern_percent = 0;
489  cmds_started = tgts_started = 1;
490
491  fstart = &ebuf->floc;
492  fi.filenm = ebuf->floc.filenm;
493
494  /* Loop over lines in the file.
495     The strategy is to accumulate target names in FILENAMES, dependencies
496     in DEPS and commands in COMMANDS.  These are used to define a rule
497     when the start of the next rule (or eof) is encountered.
498
499     When you see a "continue" in the loop below, that means we are moving on
500     to the next line _without_ ending any rule that we happen to be working
501     with at the moment.  If you see a "goto rule_complete", then the
502     statement we just parsed also finishes the previous rule.  */
503
504  commands = xmalloc (200);
505
506  while (1)
507    {
508      unsigned int linelen;
509      char *line;
510      int len;
511      char *p;
512      char *p2;
513
514      /* Grab the next line to be evaluated */
515      ebuf->floc.lineno += nlines;
516      nlines = readline (ebuf);
517
518      /* If there is nothing left to eval, we're done.  */
519      if (nlines < 0)
520        break;
521
522      /* If this line is empty, skip it.  */
523      line = ebuf->buffer;
524      if (line[0] == '\0')
525        continue;
526
527      linelen = strlen (line);
528
529      /* Check for a shell command line first.
530	 If it is not one, we can stop treating tab specially.  */
531      if (line[0] == '\t')
532	{
533	  if (no_targets)
534	    /* Ignore the commands in a rule with no targets.  */
535	    continue;
536
537	  /* If there is no preceding rule line, don't treat this line
538	     as a command, even though it begins with a tab character.
539	     SunOS 4 make appears to behave this way.  */
540
541	  if (filenames != 0)
542	    {
543	      if (ignoring)
544		/* Yep, this is a shell command, and we don't care.  */
545		continue;
546
547	      /* Append this command line to the line being accumulated.  */
548	      if (commands_idx == 0)
549		cmds_started = ebuf->floc.lineno;
550
551	      if (linelen + 1 + commands_idx > commands_len)
552		{
553		  commands_len = (linelen + 1 + commands_idx) * 2;
554		  commands = xrealloc (commands, commands_len);
555		}
556	      bcopy (line, &commands[commands_idx], linelen);
557	      commands_idx += linelen;
558	      commands[commands_idx++] = '\n';
559
560	      continue;
561	    }
562	}
563
564      /* This line is not a shell command line.  Don't worry about tabs.
565         Get more space if we need it; we don't need to preserve the current
566         contents of the buffer.  */
567
568      if (collapsed_length < linelen+1)
569	{
570	  collapsed_length = linelen+1;
571          if (collapsed)
572            free ((char *)collapsed);
573	  collapsed = (char *) xmalloc (collapsed_length);
574	}
575      strcpy (collapsed, line);
576      /* Collapse continuation lines.  */
577      collapse_continuations (collapsed);
578      remove_comments (collapsed);
579
580      /* Compare a word, both length and contents. */
581#define	word1eq(s) 	(len == sizeof(s)-1 && strneq (s, p, sizeof(s)-1))
582      p = collapsed;
583      while (isspace ((unsigned char)*p))
584	++p;
585
586      if (*p == '\0')
587	/* This line is completely empty--ignore it.  */
588	continue;
589
590      /* Find the end of the first token.  Note we don't need to worry about
591       * ":" here since we compare tokens by length (so "export" will never
592       * be equal to "export:").
593       */
594      for (p2 = p+1; *p2 != '\0' && !isspace ((unsigned char)*p2); ++p2)
595        ;
596      len = p2 - p;
597
598      /* Find the start of the second token.  If it looks like a target or
599         variable definition it can't be a preprocessor token so skip
600         them--this allows variables/targets named `ifdef', `export', etc. */
601      while (isspace ((unsigned char)*p2))
602        ++p2;
603
604      if ((p2[0] == ':' || p2[0] == '+' || p2[0] == '=') && p2[1] == '\0')
605        {
606          /* It can't be a preprocessor token so skip it if we're ignoring */
607          if (ignoring)
608            continue;
609
610          goto skip_conditionals;
611        }
612
613      /* We must first check for conditional and `define' directives before
614	 ignoring anything, since they control what we will do with
615	 following lines.  */
616
617      if (!in_ignored_define)
618	{
619 	  int i = conditional_line (p, len, fstart);
620          if (i != -2)
621            {
622              if (i == -1)
623                fatal (fstart, _("invalid syntax in conditional"));
624
625              ignoring = i;
626              continue;
627            }
628	}
629
630      if (word1eq ("endef"))
631	{
632	  if (!in_ignored_define)
633	    fatal (fstart, _("extraneous `endef'"));
634          in_ignored_define = 0;
635	  continue;
636	}
637
638      if (word1eq ("define"))
639	{
640	  if (ignoring)
641	    in_ignored_define = 1;
642	  else
643	    {
644              if (*p2 == '\0')
645                fatal (fstart, _("empty variable name"));
646
647	      /* Let the variable name be the whole rest of the line,
648		 with trailing blanks stripped (comments have already been
649		 removed), so it could be a complex variable/function
650		 reference that might contain blanks.  */
651	      p = strchr (p2, '\0');
652	      while (isblank ((unsigned char)p[-1]))
653		--p;
654	      do_define (p2, p - p2, o_file, ebuf);
655	    }
656	  continue;
657	}
658
659      if (word1eq ("override"))
660        {
661	  if (*p2 == '\0')
662	    error (fstart, _("empty `override' directive"));
663
664	  if (strneq (p2, "define", 6)
665	      && (isblank ((unsigned char)p2[6]) || p2[6] == '\0'))
666	    {
667	      if (ignoring)
668		in_ignored_define = 1;
669	      else
670		{
671		  p2 = next_token (p2 + 6);
672                  if (*p2 == '\0')
673                    fatal (fstart, _("empty variable name"));
674
675		  /* Let the variable name be the whole rest of the line,
676		     with trailing blanks stripped (comments have already been
677		     removed), so it could be a complex variable/function
678		     reference that might contain blanks.  */
679		  p = strchr (p2, '\0');
680		  while (isblank ((unsigned char)p[-1]))
681		    --p;
682		  do_define (p2, p - p2, o_override, ebuf);
683		}
684	    }
685	  else if (!ignoring
686		   && !try_variable_definition (fstart, p2, o_override, 0))
687	    error (fstart, _("invalid `override' directive"));
688
689	  continue;
690	}
691
692      if (ignoring)
693	/* Ignore the line.  We continue here so conditionals
694	   can appear in the middle of a rule.  */
695	continue;
696
697      if (word1eq ("export"))
698	{
699          /* 'export' by itself causes everything to be exported. */
700	  if (*p2 == '\0')
701            export_all_variables = 1;
702          else
703            {
704              struct variable *v;
705
706              v = try_variable_definition (fstart, p2, o_file, 0);
707              if (v != 0)
708                v->export = v_export;
709              else
710                {
711                  unsigned int len;
712                  char *ap;
713
714                  /* Expand the line so we can use indirect and constructed
715                     variable names in an export command.  */
716                  p2 = ap = allocated_variable_expand (p2);
717
718                  for (p = find_next_token (&p2, &len); p != 0;
719                       p = find_next_token (&p2, &len))
720                    {
721                      v = lookup_variable (p, len);
722                      if (v == 0)
723                        v = define_variable_loc (p, len, "", o_file, 0,
724                                                 fstart);
725                      v->export = v_export;
726                    }
727
728                  free (ap);
729                }
730            }
731          goto rule_complete;
732	}
733
734      if (word1eq ("unexport"))
735	{
736	  if (*p2 == '\0')
737	    export_all_variables = 0;
738          else
739            {
740              unsigned int len;
741              struct variable *v;
742              char *ap;
743
744              /* Expand the line so we can use indirect and constructed
745                 variable names in an unexport command.  */
746              p2 = ap = allocated_variable_expand (p2);
747
748              for (p = find_next_token (&p2, &len); p != 0;
749                   p = find_next_token (&p2, &len))
750                {
751                  v = lookup_variable (p, len);
752                  if (v == 0)
753                    v = define_variable_loc (p, len, "", o_file, 0, fstart);
754
755                  v->export = v_noexport;
756                }
757
758              free (ap);
759            }
760          goto rule_complete;
761	}
762
763 skip_conditionals:
764      if (word1eq ("vpath"))
765	{
766	  char *pattern;
767	  unsigned int len;
768	  p2 = variable_expand (p2);
769	  p = find_next_token (&p2, &len);
770	  if (p != 0)
771	    {
772	      pattern = savestring (p, len);
773	      p = find_next_token (&p2, &len);
774	      /* No searchpath means remove all previous
775		 selective VPATH's with the same pattern.  */
776	    }
777	  else
778	    /* No pattern means remove all previous selective VPATH's.  */
779	    pattern = 0;
780	  construct_vpath_list (pattern, p);
781	  if (pattern != 0)
782	    free (pattern);
783
784          goto rule_complete;
785	}
786
787      if (word1eq ("include") || word1eq ("-include") || word1eq ("sinclude"))
788	{
789	  /* We have found an `include' line specifying a nested
790	     makefile to be read at this point.  */
791	  struct conditionals *save;
792          struct conditionals new_conditionals;
793	  struct nameseq *files;
794	  /* "-include" (vs "include") says no error if the file does not
795	     exist.  "sinclude" is an alias for this from SGI.  */
796	  int noerror = (p[0] != 'i');
797
798	  p = allocated_variable_expand (p2);
799
800          /* If no filenames, it's a no-op.  */
801	  if (*p == '\0')
802            {
803              free (p);
804              continue;
805            }
806
807	  /* Parse the list of file names.  */
808	  p2 = p;
809	  files = multi_glob (parse_file_seq (&p2, '\0',
810					      sizeof (struct nameseq),
811					      1),
812			      sizeof (struct nameseq));
813	  free (p);
814
815	  /* Save the state of conditionals and start
816	     the included makefile with a clean slate.  */
817	  save = install_conditionals (&new_conditionals);
818
819	  /* Record the rules that are waiting so they will determine
820	     the default goal before those in the included makefile.  */
821	  record_waiting_files ();
822
823	  /* Read each included makefile.  */
824	  while (files != 0)
825	    {
826	      struct nameseq *next = files->next;
827	      char *name = files->name;
828              int r;
829
830	      free ((char *)files);
831	      files = next;
832
833              r = eval_makefile (name, (RM_INCLUDED | RM_NO_TILDE
834                                        | (noerror ? RM_DONTCARE : 0)));
835	      if (!r && !noerror)
836                error (fstart, "%s: %s", name, strerror (errno));
837              free (name);
838	    }
839
840	  /* Restore conditional state.  */
841	  restore_conditionals (save);
842
843          goto rule_complete;
844	}
845
846      if (try_variable_definition (fstart, p, o_file, 0))
847	/* This line has been dealt with.  */
848	goto rule_complete;
849
850      /* This line starts with a tab but was not caught above because there
851         was no preceding target, and the line might have been usable as a
852         variable definition.  But now we know it is definitely lossage.  */
853      if (line[0] == '\t')
854        fatal(fstart, _("commands commence before first target"));
855
856      /* This line describes some target files.  This is complicated by
857         the existence of target-specific variables, because we can't
858         expand the entire line until we know if we have one or not.  So
859         we expand the line word by word until we find the first `:',
860         then check to see if it's a target-specific variable.
861
862         In this algorithm, `lb_next' will point to the beginning of the
863         unexpanded parts of the input buffer, while `p2' points to the
864         parts of the expanded buffer we haven't searched yet. */
865
866      {
867        enum make_word_type wtype;
868        enum variable_origin v_origin;
869        int exported;
870        char *cmdleft, *semip, *lb_next;
871        unsigned int len, plen = 0;
872        char *colonp;
873        const char *end, *beg; /* Helpers for whitespace stripping. */
874
875        /* Record the previous rule.  */
876
877        record_waiting_files ();
878        tgts_started = fstart->lineno;
879
880        /* Search the line for an unquoted ; that is not after an
881           unquoted #.  */
882        cmdleft = find_char_unquote (line, ';', '#', 0, 1);
883        if (cmdleft != 0 && *cmdleft == '#')
884          {
885            /* We found a comment before a semicolon.  */
886            *cmdleft = '\0';
887            cmdleft = 0;
888          }
889        else if (cmdleft != 0)
890          /* Found one.  Cut the line short there before expanding it.  */
891          *(cmdleft++) = '\0';
892        semip = cmdleft;
893
894        collapse_continuations (line);
895
896        /* We can't expand the entire line, since if it's a per-target
897           variable we don't want to expand it.  So, walk from the
898           beginning, expanding as we go, and looking for "interesting"
899           chars.  The first word is always expandable.  */
900        wtype = get_next_mword(line, NULL, &lb_next, &len);
901        switch (wtype)
902          {
903          case w_eol:
904            if (cmdleft != 0)
905              fatal(fstart, _("missing rule before commands"));
906            /* This line contained something but turned out to be nothing
907               but whitespace (a comment?).  */
908            continue;
909
910          case w_colon:
911          case w_dcolon:
912            /* We accept and ignore rules without targets for
913               compatibility with SunOS 4 make.  */
914            no_targets = 1;
915            continue;
916
917          default:
918            break;
919          }
920
921        p2 = variable_expand_string(NULL, lb_next, len);
922
923        while (1)
924          {
925            lb_next += len;
926            if (cmdleft == 0)
927              {
928                /* Look for a semicolon in the expanded line.  */
929                cmdleft = find_char_unquote (p2, ';', 0, 0, 0);
930
931                if (cmdleft != 0)
932                  {
933                    unsigned long p2_off = p2 - variable_buffer;
934                    unsigned long cmd_off = cmdleft - variable_buffer;
935                    char *pend = p2 + strlen(p2);
936
937                    /* Append any remnants of lb, then cut the line short
938                       at the semicolon.  */
939                    *cmdleft = '\0';
940
941                    /* One school of thought says that you shouldn't expand
942                       here, but merely copy, since now you're beyond a ";"
943                       and into a command script.  However, the old parser
944                       expanded the whole line, so we continue that for
945                       backwards-compatiblity.  Also, it wouldn't be
946                       entirely consistent, since we do an unconditional
947                       expand below once we know we don't have a
948                       target-specific variable. */
949                    (void)variable_expand_string(pend, lb_next, (long)-1);
950                    lb_next += strlen(lb_next);
951                    p2 = variable_buffer + p2_off;
952                    cmdleft = variable_buffer + cmd_off + 1;
953                  }
954              }
955
956            colonp = find_char_unquote(p2, ':', 0, 0, 0);
957#ifdef HAVE_DOS_PATHS
958            /* The drive spec brain-damage strikes again...  */
959            /* Note that the only separators of targets in this context
960               are whitespace and a left paren.  If others are possible,
961               they should be added to the string in the call to index.  */
962            while (colonp && (colonp[1] == '/' || colonp[1] == '\\') &&
963                   colonp > p2 && isalpha ((unsigned char)colonp[-1]) &&
964                   (colonp == p2 + 1 || strchr (" \t(", colonp[-2]) != 0))
965              colonp = find_char_unquote(colonp + 1, ':', 0, 0, 0);
966#endif
967            if (colonp != 0)
968              break;
969
970            wtype = get_next_mword(lb_next, NULL, &lb_next, &len);
971            if (wtype == w_eol)
972              break;
973
974            p2 += strlen(p2);
975            *(p2++) = ' ';
976            p2 = variable_expand_string(p2, lb_next, len);
977            /* We don't need to worry about cmdleft here, because if it was
978               found in the variable_buffer the entire buffer has already
979               been expanded... we'll never get here.  */
980          }
981
982        p2 = next_token (variable_buffer);
983
984        /* If the word we're looking at is EOL, see if there's _anything_
985           on the line.  If not, a variable expanded to nothing, so ignore
986           it.  If so, we can't parse this line so punt.  */
987        if (wtype == w_eol)
988          {
989            if (*p2 != '\0')
990              /* There's no need to be ivory-tower about this: check for
991                 one of the most common bugs found in makefiles...  */
992              fatal (fstart, _("missing separator%s"),
993                     !strneq(line, "        ", 8) ? ""
994                     : _(" (did you mean TAB instead of 8 spaces?)"));
995            continue;
996          }
997
998        /* Make the colon the end-of-string so we know where to stop
999           looking for targets.  */
1000        *colonp = '\0';
1001        filenames = multi_glob (parse_file_seq (&p2, '\0',
1002                                                sizeof (struct nameseq),
1003                                                1),
1004                                sizeof (struct nameseq));
1005        *p2 = ':';
1006
1007        if (!filenames)
1008          {
1009            /* We accept and ignore rules without targets for
1010               compatibility with SunOS 4 make.  */
1011            no_targets = 1;
1012            continue;
1013          }
1014        /* This should never be possible; we handled it above.  */
1015        assert (*p2 != '\0');
1016        ++p2;
1017
1018        /* Is this a one-colon or two-colon entry?  */
1019        two_colon = *p2 == ':';
1020        if (two_colon)
1021          p2++;
1022
1023        /* Test to see if it's a target-specific variable.  Copy the rest
1024           of the buffer over, possibly temporarily (we'll expand it later
1025           if it's not a target-specific variable).  PLEN saves the length
1026           of the unparsed section of p2, for later.  */
1027        if (*lb_next != '\0')
1028          {
1029            unsigned int l = p2 - variable_buffer;
1030            plen = strlen (p2);
1031            (void) variable_buffer_output (p2+plen,
1032                                           lb_next, strlen (lb_next)+1);
1033            p2 = variable_buffer + l;
1034          }
1035
1036        /* See if it's an "override" or "export" keyword; if so see if what
1037           comes after it looks like a variable definition.  */
1038
1039        wtype = get_next_mword (p2, NULL, &p, &len);
1040
1041        v_origin = o_file;
1042        exported = 0;
1043        if (wtype == w_static)
1044          {
1045            if (word1eq ("override"))
1046              {
1047                v_origin = o_override;
1048                wtype = get_next_mword (p+len, NULL, &p, &len);
1049              }
1050            else if (word1eq ("export"))
1051              {
1052                exported = 1;
1053                wtype = get_next_mword (p+len, NULL, &p, &len);
1054              }
1055          }
1056
1057        if (wtype != w_eol)
1058          wtype = get_next_mword (p+len, NULL, NULL, NULL);
1059
1060        if (wtype == w_varassign)
1061          {
1062            /* If there was a semicolon found, add it back, plus anything
1063               after it.  */
1064            if (semip)
1065              {
1066                unsigned int l = p - variable_buffer;
1067                *(--semip) = ';';
1068                variable_buffer_output (p2 + strlen (p2),
1069                                        semip, strlen (semip)+1);
1070                p = variable_buffer + l;
1071              }
1072            record_target_var (filenames, p, v_origin, exported, fstart);
1073            filenames = 0;
1074            continue;
1075          }
1076
1077        /* This is a normal target, _not_ a target-specific variable.
1078           Unquote any = in the dependency list.  */
1079        find_char_unquote (lb_next, '=', 0, 0, 0);
1080
1081        /* We have some targets, so don't ignore the following commands.  */
1082        no_targets = 0;
1083
1084        /* Expand the dependencies, etc.  */
1085        if (*lb_next != '\0')
1086          {
1087            unsigned int l = p2 - variable_buffer;
1088            (void) variable_expand_string (p2 + plen, lb_next, (long)-1);
1089            p2 = variable_buffer + l;
1090
1091            /* Look for a semicolon in the expanded line.  */
1092            if (cmdleft == 0)
1093              {
1094                cmdleft = find_char_unquote (p2, ';', 0, 0, 0);
1095                if (cmdleft != 0)
1096                  *(cmdleft++) = '\0';
1097              }
1098          }
1099
1100        /* Is this a static pattern rule: `target: %targ: %dep; ...'?  */
1101        p = strchr (p2, ':');
1102        while (p != 0 && p[-1] == '\\')
1103          {
1104            register char *q = &p[-1];
1105            register int backslash = 0;
1106            while (*q-- == '\\')
1107              backslash = !backslash;
1108            if (backslash)
1109              p = strchr (p + 1, ':');
1110            else
1111              break;
1112          }
1113#ifdef _AMIGA
1114        /* Here, the situation is quite complicated. Let's have a look
1115           at a couple of targets:
1116
1117           install: dev:make
1118
1119           dev:make: make
1120
1121           dev:make:: xyz
1122
1123           The rule is that it's only a target, if there are TWO :'s
1124           OR a space around the :.
1125        */
1126        if (p && !(isspace ((unsigned char)p[1]) || !p[1]
1127                   || isspace ((unsigned char)p[-1])))
1128          p = 0;
1129#endif
1130#ifdef HAVE_DOS_PATHS
1131        {
1132          int check_again;
1133
1134          do {
1135            check_again = 0;
1136            /* For DOS-style paths, skip a "C:\..." or a "C:/..." */
1137            if (p != 0 && (p[1] == '\\' || p[1] == '/') &&
1138                isalpha ((unsigned char)p[-1]) &&
1139                (p == p2 + 1 || strchr (" \t:(", p[-2]) != 0)) {
1140              p = strchr (p + 1, ':');
1141              check_again = 1;
1142            }
1143          } while (check_again);
1144        }
1145#endif
1146        if (p != 0)
1147          {
1148            struct nameseq *target;
1149            target = parse_file_seq (&p2, ':', sizeof (struct nameseq), 1);
1150            ++p2;
1151            if (target == 0)
1152              fatal (fstart, _("missing target pattern"));
1153            else if (target->next != 0)
1154              fatal (fstart, _("multiple target patterns"));
1155            pattern = target->name;
1156            pattern_percent = find_percent (pattern);
1157            if (pattern_percent == 0)
1158              fatal (fstart, _("target pattern contains no `%%'"));
1159            free ((char *)target);
1160          }
1161        else
1162          pattern = 0;
1163
1164        /* Strip leading and trailing whitespaces. */
1165        beg = p2;
1166        end = beg + strlen (beg) - 1;
1167        strip_whitespace (&beg, &end);
1168
1169        if (beg <= end && *beg != '\0')
1170          {
1171            /* Put all the prerequisites here; they'll be parsed later.  */
1172            deps = alloc_dep ();
1173            deps->name = savestring (beg, end - beg + 1);
1174          }
1175        else
1176          deps = 0;
1177
1178        commands_idx = 0;
1179        if (cmdleft != 0)
1180          {
1181            /* Semicolon means rest of line is a command.  */
1182            unsigned int len = strlen (cmdleft);
1183
1184            cmds_started = fstart->lineno;
1185
1186            /* Add this command line to the buffer.  */
1187            if (len + 2 > commands_len)
1188              {
1189                commands_len = (len + 2) * 2;
1190                commands = (char *) xrealloc (commands, commands_len);
1191              }
1192            bcopy (cmdleft, commands, len);
1193            commands_idx += len;
1194            commands[commands_idx++] = '\n';
1195          }
1196
1197        /* Determine if this target should be made default. We used to do
1198           this in record_files() but because of the delayed target recording
1199           and because preprocessor directives are legal in target's commands
1200           it is too late. Consider this fragment for example:
1201
1202           foo:
1203
1204           ifeq ($(.DEFAULT_GOAL),foo)
1205              ...
1206           endif
1207
1208           Because the target is not recorded until after ifeq directive is
1209           evaluated the .DEFAULT_GOAL does not contain foo yet as one
1210           would expect. Because of this we have to move some of the logic
1211           here.  */
1212
1213        if (**default_goal_name == '\0' && set_default)
1214          {
1215            char* name;
1216            struct dep *d;
1217            struct nameseq *t = filenames;
1218
1219            for (; t != 0; t = t->next)
1220              {
1221                int reject = 0;
1222                name = t->name;
1223
1224                /* We have nothing to do if this is an implicit rule. */
1225                if (strchr (name, '%') != 0)
1226                  break;
1227
1228                /* See if this target's name does not start with a `.',
1229                   unless it contains a slash.  */
1230                if (*name == '.' && strchr (name, '/') == 0
1231#ifdef HAVE_DOS_PATHS
1232                    && strchr (name, '\\') == 0
1233#endif
1234                    )
1235                  continue;
1236
1237
1238                /* If this file is a suffix, don't let it be
1239                   the default goal file.  */
1240                for (d = suffix_file->deps; d != 0; d = d->next)
1241                  {
1242                    register struct dep *d2;
1243                    if (*dep_name (d) != '.' && streq (name, dep_name (d)))
1244                      {
1245                        reject = 1;
1246                        break;
1247                      }
1248                    for (d2 = suffix_file->deps; d2 != 0; d2 = d2->next)
1249                      {
1250                        register unsigned int len = strlen (dep_name (d2));
1251                        if (!strneq (name, dep_name (d2), len))
1252                          continue;
1253                        if (streq (name + len, dep_name (d)))
1254                          {
1255                            reject = 1;
1256                            break;
1257                          }
1258                      }
1259
1260                    if (reject)
1261                      break;
1262                  }
1263
1264                if (!reject)
1265                  {
1266                    define_variable_global (".DEFAULT_GOAL", 13, t->name,
1267                                            o_file, 0, NILF);
1268                    break;
1269                  }
1270              }
1271          }
1272
1273        continue;
1274      }
1275
1276      /* We get here except in the case that we just read a rule line.
1277	 Record now the last rule we read, so following spurious
1278	 commands are properly diagnosed.  */
1279 rule_complete:
1280      record_waiting_files ();
1281    }
1282
1283#undef	word1eq
1284
1285  if (conditionals->if_cmds)
1286    fatal (fstart, _("missing `endif'"));
1287
1288  /* At eof, record the last rule.  */
1289  record_waiting_files ();
1290
1291  if (collapsed)
1292    free ((char *) collapsed);
1293  free ((char *) commands);
1294
1295  return 1;
1296}
1297
1298
1299/* Remove comments from LINE.
1300   This is done by copying the text at LINE onto itself.  */
1301
1302static void
1303remove_comments (char *line)
1304{
1305  char *comment;
1306
1307  comment = find_char_unquote (line, '#', 0, 0, 0);
1308
1309  if (comment != 0)
1310    /* Cut off the line at the #.  */
1311    *comment = '\0';
1312}
1313
1314/* Execute a `define' directive.
1315   The first line has already been read, and NAME is the name of
1316   the variable to be defined.  The following lines remain to be read.  */
1317
1318static void
1319do_define (char *name, unsigned int namelen,
1320           enum variable_origin origin, struct ebuffer *ebuf)
1321{
1322  struct floc defstart;
1323  long nlines = 0;
1324  int nlevels = 1;
1325  unsigned int length = 100;
1326  char *definition = (char *) xmalloc (length);
1327  unsigned int idx = 0;
1328  char *p;
1329
1330  /* Expand the variable name.  */
1331  char *var = (char *) alloca (namelen + 1);
1332  bcopy (name, var, namelen);
1333  var[namelen] = '\0';
1334  var = variable_expand (var);
1335
1336  defstart = ebuf->floc;
1337
1338  while (1)
1339    {
1340      unsigned int len;
1341      char *line;
1342
1343      nlines = readline (ebuf);
1344      ebuf->floc.lineno += nlines;
1345
1346      /* If there is nothing left to eval, we're done. */
1347      if (nlines < 0)
1348        break;
1349
1350      line = ebuf->buffer;
1351
1352      collapse_continuations (line);
1353
1354      /* If the line doesn't begin with a tab, test to see if it introduces
1355         another define, or ends one.  */
1356
1357      /* Stop if we find an 'endef' */
1358      if (line[0] != '\t')
1359        {
1360          p = next_token (line);
1361          len = strlen (p);
1362
1363          /* If this is another 'define', increment the level count.  */
1364          if ((len == 6 || (len > 6 && isblank ((unsigned char)p[6])))
1365              && strneq (p, "define", 6))
1366            ++nlevels;
1367
1368          /* If this is an 'endef', decrement the count.  If it's now 0,
1369             we've found the last one.  */
1370          else if ((len == 5 || (len > 5 && isblank ((unsigned char)p[5])))
1371                   && strneq (p, "endef", 5))
1372            {
1373              p += 5;
1374              remove_comments (p);
1375              if (*next_token (p) != '\0')
1376                error (&ebuf->floc,
1377                       _("Extraneous text after `endef' directive"));
1378
1379              if (--nlevels == 0)
1380                {
1381                  /* Define the variable.  */
1382                  if (idx == 0)
1383                    definition[0] = '\0';
1384                  else
1385                    definition[idx - 1] = '\0';
1386
1387                  /* Always define these variables in the global set.  */
1388                  define_variable_global (var, strlen (var), definition,
1389                                          origin, 1, &defstart);
1390                  free (definition);
1391                  return;
1392                }
1393            }
1394        }
1395
1396      /* Otherwise add this line to the variable definition.  */
1397      len = strlen (line);
1398      if (idx + len + 1 > length)
1399        {
1400          length = (idx + len) * 2;
1401          definition = (char *) xrealloc (definition, length + 1);
1402        }
1403
1404      bcopy (line, &definition[idx], len);
1405      idx += len;
1406      /* Separate lines with a newline.  */
1407      definition[idx++] = '\n';
1408    }
1409
1410  /* No `endef'!!  */
1411  fatal (&defstart, _("missing `endef', unterminated `define'"));
1412
1413  /* NOTREACHED */
1414  return;
1415}
1416
1417/* Interpret conditional commands "ifdef", "ifndef", "ifeq",
1418   "ifneq", "else" and "endif".
1419   LINE is the input line, with the command as its first word.
1420
1421   FILENAME and LINENO are the filename and line number in the
1422   current makefile.  They are used for error messages.
1423
1424   Value is -2 if the line is not a conditional at all,
1425   -1 if the line is an invalid conditional,
1426   0 if following text should be interpreted,
1427   1 if following text should be ignored.  */
1428
1429static int
1430conditional_line (char *line, int len, const struct floc *flocp)
1431{
1432  char *cmdname;
1433  enum { c_ifdef, c_ifndef, c_ifeq, c_ifneq, c_else, c_endif } cmdtype;
1434  unsigned int i;
1435  unsigned int o;
1436
1437  /* Compare a word, both length and contents. */
1438#define	word1eq(s)      (len == sizeof(s)-1 && strneq (s, line, sizeof(s)-1))
1439#define	chkword(s, t)   if (word1eq (s)) { cmdtype = (t); cmdname = (s); }
1440
1441  /* Make sure this line is a conditional.  */
1442  chkword ("ifdef", c_ifdef)
1443  else chkword ("ifndef", c_ifndef)
1444  else chkword ("ifeq", c_ifeq)
1445  else chkword ("ifneq", c_ifneq)
1446  else chkword ("else", c_else)
1447  else chkword ("endif", c_endif)
1448  else
1449    return -2;
1450
1451  /* Found one: skip past it and any whitespace after it.  */
1452  line = next_token (line + len);
1453
1454#define EXTRANEOUS() error (flocp, _("Extraneous text after `%s' directive"), cmdname)
1455
1456  /* An 'endif' cannot contain extra text, and reduces the if-depth by 1  */
1457  if (cmdtype == c_endif)
1458    {
1459      if (*line != '\0')
1460	EXTRANEOUS ();
1461
1462      if (!conditionals->if_cmds)
1463	fatal (flocp, _("extraneous `%s'"), cmdname);
1464
1465      --conditionals->if_cmds;
1466
1467      goto DONE;
1468    }
1469
1470  /* An 'else' statement can either be simple, or it can have another
1471     conditional after it.  */
1472  if (cmdtype == c_else)
1473    {
1474      const char *p;
1475
1476      if (!conditionals->if_cmds)
1477	fatal (flocp, _("extraneous `%s'"), cmdname);
1478
1479      o = conditionals->if_cmds - 1;
1480
1481      if (conditionals->seen_else[o])
1482        fatal (flocp, _("only one `else' per conditional"));
1483
1484      /* Change the state of ignorance.  */
1485      switch (conditionals->ignoring[o])
1486        {
1487          case 0:
1488            /* We've just been interpreting.  Never do it again.  */
1489            conditionals->ignoring[o] = 2;
1490            break;
1491          case 1:
1492            /* We've never interpreted yet.  Maybe this time!  */
1493            conditionals->ignoring[o] = 0;
1494            break;
1495        }
1496
1497      /* It's a simple 'else'.  */
1498      if (*line == '\0')
1499        {
1500          conditionals->seen_else[o] = 1;
1501          goto DONE;
1502        }
1503
1504      /* The 'else' has extra text.  That text must be another conditional
1505         and cannot be an 'else' or 'endif'.  */
1506
1507      /* Find the length of the next word.  */
1508      for (p = line+1; *p != '\0' && !isspace ((unsigned char)*p); ++p)
1509        ;
1510      len = p - line;
1511
1512      /* If it's 'else' or 'endif' or an illegal conditional, fail.  */
1513      if (word1eq("else") || word1eq("endif")
1514          || conditional_line (line, len, flocp) < 0)
1515	EXTRANEOUS ();
1516      else
1517        {
1518          /* conditional_line() created a new level of conditional.
1519             Raise it back to this level.  */
1520          if (conditionals->ignoring[o] < 2)
1521            conditionals->ignoring[o] = conditionals->ignoring[o+1];
1522          --conditionals->if_cmds;
1523        }
1524
1525      goto DONE;
1526    }
1527
1528  if (conditionals->allocated == 0)
1529    {
1530      conditionals->allocated = 5;
1531      conditionals->ignoring = (char *) xmalloc (conditionals->allocated);
1532      conditionals->seen_else = (char *) xmalloc (conditionals->allocated);
1533    }
1534
1535  o = conditionals->if_cmds++;
1536  if (conditionals->if_cmds > conditionals->allocated)
1537    {
1538      conditionals->allocated += 5;
1539      conditionals->ignoring = (char *)
1540	xrealloc (conditionals->ignoring, conditionals->allocated);
1541      conditionals->seen_else = (char *)
1542	xrealloc (conditionals->seen_else, conditionals->allocated);
1543    }
1544
1545  /* Record that we have seen an `if...' but no `else' so far.  */
1546  conditionals->seen_else[o] = 0;
1547
1548  /* Search through the stack to see if we're already ignoring.  */
1549  for (i = 0; i < o; ++i)
1550    if (conditionals->ignoring[i])
1551      {
1552	/* We are already ignoring, so just push a level to match the next
1553	   "else" or "endif", and keep ignoring.  We don't want to expand
1554	   variables in the condition.  */
1555	conditionals->ignoring[o] = 1;
1556	return 1;
1557      }
1558
1559  if (cmdtype == c_ifdef || cmdtype == c_ifndef)
1560    {
1561      char *var;
1562      struct variable *v;
1563      char *p;
1564
1565      /* Expand the thing we're looking up, so we can use indirect and
1566         constructed variable names.  */
1567      var = allocated_variable_expand (line);
1568
1569      /* Make sure there's only one variable name to test.  */
1570      p = end_of_token (var);
1571      i = p - var;
1572      p = next_token (p);
1573      if (*p != '\0')
1574	return -1;
1575
1576      var[i] = '\0';
1577      v = lookup_variable (var, i);
1578
1579      conditionals->ignoring[o] =
1580        ((v != 0 && *v->value != '\0') == (cmdtype == c_ifndef));
1581
1582      free (var);
1583    }
1584  else
1585    {
1586      /* "Ifeq" or "ifneq".  */
1587      char *s1, *s2;
1588      unsigned int len;
1589      char termin = *line == '(' ? ',' : *line;
1590
1591      if (termin != ',' && termin != '"' && termin != '\'')
1592	return -1;
1593
1594      s1 = ++line;
1595      /* Find the end of the first string.  */
1596      if (termin == ',')
1597	{
1598	  int count = 0;
1599	  for (; *line != '\0'; ++line)
1600	    if (*line == '(')
1601	      ++count;
1602	    else if (*line == ')')
1603	      --count;
1604	    else if (*line == ',' && count <= 0)
1605	      break;
1606	}
1607      else
1608	while (*line != '\0' && *line != termin)
1609	  ++line;
1610
1611      if (*line == '\0')
1612	return -1;
1613
1614      if (termin == ',')
1615	{
1616	  /* Strip blanks after the first string.  */
1617	  char *p = line++;
1618	  while (isblank ((unsigned char)p[-1]))
1619	    --p;
1620	  *p = '\0';
1621	}
1622      else
1623	*line++ = '\0';
1624
1625      s2 = variable_expand (s1);
1626      /* We must allocate a new copy of the expanded string because
1627	 variable_expand re-uses the same buffer.  */
1628      len = strlen (s2);
1629      s1 = (char *) alloca (len + 1);
1630      bcopy (s2, s1, len + 1);
1631
1632      if (termin != ',')
1633	/* Find the start of the second string.  */
1634	line = next_token (line);
1635
1636      termin = termin == ',' ? ')' : *line;
1637      if (termin != ')' && termin != '"' && termin != '\'')
1638	return -1;
1639
1640      /* Find the end of the second string.  */
1641      if (termin == ')')
1642	{
1643	  register int count = 0;
1644	  s2 = next_token (line);
1645	  for (line = s2; *line != '\0'; ++line)
1646	    {
1647	      if (*line == '(')
1648		++count;
1649	      else if (*line == ')')
1650		{
1651		  if (count <= 0)
1652		    break;
1653		  else
1654		    --count;
1655		}
1656	    }
1657	}
1658      else
1659	{
1660	  ++line;
1661	  s2 = line;
1662	  while (*line != '\0' && *line != termin)
1663	    ++line;
1664	}
1665
1666      if (*line == '\0')
1667	return -1;
1668
1669      *line = '\0';
1670      line = next_token (++line);
1671      if (*line != '\0')
1672	EXTRANEOUS ();
1673
1674      s2 = variable_expand (s2);
1675      conditionals->ignoring[o] = (streq (s1, s2) == (cmdtype == c_ifneq));
1676    }
1677
1678 DONE:
1679  /* Search through the stack to see if we're ignoring.  */
1680  for (i = 0; i < conditionals->if_cmds; ++i)
1681    if (conditionals->ignoring[i])
1682      return 1;
1683  return 0;
1684}
1685
1686/* Remove duplicate dependencies in CHAIN.  */
1687
1688static unsigned long
1689dep_hash_1 (const void *key)
1690{
1691  return_STRING_HASH_1 (dep_name ((struct dep const *) key));
1692}
1693
1694static unsigned long
1695dep_hash_2 (const void *key)
1696{
1697  return_STRING_HASH_2 (dep_name ((struct dep const *) key));
1698}
1699
1700static int
1701dep_hash_cmp (const void *x, const void *y)
1702{
1703  struct dep *dx = (struct dep *) x;
1704  struct dep *dy = (struct dep *) y;
1705  int cmp = strcmp (dep_name (dx), dep_name (dy));
1706
1707  /* If the names are the same but ignore_mtimes are not equal, one of these
1708     is an order-only prerequisite and one isn't.  That means that we should
1709     remove the one that isn't and keep the one that is.  */
1710
1711  if (!cmp && dx->ignore_mtime != dy->ignore_mtime)
1712    dx->ignore_mtime = dy->ignore_mtime = 0;
1713
1714  return cmp;
1715}
1716
1717
1718void
1719uniquize_deps (struct dep *chain)
1720{
1721  struct hash_table deps;
1722  register struct dep **depp;
1723
1724  hash_init (&deps, 500, dep_hash_1, dep_hash_2, dep_hash_cmp);
1725
1726  /* Make sure that no dependencies are repeated.  This does not
1727     really matter for the purpose of updating targets, but it
1728     might make some names be listed twice for $^ and $?.  */
1729
1730  depp = &chain;
1731  while (*depp)
1732    {
1733      struct dep *dep = *depp;
1734      struct dep **dep_slot = (struct dep **) hash_find_slot (&deps, dep);
1735      if (HASH_VACANT (*dep_slot))
1736	{
1737	  hash_insert_at (&deps, dep, dep_slot);
1738	  depp = &dep->next;
1739	}
1740      else
1741	{
1742	  /* Don't bother freeing duplicates.
1743	     It's dangerous and little benefit accrues.  */
1744	  *depp = dep->next;
1745	}
1746    }
1747
1748  hash_free (&deps, 0);
1749}
1750
1751/* Record target-specific variable values for files FILENAMES.
1752   TWO_COLON is nonzero if a double colon was used.
1753
1754   The links of FILENAMES are freed, and so are any names in it
1755   that are not incorporated into other data structures.
1756
1757   If the target is a pattern, add the variable to the pattern-specific
1758   variable value list.  */
1759
1760static void
1761record_target_var (struct nameseq *filenames, char *defn,
1762                   enum variable_origin origin, int exported,
1763                   const struct floc *flocp)
1764{
1765  struct nameseq *nextf;
1766  struct variable_set_list *global;
1767
1768  global = current_variable_set_list;
1769
1770  /* If the variable is an append version, store that but treat it as a
1771     normal recursive variable.  */
1772
1773  for (; filenames != 0; filenames = nextf)
1774    {
1775      struct variable *v;
1776      register char *name = filenames->name;
1777      char *fname;
1778      char *percent;
1779      struct pattern_var *p;
1780
1781      nextf = filenames->next;
1782      free ((char *) filenames);
1783
1784      /* If it's a pattern target, then add it to the pattern-specific
1785         variable list.  */
1786      percent = find_percent (name);
1787      if (percent)
1788        {
1789          /* Get a reference for this pattern-specific variable struct.  */
1790          p = create_pattern_var (name, percent);
1791          p->variable.fileinfo = *flocp;
1792          /* I don't think this can fail since we already determined it was a
1793             variable definition.  */
1794          v = parse_variable_definition (&p->variable, defn);
1795          assert (v != 0);
1796
1797          if (v->flavor == f_simple)
1798            v->value = allocated_variable_expand (v->value);
1799          else
1800            v->value = xstrdup (v->value);
1801
1802          fname = p->target;
1803        }
1804      else
1805        {
1806          struct file *f;
1807
1808          /* Get a file reference for this file, and initialize it.
1809             We don't want to just call enter_file() because that allocates a
1810             new entry if the file is a double-colon, which we don't want in
1811             this situation.  */
1812          f = lookup_file (name);
1813          if (!f)
1814            f = enter_file (name);
1815          else if (f->double_colon)
1816            f = f->double_colon;
1817
1818          initialize_file_variables (f, 1);
1819          fname = f->name;
1820
1821          current_variable_set_list = f->variables;
1822          v = try_variable_definition (flocp, defn, origin, 1);
1823          if (!v)
1824            error (flocp, _("Malformed target-specific variable definition"));
1825          current_variable_set_list = global;
1826        }
1827
1828      /* Set up the variable to be *-specific.  */
1829      v->origin = origin;
1830      v->per_target = 1;
1831      v->export = exported ? v_export : v_default;
1832
1833      /* If it's not an override, check to see if there was a command-line
1834         setting.  If so, reset the value.  */
1835      if (origin != o_override)
1836        {
1837          struct variable *gv;
1838          int len = strlen(v->name);
1839
1840          gv = lookup_variable (v->name, len);
1841          if (gv && (gv->origin == o_env_override || gv->origin == o_command))
1842            {
1843              if (v->value != 0)
1844                free (v->value);
1845              v->value = xstrdup (gv->value);
1846              v->origin = gv->origin;
1847              v->recursive = gv->recursive;
1848              v->append = 0;
1849            }
1850        }
1851
1852      /* Free name if not needed further.  */
1853      if (name != fname && (name < fname || name > fname + strlen (fname)))
1854        free (name);
1855    }
1856}
1857
1858/* Record a description line for files FILENAMES,
1859   with dependencies DEPS, commands to execute described
1860   by COMMANDS and COMMANDS_IDX, coming from FILENAME:COMMANDS_STARTED.
1861   TWO_COLON is nonzero if a double colon was used.
1862   If not nil, PATTERN is the `%' pattern to make this
1863   a static pattern rule, and PATTERN_PERCENT is a pointer
1864   to the `%' within it.
1865
1866   The links of FILENAMES are freed, and so are any names in it
1867   that are not incorporated into other data structures.  */
1868
1869static void
1870record_files (struct nameseq *filenames, char *pattern, char *pattern_percent,
1871              struct dep *deps, unsigned int cmds_started, char *commands,
1872              unsigned int commands_idx, int two_colon,
1873              const struct floc *flocp)
1874{
1875  struct nameseq *nextf;
1876  int implicit = 0;
1877  unsigned int max_targets = 0, target_idx = 0;
1878  char **targets = 0, **target_percents = 0;
1879  struct commands *cmds;
1880
1881  /* If we've already snapped deps, that means we're in an eval being
1882     resolved after the makefiles have been read in.  We can't add more rules
1883     at this time, since they won't get snapped and we'll get core dumps.
1884     See Savannah bug # 12124.  */
1885  if (snapped_deps)
1886    fatal (flocp, _("prerequisites cannot be defined in command scripts"));
1887
1888  if (commands_idx > 0)
1889    {
1890      cmds = (struct commands *) xmalloc (sizeof (struct commands));
1891      cmds->fileinfo.filenm = flocp->filenm;
1892      cmds->fileinfo.lineno = cmds_started;
1893      cmds->commands = savestring (commands, commands_idx);
1894      cmds->command_lines = 0;
1895    }
1896  else
1897    cmds = 0;
1898
1899  for (; filenames != 0; filenames = nextf)
1900    {
1901      char *name = filenames->name;
1902      struct file *f;
1903      struct dep *this = 0;
1904      char *implicit_percent;
1905
1906      nextf = filenames->next;
1907      free (filenames);
1908
1909      /* Check for special targets.  Do it here instead of, say, snap_deps()
1910         so that we can immediately use the value.  */
1911
1912      if (streq (name, ".POSIX"))
1913        posix_pedantic = 1;
1914      else if (streq (name, ".SECONDEXPANSION"))
1915        second_expansion = 1;
1916
1917      implicit_percent = find_percent (name);
1918      implicit |= implicit_percent != 0;
1919
1920      if (implicit && pattern != 0)
1921	fatal (flocp, _("mixed implicit and static pattern rules"));
1922
1923      if (implicit && implicit_percent == 0)
1924	fatal (flocp, _("mixed implicit and normal rules"));
1925
1926      if (implicit)
1927	{
1928	  if (targets == 0)
1929	    {
1930	      max_targets = 5;
1931	      targets = (char **) xmalloc (5 * sizeof (char *));
1932	      target_percents = (char **) xmalloc (5 * sizeof (char *));
1933	      target_idx = 0;
1934	    }
1935	  else if (target_idx == max_targets - 1)
1936	    {
1937	      max_targets += 5;
1938	      targets = (char **) xrealloc ((char *) targets,
1939					    max_targets * sizeof (char *));
1940	      target_percents
1941		= (char **) xrealloc ((char *) target_percents,
1942				      max_targets * sizeof (char *));
1943	    }
1944	  targets[target_idx] = name;
1945	  target_percents[target_idx] = implicit_percent;
1946	  ++target_idx;
1947	  continue;
1948	}
1949
1950      /* If this is a static pattern rule:
1951         `targets: target%pattern: dep%pattern; cmds',
1952         make sure the pattern matches this target name.  */
1953      if (pattern && !pattern_matches (pattern, pattern_percent, name))
1954        error (flocp, _("target `%s' doesn't match the target pattern"), name);
1955      else if (deps)
1956        {
1957          /* If there are multiple filenames, copy the chain DEPS for all but
1958             the last one.  It is not safe for the same deps to go in more
1959             than one place in the database.  */
1960          this = nextf != 0 ? copy_dep_chain (deps) : deps;
1961          this->need_2nd_expansion = (second_expansion
1962				      && strchr (this->name, '$'));
1963        }
1964
1965      if (!two_colon)
1966	{
1967	  /* Single-colon.  Combine these dependencies
1968	     with others in file's existing record, if any.  */
1969	  f = enter_file (name);
1970
1971	  if (f->double_colon)
1972	    fatal (flocp,
1973                   _("target file `%s' has both : and :: entries"), f->name);
1974
1975	  /* If CMDS == F->CMDS, this target was listed in this rule
1976	     more than once.  Just give a warning since this is harmless.  */
1977	  if (cmds != 0 && cmds == f->cmds)
1978	    error (flocp,
1979                   _("target `%s' given more than once in the same rule."),
1980                   f->name);
1981
1982	  /* Check for two single-colon entries both with commands.
1983	     Check is_target so that we don't lose on files such as .c.o
1984	     whose commands were preinitialized.  */
1985	  else if (cmds != 0 && f->cmds != 0 && f->is_target)
1986	    {
1987	      error (&cmds->fileinfo,
1988                     _("warning: overriding commands for target `%s'"),
1989                     f->name);
1990	      error (&f->cmds->fileinfo,
1991                     _("warning: ignoring old commands for target `%s'"),
1992                     f->name);
1993	    }
1994
1995	  f->is_target = 1;
1996
1997	  /* Defining .DEFAULT with no deps or cmds clears it.  */
1998	  if (f == default_file && this == 0 && cmds == 0)
1999	    f->cmds = 0;
2000	  if (cmds != 0)
2001	    f->cmds = cmds;
2002
2003	  /* Defining .SUFFIXES with no dependencies clears out the list of
2004	     suffixes.  */
2005	  if (f == suffix_file && this == 0)
2006	    {
2007              free_dep_chain (f->deps);
2008	      f->deps = 0;
2009	    }
2010          else if (this != 0)
2011	    {
2012	      /* Add the file's old deps and the new ones in THIS together.  */
2013
2014              if (f->deps != 0)
2015                {
2016                  struct dep **d_ptr = &f->deps;
2017
2018                  while ((*d_ptr)->next != 0)
2019                    d_ptr = &(*d_ptr)->next;
2020
2021                  if (cmds != 0)
2022                    /* This is the rule with commands, so put its deps
2023                       last. The rationale behind this is that $< expands to
2024                       the first dep in the chain, and commands use $<
2025                       expecting to get the dep that rule specifies.  However
2026                       the second expansion algorithm reverses the order thus
2027                       we need to make it last here.  */
2028                    (*d_ptr)->next = this;
2029                  else
2030                    {
2031                      /* This is the rule without commands. Put its
2032                         dependencies at the end but before dependencies from
2033                         the rule with commands (if any). This way everything
2034                         appears in makefile order.  */
2035
2036                      if (f->cmds != 0)
2037                        {
2038                          this->next = *d_ptr;
2039                          *d_ptr = this;
2040                        }
2041                      else
2042                        (*d_ptr)->next = this;
2043                    }
2044                }
2045              else
2046                f->deps = this;
2047
2048              /* This is a hack. I need a way to communicate to snap_deps()
2049                 that the last dependency line in this file came with commands
2050                 (so that logic in snap_deps() can put it in front and all
2051                 this $< -logic works). I cannot simply rely on file->cmds
2052                 being not 0 because of the cases like the following:
2053
2054                 foo: bar
2055                 foo:
2056                     ...
2057
2058                 I am going to temporarily "borrow" UPDATING member in
2059                 `struct file' for this.   */
2060
2061              if (cmds != 0)
2062                f->updating = 1;
2063	    }
2064	}
2065      else
2066	{
2067	  /* Double-colon.  Make a new record even if there already is one.  */
2068	  f = lookup_file (name);
2069
2070	  /* Check for both : and :: rules.  Check is_target so
2071	     we don't lose on default suffix rules or makefiles.  */
2072	  if (f != 0 && f->is_target && !f->double_colon)
2073	    fatal (flocp,
2074                   _("target file `%s' has both : and :: entries"), f->name);
2075	  f = enter_file (name);
2076	  /* If there was an existing entry and it was a double-colon entry,
2077	     enter_file will have returned a new one, making it the prev
2078	     pointer of the old one, and setting its double_colon pointer to
2079	     the first one.  */
2080	  if (f->double_colon == 0)
2081	    /* This is the first entry for this name, so we must set its
2082	       double_colon pointer to itself.  */
2083	    f->double_colon = f;
2084	  f->is_target = 1;
2085	  f->deps = this;
2086	  f->cmds = cmds;
2087	}
2088
2089      /* If this is a static pattern rule, set the stem to the part of its
2090         name that matched the `%' in the pattern, so you can use $* in the
2091         commands.  */
2092      if (pattern)
2093        {
2094          static char *percent = "%";
2095          char *buffer = variable_expand ("");
2096          char *o = patsubst_expand (buffer, name, pattern, percent,
2097                                     pattern_percent+1, percent+1);
2098          f->stem = savestring (buffer, o - buffer);
2099          if (this)
2100            {
2101              this->staticpattern = 1;
2102              this->stem = xstrdup (f->stem);
2103            }
2104        }
2105
2106      /* Free name if not needed further.  */
2107      if (f != 0 && name != f->name
2108	  && (name < f->name || name > f->name + strlen (f->name)))
2109	{
2110	  free (name);
2111	  name = f->name;
2112	}
2113
2114      /* If this target is a default target, update DEFAULT_GOAL_FILE.  */
2115      if (streq (*default_goal_name, name)
2116          && (default_goal_file == 0
2117              || ! streq (default_goal_file->name, name)))
2118        default_goal_file = f;
2119    }
2120
2121  if (implicit)
2122    {
2123      targets[target_idx] = 0;
2124      target_percents[target_idx] = 0;
2125      if (deps)
2126        deps->need_2nd_expansion = second_expansion;
2127      create_pattern_rule (targets, target_percents, two_colon, deps, cmds, 1);
2128      free ((char *) target_percents);
2129    }
2130}
2131
2132/* Search STRING for an unquoted STOPCHAR or blank (if BLANK is nonzero).
2133   Backslashes quote STOPCHAR, blanks if BLANK is nonzero, and backslash.
2134   Quoting backslashes are removed from STRING by compacting it into
2135   itself.  Returns a pointer to the first unquoted STOPCHAR if there is
2136   one, or nil if there are none.  STOPCHARs inside variable references are
2137   ignored if IGNOREVARS is true.
2138
2139   STOPCHAR _cannot_ be '$' if IGNOREVARS is true.  */
2140
2141static char *
2142find_char_unquote (char *string, int stop1, int stop2, int blank,
2143                   int ignorevars)
2144{
2145  unsigned int string_len = 0;
2146  register char *p = string;
2147
2148  if (ignorevars)
2149    ignorevars = '$';
2150
2151  while (1)
2152    {
2153      if (stop2 && blank)
2154	while (*p != '\0' && *p != ignorevars && *p != stop1 && *p != stop2
2155	       && ! isblank ((unsigned char) *p))
2156	  ++p;
2157      else if (stop2)
2158	while (*p != '\0' && *p != ignorevars && *p != stop1 && *p != stop2)
2159	  ++p;
2160      else if (blank)
2161	while (*p != '\0' && *p != ignorevars && *p != stop1
2162	       && ! isblank ((unsigned char) *p))
2163	  ++p;
2164      else
2165	while (*p != '\0' && *p != ignorevars && *p != stop1)
2166	  ++p;
2167
2168      if (*p == '\0')
2169	break;
2170
2171      /* If we stopped due to a variable reference, skip over its contents.  */
2172      if (*p == ignorevars)
2173        {
2174          char openparen = p[1];
2175
2176          p += 2;
2177
2178          /* Skip the contents of a non-quoted, multi-char variable ref.  */
2179          if (openparen == '(' || openparen == '{')
2180            {
2181              unsigned int pcount = 1;
2182              char closeparen = (openparen == '(' ? ')' : '}');
2183
2184              while (*p)
2185                {
2186                  if (*p == openparen)
2187                    ++pcount;
2188                  else if (*p == closeparen)
2189                    if (--pcount == 0)
2190                      {
2191                        ++p;
2192                        break;
2193                      }
2194                  ++p;
2195                }
2196            }
2197
2198          /* Skipped the variable reference: look for STOPCHARS again.  */
2199          continue;
2200        }
2201
2202      if (p > string && p[-1] == '\\')
2203	{
2204	  /* Search for more backslashes.  */
2205	  register int i = -2;
2206	  while (&p[i] >= string && p[i] == '\\')
2207	    --i;
2208	  ++i;
2209	  /* Only compute the length if really needed.  */
2210	  if (string_len == 0)
2211	    string_len = strlen (string);
2212	  /* The number of backslashes is now -I.
2213	     Copy P over itself to swallow half of them.  */
2214	  bcopy (&p[i / 2], &p[i], (string_len - (p - string)) - (i / 2) + 1);
2215	  p += i / 2;
2216	  if (i % 2 == 0)
2217	    /* All the backslashes quoted each other; the STOPCHAR was
2218	       unquoted.  */
2219	    return p;
2220
2221	  /* The STOPCHAR was quoted by a backslash.  Look for another.  */
2222	}
2223      else
2224	/* No backslash in sight.  */
2225	return p;
2226    }
2227
2228  /* Never hit a STOPCHAR or blank (with BLANK nonzero).  */
2229  return 0;
2230}
2231
2232/* Search PATTERN for an unquoted %.  */
2233
2234char *
2235find_percent (char *pattern)
2236{
2237  return find_char_unquote (pattern, '%', 0, 0, 0);
2238}
2239
2240/* Parse a string into a sequence of filenames represented as a
2241   chain of struct nameseq's in reverse order and return that chain.
2242
2243   The string is passed as STRINGP, the address of a string pointer.
2244   The string pointer is updated to point at the first character
2245   not parsed, which either is a null char or equals STOPCHAR.
2246
2247   SIZE is how big to construct chain elements.
2248   This is useful if we want them actually to be other structures
2249   that have room for additional info.
2250
2251   If STRIP is nonzero, strip `./'s off the beginning.  */
2252
2253struct nameseq *
2254parse_file_seq (char **stringp, int stopchar, unsigned int size, int strip)
2255{
2256  struct nameseq *new = 0;
2257  struct nameseq *new1, *lastnew1;
2258  char *p = *stringp;
2259  char *q;
2260  char *name;
2261
2262#ifdef VMS
2263# define VMS_COMMA ','
2264#else
2265# define VMS_COMMA 0
2266#endif
2267
2268  while (1)
2269    {
2270      /* Skip whitespace; see if any more names are left.  */
2271      p = next_token (p);
2272      if (*p == '\0')
2273	break;
2274      if (*p == stopchar)
2275	break;
2276
2277      /* Yes, find end of next name.  */
2278      q = p;
2279      p = find_char_unquote (q, stopchar, VMS_COMMA, 1, 0);
2280#ifdef VMS
2281	/* convert comma separated list to space separated */
2282      if (p && *p == ',')
2283	*p =' ';
2284#endif
2285#ifdef _AMIGA
2286      if (stopchar == ':' && p && *p == ':'
2287          && !(isspace ((unsigned char)p[1]) || !p[1]
2288               || isspace ((unsigned char)p[-1])))
2289      {
2290	p = find_char_unquote (p+1, stopchar, VMS_COMMA, 1, 0);
2291      }
2292#endif
2293#ifdef HAVE_DOS_PATHS
2294    /* For DOS paths, skip a "C:\..." or a "C:/..." until we find the
2295       first colon which isn't followed by a slash or a backslash.
2296       Note that tokens separated by spaces should be treated as separate
2297       tokens since make doesn't allow path names with spaces */
2298    if (stopchar == ':')
2299      while (p != 0 && !isspace ((unsigned char)*p) &&
2300             (p[1] == '\\' || p[1] == '/') && isalpha ((unsigned char)p[-1]))
2301        p = find_char_unquote (p + 1, stopchar, VMS_COMMA, 1, 0);
2302#endif
2303      if (p == 0)
2304	p = q + strlen (q);
2305
2306      if (strip)
2307#ifdef VMS
2308	/* Skip leading `[]'s.  */
2309	while (p - q > 2 && q[0] == '[' && q[1] == ']')
2310#else
2311	/* Skip leading `./'s.  */
2312	while (p - q > 2 && q[0] == '.' && q[1] == '/')
2313#endif
2314	  {
2315	    q += 2;		/* Skip "./".  */
2316	    while (q < p && *q == '/')
2317	      /* Skip following slashes: ".//foo" is "foo", not "/foo".  */
2318	      ++q;
2319	  }
2320
2321      /* Extract the filename just found, and skip it.  */
2322
2323      if (q == p)
2324	/* ".///" was stripped to "". */
2325#ifdef VMS
2326	continue;
2327#else
2328#ifdef _AMIGA
2329	name = savestring ("", 0);
2330#else
2331	name = savestring ("./", 2);
2332#endif
2333#endif
2334      else
2335#ifdef VMS
2336/* VMS filenames can have a ':' in them but they have to be '\'ed but we need
2337 *  to remove this '\' before we can use the filename.
2338 * Savestring called because q may be read-only string constant.
2339 */
2340	{
2341	  char *qbase = xstrdup (q);
2342	  char *pbase = qbase + (p-q);
2343	  char *q1 = qbase;
2344	  char *q2 = q1;
2345	  char *p1 = pbase;
2346
2347	  while (q1 != pbase)
2348	    {
2349	      if (*q1 == '\\' && *(q1+1) == ':')
2350		{
2351		  q1++;
2352		  p1--;
2353		}
2354	      *q2++ = *q1++;
2355	    }
2356	  name = savestring (qbase, p1 - qbase);
2357	  free (qbase);
2358	}
2359#else
2360	name = savestring (q, p - q);
2361#endif
2362
2363      /* Add it to the front of the chain.  */
2364      new1 = (struct nameseq *) xmalloc (size);
2365      new1->name = name;
2366      new1->next = new;
2367      new = new1;
2368    }
2369
2370#ifndef NO_ARCHIVES
2371
2372  /* Look for multi-word archive references.
2373     They are indicated by a elt ending with an unmatched `)' and
2374     an elt further down the chain (i.e., previous in the file list)
2375     with an unmatched `(' (e.g., "lib(mem").  */
2376
2377  new1 = new;
2378  lastnew1 = 0;
2379  while (new1 != 0)
2380    if (new1->name[0] != '('	/* Don't catch "(%)" and suchlike.  */
2381	&& new1->name[strlen (new1->name) - 1] == ')'
2382	&& strchr (new1->name, '(') == 0)
2383      {
2384	/* NEW1 ends with a `)' but does not contain a `('.
2385	   Look back for an elt with an opening `(' but no closing `)'.  */
2386
2387	struct nameseq *n = new1->next, *lastn = new1;
2388	char *paren = 0;
2389	while (n != 0 && (paren = strchr (n->name, '(')) == 0)
2390	  {
2391	    lastn = n;
2392	    n = n->next;
2393	  }
2394	if (n != 0
2395	    /* Ignore something starting with `(', as that cannot actually
2396	       be an archive-member reference (and treating it as such
2397	       results in an empty file name, which causes much lossage).  */
2398	    && n->name[0] != '(')
2399	  {
2400	    /* N is the first element in the archive group.
2401	       Its name looks like "lib(mem" (with no closing `)').  */
2402
2403	    char *libname;
2404
2405	    /* Copy "lib(" into LIBNAME.  */
2406	    ++paren;
2407	    libname = (char *) alloca (paren - n->name + 1);
2408	    bcopy (n->name, libname, paren - n->name);
2409	    libname[paren - n->name] = '\0';
2410
2411	    if (*paren == '\0')
2412	      {
2413		/* N was just "lib(", part of something like "lib( a b)".
2414		   Edit it out of the chain and free its storage.  */
2415		lastn->next = n->next;
2416		free (n->name);
2417		free ((char *) n);
2418		/* LASTN->next is the new stopping elt for the loop below.  */
2419		n = lastn->next;
2420	      }
2421	    else
2422	      {
2423		/* Replace N's name with the full archive reference.  */
2424		name = concat (libname, paren, ")");
2425		free (n->name);
2426		n->name = name;
2427	      }
2428
2429	    if (new1->name[1] == '\0')
2430	      {
2431		/* NEW1 is just ")", part of something like "lib(a b )".
2432		   Omit it from the chain and free its storage.  */
2433		if (lastnew1 == 0)
2434		  new = new1->next;
2435		else
2436		  lastnew1->next = new1->next;
2437		lastn = new1;
2438		new1 = new1->next;
2439		free (lastn->name);
2440		free ((char *) lastn);
2441	      }
2442	    else
2443	      {
2444		/* Replace also NEW1->name, which already has closing `)'.  */
2445		name = concat (libname, new1->name, "");
2446		free (new1->name);
2447		new1->name = name;
2448		new1 = new1->next;
2449	      }
2450
2451	    /* Trace back from NEW1 (the end of the list) until N
2452	       (the beginning of the list), rewriting each name
2453	       with the full archive reference.  */
2454
2455	    while (new1 != n)
2456	      {
2457		name = concat (libname, new1->name, ")");
2458		free (new1->name);
2459		new1->name = name;
2460		lastnew1 = new1;
2461		new1 = new1->next;
2462	      }
2463	  }
2464	else
2465	  {
2466	    /* No frobnication happening.  Just step down the list.  */
2467	    lastnew1 = new1;
2468	    new1 = new1->next;
2469	  }
2470      }
2471    else
2472      {
2473	lastnew1 = new1;
2474	new1 = new1->next;
2475      }
2476
2477#endif
2478
2479  *stringp = p;
2480  return new;
2481}
2482
2483/* Find the next line of text in an eval buffer, combining continuation lines
2484   into one line.
2485   Return the number of actual lines read (> 1 if continuation lines).
2486   Returns -1 if there's nothing left in the buffer.
2487
2488   After this function, ebuf->buffer points to the first character of the
2489   line we just found.
2490 */
2491
2492/* Read a line of text from a STRING.
2493   Since we aren't really reading from a file, don't bother with linenumbers.
2494 */
2495
2496static unsigned long
2497readstring (struct ebuffer *ebuf)
2498{
2499  char *eol;
2500
2501  /* If there is nothing left in this buffer, return 0.  */
2502  if (ebuf->bufnext >= ebuf->bufstart + ebuf->size)
2503    return -1;
2504
2505  /* Set up a new starting point for the buffer, and find the end of the
2506     next logical line (taking into account backslash/newline pairs).  */
2507
2508  eol = ebuf->buffer = ebuf->bufnext;
2509
2510  while (1)
2511    {
2512      int backslash = 0;
2513      char *bol = eol;
2514      char *p;
2515
2516      /* Find the next newline.  At EOS, stop.  */
2517      eol = p = strchr (eol , '\n');
2518      if (!eol)
2519        {
2520          ebuf->bufnext = ebuf->bufstart + ebuf->size + 1;
2521          return 0;
2522        }
2523
2524      /* Found a newline; if it's escaped continue; else we're done.  */
2525      while (p > bol && *(--p) == '\\')
2526        backslash = !backslash;
2527      if (!backslash)
2528        break;
2529      ++eol;
2530    }
2531
2532  /* Overwrite the newline char.  */
2533  *eol = '\0';
2534  ebuf->bufnext = eol+1;
2535
2536  return 0;
2537}
2538
2539static long
2540readline (struct ebuffer *ebuf)
2541{
2542  char *p;
2543  char *end;
2544  char *start;
2545  long nlines = 0;
2546
2547  /* The behaviors between string and stream buffers are different enough to
2548     warrant different functions.  Do the Right Thing.  */
2549
2550  if (!ebuf->fp)
2551    return readstring (ebuf);
2552
2553  /* When reading from a file, we always start over at the beginning of the
2554     buffer for each new line.  */
2555
2556  p = start = ebuf->bufstart;
2557  end = p + ebuf->size;
2558  *p = '\0';
2559
2560  while (fgets (p, end - p, ebuf->fp) != 0)
2561    {
2562      char *p2;
2563      unsigned long len;
2564      int backslash;
2565
2566      len = strlen (p);
2567      if (len == 0)
2568	{
2569	  /* This only happens when the first thing on the line is a '\0'.
2570	     It is a pretty hopeless case, but (wonder of wonders) Athena
2571	     lossage strikes again!  (xmkmf puts NULs in its makefiles.)
2572	     There is nothing really to be done; we synthesize a newline so
2573	     the following line doesn't appear to be part of this line.  */
2574	  error (&ebuf->floc,
2575                 _("warning: NUL character seen; rest of line ignored"));
2576	  p[0] = '\n';
2577	  len = 1;
2578	}
2579
2580      /* Jump past the text we just read.  */
2581      p += len;
2582
2583      /* If the last char isn't a newline, the whole line didn't fit into the
2584         buffer.  Get some more buffer and try again.  */
2585      if (p[-1] != '\n')
2586        goto more_buffer;
2587
2588      /* We got a newline, so add one to the count of lines.  */
2589      ++nlines;
2590
2591#if !defined(WINDOWS32) && !defined(__MSDOS__) && !defined(__EMX__)
2592      /* Check to see if the line was really ended with CRLF; if so ignore
2593         the CR.  */
2594      if ((p - start) > 1 && p[-2] == '\r')
2595        {
2596          --p;
2597          p[-1] = '\n';
2598        }
2599#endif
2600
2601      backslash = 0;
2602      for (p2 = p - 2; p2 >= start; --p2)
2603	{
2604	  if (*p2 != '\\')
2605	    break;
2606          backslash = !backslash;
2607	}
2608
2609      if (!backslash)
2610	{
2611	  p[-1] = '\0';
2612	  break;
2613	}
2614
2615      /* It was a backslash/newline combo.  If we have more space, read
2616         another line.  */
2617      if (end - p >= 80)
2618        continue;
2619
2620      /* We need more space at the end of our buffer, so realloc it.
2621         Make sure to preserve the current offset of p.  */
2622    more_buffer:
2623      {
2624        unsigned long off = p - start;
2625        ebuf->size *= 2;
2626        start = ebuf->buffer = ebuf->bufstart = (char *) xrealloc (start,
2627                                                                   ebuf->size);
2628        p = start + off;
2629        end = start + ebuf->size;
2630        *p = '\0';
2631      }
2632    }
2633
2634  if (ferror (ebuf->fp))
2635    pfatal_with_name (ebuf->floc.filenm);
2636
2637  /* If we found some lines, return how many.
2638     If we didn't, but we did find _something_, that indicates we read the last
2639     line of a file with no final newline; return 1.
2640     If we read nothing, we're at EOF; return -1.  */
2641
2642  return nlines ? nlines : p == ebuf->bufstart ? -1 : 1;
2643}
2644
2645/* Parse the next "makefile word" from the input buffer, and return info
2646   about it.
2647
2648   A "makefile word" is one of:
2649
2650     w_bogus        Should never happen
2651     w_eol          End of input
2652     w_static       A static word; cannot be expanded
2653     w_variable     A word containing one or more variables/functions
2654     w_colon        A colon
2655     w_dcolon       A double-colon
2656     w_semicolon    A semicolon
2657     w_varassign    A variable assignment operator (=, :=, +=, or ?=)
2658
2659   Note that this function is only used when reading certain parts of the
2660   makefile.  Don't use it where special rules hold sway (RHS of a variable,
2661   in a command list, etc.)  */
2662
2663static enum make_word_type
2664get_next_mword (char *buffer, char *delim, char **startp, unsigned int *length)
2665{
2666  enum make_word_type wtype = w_bogus;
2667  char *p = buffer, *beg;
2668  char c;
2669
2670  /* Skip any leading whitespace.  */
2671  while (isblank ((unsigned char)*p))
2672    ++p;
2673
2674  beg = p;
2675  c = *(p++);
2676  switch (c)
2677    {
2678    case '\0':
2679      wtype = w_eol;
2680      break;
2681
2682    case ';':
2683      wtype = w_semicolon;
2684      break;
2685
2686    case '=':
2687      wtype = w_varassign;
2688      break;
2689
2690    case ':':
2691      wtype = w_colon;
2692      switch (*p)
2693        {
2694        case ':':
2695          ++p;
2696          wtype = w_dcolon;
2697          break;
2698
2699        case '=':
2700          ++p;
2701          wtype = w_varassign;
2702          break;
2703        }
2704      break;
2705
2706    case '+':
2707    case '?':
2708      if (*p == '=')
2709        {
2710          ++p;
2711          wtype = w_varassign;
2712          break;
2713        }
2714
2715    default:
2716      if (delim && strchr (delim, c))
2717        wtype = w_static;
2718      break;
2719    }
2720
2721  /* Did we find something?  If so, return now.  */
2722  if (wtype != w_bogus)
2723    goto done;
2724
2725  /* This is some non-operator word.  A word consists of the longest
2726     string of characters that doesn't contain whitespace, one of [:=#],
2727     or [?+]=, or one of the chars in the DELIM string.  */
2728
2729  /* We start out assuming a static word; if we see a variable we'll
2730     adjust our assumptions then.  */
2731  wtype = w_static;
2732
2733  /* We already found the first value of "c", above.  */
2734  while (1)
2735    {
2736      char closeparen;
2737      int count;
2738
2739      switch (c)
2740        {
2741        case '\0':
2742        case ' ':
2743        case '\t':
2744        case '=':
2745          goto done_word;
2746
2747        case ':':
2748#ifdef HAVE_DOS_PATHS
2749	  /* A word CAN include a colon in its drive spec.  The drive
2750	     spec is allowed either at the beginning of a word, or as part
2751	     of the archive member name, like in "libfoo.a(d:/foo/bar.o)".  */
2752	  if (!(p - beg >= 2
2753		&& (*p == '/' || *p == '\\') && isalpha ((unsigned char)p[-2])
2754		&& (p - beg == 2 || p[-3] == '(')))
2755#endif
2756	  goto done_word;
2757
2758        case '$':
2759          c = *(p++);
2760          if (c == '$')
2761            break;
2762
2763          /* This is a variable reference, so note that it's expandable.
2764             Then read it to the matching close paren.  */
2765          wtype = w_variable;
2766
2767          if (c == '(')
2768            closeparen = ')';
2769          else if (c == '{')
2770            closeparen = '}';
2771          else
2772            /* This is a single-letter variable reference.  */
2773            break;
2774
2775          for (count=0; *p != '\0'; ++p)
2776            {
2777              if (*p == c)
2778                ++count;
2779              else if (*p == closeparen && --count < 0)
2780                {
2781                  ++p;
2782                  break;
2783                }
2784            }
2785          break;
2786
2787        case '?':
2788        case '+':
2789          if (*p == '=')
2790            goto done_word;
2791          break;
2792
2793        case '\\':
2794          switch (*p)
2795            {
2796            case ':':
2797            case ';':
2798            case '=':
2799            case '\\':
2800              ++p;
2801              break;
2802            }
2803          break;
2804
2805        default:
2806          if (delim && strchr (delim, c))
2807            goto done_word;
2808          break;
2809        }
2810
2811      c = *(p++);
2812    }
2813 done_word:
2814  --p;
2815
2816 done:
2817  if (startp)
2818    *startp = beg;
2819  if (length)
2820    *length = p - beg;
2821  return wtype;
2822}
2823
2824/* Construct the list of include directories
2825   from the arguments and the default list.  */
2826
2827void
2828construct_include_path (char **arg_dirs)
2829{
2830  register unsigned int i;
2831#ifdef VAXC		/* just don't ask ... */
2832  stat_t stbuf;
2833#else
2834  struct stat stbuf;
2835#endif
2836  /* Table to hold the dirs.  */
2837
2838  register unsigned int defsize = (sizeof (default_include_directories)
2839				   / sizeof (default_include_directories[0]));
2840  register unsigned int max = 5;
2841  register char **dirs = (char **) xmalloc ((5 + defsize) * sizeof (char *));
2842  register unsigned int idx = 0;
2843
2844#ifdef  __MSDOS__
2845  defsize++;
2846#endif
2847
2848  /* First consider any dirs specified with -I switches.
2849     Ignore dirs that don't exist.  */
2850
2851  if (arg_dirs != 0)
2852    while (*arg_dirs != 0)
2853      {
2854	char *dir = *arg_dirs++;
2855        int e;
2856
2857	if (dir[0] == '~')
2858	  {
2859	    char *expanded = tilde_expand (dir);
2860	    if (expanded != 0)
2861	      dir = expanded;
2862	  }
2863
2864        EINTRLOOP (e, stat (dir, &stbuf));
2865	if (e == 0 && S_ISDIR (stbuf.st_mode))
2866	  {
2867	    if (idx == max - 1)
2868	      {
2869		max += 5;
2870		dirs = (char **)
2871		  xrealloc ((char *) dirs, (max + defsize) * sizeof (char *));
2872	      }
2873	    dirs[idx++] = dir;
2874	  }
2875	else if (dir != arg_dirs[-1])
2876	  free (dir);
2877      }
2878
2879  /* Now add at the end the standard default dirs.  */
2880
2881#ifdef  __MSDOS__
2882  {
2883    /* The environment variable $DJDIR holds the root of the
2884       DJGPP directory tree; add ${DJDIR}/include.  */
2885    struct variable *djdir = lookup_variable ("DJDIR", 5);
2886
2887    if (djdir)
2888      {
2889	char *defdir = (char *) xmalloc (strlen (djdir->value) + 8 + 1);
2890
2891	strcat (strcpy (defdir, djdir->value), "/include");
2892	dirs[idx++] = defdir;
2893      }
2894  }
2895#endif
2896
2897  for (i = 0; default_include_directories[i] != 0; ++i)
2898    {
2899      int e;
2900
2901      EINTRLOOP (e, stat (default_include_directories[i], &stbuf));
2902      if (e == 0 && S_ISDIR (stbuf.st_mode))
2903        dirs[idx++] = default_include_directories[i];
2904    }
2905
2906  dirs[idx] = 0;
2907
2908  /* Now compute the maximum length of any name in it. Also add each
2909     dir to the .INCLUDE_DIRS variable.  */
2910
2911  max_incl_len = 0;
2912  for (i = 0; i < idx; ++i)
2913    {
2914      unsigned int len = strlen (dirs[i]);
2915      /* If dir name is written with a trailing slash, discard it.  */
2916      if (dirs[i][len - 1] == '/')
2917	/* We can't just clobber a null in because it may have come from
2918	   a literal string and literal strings may not be writable.  */
2919	dirs[i] = savestring (dirs[i], len - 1);
2920      if (len > max_incl_len)
2921	max_incl_len = len;
2922
2923      /* Append to .INCLUDE_DIRS.   */
2924      do_variable_definition (NILF, ".INCLUDE_DIRS", dirs[i],
2925                              o_default, f_append, 0);
2926    }
2927
2928  include_directories = dirs;
2929}
2930
2931/* Expand ~ or ~USER at the beginning of NAME.
2932   Return a newly malloc'd string or 0.  */
2933
2934char *
2935tilde_expand (char *name)
2936{
2937#ifndef VMS
2938  if (name[1] == '/' || name[1] == '\0')
2939    {
2940      extern char *getenv ();
2941      char *home_dir;
2942      int is_variable;
2943
2944      {
2945	/* Turn off --warn-undefined-variables while we expand HOME.  */
2946	int save = warn_undefined_variables_flag;
2947	warn_undefined_variables_flag = 0;
2948
2949	home_dir = allocated_variable_expand ("$(HOME)");
2950
2951	warn_undefined_variables_flag = save;
2952      }
2953
2954      is_variable = home_dir[0] != '\0';
2955      if (!is_variable)
2956	{
2957	  free (home_dir);
2958	  home_dir = getenv ("HOME");
2959	}
2960#if !defined(_AMIGA) && !defined(WINDOWS32)
2961      if (home_dir == 0 || home_dir[0] == '\0')
2962	{
2963	  extern char *getlogin ();
2964	  char *logname = getlogin ();
2965	  home_dir = 0;
2966	  if (logname != 0)
2967	    {
2968	      struct passwd *p = getpwnam (logname);
2969	      if (p != 0)
2970		home_dir = p->pw_dir;
2971	    }
2972	}
2973#endif /* !AMIGA && !WINDOWS32 */
2974      if (home_dir != 0)
2975	{
2976	  char *new = concat (home_dir, "", name + 1);
2977	  if (is_variable)
2978	    free (home_dir);
2979	  return new;
2980	}
2981    }
2982#if !defined(_AMIGA) && !defined(WINDOWS32)
2983  else
2984    {
2985      struct passwd *pwent;
2986      char *userend = strchr (name + 1, '/');
2987      if (userend != 0)
2988	*userend = '\0';
2989      pwent = getpwnam (name + 1);
2990      if (pwent != 0)
2991	{
2992	  if (userend == 0)
2993	    return xstrdup (pwent->pw_dir);
2994	  else
2995	    return concat (pwent->pw_dir, "/", userend + 1);
2996	}
2997      else if (userend != 0)
2998	*userend = '/';
2999    }
3000#endif /* !AMIGA && !WINDOWS32 */
3001#endif /* !VMS */
3002  return 0;
3003}
3004
3005/* Given a chain of struct nameseq's describing a sequence of filenames,
3006   in reverse of the intended order, return a new chain describing the
3007   result of globbing the filenames.  The new chain is in forward order.
3008   The links of the old chain are freed or used in the new chain.
3009   Likewise for the names in the old chain.
3010
3011   SIZE is how big to construct chain elements.
3012   This is useful if we want them actually to be other structures
3013   that have room for additional info.  */
3014
3015struct nameseq *
3016multi_glob (struct nameseq *chain, unsigned int size)
3017{
3018  extern void dir_setup_glob ();
3019  register struct nameseq *new = 0;
3020  register struct nameseq *old;
3021  struct nameseq *nexto;
3022  glob_t gl;
3023
3024  dir_setup_glob (&gl);
3025
3026  for (old = chain; old != 0; old = nexto)
3027    {
3028#ifndef NO_ARCHIVES
3029      char *memname;
3030#endif
3031
3032      nexto = old->next;
3033
3034      if (old->name[0] == '~')
3035	{
3036	  char *newname = tilde_expand (old->name);
3037	  if (newname != 0)
3038	    {
3039	      free (old->name);
3040	      old->name = newname;
3041	    }
3042	}
3043
3044#ifndef NO_ARCHIVES
3045      if (ar_name (old->name))
3046	{
3047	  /* OLD->name is an archive member reference.
3048	     Replace it with the archive file name,
3049	     and save the member name in MEMNAME.
3050	     We will glob on the archive name and then
3051	     reattach MEMNAME later.  */
3052	  char *arname;
3053	  ar_parse_name (old->name, &arname, &memname);
3054	  free (old->name);
3055	  old->name = arname;
3056	}
3057      else
3058	memname = 0;
3059#endif /* !NO_ARCHIVES */
3060
3061      switch (glob (old->name, GLOB_NOCHECK|GLOB_ALTDIRFUNC, NULL, &gl))
3062	{
3063	case 0:			/* Success.  */
3064	  {
3065	    register int i = gl.gl_pathc;
3066	    while (i-- > 0)
3067	      {
3068#ifndef NO_ARCHIVES
3069		if (memname != 0)
3070		  {
3071		    /* Try to glob on MEMNAME within the archive.  */
3072		    struct nameseq *found
3073		      = ar_glob (gl.gl_pathv[i], memname, size);
3074		    if (found == 0)
3075		      {
3076			/* No matches.  Use MEMNAME as-is.  */
3077			unsigned int alen = strlen (gl.gl_pathv[i]);
3078			unsigned int mlen = strlen (memname);
3079			struct nameseq *elt
3080			  = (struct nameseq *) xmalloc (size);
3081                        if (size > sizeof (struct nameseq))
3082                          bzero (((char *) elt) + sizeof (struct nameseq),
3083                                 size - sizeof (struct nameseq));
3084			elt->name = (char *) xmalloc (alen + 1 + mlen + 2);
3085			bcopy (gl.gl_pathv[i], elt->name, alen);
3086			elt->name[alen] = '(';
3087			bcopy (memname, &elt->name[alen + 1], mlen);
3088			elt->name[alen + 1 + mlen] = ')';
3089			elt->name[alen + 1 + mlen + 1] = '\0';
3090			elt->next = new;
3091			new = elt;
3092		      }
3093		    else
3094		      {
3095			/* Find the end of the FOUND chain.  */
3096			struct nameseq *f = found;
3097			while (f->next != 0)
3098			  f = f->next;
3099
3100			/* Attach the chain being built to the end of the FOUND
3101			   chain, and make FOUND the new NEW chain.  */
3102			f->next = new;
3103			new = found;
3104		      }
3105
3106		    free (memname);
3107		  }
3108		else
3109#endif /* !NO_ARCHIVES */
3110		  {
3111		    struct nameseq *elt = (struct nameseq *) xmalloc (size);
3112                    if (size > sizeof (struct nameseq))
3113                      bzero (((char *) elt) + sizeof (struct nameseq),
3114                             size - sizeof (struct nameseq));
3115		    elt->name = xstrdup (gl.gl_pathv[i]);
3116		    elt->next = new;
3117		    new = elt;
3118		  }
3119	      }
3120	    globfree (&gl);
3121	    free (old->name);
3122	    free ((char *)old);
3123	    break;
3124	  }
3125
3126	case GLOB_NOSPACE:
3127	  fatal (NILF, _("virtual memory exhausted"));
3128	  break;
3129
3130	default:
3131	  old->next = new;
3132	  new = old;
3133	  break;
3134	}
3135    }
3136
3137  return new;
3138}
3139