1 /* Reading and parsing of makefiles for GNU Make.
2 Copyright (C) 1988, 89, 90, 91, 92, 93, 94 Free Software Foundation, Inc.
3 This file is part of GNU Make.
5 GNU Make is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2, or (at your option)
10 GNU Make is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with GNU Make; see the file COPYING. If not, write to
17 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
25 /* This is POSIX.2, but most systems using -DPOSIX probably don't have it. */
29 #include "glob/glob.h"
33 struct passwd
*getpwnam ();
36 static int read_makefile ();
37 static unsigned int readline (), do_define ();
38 static int conditional_line ();
39 static void record_files ();
40 static char *find_semicolon ();
43 /* A `struct linebuffer' is a structure which holds a line of text.
44 `readline' reads a line from a stream into a linebuffer
45 and works regardless of the length of the line. */
49 /* Note: This is the number of bytes malloc'ed for `buffer'
50 It does not indicate `buffer's real length.
51 Instead, a null char indicates end-of-string. */
56 #define initbuffer(lb) (lb)->buffer = (char *) xmalloc ((lb)->size = 200)
57 #define freebuffer(lb) free ((lb)->buffer)
60 /* A `struct conditionals' contains the information describing
61 all the active conditionals in a makefile.
63 The global variable `conditionals' contains the conditionals
64 information for the current makefile. It is initialized from
65 the static structure `toplevel_conditionals' and is later changed
66 to new structures for included makefiles. */
70 unsigned int if_cmds
; /* Depth of conditional nesting. */
71 unsigned int allocated
; /* Elts allocated in following arrays. */
72 char *ignoring
; /* Are we ignoring or interepreting? */
73 char *seen_else
; /* Have we already seen an `else'? */
76 static struct conditionals toplevel_conditionals
;
77 static struct conditionals
*conditionals
= &toplevel_conditionals
;
80 /* Default directories to search for include files in */
82 static char *default_include_directories
[] =
91 /* List of directories to search for include files in */
93 static char **include_directories
;
95 /* Maximum length of an element of the above. */
97 static unsigned int max_incl_len
;
99 /* The filename and pointer to line number of the
100 makefile currently being read in. */
102 char *reading_filename
;
103 unsigned int *reading_lineno_ptr
;
105 /* The chain of makefiles read by read_makefile. */
107 static struct dep
*read_makefiles
= 0;
109 /* Read in all the makefiles and return the chain of their names. */
112 read_all_makefiles (makefiles
)
115 unsigned int num_makefiles
= 0;
118 puts ("Reading makefiles...");
120 /* If there's a non-null variable MAKEFILES, its value is a list of
121 files to read first thing. But don't let it prevent reading the
122 default makefiles and don't let the default goal come from there. */
130 /* Turn off --warn-undefined-variables while we expand MAKEFILES. */
131 int save
= warn_undefined_variables_flag
;
132 warn_undefined_variables_flag
= 0;
134 value
= allocated_variable_expand ("$(MAKEFILES)");
136 warn_undefined_variables_flag
= save
;
139 /* Set NAME to the start of next token and LENGTH to its length.
140 MAKEFILES is updated for finding remaining tokens. */
142 while ((name
= find_next_token (&p
, &length
)) != 0)
146 (void) read_makefile (name
,
147 RM_NO_DEFAULT_GOAL
| RM_INCLUDED
| RM_DONTCARE
);
153 /* Read makefiles specified with -f switches. */
156 while (*makefiles
!= 0)
158 struct dep
*tail
= read_makefiles
;
159 register struct dep
*d
;
161 if (! read_makefile (*makefiles
, 0))
162 perror_with_name ("", *makefiles
);
164 /* Find the right element of read_makefiles. */
166 while (d
->next
!= tail
)
169 /* Use the storage read_makefile allocates. */
170 *makefiles
= dep_name (d
);
175 /* If there were no -f switches, try the default names. */
177 if (num_makefiles
== 0)
179 static char *default_makefiles
[] =
180 { "GNUmakefile", "makefile", "Makefile", 0 };
181 register char **p
= default_makefiles
;
182 while (*p
!= 0 && !file_exists_p (*p
))
187 if (! read_makefile (*p
, 0))
188 perror_with_name ("", *p
);
192 /* No default makefile was found. Add the default makefiles to the
193 `read_makefiles' chain so they will be updated if possible. */
194 struct dep
*tail
= read_makefiles
;
195 for (p
= default_makefiles
; *p
!= 0; ++p
)
197 struct dep
*d
= (struct dep
*) xmalloc (sizeof (struct dep
));
199 d
->file
= enter_file (*p
);
200 d
->file
->dontcare
= 1;
201 /* Tell update_goal_chain to bail out as soon as this file is
202 made, and main not to die if we can't make this file. */
203 d
->changed
= RM_DONTCARE
;
215 return read_makefiles
;
218 /* Read file FILENAME as a makefile and add its contents to the data base.
220 FLAGS contains bits as above.
222 FILENAME is added to the `read_makefiles' chain.
224 Returns 1 if a file was found and read, 0 if not. */
227 read_makefile (filename
, flags
)
231 static char *collapsed
= 0;
232 static unsigned int collapsed_length
= 0;
233 register FILE *infile
;
234 struct linebuffer lb
;
235 unsigned int commands_len
= 200;
236 char *commands
= (char *) xmalloc (200);
237 unsigned int commands_idx
= 0;
238 unsigned int commands_started
;
241 int ignoring
= 0, in_ignored_define
= 0;
242 int no_targets
= 0; /* Set when reading a rule without targets. */
244 struct nameseq
*filenames
= 0;
246 unsigned int lineno
= 1;
247 unsigned int nlines
= 0;
249 char *pattern
= 0, *pattern_percent
;
253 #define record_waiting_files() \
256 if (filenames != 0) \
257 record_files (filenames, pattern, pattern_percent, deps, \
258 commands_started, commands, commands_idx, \
259 two_colon, filename, lineno, \
260 !(flags & RM_NO_DEFAULT_GOAL)); \
266 #ifdef lint /* Suppress `used before set' messages. */
272 printf ("Reading makefile `%s'", filename
);
273 if (flags
& RM_NO_DEFAULT_GOAL
)
274 printf (" (no default goal)");
275 if (flags
& RM_INCLUDED
)
276 printf (" (search path)");
277 if (flags
& RM_DONTCARE
)
278 printf (" (don't care)");
279 if (flags
& RM_NO_TILDE
)
280 printf (" (no ~ expansion)");
284 /* First, get a stream to read. */
286 /* Expand ~ in FILENAME unless it came from `include',
287 in which case it was already done. */
288 if (!(flags
& RM_NO_TILDE
) && filename
[0] == '~')
290 char *expanded
= tilde_expand (filename
);
291 /* This is a possible memory leak, but I don't care. */
296 infile
= fopen (filename
, "r");
297 /* Save the error code so we print the right message later. */
298 makefile_errno
= errno
;
300 /* If the makefile wasn't found and it's either a makefile from
301 the `MAKEFILES' variable or an included makefile,
302 search the included makefile search path for this makefile. */
304 if (infile
== 0 && (flags
& RM_INCLUDED
) && *filename
!= '/')
306 register unsigned int i
;
307 for (i
= 0; include_directories
[i
] != 0; ++i
)
309 char *name
= concat (include_directories
[i
], "/", filename
);
310 infile
= fopen (name
, "r");
321 /* Add FILENAME to the chain of read makefiles. */
322 deps
= (struct dep
*) xmalloc (sizeof (struct dep
));
323 deps
->next
= read_makefiles
;
324 read_makefiles
= deps
;
326 deps
->file
= lookup_file (filename
);
329 deps
->file
= enter_file (savestring (filename
, strlen (filename
)));
330 if (flags
& RM_DONTCARE
)
331 deps
->file
->dontcare
= 1;
333 filename
= deps
->file
->name
;
334 deps
->changed
= flags
;
337 /* If the makefile can't be found at all, give up entirely. */
341 /* If we did some searching, errno has the error from the last
342 attempt, rather from FILENAME itself. Restore it in case the
343 caller wants to use it in a message. */
344 errno
= makefile_errno
;
348 reading_filename
= filename
;
349 reading_lineno_ptr
= &lineno
;
351 /* Loop over lines in the file.
352 The strategy is to accumulate target names in FILENAMES, dependencies
353 in DEPS and commands in COMMANDS. These are used to define a rule
354 when the start of the next rule (or eof) is encountered. */
358 while (!feof (infile
))
361 nlines
= readline (&lb
, infile
, filename
, lineno
);
363 if (collapsed_length
< lb
.size
)
365 collapsed_length
= lb
.size
;
368 collapsed
= (char *) xmalloc (collapsed_length
);
370 strcpy (collapsed
, lb
.buffer
);
371 /* Collapse continuation lines. */
372 collapse_continuations (collapsed
);
373 remove_comments (collapsed
);
376 while (isspace (*p
) && *p
!= '\t')
378 /* We cannot consider a line containing just a tab to be empty
379 because it might constitute an empty command for a target. */
380 if (*p
== '\0' && lb
.buffer
[0] != '\t')
383 /* strncmp is first to avoid dereferencing out into space. */
384 #define word1eq(s, l) (!strncmp (s, p, l) \
385 && (p[l] == '\0' || isblank (p[l])))
386 if (!in_ignored_define
387 && (word1eq ("ifdef", 5) || word1eq ("ifndef", 6)
388 || word1eq ("ifeq", 4) || word1eq ("ifneq", 5)
389 || word1eq ("else", 4) || word1eq ("endif", 5)))
391 int i
= conditional_line (p
, filename
, lineno
);
395 makefile_fatal (filename
, lineno
,
396 "invalid syntax in conditional");
399 else if (word1eq ("endef", 5))
401 if (in_ignored_define
)
402 in_ignored_define
= 0;
404 makefile_fatal (filename
, lineno
, "extraneous `endef'");
407 else if (word1eq ("define", 6))
410 in_ignored_define
= 1;
413 p2
= next_token (p
+ 6);
414 /* Let the variable name be the whole rest of the line,
415 with trailing blanks stripped (comments have already been
416 removed), so it could be a complex variable/function
417 reference that might contain blanks. */
418 p
= index (p2
, '\0');
419 while (isblank (p
[-1]))
421 lineno
= do_define (p2
, p
- p2
, o_file
,
422 lineno
, infile
, filename
);
426 else if (word1eq ("override", 8))
428 p2
= next_token (p
+ 8);
430 makefile_error (filename
, lineno
, "empty `override' directive");
431 if (!strncmp (p2
, "define", 6) && (isblank (p2
[6]) || p2
[6] == '\0'))
434 in_ignored_define
= 1;
437 p2
= next_token (p2
+ 6);
438 /* Let the variable name be the whole rest of the line,
439 with trailing blanks stripped (comments have already been
440 removed), so it could be a complex variable/function
441 reference that might contain blanks. */
442 p
= index (p2
, '\0');
443 while (isblank (p
[-1]))
445 lineno
= do_define (p2
, p
- p2
, o_override
,
446 lineno
, infile
, filename
);
450 && !try_variable_definition (filename
, lineno
,
452 makefile_error (filename
, lineno
, "empty `override' directive");
458 /* Ignore the line. We continue here so conditionals
459 can appear in the middle of a rule. */
461 else if (lb
.buffer
[0] == '\t')
463 /* This line is a shell command. */
467 /* Ignore the commands in a rule with no targets. */
470 /* If there is no preceding rule line, don't treat this line
471 as a command, even though it begins with a tab character.
472 SunOS 4 make appears to behave this way. */
476 /* Append this command line to the line being accumulated. */
478 if (commands_idx
== 0)
479 commands_started
= lineno
;
481 if (len
+ 1 + commands_idx
> commands_len
)
483 commands_len
= (len
+ 1 + commands_idx
) * 2;
484 commands
= (char *) xrealloc (commands
, commands_len
);
486 bcopy (p
, &commands
[commands_idx
], len
);
488 commands
[commands_idx
++] = '\n';
494 if (word1eq ("export", 6))
497 p2
= next_token (p
+ 6);
499 export_all_variables
= 1;
500 v
= try_variable_definition (filename
, lineno
, p2
, o_file
);
502 v
->export
= v_export
;
506 for (p
= find_next_token (&p2
, &len
); p
!= 0;
507 p
= find_next_token (&p2
, &len
))
509 v
= lookup_variable (p
, len
);
511 v
= define_variable (p
, len
, "", o_file
, 0);
512 v
->export
= v_export
;
516 else if (word1eq ("unexport", 8))
520 p2
= next_token (p
+ 8);
522 export_all_variables
= 0;
523 for (p
= find_next_token (&p2
, &len
); p
!= 0;
524 p
= find_next_token (&p2
, &len
))
526 v
= lookup_variable (p
, len
);
528 v
= define_variable (p
, len
, "", o_file
, 0);
529 v
->export
= v_noexport
;
532 else if (word1eq ("include", 7) || word1eq ("-include", 8))
534 /* We have found an `include' line specifying a nested
535 makefile to be read at this point. */
536 struct conditionals
*save
, new_conditionals
;
537 struct nameseq
*files
;
538 /* "-include" (vs "include") says no
539 error if the file does not exist. */
540 int noerror
= p
[0] == '-';
542 p
= allocated_variable_expand (next_token (p
+ (noerror
? 9 : 8)));
545 makefile_error (filename
, lineno
,
546 "no file name for `%sinclude'",
551 /* Parse the list of file names. */
553 files
= multi_glob (parse_file_seq (&p2
, '\0',
554 sizeof (struct nameseq
),
556 sizeof (struct nameseq
));
559 /* Save the state of conditionals and start
560 the included makefile with a clean slate. */
562 bzero ((char *) &new_conditionals
, sizeof new_conditionals
);
563 conditionals
= &new_conditionals
;
565 /* Record the rules that are waiting so they will determine
566 the default goal before those in the included makefile. */
567 record_waiting_files ();
569 /* Read each included makefile. */
572 struct nameseq
*next
= files
->next
;
573 char *name
= files
->name
;
577 if (! read_makefile (name
, (RM_INCLUDED
| RM_NO_TILDE
578 | (noerror
? RM_DONTCARE
: 0)))
580 makefile_error (filename
, lineno
,
581 "%s: %s", name
, strerror (errno
));
584 /* Free any space allocated by conditional_line. */
585 if (conditionals
->ignoring
)
586 free (conditionals
->ignoring
);
587 if (conditionals
->seen_else
)
588 free (conditionals
->seen_else
);
592 reading_filename
= filename
;
593 reading_lineno_ptr
= &lineno
;
595 else if (word1eq ("vpath", 5))
599 p2
= variable_expand (p
+ 5);
600 p
= find_next_token (&p2
, &len
);
603 pattern
= savestring (p
, len
);
604 p
= find_next_token (&p2
, &len
);
605 /* No searchpath means remove all previous
606 selective VPATH's with the same pattern. */
609 /* No pattern means remove all previous selective VPATH's. */
611 construct_vpath_list (pattern
, p
);
616 else if (try_variable_definition (filename
, lineno
, p
, o_file
))
617 /* This line has been dealt with. */
619 else if (lb
.buffer
[0] == '\t')
625 /* The line is completely blank; that is harmless. */
627 /* This line starts with a tab but was not caught above
628 because there was no preceding target, and the line
629 might have been usable as a variable definition.
630 But now it is definitely lossage. */
631 makefile_fatal (filename
, lineno
,
632 "commands commence before first target");
636 /* This line describes some target files. */
640 /* Record the previous rule. */
642 record_waiting_files ();
644 /* Look for a semicolon in the unexpanded line. */
645 cmdleft
= find_semicolon (lb
.buffer
);
647 /* Found one. Cut the line short there before expanding it. */
650 collapse_continuations (lb
.buffer
);
652 /* Expand variable and function references before doing anything
653 else so that special characters can be inside variables. */
654 p
= variable_expand (lb
.buffer
);
657 /* Look for a semicolon in the expanded line. */
658 cmdleft
= find_semicolon (p
);
661 /* Cut the line short at the semicolon. */
664 /* Remove comments from the line. */
671 makefile_fatal (filename
, lineno
,
672 "missing rule before commands");
674 /* This line contained a variable reference that
675 expanded to nothing but whitespace. */
680 /* We accept and ignore rules without targets for
681 compatibility with SunOS 4 make. */
686 filenames
= multi_glob (parse_file_seq (&p2
, ':',
687 sizeof (struct nameseq
),
689 sizeof (struct nameseq
));
691 makefile_fatal (filename
, lineno
, "missing separator");
692 /* Is this a one-colon or two-colon entry? */
693 two_colon
= *p2
== ':';
697 /* We have some targets, so don't ignore the following commands. */
700 /* Is this a static pattern rule: `target: %targ: %dep; ...'? */
702 while (p
!= 0 && p
[-1] == '\\')
704 register char *q
= &p
[-1];
705 register int backslash
= 0;
707 backslash
= !backslash
;
709 p
= index (p
+ 1, ':');
715 struct nameseq
*target
;
716 target
= parse_file_seq (&p2
, ':', sizeof (struct nameseq
), 1);
719 makefile_fatal (filename
, lineno
, "missing target pattern");
720 else if (target
->next
!= 0)
721 makefile_fatal (filename
, lineno
, "multiple target patterns");
722 pattern
= target
->name
;
723 pattern_percent
= find_percent (pattern
);
724 if (pattern_percent
== 0)
725 makefile_fatal (filename
, lineno
,
726 "target pattern contains no `%%'");
731 /* Parse the dependencies. */
732 deps
= (struct dep
*)
733 multi_glob (parse_file_seq (&p2
, '\0', sizeof (struct dep
), 1),
734 sizeof (struct dep
));
739 /* Semicolon means rest of line is a command. */
740 unsigned int len
= strlen (cmdleft
+ 1);
742 commands_started
= lineno
;
744 /* Add this command line to the buffer. */
745 if (len
+ 2 > commands_len
)
747 commands_len
= (len
+ 2) * 2;
748 commands
= (char *) xrealloc (commands
, commands_len
);
750 bcopy (cmdleft
+ 1, commands
, len
);
752 commands
[commands_idx
++] = '\n';
758 /* We get here except in the case that we just read a rule line.
759 Record now the last rule we read, so following spurious
760 commands are properly diagnosed. */
761 record_waiting_files ();
765 if (conditionals
->if_cmds
)
766 makefile_fatal (filename
, lineno
, "missing `endif'");
768 /* At eof, record the last rule. */
769 record_waiting_files ();
772 free ((char *) commands
);
775 reading_filename
= 0;
776 reading_lineno_ptr
= 0;
781 /* Execute a `define' directive.
782 The first line has already been read, and NAME is the name of
783 the variable to be defined. The following lines remain to be read.
784 LINENO, INFILE and FILENAME refer to the makefile being read.
785 The value returned is LINENO, updated for lines read here. */
788 do_define (name
, namelen
, origin
, lineno
, infile
, filename
)
790 unsigned int namelen
;
791 enum variable_origin origin
;
796 struct linebuffer lb
;
797 unsigned int nlines
= 0;
798 unsigned int length
= 100;
799 char *definition
= (char *) xmalloc (100);
800 register unsigned int idx
= 0;
803 /* Expand the variable name. */
804 char *var
= (char *) alloca (namelen
+ 1);
805 bcopy (name
, var
, namelen
);
807 var
= variable_expand (var
);
810 while (!feof (infile
))
813 nlines
= readline (&lb
, infile
, filename
, lineno
);
815 collapse_continuations (lb
.buffer
);
817 p
= next_token (lb
.buffer
);
818 if ((p
[5] == '\0' || isblank (p
[5])) && !strncmp (p
, "endef", 5))
822 if (*next_token (p
) != '\0')
823 makefile_error (filename
, lineno
,
824 "Extraneous text after `endef' directive");
825 /* Define the variable. */
827 definition
[0] = '\0';
829 definition
[idx
- 1] = '\0';
830 (void) define_variable (var
, strlen (var
), definition
, origin
, 1);
837 unsigned int len
= strlen (lb
.buffer
);
839 /* Increase the buffer size if necessary. */
840 if (idx
+ len
+ 1 > length
)
842 length
= (idx
+ len
) * 2;
843 definition
= (char *) xrealloc (definition
, length
+ 1);
846 bcopy (lb
.buffer
, &definition
[idx
], len
);
848 /* Separate lines with a newline. */
849 definition
[idx
++] = '\n';
854 makefile_fatal (filename
, lineno
, "missing `endef', unterminated `define'");
860 /* Interpret conditional commands "ifdef", "ifndef", "ifeq",
861 "ifneq", "else" and "endif".
862 LINE is the input line, with the command as its first word.
864 FILENAME and LINENO are the filename and line number in the
865 current makefile. They are used for error messages.
867 Value is -1 if the line is invalid,
868 0 if following text should be interpreted,
869 1 if following text should be ignored. */
872 conditional_line (line
, filename
, lineno
)
879 register unsigned int i
;
883 /* It's an "if..." command. */
884 notdef
= line
[2] == 'n';
887 cmdname
= line
[3] == 'd' ? "ifndef" : "ifneq";
888 line
+= cmdname
[3] == 'd' ? 7 : 6;
892 cmdname
= line
[2] == 'd' ? "ifdef" : "ifeq";
893 line
+= cmdname
[2] == 'd' ? 6 : 5;
898 /* It's an "else" or "endif" command. */
899 notdef
= line
[1] == 'n';
900 cmdname
= notdef
? "endif" : "else";
901 line
+= notdef
? 5 : 4;
904 line
= next_token (line
);
909 makefile_error (filename
, lineno
,
910 "Extraneous text after `%s' directive",
912 /* "Else" or "endif". */
913 if (conditionals
->if_cmds
== 0)
914 makefile_fatal (filename
, lineno
, "extraneous `%s'", cmdname
);
915 /* NOTDEF indicates an `endif' command. */
917 --conditionals
->if_cmds
;
918 else if (conditionals
->seen_else
[conditionals
->if_cmds
- 1])
919 makefile_fatal (filename
, lineno
, "only one `else' per conditional");
922 /* Toggle the state of ignorance. */
923 conditionals
->ignoring
[conditionals
->if_cmds
- 1]
924 = !conditionals
->ignoring
[conditionals
->if_cmds
- 1];
925 /* Record that we have seen an `else' in this conditional.
926 A second `else' will be erroneous. */
927 conditionals
->seen_else
[conditionals
->if_cmds
- 1] = 1;
929 for (i
= 0; i
< conditionals
->if_cmds
; ++i
)
930 if (conditionals
->ignoring
[i
])
935 if (conditionals
->allocated
== 0)
937 conditionals
->allocated
= 5;
938 conditionals
->ignoring
= (char *) xmalloc (conditionals
->allocated
);
939 conditionals
->seen_else
= (char *) xmalloc (conditionals
->allocated
);
942 ++conditionals
->if_cmds
;
943 if (conditionals
->if_cmds
> conditionals
->allocated
)
945 conditionals
->allocated
+= 5;
946 conditionals
->ignoring
= (char *)
947 xrealloc (conditionals
->ignoring
, conditionals
->allocated
);
948 conditionals
->seen_else
= (char *)
949 xrealloc (conditionals
->seen_else
, conditionals
->allocated
);
952 /* Record that we have seen an `if...' but no `else' so far. */
953 conditionals
->seen_else
[conditionals
->if_cmds
- 1] = 0;
955 /* Search through the stack to see if we're already ignoring. */
956 for (i
= 0; i
< conditionals
->if_cmds
- 1; ++i
)
957 if (conditionals
->ignoring
[i
])
959 /* We are already ignoring, so just push a level
960 to match the next "else" or "endif", and keep ignoring.
961 We don't want to expand variables in the condition. */
962 conditionals
->ignoring
[conditionals
->if_cmds
- 1] = 1;
966 if (cmdname
[notdef
? 3 : 2] == 'd')
968 /* "Ifdef" or "ifndef". */
970 register char *p
= end_of_token (line
);
975 v
= lookup_variable (line
, i
);
976 conditionals
->ignoring
[conditionals
->if_cmds
- 1]
977 = (v
!= 0 && *v
->value
!= '\0') == notdef
;
981 /* "Ifeq" or "ifneq". */
984 char termin
= *line
== '(' ? ',' : *line
;
986 if (termin
!= ',' && termin
!= '"' && termin
!= '\'')
990 /* Find the end of the first string. */
993 register int count
= 0;
994 for (; *line
!= '\0'; ++line
)
997 else if (*line
== ')')
999 else if (*line
== ',' && count
<= 0)
1003 while (*line
!= '\0' && *line
!= termin
)
1011 s2
= variable_expand (s1
);
1012 /* We must allocate a new copy of the expanded string because
1013 variable_expand re-uses the same buffer. */
1015 s1
= (char *) alloca (len
+ 1);
1016 bcopy (s2
, s1
, len
+ 1);
1019 /* Find the start of the second string. */
1020 line
= next_token (line
);
1022 termin
= termin
== ',' ? ')' : *line
;
1023 if (termin
!= ')' && termin
!= '"' && termin
!= '\'')
1026 /* Find the end of the second string. */
1029 register int count
= 0;
1030 s2
= next_token (line
);
1031 for (line
= s2
; *line
!= '\0'; ++line
)
1035 else if (*line
== ')')
1046 while (*line
!= '\0' && *line
!= termin
)
1054 line
= next_token (++line
);
1056 makefile_error (filename
, lineno
,
1057 "Extraneous text after `%s' directive",
1060 s2
= variable_expand (s2
);
1061 conditionals
->ignoring
[conditionals
->if_cmds
- 1]
1062 = streq (s1
, s2
) == notdef
;
1065 /* Search through the stack to see if we're ignoring. */
1066 for (i
= 0; i
< conditionals
->if_cmds
; ++i
)
1067 if (conditionals
->ignoring
[i
])
1072 /* Remove duplicate dependencies in CHAIN. */
1075 uniquize_deps (chain
)
1078 register struct dep
*d
;
1080 /* Make sure that no dependencies are repeated. This does not
1081 really matter for the purpose of updating targets, but it
1082 might make some names be listed twice for $^ and $?. */
1084 for (d
= chain
; d
!= 0; d
= d
->next
)
1086 struct dep
*last
, *next
;
1091 if (streq (dep_name (d
), dep_name (next
)))
1093 struct dep
*n
= next
->next
;
1095 if (next
->name
!= 0 && next
->name
!= d
->name
)
1098 free ((char *) next
);
1109 /* Record a description line for files FILENAMES,
1110 with dependencies DEPS, commands to execute described
1111 by COMMANDS and COMMANDS_IDX, coming from FILENAME:COMMANDS_STARTED.
1112 TWO_COLON is nonzero if a double colon was used.
1113 If not nil, PATTERN is the `%' pattern to make this
1114 a static pattern rule, and PATTERN_PERCENT is a pointer
1115 to the `%' within it.
1117 The links of FILENAMES are freed, and so are any names in it
1118 that are not incorporated into other data structures. */
1121 record_files (filenames
, pattern
, pattern_percent
, deps
, commands_started
,
1122 commands
, commands_idx
, two_colon
, filename
, lineno
, set_default
)
1123 struct nameseq
*filenames
;
1124 char *pattern
, *pattern_percent
;
1126 unsigned int commands_started
;
1128 unsigned int commands_idx
;
1131 unsigned int lineno
;
1134 struct nameseq
*nextf
;
1136 unsigned int max_targets
, target_idx
;
1137 char **targets
= 0, **target_percents
= 0;
1138 struct commands
*cmds
;
1140 if (commands_idx
> 0)
1142 cmds
= (struct commands
*) xmalloc (sizeof (struct commands
));
1143 cmds
->filename
= filename
;
1144 cmds
->lineno
= commands_started
;
1145 cmds
->commands
= savestring (commands
, commands_idx
);
1146 cmds
->command_lines
= 0;
1151 for (; filenames
!= 0; filenames
= nextf
)
1153 register char *name
= filenames
->name
;
1154 register struct file
*f
;
1155 register struct dep
*d
;
1157 char *implicit_percent
;
1159 nextf
= filenames
->next
;
1160 free ((char *) filenames
);
1162 implicit_percent
= find_percent (name
);
1163 implicit
|= implicit_percent
!= 0;
1165 if (implicit
&& pattern
!= 0)
1166 makefile_fatal (filename
, lineno
,
1167 "mixed implicit and static pattern rules");
1169 if (implicit
&& implicit_percent
== 0)
1170 makefile_fatal (filename
, lineno
, "mixed implicit and normal rules");
1177 targets
= (char **) xmalloc (5 * sizeof (char *));
1178 target_percents
= (char **) xmalloc (5 * sizeof (char *));
1181 else if (target_idx
== max_targets
- 1)
1184 targets
= (char **) xrealloc ((char *) targets
,
1185 max_targets
* sizeof (char *));
1187 = (char **) xrealloc ((char *) target_percents
,
1188 max_targets
* sizeof (char *));
1190 targets
[target_idx
] = name
;
1191 target_percents
[target_idx
] = implicit_percent
;
1196 /* If there are multiple filenames, copy the chain DEPS
1197 for all but the last one. It is not safe for the same deps
1198 to go in more than one place in the data base. */
1199 this = nextf
!= 0 ? copy_dep_chain (deps
) : deps
;
1202 /* If this is an extended static rule:
1203 `targets: target%pattern: dep%pattern; cmds',
1204 translate each dependency pattern into a plain filename
1205 using the target pattern and this target's name. */
1206 if (!pattern_matches (pattern
, pattern_percent
, name
))
1208 /* Give a warning if the rule is meaningless. */
1209 makefile_error (filename
, lineno
,
1210 "target `%s' doesn't match the target pattern",
1216 /* We use patsubst_expand to do the work of translating
1217 the target pattern, the target's name and the dependencies'
1218 patterns into plain dependency names. */
1219 char *buffer
= variable_expand ("");
1221 for (d
= this; d
!= 0; d
= d
->next
)
1224 char *percent
= find_percent (d
->name
);
1227 o
= patsubst_expand (buffer
, name
, pattern
, d
->name
,
1228 pattern_percent
, percent
);
1230 d
->name
= savestring (buffer
, o
- buffer
);
1236 /* Single-colon. Combine these dependencies
1237 with others in file's existing record, if any. */
1238 f
= enter_file (name
);
1240 if (f
->double_colon
)
1241 makefile_fatal (filename
, lineno
,
1242 "target file `%s' has both : and :: entries",
1245 /* If CMDS == F->CMDS, this target was listed in this rule
1246 more than once. Just give a warning since this is harmless. */
1247 if (cmds
!= 0 && cmds
== f
->cmds
)
1250 "target `%s' given more than once in the same rule.",
1253 /* Check for two single-colon entries both with commands.
1254 Check is_target so that we don't lose on files such as .c.o
1255 whose commands were preinitialized. */
1256 else if (cmds
!= 0 && f
->cmds
!= 0 && f
->is_target
)
1258 makefile_error (cmds
->filename
, cmds
->lineno
,
1259 "warning: overriding commands for target `%s'",
1261 makefile_error (f
->cmds
->filename
, f
->cmds
->lineno
,
1262 "warning: ignoring old commands for target `%s'",
1268 /* Defining .DEFAULT with no deps or cmds clears it. */
1269 if (f
== default_file
&& this == 0 && cmds
== 0)
1273 /* Defining .SUFFIXES with no dependencies
1274 clears out the list of suffixes. */
1275 if (f
== suffix_file
&& this == 0)
1280 struct dep
*nextd
= d
->next
;
1287 else if (f
->deps
!= 0)
1289 /* Add the file's old deps and the new ones in THIS together. */
1291 struct dep
*firstdeps
, *moredeps
;
1294 /* This is the rule with commands, so put its deps first.
1295 The rationale behind this is that $< expands to the
1296 first dep in the chain, and commands use $< expecting
1297 to get the dep that rule specifies. */
1303 /* Append the new deps to the old ones. */
1304 firstdeps
= f
->deps
;
1309 firstdeps
= moredeps
;
1313 while (d
->next
!= 0)
1318 f
->deps
= firstdeps
;
1323 /* If this is a static pattern rule, set the file's stem to
1324 the part of its name that matched the `%' in the pattern,
1325 so you can use $* in the commands. */
1328 static char *percent
= "%";
1329 char *buffer
= variable_expand ("");
1330 char *o
= patsubst_expand (buffer
, name
, pattern
, percent
,
1331 pattern_percent
, percent
);
1332 f
->stem
= savestring (buffer
, o
- buffer
);
1337 /* Double-colon. Make a new record
1338 even if the file already has one. */
1339 f
= lookup_file (name
);
1340 /* Check for both : and :: rules. Check is_target so
1341 we don't lose on default suffix rules or makefiles. */
1342 if (f
!= 0 && f
->is_target
&& !f
->double_colon
)
1343 makefile_fatal (filename
, lineno
,
1344 "target file `%s' has both : and :: entries",
1346 f
= enter_file (name
);
1347 /* If there was an existing entry and it was a double-colon
1348 entry, enter_file will have returned a new one, making it the
1349 prev pointer of the old one, and setting its double_colon
1350 pointer to the first one. */
1351 if (f
->double_colon
== 0)
1352 /* This is the first entry for this name, so we must
1353 set its double_colon pointer to itself. */
1354 f
->double_colon
= f
;
1360 /* Free name if not needed further. */
1361 if (f
!= 0 && name
!= f
->name
1362 && (name
< f
->name
|| name
> f
->name
+ strlen (f
->name
)))
1368 /* See if this is first target seen whose name does
1369 not start with a `.', unless it contains a slash. */
1370 if (default_goal_file
== 0 && set_default
1371 && (*name
!= '.' || index (name
, '/') != 0))
1375 /* If this file is a suffix, don't
1376 let it be the default goal file. */
1378 for (d
= suffix_file
->deps
; d
!= 0; d
= d
->next
)
1380 register struct dep
*d2
;
1381 if (*dep_name (d
) != '.' && streq (name
, dep_name (d
)))
1386 for (d2
= suffix_file
->deps
; d2
!= 0; d2
= d2
->next
)
1388 register unsigned int len
= strlen (dep_name (d2
));
1389 if (strncmp (name
, dep_name (d2
), len
))
1391 if (streq (name
+ len
, dep_name (d
)))
1402 default_goal_file
= f
;
1408 targets
[target_idx
] = 0;
1409 target_percents
[target_idx
] = 0;
1410 create_pattern_rule (targets
, target_percents
, two_colon
, deps
, cmds
, 1);
1411 free ((char *) target_percents
);
1415 /* Search STRING for an unquoted STOPCHAR or blank (if BLANK is nonzero).
1416 Backslashes quote STOPCHAR, blanks if BLANK is nonzero, and backslash.
1417 Quoting backslashes are removed from STRING by compacting it into
1418 itself. Returns a pointer to the first unquoted STOPCHAR if there is
1419 one, or nil if there are none. */
1422 find_char_unquote (string
, stopchar
, blank
)
1427 unsigned int string_len
= strlen (string
);
1428 register char *p
= string
;
1434 while (*p
!= '\0' && *p
!= stopchar
&& !isblank (*p
))
1441 p
= index (p
, stopchar
);
1445 if (p
> string
&& p
[-1] == '\\')
1447 /* Search for more backslashes. */
1448 register int i
= -2;
1449 while (&p
[i
] >= string
&& p
[i
] == '\\')
1452 /* The number of backslashes is now -I.
1453 Copy P over itself to swallow half of them. */
1454 bcopy (&p
[i
/ 2], &p
[i
], (string_len
- (p
- string
)) - (i
/ 2) + 1);
1457 /* All the backslashes quoted each other; the STOPCHAR was
1461 /* The STOPCHAR was quoted by a backslash. Look for another. */
1464 /* No backslash in sight. */
1468 /* Never hit a STOPCHAR or blank (with BLANK nonzero). */
1472 /* Search PATTERN for an unquoted %. */
1475 find_percent (pattern
)
1478 return find_char_unquote (pattern
, '%', 0);
1481 /* Search STRING for an unquoted ; that is not after an unquoted #. */
1484 find_semicolon (string
)
1487 return (find_char_unquote (string
, '#', 0) == 0
1488 ? find_char_unquote (string
, ';', 0) : 0);
1491 /* Parse a string into a sequence of filenames represented as a
1492 chain of struct nameseq's in reverse order and return that chain.
1494 The string is passed as STRINGP, the address of a string pointer.
1495 The string pointer is updated to point at the first character
1496 not parsed, which either is a null char or equals STOPCHAR.
1498 SIZE is how big to construct chain elements.
1499 This is useful if we want them actually to be other structures
1500 that have room for additional info.
1502 If STRIP is nonzero, strip `./'s off the beginning. */
1505 parse_file_seq (stringp
, stopchar
, size
, strip
)
1511 register struct nameseq
*new = 0;
1512 register struct nameseq
*new1
, *lastnew1
;
1513 register char *p
= *stringp
;
1519 /* Skip whitespace; see if any more names are left. */
1525 /* Yes, find end of next name. */
1527 p
= find_char_unquote (q
, stopchar
, 1);
1532 /* Skip leading `./'s. */
1533 while (p
- q
> 2 && q
[0] == '.' && q
[1] == '/')
1535 q
+= 2; /* Skip "./". */
1536 while (q
< p
&& *q
== '/')
1537 /* Skip following slashes: ".//foo" is "foo", not "/foo". */
1541 /* Extract the filename just found, and skip it. */
1544 /* ".///" was stripped to "". */
1545 name
= savestring ("./", 2);
1547 name
= savestring (q
, p
- q
);
1549 /* Add it to the front of the chain. */
1550 new1
= (struct nameseq
*) xmalloc (size
);
1558 /* Look for multi-word archive references.
1559 They are indicated by a elt ending with an unmatched `)' and
1560 an elt further down the chain (i.e., previous in the file list)
1561 with an unmatched `(' (e.g., "lib(mem"). */
1563 for (new1
= new, lastnew1
= 0; new1
!= 0; lastnew1
= new1
, new1
= new1
->next
)
1564 if (new1
->name
[0] != '(' /* Don't catch "(%)" and suchlike. */
1565 && new1
->name
[strlen (new1
->name
) - 1] == ')'
1566 && index (new1
->name
, '(') == 0)
1568 /* NEW1 ends with a `)' but does not contain a `('.
1569 Look back for an elt with an opening `(' but no closing `)'. */
1571 struct nameseq
*n
= new1
->next
, *lastn
= new1
;
1573 while (n
!= 0 && (paren
= index (n
->name
, '(')) == 0)
1579 /* Ignore something starting with `(', as that cannot actually
1580 be an archive-member reference (and treating it as such
1581 results in an empty file name, which causes much lossage). */
1582 && n
->name
[0] != '(')
1584 /* N is the first element in the archive group.
1585 Its name looks like "lib(mem" (with no closing `)'). */
1589 /* Copy "lib(" into LIBNAME. */
1591 libname
= (char *) alloca (paren
- n
->name
+ 1);
1592 bcopy (n
->name
, libname
, paren
- n
->name
);
1593 libname
[paren
- n
->name
] = '\0';
1597 /* N was just "lib(", part of something like "lib( a b)".
1598 Edit it out of the chain and free its storage. */
1599 lastn
->next
= n
->next
;
1602 /* LASTN->next is the new stopping elt for the loop below. */
1607 /* Replace N's name with the full archive reference. */
1608 name
= concat (libname
, paren
, ")");
1613 if (new1
->name
[1] == '\0')
1615 /* NEW1 is just ")", part of something like "lib(a b )".
1616 Omit it from the chain and free its storage. */
1620 lastnew1
->next
= new1
->next
;
1624 free ((char *) lastn
);
1628 /* Replace also NEW1->name, which already has closing `)'. */
1629 name
= concat (libname
, new1
->name
, "");
1635 /* Trace back from NEW1 (the end of the list) until N
1636 (the beginning of the list), rewriting each name
1637 with the full archive reference. */
1641 name
= concat (libname
, new1
->name
, ")");
1648 /* We might have slurped up the whole list,
1649 and continuing the loop would dereference NEW1. */
1660 /* Read a line of text from STREAM into LINEBUFFER.
1661 Combine continuation lines into one line.
1662 Return the number of actual lines read (> 1 if hacked continuation lines).
1666 readline (linebuffer
, stream
, filename
, lineno
)
1667 struct linebuffer
*linebuffer
;
1670 unsigned int lineno
;
1672 char *buffer
= linebuffer
->buffer
;
1673 register char *p
= linebuffer
->buffer
;
1674 register char *end
= p
+ linebuffer
->size
;
1675 register int len
, lastlen
= 0;
1677 register unsigned int nlines
= 0;
1678 register int backslash
;
1682 while (fgets (p
, end
- p
, stream
) != 0)
1687 /* This only happens when the first thing on the line is a '\0'.
1688 It is a pretty hopeless case, but (wonder of wonders) Athena
1689 lossage strikes again! (xmkmf puts NULs in its makefiles.)
1690 There is nothing really to be done; we synthesize a newline so
1691 the following line doesn't appear to be part of this line. */
1692 makefile_error (filename
, lineno
,
1693 "warning: NUL character seen; rest of line ignored");
1701 /* Probably ran out of buffer space. */
1702 register unsigned int p_off
= p
- buffer
;
1703 linebuffer
->size
*= 2;
1704 buffer
= (char *) xrealloc (buffer
, linebuffer
->size
);
1706 end
= buffer
+ linebuffer
->size
;
1707 linebuffer
->buffer
= buffer
;
1715 if (len
== 1 && p
> buffer
)
1716 /* P is pointing at a newline and it's the beginning of
1717 the buffer returned by the last fgets call. However,
1718 it is not necessarily the beginning of a line if P is
1719 pointing past the beginning of the holding buffer.
1720 If the buffer was just enlarged (right before the newline),
1721 we must account for that, so we pretend that the two lines
1726 for (p2
= p
- 2; --len
> 0; --p2
)
1729 backslash
= !backslash
;
1742 /* Enlarge the buffer. */
1743 register unsigned int p_off
= p
- buffer
;
1744 linebuffer
->size
*= 2;
1745 buffer
= (char *) xrealloc (buffer
, linebuffer
->size
);
1747 end
= buffer
+ linebuffer
->size
;
1748 linebuffer
->buffer
= buffer
;
1752 if (ferror (stream
))
1753 pfatal_with_name (filename
);
1758 /* Construct the list of include directories
1759 from the arguments and the default list. */
1762 construct_include_path (arg_dirs
)
1765 register unsigned int i
;
1768 /* Table to hold the dirs. */
1770 register unsigned int defsize
= (sizeof (default_include_directories
)
1771 / sizeof (default_include_directories
[0]));
1772 register unsigned int max
= 5;
1773 register char **dirs
= (char **) xmalloc ((5 + defsize
) * sizeof (char *));
1774 register unsigned int idx
= 0;
1776 /* First consider any dirs specified with -I switches.
1777 Ignore dirs that don't exist. */
1780 while (*arg_dirs
!= 0)
1782 char *dir
= *arg_dirs
++;
1786 char *expanded
= tilde_expand (dir
);
1791 if (stat (dir
, &stbuf
) == 0 && S_ISDIR (stbuf
.st_mode
))
1797 xrealloc ((char *) dirs
, (max
+ defsize
) * sizeof (char *));
1801 else if (dir
!= arg_dirs
[-1])
1805 /* Now add at the end the standard default dirs. */
1807 for (i
= 0; default_include_directories
[i
] != 0; ++i
)
1808 if (stat (default_include_directories
[i
], &stbuf
) == 0
1809 && S_ISDIR (stbuf
.st_mode
))
1810 dirs
[idx
++] = default_include_directories
[i
];
1814 /* Now compute the maximum length of any name in it. */
1817 for (i
= 0; i
< idx
; ++i
)
1819 unsigned int len
= strlen (dirs
[i
]);
1820 /* If dir name is written with a trailing slash, discard it. */
1821 if (dirs
[i
][len
- 1] == '/')
1822 /* We can't just clobber a null in because it may have come from
1823 a literal string and literal strings may not be writable. */
1824 dirs
[i
] = savestring (dirs
[i
], len
- 1);
1825 if (len
> max_incl_len
)
1829 include_directories
= dirs
;
1832 /* Expand ~ or ~USER at the beginning of NAME.
1833 Return a newly malloc'd string or 0. */
1839 if (name
[1] == '/' || name
[1] == '\0')
1841 extern char *getenv ();
1846 /* Turn off --warn-undefined-variables while we expand HOME. */
1847 int save
= warn_undefined_variables_flag
;
1848 warn_undefined_variables_flag
= 0;
1850 home_dir
= allocated_variable_expand ("$(HOME)");
1852 warn_undefined_variables_flag
= save
;
1855 is_variable
= home_dir
[0] != '\0';
1859 home_dir
= getenv ("HOME");
1861 if (home_dir
== 0 || home_dir
[0] == '\0')
1863 extern char *getlogin ();
1864 char *name
= getlogin ();
1868 struct passwd
*p
= getpwnam (name
);
1870 home_dir
= p
->pw_dir
;
1875 char *new = concat (home_dir
, "", name
+ 1);
1883 struct passwd
*pwent
;
1884 char *userend
= index (name
+ 1, '/');
1887 pwent
= getpwnam (name
+ 1);
1891 return savestring (pwent
->pw_dir
, strlen (pwent
->pw_dir
));
1893 return concat (pwent
->pw_dir
, "/", userend
+ 1);
1895 else if (userend
!= 0)
1902 /* Given a chain of struct nameseq's describing a sequence of filenames,
1903 in reverse of the intended order, return a new chain describing the
1904 result of globbing the filenames. The new chain is in forward order.
1905 The links of the old chain are freed or used in the new chain.
1906 Likewise for the names in the old chain.
1908 SIZE is how big to construct chain elements.
1909 This is useful if we want them actually to be other structures
1910 that have room for additional info. */
1913 multi_glob (chain
, size
)
1914 struct nameseq
*chain
;
1917 register struct nameseq
*new = 0;
1918 register struct nameseq
*old
;
1919 struct nameseq
*nexto
;
1921 for (old
= chain
; old
!= 0; old
= nexto
)
1930 if (old
->name
[0] == '~')
1932 char *newname
= tilde_expand (old
->name
);
1936 old
->name
= newname
;
1941 if (ar_name (old
->name
))
1943 /* OLD->name is an archive member reference.
1944 Replace it with the archive file name,
1945 and save the member name in MEMNAME.
1946 We will glob on the archive name and then
1947 reattach MEMNAME later. */
1949 ar_parse_name (old
->name
, &arname
, &memname
);
1957 switch (glob (old
->name
, GLOB_NOCHECK
, NULL
, &gl
))
1959 case 0: /* Success. */
1961 register int i
= gl
.gl_pathc
;
1967 /* Try to glob on MEMNAME within the archive. */
1968 struct nameseq
*found
1969 = ar_glob (gl
.gl_pathv
[i
], memname
, size
);
1972 /* No matches. Use MEMNAME as-is. */
1974 = (struct nameseq
*) xmalloc (size
);
1975 unsigned int alen
= strlen (gl
.gl_pathv
[i
]);
1976 unsigned int mlen
= strlen (memname
);
1977 elt
->name
= (char *) xmalloc (alen
+ 1 + mlen
+ 2);
1978 bcopy (gl
.gl_pathv
[i
], elt
->name
, alen
);
1979 elt
->name
[alen
] = '(';
1980 bcopy (memname
, &elt
->name
[alen
+ 1], mlen
);
1981 elt
->name
[alen
+ 1 + mlen
] = ')';
1982 elt
->name
[alen
+ 1 + mlen
+ 1] = '\0';
1988 /* Find the end of the FOUND chain. */
1989 struct nameseq
*f
= found
;
1990 while (f
->next
!= 0)
1993 /* Attach the chain being built to the end of the FOUND
1994 chain, and make FOUND the new NEW chain. */
2004 struct nameseq
*elt
= (struct nameseq
*) xmalloc (size
);
2005 elt
->name
= savestring (gl
.gl_pathv
[i
],
2006 strlen (gl
.gl_pathv
[i
]));
2018 fatal ("virtual memory exhausted");