]> git.ipfire.org Git - thirdparty/make.git/commitdiff
* Fix for infinite recursion.
authorPaul Smith <psmith@gnu.org>
Sat, 4 Sep 1999 22:05:18 +0000 (22:05 +0000)
committerPaul Smith <psmith@gnu.org>
Sat, 4 Sep 1999 22:05:18 +0000 (22:05 +0000)
remake.c

index 1e21e618e71a51dcca66a299a8a35b02c670c331..fe9b7ffe9bc6a656940d0347885151b6d713e5d2 100644 (file)
--- a/remake.c
+++ b/remake.c
@@ -154,13 +154,6 @@ update_goal_chain (goals, makefiles)
              x = update_file (file, makefiles ? 1 : 0);
              check_renamed (file);
 
-              /* If we don't know what the file's last mtime was, find it.  */
-              if (! file->last_mtime)
-                {
-                  (void) f_mtime (file, 0);
-                  check_renamed (file);
-                }
-
              /* Set the goal's `changed' flag if any commands were started
                 by calling update_file above.  We check this flag below to
                 decide when to give an "up to date" diagnostic.  */
@@ -186,22 +179,27 @@ update_goal_chain (goals, makefiles)
                          stop = (!keep_going_flag && !question_flag
                                  && !makefiles);
                        }
-                     else if (file->updated && g->changed &&
-                               file->last_mtime != file->mtime_before_update)
-                       {
-                         /* Updating was done.  If this is a makefile and
-                            just_print_flag or question_flag is set
-                            (meaning -n or -q was given and this file was
-                            specified as a command-line target), don't
-                            change STATUS.  If STATUS is changed, we will
-                            get re-exec'd, and fall into an infinite loop.  */
-                         if (!makefiles
-                             || (!just_print_flag && !question_flag))
-                           status = 0;
-                         if (makefiles && file->dontcare)
-                           /* This is a default makefile.  Stop remaking.  */
-                           stop = 1;
-                       }
+                     else
+                        {
+                          FILE_TIMESTAMP mtime = MTIME (file);
+                          check_renamed (file);
+                          if (file->updated && g->changed &&
+                               mtime != file->mtime_before_update)
+                          {
+                            /* Updating was done.  If this is a makefile and
+                               just_print_flag or question_flag is set
+                               (meaning -n or -q was given and this file was
+                               specified as a command-line target), don't
+                               change STATUS.  If STATUS is changed, we will
+                               get re-exec'd, and enter an infinite loop.  */
+                            if (!makefiles
+                                || (!just_print_flag && !question_flag))
+                              status = 0;
+                            if (makefiles && file->dontcare)
+                              /* This is a default makefile; stop remaking.  */
+                              stop = 1;
+                          }
+                        }
                    }
                }