Makefile revision 1261
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync###############################################################################
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Makefile for X Consolidation packages
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
e64031e20c39650a7bc902a3e1aba613b9415deevboxsync# Permission is hereby granted, free of charge, to any person obtaining a
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# copy of this software and associated documentation files (the "Software"),
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# to deal in the Software without restriction, including without limitation
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# the rights to use, copy, modify, merge, publish, distribute, sublicense,
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# and/or sell copies of the Software, and to permit persons to whom the
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Software is furnished to do so, subject to the following conditions:
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# The above copyright notice and this permission notice (including the next
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# paragraph) shall be included in all copies or substantial portions of the
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Software.
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# DEALINGS IN THE SOFTWARE.
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync###############################################################################
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Heavily inspired by / borrowed from the ON usr/src/pkg/Makefile
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Please read the comments in it and the accompanying README in ON for many
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# details omitted here.
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Major differences in the X implementation:
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# - X only supports building one repo, not redist + extra
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# - X only supports building packages on the same platform as the binaries,
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# no cross-platform packaging
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# - X has no bfu legacy to deal with
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# - ON has all manifests in one directory, X splits into current & legacy
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# - Integrates with X consolidation makefile/build system instead of ON's
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPWD:sh=pwd
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncTOP=$(PWD)/..
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync### Include common definitions
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncinclude $(TOP)/open-src/common/Makefile.init
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync.SUFFIXES: .p5m .mog .dep .res .pub
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# We don't yet support building packages cross-architecture, but would
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# need this if we ever did. (See "Cross platform packaging notes" in
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# the ON usr/src/pkg/Makefile for what we'd have to do.)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGMACH = $(MACH)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Map X makefile names to the ones used in the rules copied from ON
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# More to be updated if we ever decide to support building cross-platform
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGROOT = $(PROTODIR)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGDEST = $(PROTOTOP)/pkg_$(PKGMACH)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Map the V=1 style of enabling more verbose build messages used in the
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# X.Org/automake builds to the macro used in the rules copied from ON
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# You can enable verbose output with either V=1 or PKGDEBUG=""
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGDEBUG_V_0 = @
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGDEBUG_V_1 =
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGDEBUG_V_ = $(PKGDEBUG_V_0)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGDEBUG = $(PKGDEBUG_V_$(V))
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Commands used in rules copied from ON
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncCP= /usr/bin/cp -f
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncLN= /usr/bin/ln
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncMV= /usr/bin/mv -f
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncRM= /usr/bin/rm -f
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncSED= /usr/bin/sed
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncTOUCH= /usr/bin/touch
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# To suppress package dependency generation on any system, regardless
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# of how it was installed, set SUPPRESSPKGDEP=true in the build
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# environment.
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncSUPPRESSPKGDEP= false
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# The packages directory will contain the processed manifests as
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# direct build targets and subdirectories for package metadata extracted
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# incidentally during manifest processing.
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Nothing underneath $(PDIR) should ever be managed by SCM.
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPDIR= build-$(PKGMACH)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PDIR):
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync mkdir -p $@
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# By default, PKGS will list all manifests. To build and/or publish a
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# subset of packages, override this on the command line or in the
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# build environment and then reference (implicitly or explicitly) the all
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# or install targets.
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncCURRENT_MANIFESTS :sh= (cd manifests; print *.p5m)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncLEGACY_MANIFESTS :sh= (cd legacy; print *.p5m)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncMANIFESTS = $(CURRENT_MANIFESTS) $(LEGACY_MANIFESTS)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGS= $(MANIFESTS:%.p5m=%)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Track the synthetic manifests separately so we can properly express
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# build rules and dependencies. The synthetic and real packages use
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# different sets of transforms and macros for pkgmogrify.
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncSYNTH_PKGS= X-incorporation X-all
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncSYNTH_MANIFESTS = $(SYNTH_PKGS:%=%.p5m)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Special manifest for exceptions to pass to pkglint & validate_pkg
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncEXCEPTION_MANIFESTS = exceptions-validate_pkg.p5m
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Manifests are in either manifests or legacy directory - merge in $(PDIR)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PDIR)/%.p5m: manifests/%.p5m
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(LN) -s ../$< $@
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PDIR)/%.p5m: legacy/%.p5m
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(LN) -s ../$< $@
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PDIR)/%.p5m: %.p5m
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(LN) -s ../$< $@
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPMANIFESTS = $(MANIFESTS:%=$(PDIR)/%)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncSMANIFESTS = $(SYNTH_MANIFESTS:%=$(PDIR)/%)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncEMANIFESTS = $(EXCEPTION_MANIFESTS:%=$(PDIR)/%)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncALL_MANIFESTS = $(PMANIFESTS) $(SMANIFESTS) $(EMANIFESTS)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncmanifests: $(ALL_MANIFESTS)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(ALL_MANIFESTS): $(PDIR)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync### Additional metadata generation
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# This should eventually move into pkg publication
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncFONT_MANIFESTS :sh= (cd manifests; print system-font-*.p5m)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncFONT_METADATA = $(FONT_MANIFESTS:%.p5m=$(PDIR)/%.font)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncFONT_ATTRS = $(FONT_MANIFESTS:%.p5m=$(PDIR)/%.attr)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(FONT_ATTRS): $(FONT_METADATA)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PDIR)/%.font: $(PDIR)/%.p5m
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Generating font metadata in $(@F)"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(RM) $(@)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(PERL) generate_font_metadata.pl \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync -p $(PROTODIR) -m $< > $@ || ( rm $@ ; exit 1 )
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync### Manifest mogrification
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGMOGRIFY = pkgmogrify
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# RELEASE = uname -r for the target release
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncRELEASE = 5.11
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGVERS_BUILTON = $(RELEASE)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# The PKGVERS_BRANCH is determined by the values in the Makefile.buildnum
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncinclude Makefile.buildnum
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGVERS_BRANCH_MAIN = 0.$(TRUNKID).$(UPDATENUM).$(SRUNUM).$(PLATNUM)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGVERS_BRANCH = $(PKGVERS_BRANCH_MAIN).$(BUILDID).$(NIGHTLYID)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGVERS_BUILD = $(PKGVERS_BUILTON)-$(PKGVERS_BRANCH)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Generate pkgmogrify transform file with correct build version info in
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Build number is derived from last nv_XXX tag in hg log
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PDIR)/versions: transforms/versions.tmpl $(PDIR)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Substituting build info in versions transformation template"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG) HG_ID="$$(hg id)" ; \
5241858827a9ef9bcad4f3e9bf3ade21ee9c6f97vboxsync $(PERL) -p -e "s{_PKGVERS_BUILD_}{$(PKGVERS_BUILD)};" \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync -e "s{_HG_ID_}{$${HG_ID}}" transforms/versions.tmpl > $@
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Set variables used by pkgmogrify
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# These are the macros that may be used in package manifests
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGMOG_DEFINES =
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Most upstream packages provide specific version numbers instead of using
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# the default of $(OSPKGVERS)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Some use $(X11PKGVERS) to refer to the X11 katamari version since they
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# bundle together components from multiple upstream packages with individual
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# version numbers
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGMOG_DEFINES += X11PKGVERS=7.6
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGMOG_DEFINES += OSPKGVERS=0.$(RELEASE)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Base URL for ARC cases used in opensolaris.arc_url metadata
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGMOG_DEFINES += ARC_URL='http://arc.opensolaris.org/caselog/'
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Platform specific choices
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGMOG_DEFINES += i386_ONLY=$(POUND_SIGN) sparc_ONLY=$(POUND_SIGN)
88acfa6629a7976c0583c1712d2b5b22a87a5121vboxsyncPKGMOG_DEFINES += $(PKGMACH)_ONLY=
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Architecture specific directory names
88acfa6629a7976c0583c1712d2b5b22a87a5121vboxsyncPKGMOG_DEFINES += ARCH=$(PKGMACH)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGMOG_DEFINES += ARCH32=$(SUBDIR32_$(PKGMACH))
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGMOG_DEFINES += ARCH64=$(SUBDIR64_$(PKGMACH))
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Perl version string used in package names, such as pkg:/runtime/perl-512
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPERL_PKG_VERSION_CMD = print $(PERL_VERSION) | tr -d '.'
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGMOG_DEFINES += PERL_PKG_VERSION=$(PERL_PKG_VERSION_CMD:sh)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Python version string used in path names, such as /usr/lib/python2.6
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGMOG_DEFINES += PYTHON_PATH_VERSION=$(PYTHON_VERSION)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Python version string used in package names, such as pkg:/runtime/python-26
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPYTHON_PKG_VERSION_CMD = print $(PYTHON_VERSION) | tr -d '.'
5241858827a9ef9bcad4f3e9bf3ade21ee9c6f97vboxsyncPKGMOG_DEFINES += PYTHON_PKG_VERSION=$(PYTHON_PKG_VERSION_CMD:sh)
427735c505430fb6cd1253b26ca5ac0e4c55cbcfvboxsync
427735c505430fb6cd1253b26ca5ac0e4c55cbcfvboxsyncPROC_PKGS = $(PKGS:%=$(PDIR)/%.mog)
427735c505430fb6cd1253b26ca5ac0e4c55cbcfvboxsyncPROC_CURRENT_PKGS = $(CURRENT_MANIFESTS:%.p5m=$(PDIR)/%.mog)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPROC_LEGACY_PKGS = $(LEGACY_MANIFESTS:%.p5m=$(PDIR)/%.mog)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPROC_SYNTH_PKGS = $(SYNTH_MANIFESTS:%.p5m=$(PDIR)/%.mog)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPROC_EXCEPTIONS = $(EXCEPTION_MANIFESTS:%.p5m=$(PDIR)/%.mog)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Default transformations to apply
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPM_TRANSFORMS = $(PKG_BRANDING_TRANSFORMS) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync common_actions publish restart_fmri facets \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync licenses $(PDIR)/versions
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPM_INC = transforms
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Additional transforms for specific types of packages
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PROC_CURRENT_PKGS) $(PROC_SYNTH_PKGS) $(PROC_EXCEPTIONS) := \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync EXTRA_TRANSFORMS = defaults
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncmogrify: $(PROC_PKGS) $(PROC_EXCEPTIONS)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PROC_PKGS) $(PROC_SYNTH_PKGS): $(PDIR)/versions
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Combine & uniq metadata & license attributes generated during build
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PDIR)/%.attr:
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Gathering metadata from build for $(@F)"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)case '$(@F)' in \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync system-font-*) ADDITIONAL_ATTRS="$(@:%.attr=%.font)" ;; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync esac ; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PERL) merge-metadata.pl $${ADDITIONAL_ATTRS} \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync ~(N)$(PROTOMETA)/$(@F:.attr=)/attributes_*.p5m \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync ~(N)$(PROTOMETA)/$(@F:.attr=)/license_*.p5m /dev/null > $@
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PDIR)/%.mog: $(PDIR)/%.p5m $(PDIR)/%.attr
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Processing manifest $(@F:.mog=.p5m)"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(RM) $(@) $(@:%.mog=%) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(@:%.mog=%.metadata.*) $(@:%.mog=%.synth)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(PKGMOGRIFY) $(PKGMOG_VERBOSE) $(PM_INC:%= -I %) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGMOG_DEFINES:%=-D %) -O $(@) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(@:%.mog=%.p5m) $(@:%.mog=%.attr) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PM_TRANSFORMS) $(EXTRA_TRANSFORMS)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(TOUCH) $(@)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync### Dependency detection
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Package manifest containing list of packages to use in dependency
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# resolution, and not containing any dependencies to be detected/resolved.
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncDEP_LIST_PKG = developer-opensolaris-X
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncDEP_PKGS= $(PKGS:%=$(PDIR)/%.dep)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncDEP_CURRENT_PKGS_1 = $(CURRENT_MANIFESTS:%.p5m=$(PDIR)/%.dep)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncDEP_CURRENT_PKGS = $(DEP_CURRENT_PKGS_1:$(PDIR)/$(DEP_LIST_PKG).dep=)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncDEP_LEGACY_PKGS = $(LEGACY_MANIFESTS:%.p5m=$(PDIR)/%.dep)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncDEP_LEGACY_PKGS += $(DEP_LIST_PKG:%=$(PDIR)/%.dep)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncDEP_SYNTH_PKGS = $(SYNTH_MANIFESTS:%.p5m=$(PDIR)/%.dep)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGDEP_TOKENS_i386= \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync 'PLATFORM=i86hvm' \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync 'PLATFORM=i86pc' \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync 'PLATFORM=i86xpv' \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync 'ISALIST=amd64' \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync 'ISALIST=i386'
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGDEP_TOKENS_sparc= \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync 'PLATFORM=sun4u' \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync 'PLATFORM=sun4v' \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync 'ISALIST=sparcv9' \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync 'ISALIST=sparc'
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGDEP_TOKENS= $(PKGDEP_TOKENS_$(PKGMACH))
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PDIR)/%.dep: $(PDIR)/%.mog
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Generating dependencies for $(<F)"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(RM) $(@)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)if [[ "$(SUPPRESSPKGDEP)" != "true" ]]; then \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync pkgdepend generate -m $(PKGDEP_TOKENS:%=-D %) $(<) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGROOT) > $(@); \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync else \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(CP) $(<) $(@); \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync fi
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(DEP_SYNTH_PKGS) $(DEP_LEGACY_PKGS): $$(@:%.dep=%.mog)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Skipping dependency generation for $(@F:%.dep=%)"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(CP) $(@:%.dep=%.mog) $(@)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync### Dependency resolution
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncDEP_RES_PKGS = $(DEP_PKGS:%=%.res)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncDEP_RES_CURRENT_PKGS = $(DEP_CURRENT_PKGS:%=%.res)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncDEP_RES_LEGACY_PKGS = $(DEP_LEGACY_PKGS:%=%.res)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncDEP_RES_SYNTH_PKGS = $(DEP_SYNTH_PKGS:%=%.res)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGDEP_VERBOSE_FLAG_0 =
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGDEP_VERBOSE_FLAG_1 = -v
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGDEP_VERBOSE_FLAG = $(PKGDEP_VERBOSE_FLAG_$(V))
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Root of pkg image to use for dependency resolution
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Normally / on the machine used to build the binaries
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGDEP_RESOLVE_IMAGE = /
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# File listing packages to consider in dependency resolution.
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Automatically generated from the developer package to ensure they
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# stay in sync.
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGDEP_RESOLVE_LIST = $(PDIR)/resolve.deps
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PKGDEP_RESOLVE_LIST): $(PDIR)/$(DEP_LIST_PKG).mog
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Generating package list for dependency resolution"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(PKGMOGRIFY) $(PKGMOG_VERBOSE) $(PM_INC:%= -I %) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync -O /dev/null -P $(@) $(PDIR)/$(DEP_LIST_PKG).mog extract_depends
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# This rule resolves dependencies across all manifests for packages
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# currently delivering files.
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PDIR)/gendeps: $(DEP_CURRENT_PKGS) $(PKGDEP_RESOLVE_LIST)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)if [[ "$(SUPPRESSPKGDEP)" = "true" ]]; then \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync print "## Suppressing dependency resolution"; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync for p in $(DEP_CURRENT_PKGS:%.dep=%); do \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(CP) $$p.dep $$p.dep.res; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync done; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync else \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync print "## Resolving dependencies"; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync pkgdepend -R $(PKGDEP_RESOLVE_IMAGE) resolve -E \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEP_VERBOSE_FLAG) -e $(PKGDEP_RESOLVE_LIST) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync -m $(DEP_CURRENT_PKGS) ; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync fi
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(TOUCH) $(@)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncgendeps: $(PDIR)/gendeps
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(DEP_RES_CURRENT_PKGS): $(PDIR)/gendeps
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(DEP_RES_SYNTH_PKGS) $(DEP_RES_LEGACY_PKGS): $$(@:%.dep.res=%.dep)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Skipping dependency generation for $(@F:%.dep.res=%)"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(CP) $(@:%.dep.res=%.dep) $(@)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Post-processing of manifests after dependency resolution
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncRES_PKGS = $(PKGS:%=$(PDIR)/%.res)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncRES_CURRENT_PKGS = $(CURRENT_MANIFESTS:%.p5m=$(PDIR)/%.res)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncRES_LEGACY_PKGS = $(LEGACY_MANIFESTS:%.p5m=$(PDIR)/%.res)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncRES_SYNTH_PKGS = $(SYNTH_MANIFESTS:%.p5m=$(PDIR)/%.res)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPOST_TRANSFORMS = post-pkgdepend extract_metadata
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PDIR)/%.res: $(PDIR)/%.dep.res
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Post-processing manifest for $(@F:%.res=%)"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)if [[ -s $< ]] ; then \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGMOGRIFY) $(PKGMOG_VERBOSE) $(PM_INC:%= -I %) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync -O $@ -P $(@:%.res=%.synth) $< $(POST_TRANSFORMS) ; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync else \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(CP) $< $@ ; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync fi
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Generate info for synthetic manifests
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(RES_SYNTH_PKGS): $(RES_PKGS) $$(@:%.res=%.dep.res)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Gathering package lists for synthetic package $(@F:%.res=%)"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(PKGMOGRIFY) $(PKGMOG_VERBOSE) $(PM_INC:%= -I %) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync -O $(@) -P $(@:%.res=%.synth.sed) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(@:%.res=%.dep.res) synthetic
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(SED) -n -f $(@:%.res=%.synth.sed) $(PDIR)/*.synth >> $(@)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync### pkglint checking (pre-publication)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGLINT = pkglint
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGLINTRC = prepub-pkglintrc
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# This rule runs pkglint across all manifests to be published.
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# We require that packages be free from lint ERRORs before allowing them
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# to be published. Lint WARNINGs are acceptable (though unpleasant)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# The list of packages is the list of packages that did not resolve to
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# 0-byte files, $CHECK_PKGS
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PDIR)/checkmf: $(PDIR)/gendeps $(DEP_SYNTH_PKGS) $(DEP_PKGS)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Checking packages"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @$(RM) $@
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @$(TOUCH) $(PDIR)/pkglint-output.txt
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync -$(PKGDEBUG)for p in $(DEP_SYNTH_PKGS:%.dep=%) $(DEP_PKGS:%.dep=%); do \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync if [[ -s $$p.res ]]; then \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync CHECK_PKGS="$$p.res $${CHECK_PKGS}"; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync fi; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync done; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync if [[ -n "$${CHECK_PKGS}" ]]; then \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGLINT) -f $(PKGLINTRC) $${CHECK_PKGS} $(PROC_EXCEPTIONS) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync 2> $(PDIR)/pkglint-output.txt; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync fi ; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync if grep '^ERROR' $(PDIR)/pkglint-output.txt; then \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync return 1; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync fi
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @$(TOUCH) $@
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync### Repo setup
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Default in developer builds is "xnv-devel"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# X RE cronjob build scripts override to "xnv-nightly"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPKGPUBLISHER = xnv-devel
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Initialize the empty on-disk repositories
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PKGDEST):
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Initializing $(@F)"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)pkgrepo create --version 4 $(@)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)pkgrepo add-publisher -s $(@) $(PKGPUBLISHER)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncclean-repo:
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(RM) -r $(PKGDEST)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync### Package publication to repo
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncPUB_PKGS= $(SYNTH_PKGS:%=$(PDIR)/%.pub) $(PKGS:%=$(PDIR)/%.pub)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncpublish_pkgs: $(PKGDEST) $(PDIR)/gendeps $(PDIR)/checkmf $(PUB_PKGS)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PUB_PKGS): $(PKGDEST) $(PDIR)/gendeps $(PDIR)/checkmf
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PDIR)/%.pub: $(PKGDEST) $(PDIR)/gendeps $(PDIR)/%.res
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG) if [ -s $(@:%.pub=%.res) ]; then \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync print "## Publishing $(@F:%.pub=%) to proto repository"; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync pkgsend -s $(PKGDEST) publish -d $(PKGROOT) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync -d license_files -d $(PROTOMETA)/$(@F:%.pub=%) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync --fmri-in-manifest --no-index --no-catalog -T '*.py' \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(@:%.pub=%.res) > /dev/null; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync fi; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(TOUCH) $(@)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync### Repo finalization
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncinstall: repository-metadata
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncdefault: install
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncrepository-metadata: $(PUB_PKGS)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Creating repository metadata"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)pkgrepo refresh -s $(PKGDEST)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync### pkglint checking (post-publication)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncLINT_PKGLINTRC = postpub-pkglintrc
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
b79e4344bf4eb8033fd06d560cd864192728bd0bvboxsync# Perform a pkglint run on the published repositories. We remove package
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# version information from the lint output so that it is comparable across
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# lint runs.
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsynclint:
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Running pkglint on the $(PKGPUBLISHER) repository"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync -$(PKGDEBUG)$(PKGLINT) -f $(LINT_PKGLINTRC) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync -l file://$(PKGDEST) -c /tmp/pkglint_cache.$$$$ \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGLINT_REFERENCE_REPO:%=-r %) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync > $(PDIR)/pkglint.out 2> $(PDIR)/pkglint.lint ; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync grep '^Error:' $(PDIR)/pkglint.out ; \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(RM) -rf /tmp/pkglint_cache.$$$$
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(SED) -e 's/@[0-9TZ.:,-]*//g' $(PDIR)/pkglint.lint
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync### Overall rules
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncall: $(PROC_PKGS) $(PROC_SYNTH_PKGS) $(DEP_PKGS) $(DEP_SYNTH_PKGS) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PDIR)/gendeps
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncclean:
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync -$(RM) -r $(PDIR)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync.PARALLEL: $(PKGS) $(PROC_PKGS) $(DEP_PKGS) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PROC_SYNTH_PKGS) $(DEP_SYNTH_PKGS) $(PUB_PKGS)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync#
b79e4344bf4eb8033fd06d560cd864192728bd0bvboxsync# rules to validate proto area against manifests, and check for safe
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# file permission modes
b79e4344bf4eb8033fd06d560cd864192728bd0bvboxsync#
b79e4344bf4eb8033fd06d560cd864192728bd0bvboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncEXCEPTIONS= $(PWD)/../exception_lists/packaging $(PDIR)/generated-exceptions
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Automatically exclude all pkg-config uninstalled.pc files, since those
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# should never be packaged
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync$(PDIR)/generated-exceptions:
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)(cd $(PKGROOT) ; find . -name '*-uninstalled.pc') > $@
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncprotocmp: $(PROC_PKGS) $(EXCEPTIONS) $(PROC_EXCEPTIONS) fix_perms
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)validate_pkg -a $(PKGMACH) -v $(EXCEPTIONS:%=-e %) \
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync -m $(PDIR) -p $(PKGROOT)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncpmodes: $(PROC_PKGS) fix_perms
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)validate_pkg -a $(PKGMACH) -M -m $(PDIR)
1404accf62d12d9e9cfca5a55f246fc0cd180b25vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsynccheck-pkgfmt: $(ALL_MANIFESTS)
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Checking for manifests not in pkgfmt expected form"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)$(PKGFMT) -c $(ALL_MANIFESTS) || true
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print ""
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsynccheck: protocmp pmodes lint check-pkgfmt
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# Instead of fixing all the upstream packages to follow our permission rules
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync# just fix the proto area to match our rules
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsyncfix_perms:
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync @print "## Fixing proto area permissions"
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync $(PKGDEBUG)find $(PKGROOT) -type f -exec chmod a-w \{\} \+
83ef82c0f827540ae1bbbff41542f02cba3f4e95vboxsync