aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2011-12-21 19:39:11 +0000
committerRoland McGrath <roland@gnu.org>2011-12-21 19:39:11 +0000
commit9cb80f72d8b8b2f59562692d9385cd5a533e9b3f (patch)
tree4078a2fd60a6db5f5f129aca712554d99e2080b6 /binutils
parent74929e7bba5eb4a9499d5d6d08e78fc76596edbe (diff)
downloadfsf-binutils-gdb-9cb80f72d8b8b2f59562692d9385cd5a533e9b3f.zip
fsf-binutils-gdb-9cb80f72d8b8b2f59562692d9385cd5a533e9b3f.tar.gz
fsf-binutils-gdb-9cb80f72d8b8b2f59562692d9385cd5a533e9b3f.tar.bz2
* configure.in (--enable-deterministic-archives): Grok new
argument. Set DEFAULT_AR_DETERMINISTIC to 1 or 0 accordingly. * configure: Regenerated. * config.in: Regenerated. * ar.c (deterministic): Initialize to -1. (decode_options, ranlib_main): Grok U option. (usage, ranlib_usage): Mention U; say for D and U which is the default. (default_deterministic): New function. (ranlib_main): Call it. (main): Likewise. Make newer_only && deterministic error non-fatal if it was just DEFAULT_AR_DETERMINISTIC and not the D option. * doc/binutils.texi (ar cmdline, ranlib): Document U modifier and --enable-deterministic-archives behavior.
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog16
-rw-r--r--binutils/ar.c57
-rw-r--r--binutils/config.in3
-rwxr-xr-xbinutils/configure26
-rw-r--r--binutils/configure.in20
-rw-r--r--binutils/doc/binutils.texi29
6 files changed, 138 insertions, 13 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 9c6b58f..d01c5eb 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,19 @@
+2011-12-20 Roland McGrath <mcgrathr@google.com>
+
+ * configure.in (--enable-deterministic-archives): Grok new
+ argument. Set DEFAULT_AR_DETERMINISTIC to 1 or 0 accordingly.
+ * configure: Regenerated.
+ * config.in: Regenerated.
+ * ar.c (deterministic): Initialize to -1.
+ (decode_options, ranlib_main): Grok U option.
+ (usage, ranlib_usage): Mention U; say for D and U which is the default.
+ (default_deterministic): New function.
+ (ranlib_main): Call it.
+ (main): Likewise. Make newer_only && deterministic error
+ non-fatal if it was just DEFAULT_AR_DETERMINISTIC and not the D option.
+ * doc/binutils.texi (ar cmdline, ranlib): Document U modifier and
+ --enable-deterministic-archives behavior.
+
2011-12-16 Tristan Gingold <gingold@adacore.com>
* od-macho.c: Include mach-o/codesign.h
diff --git a/binutils/ar.c b/binutils/ar.c
index 676e92c..0310b6f 100644
--- a/binutils/ar.c
+++ b/binutils/ar.c
@@ -97,7 +97,7 @@ int write_armap = 0;
/* Operate in deterministic mode: write zero for timestamps, uids,
and gids for archive members and the archive symbol table, and write
consistent file modes. */
-int deterministic = 0;
+int deterministic = -1; /* Determinism indeterminate. */
/* Nonzero means it's the name of an existing member; position new or moved
files with respect to this one. */
@@ -276,7 +276,20 @@ usage (int help)
fprintf (s, _(" command specific modifiers:\n"));
fprintf (s, _(" [a] - put file(s) after [member-name]\n"));
fprintf (s, _(" [b] - put file(s) before [member-name] (same as [i])\n"));
- fprintf (s, _(" [D] - use zero for timestamps and uids/gids\n"));
+ if (DEFAULT_AR_DETERMINISTIC)
+ {
+ fprintf (s, _("\
+ [D] - use zero for timestamps and uids/gids (default)\n"));
+ fprintf (s, _("\
+ [U] - use actual timestamps and uids/gids\n"));
+ }
+ else
+ {
+ fprintf (s, _("\
+ [D] - use zero for timestamps and uids/gids\n"));
+ fprintf (s, _("\
+ [U] - use actual timestamps and uids/gids (default)\n"));
+ }
fprintf (s, _(" [N] - use instance [count] of name\n"));
fprintf (s, _(" [f] - truncate inserted file names\n"));
fprintf (s, _(" [P] - use full path names when matching\n"));
@@ -322,9 +335,16 @@ ranlib_usage (int help)
fprintf (s, _("\
--plugin <name> Load the specified plugin\n"));
#endif
+ if (DEFAULT_AR_DETERMINISTIC)
+ fprintf (s, _("\
+ -D Use zero for symbol map timestamp (default)\n\
+ -U Use an actual symbol map timestamp\n"));
+ else
+ fprintf (s, _("\
+ -D Use zero for symbol map timestamp\n\
+ -U Use actual symbol map timestamp (default)\n"));
fprintf (s, _("\
-t Update the archive's symbol map timestamp\n\
- -D Use zero for the symbol map timestamp\n\
-h --help Print this help message\n\
-v --version Print version information\n"));
@@ -434,7 +454,7 @@ decode_options (int argc, char **argv)
argv = new_argv;
}
- while ((c = getopt_long (argc, argv, "hdmpqrtxlcoVsSuvabiMNfPTD",
+ while ((c = getopt_long (argc, argv, "hdmpqrtxlcoVsSuvabiMNfPTDU",
long_options, NULL)) != EOF)
{
switch (c)
@@ -531,6 +551,9 @@ decode_options (int argc, char **argv)
case 'D':
deterministic = TRUE;
break;
+ case 'U':
+ deterministic = FALSE;
+ break;
case OPTION_PLUGIN:
#if BFD_SUPPORTS_PLUGINS
plugin_target = "plugin";
@@ -553,6 +576,15 @@ decode_options (int argc, char **argv)
return &argv[optind];
}
+/* If neither -D nor -U was not specified explicitly,
+ then use the configured default. */
+static void
+default_deterministic (void)
+{
+ if (deterministic < 0)
+ deterministic = DEFAULT_AR_DETERMINISTIC;
+}
+
static void
ranlib_main (int argc, char **argv)
{
@@ -560,13 +592,16 @@ ranlib_main (int argc, char **argv)
bfd_boolean touch = FALSE;
int c;
- while ((c = getopt_long (argc, argv, "DhHvVt", long_options, NULL)) != EOF)
+ while ((c = getopt_long (argc, argv, "DhHUvVt", long_options, NULL)) != EOF)
{
switch (c)
{
case 'D':
deterministic = TRUE;
break;
+ case 'U':
+ deterministic = FALSE;
+ break;
case 'h':
case 'H':
show_help = 1;
@@ -590,6 +625,8 @@ ranlib_main (int argc, char **argv)
if (show_version)
print_version ("ranlib");
+ default_deterministic ();
+
arg_index = optind;
while (arg_index < argc)
@@ -699,8 +736,14 @@ main (int argc, char **argv)
if (newer_only && operation != replace)
fatal (_("`u' is only meaningful with the `r' option."));
- if (newer_only && deterministic)
- fatal (_("`u' is not meaningful with the `D' option."));
+ if (newer_only && deterministic > 0)
+ fatal (_("`u' is not meaningful with the `D' option."));
+
+ if (newer_only && deterministic < 0 && DEFAULT_AR_DETERMINISTIC)
+ non_fatal (_("\
+`u' modifier ignored since `D' is the default (see `U')"));
+
+ default_deterministic ();
if (postype != pos_default)
posname = argv[arg_index++];
diff --git a/binutils/config.in b/binutils/config.in
index 0cb7290..62bdfa1 100644
--- a/binutils/config.in
+++ b/binutils/config.in
@@ -8,6 +8,9 @@
/* Define to 1 if using `alloca.c'. */
#undef C_ALLOCA
+/* Should ar and ranlib use -D behavior by default? */
+#undef DEFAULT_AR_DETERMINISTIC
+
/* Define to 1 if translation of program messages to the user's native
language is requested. */
#undef ENABLE_NLS
diff --git a/binutils/configure b/binutils/configure
index b46a30b..028abb9 100755
--- a/binutils/configure
+++ b/binutils/configure
@@ -771,6 +771,7 @@ enable_fast_install
with_gnu_ld
enable_libtool_lock
enable_targets
+enable_deterministic_archives
enable_werror
enable_build_warnings
enable_nls
@@ -1417,6 +1418,8 @@ Optional Features:
optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
--enable-targets alternative target configurations
+ --enable-deterministic-archives
+ ar and ranlib default to -D behavior
--enable-werror treat compile warnings as errors
--enable-build-warnings enable build-time compiler warnings
--disable-nls do not use Native Language Support
@@ -11199,7 +11202,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11202 "configure"
+#line 11205 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11305,7 +11308,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11308 "configure"
+#line 11311 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11553,6 +11556,25 @@ if test "${enable_targets+set}" = set; then :
esac
fi
+# Check whether --enable-deterministic-archives was given.
+if test "${enable_deterministic_archives+set}" = set; then :
+ enableval=$enable_deterministic_archives;
+if test "${enableval}" = no; then
+ default_ar_deterministic=0
+else
+ default_ar_deterministic=1
+fi
+else
+ default_ar_deterministic=0
+fi
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_AR_DETERMINISTIC $default_ar_deterministic
+_ACEOF
+
+
GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
diff --git a/binutils/configure.in b/binutils/configure.in
index 1f3b25d..d38b677 100644
--- a/binutils/configure.in
+++ b/binutils/configure.in
@@ -28,8 +28,20 @@ AC_ARG_ENABLE(targets,
*) enable_targets=$enableval ;;
esac])dnl
+AC_ARG_ENABLE(deterministic-archives,
+[AS_HELP_STRING([--enable-deterministic-archives],
+ [ar and ranlib default to -D behavior])], [
+if test "${enableval}" = no; then
+ default_ar_deterministic=0
+else
+ default_ar_deterministic=1
+fi], [default_ar_deterministic=0])
+
+AC_DEFINE_UNQUOTED(DEFAULT_AR_DETERMINISTIC, $default_ar_deterministic,
+ [Should ar and ranlib use -D behavior by default?])
+
AM_BINUTILS_WARNINGS
-
+
AC_CONFIG_HEADERS(config.h:config.in)
if test -z "$target" ; then
@@ -203,7 +215,7 @@ do
else
case $targ in
changequote(,)dnl
- i[3-7]86*-*-netware*)
+ i[3-7]86*-*-netware*)
changequote([,])dnl
BUILD_NLMCONV='$(NLMCONV_PROG)$(EXEEXT)'
NLMCONV_DEFS="$NLMCONV_DEFS -DNLMCONV_I386"
@@ -432,11 +444,11 @@ fi
AC_DEFINE_UNQUOTED(TARGET_PREPENDS_UNDERSCORE, $UNDERSCORE,
[Define to 1 if user symbol names have a leading underscore, 0 if not.])
-# Emulation
+# Emulation
targ=$target
. ${srcdir}/configure.tgt
EMULATION=$targ_emul
-EMULATION_VECTOR=$targ_emul_vector
+EMULATION_VECTOR=$targ_emul_vector
AC_SUBST(EMULATION)
AC_SUBST(EMULATION_VECTOR)
diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi
index 3217a1a..76998bc 100644
--- a/binutils/doc/binutils.texi
+++ b/binutils/doc/binutils.texi
@@ -418,6 +418,7 @@ using this modifier.
@item D
@cindex deterministic archives
+@kindex --enable-deterministic-archives
Operate in @emph{deterministic} mode. When adding files and the archive
index use zero for UIDs, GIDs, timestamps, and use consistent file modes
for all files. When this option is used, if @command{ar} is used with
@@ -425,6 +426,10 @@ identical options and identical input files, multiple runs will create
identical output files regardless of the input files' owners, groups,
file modes, or modification times.
+If @file{binutils} was configured with
+@option{--enable-deterministic-archives}, then this mode is on by default.
+It can be disabled with the @samp{U} modifier, below.
+
@item f
Truncate names in the archive. @sc{gnu} @command{ar} will normally permit file
names of any length. This will cause it to create archives which are
@@ -493,6 +498,16 @@ operation @samp{r} (replace). In particular, the combination @samp{qu} is
not allowed, since checking the timestamps would lose any speed
advantage from the operation @samp{q}.
+@item U
+@cindex deterministic archives
+@kindex --enable-deterministic-archives
+Do @emph{not} operate in @emph{deterministic} mode. This is the inverse
+of the @samp{D} modifier, above: added files and the archive index will
+get their actual UID, GID, timestamp, and file mode values.
+
+This is the default unless @file{binutils} was configured with
+@option{--enable-deterministic-archives}.
+
@item v
This modifier requests the @emph{verbose} version of an operation. Many
operations display additional information, such as filenames processed,
@@ -2386,12 +2401,26 @@ Show the version number of @command{ranlib}.
@item -D
@cindex deterministic archives
+@kindex --enable-deterministic-archives
Operate in @emph{deterministic} mode. The symbol map archive member's
header will show zero for the UID, GID, and timestamp. When this
option is used, multiple runs will produce identical output files.
+This is the default unless @file{binutils} was configured with
+@option{--enable-deterministic-archives}.
+
@item -t
Update the timestamp of the symbol map of an archive.
+
+@item -U
+@cindex deterministic archives
+@kindex --enable-deterministic-archives
+Do @emph{not} operate in @emph{deterministic} mode. This is the
+inverse of the @samp{-D} option, above: the archive index will get
+actual UID, GID, timestamp, and file mode values.
+
+This is the default unless @file{binutils} was configured with
+@option{--enable-deterministic-archives}.
@end table
@c man end