summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog50
-rw-r--r--NEWS13
-rw-r--r--configure.in51
-rw-r--r--dir.c3
-rw-r--r--file.c48
-rw-r--r--filedef.h7
-rw-r--r--i18n/ja.po123
-rw-r--r--job.c2
-rw-r--r--make.texinfo47
-rw-r--r--remake.c17
10 files changed, 235 insertions, 126 deletions
diff --git a/ChangeLog b/ChangeLog
index f057bd2..9009827 100644
--- 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
--- 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.
+* 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.
Version 3.79
diff --git a/configure.in b/configure.in
index a76bf31..1e680a9 100644
--- a/configure.in
+++ b/configure.in
@@ -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
--- 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
--- 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);
diff --git a/filedef.h b/filedef.h
index 19f24f8..4a5b9dd 100644
--- 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
diff --git a/i18n/ja.po b/i18n/ja.po
index 017ee88..cb83b24 100644
--- a/i18n/ja.po
+++ b/i18n/ja.po
@@ -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' への ar_member_touch から異常な値が返りました"
#: 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 "ライブラリ `%s' を開けず、メンバ `%s' の検索ができません"
#: 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 "*** 中断。\n"
#: 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 "警告: 未定義の変数 `%.*s'"
#. 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 個のファイルがサイズ %u のハッシュ内にあります。\n"
#: 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 "引数の数(%d)が関数 `%s' にとって不十分です"
#: 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: オプション `%s' は曖昧です\n"
#: 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: 認識できないオプション `%c%s'\n"
#: 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 "警告: 空のリダイレクト\n"
#: job.c:352
msgid "Syntax error, still inside '\"'\n"
-msgstr "文法エラー, '\"' 内のままです\n"
+msgstr "文法エラー、'\"' 内のままです\n"
#: job.c:404
#, c-format
@@ -538,7 +539,7 @@ msgstr "SIGCHLD が発生; %u 個の未回収子プロセス。\n"
#: job.c:453
msgid "*** Waiting for unfinished jobs...."
-msgstr "*** 未了のジョブを待っています...."
+msgstr "*** 未完了のジョブを待っています...."
#: job.c:482
#, c-format
@@ -604,11 +605,11 @@ msgstr "ジョブのパイプの read"
#: 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 "内部エラー: `%s' command_state"
#: 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 "不明なビルトインコマンド '%s'\n"
#: 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 "代わりに %s を実行します\n"
#: 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 行目) 不正なシェルコンテキスト (!unixy && !batch_mode_shell)\n"
#: main.c:259
msgid "Ignored for compatibility"
-msgstr "互換性のためであり、無視されます"
+msgstr "互換性のためのもので、無視される"
#: main.c:261 main.c:288
msgid "DIRECTORY"
@@ -736,7 +737,7 @@ msgstr "デバッガに attach するためプロセスの一時停止を許可する"
#: 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 "インクルードされる makefile の探索先の DIRECTORY"
#: 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 "あるターゲットが make できなくても実行を続ける"
#: 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) が終わりました。続けます。\n"
#: 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 の更新中....\n"
#: 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 "インクルードされる makefile `%s' が見つかりませんでした。"
#: 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 "最終ターゲットを更新中....\n"
#: 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 "ディレクトリ `%s'\n"
#: 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 "分離記号を欠いています%s"
#: 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 "同一ルール内でターゲット `%s' が複数回与えられました。"
#: 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 "必要条件 `%s' はターゲット `%s' よりも古い。\n"
#: 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 要素 `%s' がパターンではありません"
#: 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 個の変数がサイズ %u のハッシュ内にあります。\n"
#: 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' 探索パス\n"
#: 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
--- 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",
diff --git a/make.texinfo b/make.texinfo
index d6434cb..ca05fba 100644
--- a/make.texinfo
+++ b/make.texinfo
@@ -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
diff --git a/remake.c b/remake.c
index 0f9f2aa..2fd85e8 100644
--- 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;