7036473 dependency resolution should happen in one step for all component's packages
authorDanek Duvall <danek.duvall@oracle.com>
Thu, 07 Apr 2011 15:37:10 -0700
changeset 185 773dda89f186
parent 184 037c654f48d9
child 186 3adedf0f9f4d
7036473 dependency resolution should happen in one step for all component's packages
doc/packaging.txt
make-rules/ips.mk
transforms/drop-unresolved-dependencies
--- a/doc/packaging.txt	Thu Apr 14 12:41:18 2011 -0700
+++ b/doc/packaging.txt	Thu Apr 07 15:37:10 2011 -0700
@@ -29,11 +29,11 @@
             |
             v
     dependencies resolved
-    (.../{component}/{build-dir}/manifest-$(MACH)-{component}.resolved)
+    (.../{component}/{build-dir}/manifest-$(MACH)-{component}.depend.res)
             |
             v
     manifest validation
-    (.../{component}/{build-dir}/manifest-$(MACH)-{component}.linted)
+    (.../{component}/{build-dir}/.linted-$(MACH))
             |
             v
     publication manifest
@@ -48,7 +48,7 @@
     automatically from the data encapsulated in the component Makefile, gate
     transformations, build tree, and packaging tools.  This includes actions
     for license information, some path related attributes, legacy actions, 
-    non-discoverable dependencies, user, group, driver, and others.
+    non-discoverable dependencies, users, groups, drivers, and others.
 
     Actions that are associated with objects that are specific to a single
     architecture should be tagged with a 'variant.arch' attribute specific to
@@ -85,7 +85,7 @@
     The mogrified manifest and the prototype install tree are passed through
     pkgdepend(1) to generate a set of dependencies for the package content.
     These dependencies are only those that "pkgdepend generate" can determine
-    on it's own.  Additional dependencies that can not be automatically
+    on its own.  Additional dependencies that cannot be automatically
     determined by pkgdepend(1) should be placed in the canonical manifest.
     Statically defined dependencies should be described in a canonical manifest
     in an unresolved form (ie. the form generated by "pkgdepend generate").
@@ -102,15 +102,20 @@
     package(s).
 
 Dependencies Resolved
-    The manifest with unresovled dependencies is passed through pkgdepend(1)
+    The manifest with unresolved dependencies is passed through pkgdepend(1)
     again to resolve dependencies against the package repositories.  The
-    result is a manifest that is suitable for publication.
+    result is a manifest that is suitable for publication.  All these
+    manifests are processed together in a single step, which is more
+    efficient than resolving dependencies in each manifest separately.
+    While each manifest ends up with a .depend.res copy in the build
+    directory, the umbrella dependency resolution target is
+    {build-dir}/.resolved-$(MACH).
 
 Manifest Validation
     The resolved manifest(s) and prototype install tree are passed through
     a set of validations.  This includes running pkglint(1), comparing the
     manifest content to the prototype install tree, and validation of the file
-    content of the prototype install tree.  Any anomolies are reported.
+    content of the prototype install tree.  Any anomalies are reported.
     Content validation is performed by extension to pkglint(1) in
     $(WS_TOP)/tools/python/userland-lint
 
--- a/make-rules/ips.mk	Thu Apr 14 12:41:18 2011 -0700
+++ b/make-rules/ips.mk	Thu Apr 07 15:37:10 2011 -0700
@@ -89,8 +89,9 @@
 MANIFESTS =		$(CANONICAL_MANIFESTS:%=$(MANIFEST_BASE)-%)
 
 
-RESOLVED=$(CANONICAL_MANIFESTS:%.p5m=$(MANIFEST_BASE)-%.resolved)
-PUBLISHED=$(RESOLVED:%.resolved=%.published)
+DEPENDED=$(CANONICAL_MANIFESTS:%.p5m=$(MANIFEST_BASE)-%.depend)
+RESOLVED=$(CANONICAL_MANIFESTS:%.p5m=$(MANIFEST_BASE)-%.depend.res)
+PUBLISHED=$(RESOLVED:%.depend.res=%.published)
 
 COPYRIGHT_FILE =	$(COMPONENT_NAME)-$(COMPONENT_VERSION).copyright
 IPS_COMPONENT_VERSION ?=	$(COMPONENT_VERSION)
@@ -132,15 +133,9 @@
 $(MANIFEST_BASE)-%.depend:	$(MANIFEST_BASE)-%.mangled
 	$(PKGDEPEND) generate $(PKGDEPEND_GENERATE_OPTIONS) $< >$@
 
-# resolve dependencies, prepend the mogrified manifest, less the unresolved
-# dependencies to the result.
-$(MANIFEST_BASE)-%.resolved:	$(MANIFEST_BASE)-%.depend
-	($(PKGMOGRIFY) $(@:%.resolved=%.mogrified) \
-		$(WS_TOP)/transforms/drop-unresolved-dependencies | \
-		sed -e '/^$$/d' -e '/^#.*$$/d' ; \
-	 $(PKGDEPEND) resolve -o $< | sed -e '1d') | uniq >$@
-
-$(BUILD_DIR)/.resolved-$(MACH):	$(RESOLVED)
+# resolve the dependencies all at once
+$(BUILD_DIR)/.resolved-$(MACH):	$(DEPENDED)
+	$(PKGDEPEND) resolve -m $(DEPENDED)
 	$(TOUCH) $@
 
 # lint the manifests all at once
@@ -155,7 +150,7 @@
 # published
 PKGSEND_PUBLISH_OPTIONS = -s $(PKG_REPO) publish --fmri-in-manifest
 PKGSEND_PUBLISH_OPTIONS += $(PKG_PROTO_DIRS:%=-d %)
-$(MANIFEST_BASE)-%.published:	$(MANIFEST_BASE)-%.resolved $(BUILD_DIR)/.linted-$(MACH)
+$(MANIFEST_BASE)-%.published:	$(MANIFEST_BASE)-%.depend.res $(BUILD_DIR)/.linted-$(MACH)
 	$(PKGSEND) $(PKGSEND_PUBLISH_OPTIONS) $<
 	$(PKGFMT) <$< >$@
 
--- a/transforms/drop-unresolved-dependencies	Thu Apr 14 12:41:18 2011 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-# This file contains transforms that drop unresolved dependencies from a
-# manifest.  The canonical manifest(s) for a package may contain unresolved
-# dependencies to be resolved during package generation.  The unresolved
-# dependencies need to be dropped from the canonical/mogrified manifest prior
-# to publication.
-#
-<transform depend fmri=__TBD -> drop>