summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgdt <gdt@pkgsrc.org>2010-09-14 22:26:18 +0000
committergdt <gdt@pkgsrc.org>2010-09-14 22:26:18 +0000
commit360c2464e3562a8f1870ef3be5d5150661ce1c2a (patch)
treee6d5bc05bbfb426a6dcd29cada83054e7d43ed18
parentf6558141cf032216611bbcbc10fe74a68717ca36 (diff)
downloadpkgsrc-360c2464e3562a8f1870ef3be5d5150661ce1c2a.tar.gz
Add -D flag to pkg_install, to override the "pkg_add -U" check that
all depending packages have their dependencies satisfied by the new package. Essentially, split off this particular behavior as a special case of -f, so that -f works as before, unforced works as before, and one can give -D to override exactly this check, leaving all other checks intact. The -D flag is in support of make replace, as the workflow for make replace is that inter-package dependencies are sometimes violated (but then one must replace the depending packages, which is what pkg_rolling-replace does via the unsafe_depends flags). Bump PKGTOOLS_VERSION. Add missing break statement in option parsing of "pkg_add -C", riding the version bump. Discussed extensively on tech-pkg@ over the summer. OK pkgsrc-pmc@.
-rw-r--r--pkgtools/pkg_install/files/add/add.h3
-rw-r--r--pkgtools/pkg_install/files/add/main.c18
-rw-r--r--pkgtools/pkg_install/files/add/perform.c6
-rw-r--r--pkgtools/pkg_install/files/add/pkg_add.17
-rw-r--r--pkgtools/pkg_install/files/add/pkg_add.cat5
-rw-r--r--pkgtools/pkg_install/files/lib/version.h4
6 files changed, 33 insertions, 10 deletions
diff --git a/pkgtools/pkg_install/files/add/add.h b/pkgtools/pkg_install/files/add/add.h
index 9c1f285fab3..a55f40bb580 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.18 2010/01/30 20:09:34 joerg Exp $ */
+/* $NetBSD: add.h,v 1.19 2010/09/14 22:26:18 gdt Exp $ */
/* from FreeBSD Id: add.h,v 1.8 1997/02/22 16:09:15 peter Exp */
@@ -40,6 +40,7 @@ extern int Replace;
extern int ReplaceSame;
extern Boolean ForceDepends;
+extern Boolean ForceDepending;
int make_hierarchy(char *);
void apply_perms(char *, char **, int);
diff --git a/pkgtools/pkg_install/files/add/main.c b/pkgtools/pkg_install/files/add/main.c
index 3df813ae96f..0f452a0c762 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.26 2010/06/16 23:02:48 joerg Exp $ */
+/* $NetBSD: main.c,v 1.27 2010/09/14 22:26:18 gdt Exp $ */
#if HAVE_CONFIG_H
#include "config.h"
@@ -7,7 +7,7 @@
#if HAVE_SYS_CDEFS_H
#include <sys/cdefs.h>
#endif
-__RCSID("$NetBSD: main.c,v 1.26 2010/06/16 23:02:48 joerg Exp $");
+__RCSID("$NetBSD: main.c,v 1.27 2010/09/14 22:26:18 gdt Exp $");
/*
*
@@ -39,7 +39,7 @@ __RCSID("$NetBSD: main.c,v 1.26 2010/06/16 23:02:48 joerg Exp $");
#include "lib.h"
#include "add.h"
-static char Options[] = "AC:IK:LP:RVW:fhm:np:t:Uuvw:";
+static char Options[] = "AC:DIK:LP:RVW:fhm:np:t:Uuvw:";
char *Destdir = NULL;
char *OverrideMachine = NULL;
@@ -51,6 +51,12 @@ Boolean NoInstall = FALSE;
Boolean NoRecord = FALSE;
Boolean Automatic = FALSE;
Boolean ForceDepends = FALSE;
+/*
+ * Normally, updating fails if the dependencies of a depending package
+ * are not satisfied by the package to be updated. ForceDepending
+ * turns that failure into a warning.
+ */
+Boolean ForceDepending = FALSE;
int LicenseCheck = 0;
int Replace = 0;
@@ -82,7 +88,12 @@ main(int argc, char **argv)
case 'C':
config_file = optarg;
+ break;
+ case 'D':
+ ForceDepending = TRUE;
+ break;
+
case 'P':
Destdir = optarg;
break;
@@ -90,6 +101,7 @@ main(int argc, char **argv)
case 'f':
Force = TRUE;
ForceDepends = TRUE;
+ ForceDepending = TRUE;
break;
case 'I':
diff --git a/pkgtools/pkg_install/files/add/perform.c b/pkgtools/pkg_install/files/add/perform.c
index 3a7e1eb8587..8a1967d4bc2 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.97 2010/06/16 23:02:48 joerg Exp $ */
+/* $NetBSD: perform.c,v 1.98 2010/09/14 22:26:18 gdt 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.97 2010/06/16 23:02:48 joerg Exp $");
+__RCSID("$NetBSD: perform.c,v 1.98 2010/09/14 22:26:18 gdt Exp $");
/*-
* Copyright (c) 2003 Grant Beattie <grant@NetBSD.org>
@@ -458,7 +458,7 @@ check_other_installed(struct pkg_task *pkg)
continue; /* Both match, ok. */
warnx("Dependency of %s fulfilled by %s, but not by %s",
iter, pkg->other_version, pkg->pkgname);
- if (!Force)
+ if (!ForceDepending)
status = -1;
break;
}
diff --git a/pkgtools/pkg_install/files/add/pkg_add.1 b/pkgtools/pkg_install/files/add/pkg_add.1
index 046d3f27106..e9dcfc4e4f7 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.44 2010/06/16 23:02:48 joerg Exp $
+.\" $NetBSD: pkg_add.1,v 1.45 2010/09/14 22:26:18 gdt Exp $
.\"
.\" FreeBSD install - a package for the installation and maintenance
.\" of non-core utilities.
@@ -130,6 +130,11 @@ will still try to find and auto-install missing prerequisite packages,
a failure to find one will not be fatal.
This flag also overrides the fatal error when the operating system or
architecture the package was built on differ from that of the host.
+.It Fl D
+Force updating even if the dependencies of depending packages are not
+satisfied by the new package.
+This is used by "make replace", after which one would typically
+replace the depending packages.
.It Fl I
If an installation script exists for a given package, do not execute it.
.It Fl K Ar pkg_dbdir
diff --git a/pkgtools/pkg_install/files/add/pkg_add.cat b/pkgtools/pkg_install/files/add/pkg_add.cat
index 1d0081236a8..246953fb628 100644
--- a/pkgtools/pkg_install/files/add/pkg_add.cat
+++ b/pkgtools/pkg_install/files/add/pkg_add.cat
@@ -64,6 +64,11 @@ OOPPTTIIOONNSS
rides the fatal error when the operating system or architecture
the package was built on differ from that of the host.
+ --DD Force updating even if the dependencies of depending packages are
+ not satisfied by the new package. This is used by "make
+ replace", after which one would typically replace the depending
+ packages.
+
--II If an installation script exists for a given package, do not exe-
cute it.
diff --git a/pkgtools/pkg_install/files/lib/version.h b/pkgtools/pkg_install/files/lib/version.h
index 0d4125cc9ce..5e10b28843c 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.156 2010/06/16 23:02:49 joerg Exp $ */
+/* $NetBSD: version.h,v 1.157 2010/09/14 22:26:19 gdt 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 20100616
+#define PKGTOOLS_VERSION 20100914
#endif /* _INST_LIB_VERSION_H_ */