Implement '-D destdir'; if '-M metalog' is being used, remove a

leading `destdir' from the file name logged to the metalog.
The -D option has no effect on where the actual files are installed.
This commit is contained in:
lukem 2002-12-22 10:15:17 +00:00
parent 131dc6aa08
commit f766ef620d
2 changed files with 49 additions and 15 deletions

View File

@ -1,4 +1,4 @@
.\" $NetBSD: install.1,v 1.33 2002/12/19 09:17:01 wiz Exp $
.\" $NetBSD: install.1,v 1.34 2002/12/22 10:15:17 lukem Exp $
.\"
.\" Copyright (c) 1987, 1990, 1993
.\" The Regents of the University of California. All rights reserved.
@ -33,7 +33,7 @@
.\"
.\" @(#)install.1 8.1 (Berkeley) 6/6/93
.\"
.Dd December 19, 2002
.Dd December 21, 2002
.Dt INSTALL 1
.Os
.Sh NAME
@ -46,6 +46,9 @@
.Op Fl B Ar suffix
.Ek
.Bk -words
.Op Fl D Ar destdir
.Ek
.Bk -words
.Op Fl f Ar flags
.Ek
.Bk -words
@ -82,6 +85,9 @@
.Op Fl B Ar suffix
.Ek
.Bk -words
.Op Fl D Ar destdir
.Ek
.Bk -words
.Op Fl f Ar flags
.Ek
.Bk -words
@ -117,6 +123,9 @@
.Fl d
.Op Fl Up
.Bk -words
.Op Fl D Ar destdir
.Ek
.Bk -words
.Op Fl M Ar metalog
.Ek
.Bk -words
@ -206,6 +215,17 @@ where it deletes the original file after creating the target.
.It Fl d
Create directories.
Missing parent directories are created as required.
.It Fl D Ar destdir
Specify the
.Ev DESTDIR
(top of the file hierarchy) that the items are installed in to.
If
.Fl M Ar metalog
is in use, a leading string of
.Dq Ar destdir
will removed from the file names logged to the
.Ar metalog .
This option does not affect where the actual files are installed.
.It Fl f Ar flags
Specify the target's file flags.
(See

View File

@ -1,4 +1,4 @@
/* $NetBSD: xinstall.c,v 1.74 2002/12/19 08:30:39 lukem Exp $ */
/* $NetBSD: xinstall.c,v 1.75 2002/12/22 10:15:17 lukem Exp $ */
/*
* Copyright (c) 1987, 1993
@ -50,7 +50,7 @@ __COPYRIGHT("@(#) Copyright (c) 1987, 1993\n\
#if 0
static char sccsid[] = "@(#)xinstall.c 8.1 (Berkeley) 7/21/93";
#else
__RCSID("$NetBSD: xinstall.c,v 1.74 2002/12/19 08:30:39 lukem Exp $");
__RCSID("$NetBSD: xinstall.c,v 1.75 2002/12/22 10:15:17 lukem Exp $");
#endif
#endif /* not lint */
@ -93,6 +93,7 @@ u_long fileflags;
char *stripArgs;
char *afterinstallcmd;
char *suffix = BACKUP_SUFFIX;
char *destdir;
#define LN_ABSOLUTE 0x01
#define LN_RELATIVE 0x02
@ -133,7 +134,8 @@ main(int argc, char *argv[])
setprogname(argv[0]);
iflags = 0;
while ((ch = getopt(argc, argv, "a:cbB:df:g:l:m:M:N:o:prsS:T:U")) != -1)
while ((ch = getopt(argc, argv, "a:cbB:dD:f:g:l:m:M:N:o:prsS:T:U"))
!= -1)
switch((char)ch) {
case 'a':
afterinstallcmd = strdup(optarg);
@ -167,6 +169,9 @@ main(int argc, char *argv[])
case 'd':
dodir = 1;
break;
case 'D':
destdir = optarg;
break;
#if !HAVE_CONFIG_H
case 'f':
fflags = optarg;
@ -920,7 +925,8 @@ metadata_log(const char *path, const char *type, struct timeval *tv,
const char *link)
{
static const char extra[] = { ' ', '\t', '\n', '\\', '#', '\0' };
char *buf;
char *buf, *p;
size_t destlen;
struct flock metalog_lock;
if (!metafp)
@ -941,8 +947,16 @@ metadata_log(const char *path, const char *type, struct timeval *tv,
}
strsvis(buf, path, VIS_CSTYLE, extra); /* encode name */
fprintf(metafp, ".%s%s type=%s mode=%#o", /* print details */
buf[0] == '/' ? "" : "/", buf, type, mode);
p = buf; /* remove destdir */
if (destdir) {
destlen = strlen(destdir);
if (strncmp(p, destdir, destlen) == 0 && p[destlen] == '/')
p += destlen;
}
while (*p && *p == '/') /* remove leading /s */
p++;
/* print details */
fprintf(metafp, "./%s type=%s mode=%#o", p, type, mode);
if (link)
fprintf(metafp, " link=%s", link);
if (owner)
@ -1005,13 +1019,13 @@ usage(void)
prog = getprogname();
(void)fprintf(stderr,
"usage: %s [-Ubcprs] [-M log] [-T tags] [-B suffix] [-a afterinstallcmd]\n"
" [-f flags] [-m mode] [-N dbdir] [-o owner] [-g group] [-l linkflags]\n"
" [-S stripflags] file1 file2\n"
" %s [-Ubcprs] [-M log] [-T tags] [-B suffix] [-a afterinstallcmd]\n"
" [-f flags] [-m mode] [-N dbdir] [-o owner] [-g group] [-l linkflags]\n"
" [-S stripflags] file1 ... fileN directory\n"
" %s -d [-Up] [-M log] [-T tags] [-a afterinstallcmd] [-m mode]\n"
"usage: %s [-Ubcprs] [-M log] [-D dest] [-T tags] [-B suffix]\n"
" [-a aftercmd] [-f flags] [-m mode] [-N dbdir] [-o owner] [-g group] \n"
" [-l linkflags] [-S stripflags] file1 file2\n"
" %s [-Ubcprs] [-M log] [-D dest] [-T tags] [-B suffix]\n"
" [-a aftercmd] [-f flags] [-m mode] [-N dbdir] [-o owner] [-g group]\n"
" [-l linkflags] [-S stripflags] file1 ... fileN directory\n"
" %s -d [-Up] [-M log] [-D dest] [-T tags] [-a aftercmd] [-m mode]\n"
" [-N dbdir] [-o owner] [-g group] directory ...\n",
prog, prog, prog);
exit(1);