1 /* Pattern and suffix rule internals for GNU Make.
2 Copyright (C) 1988,89,90,91,92,93, 1998 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, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. */
28 static void freerule
PARAMS ((struct rule
*rule
, struct rule
*lastrule
));
30 /* Chain of all pattern rules. */
32 struct rule
*pattern_rules
;
34 /* Pointer to last rule in the chain, so we can add onto the end. */
36 struct rule
*last_pattern_rule
;
38 /* Number of rules in the chain. */
40 unsigned int num_pattern_rules
;
42 /* Maximum number of target patterns of any pattern rule. */
44 unsigned int max_pattern_targets
;
46 /* Maximum number of dependencies of any pattern rule. */
48 unsigned int max_pattern_deps
;
50 /* Maximum length of the name of a dependencies of any pattern rule. */
52 unsigned int max_pattern_dep_length
;
54 /* Chain of all pattern-specific variables. */
56 static struct pattern_var
*pattern_vars
;
58 /* Pointer to last struct in the chain, so we can add onto the end. */
60 static struct pattern_var
*last_pattern_var
;
62 /* Pointer to structure for the file .SUFFIXES
63 whose dependencies are the suffixes to be searched. */
65 struct file
*suffix_file
;
67 /* Maximum length of a suffix. */
69 unsigned int maxsuffix
;
71 /* Compute the maximum dependency length and maximum number of
72 dependencies of all implicit rules. Also sets the subdir
73 flag for a rule when appropriate, possibly removing the rule
74 completely when appropriate. */
77 count_implicit_rule_limits ()
81 register struct rule
*rule
, *lastrule
;
83 num_pattern_rules
= max_pattern_targets
= max_pattern_deps
= 0;
84 max_pattern_dep_length
= 0;
92 unsigned int ndeps
= 0;
93 register struct dep
*dep
;
94 struct rule
*next
= rule
->next
;
95 unsigned int ntargets
;
100 while (rule
->targets
[ntargets
] != 0)
103 if (ntargets
> max_pattern_targets
)
104 max_pattern_targets
= ntargets
;
106 for (dep
= rule
->deps
; dep
!= 0; dep
= dep
->next
)
108 unsigned int len
= strlen (dep
->name
);
111 char *p
= strrchr (dep
->name
, ']');
114 p
= strrchr (dep
->name
, ':');
115 p2
= p
!= 0 ? strchr (dep
->name
, '%') : 0;
117 char *p
= strrchr (dep
->name
, '/');
118 char *p2
= p
!= 0 ? strchr (dep
->name
, '%') : 0;
122 if (len
> max_pattern_dep_length
)
123 max_pattern_dep_length
= len
;
125 if (p
!= 0 && p2
> p
)
127 /* There is a slash before the % in the dep name.
128 Extract the directory name. */
131 if (p
- dep
->name
> namelen
)
135 namelen
= p
- dep
->name
;
136 name
= (char *) xmalloc (namelen
+ 1);
138 bcopy (dep
->name
, name
, p
- dep
->name
);
139 name
[p
- dep
->name
] = '\0';
141 /* In the deps of an implicit rule the `changed' flag
142 actually indicates that the dependency is in a
143 nonexistent subdirectory. */
145 dep
->changed
= !dir_file_exists_p (name
, "");
147 if (dep
->changed
&& strchr (name
, ':') != 0)
149 if (dep
->changed
&& *name
== '/')
152 /* The name is absolute and the directory does not exist.
153 This rule can never possibly match, since this dependency
154 can never possibly exist. So just remove the rule from
156 freerule (rule
, lastrule
);
162 /* This dependency does not reside in a subdirectory. */
166 if (ndeps
> max_pattern_deps
)
167 max_pattern_deps
= ndeps
;
178 /* Create a pattern rule from a suffix rule.
179 TARGET is the target suffix; SOURCE is the source suffix.
180 CMDS are the commands.
181 If TARGET is nil, it means the target pattern should be `(%.o)'.
182 If SOURCE is nil, it means there should be no deps. */
185 convert_suffix_rule (target
, source
, cmds
)
186 char *target
, *source
;
187 struct commands
*cmds
;
189 char *targname
, *targpercent
, *depname
;
190 char **names
, **percents
;
195 /* Special case: TARGET being nil means we are defining a
196 `.X.a' suffix rule; the target pattern is always `(%.o)'. */
199 targname
= savestring ("(%.obj)", 7);
201 targname
= savestring ("(%.o)", 5);
203 targpercent
= targname
+ 1;
207 /* Construct the target name. */
208 len
= strlen (target
);
209 targname
= xmalloc (1 + len
+ 1);
211 bcopy (target
, targname
+ 1, len
+ 1);
212 targpercent
= targname
;
215 names
= (char **) xmalloc (2 * sizeof (char *));
216 percents
= (char **) alloca (2 * sizeof (char *));
218 percents
[0] = targpercent
;
219 names
[1] = percents
[1] = 0;
225 /* Construct the dependency name. */
226 len
= strlen (source
);
227 depname
= xmalloc (1 + len
+ 1);
229 bcopy (source
, depname
+ 1, len
+ 1);
230 deps
= (struct dep
*) xmalloc (sizeof (struct dep
));
232 deps
->name
= depname
;
235 create_pattern_rule (names
, percents
, 0, deps
, cmds
, 0);
238 /* Convert old-style suffix rules to pattern rules.
239 All rules for the suffixes on the .SUFFIXES list
240 are converted and added to the chain of pattern rules. */
243 convert_to_pattern ()
245 register struct dep
*d
, *d2
;
246 register struct file
*f
;
247 register char *rulename
;
248 register unsigned int slen
, s2len
;
250 /* Compute maximum length of all the suffixes. */
253 for (d
= suffix_file
->deps
; d
!= 0; d
= d
->next
)
255 register unsigned int namelen
= strlen (dep_name (d
));
256 if (namelen
> maxsuffix
)
260 rulename
= (char *) alloca ((maxsuffix
* 2) + 1);
262 for (d
= suffix_file
->deps
; d
!= 0; d
= d
->next
)
264 /* Make a rule that is just the suffix, with no deps or commands.
265 This rule exists solely to disqualify match-anything rules. */
266 convert_suffix_rule (dep_name (d
), (char *) 0, (struct commands
*) 0);
270 /* Record a pattern for this suffix's null-suffix rule. */
271 convert_suffix_rule ("", dep_name (d
), f
->cmds
);
273 /* Record a pattern for each of this suffix's two-suffix rules. */
274 slen
= strlen (dep_name (d
));
275 bcopy (dep_name (d
), rulename
, slen
);
276 for (d2
= suffix_file
->deps
; d2
!= 0; d2
= d2
->next
)
278 s2len
= strlen (dep_name (d2
));
280 if (slen
== s2len
&& streq (dep_name (d
), dep_name (d2
)))
283 bcopy (dep_name (d2
), rulename
+ slen
, s2len
+ 1);
284 f
= lookup_file (rulename
);
285 if (f
== 0 || f
->cmds
== 0)
288 if (s2len
== 2 && rulename
[slen
] == '.' && rulename
[slen
+ 1] == 'a')
289 /* A suffix rule `.X.a:' generates the pattern rule `(%.o): %.X'.
290 It also generates a normal `%.a: %.X' rule below. */
291 convert_suffix_rule ((char *) 0, /* Indicates `(%.o)'. */
295 /* The suffix rule `.X.Y:' is converted
296 to the pattern rule `%.Y: %.X'. */
297 convert_suffix_rule (dep_name (d2
), dep_name (d
), f
->cmds
);
303 /* Install the pattern rule RULE (whose fields have been filled in)
304 at the end of the list (so that any rules previously defined
305 will take precedence). If this rule duplicates a previous one
306 (identical target and dependencies), the old one is replaced
307 if OVERRIDE is nonzero, otherwise this new one is thrown out.
308 When an old rule is replaced, the new one is put at the end of the
309 list. Return nonzero if RULE is used; zero if not. */
312 new_pattern_rule (rule
, override
)
313 register struct rule
*rule
;
316 register struct rule
*r
, *lastrule
;
317 register unsigned int i
, j
;
324 /* Search for an identical rule. */
326 for (r
= pattern_rules
; r
!= 0; lastrule
= r
, r
= r
->next
)
327 for (i
= 0; rule
->targets
[i
] != 0; ++i
)
329 for (j
= 0; r
->targets
[j
] != 0; ++j
)
330 if (!streq (rule
->targets
[i
], r
->targets
[j
]))
332 if (r
->targets
[j
] == 0)
333 /* All the targets matched. */
335 register struct dep
*d
, *d2
;
336 for (d
= rule
->deps
, d2
= r
->deps
;
337 d
!= 0 && d2
!= 0; d
= d
->next
, d2
= d2
->next
)
338 if (!streq (dep_name (d
), dep_name (d2
)))
340 if (d
== 0 && d2
== 0)
342 /* All the dependencies matched. */
345 /* Remove the old rule. */
346 freerule (r
, lastrule
);
347 /* Install the new one. */
348 if (pattern_rules
== 0)
349 pattern_rules
= rule
;
351 last_pattern_rule
->next
= rule
;
352 last_pattern_rule
= rule
;
354 /* We got one. Stop looking. */
359 /* The old rule stays intact. Destroy the new one. */
360 freerule (rule
, (struct rule
*) 0);
371 /* There was no rule to replace. */
372 if (pattern_rules
== 0)
373 pattern_rules
= rule
;
375 last_pattern_rule
->next
= rule
;
376 last_pattern_rule
= rule
;
383 /* Install an implicit pattern rule based on the three text strings
384 in the structure P points to. These strings come from one of
385 the arrays of default implicit pattern rules.
386 TERMINAL specifies what the `terminal' field of the rule should be. */
389 install_pattern_rule (p
, terminal
)
393 register struct rule
*r
;
396 r
= (struct rule
*) xmalloc (sizeof (struct rule
));
398 r
->targets
= (char **) xmalloc (2 * sizeof (char *));
399 r
->suffixes
= (char **) xmalloc (2 * sizeof (char *));
400 r
->lens
= (unsigned int *) xmalloc (2 * sizeof (unsigned int));
406 r
->lens
[0] = strlen (p
->target
);
407 /* These will all be string literals, but we malloc space for
408 them anyway because somebody might want to free them later on. */
409 r
->targets
[0] = savestring (p
->target
, r
->lens
[0]);
410 r
->suffixes
[0] = find_percent (r
->targets
[0]);
411 if (r
->suffixes
[0] == 0)
412 /* Programmer-out-to-lunch error. */
418 r
->deps
= (struct dep
*) multi_glob (parse_file_seq (&ptr
, '\0',
419 sizeof (struct dep
), 1),
420 sizeof (struct dep
));
422 if (new_pattern_rule (r
, 0))
424 r
->terminal
= terminal
;
425 r
->cmds
= (struct commands
*) xmalloc (sizeof (struct commands
));
426 r
->cmds
->fileinfo
.filenm
= 0;
427 r
->cmds
->fileinfo
.lineno
= 0;
428 /* These will all be string literals, but we malloc space for them
429 anyway because somebody might want to free them later. */
430 r
->cmds
->commands
= xstrdup (p
->commands
);
431 r
->cmds
->command_lines
= 0;
436 /* Free all the storage used in RULE and take it out of the
437 pattern_rules chain. LASTRULE is the rule whose next pointer
441 freerule (rule
, lastrule
)
442 register struct rule
*rule
, *lastrule
;
444 struct rule
*next
= rule
->next
;
445 register unsigned int i
;
446 register struct dep
*dep
;
448 for (i
= 0; rule
->targets
[i
] != 0; ++i
)
449 free (rule
->targets
[i
]);
457 /* We might leak dep->name here, but I'm not sure how to fix this: I
458 think that pointer might be shared (e.g., in the file hash?) */
463 free ((char *) rule
->targets
);
464 free ((char *) rule
->suffixes
);
465 free ((char *) rule
->lens
);
467 /* We can't free the storage for the commands because there
468 are ways that they could be in more than one place:
469 * If the commands came from a suffix rule, they could also be in
470 the `struct file's for other suffix rules or plain targets given
471 on the same makefile line.
472 * If two suffixes that together make a two-suffix rule were each
473 given twice in the .SUFFIXES list, and in the proper order, two
474 identical pattern rules would be created and the second one would
475 be discarded here, but both would contain the same `struct commands'
476 pointer from the `struct file' for the suffix rule. */
478 free ((char *) rule
);
480 if (pattern_rules
== rule
)
484 pattern_rules
= next
;
485 else if (lastrule
!= 0)
486 lastrule
->next
= next
;
487 if (last_pattern_rule
== rule
)
488 last_pattern_rule
= lastrule
;
491 /* Create a new pattern rule with the targets in the nil-terminated
492 array TARGETS. If TARGET_PERCENTS is not nil, it is an array of
493 pointers into the elements of TARGETS, where the `%'s are.
494 The new rule has dependencies DEPS and commands from COMMANDS.
495 It is a terminal rule if TERMINAL is nonzero. This rule overrides
496 identical rules with different commands if OVERRIDE is nonzero.
498 The storage for TARGETS and its elements is used and must not be freed
499 until the rule is destroyed. The storage for TARGET_PERCENTS is not used;
503 create_pattern_rule (targets
, target_percents
,
504 terminal
, deps
, commands
, override
)
505 char **targets
, **target_percents
;
508 struct commands
*commands
;
511 register struct rule
*r
= (struct rule
*) xmalloc (sizeof (struct rule
));
512 register unsigned int max_targets
, i
;
516 r
->targets
= targets
;
519 r
->lens
= (unsigned int *) xmalloc (2 * sizeof (unsigned int));
520 r
->suffixes
= (char **) xmalloc (2 * sizeof (char *));
521 for (i
= 0; targets
[i
] != 0; ++i
)
523 if (i
== max_targets
- 1)
526 r
->lens
= (unsigned int *)
527 xrealloc ((char *) r
->lens
, max_targets
* sizeof (unsigned int));
528 r
->suffixes
= (char **)
529 xrealloc ((char *) r
->suffixes
, max_targets
* sizeof (char *));
531 r
->lens
[i
] = strlen (targets
[i
]);
532 r
->suffixes
[i
] = (target_percents
== 0 ? find_percent (targets
[i
])
533 : target_percents
[i
]) + 1;
534 if (r
->suffixes
[i
] == 0)
538 if (i
< max_targets
- 1)
540 r
->lens
= (unsigned int *) xrealloc ((char *) r
->lens
,
541 (i
+ 1) * sizeof (unsigned int));
542 r
->suffixes
= (char **) xrealloc ((char *) r
->suffixes
,
543 (i
+ 1) * sizeof (char *));
546 if (new_pattern_rule (r
, override
))
547 r
->terminal
= terminal
;
550 /* Create a new pattern-specific variable struct. */
553 create_pattern_var (target
, suffix
)
554 char *target
, *suffix
;
556 register struct pattern_var
*p
= 0;
557 unsigned int len
= strlen(target
);
559 /* Look to see if this pattern already exists in the list. */
560 for (p
= pattern_vars
; p
!= NULL
; p
= p
->next
)
561 if (p
->len
== len
&& !strcmp(p
->target
, target
))
566 p
= (struct pattern_var
*) xmalloc (sizeof (struct pattern_var
));
567 if (last_pattern_var
!= 0)
568 last_pattern_var
->next
= p
;
571 last_pattern_var
= p
;
575 p
->suffix
= suffix
+ 1;
576 p
->vars
= create_new_variable_set();
582 /* Look up a target in the pattern-specific variable list. */
585 lookup_pattern_var (target
)
588 struct pattern_var
*p
;
589 unsigned int targlen
= strlen(target
);
591 for (p
= pattern_vars
; p
!= 0; p
= p
->next
)
594 unsigned int stemlen
;
596 if (p
->len
> targlen
)
597 /* It can't possibly match. */
600 /* From the lengths of the filename and the pattern parts,
601 find the stem: the part of the filename that matches the %. */
602 stem
= target
+ (p
->suffix
- p
->target
- 1);
603 stemlen
= targlen
- p
->len
+ 1;
605 /* Compare the text in the pattern before the stem, if any. */
606 if (stem
> target
&& !strneq (p
->target
, target
, stem
- target
))
609 /* Compare the text in the pattern after the stem, if any.
610 We could test simply using streq, but this way we compare the
611 first two characters immediately. This saves time in the very
612 common case where the first character matches because it is a
614 if (*p
->suffix
== stem
[stemlen
]
615 && (*p
->suffix
== '\0' || streq (&p
->suffix
[1], &stem
[stemlen
+1])))
622 /* Print the data base of rules. */
624 static void /* Useful to call from gdb. */
628 register unsigned int i
;
629 register struct dep
*d
;
631 for (i
= 0; r
->targets
[i
] != 0; ++i
)
633 fputs (r
->targets
[i
], stdout
);
634 if (r
->targets
[i
+ 1] != 0)
642 for (d
= r
->deps
; d
!= 0; d
= d
->next
)
643 printf (" %s", dep_name (d
));
647 print_commands (r
->cmds
);
651 print_rule_data_base ()
653 register unsigned int rules
, terminal
;
654 register struct rule
*r
;
656 puts ("\n# Implicit Rules");
658 rules
= terminal
= 0;
659 for (r
= pattern_rules
; r
!= 0; r
= r
->next
)
671 puts (_("\n# No implicit rules."));
674 printf (_("\n# %u implicit rules, %u"), rules
, terminal
);
676 printf (" (%.1f%%)", (double) terminal
/ (double) rules
* 100.0);
679 int f
= (terminal
* 1000 + 5) / rules
;
680 printf (" (%d.%d%%)", f
/10, f
%10);
683 puts (_(" terminal."));
686 if (num_pattern_rules
!= rules
)
688 /* This can happen if a fatal error was detected while reading the
689 makefiles and thus count_implicit_rule_limits wasn't called yet. */
690 if (num_pattern_rules
!= 0)
691 fatal (NILF
, _("BUG: num_pattern_rules wrong! %u != %u"),
692 num_pattern_rules
, rules
);
695 puts (_("\n# Pattern-specific variable values"));
698 struct pattern_var
*p
;
701 for (p
= pattern_vars
; p
!= 0; p
= p
->next
)
705 printf ("\n%s :\n", p
->target
);
706 print_variable_set (p
->vars
->set
, "# ");
710 puts (_("\n# No pattern-specific variable values."));
713 printf (_("\n# %u pattern-specific variable values"), rules
);