* Various fixes; see the ChangeLog.
authorPaul Smith <psmith@gnu.org>
Sun, 30 Jul 2000 18:26:42 +0000 (18:26 +0000)
committerPaul Smith <psmith@gnu.org>
Sun, 30 Jul 2000 18:26:42 +0000 (18:26 +0000)
ChangeLog
NEWS
configure.in
dir.c
file.c
filedef.h
i18n/ja.po
job.c
make.texinfo
remake.c

index f057bd2..9009827 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,53 @@
+2000-07-25  Paul D. Smith  <psmith@gnu.org>
+
+       * job.c (construct_command_argv_internal): Add "~" to the list of
+       sh_chars[] which disallow optimizing out the shell call.
+
+2000-07-23  Paul Eggert  <eggert@twinsun.com>
+
+       * NEWS, make.texinfo: Document .LOW_RESOLUTION_TIME, which
+       supersedes --disable-nsec-timestamps.
+       * make.texinfo: Consistently use "time stamp" instead of "timestamp".
+       * README: Remove --disable-nsec-timestamps.
+
+       * filedef.h (struct file.low_resolution_time): New member.
+       * file.c (snap_deps): Add support for .LOW_RESOLUTION_TIME.
+       * remake.c (update_file_1):
+       Avoid spurious rebuilds due to low resolution time stamps,
+       generalizing the earlier code that applied only to archive members.
+       (f_mtime): Archive members always have low resolution time stamps.
+
+       * configure.in: Remove --disable-nsec-timestamps, as this has
+       been superseded by .LOW_RESOLUTION_TIME.
+
+2000-07-23  Paul Eggert  <eggert@twinsun.com>
+
+       * configure.in (enable_nsec_timestamps): Renamed from
+       make_cv_nsec_timestamps, since enable/disable options
+       shouldn't be cached.
+
+2000-07-23  Bruno Haible  <haible@clisp.cons.org>
+       and  Paul Eggert  <eggert@twinsun.com>
+
+       * file.c (file_timestamp_now):
+       Use preprocessor-time check for FILE_TIMESTAMP_HI_RES
+       so that clock_gettime is not linked unless needed.
+
+       * filedef.h (FILE_TIMESTAMP_HI_RES):
+       Remove definition; "configure" now does this.
+
+       * configure.in (jm_AC_TYPE_UINTMAX_T): Move up,
+       to before high resolution file timestamp check,
+       since that check now uses uintmax_t.
+       (FILE_TIMESTAMP_HI_RES): Define to nonzero if the code should use
+       high resolution file timestamps.
+       (HAVE_CLOCK_GETTIME): Do not define if !FILE_TIMESTAMP_HI_RES,
+       so that we don't link in clock_gettime unnecessarily.
+
+2000-07-17  Paul D. Smith  <psmith@gnu.org>
+
+       * i18n/ja.po: New version of the translation file.
+
 2000-07-07  Paul D. Smith  <psmith@gnu.org>
 
        * remake.c (f_mtime): If NO_FLOAT is defined, don't bother with
diff --git a/NEWS b/NEWS
index 40ddb1d..38a6d5b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -12,17 +12,20 @@ Please send GNU make bug reports to <bug-make@gnu.org>.
 See the README file and the GNU make manual for details on sending bug
 reports.
 \f
+* New pseudo-target .LOW_RESOLUTION_TIME, superseding the configure
+  option --disable-nsec-timestamps.  You might need this if your build
+  process depends on tools like "cp -p" preserving time stamps, since
+  "cp -p" (right now) doesn't preserve the subsecond portion of a time
+  stamp.
+
 Version 3.79.1
 
 * .SECONDARY with no prerequisites now prevents any target from being
   removed because make thinks it's an intermediate file, not just those
   listed in the makefile.
 
-* New configure option --disable-nsec-timestamps will keep make from
-  using sub-second timestamps on systems which support it.  If your
-  build process depends on proper timestamp-preserving behavior of tools
-  like "cp -p" you might need this option, since "cp -p" (right now)
-  doesn't preserve the sub-second portion of the timestamp.
+* New configure option --disable-nsec-timestamps, but this was
+  superseded in later versions by the .LOW_RESOLUTION_TIME pseudo-target.
 \f
 Version 3.79
 
index a76bf31..1e680a9 100644 (file)
@@ -3,7 +3,7 @@ AC_REVISION([$Id$])
 AC_PREREQ(2.13)dnl             dnl Minimum Autoconf version required.
 AC_INIT(vpath.c)dnl            dnl A distinctive file to look for in srcdir.
 
-AM_INIT_AUTOMAKE(make, 3.79.1)
+AM_INIT_AUTOMAKE(make, 3.79.1.0)
 AM_CONFIG_HEADER(config.h)
 
 dnl Regular configure stuff
@@ -45,18 +45,37 @@ dnl Handle internationalization
 ALL_LINGUAS="de es fr ja ko nl pl pt_BR ru"
 pds_WITH_GETTEXT
 
-
-dnl See if the user wants nsec timestamps
-
-AC_ARG_ENABLE(nsec-timestamps,
-  [  --disable-nsec-timestamps disable use of sub-second timestamps],
-  [make_cv_nsec_timestamps="$enableval"],
-  [make_cv_nsec_timestamps="yes"])
-
-if test "x$make_cv_nsec_timestamps" != xno; then
-  AC_STRUCT_ST_MTIM_NSEC
-fi
 jm_AC_TYPE_UINTMAX_T
+AC_STRUCT_ST_MTIM_NSEC
+AC_MSG_CHECKING([whether to use high resolution file timestamps])
+AC_CACHE_VAL(make_cv_file_timestamp_hi_res, [
+  make_cv_file_timestamp_hi_res=no
+  if test $ac_cv_struct_st_mtim_nsec != no; then
+    AC_TRY_COMPILE([
+#      if HAVE_INTTYPES_H
+#       include <inttypes.h>
+#      endif],
+      [char a[0x7fffffff < (uintmax_t) -1 >> 30 ? 1 : -1];],
+      make_cv_file_timestamp_hi_res=yes)
+  fi])
+AC_MSG_RESULT($make_cv_file_timestamp_hi_res)
+if test $make_cv_file_timestamp_hi_res = yes; then
+  val=1
+else
+  val=0
+fi
+AC_DEFINE_UNQUOTED(FILE_TIMESTAMP_HI_RES, $val,
+                  [Use high resolution file timestamps if nonzero.])
+
+if test $make_cv_file_timestamp_hi_res = yes; then
+  # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.
+  # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
+  AC_SEARCH_LIBS(clock_gettime, [rt posix4])
+  if test "$ac_cv_search_clock_gettime" != no; then
+    AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
+             [Define if you have the clock_gettime function.])
+  fi
+fi
 
 AC_SUBST(LIBOBJS)
 
