emaste created this revision.
emaste added reviewers: brooks, bapt.
emaste added a subscriber: freebsd-toolchain-list.

REVISION SUMMARY
  I'd like to make ar(1) produce deterministic output by default. In order to 
do so we'll first need an option to turn off deterministic mode.
  
  Note that this is against upstream ELF Tool Chain ar(1), which is a little 
different from the one in the FreeBSD tree. I plan to migrate to ELF Tool 
Chain's eventually, but this change should apply (perhaps with trivial 
modification) to FreeBSD's.

REVISION DETAIL
  https://reviews.freebsd.org/D3175

AFFECTED FILES
  ar/ar.1
  ar/ar.c

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: emaste, brooks, bapt
Cc: freebsd-toolchain-list
diff --git a/ar/ar.c b/ar/ar.c
--- a/ar/ar.c
+++ b/ar/ar.c
@@ -123,15 +123,18 @@
 	len = strlen(bsdar->progname);
 	if (len >= strlen("ranlib") &&
 	    strcmp(bsdar->progname + len - strlen("ranlib"), "ranlib") == 0) {
-		while ((opt = getopt_long(argc, argv, "tDV", longopts,
+		while ((opt = getopt_long(argc, argv, "tDUV", longopts,
 		    NULL)) != -1) {
 			switch(opt) {
 			case 't':
 				/* Ignored. */
 				break;
 			case 'D':
 				bsdar->options |= AR_D;
 				break;
+			case 'U':
+				bsdar->options &= ~AR_D;
+				break;
 			case 'V':
 				bsdar_version();
 				break;
@@ -169,7 +172,7 @@
 		}
 	}
 
-	while ((opt = getopt_long(argc, argv, "abCcdDfF:ijlMmopqrSsTtuVvxz",
+	while ((opt = getopt_long(argc, argv, "abCcdDfF:ijlMmopqrSsTtUuVvxz",
 	    longopts, NULL)) != -1) {
 		switch(opt) {
 		case 'a':
@@ -237,6 +240,9 @@
 		case 't':
 			set_mode(bsdar, opt);
 			break;
+		case 'U':
+			bsdar->options &= ~AR_D;
+			break;
 		case 'u':
 			bsdar->options |= AR_U;
 			break;
@@ -400,7 +406,8 @@
   -D            Use fixed metadata, for consistent archive checksums.\n\
   -F FORMAT | --flavor=FORMAT\n\
                 Create archives with the specified format.\n\
-  -S            Do not generate an archive symbol table.\n"
+  -S            Do not generate an archive symbol table.\n\
+  -U            Use original metadata, for unique archive checksums.\n"
 
 static void
 bsdar_usage(void)
@@ -415,6 +422,7 @@
   Options:\n\
   -t              (This option is accepted, but ignored).\n\
   -D              Use fixed metadata, for consistent archive checksums.\n\
+  -U              Use original metadata, for unique archive checksums.\n\
   -V              Print a version identifier and exit.\n"
 
 static void
diff --git a/ar/ar.1 b/ar/ar.1
--- a/ar/ar.1
+++ b/ar/ar.1
@@ -23,7 +23,7 @@
 .\"
 .\" $Id$
 .\"
-.Dd December 10, 2012
+.Dd July 23, 2015
 .Os
 .Dt AR 1
 .Sh NAME
@@ -66,6 +66,7 @@
 .Op Fl f
 .Op Fl F Ar flavor | Fl -flavor Ar flavor
 .Op Fl s | Fl S
+.Op Fl U
 .Op Fl v
 .Op Fl z
 .Ar archive
@@ -83,14 +84,16 @@
 .Op Fl j
 .Op Fl s | Fl S
 .Op Fl u
+.Op Fl U
 .Op Fl v
 .Op Fl z
 .Ar archive
 .Ar
 .Nm
 .Fl s
 .Op Fl D
 .Op Fl j
+.Op Fl U
 .Op Fl z
 .Ar archive
 .Nm
@@ -203,6 +206,12 @@
 .Ar .
 This ensures that checksums on the resulting archives are reproducible
 when member contents are identical.
+If the
+.It Fl D
+and
+.It Fl U
+options are both specified, the one specified later in the command line
+takes effect.
 .It Fl f
 Synonymous with option
 .Fl T .
@@ -335,6 +344,20 @@
 .Ar
 will be extracted only if they are newer than the corresponding
 files in the file system.
+.It Fl U
+When used in combination with the
+.Fl r
+or
+.Fl q
+option, insert the real mtime, uid and gid, and file mode values
+from the members named by arguments
+.Ar .
+If the
+.It Fl D
+and
+.It Fl U
+options are both specified, the one specified later in the command line
+takes effect.
 .It Fl v
 Provide verbose output.
 When used with the

_______________________________________________
freebsd-toolchain@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"

Reply via email to