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"