@@ -73,14 +92,6 @@ changequote([,])dnl
 fi
 AC_MSG_RESULT($ac_cv_check_symbol_$1)])dnl
 
-# Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.
-# Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
-AC_SEARCH_LIBS(clock_gettime, [rt posix4])
-if test "$ac_cv_search_clock_gettime" != no; then
-  AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
-            [Define if you have the clock_gettime function.])
-fi
-
 # See if we have a standard version of gettimeofday().  Since actual
 # implementations can differ, just make sure we have the most common
 # one.
diff --git a/dir.c b/dir.c
index d783c64..c6c542c 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -159,7 +159,8 @@ vms_hash (name)
 
   while (*name)
     {
-      h = (h << 4) + (isupper (*name) ? tolower (*name) : *name);
+      unsigned char uc = *name;
+      h = (h << 4) + (isupper (uc) ? tolower (uc) : uc);
       name++;
       g = h & 0xf0000000;
       if (g)
diff --git a/file.c b/file.c
index f5f9a77..32c88b7 100644 (file)
--- a/file.c
+++ b/file.c
@@ -467,6 +467,11 @@ snap_deps ()
       for (f2 = d->file; f2 != 0; f2 = f2->prev)
        f2->precious = 1;
 
+  for (f = lookup_file (".LOW_RESOLUTION_TIME"); f != 0; f = f->prev)
+    for (d = f->deps; d != 0; d = d->next)
+      for (f2 = d->file; f2 != 0; f2 = f2->prev)
+       f2->low_resolution_time = 1;
+
   for (f = lookup_file (".PHONY"); f != 0; f = f->prev)
     for (d = f->deps; d != 0; d = d->next)
       for (f2 = d->file; f2 != 0; f2 = f2->prev)
@@ -592,33 +597,32 @@ file_timestamp_now (int *resolution)
   /* Don't bother with high-resolution clocks if file timestamps have
      only one-second resolution.  The code below should work, but it's
      not worth the hassle of debugging it on hosts where it fails.  */
-  if (FILE_TIMESTAMP_HI_RES)
-    {
-#if HAVE_CLOCK_GETTIME && defined CLOCK_REALTIME
+#if FILE_TIMESTAMP_HI_RES
+# if HAVE_CLOCK_GETTIME && defined CLOCK_REALTIME
+  {
+    struct timespec timespec;
+    if (clock_gettime (CLOCK_REALTIME, &timespec) == 0)
       {
-       struct timespec timespec;
-       if (clock_gettime (CLOCK_REALTIME, &timespec) == 0)
-         {
-           r = 1;
-           s = timespec.tv_sec;
-           ns = timespec.tv_nsec;
-           goto got_time;
-         }
+       r = 1;
+       s = timespec.tv_sec;
+       ns = timespec.tv_nsec;
+       goto got_time;
       }
-#endif
-#if HAVE_GETTIMEOFDAY
+  }
+# endif
+# if HAVE_GETTIMEOFDAY
+  {
+    struct timeval timeval;
+    if (gettimeofday (&timeval, 0) == 0)
       {
-       struct timeval timeval;
-       if (gettimeofday (&timeval, 0) == 0)
-         {
-           r = 1000;
-           s = timeval.tv_sec;
-           ns = timeval.tv_usec * 1000;
-           goto got_time;
-         }
+       r = 1000;
+       s = timeval.tv_sec;
+       ns = timeval.tv_usec * 1000;
+       goto got_time;
       }
+  }
+# endif
 #endif
-    }
 
   r = 1000000000;
   s = time ((time_t *) 0);
index 19f24f8..4a5b9dd 100644 (file)
--- a/filedef.h
+++ b/filedef.h
@@ -72,6 +72,8 @@ struct file
       } command_state ENUM_BITFIELD (2);
 
     unsigned int precious:1;   /* Non-0 means don't delete file on quit */
+    unsigned int low_resolution_time:1;        /* Nonzero if this file's time stamp
+                                          has only one-second resolution.  */
     unsigned int tried_implicit:1; /* Nonzero if have searched
                                      for implicit rule for making
                                      this file; don't search again.  */
@@ -110,13 +112,10 @@ extern void set_command_state PARAMS ((struct file *file, int state));
 extern void notice_finished_file PARAMS ((struct file *file));
 
 
-#ifdef ST_MTIM_NSEC
-# define FILE_TIMESTAMP_HI_RES \
-    (2147483647 < INTEGER_TYPE_MAXIMUM (FILE_TIMESTAMP) >> 31)
+#if FILE_TIMESTAMP_HI_RES
 # define FILE_TIMESTAMP_STAT_MODTIME(fname, st) \
     file_timestamp_cons (fname, (st).st_mtime, (st).st_mtim.ST_MTIM_NSEC)
 #else
-# define FILE_TIMESTAMP_HI_RES 0
 # define FILE_TIMESTAMP_STAT_MODTIME(fname, st) \
     file_timestamp_cons (fname, (st).st_mtime, 0)
 #endif
index 017ee88..cb83b24 100644 (file)
@@ -1,12 +1,13 @@
 # Japanese message for make 3.79
 # Copyright (C) 2000 Free Software Foundation, Inc.
 # Daisuke Yamashita <yamad@mb.infoweb.ne.jp>, 2000.
+#             Thanks to NISHIJIMA Takanori
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: make 3.79\n"
 "POT-Creation-Date: 2000-04-05 10:09-0400\n"
-"PO-Revision-Date: 2000-05-23 20:59+0900\n"
+"PO-Revision-Date: 2000-07-16 23:59+0900\n"
 "Last-Translator: Daisuke Yamashita <yamad@mb.infoweb.ne.jp>\n"
 "Language-Team: Japanese <ja@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -16,7 +17,7 @@ msgstr ""
 #: ar.c:50
 #, c-format
 msgid "attempt to use unsupported feature: `%s'"
-msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤µ¡Ç½¤ò»¤Þ¤¹: `%s'"
+msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤µ¡Ç½¤ò»È¤ª¤¦¤È¤·¤Æ¤¤¤Þ¤¹: `%s'"
 
 #: ar.c:141
 msgid "touch archive member is not available on VMS"
@@ -45,12 +46,12 @@ msgstr "touch: `%s' 
 #: arscan.c:71
 #, c-format
 msgid "lbr$set_module failed to extract module info, status = %d"
-msgstr "lbr$set_module ¤¬¥â¥¸¥å¡¼¥ë¾ðÊó¤ÎÃê½Ð¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¾õÂÖ = %d"
+msgstr "lbr$set_module ¤¬¥â¥¸¥å¡¼¥ë¾ðÊó¤ÎÃê½Ð¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£¾õÂÖ = %d"
 
 #: arscan.c:155
 #, c-format
 msgid "lbr$ini_control failed with status = %d"
-msgstr "lbr$ini_control ¤¬¼ºÇÔ¤·¤Þ¤·¤¿¾õÂÖ = %d"
+msgstr "lbr$ini_control ¤¬¼ºÇÔ¤·¤Þ¤·¤¿¡£¾õÂÖ = %d"
 
 #: arscan.c:166
 #, c-format
@@ -60,11 +61,11 @@ msgstr "
 #: arscan.c:820
 #, c-format
 msgid "Member `%s'%s: %ld bytes at %ld (%ld).\n"
-msgstr "¥á¥ó¥Ð `%s'%s: %ld ¥Ð¥¤¥È at %ld (%ld).\n"
+msgstr "¥á¥ó¥Ð `%s'%s: %ld ¥Ð¥¤¥È at %ld (%ld)¡£\n"
 
 #: arscan.c:821
 msgid " (name might be truncated)"
-msgstr " (̾Á°¤ÏÀÚ¤êµÍ¤á¤é¤ì¤¿¤«¤â)"
+msgstr " (̾Á°¤¬ÀÚ¤êµÍ¤á¤é¤ì¤¿¤«¤â)"
 
 #: arscan.c:823
 #, c-format
@@ -83,12 +84,12 @@ msgstr "*** 
 #: commands.c:483
 #, c-format
 msgid "*** [%s] Archive member `%s' may be bogus; not deleted"
-msgstr "*** [%s] ½ñ¸Ë¥á¥ó¥Ð `%s' ¤Ï¿ʬµ¶Êª¤Ç¤¹ -- ºï½ü¤·¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "*** [%s] ½ñ¸Ë¥á¥ó¥Ð `%s' ¤Ï¿ʬµ¶Êª¤Ç¤¹ ¡½ ºï½ü¤·¤Þ¤»¤ó¤Ç¤·¤¿"
 
 #: commands.c:486
 #, c-format
 msgid "*** Archive member `%s' may be bogus; not deleted"
-msgstr "*** ½ñ¸Ë¥á¥ó¥Ð `%s' ¤Ï¿ʬµ¶Êª¤Ç¤¹ -- ºï½ü¤·¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "*** ½ñ¸Ë¥á¥ó¥Ð `%s' ¤Ï¿ʬµ¶Êª¤Ç¤¹ ¡½ ºï½ü¤·¤Þ¤»¤ó¤Ç¤·¤¿"
 
 #: commands.c:498
 #, c-format
@@ -158,7 +159,7 @@ msgstr "0"
 
 #: dir.c:957 dir.c:977
 msgid " files, "
-msgstr " ¸Ä¤Î¥Õ¥¡¥¤¥ë"
+msgstr " ¸Ä¤Î¥Õ¥¡¥¤¥ë¡¢"
 
 #: dir.c:959 dir.c:979
 msgid "no"
@@ -170,12 +171,12 @@ msgstr " 
 
 #: dir.c:966
 msgid " so far."
-msgstr " (¤³¤³¤Þ¤Ç¤Ë)."
+msgstr " (¤³¤³¤Þ¤Ç¤Ë)¡£"
 
 #: dir.c:982
 #, c-format
 msgid " impossibilities in %u directories.\n"
-msgstr " ¸Ä¤ÎŬÍÑÉÔǽ¥Õ¥¡¥¤¥ë̾ (%u ¸Ä¤Î¥Ç¥£¥ì¥¯¥È¥êÆâ).\n"
+msgstr " ¸Ä¤ÎŬÍÑÉÔǽ¥Õ¥¡¥¤¥ë̾ (%u ¸Ä¤Î¥Ç¥£¥ì¥¯¥È¥êÆâ)¡£\n"
 
 #: expand.c:105
 #, c-format
@@ -190,22 +191,22 @@ msgstr "
 #. Unterminated variable reference.
 #: expand.c:247
 msgid "unterminated variable reference"
-msgstr "½ªÃ¼¤Î̵¤¤ÊÑ¿ô»²¾È"
+msgstr "½ªÃ¼¤Î¤Ê¤¤ÊÑ¿ô»²¾È"
 
 #: file.c:307
 #, c-format
 msgid "Commands were specified for file `%s' at %s:%lu,"
-msgstr "¥Õ¥¡¥¤¥ë `%s' ¤Ø¤Î¥³¥Þ¥ó¥É¤¬ %s:%lu ¤Ç»ØÄꤵ¤ì¤Þ¤·¤¿,"
+msgstr "¥Õ¥¡¥¤¥ë `%s' ¤Ø¤Î¥³¥Þ¥ó¥É¤¬ %s:%lu ¤Ç»ØÄꤵ¤ì¤Þ¤·¤¿¡£"
 
 #: file.c:313
 #, c-format
 msgid "Commands for file `%s' were found by implicit rule search,"
-msgstr "¥Õ¥¡¥¤¥ë `%s' ¤Ø¤Î¥³¥Þ¥ó¥É¤Ï°ÅÌۥ롼¥ë¤Îõº÷¤Ç¸«¤Ä¤«¤ê¤Þ¤·¤¿,"
+msgstr "¥Õ¥¡¥¤¥ë `%s' ¤Ø¤Î¥³¥Þ¥ó¥É¤Ï°ÅÌۥ롼¥ë¤Îõº÷¤Ç¸«¤Ä¤«¤ê¤Þ¤·¤¿¡£"
 
 #: file.c:317
 #, c-format
 msgid "but `%s' is now considered the same file as `%s'."
