diff options
-rw-r--r-- | pkgtools/pkg_install/files/add/add.h | 3 | ||||
-rw-r--r-- | pkgtools/pkg_install/files/add/main.c | 18 | ||||
-rw-r--r-- | pkgtools/pkg_install/files/add/perform.c | 62 | ||||
-rw-r--r-- | pkgtools/pkg_install/files/add/pkg_add.1 | 17 | ||||
-rw-r--r-- | pkgtools/pkg_install/files/add/pkg_add.cat1 | 12 | ||||
-rw-r--r-- | pkgtools/pkg_install/files/delete/delete.h | 3 | ||||
-rw-r--r-- | pkgtools/pkg_install/files/delete/main.c | 38 | ||||
-rw-r--r-- | pkgtools/pkg_install/files/delete/perform.c | 8 | ||||
-rw-r--r-- | pkgtools/pkg_install/files/delete/pkg_delete.1 | 17 | ||||
-rw-r--r-- | pkgtools/pkg_install/files/delete/pkg_delete.cat1 | 13 | ||||
-rw-r--r-- | pkgtools/pkg_install/files/lib/lib.h | 7 | ||||
-rw-r--r-- | pkgtools/pkg_install/files/lib/plist.c | 15 | ||||
-rw-r--r-- | pkgtools/pkg_install/files/lib/version.h | 4 |
13 files changed, 158 insertions, 59 deletions
diff --git a/pkgtools/pkg_install/files/add/add.h b/pkgtools/pkg_install/files/add/add.h index 437da4aa0b5..964e98b2fb4 100644 --- a/pkgtools/pkg_install/files/add/add.h +++ b/pkgtools/pkg_install/files/add/add.h @@ -1,4 +1,4 @@ -/* $NetBSD: add.h,v 1.10.8.1 2008/04/26 17:44:23 joerg Exp $ */ +/* $NetBSD: add.h,v 1.10.8.2 2008/07/30 15:38:37 joerg Exp $ */ /* from FreeBSD Id: add.h,v 1.8 1997/02/22 16:09:15 peter Exp */ @@ -25,6 +25,7 @@ #ifndef _INST_ADD_H_INCLUDE #define _INST_ADD_H_INCLUDE +extern char *Destdir; extern char *OverrideMachine; extern char *Prefix; extern char *View; diff --git a/pkgtools/pkg_install/files/add/main.c b/pkgtools/pkg_install/files/add/main.c index e0204f437a8..765606db5ef 100644 --- a/pkgtools/pkg_install/files/add/main.c +++ b/pkgtools/pkg_install/files/add/main.c @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.14.4.4 2008/06/22 22:10:45 joerg Exp $ */ +/* $NetBSD: main.c,v 1.14.4.5 2008/07/30 15:38:37 joerg Exp $ */ #if HAVE_CONFIG_H #include "config.h" @@ -11,7 +11,7 @@ #if 0 static char *rcsid = "from FreeBSD Id: main.c,v 1.16 1997/10/08 07:45:43 charnier Exp"; #else -__RCSID("$NetBSD: main.c,v 1.14.4.4 2008/06/22 22:10:45 joerg Exp $"); +__RCSID("$NetBSD: main.c,v 1.14.4.5 2008/07/30 15:38:37 joerg Exp $"); #endif #endif @@ -48,8 +48,9 @@ __RCSID("$NetBSD: main.c,v 1.14.4.4 2008/06/22 22:10:45 joerg Exp $"); #include "lib.h" #include "add.h" -static char Options[] = "AIK:LRVW:fhm:np:t:uvw:"; +static char Options[] = "AIK:LP:RVW:fhm:np:t:uvw:"; +char *Destdir = NULL; char *OverrideMachine = NULL; char *Prefix = NULL; char *View = NULL; @@ -64,9 +65,10 @@ int Replace = 0; static void usage(void) { - (void) fprintf(stderr, "%s\n%s\n%s\n", - "usage: pkg_add [-AfhILnRuVv] [-C config] [-K pkg_dbdir] [-m machine] [-p prefix]", - " [-s verification-type] [-W viewbase] [-w view]", + (void) fprintf(stderr, "%s\n%s\n%s\n%s\n", + "usage: pkg_add [-AfhILnRuVv] [-C config] [-P destdir] [-K pkg_dbdir]", + " [-m machine] [-p prefix] [-s verification-type", + " [-W viewbase] [-w view]\n", " [[ftp|http]://[user[:password]@]host[:port]][/path/]pkg-name ..."); exit(1); } @@ -87,6 +89,10 @@ main(int argc, char **argv) case 'C': config_file = optarg; + case 'P': + Destdir = optarg; + break; + case 'f': Force = TRUE; break; diff --git a/pkgtools/pkg_install/files/add/perform.c b/pkgtools/pkg_install/files/add/perform.c index b66686dbbad..b83e2d9db25 100644 --- a/pkgtools/pkg_install/files/add/perform.c +++ b/pkgtools/pkg_install/files/add/perform.c @@ -1,4 +1,4 @@ -/* $NetBSD: perform.c,v 1.70.4.11 2008/07/30 15:02:18 joerg Exp $ */ +/* $NetBSD: perform.c,v 1.70.4.12 2008/07/30 15:38:37 joerg Exp $ */ #if HAVE_CONFIG_H #include "config.h" #endif @@ -6,7 +6,7 @@ #if HAVE_SYS_CDEFS_H #include <sys/cdefs.h> #endif -__RCSID("$NetBSD: perform.c,v 1.70.4.11 2008/07/30 15:02:18 joerg Exp $"); +__RCSID("$NetBSD: perform.c,v 1.70.4.12 2008/07/30 15:38:37 joerg Exp $"); /*- * Copyright (c) 2003 Grant Beattie <grant@NetBSD.org> @@ -77,8 +77,10 @@ struct pkg_task { char *pkgname; const char *prefix; + char *install_prefix; char *logdir; + char *install_logdir; char *other_version; package_t plist; @@ -305,6 +307,13 @@ pkg_parse_plist(struct pkg_task *pkg) } else pkg->prefix = p->name; + if (Destdir != NULL) { + if (asprintf(&pkg->install_prefix, "%s/%s", Destdir, + pkg->prefix) == -1) + err(EXIT_FAILURE, "asprintf failed"); + } else if ((pkg->install_prefix = strdup(pkg->prefix)) == NULL) + err(EXIT_FAILURE, "strdup failed"); + return 0; } @@ -523,8 +532,8 @@ write_meta_data(struct pkg_task *pkg) if (Fake) return 0; - if (mkdir_p(pkg->logdir)) { - warn("Can't create pkgdb entry: %s", pkg->logdir); + if (mkdir_p(pkg->install_logdir)) { + warn("Can't create pkgdb entry: %s", pkg->install_logdir); return -1; } @@ -533,7 +542,7 @@ write_meta_data(struct pkg_task *pkg) descr->entry_offset); if (*target == NULL) continue; - if (asprintf(&filename, "%s/%s", pkg->logdir, + if (asprintf(&filename, "%s/%s", pkg->install_logdir, descr->entry_filename) == -1) { warn("asprintf failed"); return -1; @@ -619,13 +628,13 @@ extract_files(struct pkg_task *pkg) if (Fake) return 0; - if (mkdir_p(pkg->prefix)) { - warn("Can't create prefix: %s", pkg->prefix); + if (mkdir_p(pkg->install_prefix)) { + warn("Can't create prefix: %s", pkg->install_prefix); return -1; } - if (chdir(pkg->prefix) == -1) { - warn("Can't change into prefix: %s", pkg->prefix); + if (chdir(pkg->install_prefix) == -1) { + warn("Can't change into prefix: %s", pkg->install_prefix); return -1; } @@ -868,6 +877,8 @@ run_install_script(struct pkg_task *pkg, const char *argument) if (pkg->meta_data.meta_install == NULL || NoInstall) return 0; + if (Destdir != NULL) + setenv(PKG_DESTDIR_VNAME, Destdir, 1); setenv(PKG_PREFIX_VNAME, pkg->prefix, 1); setenv(PKG_METADATA_DIR_VNAME, pkg->logdir, 1); setenv(PKG_REFCOUNT_DBDIR_VNAME, pkgdb_refcount_dir(), 1); @@ -882,8 +893,8 @@ run_install_script(struct pkg_task *pkg, const char *argument) ret = 0; - if (chdir(pkg->logdir) == -1) { - warn("Can't change to %s", pkg->logdir); + if (chdir(pkg->install_logdir) == -1) { + warn("Can't change to %s", pkg->install_logdir); ret = -1; } @@ -1123,13 +1134,15 @@ start_replacing(struct pkg_task *pkg) return -1; if (Verbose || Fake) { - printf("%s/pkg_delete -K %s -p %s '%s'\n", + printf("%s/pkg_delete -K %s -p %s%s%s '%s'\n", BINDIR, _pkgdb_getPKGDB_DIR(), pkg->prefix, + Destdir ? " -P ": "", Destdir ? Destdir : "", pkg->other_version); } if (!Fake) fexec(BINDIR "/pkg_delete", "-K", _pkgdb_getPKGDB_DIR(), "-p", pkg->prefix, + Destdir ? "-P": "", Destdir ? Destdir : "", pkg->other_version, NULL); /* XXX Check return value and do what? */ @@ -1245,6 +1258,13 @@ pkg_do(const char *pkgpath, int mark_automatic) err(EXIT_FAILURE, "asprintf failed"); } + if (Destdir != NULL) { + if (asprintf(&pkg->install_logdir, "%s/%s", Destdir, pkg->logdir) == -1) + err(EXIT_FAILURE, "asprintf failed"); + _pkgdb_setPKGDB_DIR(dirname_of(pkg->install_logdir)); + } else if ((pkg->install_logdir = strdup(pkg->logdir)) == NULL) + err(EXIT_FAILURE, "strdup failed"); + if (NoRecord && !Fake) { const char *tmpdir; @@ -1252,11 +1272,11 @@ pkg_do(const char *pkgpath, int mark_automatic) if (tmpdir == NULL) tmpdir = "/tmp"; - free(pkg->logdir); - if (asprintf(&pkg->logdir, "%s/pkg_install.XXXXXX", tmpdir) == -1) + free(pkg->install_logdir); + if (asprintf(&pkg->install_logdir, "%s/pkg_install.XXXXXX", tmpdir) == -1) err(EXIT_FAILURE, "asprintf failed"); /* XXX pkg_add -u... */ - if (mkdtemp(pkg->logdir) == NULL) { + if (mkdtemp(pkg->install_logdir) == NULL) { warn("mkdtemp failed"); goto clean_memory; } @@ -1326,7 +1346,7 @@ pkg_do(const char *pkgpath, int mark_automatic) pkg_register_depends(pkg); if (Verbose) - printf("Package %s registered in %s\n", pkg->pkgname, pkg->logdir); + printf("Package %s registered in %s\n", pkg->pkgname, pkg->install_logdir); if (pkg->meta_data.meta_display != NULL) fputs(pkg->meta_data.meta_display, stdout); @@ -1343,19 +1363,23 @@ nuke_pkg: pkg->other_version, pkg->pkgname); warnx("Remember to run pkg_admin rebuild-tree after fixing this."); } - delete_package(FALSE, FALSE, &pkg->plist, FALSE); + delete_package(FALSE, FALSE, &pkg->plist, FALSE, Destdir); } nuke_pkgdb: if (!Fake) { - (void) fexec(REMOVE_CMD, "-fr", pkg->logdir, (void *)NULL); + (void) fexec(REMOVE_CMD, "-fr", pkg->install_logdir, (void *)NULL); + free(pkg->install_logdir); free(pkg->logdir); + pkg->install_logdir = NULL; pkg->logdir = NULL; } clean_memory: if (pkg->logdir != NULL && NoRecord && !Fake) - (void) fexec(REMOVE_CMD, "-fr", pkg->logdir, (void *)NULL); + (void) fexec(REMOVE_CMD, "-fr", pkg->install_logdir, (void *)NULL); + free(pkg->install_prefix); + free(pkg->install_logdir); free(pkg->logdir); free_buildinfo(pkg); free_plist(&pkg->plist); diff --git a/pkgtools/pkg_install/files/add/pkg_add.1 b/pkgtools/pkg_install/files/add/pkg_add.1 index a6e0804ba0b..bf92940dd15 100644 --- a/pkgtools/pkg_install/files/add/pkg_add.1 +++ b/pkgtools/pkg_install/files/add/pkg_add.1 @@ -1,4 +1,4 @@ -.\" $NetBSD: pkg_add.1,v 1.28.6.7 2008/07/27 22:36:19 joerg Exp $ +.\" $NetBSD: pkg_add.1,v 1.28.6.8 2008/07/30 15:38:37 joerg Exp $ .\" .\" FreeBSD install - a package for the installation and maintenance .\" of non-core utilities. @@ -17,7 +17,7 @@ .\" .\" @(#)pkg_add.1 .\" -.Dd July 28, 2008 +.Dd July 30, 2008 .Dt PKG_ADD 1 .Os .Sh NAME @@ -28,6 +28,7 @@ .Op Fl AfILnRuVv .Op Fl K Ar pkg_dbdir .Op Fl m Ar machine +.Op Fl P Ar destdir .Op Fl p Ar prefix .Op Fl W Ar viewbase .Op Fl w Ar view @@ -141,6 +142,11 @@ Override the machine architecture returned by uname with .It Fl n Don't actually install a package, just report the steps that would be taken if it was. +.It Fl p Ar destdir +Prefix all file and directory names with +.Ar destdir . +For packages without install scripts this has the same behavior as +using chroot. .It Fl p Ar prefix Set .Ar prefix @@ -379,6 +385,13 @@ meta-data files, and with the .Ev PKG_REFCOUNT_DBDIR environment variable set to the location of the package reference counts database directory. +If the +.Fl P +flag was given to +.Nm , +.Ev PKG_DESTDIR +will be set to +.Ar destdir . .Sh ENVIRONMENT .Bl -tag -width PKG_TMPDIR .It Ev LOCALBASE diff --git a/pkgtools/pkg_install/files/add/pkg_add.cat1 b/pkgtools/pkg_install/files/add/pkg_add.cat1 index b09737bff9b..f47432b6ec7 100644 --- a/pkgtools/pkg_install/files/add/pkg_add.cat1 +++ b/pkgtools/pkg_install/files/add/pkg_add.cat1 @@ -5,7 +5,7 @@ NNAAMMEE tributions SSYYNNOOPPSSIISS - ppkkgg__aadddd [--AAffIILLnnRRuuVVvv] [--KK _p_k_g___d_b_d_i_r] [--mm _m_a_c_h_i_n_e] [--pp _p_r_e_f_i_x] + ppkkgg__aadddd [--AAffIILLnnRRuuVVvv] [--KK _p_k_g___d_b_d_i_r] [--mm _m_a_c_h_i_n_e] [--PP _d_e_s_t_d_i_r] [--pp _p_r_e_f_i_x] [--WW _v_i_e_w_b_a_s_e] [--ww _v_i_e_w] [[ftp|http]://[_u_s_e_r[:_p_a_s_s_w_o_r_d_]@]_h_o_s_t[:_p_o_r_t]][/_p_a_t_h_/]pkg-name ... @@ -77,6 +77,11 @@ OOPPTTIIOONNSS --nn Don't actually install a package, just report the steps that would be taken if it was. + --pp _d_e_s_t_d_i_r + Prefix all file and directory names with _d_e_s_t_d_i_r. For packages + without install scripts this has the same behavior as using + chroot. + --pp _p_r_e_f_i_x Set _p_r_e_f_i_x as the directory in which to extract files from a package. If a package has set its default directory, it will be @@ -219,7 +224,8 @@ TTEECCHHNNIICCAALL DDEETTAAIILLSS change it with the --pp flag to ppkkgg__aadddd. The scripts are also called with the PKG_METADATA_DIR environment variable set to the location of the _+_* meta-data files, and with the PKG_REFCOUNT_DBDIR environment variable set - to the location of the package reference counts database directory. + to the location of the package reference counts database directory. If + the --PP flag was given to ppkkgg__aadddd, PKG_DESTDIR will be set to _d_e_s_t_d_i_r. EENNVVIIRROONNMMEENNTT LOCALBASE This is the location of the _v_i_e_w_b_a_s_e directory in which all @@ -310,4 +316,4 @@ BBUUGGSS Sure to be others. -NetBSD 4.0 July 28, 2008 NetBSD 4.0 +NetBSD 4.0 July 30, 2008 NetBSD 4.0 diff --git a/pkgtools/pkg_install/files/delete/delete.h b/pkgtools/pkg_install/files/delete/delete.h index 116025d8557..f00d13da72f 100644 --- a/pkgtools/pkg_install/files/delete/delete.h +++ b/pkgtools/pkg_install/files/delete/delete.h @@ -1,4 +1,4 @@ -/* $NetBSD: delete.h,v 1.5 2007/07/30 07:16:21 joerg Exp $ */ +/* $NetBSD: delete.h,v 1.5.8.1 2008/07/30 15:38:37 joerg Exp $ */ /* from FreeBSD Id: delete.h,v 1.4 1997/02/22 16:09:35 peter Exp */ @@ -25,6 +25,7 @@ #ifndef _INST_DELETE_H_INCLUDE #define _INST_DELETE_H_INCLUDE +extern char *Destdir; extern char *Prefix; extern char *ProgramPath; extern Boolean NoDeleteFiles; diff --git a/pkgtools/pkg_install/files/delete/main.c b/pkgtools/pkg_install/files/delete/main.c index 94a3c0bbe70..26e44c46bd1 100644 --- a/pkgtools/pkg_install/files/delete/main.c +++ b/pkgtools/pkg_install/files/delete/main.c @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.21 2007/09/08 09:58:14 rillig Exp $ */ +/* $NetBSD: main.c,v 1.21.8.1 2008/07/30 15:38:37 joerg Exp $ */ #if HAVE_CONFIG_H #include "config.h" @@ -11,7 +11,7 @@ #if 0 static char *rcsid = "from FreeBSD Id: main.c,v 1.11 1997/10/08 07:46:48 charnier Exp"; #else -__RCSID("$NetBSD: main.c,v 1.21 2007/09/08 09:58:14 rillig Exp $"); +__RCSID("$NetBSD: main.c,v 1.21.8.1 2008/07/30 15:38:37 joerg Exp $"); #endif #endif @@ -42,8 +42,10 @@ __RCSID("$NetBSD: main.c,v 1.21 2007/09/08 09:58:14 rillig Exp $"); #include "lib.h" #include "delete.h" -static char Options[] = "DdFfhK:NnOp:RrVv"; +static char Options[] = "DdFfhK:NnOp:P:RrVv"; +char *Destdir = NULL; +char *Pkgdb = NULL; char *Prefix = NULL; char *ProgramPath = NULL; Boolean NoDeleteFiles = FALSE; @@ -58,7 +60,7 @@ lpkg_head_t pkgs; static void usage(void) { - fprintf(stderr, "usage: pkg_delete [-DdFfNnORrVv] [-K pkg_dbdir] [-p prefix] pkg-name ...\n"); + fprintf(stderr, "usage: pkg_delete [-DdFfNnORrVv] [-K pkg_dbdir] [-P destdir] [-p prefix] pkg-name ...\n"); exit(1); } @@ -92,7 +94,8 @@ main(int argc, char **argv) break; case 'K': - _pkgdb_setPKGDB_DIR(optarg); + if ((Pkgdb = strdup(optarg)) == NULL) + err(EXIT_FAILURE, "strdup failed"); break; case 'N': @@ -109,6 +112,10 @@ main(int argc, char **argv) OnlyDeleteFromPkgDB = TRUE; break; + case 'P': + Destdir = optarg; + break; + case 'p': Prefix = optarg; break; @@ -141,6 +148,20 @@ main(int argc, char **argv) TAILQ_INIT(&pkgs); + if (Pkgdb == NULL) + Pkgdb = strdup(_pkgdb_getPKGDB_DIR()); + + if (Destdir != NULL) { + char *pkgdbdir; + + if (asprintf(&pkgdbdir, "%s/%s", Destdir, Pkgdb) == -1) + err(EXIT_FAILURE, "asprintf failed"); + _pkgdb_setPKGDB_DIR(pkgdbdir); + free(pkgdbdir); + } else { + _pkgdb_setPKGDB_DIR(Pkgdb); + } + /* Get all the remaining package names, if any */ if (File2Pkg && !pkgdb_open(ReadOnly)) { err(EXIT_FAILURE, "cannot open pkgdb"); @@ -167,11 +188,8 @@ main(int argc, char **argv) errx(EXIT_FAILURE, "error expanding '%s' ('%s' nonexistent?)", *argv, _pkgdb_getPKGDB_DIR()); } } else { - const char *dbdir; - - dbdir = _pkgdb_getPKGDB_DIR(); - if (**argv == '/' && strncmp(*argv, dbdir, strlen(dbdir)) == 0) { - *argv += strlen(dbdir) + 1; + if (**argv == '/' && strncmp(*argv, Pkgdb, strlen(Pkgdb)) == 0) { + *argv += strlen(Pkgdb) + 1; if ((*argv)[strlen(*argv) - 1] == '/') { (*argv)[strlen(*argv) - 1] = 0; } diff --git a/pkgtools/pkg_install/files/delete/perform.c b/pkgtools/pkg_install/files/delete/perform.c index 95cf9d34146..0f6a6f19ea4 100644 --- a/pkgtools/pkg_install/files/delete/perform.c +++ b/pkgtools/pkg_install/files/delete/perform.c @@ -1,4 +1,4 @@ -/* $NetBSD: perform.c,v 1.23 2008/04/23 20:54:39 joerg Exp $ */ +/* $NetBSD: perform.c,v 1.23.2.1 2008/07/30 15:38:37 joerg Exp $ */ #if HAVE_CONFIG_H #include "config.h" @@ -11,7 +11,7 @@ #if 0 static const char *rcsid = "from FreeBSD Id: perform.c,v 1.15 1997/10/13 15:03:52 jkh Exp"; #else -__RCSID("$NetBSD: perform.c,v 1.23 2008/04/23 20:54:39 joerg Exp $"); +__RCSID("$NetBSD: perform.c,v 1.23.2.1 2008/07/30 15:38:37 joerg Exp $"); #endif #endif @@ -753,6 +753,8 @@ pkg_do(char *pkg) warnx("package '%s' doesn't have a prefix", pkg); return 1; } + if (Destdir != NULL) + setenv(PKG_DESTDIR_VNAME, Destdir, 1); setenv(PKG_PREFIX_VNAME, p->name, 1); setenv(PKG_METADATA_DIR_VNAME, LogDir, 1); /* @@ -786,7 +788,7 @@ pkg_do(char *pkg) } if (!Fake) { /* Some packages aren't packed right, so we need to just ignore delete_package()'s status. Ugh! :-( */ - if (delete_package(FALSE, CleanDirs, &Plist, NoDeleteFiles) == FAIL) + if (delete_package(FALSE, CleanDirs, &Plist, NoDeleteFiles, Destdir) == FAIL) warnx("couldn't entirely delete package `%s'\n", pkg); } else { /* Fake means Verbose */ diff --git a/pkgtools/pkg_install/files/delete/pkg_delete.1 b/pkgtools/pkg_install/files/delete/pkg_delete.1 index b3e0698edf0..2c3048109b7 100644 --- a/pkgtools/pkg_install/files/delete/pkg_delete.1 +++ b/pkgtools/pkg_install/files/delete/pkg_delete.1 @@ -1,4 +1,4 @@ -.\" $NetBSD: pkg_delete.1,v 1.16 2007/08/10 22:29:49 gdt Exp $ +.\" $NetBSD: pkg_delete.1,v 1.16.8.1 2008/07/30 15:38:37 joerg Exp $ .\" .\" FreeBSD install - a package for the installation and maintenance .\" of non-core utilities. @@ -17,7 +17,7 @@ .\" .\" from FreeBSD: @(#)pkg_delete.1 .\" -.Dd March 2, 2007 +.Dd July 30, 2008 .Dt PKG_DELETE 1 .Os .Sh NAME @@ -30,6 +30,7 @@ .Op Fl K Ar pkg_dbdir .Ek .Bk -words +.Op Fl P Ar destdir .Op Fl p Ar prefix .Ek .Ar pkg-name ... @@ -133,6 +134,11 @@ would be taken if it were. .It Fl O Only delete the package's entries from the package database, do not touch the package or its files itself. +.It Fl p Ar destdir +Prefix all file and directory names with +.Ar destdir . +For packages without install scripts this has the same behavior as +using chroot. .It Fl p Ar prefix Set .Ar prefix @@ -256,6 +262,13 @@ meta-data files, and with the .Ev PKG_REFCOUNT_DBDIR environment variable set to the location of the package reference counts database directory. +If the +.Fl P +flag was given to +.Nm , +.Ev PKG_DESTDIR +will be set to +.Ar destdir . .Sh ENVIRONMENT .Bl -tag -width PKG_DBDIR .It Ev PKG_DBDIR diff --git a/pkgtools/pkg_install/files/delete/pkg_delete.cat1 b/pkgtools/pkg_install/files/delete/pkg_delete.cat1 index 91c2c00298f..309432c83fc 100644 --- a/pkgtools/pkg_install/files/delete/pkg_delete.cat1 +++ b/pkgtools/pkg_install/files/delete/pkg_delete.cat1 @@ -5,7 +5,8 @@ NNAAMMEE age distributions SSYYNNOOPPSSIISS - ppkkgg__ddeelleettee [--DDddFFffNNnnOORRrrVVvv] [--KK _p_k_g___d_b_d_i_r] [--pp _p_r_e_f_i_x] _p_k_g_-_n_a_m_e _._._. + ppkkgg__ddeelleettee [--DDddFFffNNnnOORRrrVVvv] [--KK _p_k_g___d_b_d_i_r] [--PP _d_e_s_t_d_i_r] [--pp _p_r_e_f_i_x] + _p_k_g_-_n_a_m_e _._._. DDEESSCCRRIIPPTTIIOONN The ppkkgg__ddeelleettee command is used to delete packages that have been previ- @@ -72,6 +73,11 @@ OOPPTTIIOONNSS --OO Only delete the package's entries from the package database, do not touch the package or its files itself. + --pp _d_e_s_t_d_i_r + Prefix all file and directory names with _d_e_s_t_d_i_r. For packages + without install scripts this has the same behavior as using + chroot. + --pp _p_r_e_f_i_x Set _p_r_e_f_i_x as the directory in which to delete files from any installed packages which do not explicitly set theirs. For most @@ -136,7 +142,8 @@ TTEECCHHNNIICCAALL DDEETTAAIILLSS The scripts are also called with the PKG_METADATA_DIR environment vari- able set to the location of the _+_* meta-data files, and with the PKG_REFCOUNT_DBDIR environment variable set to the location of the pack- - age reference counts database directory. + age reference counts database directory. If the --PP flag was given to + ppkkgg__ddeelleettee, PKG_DESTDIR will be set to _d_e_s_t_d_i_r. EENNVVIIRROONNMMEENNTT PKG_DBDIR If the --KK flag isn't given, then PKG_DBDIR is the location of @@ -162,4 +169,4 @@ AAUUTTHHOORRSS NetBSD wildcard dependency processing, pkgdb, recursive "down" delete, etc. -NetBSD 4.0 March 2, 2007 NetBSD 4.0 +NetBSD 4.0 July 30, 2008 NetBSD 4.0 diff --git a/pkgtools/pkg_install/files/lib/lib.h b/pkgtools/pkg_install/files/lib/lib.h index 4eaa9d9e4c9..ab8616d7dfd 100644 --- a/pkgtools/pkg_install/files/lib/lib.h +++ b/pkgtools/pkg_install/files/lib/lib.h @@ -1,4 +1,4 @@ -/* $NetBSD: lib.h,v 1.42.2.8 2008/07/30 15:02:18 joerg Exp $ */ +/* $NetBSD: lib.h,v 1.42.2.9 2008/07/30 15:38:37 joerg Exp $ */ /* from FreeBSD Id: lib.h,v 1.25 1997/10/08 07:48:03 charnier Exp */ @@ -132,6 +132,9 @@ enum { /* The name of the "prefix" environment variable given to scripts */ #define PKG_PREFIX_VNAME "PKG_PREFIX" +/* The name of the "destdir" environment variable given to scripts */ +#define PKG_DESTDIR_VNAME "PKG_DESTDIR" + /* * The name of the "metadatadir" environment variable given to scripts. * This variable holds the location of the +-files for this package. @@ -337,7 +340,7 @@ void write_plist(package_t *, FILE *, char *); void stringify_plist(package_t *, char **, size_t *, const char *); void parse_plist(package_t *, const char *); void read_plist(package_t *, FILE *); -int delete_package(Boolean, Boolean, package_t *, Boolean); +int delete_package(Boolean, Boolean, package_t *, Boolean, const char *); /* Package Database */ int pkgdb_open(int); diff --git a/pkgtools/pkg_install/files/lib/plist.c b/pkgtools/pkg_install/files/lib/plist.c index dfdbe0b8394..fb603da1e74 100644 --- a/pkgtools/pkg_install/files/lib/plist.c +++ b/pkgtools/pkg_install/files/lib/plist.c @@ -1,4 +1,4 @@ -/* $NetBSD: plist.c,v 1.17.4.3 2008/05/23 15:51:22 joerg Exp $ */ +/* $NetBSD: plist.c,v 1.17.4.4 2008/07/30 15:38:37 joerg Exp $ */ #if HAVE_CONFIG_H #include "config.h" @@ -11,7 +11,7 @@ #if 0 static const char *rcsid = "from FreeBSD Id: plist.c,v 1.24 1997/10/08 07:48:15 charnier Exp"; #else -__RCSID("$NetBSD: plist.c,v 1.17.4.3 2008/05/23 15:51:22 joerg Exp $"); +__RCSID("$NetBSD: plist.c,v 1.17.4.4 2008/07/30 15:38:37 joerg Exp $"); #endif #endif @@ -509,7 +509,8 @@ do { \ * run it too in cases of failure. */ int -delete_package(Boolean ign_err, Boolean nukedirs, package_t *pkg, Boolean NoDeleteFiles) +delete_package(Boolean ign_err, Boolean nukedirs, package_t *pkg, + Boolean NoDeleteFiles, const char *destdir) { plist_t *p; char *Where = ".", *last_file = ""; @@ -552,7 +553,9 @@ delete_package(Boolean ign_err, Boolean nukedirs, package_t *pkg, Boolean NoDele case PLIST_FILE: last_file = p->name; - (void) snprintf(tmp, sizeof(tmp), "%s/%s", Where, p->name); + (void) snprintf(tmp, sizeof(tmp), "%s%s%s/%s", + destdir ? destdir : "", destdir ? "/" : "", + Where, p->name); if (isdir(tmp)) { warnx("attempting to delete directory `%s' as a file\n" "this packing list is incorrect - ignoring delete request", tmp); @@ -652,7 +655,9 @@ delete_package(Boolean ign_err, Boolean nukedirs, package_t *pkg, Boolean NoDele if (NoDeleteFiles) break; - (void) snprintf(tmp, sizeof(tmp), "%s/%s", Where, p->name); + (void) snprintf(tmp, sizeof(tmp), "%s%s%s/%s", + destdir ? destdir : "", destdir ? "/" : "", + Where, p->name); if (fexists(tmp)) { if (!isdir(tmp)) { warnx("cannot remove `%s' as a directory\n" diff --git a/pkgtools/pkg_install/files/lib/version.h b/pkgtools/pkg_install/files/lib/version.h index aa232e579c4..708616eeb46 100644 --- a/pkgtools/pkg_install/files/lib/version.h +++ b/pkgtools/pkg_install/files/lib/version.h @@ -1,4 +1,4 @@ -/* $NetBSD: version.h,v 1.102.2.10 2008/07/27 16:22:53 joerg Exp $ */ +/* $NetBSD: version.h,v 1.102.2.11 2008/07/30 15:38:37 joerg Exp $ */ /* * Copyright (c) 2001 Thomas Klausner. All rights reserved. @@ -27,6 +27,6 @@ #ifndef _INST_LIB_VERSION_H_ #define _INST_LIB_VERSION_H_ -#define PKGTOOLS_VERSION "20080727" +#define PKGTOOLS_VERSION "20080730" #endif /* _INST_LIB_VERSION_H_ */ |