source: trunk/src/gmakenew/read.c@ 921

Last change on this file since 921 was 921, checked in by bird, 18 years ago

multi target explicit rules. partly done.

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