-msgstr "¤·¤«¤·º£¤Ï `%s' ¤ò `%s' ¤ÈƱ¤¸¥Õ¥¡¥¤¥ë¤È¸«¤Ê¤µ¤ì¤Þ¤¹¡£"
+msgstr "¤·¤«¤·º£¤Ï `%s' ¤È `%s' ¤ÏƱ¤¸¥Õ¥¡¥¤¥ë¤È¸«¤Ê¤µ¤ì¤Þ¤¹¡£"
 
 #: file.c:321
 #, c-format
@@ -299,7 +300,7 @@ msgstr "#  
 
 #: file.c:678
 msgid "#  Successfully updated."
-msgstr "#  ¼óÈø¤è¤¯¹¹¿·¤Ç¤­¤Þ¤·¤¿¡£"
+msgstr "#  ¹¹¿·¤ËÀ®¸ù¤·¤Þ¤·¤¿¡£"
 
 #: file.c:682
 msgid "#  Needs to be updated (-q is set)."
@@ -323,7 +324,7 @@ msgstr "\n# 
 
 #: file.c:737
 msgid "\n# No files."
-msgstr "\n# ¥Õ¥¡¥¤¥ë̵¤·"
+msgstr "\n# ¥Õ¥¡¥¤¥ë¤Ê¤·"
 
 #: file.c:740
 #, c-format
@@ -333,7 +334,7 @@ msgstr "\n# %u 
 #: file.c:742
 #, c-format
 msgid "# average %.3f files per bucket, max %u files in one bucket.\n"
-msgstr "# ¥Ï¥Ã¥·¥åÍ×ÁÇÅö¤êÊ¿¶Ñ %.3f ¸Ä, °ì¥Ï¥Ã¥·¥å¤ËºÇÂç %u ¸Ä¤Î¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤¹¡£\n"
+msgstr "# ¥Ï¥Ã¥·¥åÍ×ÁǤ¢¤¿¤ê¡¢Ê¿¶Ñ %.3f ¸Ä¡¢ºÇÂç %u ¸Ä¤Î¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤¹¡£\n"
 
 #. Check the first argument.
 #: function.c:737
@@ -384,12 +385,12 @@ msgstr "
 #: function.c:1692
 #, c-format
 msgid "Unimplemented on this platform: function `%s'"
-msgstr "¤³¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Ê¤¤: ´Ø¿ô `%s'"
+msgstr "¤³¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: ´Ø¿ô `%s'"
 
 #: function.c:1745
 #, c-format
 msgid "unterminated call to function `%s': missing `%c'"
-msgstr "½ªÃ¼¤¬̵¤¤´Ø¿ô¸Æ¤Ó½Ð¤· `%s': `%c' ¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "½ªÃ¼¤¬¤Ê¤¤´Ø¿ô¸Æ¤Ó½Ð¤· `%s': `%c' ¤¬¤¢¤ê¤Þ¤»¤ó"
 
 #: getopt.c:675
 #, c-format
@@ -399,12 +400,12 @@ msgstr "%s: 
 #: getopt.c:699
 #, c-format
 msgid "%s: option `--%s' doesn't allow an argument\n"
-msgstr "%s: ¥ª¥×¥·¥ç¥ó `--%s' ¤Ï°ú¿ô¤ò¼è¤ì¤Þ¤»¤ó\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó `--%s' ¤Ï°ú¿ô¤ò¼è¤ê¤Þ¤»¤ó\n"
 
 #: getopt.c:704
 #, c-format
 msgid "%s: option `%c%s' doesn't allow an argument\n"
-msgstr "%s: ¥ª¥×¥·¥ç¥ó `%c%s' ¤Ï°ú¿ô¤ò¼è¤ì¤Þ¤»¤ó\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó `%c%s' ¤Ï°ú¿ô¤ò¼è¤ê¤Þ¤»¤ó\n"
 
 #: getopt.c:721 getopt.c:894
 #, c-format
@@ -427,18 +428,18 @@ msgstr "%s: ǧ
 #: getopt.c:780
 #, c-format
 msgid "%s: illegal option -- %c\n"
-msgstr "%s: ÉÔÀµ¤Ê¥ª¥×¥·¥ç¥ó -- %c\n"
+msgstr "%s: ÉÔÀµ¤Ê¥ª¥×¥·¥ç¥ó ¡½ %c\n"
 
 #: getopt.c:783
 #, c-format
 msgid "%s: invalid option -- %c\n"
-msgstr "%s: Ìµ¸ú¤Ê¥ª¥×¥·¥ç¥ó -- %c\n"
+msgstr "%s: Ìµ¸ú¤Ê¥ª¥×¥·¥ç¥ó ¡½ %c\n"
 
 #. 1003.2 specifies the format of this message.
 #: getopt.c:813 getopt.c:943
 #, c-format
 msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: ¥ª¥×¥·¥ç¥ó¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹ -- %c\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹ ¡½ %c\n"
 
 #: getopt.c:860
 #, c-format
@@ -529,7 +530,7 @@ msgstr "
 
 #: job.c:352
 msgid "Syntax error, still inside '\"'\n"
-msgstr "ʸˡ¥¨¥é¡¼'\"' Æâ¤Î¤Þ¤Þ¤Ç¤¹\n"
+msgstr "ʸˡ¥¨¥é¡¼¡¢'\"' Æâ¤Î¤Þ¤Þ¤Ç¤¹\n"
 
 #: job.c:404
 #, c-format
@@ -538,7 +539,7 @@ msgstr "SIGCHLD 
 
 #: job.c:453
 msgid "*** Waiting for unfinished jobs...."
-msgstr "*** Ì¤Î»¤Î¥¸¥ç¥Ö¤òÂԤäƤ¤¤Þ¤¹...."
+msgstr "*** ̤´°Î»¤Î¥¸¥ç¥Ö¤òÂԤäƤ¤¤Þ¤¹...."
 
 #: job.c:482
 #, c-format
@@ -604,11 +605,11 @@ msgstr "
 
 #: job.c:1566
 msgid "cannot enforce load limits on this operating system"
