VirtualBox

source: kBuild/trunk/src/kmk/read.c@ 1021

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

fixes to the multi target code. (should be correct now)

  • Property svn:eol-style set to native
File size: 95.3 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 ((void *)targets, max_targets * sizeof (char *));
2047 target_percents = xrealloc ((void *)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 explicit 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
2066 The whole idea of the maybe-updated files is this:
2067 timestamp +| maybe.h: src1.c src2.c
2068 grep goes-into-maybe.h $* > timestamp
2069 cmp timestamp maybe.h || cp -f timestamp maybe.h
2070
2071 This is implemented in remake.c where we don't consider the mtime of
2072 the maybe-updated targets. */
2073 if (multi_mode != m_no && name[0] == '+'
2074 && (name[1] == '\0' || (name[1] == '|' && name[2] == '\0')))
2075 {
2076 if (!prev_file)
2077 multi_mode = m_no; /* first */
2078 else
2079 {
2080 if (multi_mode == m_unsettled)
2081 {
2082 prev_file->multi_head = prev_file;
2083
2084 /* Only the primary file needs the dependencies. */
2085 if (deps)
2086 {
2087 free_dep_chain (deps);
2088 deps = NULL;
2089 }
2090 }
2091 multi_mode = name[1] == '\0' ? m_yes : m_yes_maybe;
2092 continue;
2093 }
2094 }
2095 else if (multi_mode == m_unsettled && prev_file)
2096 multi_mode = m_no;
2097#endif
2098
2099 /* If this is a static pattern rule:
2100 `targets: target%pattern: dep%pattern; cmds',
2101 make sure the pattern matches this target name. */
2102 if (pattern && !pattern_matches (pattern, pattern_percent, name))
2103 error (flocp, _("target `%s' doesn't match the target pattern"), name);
2104 else if (deps)
2105 {
2106 /* If there are multiple filenames, copy the chain DEPS for all but
2107 the last one. It is not safe for the same deps to go in more
2108 than one place in the database. */
2109 this = nextf != 0 ? copy_dep_chain (deps) : deps;
2110 this->need_2nd_expansion = (second_expansion
2111 && strchr (this->name, '$'));
2112 }
2113
2114 if (!two_colon)
2115 {
2116 /* Single-colon. Combine these dependencies
2117 with others in file's existing record, if any. */
2118 f = enter_file (strcache_add (name));
2119
2120 if (f->double_colon)
2121 fatal (flocp,
2122 _("target file `%s' has both : and :: entries"), f->name);
2123
2124 /* If CMDS == F->CMDS, this target was listed in this rule
2125 more than once. Just give a warning since this is harmless. */
2126 if (cmds != 0 && cmds == f->cmds)
2127 error (flocp,
2128 _("target `%s' given more than once in the same rule."),
2129 f->name);
2130
2131 /* Check for two single-colon entries both with commands.
2132 Check is_target so that we don't lose on files such as .c.o
2133 whose commands were preinitialized. */
2134 else if (cmds != 0 && f->cmds != 0 && f->is_target)
2135 {
2136 error (&cmds->fileinfo,
2137 _("warning: overriding commands for target `%s'"),
2138 f->name);
2139 error (&f->cmds->fileinfo,
2140 _("warning: ignoring old commands for target `%s'"),
2141 f->name);
2142 }
2143
2144 f->is_target = 1;
2145
2146 /* Defining .DEFAULT with no deps or cmds clears it. */
2147 if (f == default_file && this == 0 && cmds == 0)
2148 f->cmds = 0;
2149 if (cmds != 0)
2150 f->cmds = cmds;
2151
2152 /* Defining .SUFFIXES with no dependencies clears out the list of
2153 suffixes. */
2154 if (f == suffix_file && this == 0)
2155 {
2156 free_dep_chain (f->deps);
2157 f->deps = 0;
2158 }
2159 else if (this != 0)
2160 {
2161 /* Add the file's old deps and the new ones in THIS together. */
2162
2163 if (f->deps != 0)
2164 {
2165 struct dep **d_ptr = &f->deps;
2166
2167 while ((*d_ptr)->next != 0)
2168 d_ptr = &(*d_ptr)->next;
2169
2170 if (cmds != 0)
2171 /* This is the rule with commands, so put its deps
2172 last. The rationale behind this is that $< expands to
2173 the first dep in the chain, and commands use $<
2174 expecting to get the dep that rule specifies. However
2175 the second expansion algorithm reverses the order thus
2176 we need to make it last here. */
2177 (*d_ptr)->next = this;
2178 else
2179 {
2180 /* This is the rule without commands. Put its
2181 dependencies at the end but before dependencies from
2182 the rule with commands (if any). This way everything
2183 appears in makefile order. */
2184
2185 if (f->cmds != 0)
2186 {
2187 this->next = *d_ptr;
2188 *d_ptr = this;
2189 }
2190 else
2191 (*d_ptr)->next = this;
2192 }
2193 }
2194 else
2195 f->deps = this;
2196
2197 /* This is a hack. I need a way to communicate to snap_deps()
2198 that the last dependency line in this file came with commands
2199 (so that logic in snap_deps() can put it in front and all
2200 this $< -logic works). I cannot simply rely on file->cmds
2201 being not 0 because of the cases like the following:
2202
2203 foo: bar
2204 foo:
2205 ...
2206
2207 I am going to temporarily "borrow" UPDATING member in
2208 `struct file' for this. */
2209
2210 if (cmds != 0)
2211 f->updating = 1;
2212 }
2213 }
2214 else
2215 {
2216 /* Double-colon. Make a new record even if there already is one. */
2217 f = lookup_file (name);
2218
2219 /* Check for both : and :: rules. Check is_target so
2220 we don't lose on default suffix rules or makefiles. */
2221 if (f != 0 && f->is_target && !f->double_colon)
2222 fatal (flocp,
2223 _("target file `%s' has both : and :: entries"), f->name);
2224 f = enter_file (strcache_add (name));
2225 /* If there was an existing entry and it was a double-colon entry,
2226 enter_file will have returned a new one, making it the prev
2227 pointer of the old one, and setting its double_colon pointer to
2228 the first one. */
2229 if (f->double_colon == 0)
2230 /* This is the first entry for this name, so we must set its
2231 double_colon pointer to itself. */
2232 f->double_colon = f;
2233 f->is_target = 1;
2234 f->deps = this;
2235 f->cmds = cmds;
2236 }
2237
2238 /* If this is a static pattern rule, set the stem to the part of its
2239 name that matched the `%' in the pattern, so you can use $* in the
2240 commands. */
2241 if (pattern)
2242 {
2243 static const char *percent = "%";
2244 char *buffer = variable_expand ("");
2245 const size_t buffer_offset = buffer - variable_buffer; /* bird */
2246 char *o = patsubst_expand_pat (buffer, name, pattern, percent,
2247 pattern_percent+1, percent+1);
2248 buffer = variable_buffer + buffer_offset; /* bird - variable_buffer may have been reallocated. */
2249 f->stem = strcache_add_len (buffer, o - buffer);
2250 if (this)
2251 {
2252 this->staticpattern = 1;
2253 this->stem = f->stem;
2254 }
2255 }
2256
2257 name = f->name;
2258
2259 /* If this target is a default target, update DEFAULT_GOAL_FILE. */
2260 if (streq (*default_goal_name, name)
2261 && (default_goal_file == 0
2262 || ! streq (default_goal_file->name, name)))
2263 default_goal_file = f;
2264 }
2265
2266 if (implicit)
2267 {
2268 if (deps)
2269 deps->need_2nd_expansion = second_expansion;
2270 create_pattern_rule (targets, target_percents, target_idx,
2271 two_colon, deps, cmds, 1);
2272 }
2273}
2274
2275
2276/* Search STRING for an unquoted STOPCHAR or blank (if BLANK is nonzero).
2277 Backslashes quote STOPCHAR, blanks if BLANK is nonzero, and backslash.
2278 Quoting backslashes are removed from STRING by compacting it into
2279 itself. Returns a pointer to the first unquoted STOPCHAR if there is
2280 one, or nil if there are none. STOPCHARs inside variable references are
2281 ignored if IGNOREVARS is true.
2282
2283 STOPCHAR _cannot_ be '$' if IGNOREVARS is true. */
2284
2285static char *
2286find_char_unquote (char *string, int stop1, int stop2, int blank,
2287 int ignorevars)
2288{
2289 unsigned int string_len = 0;
2290 char *p = string;
2291 register int ch; /* bird: 'optimiziations' */
2292
2293 if (ignorevars)
2294 ignorevars = '$';
2295
2296 while (1)
2297 {
2298 if (stop2 && blank)
2299 while ((ch = *p) != '\0' && ch != ignorevars && ch != stop1 && ch != stop2
2300 && ! isblank ((unsigned char) ch))
2301 ++p;
2302 else if (stop2)
2303 while ((ch = *p) != '\0' && ch != ignorevars && ch != stop1 && ch != stop2)
2304 ++p;
2305 else if (blank)
2306 while ((ch = *p) != '\0' && ch != ignorevars && ch != stop1
2307 && ! isblank ((unsigned char) ch))
2308 ++p;
2309 else
2310 while ((ch = *p) != '\0' && ch != ignorevars && ch != stop1)
2311 ++p;
2312
2313 if (ch == '\0')
2314 break;
2315
2316 /* If we stopped due to a variable reference, skip over its contents. */
2317 if (ch == ignorevars)
2318 {
2319 char openparen = p[1];
2320
2321 p += 2;
2322
2323 /* Skip the contents of a non-quoted, multi-char variable ref. */
2324 if (openparen == '(' || openparen == '{')
2325 {
2326 unsigned int pcount = 1;
2327 char closeparen = (openparen == '(' ? ')' : '}');
2328
2329 while ((ch = *p))
2330 {
2331 if (ch == openparen)
2332 ++pcount;
2333 else if (ch == closeparen)
2334 if (--pcount == 0)
2335 {
2336 ++p;
2337 break;
2338 }
2339 ++p;
2340 }
2341 }
2342
2343 /* Skipped the variable reference: look for STOPCHARS again. */
2344 continue;
2345 }
2346
2347 if (p > string && p[-1] == '\\')
2348 {
2349 /* Search for more backslashes. */
2350 int i = -2;
2351 while (&p[i] >= string && p[i] == '\\')
2352 --i;
2353 ++i;
2354 /* Only compute the length if really needed. */
2355 if (string_len == 0)
2356 string_len = strlen (string);
2357 /* The number of backslashes is now -I.
2358 Copy P over itself to swallow half of them. */
2359 memmove (&p[i], &p[i/2], (string_len - (p - string)) - (i/2) + 1);
2360 p += i/2;
2361 if (i % 2 == 0)
2362 /* All the backslashes quoted each other; the STOPCHAR was
2363 unquoted. */
2364 return p;
2365
2366 /* The STOPCHAR was quoted by a backslash. Look for another. */
2367 }
2368 else
2369 /* No backslash in sight. */
2370 return p;
2371 }
2372
2373 /* Never hit a STOPCHAR or blank (with BLANK nonzero). */
2374 return 0;
2375}
2376
2377/* Search PATTERN for an unquoted % and handle quoting. */
2378
2379char *
2380find_percent (char *pattern)
2381{
2382 return find_char_unquote (pattern, '%', 0, 0, 0);
2383}
2384
2385/* Search STRING for an unquoted % and handle quoting. Returns a pointer to
2386 the % or NULL if no % was found.
2387 This version is used with strings in the string cache: if there's a need to
2388 modify the string a new version will be added to the string cache and
2389 *STRING will be set to that. */
2390
2391const char *
2392find_percent_cached (const char **string)
2393{
2394 const char *p = *string;
2395 char *new = 0;
2396 int slen;
2397
2398 /* If the first char is a % return now. This lets us avoid extra tests
2399 inside the loop. */
2400 if (*p == '%')
2401 return p;
2402
2403 while (1)
2404 {
2405 while (*p != '\0' && *p != '%')
2406 ++p;
2407
2408 if (*p == '\0')
2409 break;
2410
2411 /* See if this % is escaped with a backslash; if not we're done. */
2412 if (p[-1] != '\\')
2413 break;
2414
2415 {
2416 /* Search for more backslashes. */
2417 char *pv;
2418 int i = -2;
2419
2420 while (&p[i] >= *string && p[i] == '\\')
2421 --i;
2422 ++i;
2423
2424 /* At this point we know we'll need to allocate a new string.
2425 Make a copy if we haven't yet done so. */
2426 if (! new)
2427 {
2428 slen = strlen (*string);
2429 new = alloca (slen + 1);
2430 memcpy (new, *string, slen + 1);
2431 p = new + (p - *string);
2432 *string = new;
2433 }
2434
2435 /* At this point *string, p, and new all point into the same string.
2436 Get a non-const version of p so we can modify new. */
2437 pv = new + (p - *string);
2438
2439 /* The number of backslashes is now -I.
2440 Copy P over itself to swallow half of them. */
2441 memmove (&pv[i], &pv[i/2], (slen - (pv - new)) - (i/2) + 1);
2442 p += i/2;
2443
2444 /* If the backslashes quoted each other; the % was unquoted. */
2445 if (i % 2 == 0)
2446 break;
2447 }
2448 }
2449
2450 /* If we had to change STRING, add it to the strcache. */
2451 if (new)
2452 {
2453 *string = strcache_add (*string);
2454 p = *string + (p - new);
2455 }
2456
2457 /* If we didn't find a %, return NULL. Otherwise return a ptr to it. */
2458 return (*p == '\0') ? NULL : p;
2459}
2460
2461
2462/* Parse a string into a sequence of filenames represented as a
2463 chain of struct nameseq's in reverse order and return that chain.
2464
2465 The string is passed as STRINGP, the address of a string pointer.
2466 The string pointer is updated to point at the first character
2467 not parsed, which either is a null char or equals STOPCHAR.
2468
2469 SIZE is how big to construct chain elements.
2470 This is useful if we want them actually to be other structures
2471 that have room for additional info.
2472
2473 If STRIP is nonzero, strip `./'s off the beginning. */
2474
2475struct nameseq *
2476parse_file_seq (char **stringp, int stopchar, unsigned int size, int strip)
2477{
2478 struct nameseq *new = 0;
2479 struct nameseq *new1;
2480#ifndef NO_ARCHIVES /* bird: MSC warning */
2481 struct nameseq *lastnew1;
2482#endif
2483 char *p = *stringp;
2484
2485#ifdef VMS
2486# define VMS_COMMA ','
2487#else
2488# define VMS_COMMA 0
2489#endif
2490
2491 while (1)
2492 {
2493 const char *name;
2494 char *q;
2495
2496 /* Skip whitespace; see if any more names are left. */
2497 p = next_token (p);
2498 if (*p == '\0')
2499 break;
2500 if (*p == stopchar)
2501 break;
2502
2503 /* There are, so find the end of the next name. */
2504 q = p;
2505 p = find_char_unquote (q, stopchar, VMS_COMMA, 1, 0);
2506#ifdef VMS
2507 /* convert comma separated list to space separated */
2508 if (p && *p == ',')
2509 *p =' ';
2510#endif
2511#ifdef _AMIGA
2512 if (stopchar == ':' && p && *p == ':'
2513 && !(isspace ((unsigned char)p[1]) || !p[1]
2514 || isspace ((unsigned char)p[-1])))
2515 p = find_char_unquote (p+1, stopchar, VMS_COMMA, 1, 0);
2516#endif
2517#ifdef HAVE_DOS_PATHS
2518 /* For DOS paths, skip a "C:\..." or a "C:/..." until we find the
2519 first colon which isn't followed by a slash or a backslash.
2520 Note that tokens separated by spaces should be treated as separate
2521 tokens since make doesn't allow path names with spaces */
2522 if (stopchar == ':')
2523 while (p != 0 && !isspace ((unsigned char)*p) &&
2524 (p[1] == '\\' || p[1] == '/') && isalpha ((unsigned char)p[-1]))
2525 p = find_char_unquote (p + 1, stopchar, VMS_COMMA, 1, 0);
2526#endif
2527 if (p == 0)
2528 p = q + strlen (q);
2529
2530 if (strip)
2531#ifdef VMS
2532 /* Skip leading `[]'s. */
2533 while (p - q > 2 && q[0] == '[' && q[1] == ']')
2534#else
2535 /* Skip leading `./'s. */
2536 while (p - q > 2 && q[0] == '.' && q[1] == '/')
2537#endif
2538 {
2539 q += 2; /* Skip "./". */
2540 while (q < p && *q == '/')
2541 /* Skip following slashes: ".//foo" is "foo", not "/foo". */
2542 ++q;
2543 }
2544
2545 /* Extract the filename just found, and skip it. */
2546
2547 if (q == p)
2548 /* ".///" was stripped to "". */
2549#if defined(VMS)
2550 continue;
2551#elif defined(_AMIGA)
2552 name = "";
2553#else
2554 name = "./";
2555#endif
2556 else
2557#ifdef VMS
2558/* VMS filenames can have a ':' in them but they have to be '\'ed but we need
2559 * to remove this '\' before we can use the filename.
2560 * Savestring called because q may be read-only string constant.
2561 */
2562 {
2563 char *qbase = xstrdup (q);
2564 char *pbase = qbase + (p-q);
2565 char *q1 = qbase;
2566 char *q2 = q1;
2567 char *p1 = pbase;
2568
2569 while (q1 != pbase)
2570 {
2571 if (*q1 == '\\' && *(q1+1) == ':')
2572 {
2573 q1++;
2574 p1--;
2575 }
2576 *q2++ = *q1++;
2577 }
2578 name = strcache_add_len (qbase, p1 - qbase);
2579 free (qbase);
2580 }
2581#else
2582 name = strcache_add_len (q, p - q);
2583#endif
2584
2585 /* Add it to the front of the chain. */
2586 new1 = xmalloc (size);
2587 new1->name = name;
2588 new1->next = new;
2589 new = new1;
2590 }
2591
2592#ifndef NO_ARCHIVES
2593
2594 /* Look for multi-word archive references.
2595 They are indicated by a elt ending with an unmatched `)' and
2596 an elt further down the chain (i.e., previous in the file list)
2597 with an unmatched `(' (e.g., "lib(mem"). */
2598
2599 new1 = new;
2600 lastnew1 = 0;
2601 while (new1 != 0)
2602 if (new1->name[0] != '(' /* Don't catch "(%)" and suchlike. */
2603 && new1->name[strlen (new1->name) - 1] == ')'
2604 && strchr (new1->name, '(') == 0)
2605 {
2606 /* NEW1 ends with a `)' but does not contain a `('.
2607 Look back for an elt with an opening `(' but no closing `)'. */
2608
2609 struct nameseq *n = new1->next, *lastn = new1;
2610 char *paren = 0;
2611 while (n != 0 && (paren = strchr (n->name, '(')) == 0)
2612 {
2613 lastn = n;
2614 n = n->next;
2615 }
2616 if (n != 0
2617 /* Ignore something starting with `(', as that cannot actually
2618 be an archive-member reference (and treating it as such
2619 results in an empty file name, which causes much lossage). */
2620 && n->name[0] != '(')
2621 {
2622 /* N is the first element in the archive group.
2623 Its name looks like "lib(mem" (with no closing `)'). */
2624
2625 char *libname;
2626
2627 /* Copy "lib(" into LIBNAME. */
2628 ++paren;
2629 libname = alloca (paren - n->name + 1);
2630 memcpy (libname, n->name, paren - n->name);
2631 libname[paren - n->name] = '\0';
2632
2633 if (*paren == '\0')
2634 {
2635 /* N was just "lib(", part of something like "lib( a b)".
2636 Edit it out of the chain and free its storage. */
2637 lastn->next = n->next;
2638 free (n);
2639 /* LASTN->next is the new stopping elt for the loop below. */
2640 n = lastn->next;
2641 }
2642 else
2643 {
2644 /* Replace N's name with the full archive reference. */
2645 n->name = strcache_add (concat (libname, paren, ")"));
2646 }
2647
2648 if (new1->name[1] == '\0')
2649 {
2650 /* NEW1 is just ")", part of something like "lib(a b )".
2651 Omit it from the chain and free its storage. */
2652 if (lastnew1 == 0)
2653 new = new1->next;
2654 else
2655 lastnew1->next = new1->next;
2656 lastn = new1;
2657 new1 = new1->next;
2658 free (lastn);
2659 }
2660 else
2661 {
2662 /* Replace also NEW1->name, which already has closing `)'. */
2663 new1->name = strcache_add (concat (libname, new1->name, ""));
2664 new1 = new1->next;
2665 }
2666
2667 /* Trace back from NEW1 (the end of the list) until N
2668 (the beginning of the list), rewriting each name
2669 with the full archive reference. */
2670
2671 while (new1 != n)
2672 {
2673 new1->name = strcache_add (concat (libname, new1->name, ")"));
2674 lastnew1 = new1;
2675 new1 = new1->next;
2676 }
2677 }
2678 else
2679 {
2680 /* No frobnication happening. Just step down the list. */
2681 lastnew1 = new1;
2682 new1 = new1->next;
2683 }
2684 }
2685 else
2686 {
2687 lastnew1 = new1;
2688 new1 = new1->next;
2689 }
2690
2691#endif
2692
2693 *stringp = p;
2694 return new;
2695}
2696
2697
2698/* Find the next line of text in an eval buffer, combining continuation lines
2699 into one line.
2700 Return the number of actual lines read (> 1 if continuation lines).
2701 Returns -1 if there's nothing left in the buffer.
2702
2703 After this function, ebuf->buffer points to the first character of the
2704 line we just found.
2705 */
2706
2707/* Read a line of text from a STRING.
2708 Since we aren't really reading from a file, don't bother with linenumbers.
2709 */
2710
2711static unsigned long
2712readstring (struct ebuffer *ebuf)
2713{
2714 char *eol;
2715
2716 /* If there is nothing left in this buffer, return 0. */
2717 if (ebuf->bufnext >= ebuf->bufstart + ebuf->size)
2718 return -1;
2719
2720 /* Set up a new starting point for the buffer, and find the end of the
2721 next logical line (taking into account backslash/newline pairs). */
2722
2723 eol = ebuf->buffer = ebuf->bufnext;
2724
2725 while (1)
2726 {
2727 int backslash = 0;
2728 char *bol = eol;
2729 char *p;
2730
2731 /* Find the next newline. At EOS, stop. */
2732 eol = p = strchr (eol , '\n');
2733 if (!eol)
2734 {
2735 ebuf->bufnext = ebuf->bufstart + ebuf->size + 1;
2736 return 0;
2737 }
2738
2739 /* Found a newline; if it's escaped continue; else we're done. */
2740 while (p > bol && *(--p) == '\\')
2741 backslash = !backslash;
2742 if (!backslash)
2743 break;
2744 ++eol;
2745 }
2746
2747 /* Overwrite the newline char. */
2748 *eol = '\0';
2749 ebuf->bufnext = eol+1;
2750
2751 return 0;
2752}
2753
2754static long
2755readline (struct ebuffer *ebuf)
2756{
2757 char *p;
2758 char *end;
2759 char *start;
2760 long nlines = 0;
2761
2762 /* The behaviors between string and stream buffers are different enough to
2763 warrant different functions. Do the Right Thing. */
2764
2765 if (!ebuf->fp)
2766 return readstring (ebuf);
2767
2768 /* When reading from a file, we always start over at the beginning of the
2769 buffer for each new line. */
2770
2771 p = start = ebuf->bufstart;
2772 end = p + ebuf->size;
2773 *p = '\0';
2774
2775 while (fgets (p, end - p, ebuf->fp) != 0)
2776 {
2777 char *p2;
2778 unsigned long len;
2779 int backslash;
2780
2781 len = strlen (p);
2782 if (len == 0)
2783 {
2784 /* This only happens when the first thing on the line is a '\0'.
2785 It is a pretty hopeless case, but (wonder of wonders) Athena
2786 lossage strikes again! (xmkmf puts NULs in its makefiles.)
2787 There is nothing really to be done; we synthesize a newline so
2788 the following line doesn't appear to be part of this line. */
2789 error (&ebuf->floc,
2790 _("warning: NUL character seen; rest of line ignored"));
2791 p[0] = '\n';
2792 len = 1;
2793 }
2794
2795 /* Jump past the text we just read. */
2796 p += len;
2797
2798 /* If the last char isn't a newline, the whole line didn't fit into the
2799 buffer. Get some more buffer and try again. */
2800 if (p[-1] != '\n')
2801 goto more_buffer;
2802
2803 /* We got a newline, so add one to the count of lines. */
2804 ++nlines;
2805
2806#if !defined(WINDOWS32) && !defined(__MSDOS__) && !defined(__EMX__)
2807 /* Check to see if the line was really ended with CRLF; if so ignore
2808 the CR. */
2809 if ((p - start) > 1 && p[-2] == '\r')
2810 {
2811 --p;
2812 p[-1] = '\n';
2813 }
2814#endif
2815
2816 backslash = 0;
2817 for (p2 = p - 2; p2 >= start; --p2)
2818 {
2819 if (*p2 != '\\')
2820 break;
2821 backslash = !backslash;
2822 }
2823
2824 if (!backslash)
2825 {
2826 p[-1] = '\0';
2827 break;
2828 }
2829
2830 /* It was a backslash/newline combo. If we have more space, read
2831 another line. */
2832 if (end - p >= 80)
2833 continue;
2834
2835 /* We need more space at the end of our buffer, so realloc it.
2836 Make sure to preserve the current offset of p. */
2837 more_buffer:
2838 {
2839 unsigned long off = p - start;
2840 ebuf->size *= 2;
2841 start = ebuf->buffer = ebuf->bufstart = xrealloc (start, ebuf->size);
2842 p = start + off;
2843 end = start + ebuf->size;
2844 *p = '\0';
2845 }
2846 }
2847
2848 if (ferror (ebuf->fp))
2849 pfatal_with_name (ebuf->floc.filenm);
2850
2851 /* If we found some lines, return how many.
2852 If we didn't, but we did find _something_, that indicates we read the last
2853 line of a file with no final newline; return 1.
2854 If we read nothing, we're at EOF; return -1. */
2855
2856 return nlines ? nlines : p == ebuf->bufstart ? -1 : 1;
2857}
2858
2859
2860/* Parse the next "makefile word" from the input buffer, and return info
2861 about it.
2862
2863 A "makefile word" is one of:
2864
2865 w_bogus Should never happen
2866 w_eol End of input
2867 w_static A static word; cannot be expanded
2868 w_variable A word containing one or more variables/functions
2869 w_colon A colon
2870 w_dcolon A double-colon
2871 w_semicolon A semicolon
2872 w_varassign A variable assignment operator (=, :=, +=, >=, or ?=)
2873
2874 Note that this function is only used when reading certain parts of the
2875 makefile. Don't use it where special rules hold sway (RHS of a variable,
2876 in a command list, etc.) */
2877
2878static enum make_word_type
2879get_next_mword (char *buffer, char *delim, char **startp, unsigned int *length)
2880{
2881 enum make_word_type wtype = w_bogus;
2882 char *p = buffer, *beg;
2883 char c;
2884
2885 /* Skip any leading whitespace. */
2886 while (isblank ((unsigned char)*p))
2887 ++p;
2888
2889 beg = p;
2890 c = *(p++);
2891 switch (c)
2892 {
2893 case '\0':
2894 wtype = w_eol;
2895 break;
2896
2897 case ';':
2898 wtype = w_semicolon;
2899 break;
2900
2901 case '=':
2902 wtype = w_varassign;
2903 break;
2904
2905 case ':':
2906 wtype = w_colon;
2907 switch (*p)
2908 {
2909 case ':':
2910 ++p;
2911 wtype = w_dcolon;
2912 break;
2913
2914 case '=':
2915 ++p;
2916 wtype = w_varassign;
2917 break;
2918 }
2919 break;
2920
2921 case '+':
2922 case '?':
2923#ifdef CONFIG_WITH_PREPEND_ASSIGNMENT
2924 case '>':
2925#endif
2926 if (*p == '=')
2927 {
2928 ++p;
2929 wtype = w_varassign;
2930 break;
2931 }
2932
2933 default:
2934 if (delim && strchr (delim, c))
2935 wtype = w_static;
2936 break;
2937 }
2938
2939 /* Did we find something? If so, return now. */
2940 if (wtype != w_bogus)
2941 goto done;
2942
2943 /* This is some non-operator word. A word consists of the longest
2944 string of characters that doesn't contain whitespace, one of [:=#],
2945 or [?+]=, or one of the chars in the DELIM string. */
2946
2947 /* We start out assuming a static word; if we see a variable we'll
2948 adjust our assumptions then. */
2949 wtype = w_static;
2950
2951 /* We already found the first value of "c", above. */
2952 while (1)
2953 {
2954 char closeparen;
2955 int count;
2956
2957 switch (c)
2958 {
2959 case '\0':
2960 case ' ':
2961 case '\t':
2962 case '=':
2963 goto done_word;
2964
2965 case ':':
2966#ifdef HAVE_DOS_PATHS
2967 /* A word CAN include a colon in its drive spec. The drive
2968 spec is allowed either at the beginning of a word, or as part
2969 of the archive member name, like in "libfoo.a(d:/foo/bar.o)". */
2970 if (!(p - beg >= 2
2971 && (*p == '/' || *p == '\\') && isalpha ((unsigned char)p[-2])
2972 && (p - beg == 2 || p[-3] == '(')))
2973#endif
2974 goto done_word;
2975
2976 case '$':
2977 c = *(p++);
2978 if (c == '$')
2979 break;
2980
2981 /* This is a variable reference, so note that it's expandable.
2982 Then read it to the matching close paren. */
2983 wtype = w_variable;
2984
2985 if (c == '(')
2986 closeparen = ')';
2987 else if (c == '{')
2988 closeparen = '}';
2989 else
2990 /* This is a single-letter variable reference. */
2991 break;
2992
2993 for (count=0; *p != '\0'; ++p)
2994 {
2995 if (*p == c)
2996 ++count;
2997 else if (*p == closeparen && --count < 0)
2998 {
2999 ++p;
3000 break;
3001 }
3002 }
3003 break;
3004
3005 case '?':
3006 case '+':
3007#ifdef CONFIG_WITH_PREPEND_ASSIGNMENT
3008 case '>':
3009#endif
3010 if (*p == '=')
3011 goto done_word;
3012 break;
3013
3014 case '\\':
3015 switch (*p)
3016 {
3017 case ':':
3018 case ';':
3019 case '=':
3020 case '\\':
3021 ++p;
3022 break;
3023 }
3024 break;
3025
3026 default:
3027 if (delim && strchr (delim, c))
3028 goto done_word;
3029 break;
3030 }
3031
3032 c = *(p++);
3033 }
3034 done_word:
3035 --p;
3036
3037 done:
3038 if (startp)
3039 *startp = beg;
3040 if (length)
3041 *length = p - beg;
3042 return wtype;
3043}
3044
3045
3046/* Construct the list of include directories
3047 from the arguments and the default list. */
3048
3049void
3050construct_include_path (const char **arg_dirs)
3051{
3052#ifdef VAXC /* just don't ask ... */
3053 stat_t stbuf;
3054#else
3055 struct stat stbuf;
3056#endif
3057 const char **dirs;
3058 const char **cpp;
3059 unsigned int idx;
3060
3061 /* Compute the number of pointers we need in the table. */
3062 idx = sizeof (default_include_directories) / sizeof (const char *);
3063 if (arg_dirs)
3064 for (cpp = arg_dirs; *cpp != 0; ++cpp)
3065 ++idx;
3066
3067#ifdef __MSDOS__
3068 /* Add one for $DJDIR. */
3069 ++idx;
3070#endif
3071#ifdef KMK
3072 /* Add one for the kBuild directory. */
3073 ++idx;
3074#endif
3075
3076 dirs = xmalloc (idx * sizeof (const char *));
3077
3078 idx = 0;
3079 max_incl_len = 0;
3080
3081 /* First consider any dirs specified with -I switches.
3082 Ignore any that don't exist. Remember the maximum string length. */
3083
3084 if (arg_dirs)
3085 while (*arg_dirs != 0)
3086 {
3087 const char *dir = *(arg_dirs++);
3088 char *expanded = 0;
3089 int e;
3090
3091 if (dir[0] == '~')
3092 {
3093 expanded = tilde_expand (dir);
3094 if (expanded != 0)
3095 dir = expanded;
3096 }
3097
3098 EINTRLOOP (e, stat (dir, &stbuf));
3099 if (e == 0 && S_ISDIR (stbuf.st_mode))
3100 {
3101 unsigned int len = strlen (dir);
3102 /* If dir name is written with trailing slashes, discard them. */
3103 while (len > 1 && dir[len - 1] == '/')
3104 --len;
3105 if (len > max_incl_len)
3106 max_incl_len = len;
3107 dirs[idx++] = strcache_add_len (dir, len);
3108 }
3109
3110 if (expanded)
3111 free (expanded);
3112 }
3113
3114 /* Now add the standard default dirs at the end. */
3115
3116#ifdef __MSDOS__
3117 {
3118 /* The environment variable $DJDIR holds the root of the DJGPP directory
3119 tree; add ${DJDIR}/include. */
3120 struct variable *djdir = lookup_variable ("DJDIR", 5);
3121
3122 if (djdir)
3123 {
3124 unsigned int len = strlen (djdir->value) + 8;
3125 char *defdir = alloca (len + 1);
3126
3127 strcat (strcpy (defdir, djdir->value), "/include");
3128 dirs[idx++] = strcache_add (defdir);
3129
3130 if (len > max_incl_len)
3131 max_incl_len = len;
3132 }
3133 }
3134#endif
3135#ifdef KMK
3136 /* Add $(PATH_KBUILD). */
3137 {
3138 size_t len = strlen (get_path_kbuild ());
3139 dirs[idx++] = strcache_add_len (get_path_kbuild (), len);
3140 if (len > max_incl_len)
3141 max_incl_len = len;
3142 }
3143#endif
3144
3145 for (cpp = default_include_directories; *cpp != 0; ++cpp)
3146 {
3147 int e;
3148
3149 EINTRLOOP (e, stat (*cpp, &stbuf));
3150 if (e == 0 && S_ISDIR (stbuf.st_mode))
3151 {
3152 unsigned int len = strlen (*cpp);
3153 /* If dir name is written with trailing slashes, discard them. */
3154 while (len > 1 && (*cpp)[len - 1] == '/')
3155 --len;
3156 if (len > max_incl_len)
3157 max_incl_len = len;
3158 dirs[idx++] = strcache_add_len (*cpp, len - 1);
3159 }
3160 }
3161
3162 dirs[idx] = 0;
3163
3164 /* Now add each dir to the .INCLUDE_DIRS variable. */
3165
3166 for (cpp = dirs; *cpp != 0; ++cpp)
3167 do_variable_definition (NILF, ".INCLUDE_DIRS", *cpp,
3168 o_default, f_append, 0);
3169
3170 include_directories = dirs;
3171}
3172
3173
3174/* Expand ~ or ~USER at the beginning of NAME.
3175 Return a newly malloc'd string or 0. */
3176
3177char *
3178tilde_expand (const char *name)
3179{
3180#ifndef VMS
3181 if (name[1] == '/' || name[1] == '\0')
3182 {
3183 extern char *getenv ();
3184 char *home_dir;
3185 int is_variable;
3186
3187 {
3188 /* Turn off --warn-undefined-variables while we expand HOME. */
3189 int save = warn_undefined_variables_flag;
3190 warn_undefined_variables_flag = 0;
3191
3192 home_dir = allocated_variable_expand ("$(HOME)");
3193
3194 warn_undefined_variables_flag = save;
3195 }
3196
3197 is_variable = home_dir[0] != '\0';
3198 if (!is_variable)
3199 {
3200 free (home_dir);
3201 home_dir = getenv ("HOME");
3202 }
3203# if !defined(_AMIGA) && !defined(WINDOWS32)
3204 if (home_dir == 0 || home_dir[0] == '\0')
3205 {
3206 extern char *getlogin ();
3207 char *logname = getlogin ();
3208 home_dir = 0;
3209 if (logname != 0)
3210 {
3211 struct passwd *p = getpwnam (logname);
3212 if (p != 0)
3213 home_dir = p->pw_dir;
3214 }
3215 }
3216# endif /* !AMIGA && !WINDOWS32 */
3217 if (home_dir != 0)
3218 {
3219 char *new = xstrdup (concat (home_dir, "", name + 1));
3220 if (is_variable)
3221 free (home_dir);
3222 return new;
3223 }
3224 }
3225# if !defined(_AMIGA) && !defined(WINDOWS32)
3226 else
3227 {
3228 struct passwd *pwent;
3229 char *userend = strchr (name + 1, '/');
3230 if (userend != 0)
3231 *userend = '\0';
3232 pwent = getpwnam (name + 1);
3233 if (pwent != 0)
3234 {
3235 if (userend == 0)
3236 return xstrdup (pwent->pw_dir);
3237 else
3238 return xstrdup (concat (pwent->pw_dir, "/", userend + 1));
3239 }
3240 else if (userend != 0)
3241 *userend = '/';
3242 }
3243# endif /* !AMIGA && !WINDOWS32 */
3244#endif /* !VMS */
3245 return 0;
3246}
3247
3248/* Given a chain of struct nameseq's describing a sequence of filenames,
3249 in reverse of the intended order, return a new chain describing the
3250 result of globbing the filenames. The new chain is in forward order.
3251 The links of the old chain are freed or used in the new chain.
3252 Likewise for the names in the old chain.
3253
3254 SIZE is how big to construct chain elements.
3255 This is useful if we want them actually to be other structures
3256 that have room for additional info. */
3257
3258struct nameseq *
3259multi_glob (struct nameseq *chain, unsigned int size)
3260{
3261 void dir_setup_glob (glob_t *);
3262 struct nameseq *new = 0;
3263 struct nameseq *old;
3264 struct nameseq *nexto;
3265 glob_t gl;
3266#if defined(KMK) || defined(__EMX__) /* speed optimization */
3267 int rc;
3268#endif
3269
3270 dir_setup_glob (&gl);
3271
3272 for (old = chain; old != 0; old = nexto)
3273 {
3274 const char *gname;
3275#ifndef NO_ARCHIVES
3276 char *arname = 0;
3277 char *memname = 0;
3278#endif
3279 nexto = old->next;
3280 gname = old->name;
3281
3282 if (gname[0] == '~')
3283 {
3284 char *newname = tilde_expand (old->name);
3285 if (newname != 0)
3286 gname = newname;
3287 }
3288
3289#ifndef NO_ARCHIVES
3290 if (ar_name (gname))
3291 {
3292 /* OLD->name is an archive member reference. Replace it with the
3293 archive file name, and save the member name in MEMNAME. We will
3294 glob on the archive name and then reattach MEMNAME later. */
3295 ar_parse_name (gname, &arname, &memname);
3296 gname = arname;
3297 }
3298#endif /* !NO_ARCHIVES */
3299
3300#if defined(KMK) || defined(__EMX__) /* speed optimization */
3301 if (!strpbrk(gname, "*?["))
3302 {
3303 gl.gl_pathc = 1;
3304 gl.gl_pathv = (char **)&gname;
3305 rc = 0;
3306 }
3307 else
3308 rc = glob (gname, GLOB_NOCHECK|GLOB_ALTDIRFUNC, NULL, &gl);
3309 switch (rc)
3310#else
3311 switch (glob (gname, GLOB_NOCHECK|GLOB_ALTDIRFUNC, NULL, &gl))
3312#endif
3313 {
3314 case 0: /* Success. */
3315 {
3316 int i = gl.gl_pathc;
3317 while (i-- > 0)
3318 {
3319#ifndef NO_ARCHIVES
3320 if (memname != 0)
3321 {
3322 /* Try to glob on MEMNAME within the archive. */
3323 struct nameseq *found
3324 = ar_glob (gl.gl_pathv[i], memname, size);
3325 if (! found)
3326 {
3327 /* No matches. Use MEMNAME as-is. */
3328 unsigned int alen = strlen (gl.gl_pathv[i]);
3329 unsigned int mlen = strlen (memname);
3330 char *name;
3331 struct nameseq *elt = xmalloc (size);
3332 memset (elt, '\0', size);
3333
3334 name = alloca (alen + 1 + mlen + 2);
3335 memcpy (name, gl.gl_pathv[i], alen);
3336 name[alen] = '(';
3337 memcpy (name+alen+1, memname, mlen);
3338 name[alen + 1 + mlen] = ')';
3339 name[alen + 1 + mlen + 1] = '\0';
3340 elt->name = strcache_add (name);
3341 elt->next = new;
3342 new = elt;
3343 }
3344 else
3345 {
3346 /* Find the end of the FOUND chain. */
3347 struct nameseq *f = found;
3348 while (f->next != 0)
3349 f = f->next;
3350
3351 /* Attach the chain being built to the end of the FOUND
3352 chain, and make FOUND the new NEW chain. */
3353 f->next = new;
3354 new = found;
3355 }
3356 }
3357 else
3358#endif /* !NO_ARCHIVES */
3359 {
3360 struct nameseq *elt = xmalloc (size);
3361 memset (elt, '\0', size);
3362 elt->name = strcache_add (gl.gl_pathv[i]);
3363 elt->next = new;
3364 new = elt;
3365 }
3366 }
3367#if defined(KMK) || defined(__EMX__) /* speed optimization */
3368 if (gl.gl_pathv != (char **)&gname)
3369#endif
3370 globfree (&gl);
3371 free (old);
3372 break;
3373 }
3374
3375 case GLOB_NOSPACE:
3376 fatal (NILF, _("virtual memory exhausted"));
3377 break;
3378
3379 default:
3380 old->next = new;
3381 new = old;
3382 break;
3383 }
3384
3385#ifndef NO_ARCHIVES
3386 if (arname)
3387 free (arname);
3388#endif
3389 }
3390
3391 return new;
3392}
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette