Danek Duvall
2011-04-08 93b18cd84bd33894f95ae20eaa71385096b5a645
7036473 dependency resolution should happen in one step for all component's packages
1 files deleted
2 files modified
67 ■■■■ changed files
doc/packaging.txt 19 ●●●●● patch | view | raw | blame | history
make-rules/ips.mk 19 ●●●●● patch | view | raw | blame | history
transforms/drop-unresolved-dependencies 29 ●●●●● patch | view | raw | blame | history
doc/packaging.txt
@@ -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
make-rules/ips.mk
@@ -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) <$< >$@
transforms/drop-unresolved-dependencies
File was deleted