-msgstr "¤³¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Ç¤Ï load À©¸Â¤ò¶¯ÍפǤ­¤Þ¤»¤ó"
+msgstr "¤³¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Ç¤Ï¥·¥¹¥Æ¥àÉé²ÙÀ©¸Â¤ò²Ã¤¨¤é¤ì¤Þ¤»¤ó"
 
 #: job.c:1568
 msgid "cannot enforce load limit: "
-msgstr "load À©¸Â¤Î¶¯Íפ¬¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿: "
+msgstr "¥·¥¹¥Æ¥àÉé²ÙÀ©¸Â¤Î²Ý¤¹¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿: "
 
 #: job.c:1671
 #, c-format
@@ -617,11 +618,11 @@ msgstr "
 
 #: job.c:1756
 msgid "-warning, CTRL-Y will leave sub-process(es) around.\n"
-msgstr "-·Ù¹ðCTRL-Y ¤Ï»Ò¥×¥í¥»¥¹¤ò»¶¤é¤«¤·¤¿¤Þ¤Þ¤Ë¤¹¤ë¤Ç¤·¤ç¤¦¡£\n"
+msgstr "-·Ù¹ð¡¢CTRL-Y ¤Ï»Ò¥×¥í¥»¥¹¤ò»¶¤é¤«¤·¤¿¤Þ¤Þ¤Ë¤¹¤ë¤Ç¤·¤ç¤¦¡£\n"
 
 #: job.c:1773
 msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n"
-msgstr "-·Ù¹ðDCL ¤«¤é¤Î CTRL-Y Áàºî¤òºÆ¤ÓÍ­¸ú¤Ë¤¹¤ëɬÍפ¬¤¢¤ë¤«¤âÃΤì¤Þ¤»¤ó¡£\n"
+msgstr "-·Ù¹ð¡¢DCL ¤«¤é¤Î CTRL-Y Áàºî¤òºÆ¤ÓÍ­¸ú¤Ë¤¹¤ëɬÍפ¬¤¢¤ë¤«¤âÃΤì¤Þ¤»¤ó¡£\n"
 
 #: job.c:1886
 #, c-format
@@ -645,7 +646,7 @@ msgstr "
 
 #: job.c:1958
 msgid "Error, empty command\n"
-msgstr "¥¨¥é¡¼¶õ¤Î¥³¥Þ¥ó¥É\n"
+msgstr "¥¨¥é¡¼¡¢¶õ¤Î¥³¥Þ¥ó¥É\n"
 
 #: job.c:1965 main.c:1270
 msgid "fopen (temporary file)"
@@ -674,7 +675,7 @@ msgstr "
 #: job.c:2144
 #, c-format
 msgid "Error spawning, %d\n"
-msgstr "spawn ¤Î¥¨¥é¡¼%d\n"
+msgstr "spawn ¤Î¥¨¥é¡¼¡¢%d\n"
 
 #: job.c:2247
 #, c-format
@@ -694,7 +695,7 @@ msgstr "%s: 
 #: job.c:2476
 #, c-format
 msgid "$SHELL changed (was `%s', now `%s')"
-msgstr "$SHELL ¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿ (Á°¤Ï `%s'º£¤Ï `%s')"
+msgstr "$SHELL ¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿ (Á°¤Ï `%s'¡¢º£¤Ï `%s')"
 
 #: job.c:2882
 #, c-format
@@ -708,7 +709,7 @@ msgstr "%s (%d 
 
 #: main.c:259
 msgid "Ignored for compatibility"
-msgstr "¸ß´¹À­¤Î¤¿¤á¤Ç¤¢¤ê¡¢Ìµ»ë¤µ¤ì¤Þ¤¹"
+msgstr "¸ß´¹À­¤Î¤¿¤á¤Î¤â¤Î¤Ç¡¢Ìµ»ë¤µ¤ì¤ë"
 
 #: main.c:261 main.c:288
 msgid "DIRECTORY"
@@ -736,7 +737,7 @@ msgstr "
 
 #: main.c:277
 msgid "Environment variables override makefiles"
-msgstr "´Ä¶­ÊÑ¿ô¤Ç makefile ¤ÎÊÑ¿ô¤ò¾å½ñ¤­¤µ¤»¤ë"
+msgstr "´Ä¶­ÊÑ¿ô¤¬ makefile Ãæ¤Îµ­½Ò¤ËÍ¥À褹¤ë"
 
 #: main.c:279 main.c:320 main.c:354
 msgid "FILE"
@@ -760,7 +761,7 @@ msgstr "
 
 #: main.c:294
 msgid "Allow N jobs at once; infinite jobs with no arg"
-msgstr "N ¸Ä¤Î¥¸¥ç¥Ö¤òµö²Ä; Ìµ°ú¿ô¤À¤È¥¸¥ç¥Ö¿ôÀ©¸Â̵¤·"
+msgstr "N ¸Ä¤Î¥¸¥ç¥Ö¤òµö²Ä; Ìµ°ú¿ô¤À¤È¥¸¥ç¥Ö¿ôÀ©¸Â¤Ê¤·"
 
 #: main.c:301
 msgid "Keep going when some targets can't be made"
@@ -768,7 +769,7 @@ msgstr "
 
 #: main.c:306 main.c:311
 msgid "Don't start multiple jobs unless load is below N"
-msgstr "load ¤¬ N Ì¤Ëþ¤Ç¤Ê¤¤¸Â¤êÊ£¿ô¤Î¥¸¥ç¥Ö¤ò³«»Ï¤·¤Ê¤¤"
+msgstr "Éé²Ù ¤¬ N Ì¤Ëþ¤Ç¤Ê¤¤¸Â¤êÊ£¿ô¤Î¥¸¥ç¥Ö¤ò³«»Ï¤·¤Ê¤¤"
 
 #: main.c:318
 msgid "Don't actually run any commands; just print them"
@@ -828,7 +829,7 @@ msgstr "̤
 
 #: main.c:456
 msgid "empty string invalid as file name"
-msgstr "¥Õ¥¡¥¤¥ë̾¤È¤·¤Æ¶õ¤Îʸ»úÎó¤Ï̵¸ú¤Ç¤¹"
+msgstr "¶õ¤Îʸ»úÎó¤Ï¥Õ¥¡¥¤¥ë̾¤È¤·¤Æ¤Ï̵¸ú¤Ç¤¹"
 
 #: main.c:536
 #, c-format
