Makefile revision 1147
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster###############################################################################
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Makefile for X Consolidation packages
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Permission is hereby granted, free of charge, to any person obtaining a
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# copy of this software and associated documentation files (the "Software"),
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# to deal in the Software without restriction, including without limitation
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# the rights to use, copy, modify, merge, publish, distribute, sublicense,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# and/or sell copies of the Software, and to permit persons to whom the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Software is furnished to do so, subject to the following conditions:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# The above copyright notice and this permission notice (including the next
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# paragraph) shall be included in all copies or substantial portions of the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# DEALINGS IN THE SOFTWARE.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster###############################################################################
20f5623265019e171eea2c55da2cd32688877506Phill Cunnington# Heavily inspired by / borrowed from the ON usr/src/pkg/Makefile
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Please read the comments in it and the accompanying README in ON for many
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# details omitted here.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Major differences in the X implementation:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# - X only supports building one repo, not redist + extra
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# - X only supports building packages on the same platform as the binaries,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# no cross-platform packaging
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# - X has no bfu legacy to deal with
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# - ON has all manifests in one directory, X splits into current & legacy
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# - Integrates with X consolidation makefile/build system instead of ON's
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster### Include common definitions
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# We don't yet support building packages cross-architecture, but would
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# need this if we ever did. (See "Cross platform packaging notes" in
90b04bccf245f5939d437a1c9de96db9f8097964Craig McDonnell# the ON usr/src/pkg/Makefile for what we'd have to do.)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Map X makefile names to the ones used in the rules copied from ON
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# More to be updated if we ever decide to support building cross-platform
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Map the V=1 style of enabling more verbose build messages used in the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# X.Org/automake builds to the macro used in the rules copied from ON
abd4d5547d40141d956adbbd8ac2e0efd5f025e1Andrew Forrest# You can enable verbose output with either V=1 or PKGDEBUG=""
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Commands used in rules copied from ON
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott# To suppress package dependency generation on any system, regardless
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# of how it was installed, set SUPPRESSPKGDEP=true in the build
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# environment.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# The packages directory will contain the processed manifests as
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# direct build targets and subdirectories for package metadata extracted
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# incidentally during manifest processing.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Nothing underneath $(PDIR) should ever be managed by SCM.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# By default, PKGS will list all manifests. To build and/or publish a
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# subset of packages, override this on the command line or in the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# build environment and then reference (implicitly or explicitly) the all
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott# or install targets.
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterCURRENT_MANIFESTS :sh= (cd manifests; print *.p5m)
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterMANIFESTS = $(CURRENT_MANIFESTS) $(LEGACY_MANIFESTS)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Track the synthetic manifests separately so we can properly express
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# build rules and dependencies. The synthetic and real packages use
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott# different sets of transforms and macros for pkgmogrify.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Any given package list may be empty, but we can only determine that
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# dynamically, so we always generate all lists.
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott# The meanings of each package status are as follows:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# PKGSTAT meaning
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# ---------- ----------------------------------------------------
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# noincorp Do not include in incorporation or group package
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# grouponly Include in group package, but not incorporation
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott# obsolete Include in incorporation, but not group package
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# renamed Include in incorporation, but not group package
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# current Include in incorporation and group package
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott# Since the semantics of the "noincorp" package status dictate that
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna# such packages are not included in the incorporation or group packages,
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna# there is no need to build noincorp package lists.
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna# Since packages depend on their incorporation, noincorp necessarily
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna# implies nodepend, or it would inadvertently pull in other packages.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Manifests are in either manifests or legacy directory - merge in $(PDIR)
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk### Additional metadata generation
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk# This should eventually move into pkg publication
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenkFONT_MANIFESTS :sh= (cd manifests; print system-font-*.p5m)
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenkFONT_METADATA = $(FONT_MANIFESTS:%.p5m=$(PDIR)/%.font)
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenkFONT_ATTRS = $(FONT_MANIFESTS:%.p5m=$(PDIR)/%.attr)
80849398a45dca1fb917716907d6ec99be6222c2Peter Major### Manifest mogrification
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# RELEASE = uname -r for the target release
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Generate pkgmogrify transform file with correct build version info in
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Build number is derived from last nv_XXX tag in hg log
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster$(PDIR)/versions: transforms/versions.tmpl $(PDIR)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster @print "## Substituting build info in versions transformation template"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)XNV_BUILDNUM="$${XNV_BUILDNUM:-$$(hg log | \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster 'if ($$_ =~ m/^tag:\s+nv_([\d\.]+)/) { print $$1 ; exit}')}" ; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster PKGVERS_BUILD="$${PKGVERS_BUILTON}-$${PKGVERS_BRANCH}" ; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PERL) -p -e "s{_PKGVERS_BUILD_}{$${PKGVERS_BUILD}};" \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster -e "s{_HG_ID_}{$${HG_ID}}" transforms/versions.tmpl > $@
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# Set variables used by pkgmogrify
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# These are the macros that may be used in package manifests
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Most upstream packages provide specific version numbers instead of using
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# the default of $(OSPKGVERS)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Some use $(X11PKGVERS) to refer to the X11 katamari version since they
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# bundle together components from multiple upstream packages with individual
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# version numbers
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Base URL for ARC cases used in opensolaris.arc_url metadata
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkPKGMOG_DEFINES += ARC_URL='http://arc.opensolaris.org/caselog/'
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# Platform specific choices
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGMOG_DEFINES += i386_ONLY=$(POUND_SIGN) sparc_ONLY=$(POUND_SIGN)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# Architecture specific directory names
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Perl version string used in package names, such as pkg:/runtime/perl-512
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkPERL_PKG_VERSION_CMD = print $(PERL_VERSION) | tr -d '.'
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkPKGMOG_DEFINES += PERL_PKG_VERSION=$(PERL_PKG_VERSION_CMD:sh)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Python version string used in path names, such as /usr/lib/python2.6
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGMOG_DEFINES += PYTHON_PATH_VERSION=$(PYTHON_VERSION)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Python version string used in package names, such as pkg:/runtime/python-26
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPYTHON_PKG_VERSION_CMD = print $(PYTHON_VERSION) | tr -d '.'
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGMOG_DEFINES += PYTHON_PKG_VERSION=$(PYTHON_PKG_VERSION_CMD:sh)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Default transformations to apply
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGDEP_INCORP = depend fmri=pkg:/consolidation/X/X-incorporation type=require
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkPROC_CURRENT_PKGS = $(CURRENT_MANIFESTS:%.p5m=$(PDIR)/%.mog)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# Extra transforms for non-legacy packages
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster$(PROC_CURRENT_PKGS):= EXTRA_TRANSFORMS = defaults
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# Combine & uniq metadata & license attributes generated during build
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk @print "## Gathering metadata from build for $(@F)"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster system-font-*) ADDITIONAL_ATTRS="$(@:%.attr=%.font)" ;; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PERL) merge-metadata.pl $${ADDITIONAL_ATTRS} \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ~(N)$(PROTOMETA)/$(@F:.attr=)/attributes_*.p5m \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ~(N)$(PROTOMETA)/$(@F:.attr=)/license_*.p5m /dev/null > $@
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk $(PKGDEBUG)$(RM) $(@) $(@:%.mog=%) $(@:%.mog=%.nodepend) \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk $(PKGDEBUG)$(PKGMOGRIFY) $(PKGMOG_VERBOSE) $(PM_INC:%= -I %) \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGMOG_DEFINES:%=-D %) -P $(@).vars -O $(@) \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster eval PKGSTAT=current NODEPEND="$(SUPPRESSPKGDEP)" \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if [[ "$$NODEPEND" != "false" || "$$PKGSTAT" = "noincorp" ]]; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if [[ "$$PKGSTAT" = "current" || "$$PKGSTAT" = "renamed" ]]; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# make the package lists from the real manifests for the synthetic manifests
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster @print "## Generating $(@F:packages.%=%) package list"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster -e 'if ($$_ =~ m{name=pkg.fmri value=(\S+)}) {' \
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell -e ' printf "depend fmri=$$1 type=\$$(PKGDEP_TYPE)\n";' \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk -e ' close ARGV; ' \
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk -e '}' $(PDIR)/*.metadata.$(@F:packages.%=%) > $(@).new
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell# The package lists are generated with $(PKGDEP_TYPE) as their
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# dependency types, so that they can be included by either an
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk# incorporation or a group package.
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk$(PDIR)/X-redistributable.mog:= PKGDEP_TYPE= require
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster$(PDIR)/X-incorporation.mog:= PKGDEP_TYPE= incorporate
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# rule to build the synthetic manifests
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk$(PROC_SYNTH_PKGS): $(PKGLISTS) $$(@F:%.mog=%.p5m)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster @print "## Processing synthetic manifest $(@F:%.mog=%.p5m)"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)$(PKGMOGRIFY) $(PKGMOG_VERBOSE) -I transforms -I $(PDIR) \
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk $(PKGMOG_DEFINES:%=-D %) -D PKGDEP_TYPE=$(PKGDEP_TYPE) \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk### Dependency detection
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster 'PLATFORM=i86hvm' \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster 'PLATFORM=i86pc' \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster 'PLATFORM=i86xpv' \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk 'ISALIST=amd64' \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster 'ISALIST=i386'
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster 'PLATFORM=sun4u' \
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk 'PLATFORM=sun4v' \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster 'ISALIST=sparcv9' \
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk 'ISALIST=sparc'
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk $(PKGDEBUG)if [[ ! -f $(@:%.dep=%.nodepend) ]]; then \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster pkgdepend generate -m $(PKGDEP_TOKENS:%=-D %) $(<) \
9fa57a4f31580310b62bb2f08906e6b73d510817jeff.schenk @print "## Skipping dependency generation for $(@F:%.dep=%)"
9fa57a4f31580310b62bb2f08906e6b73d510817jeff.schenk### Dependency resolution
9fa57a4f31580310b62bb2f08906e6b73d510817jeff.schenk# This rule resolves dependencies across all published manifests.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# We should be able to do this with
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# pkgdepend resolve -m $(PUB_PKGS:%.pub=%.dep)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# but until 14113 is fixed, the incorporations confuse pkgdepend, so we
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# just create the .res file for DEP_SYNTH_PKGS directly.
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkPKGDEP_VERBOSE_FLAG = $(PKGDEP_VERBOSE_FLAG_$(V))
2210fc30709625f254e6a6d5dc89c3bfefa48816Robert Wapshott# Root of pkg image to use for dependency resolution
2210fc30709625f254e6a6d5dc89c3bfefa48816Robert Wapshott# Normally / on the machine used to build the binaries
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell$(PDIR)/gendeps: $(DEP_SYNTH_PKGS) $(DEP_PKGS)
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell -$(PKGDEBUG)if [[ "$(SUPPRESSPKGDEP)" = "true" ]]; then \
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell print "## Suppressing dependency resolution"; \
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell print "## Resolving dependencies"; \
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell pkgdepend -R $(PKGDEP_RESOLVE_IMAGE) resolve \
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk $(PKGDEBUG)for p in $(DEP_SYNTH_PKGS:%.dep=%); \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster### pkglint checking (pre-publication)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# This rule runs pkglint across all manifests to be published.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# We require that packages be free from lint ERRORs before allowing them
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk# to be published. Lint WARNINGs are acceptable (though unpleasant)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# The list of packages is the list of packages that did not resolve to
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott# 0-byte files, $CHECK_PKGS
7ceb1915fe31e2cde224bba1255b4b948ce7c61dRobert Wapshott$(PDIR)/checkmf: $(PDIR)/gendeps $(DEP_SYNTH_PKGS) $(DEP_PKGS)
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott @print "## Checking packages"
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk -$(PKGDEBUG)for p in $(DEP_SYNTH_PKGS:%.dep=%) $(DEP_PKGS:%.dep=%); do \
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott if [[ -s $$p.res ]]; then \
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott if [[ -n "$${CHECK_PKGS}" ]]; then \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk if grep '^ERROR' $(PDIR)/pkglint-output.txt; then \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk### Repo setup
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# Default in developer builds is "xnv-devel"
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# X RE cronjob build scripts override to "xnv-nightly" or "xnv-biweekly"
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# Initialize the empty on-disk repositories
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk $(PKGDEBUG)pkgrepo add-publisher -s $(@) $(PKGPUBLISHER)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk### Package publication to repo
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkPUB_PKGS= $(SYNTH_PKGS:%=$(PDIR)/%.pub) $(PKGS:%=$(PDIR)/%.pub)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkpublish_pkgs: $(PKGDEST) $(PDIR)/gendeps $(PDIR)/checkmf $(PUB_PKGS)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk$(PUB_PKGS): $(PKGDEST) $(PDIR)/gendeps $(PDIR)/checkmf
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk$(PDIR)/%.pub: $(PKGDEST) $(PDIR)/gendeps $(PDIR)/%.res
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk print "## Publishing $(@F:%.pub=%) to proto repository"; \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk -d license_files -d $(PROTOMETA)/$(@F:%.pub=%) \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk --fmri-in-manifest --no-index --no-catalog -T '*.py' \
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna### Repo finalization
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna @print "## Creating repository metadata"
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk### pkglint checking (post-publication)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# Perform a pkglint run on the published repositories. We remove package
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# version information from the lint output so that it is comparable across
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk @print "## Running pkglint on the $(PKGPUBLISHER) repository"
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk -l file://$(PKGDEST) -c /tmp/pkglint_cache.$$$$ \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk > $(PDIR)/pkglint.out 2> $(PDIR)/pkglint.lint ; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)$(SED) -e 's/@[0-9TZ.:,-]*//g' $(PDIR)/pkglint.lint
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster### Overall rules
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshottall: $(PROC_PKGS) $(PROC_SYNTH_PKGS) $(DEP_PKGS) $(DEP_SYNTH_PKGS) \
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk $(PROC_SYNTH_PKGS) $(DEP_SYNTH_PKGS) $(PUB_PKGS)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# rules to validate proto area against manifests, and check for safe
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# file permission modes
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterEXCEPTIONS= $(PWD)/../exception_lists/packaging $(PDIR)/generated-exceptions
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Automatically exclude all pkg-config uninstalled.pc files, since those
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# should never be packaged
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)(cd $(PKGROOT) ; find . -name '*-uninstalled.pc') > $@
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Handle exceptions list exceptions-validate_pkg.p5m
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterEXCEPTIONS_MOG = $(PDIR)/exceptions-validate_pkg.mog
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkprotocmp: $(PROC_PKGS) $(EXCEPTIONS) $(EXCEPTIONS_MOG) fix_perms
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)validate_pkg -a $(PKGMACH) -v $(EXCEPTIONS:%=-e %) \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)validate_pkg -a $(PKGMACH) -M -m $(PDIR)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Instead of fixing all the upstream packages to follow our permission rules
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# just fix the proto area to match our rules
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster @print "## Fixing proto area permissions"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)find $(PKGROOT) -type f -exec chmod a-w \{\} \+