pkg/Makefile
changeset 1153 912dd58dfc72
parent 1152 6cf0f98f6d5f
child 1154 941fbafb8c39
--- a/pkg/Makefile	Thu Jun 23 20:28:56 2011 -0700
+++ b/pkg/Makefile	Mon Jun 27 13:58:10 2011 -0700
@@ -109,32 +109,6 @@
 SYNTH_PKGS= X-incorporation X-redistributable
 SYNTH_MANIFESTS = $(SYNTH_PKGS:%=%.p5m)
 
-# Any given package list may be empty, but we can only determine that 
-# dynamically, so we always generate all lists.
-#
-# The meanings of each package status are as follows:
-#
-# 	PKGSTAT		meaning
-# 	----------	----------------------------------------------------
-# 	noincorp	Do not include in incorporation or group package
-# 	grouponly	Include in group package, but not incorporation
-#	obsolete	Include in incorporation, but not group package
-#	renamed		Include in incorporation, but not group package
-#	current		Include in incorporation and group package
-#
-# Since the semantics of the "noincorp" package status dictate that
-# such packages are not included in the incorporation or group packages,
-# there is no need to build noincorp package lists.
-#
-# Since packages depend on their incorporation, noincorp necessarily
-# implies nodepend, or it would inadvertently pull in other packages.
-#
-PKGLISTS= \
-	$(PDIR)/packages.current \
-	$(PDIR)/packages.grouponly \
-	$(PDIR)/packages.renamed \
-	$(PDIR)/packages.obsolete
-
 # Manifests are in either manifests or legacy directory - merge in $(PDIR)
 $(PDIR)/%.p5m: manifests/%.p5m
 	$(PKGDEBUG)$(LN) -s ../$< $@
@@ -149,6 +123,10 @@
 manifests: $(PMANIFESTS)
 $(PMANIFESTS): $(PDIR)
 
+SMANIFESTS = $(SYNTH_MANIFESTS:%=$(PDIR)/%)
+manifests: $(SMANIFESTS)
+$(SMANIFESTS): $(PDIR)
+
 ### Additional metadata generation
 
 # This should eventually move into pkg publication
@@ -220,21 +198,19 @@
 PYTHON_PKG_VERSION_CMD = print $(PYTHON_VERSION) | tr -d '.'
 PKGMOG_DEFINES += PYTHON_PKG_VERSION=$(PYTHON_PKG_VERSION_CMD:sh)
 
+PROC_PKGS = $(PKGS:%=$(PDIR)/%.mog)
+PROC_CURRENT_PKGS = $(CURRENT_MANIFESTS:%.p5m=$(PDIR)/%.mog)
+PROC_LEGACY_PKGS = $(LEGACY_MANIFESTS:%.p5m=$(PDIR)/%.mog)
+PROC_SYNTH_PKGS = $(SYNTH_MANIFESTS:%.p5m=$(PDIR)/%.mog)
 
 # Default transformations to apply
 PM_TRANSFORMS = $(PKG_BRANDING_TRANSFORMS) \
 		common_actions publish restart_fmri facets \
-		licenses $(PDIR)/versions extract_metadata
+		licenses $(PDIR)/versions
 PM_INC = transforms
 
-PKGDEP_INCORP = depend fmri=pkg:/consolidation/X/X-incorporation type=require
-
-PROC_PKGS = $(PKGS:%=$(PDIR)/%.mog)
-PROC_SYNTH_PKGS = $(SYNTH_PKGS:%=$(PDIR)/%.mog)
-PROC_CURRENT_PKGS = $(CURRENT_MANIFESTS:%.p5m=$(PDIR)/%.mog)
-
-# Extra transforms for non-legacy packages
-$(PROC_CURRENT_PKGS):= EXTRA_TRANSFORMS = defaults
+# Additional transforms for specific types of packages
+$(PROC_CURRENT_PKGS) $(PROC_SYNTH_PKGS) := EXTRA_TRANSFORMS = defaults
 
 mogrify: $(PROC_PKGS)
 $(PROC_PKGS): $(PDIR)/versions
@@ -251,57 +227,13 @@
 
 $(PDIR)/%.mog: $(PDIR)/%.p5m $(PDIR)/%.attr
 	@print "## Processing manifest $(@F:.mog=.p5m)"
-	$(PKGDEBUG)$(RM) $(@) $(@:%.mog=%) $(@:%.mog=%.nodepend) \
-		$(@:%.mog=%.metadata.*) $(@).vars
+	$(PKGDEBUG)$(RM) $(@) $(@:%.mog=%) \
+		$(@:%.mog=%.metadata.*) $(@:%.mog=%.synth)
 	$(PKGDEBUG)$(PKGMOGRIFY) $(PKGMOG_VERBOSE) $(PM_INC:%= -I %) \
-		$(PKGMOG_DEFINES:%=-D %) -P $(@).vars -O $(@) \
-		$(@:.mog=.p5m) $(@:.mog=.attr) \
-		$(PM_TRANSFORMS) $(EXTRA_TRANSFORMS) 
-	$(PKGDEBUG)if [[ -f $(@) ]]; then \
-		eval PKGSTAT=current NODEPEND="$(SUPPRESSPKGDEP)" \
-			$$(cat -s $(@).vars) ; \
-		if [[ "$$NODEPEND" != "false" || "$$PKGSTAT" = "noincorp" ]]; \
-		then \
-			$(TOUCH) $(@:%.mog=%.nodepend); \
-		fi; \
-		$(LN) -s $(@F) \
-			$(PDIR)/$(@F:%.mog=%).metadata.$$PKGSTAT ; \
-		if [[ "$$PKGSTAT" = "current" || "$$PKGSTAT" = "renamed"  ]]; \
-		then \
-			print $(PKGDEP_INCORP) >> $(@); \
-		fi; \
-	else \
-		$(TOUCH) $(@); \
-	fi
-	$(PKGDEBUG)$(RM) $(@).vars
-
-# make the package lists from the real manifests for the synthetic manifests
-$(PKGLISTS): $(PROC_PKGS)
-	@print "## Generating $(@F:packages.%=%) package list"
-	$(PKGDEBUG)$(PERL) -nl -w -Mdiagnostics \
-	 -e 'if ($$_ =~ m{name=pkg.fmri value=(\S+)}) {' \
-	 -e '   printf "depend fmri=$$1 type=\$$(PKGDEP_TYPE)\n";' \
-	 -e '   close ARGV; ' \
-	 -e '}' $(PDIR)/*.metadata.$(@F:packages.%=%) > $(@).new
-	$(PKGDEBUG) mv -f $(@).new $(@)
-
-pkglists: $(PKGLISTS)
-
-# The package lists are generated with $(PKGDEP_TYPE) as their
-# dependency types, so that they can be included by either an
-# incorporation or a group package.
-#
-$(PDIR)/X-redistributable.mog:= PKGDEP_TYPE= require
-$(PDIR)/X-incorporation.mog:= PKGDEP_TYPE= incorporate
-
-# rule to build the synthetic manifests
-$(PROC_SYNTH_PKGS): $(PKGLISTS) $$(@F:%.mog=%.p5m)
-	@print "## Processing synthetic manifest $(@F:%.mog=%.p5m)"
-	$(PKGDEBUG)$(RM) $(@) $(@:%.mog=%).metadata.*
-	$(PKGDEBUG)$(PKGMOGRIFY) $(PKGMOG_VERBOSE) -I transforms -I $(PDIR) \
-		$(PKGMOG_DEFINES:%=-D %) -D PKGDEP_TYPE=$(PKGDEP_TYPE) \
-		-O $(@) $(@F:%.mog=%.p5m) \
-		$(PM_TRANSFORMS) defaults synthetic
+		$(PKGMOG_DEFINES:%=-D %) -O $(@) \
+		$(@:%.mog=%.p5m) $(@:%.mog=%.attr) \
+		$(PM_TRANSFORMS) $(EXTRA_TRANSFORMS)
+	$(PKGDEBUG)$(TOUCH) $(@)
 
 ### Dependency detection
 DEP_PKGS= $(PKGS:%=$(PDIR)/%.dep)
@@ -325,7 +257,7 @@
 $(PDIR)/%.dep: $(PDIR)/%.mog
 	@print "## Generating dependencies for $(<F)"
 	$(PKGDEBUG)$(RM) $(@)
-	$(PKGDEBUG)if [[ ! -f $(@:%.dep=%.nodepend) ]]; then \
+	$(PKGDEBUG)if [[ "$(SUPPRESSPKGDEP)" != "true" ]]; then \
 		pkgdepend generate -m $(PKGDEP_TOKENS:%=-D %) $(<) \
 			$(PKGROOT) > $(@); \
 	else \
@@ -374,14 +306,30 @@
 	$(PKGDEBUG)$(CP) $(@:%.dep.res=%.dep) $(@)
 
 # Post-processing of manifests after dependency resolution
+RES_PKGS = $(PKGS:%=$(PDIR)/%.res)
+RES_CURRENT_PKGS = $(CURRENT_MANIFESTS:%.p5m=$(PDIR)/%.res)
+RES_LEGACY_PKGS = $(LEGACY_MANIFESTS:%.p5m=$(PDIR)/%.res)
+RES_SYNTH_PKGS = $(SYNTH_MANIFESTS:%.p5m=$(PDIR)/%.res)
+
+POST_TRANSFORMS = post-pkgdepend extract_metadata
 $(PDIR)/%.res: $(PDIR)/%.dep.res
+	@print "## Post-processing manifest for $(@F:%.res=%)"
 	$(PKGDEBUG)if [[ -s $< ]] ; then \
 		$(PKGMOGRIFY) $(PKGMOG_VERBOSE) $(PM_INC:%= -I %) \
-			-O $@ $< post-pkgdepend ; \
+		 -O $@ -P $(@:%.res=%.synth) $< $(POST_TRANSFORMS) ; \
 	else \
 		$(CP) $< $@ ; \
 	fi
 
+# Generate info for synthetic manifests
+$(RES_SYNTH_PKGS): $(RES_PKGS) $$(@:%.res=%.dep.res)
+	@print "## Gathering package lists for synthetic package $(@F:%.res=%)"
+	$(PKGDEBUG)$(PKGMOGRIFY) $(PKGMOG_VERBOSE) $(PM_INC:%= -I %) \
+		-O $(@) -P $(@:%.res=%.synth.sed) \
+		$(@:%.res=%.dep.res) synthetic
+	$(PKGDEBUG)$(SED) -n -f $(@:%.res=%.synth.sed) $(PDIR)/*.synth >> $(@)
+
+
 ### pkglint checking (pre-publication)
 
 PKGLINT = pkglint