@@ -886,7 +887,7 @@ msgstr "sleep(30) 
 
 #: main.c:1260
 msgid "Makefile from standard input specified twice."
-msgstr "ɸ½àÆþÎϤ«¤é¤Î Makefile ¤¬Æó²ó»ØÄꤵ¤ì¤Þ¤·¤¿¡£"
+msgstr "ɸ½àÆþÎϤ«¤é¤Î makefile ¤¬Æó²ó»ØÄꤵ¤ì¤Þ¤·¤¿¡£"
 
 #: main.c:1276
 msgid "fwrite (temporary file)"
@@ -927,7 +928,7 @@ msgstr "dup jobserver"
 
 #: main.c:1462
 msgid "warning: jobserver unavailable: using -j1.  Add `+' to parent make rule."
-msgstr "·Ù¹ð: jobserver ¤òÍøÍÑÉÔ²Ä: -j1 ¤ò»È¤¤¡¢¿Æ make ¥ë¡¼¥ë¤Ë `+' ¤òÄɲä·¤Þ¤·¤ç¤¦"
+msgstr "·Ù¹ð: jobserver ¤¬ÍøÍÑÉÔ²Ä: -j1 ¤ò»È¤¤¡¢¿Æ make ¥ë¡¼¥ë¤Ë `+' ¤òÄɲä·¤Þ¤·¤ç¤¦"
 
 #: main.c:1485
 msgid "creating jobs pipe"
@@ -944,7 +945,7 @@ msgstr "makefile 
 #: main.c:1605
 #, c-format
 msgid "Makefile `%s' might loop; not remaking it.\n"
-msgstr "Makefile `%s' ·«¤êÊÖ¤·¤Î¶ó -- ºÆ make ¤·¤Þ¤»¤ó¡£\n"
+msgstr "makefile `%s' ¼«¸ÊºÆµ¢¤Î¤ª¤½¤ì ¡½ ºÆ make ¤·¤Þ¤»¤ó¡£\n"
 
 #. The update failed and this makefile was not
 #. from the MAKEFILES variable, so we care.
@@ -962,7 +963,7 @@ msgstr "
 #: main.c:1700
 #, c-format
 msgid "Makefile `%s' was not found"
-msgstr "Makefile `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "makefile `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
 
 #: main.c:1768
 msgid "Couldn't change back to original directory."
@@ -978,7 +979,7 @@ msgstr "unlink (
 
 #: main.c:1855
 msgid "No targets specified and no makefile found"
-msgstr "¥¿¡¼¥²¥Ã¥È¤¬»ØÄꤵ¤ì¤Æ¤ª¤é¤º¡¢makefile ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+msgstr "¥¿¡¼¥²¥Ã¥È¤¬»ØÄꤵ¤ì¤Æ¤ª¤é¤º¡¢makefile ¤â¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
 #: main.c:1857
 msgid "No targets"
@@ -991,7 +992,7 @@ msgstr "
 
 #: main.c:1888
 msgid "warning:  Clock skew detected.  Your build may be incomplete."
-msgstr "·Ù¹ð:  ¥¯¥í¥Ã¥¯¤ÎÏĤߤò¸¡½Ð¡£ÉÔ´°Á´¤Ê¥Ó¥ë¥É·ë²Ì¤Ë¤Ê¤ë¤«¤âÃΤì¤Þ¤»¤ó¡£"
+msgstr "·Ù¹ð:  ¥¯¥í¥Ã¥¯¤ÎÏĤߤò¸¡½Ð¡£ÉÔ´°Á´¤Ê¥Ó¥ë¥É·ë²Ì¤Ë¤Ê¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£"
 
 #: main.c:2043
 #, c-format
@@ -1026,7 +1027,7 @@ msgid ""
 "\n"
 msgstr ""
 ", by Richard Stallman and Roland McGrath.\n"
-"%s%s ÍѤ˥ӥë¥É¤µ¤ì¤¿\n"
+"%s%s ÍѤ˥ӥë¥É\n"
 "%sCopyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99\n"
 "%s\tFree Software Foundation, Inc.\n"
 "%sThis is free software; see the source for copying conditions.\n"
@@ -1065,7 +1066,7 @@ msgstr "
 
 #: misc.c:307
 msgid ".  Stop.\n"
-msgstr ".  Ãæ»ß¡£\n"
+msgstr "¡£Ãæ»ß¡£\n"
 
 #: misc.c:329
 #, c-format
@@ -1082,7 +1083,7 @@ msgstr "
 #: misc.c:653
 #, c-format
 msgid "%s access: user %lu (real %lu), group %lu (real %lu)\n"
-msgstr "%s ¥¢¥¯¥»¥¹: ¥æ¡¼¥¶ %lu (¼Â %lu)¥°¥ë¡¼¥× %lu (¼Â %lu)\n"
+msgstr "%s ¥¢¥¯¥»¥¹: ¥æ¡¼¥¶ %lu (¼Â %lu)¡¢¥°¥ë¡¼¥× %lu (¼Â %lu)\n"
 
 #: misc.c:674
 msgid "Initialized"
@@ -1115,7 +1116,7 @@ msgstr " (~ 
 
 #: read.c:525
 msgid "invalid syntax in conditional"
-msgstr "¾ò·ïÉô¤Ë̵¸ú¤Ê¥·¥ó¥¿¥¯¥¹"
+msgstr "¾ò·ïÉô¤Îʸˡ¤¬Ìµ¸ú¤Ç¤¹"
 
 #: read.c:534
 msgid "extraneous `endef'"
@@ -1159,7 +1160,7 @@ msgstr "ʬΥ
 
 #: read.c:875
 msgid " (did you mean TAB instead of 8 spaces?)"
-msgstr " (8 ¸Ä¤Î¶õÇò¤Ç¤·¤¿¤¬¡¢TAB ¤Î¤Ä¤â¤ê¤Ç¤¹¤«?)"
+msgstr " (8 ¸Ä¤Î¶õÇò¤Ç¤·¤¿¤¬¡¢TAB ¤Î¤Ä¤â¤ê¤Ç¤·¤¿¤«?)"
 
 #: read.c:1011
 msgid "missing target pattern"
