summaryrefslogtreecommitdiff
path: root/usr.bin/ar
diff options
context:
space:
mode:
authorEd Maste <emaste@FreeBSD.org>2015-07-24 17:46:43 +0000
committerEd Maste <emaste@FreeBSD.org>2015-07-24 17:46:43 +0000
commit7072861cd00ced056de90d47ab1a16e5170356e8 (patch)
tree7566bdb054108a7aee1b2f1b278115fc4fb88bb3 /usr.bin/ar
parent86fb54003393c8c3c586df44fc31d7861e121ef3 (diff)
downloadsrc-test2-7072861cd00ced056de90d47ab1a16e5170356e8.tar.gz
src-test2-7072861cd00ced056de90d47ab1a16e5170356e8.zip
ar: add -U (unique) option to disable -D (deterministic) mode
This is required in order for us to support deterministic mode by default. If multiple -D or -U options are specified on the command line, the final one takes precedence. GNU ar also uses -U for this. An equivalent change will be applied to ELF Tool Chain's version of ar. PR: 196929 MFC after: 1 month Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D3175
Notes
Notes: svn path=/head/; revision=285844
Diffstat (limited to 'usr.bin/ar')
-rw-r--r--usr.bin/ar/ar.123
-rw-r--r--usr.bin/ar/ar.c18
2 files changed, 34 insertions, 7 deletions
diff --git a/usr.bin/ar/ar.1 b/usr.bin/ar/ar.1
index 1ef8c89fd7ed..02e99f1a92c9 100644
--- a/usr.bin/ar/ar.1
+++ b/usr.bin/ar/ar.1
@@ -23,7 +23,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 22, 2011
+.Dd July 24, 2015
.Dt AR 1
.Os
.Sh NAME
@@ -66,6 +66,7 @@
.Op Fl D
.Op Fl f
.Op Fl s | Fl S
+.Op Fl U
.Op Fl v
.Op Fl z
.Ar archive
@@ -82,6 +83,7 @@
.Op Fl j
.Op Fl s | Fl S
.Op Fl u
+.Op Fl U
.Op Fl v
.Op Fl z
.Ar archive
@@ -112,6 +114,7 @@
.Fl M
.Nm ranlib
.Op Fl D
+.Op Fl U
.Ar archive ...
.Sh DESCRIPTION
The
@@ -207,6 +210,11 @@ and 0644 instead of file mode from the members named by arguments
.Ar .
This ensures that checksums on the resulting archives are reproducible
when member contents are identical.
+If multiple
+.Fl D
+and
+.Fl U
+options are specified on the command line, the final one takes precedence.
.It Fl f
Synonymous with option
.Fl T .
@@ -316,6 +324,19 @@ option, the members specified by arguments
.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 multiple
+.Fl D
+and
+.Fl U
+options are specified on the command line, the final one takes precedence.
.It Fl v
Provide verbose output.
When used with the
diff --git a/usr.bin/ar/ar.c b/usr.bin/ar/ar.c
index 7c76290207ea..3d5e2b87667b 100644
--- a/usr.bin/ar/ar.c
+++ b/usr.bin/ar/ar.c
@@ -113,7 +113,7 @@ main(int argc, char **argv)
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':
@@ -122,6 +122,9 @@ main(int argc, char **argv)
case 'D':
bsdar->options |= AR_D;
break;
+ case 'U':
+ bsdar->options &= ~AR_D;
+ break;
case 'V':
ranlib_version();
break;
@@ -157,7 +160,7 @@ main(int argc, char **argv)
}
}
- while ((opt = getopt_long(argc, argv, "abCcdDfijlMmopqrSsTtuVvxz",
+ while ((opt = getopt_long(argc, argv, "abCcdDfijlMmopqrSsTtUuVvxz",
longopts, NULL)) != -1) {
switch(opt) {
case 'a':
@@ -216,6 +219,9 @@ main(int argc, char **argv)
case 't':
set_mode(bsdar, opt);
break;
+ case 'U':
+ bsdar->options &= ~AR_D;
+ break;
case 'u':
bsdar->options |= AR_U;
break;
@@ -364,9 +370,9 @@ bsdar_usage(void)
(void)fprintf(stderr, "\tar -m [-Tjsvz] archive file ...\n");
(void)fprintf(stderr, "\tar -m [-Tabijsvz] position archive file ...\n");
(void)fprintf(stderr, "\tar -p [-Tv] archive [file ...]\n");
- (void)fprintf(stderr, "\tar -q [-TcDjsvz] archive file ...\n");
- (void)fprintf(stderr, "\tar -r [-TcDjsuvz] archive file ...\n");
- (void)fprintf(stderr, "\tar -r [-TabcDijsuvz] position archive file ...\n");
+ (void)fprintf(stderr, "\tar -q [-TcDjsUvz] archive file ...\n");
+ (void)fprintf(stderr, "\tar -r [-TcDjsUuvz] archive file ...\n");
+ (void)fprintf(stderr, "\tar -r [-TabcDijsUuvz] position archive file ...\n");
(void)fprintf(stderr, "\tar -s [-jz] archive\n");
(void)fprintf(stderr, "\tar -t [-Tv] archive [file ...]\n");
(void)fprintf(stderr, "\tar -x [-CTouv] archive [file ...]\n");
@@ -378,7 +384,7 @@ static void
ranlib_usage(void)
{
- (void)fprintf(stderr, "usage: ranlib [-t] archive ...\n");
+ (void)fprintf(stderr, "usage: ranlib [-DtU] archive ...\n");
(void)fprintf(stderr, "\tranlib -V\n");
exit(EX_USAGE);
}