VirtualBox

source: kBuild/trunk/src/kmk/remake.c@ 2665

Last change on this file since 2665 was 2591, checked in by bird, 13 years ago

kmk: Merged in changes from GNU make 3.82. Previous GNU make base version was gnumake-2008-10-28-CVS.

  • Property svn:eol-style set to native
File size: 61.2 KB
Line 
1/* Basic dependency engine for GNU Make.
2Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
31998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
42010 Free Software Foundation, 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 3 of the License, or (at your option) any later
10version.
11
12GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14A PARTICULAR PURPOSE. See the GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License along with
17this program. If not, see <http://www.gnu.org/licenses/>. */
18
19#include "make.h"
20#include "filedef.h"
21#include "job.h"
22#include "commands.h"
23#include "dep.h"
24#include "variable.h"
25#include "debug.h"
26
27#include <assert.h>
28
29#ifdef HAVE_FCNTL_H
30#include <fcntl.h>
31#else
32#include <sys/file.h>
33#endif
34
35#ifdef VMS
36#include <starlet.h>
37#endif
38#ifdef WINDOWS32
39#include <io.h>
40#endif
41
42extern int try_implicit_rule (struct file *file, unsigned int depth);
43
44
45/* The test for circular dependencies is based on the 'updating' bit in
46 `struct file'. However, double colon targets have seperate `struct
47 file's; make sure we always use the base of the double colon chain. */
48
49#define start_updating(_f) (((_f)->double_colon ? (_f)->double_colon : (_f))\
50 ->updating = 1)
51#define finish_updating(_f) (((_f)->double_colon ? (_f)->double_colon : (_f))\
52 ->updating = 0)
53#define is_updating(_f) (((_f)->double_colon ? (_f)->double_colon : (_f))\
54 ->updating)
55
56
57/* Incremented when a command is started (under -n, when one would be). */
58unsigned int commands_started = 0;
59
60/* Current value for pruning the scan of the goal chain (toggle 0/1). */
61static unsigned int considered;
62
63static int update_file (struct file *file, unsigned int depth);
64static int update_file_1 (struct file *file, unsigned int depth);
65static int check_dep (struct file *file, unsigned int depth,
66 FILE_TIMESTAMP this_mtime, int *must_make_ptr);
67#ifdef CONFIG_WITH_DOT_MUST_MAKE
68static int call_must_make_target_var (struct file *file, unsigned int depth);
69#endif
70#ifdef CONFIG_WITH_DOT_IS_CHANGED
71static int call_is_changed_target_var (struct file *file);
72#endif
73static int touch_file (struct file *file);
74static void remake_file (struct file *file);
75static FILE_TIMESTAMP name_mtime (const char *name);
76static const char *library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr);
77
78
79
80/* Remake all the goals in the `struct dep' chain GOALS. Return -1 if nothing
81 was done, 0 if all goals were updated successfully, or 1 if a goal failed.
82
83 If rebuilding_makefiles is nonzero, these goals are makefiles, so -t, -q,
84 and -n should be disabled for them unless they were also command-line
85 targets, and we should only make one goal at a time and return as soon as
86 one goal whose `changed' member is nonzero is successfully made. */
87
88int
89update_goal_chain (struct dep *goals)
90{
91 int t = touch_flag, q = question_flag, n = just_print_flag;
92 int status = -1;
93
94#define MTIME(file) (rebuilding_makefiles ? file_mtime_no_search (file) \
95 : file_mtime (file))
96
97 /* Duplicate the chain so we can remove things from it. */
98
99 goals = copy_dep_chain (goals);
100
101 {
102 /* Clear the `changed' flag of each goal in the chain.
103 We will use the flag below to notice when any commands
104 have actually been run for a target. When no commands
105 have been run, we give an "up to date" diagnostic. */
106
107 struct dep *g;
108 for (g = goals; g != 0; g = g->next)
109 g->changed = 0;
110 }
111
112 /* All files start with the considered bit 0, so the global value is 1. */
113 considered = 1;
114
115 /* Update all the goals until they are all finished. */
116
117 while (goals != 0)
118 {
119 register struct dep *g, *lastgoal;
120
121 /* Start jobs that are waiting for the load to go down. */
122
123 start_waiting_jobs ();
124
125 /* Wait for a child to die. */
126
127 reap_children (1, 0);
128
129 lastgoal = 0;
130 g = goals;
131 while (g != 0)
132 {
133 /* Iterate over all double-colon entries for this file. */
134 struct file *file;
135 int stop = 0, any_not_updated = 0;
136
137 for (file = g->file->double_colon ? g->file->double_colon : g->file;
138 file != NULL;
139 file = file->prev)
140 {
141 unsigned int ocommands_started;
142 int x;
143
144 file->dontcare = g->dontcare;
145
146 check_renamed (file);
147 if (rebuilding_makefiles)
148 {
149 if (file->cmd_target)
150 {
151 touch_flag = t;
152 question_flag = q;
153 just_print_flag = n;
154 }
155 else
156 touch_flag = question_flag = just_print_flag = 0;
157 }
158
159 /* Save the old value of `commands_started' so we can compare
160 later. It will be incremented when any commands are
161 actually run. */
162 ocommands_started = commands_started;
163
164 x = update_file (file, rebuilding_makefiles ? 1 : 0);
165 check_renamed (file);
166
167 /* Set the goal's `changed' flag if any commands were started
168 by calling update_file above. We check this flag below to
169 decide when to give an "up to date" diagnostic. */
170 if (commands_started > ocommands_started)
171 g->changed = 1;
172
173 /* If we updated a file and STATUS was not already 1, set it to
174 1 if updating failed, or to 0 if updating succeeded. Leave
175 STATUS as it is if no updating was done. */
176
177 stop = 0;
178 if ((x != 0 || file->updated) && status < 1)
179 {
180 if (file->update_status != 0)
181 {
182 /* Updating failed, or -q triggered. The STATUS value
183 tells our caller which. */
184 status = file->update_status;
185 /* If -q just triggered, stop immediately. It doesn't
186 matter how much more we run, since we already know
187 the answer to return. */
188 stop = (question_flag && !keep_going_flag
189 && !rebuilding_makefiles);
190 }
191 else
192 {
193 FILE_TIMESTAMP mtime = MTIME (file);
194 check_renamed (file);
195
196 if (file->updated && g->changed &&
197 mtime != file->mtime_before_update)
198 {
199 /* Updating was done. If this is a makefile and
200 just_print_flag or question_flag is set (meaning
201 -n or -q was given and this file was specified
202 as a command-line target), don't change STATUS.
203 If STATUS is changed, we will get re-exec'd, and
204 enter an infinite loop. */
205 if (!rebuilding_makefiles
206 || (!just_print_flag && !question_flag))
207 status = 0;
208 if (rebuilding_makefiles && file->dontcare)
209 /* This is a default makefile; stop remaking. */
210 stop = 1;
211 }
212 }
213 }
214
215 /* Keep track if any double-colon entry is not finished.
216 When they are all finished, the goal is finished. */
217 any_not_updated |= !file->updated;
218
219 file->dontcare = 0;
220
221 if (stop)
222 break;
223 }
224
225 /* Reset FILE since it is null at the end of the loop. */
226 file = g->file;
227
228 if (stop || !any_not_updated)
229 {
230 /* If we have found nothing whatever to do for the goal,
231 print a message saying nothing needs doing. */
232
233 if (!rebuilding_makefiles
234 /* If the update_status is zero, we updated successfully
235 or not at all. G->changed will have been set above if
236 any commands were actually started for this goal. */
237 && file->update_status == 0 && !g->changed
238 /* Never give a message under -s or -q. */
239 && !silent_flag && !question_flag)
240 message (1, ((file->phony || file->cmds == 0)
241 ? _("Nothing to be done for `%s'.")
242 : _("`%s' is up to date.")),
243 file->name);
244
245 /* This goal is finished. Remove it from the chain. */
246 if (lastgoal == 0)
247 goals = g->next;
248 else
249 lastgoal->next = g->next;
250
251 /* Free the storage. */
252#ifndef CONFIG_WITH_ALLOC_CACHES
253 free (g);
254#else
255 free_dep (g);
256#endif
257
258 g = lastgoal == 0 ? goals : lastgoal->next;
259
260 if (stop)
261 break;
262 }
263 else
264 {
265 lastgoal = g;
266 g = g->next;
267 }
268 }
269
270 /* If we reached the end of the dependency graph toggle the considered
271 flag for the next pass. */
272 if (g == 0)
273 considered = !considered;
274 }
275
276 if (rebuilding_makefiles)
277 {
278 touch_flag = t;
279 question_flag = q;
280 just_print_flag = n;
281 }
282
283 return status;
284}
285
286
287/* If FILE is not up to date, execute the commands for it.
288 Return 0 if successful, 1 if unsuccessful;
289 but with some flag settings, just call `exit' if unsuccessful.
290
291 DEPTH is the depth in recursions of this function.
292 We increment it during the consideration of our dependencies,
293 then decrement it again after finding out whether this file
294 is out of date.
295
296 If there are multiple double-colon entries for FILE,
297 each is considered in turn. */
298
299static int
300update_file (struct file *file, unsigned int depth)
301{
302 register int status = 0;
303 register struct file *f;
304
305 f = file->double_colon ? file->double_colon : file;
306
307 /* Prune the dependency graph: if we've already been here on _this_
308 pass through the dependency graph, we don't have to go any further.
309 We won't reap_children until we start the next pass, so no state
310 change is possible below here until then. */
311 if (f->considered == considered)
312 {
313 /* Check for the case where a target has been tried and failed but
314 the diagnostics hasn't been issued. If we need the diagnostics
315 then we will have to continue. */
316 if (!(f->updated && f->update_status > 0 && !f->dontcare && f->no_diag))
317 {
318 DBF (DB_VERBOSE, _("Pruning file `%s'.\n"));
319 return f->command_state == cs_finished ? f->update_status : 0;
320 }
321 }
322
323 /* This loop runs until we start commands for a double colon rule, or until
324 the chain is exhausted. */
325 for (; f != 0; f = f->prev)
326 {
327 f->considered = considered;
328
329 status |= update_file_1 (f, depth);
330 check_renamed (f);
331
332 /* Clean up any alloca() used during the update. */
333 alloca (0);
334
335 /* If we got an error, don't bother with double_colon etc. */
336 if (status != 0 && !keep_going_flag)
337 return status;
338
339 if (f->command_state == cs_running
340 || f->command_state == cs_deps_running)
341 {
342 /* Don't run the other :: rules for this
343 file until this rule is finished. */
344 status = 0;
345 break;
346 }
347 }
348
349 /* Process the remaining rules in the double colon chain so they're marked
350 considered. Start their prerequisites, too. */
351 if (file->double_colon)
352 for (; f != 0 ; f = f->prev)
353 {
354 struct dep *d;
355
356 f->considered = considered;
357
358 for (d = f->deps; d != 0; d = d->next)
359 status |= update_file (d->file, depth + 1);
360 }
361
362 return status;
363}
364
365
366/* Show a message stating the target failed to build. */
367
368static void
369complain (struct file *file)
370{
371 const char *msg_noparent
372 = _("%sNo rule to make target `%s'%s");
373 const char *msg_parent
374 = _("%sNo rule to make target `%s', needed by `%s'%s");
375
376 /* If this file has no_diag set then it means we tried to update it
377 before in the dontcare mode and failed. The target that actually
378 failed is not necessarily this file but could be one of its direct
379 or indirect dependencies. So traverse this file's dependencies and
380 find the one that actually caused the failure. */
381
382 struct dep *d;
383
384 for (d = file->deps; d != 0; d = d->next)
385 {
386 if (d->file->updated && d->file->update_status > 0 && file->no_diag)
387 {
388 complain (d->file);
389 break;
390 }
391 }
392
393 if (d == 0)
394 {
395 /* Didn't find any dependencies to complain about. */
396
397#ifdef KMK
398 /* jokes */
399 if (!keep_going_flag && file->parent == 0)
400 {
401 const char *msg_joke = 0;
402 extern struct dep *goals;
403
404 /* classics */
405 if (!strcmp (file->name, "fire")
406 || !strcmp (file->name, "Fire"))
407 msg_joke = "No matches.\n";
408 else if (!strcmp (file->name, "love")
409 || !strcmp (file->name, "Love")
410 || !strcmp (file->name, "peace")
411 || !strcmp (file->name, "Peace"))
412 msg_joke = "Not war.\n";
413 else if (!strcmp (file->name, "war"))
414 msg_joke = "Don't know how to make war.\n";
415
416 /* http://xkcd.com/149/ - GNU Make bug #23273. */
417 else if (( !strcmp (file->name, "me")
418 && goals != 0
419 && !strcmp (dep_name(goals), "me")
420 && goals->next != 0
421 && !strcmp (dep_name(goals->next), "a")
422 && goals->next->next != 0)
423 || !strncmp (file->name, "me a ", 5))
424 msg_joke =
425# ifdef HAVE_UNISTD_H
426 getuid () == 0 ? "Okay.\n" :
427# endif
428 "What? Make it yourself!\n";
429 if (msg_joke)
430 {
431 fputs (msg_joke, stderr);
432 die (2);
433 }
434 }
435#endif /* KMK */
436
437 if (!keep_going_flag)
438 {
439 if (file->parent == 0)
440 fatal (NILF, msg_noparent, "", file->name, "");
441
442 fatal (NILF, msg_parent, "", file->name, file->parent->name, "");
443 }
444
445 if (file->parent == 0)
446 error (NILF, msg_noparent, "*** ", file->name, ".");
447 else
448 error (NILF, msg_parent, "*** ", file->name, file->parent->name, ".");
449
450 file->no_diag = 0;
451 }
452}
453
454/* Consider a single `struct file' and update it as appropriate. */
455
456static int
457update_file_1 (struct file *file, unsigned int depth)
458{
459 FILE_TIMESTAMP this_mtime;
460 int noexist, must_make, deps_changed;
461 int dep_status = 0;
462 struct file *ofile;
463 struct dep *d, *ad;
464 struct dep amake;
465 int running = 0;
466#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
467 struct file *org_file = file;
468 struct file *f2, *f3;
469
470 /* Always work on the primary multi target file. */
471
472 if (file->multi_head != NULL && file->multi_head != file)
473 {
474 DBS (DB_VERBOSE, (_("Considering target file `%s' -> multi head `%s'.\n"),
475 file->name, file->multi_head->name));
476 org_file = file = file->multi_head;
477 }
478 else
479#endif /* CONFIG_WITH_EXPLICIT_MULTITARGET */
480 DBF (DB_VERBOSE, _("Considering target file `%s'.\n"));
481
482 if (file->updated)
483 {
484 if (file->update_status > 0)
485 {
486 DBF (DB_VERBOSE,
487 _("Recently tried and failed to update file `%s'.\n"));
488
489 /* If the file we tried to make is marked no_diag then no message
490 was printed about it when it failed during the makefile rebuild.
491 If we're trying to build it again in the normal rebuild, print a
492 message now. */
493 if (file->no_diag && !file->dontcare)
494 complain (file);
495
496 return file->update_status;
497 }
498
499 DBF (DB_VERBOSE, _("File `%s' was considered already.\n"));
500 return 0;
501 }
502
503 switch (file->command_state)
504 {
505 case cs_not_started:
506 case cs_deps_running:
507 break;
508 case cs_running:
509 DBF (DB_VERBOSE, _("Still updating file `%s'.\n"));
510 return 0;
511 case cs_finished:
512 DBF (DB_VERBOSE, _("Finished updating file `%s'.\n"));
513 return file->update_status;
514 default:
515 abort ();
516 }
517
518 /* Determine whether the diagnostics will be issued should this update
519 fail. */
520 file->no_diag = file->dontcare;
521
522 ++depth;
523
524 /* Notice recursive update of the same file. */
525 start_updating (file);
526
527 /* We might change file if we find a different one via vpath;
528 remember this one to turn off updating. */
529 ofile = file;
530
531 /* Looking at the file's modtime beforehand allows the possibility
532 that its name may be changed by a VPATH search, and thus it may
533 not need an implicit rule. If this were not done, the file
534 might get implicit commands that apply to its initial name, only
535 to have that name replaced with another found by VPATH search.
536
537 For multi target files check the other files and use the time
538 of the oldest / non-existing file. */
539
540#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
541 this_mtime = file_mtime (file);
542 f3 = file;
543 for (f2 = file->multi_next;
544 f2 != NULL && this_mtime != NONEXISTENT_MTIME;
545 f2 = f2->multi_next)
546 if (!f2->multi_maybe)
547 {
548 FILE_TIMESTAMP second_mtime = file_mtime (f2);
549 if (second_mtime < this_mtime)
550 {
551 this_mtime = second_mtime;
552 f3 = f2;
553 }
554 }
555 check_renamed (file);
556 noexist = this_mtime == NONEXISTENT_MTIME;
557 if (noexist)
558 DBS (DB_BASIC, (_("File `%s' does not exist.\n"), f3->name));
559#else /* !CONFIG_WITH_EXPLICIT_MULTITARGET */
560 this_mtime = file_mtime (file);
561 check_renamed (file);
562 noexist = this_mtime == NONEXISTENT_MTIME;
563 if (noexist)
564 DBF (DB_BASIC, _("File `%s' does not exist.\n"));
565#endif /* !CONFIG_WITH_EXPLICIT_MULTITARGET */
566 else if (ORDINARY_MTIME_MIN <= this_mtime && this_mtime <= ORDINARY_MTIME_MAX
567 && file->low_resolution_time)
568 {
569 /* Avoid spurious rebuilds due to low resolution time stamps. */
570 int ns = FILE_TIMESTAMP_NS (this_mtime);
571 if (ns != 0)
572 error (NILF, _("*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp"),
573 file->name);
574 this_mtime += FILE_TIMESTAMPS_PER_S - 1 - ns;
575 }
576
577 must_make = noexist;
578
579 /* If file was specified as a target with no commands,
580 come up with some default commands. */
581
582 if (!file->phony && file->cmds == 0 && !file->tried_implicit)
583 {
584 if (try_implicit_rule (file, depth))
585 DBF (DB_IMPLICIT, _("Found an implicit rule for `%s'.\n"));
586 else
587 DBF (DB_IMPLICIT, _("No implicit rule found for `%s'.\n"));
588 file->tried_implicit = 1;
589 }
590 if (file->cmds == 0 && !file->is_target
591 && default_file != 0 && default_file->cmds != 0)
592 {
593 DBF (DB_IMPLICIT, _("Using default recipe for `%s'.\n"));
594 file->cmds = default_file->cmds;
595 }
596
597 /* Update all non-intermediate files we depend on, if necessary, and see
598 whether any of them is more recent than this file. We need to walk our
599 deps, AND the deps of any also_make targets to ensure everything happens
600 in the correct order.
601
602 bird: For explicit multitarget rules we must iterate all the output
603 files to get the correct picture. The special .MUST_MAKE
604 target variable call is also done from this context. */
605
606#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
607 assert (file == org_file);
608 for (f2 = file; f2; file = f2 = f2->multi_next)
609 {
610#endif
611 amake.file = file;
612 amake.next = file->also_make;
613 ad = &amake;
614 while (ad)
615 {
616 struct dep *lastd = 0;
617
618 /* Find the deps we're scanning */
619 d = ad->file->deps;
620 ad = ad->next;
621
622 while (d)
623 {
624 FILE_TIMESTAMP mtime;
625 int maybe_make;
626 int dontcare = 0;
627
628 check_renamed (d->file);
629
630 mtime = file_mtime (d->file);
631 check_renamed (d->file);
632
633 if (is_updating (d->file))
634 {
635#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
636 /* silently ignore the order-only dep hack. */
637 if (file->multi_maybe && d->file == org_file)
638 {
639 lastd = d;
640 d = d->next;
641 continue;
642 }
643#endif
644
645 error (NILF, _("Circular %s <- %s dependency dropped."),
646 file->name, d->file->name);
647 /* We cannot free D here because our the caller will still have
648 a reference to it when we were called recursively via
649 check_dep below. */
650 if (lastd == 0)
651 file->deps = d->next;
652 else
653 lastd->next = d->next;
654 d = d->next;
655 continue;
656 }
657
658 d->file->parent = file;
659 maybe_make = must_make;
660
661 /* Inherit dontcare flag from our parent. */
662 if (rebuilding_makefiles)
663 {
664 dontcare = d->file->dontcare;
665 d->file->dontcare = file->dontcare;
666 }
667
668 dep_status |= check_dep (d->file, depth, this_mtime, &maybe_make);
669
670 /* Restore original dontcare flag. */
671 if (rebuilding_makefiles)
672 d->file->dontcare = dontcare;
673
674 if (! d->ignore_mtime)
675 must_make = maybe_make;
676
677 check_renamed (d->file);
678
679 {
680 register struct file *f = d->file;
681 if (f->double_colon)
682 f = f->double_colon;
683 do
684 {
685 running |= (f->command_state == cs_running
686 || f->command_state == cs_deps_running);
687 f = f->prev;
688 }
689 while (f != 0);
690 }
691
692 if (dep_status != 0 && !keep_going_flag)
693 break;
694
695 if (!running)
696 /* The prereq is considered changed if the timestamp has changed while
697 it was built, OR it doesn't exist. */
698 d->changed = ((file_mtime (d->file) != mtime)
699 || (mtime == NONEXISTENT_MTIME));
700
701 lastd = d;
702 d = d->next;
703 }
704 }
705
706#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
707 if (dep_status != 0 && !keep_going_flag)
708 break;
709 }
710 file = org_file;
711#endif
712
713#ifdef CONFIG_WITH_DOT_MUST_MAKE
714 /* Check with the .MUST_MAKE target variable if it's
715 not already decided to make the file. */
716
717# ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
718 if (!must_make)
719 for (f2 = org_file; f2 && !must_make; f2 = f2->multi_next)
720 must_make = call_must_make_target_var (f2, depth);
721# else
722 if (!must_make)
723 must_make = call_must_make_target_var (file, depth);
724# endif
725#endif /* CONFIG_WITH_DOT_MUST_MAKE */
726
727 /* Now we know whether this target needs updating.
728 If it does, update all the intermediate files we depend on. */
729
730 if (must_make || always_make_flag)
731 {
732#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
733 for (file = f2 = org_file; f2; file = f2 = f2->multi_next)
734#endif
735 for (d = file->deps; d != 0; d = d->next)
736 if (d->file->intermediate)
737 {
738 int dontcare = 0;
739
740 FILE_TIMESTAMP mtime = file_mtime (d->file);
741 check_renamed (d->file);
742 d->file->parent = file;
743
744 /* Inherit dontcare flag from our parent. */
745 if (rebuilding_makefiles)
746 {
747 dontcare = d->file->dontcare;
748 d->file->dontcare = file->dontcare;
749 }
750
751
752 dep_status |= update_file (d->file, depth);
753
754 /* Restore original dontcare flag. */
755 if (rebuilding_makefiles)
756 d->file->dontcare = dontcare;
757
758 check_renamed (d->file);
759
760 {
761 register struct file *f = d->file;
762 if (f->double_colon)
763 f = f->double_colon;
764 do
765 {
766 running |= (f->command_state == cs_running
767 || f->command_state == cs_deps_running);
768 f = f->prev;
769 }
770 while (f != 0);
771 }
772
773 if (dep_status != 0 && !keep_going_flag)
774 break;
775
776 if (!running)
777 d->changed = ((file->phony && file->cmds != 0)
778 || file_mtime (d->file) != mtime);
779 }
780#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
781 file = org_file;
782#endif
783 }
784
785 finish_updating (file);
786 finish_updating (ofile);
787
788 DBF (DB_VERBOSE, _("Finished prerequisites of target file `%s'.\n"));
789
790 if (running)
791 {
792 set_command_state (file, cs_deps_running);
793 --depth;
794 DBF (DB_VERBOSE, _("The prerequisites of `%s' are being made.\n"));
795 return 0;
796 }
797
798 /* If any dependency failed, give up now. */
799
800 if (dep_status != 0)
801 {
802 file->update_status = dep_status;
803 notice_finished_file (file);
804
805 --depth;
806
807 DBF (DB_VERBOSE, _("Giving up on target file `%s'.\n"));
808
809 if (depth == 0 && keep_going_flag
810 && !just_print_flag && !question_flag)
811 error (NILF,
812 _("Target `%s' not remade because of errors."), file->name);
813
814 return dep_status;
815 }
816
817 if (file->command_state == cs_deps_running)
818 /* The commands for some deps were running on the last iteration, but
819 they have finished now. Reset the command_state to not_started to
820 simplify later bookkeeping. It is important that we do this only
821 when the prior state was cs_deps_running, because that prior state
822 was definitely propagated to FILE's also_make's by set_command_state
823 (called above), but in another state an also_make may have
824 independently changed to finished state, and we would confuse that
825 file's bookkeeping (updated, but not_started is bogus state). */
826 set_command_state (file, cs_not_started);
827
828 /* Now record which prerequisites are more
829 recent than this file, so we can define $?. */
830
831 deps_changed = 0;
832#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
833 for (file = f2 = org_file; f2; file = f2 = f2->multi_next)
834#endif
835 for (d = file->deps; d != 0; d = d->next)
836 {
837 FILE_TIMESTAMP d_mtime = file_mtime (d->file);
838#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
839 if (d->file == file && file->multi_maybe)
840 continue;
841#endif
842 check_renamed (d->file);
843
844 if (! d->ignore_mtime)
845 {
846#if 1
847 /* %%% In version 4, remove this code completely to
848 implement not remaking deps if their deps are newer
849 than their parents. */
850 if (d_mtime == NONEXISTENT_MTIME && !d->file->intermediate)
851 /* We must remake if this dep does not
852 exist and is not intermediate. */
853 must_make = 1;
854#endif
855
856 /* Set DEPS_CHANGED if this dep actually changed. */
857 deps_changed |= d->changed;
858 }
859
860 /* Set D->changed if either this dep actually changed,
861 or its dependent, FILE, is older or does not exist. */
862 d->changed |= noexist || d_mtime > this_mtime;
863
864 if (!noexist && ISDB (DB_BASIC|DB_VERBOSE))
865 {
866 const char *fmt = 0;
867
868 if (d->ignore_mtime)
869 {
870 if (ISDB (DB_VERBOSE))
871 fmt = _("Prerequisite `%s' is order-only for target `%s'.\n");
872 }
873 else if (d_mtime == NONEXISTENT_MTIME)
874 {
875 if (ISDB (DB_BASIC))
876 fmt = _("Prerequisite `%s' of target `%s' does not exist.\n");
877 }
878 else if (d->changed)
879 {
880 if (ISDB (DB_BASIC))
881 fmt = _("Prerequisite `%s' is newer than target `%s'.\n");
882 }
883 else if (ISDB (DB_VERBOSE))
884 fmt = _("Prerequisite `%s' is older than target `%s'.\n");
885
886 if (fmt)
887 {
888 print_spaces (depth);
889 printf (fmt, dep_name (d), file->name);
890 fflush (stdout);
891 }
892 }
893 }
894#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
895 file = org_file;
896#endif
897
898 /* Here depth returns to the value it had when we were called. */
899 depth--;
900
901 if (file->double_colon && file->deps == 0)
902 {
903 must_make = 1;
904 DBF (DB_BASIC,
905 _("Target `%s' is double-colon and has no prerequisites.\n"));
906 }
907 else if (!noexist && file->is_target && !deps_changed && file->cmds == 0
908 && !always_make_flag)
909 {
910 must_make = 0;
911 DBF (DB_VERBOSE,
912 _("No recipe for `%s' and no prerequisites actually changed.\n"));
913 }
914 else if (!must_make && file->cmds != 0 && always_make_flag)
915 {
916 must_make = 1;
917 DBF (DB_VERBOSE, _("Making `%s' due to always-make flag.\n"));
918 }
919
920 if (!must_make)
921 {
922 if (ISDB (DB_VERBOSE))
923 {
924 print_spaces (depth);
925 printf (_("No need to remake target `%s'"), file->name);
926 if (!streq (file->name, file->hname))
927 printf (_("; using VPATH name `%s'"), file->hname);
928 puts (".");
929 fflush (stdout);
930 }
931
932 notice_finished_file (file);
933
934 /* Since we don't need to remake the file, convert it to use the
935 VPATH filename if we found one. hfile will be either the
936 local name if no VPATH or the VPATH name if one was found. */
937
938 while (file)
939 {
940 file->name = file->hname;
941 file = file->prev;
942 }
943
944 return 0;
945 }
946
947 DBF (DB_BASIC, _("Must remake target `%s'.\n"));
948
949 /* It needs to be remade. If it's VPATH and not reset via GPATH, toss the
950 VPATH. */
951 if (!streq(file->name, file->hname))
952 {
953 DB (DB_BASIC, (_(" Ignoring VPATH name `%s'.\n"), file->hname));
954 file->ignore_vpath = 1;
955 }
956
957 /* Now, take appropriate actions to remake the file. */
958 remake_file (file);
959
960 if (file->command_state != cs_finished)
961 {
962 DBF (DB_VERBOSE, _("Recipe of `%s' is being run.\n"));
963 return 0;
964 }
965
966 switch (file->update_status)
967 {
968 case 2:
969 DBF (DB_BASIC, _("Failed to remake target file `%s'.\n"));
970 break;
971 case 0:
972 DBF (DB_BASIC, _("Successfully remade target file `%s'.\n"));
973 break;
974 case 1:
975 DBF (DB_BASIC, _("Target file `%s' needs remade under -q.\n"));
976 break;
977 default:
978 assert (file->update_status >= 0 && file->update_status <= 2);
979 break;
980 }
981
982 file->updated = 1;
983 return file->update_status;
984}
985#ifdef CONFIG_WITH_DOT_MUST_MAKE
986
987
988/* Consider the .MUST_MAKE target variable if present.
989
990 Returns 1 if must remake, 0 if not.
991
992 The deal is that .MUST_MAKE returns non-zero if it thinks the target needs
993 updating. We have to initialize file variables (for the sake of pattern
994 vars) and set the most important file variables before calling (expanding)
995 the .MUST_MAKE variable.
996
997 The file variables keeping the dependency lists, $+, $^, $? and $| are not
998 available at this point because $? depends on things happening after we've
999 decided to make the file. So, to keep things simple all 4 of them are
1000 undefined in this call. */
1001static int
1002call_must_make_target_var (struct file *file, unsigned int depth)
1003{
1004 struct variable *var;
1005 unsigned char ch;
1006 const char *str;
1007
1008 if (file->variables)
1009 {
1010 var = lookup_variable_in_set (".MUST_MAKE", sizeof (".MUST_MAKE") - 1,
1011 file->variables->set);
1012 if (var)
1013 {
1014 initialize_file_variables (file, 0);
1015 set_file_variables (file, 1 /* called early, no dep lists please */);
1016
1017 str = variable_expand_for_file_2 (NULL,
1018 var->value, var->value_length,
1019 file, NULL);
1020
1021 /* stripped string should be non-zero. */
1022 do
1023 ch = *str++;
1024 while (isspace (ch));
1025
1026 if (ch != '\0')
1027 {
1028 if (ISDB (DB_BASIC))
1029 {
1030 print_spaces (depth);
1031 printf (_(".MUST_MAKE returned `%s' for target `%s'.\n"),
1032 str, file->name);
1033 }
1034 return 1;
1035 }
1036 }
1037 }
1038 return 0;
1039}
1040#endif /* CONFIG_WITH_DOT_MUST_MAKE */
1041#ifdef CONFIG_WITH_DOT_IS_CHANGED
1042
1043
1044/* Consider the .IS_CHANGED target variable if present.
1045
1046 Returns 1 if the file should be considered modified, 0 if not.
1047
1048 The calling context and restrictions are the same as for .MUST_MAKE.
1049 Make uses the information from this 'function' for determining whether to
1050 make a file which lists this as a prerequisite. So, this is the feature you
1051 use to check MD5 sums, file sizes, time stamps and the like with data from
1052 a previous run.
1053
1054 FIXME: Would be nice to know which file is currently being considered.
1055 FIXME: Is currently not invoked for intermediate files. */
1056static int
1057call_is_changed_target_var (struct file *file)
1058{
1059 struct variable *var;
1060 unsigned char ch;
1061 const char *str;
1062
1063 if (file->variables)
1064 {
1065 var = lookup_variable_in_set (".IS_CHANGED", sizeof (".IS_CHANGED") - 1,
1066 file->variables->set);
1067 if (var)
1068 {
1069 initialize_file_variables (file, 0);
1070 set_file_variables (file, 1 /* called early, no dep lists please */);
1071
1072 str = variable_expand_for_file_2 (NULL,
1073 var->value, var->value_length,
1074 file, NULL);
1075
1076 /* stripped string should be non-zero. */
1077 do
1078 ch = *str++;
1079 while (isspace (ch));
1080
1081 return (ch != '\0');
1082 }
1083 }
1084 return 0;
1085}
1086#endif /* CONFIG_WITH_DOT_IS_CHANGED */
1087
1088
1089/* Set FILE's `updated' flag and re-check its mtime and the mtime's of all
1090 files listed in its `also_make' member. Under -t, this function also
1091 touches FILE.
1092
1093 On return, FILE->update_status will no longer be -1 if it was. */
1094
1095void
1096notice_finished_file (struct file *file)
1097{
1098#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
1099 struct file *f2;
1100#endif
1101 struct dep *d;
1102 int ran = file->command_state == cs_running;
1103 int touched = 0;
1104 DB (DB_JOBS, (_("notice_finished_file - entering: file=%p `%s' update_status=%d command_state=%d\n"), /* bird */
1105 (void *) file, file->name, file->update_status, file->command_state));
1106
1107 file->command_state = cs_finished;
1108 file->updated = 1;
1109#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
1110 if (file->multi_head)
1111 {
1112 assert (file == file->multi_head);
1113 for (f2 = file->multi_next; f2 != 0; f2 = f2->multi_next)
1114 {
1115 f2->command_state = cs_finished;
1116 f2->updated = 1;
1117 }
1118 }
1119#endif
1120
1121#ifdef CONFIG_WITH_EXTENDED_NOTPARALLEL
1122 /* update not_parallel if the file was flagged for that. */
1123 if ( ran
1124 && (file->command_flags & (COMMANDS_NOTPARALLEL | COMMANDS_NO_COMMANDS))
1125 == COMMANDS_NOTPARALLEL)
1126 {
1127 DB (DB_KMK, (_("not_parallel %d -> %d (file=%p `%s') [notice_finished_file]\n"), not_parallel,
1128 not_parallel - 1, (void *) file, file->name));
1129 assert(not_parallel >= 1);
1130 --not_parallel;
1131 }
1132#endif
1133
1134 if (touch_flag
1135 /* The update status will be:
1136 -1 if this target was not remade;
1137 0 if 0 or more commands (+ or ${MAKE}) were run and won;
1138 1 if some commands were run and lost.
1139 We touch the target if it has commands which either were not run
1140 or won when they ran (i.e. status is 0). */
1141 && file->update_status == 0)
1142 {
1143 if (file->cmds != 0 && file->cmds->any_recurse)
1144 {
1145 /* If all the command lines were recursive,
1146 we don't want to do the touching. */
1147 unsigned int i;
1148 for (i = 0; i < file->cmds->ncommand_lines; ++i)
1149 if (!(file->cmds->lines_flags[i] & COMMANDS_RECURSE))
1150 goto have_nonrecursing;
1151 }
1152 else
1153 {
1154 have_nonrecursing:
1155 if (file->phony)
1156#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
1157 {
1158 file->update_status = 0;
1159 if (file->multi_head)
1160 for (f2 = file->multi_next; f2 != 0; f2 = f2->multi_next)
1161 f2->update_status = 0;
1162 }
1163#else
1164 file->update_status = 0;
1165#endif
1166 /* According to POSIX, -t doesn't affect targets with no cmds. */
1167 else if (file->cmds != 0)
1168 {
1169 /* Should set file's modification date and do nothing else. */
1170 file->update_status = touch_file (file);
1171#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
1172 if (file->multi_head)
1173 for (f2 = file->multi_next; f2 != 0; f2 = f2->multi_next)
1174 {
1175 /* figure out this, touch if it exist ignore otherwise? */
1176 }
1177#endif
1178
1179 /* Pretend we ran a real touch command, to suppress the
1180 "`foo' is up to date" message. */
1181 commands_started++;
1182
1183 /* Request for the timestamp to be updated (and distributed
1184 to the double-colon entries). Simply setting ran=1 would
1185 almost have done the trick, but messes up with the also_make
1186 updating logic below. */
1187 touched = 1;
1188 }
1189 }
1190 }
1191
1192 if (file->mtime_before_update == UNKNOWN_MTIME)
1193 file->mtime_before_update = file->last_mtime;
1194#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
1195 if (file->multi_head)
1196 for (f2 = file->multi_next; f2 != 0; f2 = f2->multi_next)
1197 if (f2->mtime_before_update == UNKNOWN_MTIME)
1198 f2->mtime_before_update = f2->last_mtime;
1199#endif
1200
1201 if ((ran && !file->phony) || touched)
1202 {
1203 int i = 0;
1204
1205 /* If -n, -t, or -q and all the commands are recursive, we ran them so
1206 really check the target's mtime again. Otherwise, assume the target
1207 would have been updated. */
1208
1209 if ((question_flag || just_print_flag || touch_flag) && file->cmds)
1210 {
1211 for (i = file->cmds->ncommand_lines; i > 0; --i)
1212 if (! (file->cmds->lines_flags[i-1] & COMMANDS_RECURSE))
1213 break;
1214 }
1215
1216 /* If there were no commands at all, it's always new. */
1217
1218 else if (file->is_target && file->cmds == 0)
1219 i = 1;
1220
1221 file->last_mtime = i == 0 ? UNKNOWN_MTIME : NEW_MTIME;
1222#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
1223 if (file->multi_head)
1224 for (f2 = file->multi_next; f2 != 0; f2 = f2->multi_next)
1225 file->last_mtime = i == 0 ? UNKNOWN_MTIME : NEW_MTIME; /*??*/
1226#endif
1227 }
1228
1229 if (file->double_colon)
1230 {
1231 /* If this is a double colon rule and it is the last one to be
1232 updated, propagate the change of modification time to all the
1233 double-colon entries for this file.
1234
1235 We do it on the last update because it is important to handle
1236 individual entries as separate rules with separate timestamps
1237 while they are treated as targets and then as one rule with the
1238 unified timestamp when they are considered as a prerequisite
1239 of some target. */
1240
1241 struct file *f;
1242 FILE_TIMESTAMP max_mtime = file->last_mtime;
1243
1244 /* Check that all rules were updated and at the same time find
1245 the max timestamp. We assume UNKNOWN_MTIME is newer then
1246 any other value. */
1247 for (f = file->double_colon; f != 0 && f->updated; f = f->prev)
1248 if (max_mtime != UNKNOWN_MTIME
1249 && (f->last_mtime == UNKNOWN_MTIME || f->last_mtime > max_mtime))
1250 max_mtime = f->last_mtime;
1251
1252 if (f == 0)
1253 for (f = file->double_colon; f != 0; f = f->prev)
1254 f->last_mtime = max_mtime;
1255 }
1256
1257 if (ran && file->update_status != -1)
1258#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
1259 {
1260#endif
1261 /* We actually tried to update FILE, which has
1262 updated its also_make's as well (if it worked).
1263 If it didn't work, it wouldn't work again for them.
1264 So mark them as updated with the same status. */
1265 for (d = file->also_make; d != 0; d = d->next)
1266 {
1267 d->file->command_state = cs_finished;
1268 d->file->updated = 1;
1269 d->file->update_status = file->update_status;
1270
1271 if (ran && !d->file->phony)
1272 /* Fetch the new modification time.
1273 We do this instead of just invalidating the cached time
1274 so that a vpath_search can happen. Otherwise, it would
1275 never be done because the target is already updated. */
1276 f_mtime (d->file, 0);
1277 }
1278#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
1279 /* Same as above but for explicit multi target rules. */
1280 if (file->multi_head)
1281 for (f2 = file->multi_next; f2 != 0; f2 = f2->multi_next)
1282 {
1283 f2->update_status = file->update_status;
1284 if (!f2->phony)
1285 f_mtime (f2, 0);
1286 }
1287 }
1288#endif
1289 else if (file->update_status == -1)
1290#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
1291 {
1292 /* Nothing was done for FILE, but it needed nothing done.
1293 So mark it now as "succeeded". */
1294 file->update_status = 0;
1295 if (file->multi_head)
1296 for (f2 = file->multi_next; f2 != 0; f2 = f2->multi_next)
1297 f2->update_status = 0;
1298 }
1299#else
1300 /* Nothing was done for FILE, but it needed nothing done.
1301 So mark it now as "succeeded". */
1302 file->update_status = 0;
1303#endif
1304}
1305
1306
1307/* Check whether another file (whose mtime is THIS_MTIME) needs updating on
1308 account of a dependency which is file FILE. If it does, store 1 in
1309 *MUST_MAKE_PTR. In the process, update any non-intermediate files that
1310 FILE depends on (including FILE itself). Return nonzero if any updating
1311 failed. */
1312
1313static int
1314check_dep (struct file *file, unsigned int depth,
1315 FILE_TIMESTAMP this_mtime, int *must_make_ptr)
1316{
1317 struct file *ofile;
1318 struct dep *d;
1319 int dep_status = 0;
1320
1321 ++depth;
1322 start_updating (file);
1323
1324 /* We might change file if we find a different one via vpath;
1325 remember this one to turn off updating. */
1326 ofile = file;
1327
1328 if (file->phony || !file->intermediate)
1329 {
1330 /* If this is a non-intermediate file, update it and record whether it
1331 is newer than THIS_MTIME. */
1332 FILE_TIMESTAMP mtime;
1333 dep_status = update_file (file, depth);
1334 check_renamed (file);
1335 mtime = file_mtime (file);
1336 check_renamed (file);
1337 if (mtime == NONEXISTENT_MTIME || mtime > this_mtime)
1338 *must_make_ptr = 1;
1339#ifdef CONFIG_WITH_DOT_IS_CHANGED
1340 else if ( *must_make_ptr == 0
1341 && call_is_changed_target_var (file))
1342 *must_make_ptr = 1;
1343#endif /* CONFIG_WITH_DOT_IS_CHANGED */
1344 }
1345 else
1346 {
1347 /* FILE is an intermediate file. */
1348 FILE_TIMESTAMP mtime;
1349
1350 if (!file->phony && file->cmds == 0 && !file->tried_implicit)
1351 {
1352 if (try_implicit_rule (file, depth))
1353 DBF (DB_IMPLICIT, _("Found an implicit rule for `%s'.\n"));
1354 else
1355 DBF (DB_IMPLICIT, _("No implicit rule found for `%s'.\n"));
1356 file->tried_implicit = 1;
1357 }
1358 if (file->cmds == 0 && !file->is_target
1359 && default_file != 0 && default_file->cmds != 0)
1360 {
1361 DBF (DB_IMPLICIT, _("Using default commands for `%s'.\n"));
1362 file->cmds = default_file->cmds;
1363 }
1364
1365 check_renamed (file);
1366 mtime = file_mtime (file);
1367 check_renamed (file);
1368 if (mtime != NONEXISTENT_MTIME && mtime > this_mtime)
1369 /* If the intermediate file actually exists and is newer, then we
1370 should remake from it. */
1371 *must_make_ptr = 1;
1372 else
1373 {
1374 /* Otherwise, update all non-intermediate files we depend on, if
1375 necessary, and see whether any of them is more recent than the
1376 file on whose behalf we are checking. */
1377 struct dep *ld;
1378 int deps_running = 0;
1379
1380 /* If this target is not running, set it's state so that we check it
1381 fresh. It could be it was checked as part of an order-only
1382 prerequisite and so wasn't rebuilt then, but should be now. */
1383 if (file->command_state != cs_running)
1384 set_command_state (file, cs_not_started);
1385
1386 ld = 0;
1387 d = file->deps;
1388 while (d != 0)
1389 {
1390 int maybe_make;
1391
1392 if (is_updating (d->file))
1393 {
1394 error (NILF, _("Circular %s <- %s dependency dropped."),
1395 file->name, d->file->name);
1396 if (ld == 0)
1397 {
1398 file->deps = d->next;
1399 free_dep (d);
1400 d = file->deps;
1401 }
1402 else
1403 {
1404 ld->next = d->next;
1405 free_dep (d);
1406 d = ld->next;
1407 }
1408 continue;
1409 }
1410
1411 d->file->parent = file;
1412 maybe_make = *must_make_ptr;
1413 dep_status |= check_dep (d->file, depth, this_mtime,
1414 &maybe_make);
1415 if (! d->ignore_mtime)
1416 *must_make_ptr = maybe_make;
1417 check_renamed (d->file);
1418 if (dep_status != 0 && !keep_going_flag)
1419 break;
1420
1421 if (d->file->command_state == cs_running
1422 || d->file->command_state == cs_deps_running)
1423 deps_running = 1;
1424
1425 ld = d;
1426 d = d->next;
1427 }
1428
1429 if (deps_running)
1430 /* Record that some of FILE's deps are still being made.
1431 This tells the upper levels to wait on processing it until the
1432 commands are finished. */
1433 set_command_state (file, cs_deps_running);
1434 }
1435 }
1436
1437 finish_updating (file);
1438 finish_updating (ofile);
1439
1440 return dep_status;
1441}
1442
1443
1444/* Touch FILE. Return zero if successful, one if not. */
1445
1446#define TOUCH_ERROR(call) return (perror_with_name (call, file->name), 1)
1447
1448static int
1449touch_file (struct file *file)
1450{
1451 if (!silent_flag)
1452 message (0, "touch %s", file->name);
1453
1454#ifndef NO_ARCHIVES
1455 if (ar_name (file->name))
1456 return ar_touch (file->name);
1457 else
1458#endif
1459 {
1460 int fd = open (file->name, O_RDWR | O_CREAT, 0666);
1461
1462 if (fd < 0)
1463 TOUCH_ERROR ("touch: open: ");
1464 else
1465 {
1466 struct stat statbuf;
1467 char buf = 'x';
1468 int e;
1469
1470 EINTRLOOP (e, fstat (fd, &statbuf));
1471 if (e < 0)
1472 TOUCH_ERROR ("touch: fstat: ");
1473 /* Rewrite character 0 same as it already is. */
1474 if (read (fd, &buf, 1) < 0)
1475 TOUCH_ERROR ("touch: read: ");
1476 if (lseek (fd, 0L, 0) < 0L)
1477 TOUCH_ERROR ("touch: lseek: ");
1478 if (write (fd, &buf, 1) < 0)
1479 TOUCH_ERROR ("touch: write: ");
1480 /* If file length was 0, we just
1481 changed it, so change it back. */
1482 if (statbuf.st_size == 0)
1483 {
1484 (void) close (fd);
1485 fd = open (file->name, O_RDWR | O_TRUNC, 0666);
1486 if (fd < 0)
1487 TOUCH_ERROR ("touch: open: ");
1488 }
1489 (void) close (fd);
1490 }
1491 }
1492
1493 return 0;
1494}
1495
1496
1497/* Having checked and updated the dependencies of FILE,
1498 do whatever is appropriate to remake FILE itself.
1499 Return the status from executing FILE's commands. */
1500
1501static void
1502remake_file (struct file *file)
1503{
1504#ifdef CONFIG_WITH_EXPLICIT_MULTITARGET
1505 assert(file->multi_head == NULL || file->multi_head == file);
1506#endif
1507
1508 if (file->cmds == 0)
1509 {
1510 if (file->phony)
1511 /* Phony target. Pretend it succeeded. */
1512 file->update_status = 0;
1513 else if (file->is_target)
1514 /* This is a nonexistent target file we cannot make.
1515 Pretend it was successfully remade. */
1516 file->update_status = 0;
1517 else
1518 {
1519 /* This is a dependency file we cannot remake. Fail. */
1520 if (!rebuilding_makefiles || !file->dontcare)
1521 complain (file);
1522 file->update_status = 2;
1523 }
1524 }
1525 else
1526 {
1527 chop_commands (file->cmds);
1528
1529 /* The normal case: start some commands. */
1530 if (!touch_flag || file->cmds->any_recurse)
1531 {
1532 execute_file_commands (file);
1533 return;
1534 }
1535
1536 /* This tells notice_finished_file it is ok to touch the file. */
1537 file->update_status = 0;
1538 }
1539
1540 /* This does the touching under -t. */
1541 notice_finished_file (file);
1542}
1543
1544
1545/* Return the mtime of a file, given a `struct file'.
1546 Caches the time in the struct file to avoid excess stat calls.
1547
1548 If the file is not found, and SEARCH is nonzero, VPATH searching and
1549 replacement is done. If that fails, a library (-lLIBNAME) is tried and
1550 the library's actual name (/lib/libLIBNAME.a, etc.) is substituted into
1551 FILE. */
1552
1553FILE_TIMESTAMP
1554f_mtime (struct file *file, int search)
1555{
1556 FILE_TIMESTAMP mtime;
1557
1558 /* File's mtime is not known; must get it from the system. */
1559
1560#ifndef NO_ARCHIVES
1561 if (ar_name (file->name))
1562 {
1563 /* This file is an archive-member reference. */
1564
1565 char *arname, *memname;
1566 struct file *arfile;
1567 time_t member_date;
1568
1569 /* Find the archive's name. */
1570 ar_parse_name (file->name, &arname, &memname);
1571
1572 /* Find the modification time of the archive itself.
1573 Also allow for its name to be changed via VPATH search. */
1574 arfile = lookup_file (arname);
1575 if (arfile == 0)
1576 arfile = enter_file (strcache_add (arname));
1577 mtime = f_mtime (arfile, search);
1578 check_renamed (arfile);
1579 if (search && strcmp (arfile->hname, arname))
1580 {
1581 /* The archive's name has changed.
1582 Change the archive-member reference accordingly. */
1583
1584 char *name;
1585 unsigned int arlen, memlen;
1586
1587 arlen = strlen (arfile->hname);
1588 memlen = strlen (memname);
1589
1590 name = xmalloc (arlen + 1 + memlen + 2);
1591 memcpy (name, arfile->hname, arlen);
1592 name[arlen] = '(';
1593 memcpy (name + arlen + 1, memname, memlen);
1594 name[arlen + 1 + memlen] = ')';
1595 name[arlen + 1 + memlen + 1] = '\0';
1596
1597 /* If the archive was found with GPATH, make the change permanent;
1598 otherwise defer it until later. */
1599 if (arfile->name == arfile->hname)
1600 rename_file (file, name);
1601 else
1602 rehash_file (file, name);
1603 check_renamed (file);
1604 }
1605
1606 free (arname);
1607
1608 file->low_resolution_time = 1;
1609
1610 if (mtime == NONEXISTENT_MTIME)
1611 /* The archive doesn't exist, so its members don't exist either. */
1612 return NONEXISTENT_MTIME;
1613
1614 member_date = ar_member_date (file->hname);
1615 mtime = (member_date == (time_t) -1
1616 ? NONEXISTENT_MTIME
1617 : file_timestamp_cons (file->hname, member_date, 0));
1618 }
1619 else
1620#endif
1621 {
1622 mtime = name_mtime (file->name);
1623
1624 if (mtime == NONEXISTENT_MTIME && search && !file->ignore_vpath)
1625 {
1626 /* If name_mtime failed, search VPATH. */
1627 const char *name = vpath_search (file->name, &mtime, NULL, NULL);
1628 if (name
1629 /* Last resort, is it a library (-lxxx)? */
1630 || (file->name[0] == '-' && file->name[1] == 'l'
1631 && (name = library_search (file->name, &mtime)) != 0))
1632 {
1633 if (mtime != UNKNOWN_MTIME)
1634 /* vpath_search and library_search store UNKNOWN_MTIME
1635 if they didn't need to do a stat call for their work. */
1636 file->last_mtime = mtime;
1637
1638 /* If we found it in VPATH, see if it's in GPATH too; if so,
1639 change the name right now; if not, defer until after the
1640 dependencies are updated. */
1641 if (gpath_search (name, strlen(name) - strlen(file->name) - 1))
1642 {
1643 rename_file (file, name);
1644 check_renamed (file);
1645 return file_mtime (file);
1646 }
1647
1648 rehash_file (file, name);
1649 check_renamed (file);
1650 /* If the result of a vpath search is -o or -W, preserve it.
1651 Otherwise, find the mtime of the resulting file. */
1652 if (mtime != OLD_MTIME && mtime != NEW_MTIME)
1653 mtime = name_mtime (name);
1654 }
1655 }
1656 }
1657
1658 /* Files can have bogus timestamps that nothing newly made will be
1659 "newer" than. Updating their dependents could just result in loops.
1660 So notify the user of the anomaly with a warning.
1661
1662 We only need to do this once, for now. */
1663
1664 if (!clock_skew_detected
1665 && mtime != NONEXISTENT_MTIME && mtime != NEW_MTIME
1666 && !file->updated)
1667 {
1668 static FILE_TIMESTAMP adjusted_now;
1669
1670 FILE_TIMESTAMP adjusted_mtime = mtime;
1671
1672#if defined(WINDOWS32) || defined(__MSDOS__)
1673 /* Experimentation has shown that FAT filesystems can set file times
1674 up to 3 seconds into the future! Play it safe. */
1675
1676#define FAT_ADJ_OFFSET (FILE_TIMESTAMP) 3
1677
1678 FILE_TIMESTAMP adjustment = FAT_ADJ_OFFSET << FILE_TIMESTAMP_LO_BITS;
1679 if (ORDINARY_MTIME_MIN + adjustment <= adjusted_mtime)
1680 adjusted_mtime -= adjustment;
1681#elif defined(__EMX__)
1682 /* FAT filesystems round time to the nearest even second!
1683 Allow for any file (NTFS or FAT) to perhaps suffer from this
1684 brain damage. */
1685 FILE_TIMESTAMP adjustment = (((FILE_TIMESTAMP_S (adjusted_mtime) & 1) == 0
1686 && FILE_TIMESTAMP_NS (adjusted_mtime) == 0)
1687 ? (FILE_TIMESTAMP) 1 << FILE_TIMESTAMP_LO_BITS
1688 : 0);
1689#endif
1690
1691 /* If the file's time appears to be in the future, update our
1692 concept of the present and try once more. */
1693 if (adjusted_now < adjusted_mtime)
1694 {
1695 int resolution;
1696 FILE_TIMESTAMP now = file_timestamp_now (&resolution);
1697 adjusted_now = now + (resolution - 1);
1698 if (adjusted_now < adjusted_mtime)
1699 {
1700#ifdef NO_FLOAT
1701 error (NILF, _("Warning: File `%s' has modification time in the future"),
1702 file->name);
1703#else
1704 double from_now =
1705 (FILE_TIMESTAMP_S (mtime) - FILE_TIMESTAMP_S (now)
1706 + ((FILE_TIMESTAMP_NS (mtime) - FILE_TIMESTAMP_NS (now))
1707 / 1e9));
1708 char from_now_string[100];
1709
1710 if (from_now >= 99 && from_now <= ULONG_MAX)
1711 sprintf (from_now_string, "%lu", (unsigned long) from_now);
1712 else
1713 sprintf (from_now_string, "%.2g", from_now);
1714 error (NILF, _("Warning: File `%s' has modification time %s s in the future"),
1715 file->name, from_now_string);
1716#endif
1717 clock_skew_detected = 1;
1718 }
1719 }
1720 }
1721
1722 /* Store the mtime into all the entries for this file. */
1723 if (file->double_colon)
1724 file = file->double_colon;
1725
1726 do
1727 {
1728 /* If this file is not implicit but it is intermediate then it was
1729 made so by the .INTERMEDIATE target. If this file has never
1730 been built by us but was found now, it existed before make
1731 started. So, turn off the intermediate bit so make doesn't
1732 delete it, since it didn't create it. */
1733 if (mtime != NONEXISTENT_MTIME && file->command_state == cs_not_started
1734 && file->command_state == cs_not_started
1735 && !file->tried_implicit && file->intermediate)
1736 file->intermediate = 0;
1737
1738 file->last_mtime = mtime;
1739 file = file->prev;
1740 }
1741 while (file != 0);
1742
1743 return mtime;
1744}
1745
1746
1747/* Return the mtime of the file or archive-member reference NAME. */
1748
1749/* First, we check with stat(). If the file does not exist, then we return
1750 NONEXISTENT_MTIME. If it does, and the symlink check flag is set, then
1751 examine each indirection of the symlink and find the newest mtime.
1752 This causes one duplicate stat() when -L is being used, but the code is
1753 much cleaner. */
1754
1755static FILE_TIMESTAMP
1756name_mtime (const char *name)
1757{
1758 FILE_TIMESTAMP mtime;
1759 struct stat st;
1760 int e;
1761
1762 EINTRLOOP (e, stat (name, &st));
1763 if (e == 0)
1764 mtime = FILE_TIMESTAMP_STAT_MODTIME (name, st);
1765 else if (errno == ENOENT || errno == ENOTDIR)
1766 mtime = NONEXISTENT_MTIME;
1767 else
1768 {
1769 perror_with_name ("stat: ", name);
1770 return NONEXISTENT_MTIME;
1771 }
1772
1773 /* If we get here we either found it, or it doesn't exist.
1774 If it doesn't exist see if we can use a symlink mtime instead. */
1775
1776#ifdef MAKE_SYMLINKS
1777#ifndef S_ISLNK
1778# define S_ISLNK(_m) (((_m)&S_IFMT)==S_IFLNK)
1779#endif
1780 if (check_symlink_flag)
1781 {
1782 PATH_VAR (lpath);
1783
1784 /* Check each symbolic link segment (if any). Find the latest mtime
1785 amongst all of them (and the target file of course).
1786 Note that we have already successfully dereferenced all the links
1787 above. So, if we run into any error trying to lstat(), or
1788 readlink(), or whatever, something bizarre-o happened. Just give up
1789 and use whatever mtime we've already computed at that point. */
1790 strcpy (lpath, name);
1791 while (1)
1792 {
1793 FILE_TIMESTAMP ltime;
1794 PATH_VAR (lbuf);
1795 long llen;
1796 char *p;
1797
1798 EINTRLOOP (e, lstat (lpath, &st));
1799 if (e)
1800 {
1801 /* Just take what we have so far. */
1802 if (errno != ENOENT && errno != ENOTDIR)
1803 perror_with_name ("lstat: ", lpath);
1804 break;
1805 }
1806
1807 /* If this is not a symlink, we're done (we started with the real
1808 file's mtime so we don't need to test it again). */
1809 if (!S_ISLNK (st.st_mode))
1810 break;
1811
1812 /* If this mtime is newer than what we had, keep the new one. */
1813 ltime = FILE_TIMESTAMP_STAT_MODTIME (lpath, st);
1814 if (ltime > mtime)
1815 mtime = ltime;
1816
1817 /* Set up to check the file pointed to by this link. */
1818 EINTRLOOP (llen, readlink (lpath, lbuf, GET_PATH_MAX));
1819 if (llen < 0)
1820 {
1821 /* Eh? Just take what we have. */
1822 perror_with_name ("readlink: ", lpath);
1823 break;
1824 }
1825 lbuf[llen] = '\0';
1826
1827 /* If the target is fully-qualified or the source is just a
1828 filename, then the new path is the target. Otherwise it's the
1829 source directory plus the target. */
1830 if (lbuf[0] == '/' || (p = strrchr (lpath, '/')) == NULL)
1831 strcpy (lpath, lbuf);
1832 else if ((p - lpath) + llen + 2 > GET_PATH_MAX)
1833 /* Eh? Path too long! Again, just go with what we have. */
1834 break;
1835 else
1836 /* Create the next step in the symlink chain. */
1837 strcpy (p+1, lbuf);
1838 }
1839 }
1840#endif
1841
1842 return mtime;
1843}
1844
1845
1846/* Search for a library file specified as -lLIBNAME, searching for a
1847 suitable library file in the system library directories and the VPATH
1848 directories. */
1849
1850static const char *
1851library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr)
1852{
1853 static char *dirs[] =
1854 {
1855#ifdef KMK
1856 ".",
1857#else /* !KMK */
1858#ifndef _AMIGA
1859 "/lib",
1860 "/usr/lib",
1861#endif
1862#if defined(WINDOWS32) && !defined(LIBDIR)
1863/*
1864 * This is completely up to the user at product install time. Just define
1865 * a placeholder.
1866 */
1867#define LIBDIR "."
1868#endif
1869# ifdef LIBDIR /* bird */
1870 LIBDIR, /* Defined by configuration. */
1871# else /* bird */
1872 ".", /* bird */
1873# endif /* bird */
1874#endif /* !KMK */
1875 0
1876 };
1877
1878 const char *file = 0;
1879 char *libpatterns;
1880 FILE_TIMESTAMP mtime;
1881
1882 /* Loop variables for the libpatterns value. */
1883 char *p;
1884 const char *p2;
1885 unsigned int len;
1886 unsigned int liblen;
1887
1888 /* Information about the earliest (in the vpath sequence) match. */
1889 unsigned int best_vpath = 0, best_path = 0; /* bird: gcc maybe used uninitialized (both) */
1890 unsigned int std_dirs = 0;
1891
1892 char **dp;
1893
1894 libpatterns = xstrdup (variable_expand ("$(.LIBPATTERNS)"));
1895
1896 /* Skip the '-l'. */
1897 lib += 2;
1898 liblen = strlen (lib);
1899
1900 /* Loop through all the patterns in .LIBPATTERNS, and search on each one.
1901 To implement the linker-compatible behavior we have to search through
1902 all entries in .LIBPATTERNS and choose the "earliest" one. */
1903 p2 = libpatterns;
1904 while ((p = find_next_token (&p2, &len)) != 0)
1905 {
1906 static char *buf = NULL;
1907 static unsigned int buflen = 0;
1908 static int libdir_maxlen = -1;
1909 char *libbuf = variable_expand ("");
1910 const size_t libbuf_offset = libbuf - variable_buffer; /* bird */
1911
1912 /* Expand the pattern using LIB as a replacement. */
1913 {
1914 char c = p[len];
1915 char *p3, *p4;
1916
1917 p[len] = '\0';
1918 p3 = find_percent (p);
1919 if (!p3)
1920 {
1921 /* Give a warning if there is no pattern. */
1922 error (NILF, _(".LIBPATTERNS element `%s' is not a pattern"), p);
1923 p[len] = c;
1924 continue;
1925 }
1926 p4 = variable_buffer_output (libbuf, p, p3-p);
1927 p4 = variable_buffer_output (p4, lib, liblen);
1928 p4 = variable_buffer_output (p4, p3+1, len - (p3-p));
1929 p[len] = c;
1930 libbuf = variable_buffer + libbuf_offset; /* bird - variable_buffer may have been reallocated. */
1931 }
1932
1933 /* Look first for `libNAME.a' in the current directory. */
1934 mtime = name_mtime (libbuf);
1935 if (mtime != NONEXISTENT_MTIME)
1936 {
1937 if (mtime_ptr != 0)
1938 *mtime_ptr = mtime;
1939 file = strcache_add (libbuf);
1940 /* This by definition will have the best index, so stop now. */
1941 break;
1942 }
1943
1944 /* Now try VPATH search on that. */
1945
1946 {
1947 unsigned int vpath_index, path_index;
1948 const char* f = vpath_search (libbuf, mtime_ptr ? &mtime : NULL,
1949 &vpath_index, &path_index);
1950 if (f)
1951 {
1952 /* If we have a better match, record it. */
1953 if (file == 0 ||
1954 vpath_index < best_vpath ||
1955 (vpath_index == best_vpath && path_index < best_path))
1956 {
1957 file = f;
1958 best_vpath = vpath_index;
1959 best_path = path_index;
1960
1961 if (mtime_ptr != 0)
1962 *mtime_ptr = mtime;
1963 }
1964 }
1965 }
1966
1967 /* Now try the standard set of directories. */
1968
1969 if (!buflen)
1970 {
1971 for (dp = dirs; *dp != 0; ++dp)
1972 {
1973 int l = strlen (*dp);
1974 if (l > libdir_maxlen)
1975 libdir_maxlen = l;
1976 std_dirs++;
1977 }
1978 buflen = strlen (libbuf);
1979 buf = xmalloc(libdir_maxlen + buflen + 2);
1980 }
1981 else if (buflen < strlen (libbuf))
1982 {
1983 buflen = strlen (libbuf);
1984 buf = xrealloc (buf, libdir_maxlen + buflen + 2);
1985 }
1986
1987 {
1988 /* Use the last std_dirs index for standard directories. This
1989 was it will always be greater than the VPATH index. */
1990 unsigned int vpath_index = ~((unsigned int)0) - std_dirs;
1991
1992 for (dp = dirs; *dp != 0; ++dp)
1993 {
1994 sprintf (buf, "%s/%s", *dp, libbuf);
1995 mtime = name_mtime (buf);
1996 if (mtime != NONEXISTENT_MTIME)
1997 {
1998 if (file == 0 || vpath_index < best_vpath)
1999 {
2000 file = strcache_add (buf);
2001 best_vpath = vpath_index;
2002
2003 if (mtime_ptr != 0)
2004 *mtime_ptr = mtime;
2005 }
2006 }
2007
2008 vpath_index++;
2009 }
2010 }
2011
2012 }
2013
2014 free (libpatterns);
2015 return file;
2016}
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