@@ -1235,7 +1236,7 @@ msgstr "Ʊ
 #: read.c:1650
 #, c-format
 msgid "warning: overriding commands for target `%s'"
-msgstr "·Ù¹ð: ¥¿¡¼¥²¥Ã¥È `%s' ¤Ø¤Î¥³¥Þ¥ó¥É¤ò¾å½ñ¤­¤·¤Þ¤¹"
+msgstr "·Ù¹ð: ¥¿¡¼¥²¥Ã¥È `%s' ¤Ø¤Î¥³¥Þ¥ó¥É¤òÃÖ¤­´¹¤¨¤Þ¤¹"
 
 #: read.c:1653
 #, c-format
@@ -1259,7 +1260,7 @@ msgstr "`%s' 
 #: remake.c:228
 #, c-format
 msgid "`%s' is up to date."
-msgstr "`%s' ¤Ï¹¹¿·ºÑ¤Ç¤¹"
+msgstr "`%s' ¤Ï¹¹¿·ºÑ¤ߤǤ¹"
 
 #: remake.c:296
 #, c-format
@@ -1354,12 +1355,12 @@ msgstr "ɬ
 #: remake.c:609
 #, c-format
 msgid "Target `%s' is double-colon and has no prerequisites.\n"
-msgstr "¥¿¡¼¥²¥Ã¥È `%s' ¤Ï¥À¥Ö¥ë¥³¥í¥ó¤Ç¡¢³î¤ÄɬÍ×¾ò·ï¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó¡£\n"
+msgstr "¥¿¡¼¥²¥Ã¥È `%s' ¤Ï¥À¥Ö¥ë¥³¥í¥ó¤Ç¡¢¤«¤ÄɬÍ×¾ò·ï¤ò»ý¤¿¤Ê¤¤¡£\n"
 
 #: remake.c:615
 #, c-format
 msgid "No commands for `%s' and no prerequisites actually changed.\n"
-msgstr "`%s' ¤Î¤¿¤á¤Î¥³¥Þ¥ó¥É¤¬Ìµ¤¯¡¢³î¤Ä¼ÂºÝ¤ËÊѹ¹¤µ¤ì¤¿É¬Í×¾ò·ï¤¬¤Ê¤¤¡£\n"
+msgstr "`%s' ¤Î¤¿¤á¤Î¥³¥Þ¥ó¥É¤¬Ìµ¤¯¡¢¤«¤Ä¼ÂºÝ¤ËÊѹ¹¤µ¤ì¤¿É¬Í×¾ò·ï¤¬¤Ê¤¤¡£\n"
 
 #: remake.c:623
 #, c-format
@@ -1425,12 +1426,12 @@ msgstr ".LIBPATTERNS 
 
 #: rule.c:671
 msgid "\n# No implicit rules."
-msgstr "\n# °ÅÌۥ롼¥ë̵¤·¡£"
+msgstr "\n# °ÅÌۥ롼¥ë¤Ê¤·¡£"
 
 #: rule.c:674
 #, c-format
 msgid "\n# %u implicit rules, %u"
-msgstr "\n# %u ¸Ä¤Î°ÅÌۥ롼¥ë%u"
+msgstr "\n# %u ¸Ä¤Î°ÅÌۥ롼¥ë¡¢%u"
 
 #: rule.c:683
 msgid " terminal."
@@ -1447,7 +1448,7 @@ msgstr "\n# 
 
 #: rule.c:710
 msgid "\n# No pattern-specific variable values."
-msgstr "\n# ¥Ñ¥¿¡¼¥ó»ØÄêÊÑ¿ô¤ÎÃÍ̵¤·¡£"
+msgstr "\n# ¥Ñ¥¿¡¼¥ó»ØÄêÊÑ¿ô¤ÎÃͤʤ·¡£"
 
 #: rule.c:713
 #, c-format
@@ -1647,7 +1648,7 @@ msgstr "
 
 #: variable.c:1167
 msgid "# No variables."
-msgstr "# ÊÑ¿ô̵¤·¡£"
+msgstr "# ÊÑ¿ô¤Ê¤·¡£"
 
 #: variable.c:1170
 #, c-format
@@ -1657,12 +1658,12 @@ msgstr "# %u 
 #: variable.c:1173
 #, c-format
 msgid "# average of %.1f variables per bucket, max %u in one bucket.\n"
-msgstr "# ¥Ï¥Ã¥·¥åÍ×ÁÇÅö¤êÊ¿¶Ñ %.1f ¸Ä, °ì¥Ï¥Ã¥·¥å¤ËºÇÂç %u ¸Ä¤ÎÊÑ¿ô¤¬¤¢¤ê¤Þ¤¹¡£\n"
+msgstr "# ¥Ï¥Ã¥·¥åÍ×ÁǤ¢¤¿¤ê¡¢Ê¿¶Ñ %.1f ¸Ä¡¢ºÇÂç %u ¸Ä¤ÎÊÑ¿ô¤¬¤¢¤ê¤Þ¤¹¡£\n"
 
 #: variable.c:1180
 #, c-format
 msgid "# average of %d.%d variables per bucket, max %u in one bucket.\n"
-msgstr "# ¥Ï¥Ã¥·¥åÍ×ÁÇÅö¤êÊ¿¶Ñ %d.%d ¸Ä, °ì¥Ï¥Ã¥·¥å¤ËºÇÂç %u ¸Ä¤ÎÊÑ¿ô¤¬¤¢¤ê¤Þ¤¹¡£\n"
+msgstr "# ¥Ï¥Ã¥·¥åÍ×ÁǤ¢¤¿¤êÊ¿¶Ñ %d.%d ¸Ä¡¢ºÇÂç %u ¸Ä¤ÎÊÑ¿ô¤¬¤¢¤ê¤Þ¤¹¡£\n"
 
 #: variable.c:1195
 msgid "\n# Variables\n"
@@ -1683,7 +1684,7 @@ msgstr "\n# %u 
 
 #: vpath.c:574
 msgid "\n# No general (`VPATH' variable) search path."
-msgstr "\n# °ìÈ̤Π(`VPATH' ÊÑ¿ô) Ãµº÷¥Ñ¥¹̵¤·¡£"
+msgstr "\n# °ìÈ̤Π(`VPATH' ÊÑ¿ô) Ãµº÷¥Ñ¥¹¤Ê¤·¡£"
 
 #: vpath.c:580
 msgid ""
diff --git a/job.c b/job.c
index d517711..615e4b3 100644 (file)
--- a/job.c
+++ b/job.c
@@ -2421,7 +2421,7 @@ construct_command_argv_internal (line, restp, shell, ifs, batch_filename_ptr)
   char*  sh_chars;
   char** sh_cmds;
 #else  /* WINDOWS32 */
-  static char sh_chars[] = "#;\"*?[]&|<>(){}$`^";
+  static char sh_chars[] = "#;\"*?[]&|<>(){}$`^~";
   static char *sh_cmds[] = { "cd", "eval", "exec", "exit", "login",
                             "logout", "set", "umask", "wait", "while", "for",
                             "case", "if", ":", ".", "break", "continue",
index d6434cb..ca05fba 100644 (file)
@@ -18,6 +18,7 @@
 @c finalout
 
 @c ISPELL CHECK: done, 10 June 1993 --roland
+@c ISPELL CHECK: done, 2000-06-25 --Martin Buchholz
 
 @c Combine the variable and function indices:
 @syncodeindex vr fn
@@ -1105,8 +1106,8 @@ makefile as has been traditionally done with other versions of
 
 @cindex @code{-I}
 @cindex @code{--include-dir}
-@cindex included makefiles, default directries
-@cindex default directries for included makefiles
+@cindex included makefiles, default directories
+@cindex default directories for included makefiles
 @findex /usr/gnu/include
 @findex /usr/local/include
 @findex /usr/include
@@ -2200,7 +2201,7 @@ subdirs:
 @end group
 @end example
 
-There are a few of problems with this method, however.  First, any error
+There are a few problems with this method, however.  First, any error
 detected in a submake is not noted by this rule, so it will continue to
 build the rest of the directories even when one fails.  This can be
 overcome by adding shell commands to note the error and exit, but then
@@ -2451,6 +2452,42 @@ this affects every command in the makefile, it is not very useful; we
 recommend you use the more selective ways to ignore errors in specific
 commands.  @xref{Errors, ,Errors in Commands}.
 
+@findex .LOW_RESOLUTION_TIME
+@item .LOW_RESOLUTION_TIME
+
+If you specify prerequisites for @code{.LOW_RESOLUTION_TIME},
+@command{make} assumes that these files are created by commands that
+generate low resolution time stamps.  The commands for
+@code{.LOW_RESOLUTION_TIME} are not meaningful.
+
+The high resolution file time stamps of many modern hosts lessen the
+chance of @command{make} incorrectly concluding that a file is up to
+date.  Unfortunately, these hosts provide no way to set a high
+resolution file time stamp, so commands like @samp{cp -p} that
+explicitly set a file's time stamp must discard its subsecond part.  If
+a file is created by such a command, you should list it as a dependency
+of @code{.LOW_RESOLUTION_TIME} so that @command{make} does not
+mistakenly conclude that the file is out of date.  For example:
+
+@example
+@group
+.LOW_RESOLUTION_TIME: dst
+dst: src
+        cp -p src dst
+@end group
+@end example
+
+Since @samp{cp -p} discards the subsecond part of @file{src}'s time
+stamp, @file{dst} is typically slightly older than @file{src} even when
+it is up to date.  The @code{.LOW_RESOLUTION_TIME} line causes
+@command{make} to consider @file{dst} to be up to date if its time stamp
+is at the start of the same second that @file{src}'s time stamp is in.
+
+Due to a limitation of the archive format, archive member time stamps
+are always low resolution.  You need not list archive members as
+dependencies of @code{.LOW_RESOLUTION_TIME}, as @command{make} does this
+automatically.
+
 @findex .SILENT
 @item .SILENT
 
@@ -3341,7 +3378,7 @@ default.
 @cindex target, deleting on error
 Usually when a command fails, if it has changed the target file at all,
 the file is corrupted and cannot be used---or at least it is not
-completely updated.  Yet the file's timestamp says that it is now up to
+completely updated.  Yet the file's time stamp says that it is now up to
 date, so the next time @code{make} runs, it will not try to update that
 file.  The situation is just the same as when the command is killed by a
 signal; @pxref{Interrupts}.  So generally the right thing to do is to
@@ -6084,7 +6121,7 @@ This one is slightly more interesting: it defines a macro to search for
 the first instance of a program in @code{PATH}:
 
 @smallexample
-pathsearch = $(firstword $(wildcard $(addsufix /$(1),$(subst :, ,$(PATH)))))
+pathsearch = $(firstword $(wildcard $(addsuffix /$(1),$(subst :, ,$(PATH)))))
 
 LS := $(call pathsearch,ls)
 @end smallexample
index 0f9f2aa..2fd85e8 100644 (file)
--- a/remake.c
+++ b/remake.c
@@ -396,14 +396,15 @@ update_file_1 (file, depth)
   noexist = this_mtime == NONEXISTENT_MTIME;
   if (noexist)
     DBF (DB_BASIC, _("File `%s' does not exist.\n"));
-  else
+  else if (ORDINARY_MTIME_MIN <= this_mtime && this_mtime <= ORDINARY_MTIME_MAX
+          && file->low_resolution_time)
     {
-#ifndef NO_ARCHIVES
-      /* Avoid spurious rebuilds of archive members due to their
-         timestamp resolution being only one second.  */
-      if (1 < FILE_TIMESTAMPS_PER_S && ar_name (file->name))
-       this_mtime += FILE_TIMESTAMPS_PER_S - 1;
-#endif
+      /* Avoid spurious rebuilds due to low resolution time stamps.  */
+      int ns = FILE_TIMESTAMP_NS (this_mtime);
+      if (ns != 0)
+       error (NILF, _("*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp"),
+              file->name);
+      this_mtime += FILE_TIMESTAMPS_PER_S - 1 - ns;
     }
 
   must_make = noexist;
@@ -1106,6 +1107,8 @@ f_mtime (file, search)
        free (arname);
       free (memname);
 
+      file->low_resolution_time = 1;
+
       if (mtime == NONEXISTENT_MTIME)
        /* The archive doesn't exist, so its members don't exist either.  */
        return NONEXISTENT_MTIME;