Makefile revision 1147
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster###############################################################################
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Makefile for X Consolidation packages
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
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#
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# Software.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
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#
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
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPWD:sh=pwd
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterTOP=$(PWD)/..
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster### Include common definitions
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterinclude $(TOP)/open-src/common/Makefile.init
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott.SUFFIXES: .p5m .mog .dep .res .pub
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
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 FosterPKGMACH = $(MACH)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
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 FosterPKGROOT = $(PROTODIR)
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGDEST = $(PROTOTOP)/pkg_$(PKGMACH)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
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
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
abd4d5547d40141d956adbbd8ac2e0efd5f025e1Andrew Forrest# You can enable verbose output with either V=1 or PKGDEBUG=""
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert WapshottPKGDEBUG_V_0 = @
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert WapshottPKGDEBUG_V_1 =
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGDEBUG_V_ = $(PKGDEBUG_V_0)
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGDEBUG = $(PKGDEBUG_V_$(V))
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Commands used in rules copied from ON
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterCP= /usr/bin/cp -f
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterLN= /usr/bin/ln
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterMV= /usr/bin/mv -f
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterRM= /usr/bin/rm -f
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterSED= /usr/bin/sed
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterTOUCH= /usr/bin/touch
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott#
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#
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterSUPPRESSPKGDEP= false
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
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#
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Nothing underneath $(PDIR) should ever be managed by SCM.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPDIR= build-$(PKGMACH)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster$(PDIR):
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster mkdir -p $@
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
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 Foster#
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterCURRENT_MANIFESTS :sh= (cd manifests; print *.p5m)
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterLEGACY_MANIFESTS :sh= (cd legacy; print *.p5m)
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterMANIFESTS = $(CURRENT_MANIFESTS) $(LEGACY_MANIFESTS)
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGS= $(MANIFESTS:%.p5m=%)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
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#
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterSYNTH_PKGS= X-incorporation X-redistributable
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Any given package list may be empty, but we can only determine that
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# dynamically, so we always generate all lists.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott# The meanings of each package status are as follows:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
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
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
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#
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna# Since packages depend on their incorporation, noincorp necessarily
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna# implies nodepend, or it would inadvertently pull in other packages.
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna#
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David LunaPKGLISTS= \
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna $(PDIR)/packages.current \
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna $(PDIR)/packages.grouponly \
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna $(PDIR)/packages.renamed \
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna $(PDIR)/packages.obsolete
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Manifests are in either manifests or legacy directory - merge in $(PDIR)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk$(PDIR)/%.p5m: manifests/%.p5m
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)$(LN) -s ../$< $@
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster$(PDIR)/%.p5m: legacy/%.p5m
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)$(LN) -s ../$< $@
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk$(PDIR)/%.p5m: %.p5m
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk $(PKGDEBUG)$(LN) -s ../$< $@
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenkPMANIFESTS = $(MANIFESTS:%=$(PDIR)/%)
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenkmanifests: $(PMANIFESTS)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster$(PMANIFESTS): $(PDIR)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk### Additional metadata generation
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk# This should eventually move into pkg publication
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk
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)
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk$(FONT_ATTRS): $(FONT_METADATA)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk$(PDIR)/%.font: $(PDIR)/%.p5m
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk @print "## Generating font metadata in $(@F)"
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk $(PKGDEBUG)$(RM) $(@)
94ab7a4a8fa00e44d9fe93df2c2a77c134a8e31cjeff.schenk $(PKGDEBUG)$(PERL) generate_font_metadata.pl \
80849398a45dca1fb917716907d6ec99be6222c2Peter Major -p $(PROTODIR) -m $< > $@ || ( rm $@ ; exit 1 )
80849398a45dca1fb917716907d6ec99be6222c2Peter Major
80849398a45dca1fb917716907d6ec99be6222c2Peter Major### Manifest mogrification
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGMOGRIFY = pkgmogrify
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# RELEASE = uname -r for the target release
80849398a45dca1fb917716907d6ec99be6222c2Peter MajorRELEASE = 5.11
80849398a45dca1fb917716907d6ec99be6222c2Peter Major
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 $(PERL) -l -n -e \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster 'if ($$_ =~ m/^tag:\s+nv_([\d\.]+)/) { print $$1 ; exit}')}" ; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster PKGVERS_BUILTON="$(RELEASE)" ; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster PKGVERS_BRANCH="0.$${XNV_BUILDNUM}" ; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster PKGVERS_BUILD="$${PKGVERS_BUILTON}-$${PKGVERS_BRANCH}" ; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster HG_ID="$$(hg id)" ; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PERL) -p -e "s{_PKGVERS_BUILD_}{$${PKGVERS_BUILD}};" \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster -e "s{_HG_ID_}{$${HG_ID}}" transforms/versions.tmpl > $@
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# Set variables used by pkgmogrify
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# These are the macros that may be used in package manifests
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkPKGMOG_DEFINES =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
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
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkPKGMOG_DEFINES += X11PKGVERS=7.6
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGMOG_DEFINES += OSPKGVERS=0.$(RELEASE)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
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
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# Platform specific choices
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGMOG_DEFINES += i386_ONLY=$(POUND_SIGN) sparc_ONLY=$(POUND_SIGN)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkPKGMOG_DEFINES += $(PKGMACH)_ONLY=
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# Architecture specific directory names
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGMOG_DEFINES += ARCH=$(PKGMACH)
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGMOG_DEFINES += ARCH32=$(SUBDIR32_$(PKGMACH))
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkPKGMOG_DEFINES += ARCH64=$(SUBDIR64_$(PKGMACH))
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
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
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
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Default transformations to apply
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPM_TRANSFORMS = $(PKG_BRANDING_TRANSFORMS) \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster common_actions publish restart_fmri facets \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster licenses $(PDIR)/versions extract_metadata
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPM_INC = transforms
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGDEP_INCORP = depend fmri=pkg:/consolidation/X/X-incorporation type=require
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkPROC_PKGS = $(PKGS:%=$(PDIR)/%.mog)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkPROC_SYNTH_PKGS = $(SYNTH_PKGS:%=$(PDIR)/%.mog)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkPROC_CURRENT_PKGS = $(CURRENT_MANIFESTS:%.p5m=$(PDIR)/%.mog)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# Extra transforms for non-legacy packages
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster$(PROC_CURRENT_PKGS):= EXTRA_TRANSFORMS = defaults
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkmogrify: $(PROC_PKGS)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster$(PROC_PKGS): $(PDIR)/versions
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# Combine & uniq metadata & license attributes generated during build
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk$(PDIR)/%.attr:
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk @print "## Gathering metadata from build for $(@F)"
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk $(PKGDEBUG)case '$(@F)' in \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster system-font-*) ADDITIONAL_ATTRS="$(@:%.attr=%.font)" ;; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster esac ; \
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 > $@
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk$(PDIR)/%.mog: $(PDIR)/%.p5m $(PDIR)/%.attr
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk @print "## Processing manifest $(@F:.mog=.p5m)"
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk $(PKGDEBUG)$(RM) $(@) $(@:%.mog=%) $(@:%.mog=%.nodepend) \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk $(@:%.mog=%.metadata.*) $(@).vars
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk $(PKGDEBUG)$(PKGMOGRIFY) $(PKGMOG_VERBOSE) $(PM_INC:%= -I %) \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGMOG_DEFINES:%=-D %) -P $(@).vars -O $(@) \
80849398a45dca1fb917716907d6ec99be6222c2Peter Major $(@:.mog=.p5m) $(@:.mog=.attr) \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PM_TRANSFORMS) $(EXTRA_TRANSFORMS)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk $(PKGDEBUG)if [[ -f $(@) ]]; then \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster eval PKGSTAT=current NODEPEND="$(SUPPRESSPKGDEP)" \
80849398a45dca1fb917716907d6ec99be6222c2Peter Major $$(cat -s $(@).vars) ; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if [[ "$$NODEPEND" != "false" || "$$PKGSTAT" = "noincorp" ]]; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster then \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(TOUCH) $(@:%.mog=%.nodepend); \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster fi; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(LN) -s $(@F) \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PDIR)/$(@F:%.mog=%).metadata.$$PKGSTAT ; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if [[ "$$PKGSTAT" = "current" || "$$PKGSTAT" = "renamed" ]]; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster then \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster print $(PKGDEP_INCORP) >> $(@); \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster fi; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster else \
82e9cf9293977022797142a643ac2020a794eee4Sachiko Wallace $(TOUCH) $(@); \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster fi
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)$(RM) $(@).vars
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# make the package lists from the real manifests for the synthetic manifests
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster$(PKGLISTS): $(PROC_PKGS)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster @print "## Generating $(@F:packages.%=%) package list"
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk $(PKGDEBUG)$(PERL) -nl -w -Mdiagnostics \
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
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG) mv -f $(@).new $(@)
6b0b9411405932b5ada376bb06d6bc3d94980d7fPeter Major
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpkglists: $(PKGLISTS)
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell
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.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk$(PDIR)/X-redistributable.mog:= PKGDEP_TYPE= require
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster$(PDIR)/X-incorporation.mog:= PKGDEP_TYPE= incorporate
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk
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)"
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk $(PKGDEBUG)$(RM) $(@) $(@:%.mog=%).metadata.*
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)$(PKGMOGRIFY) $(PKGMOG_VERBOSE) -I transforms -I $(PDIR) \
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk $(PKGMOG_DEFINES:%=-D %) -D PKGDEP_TYPE=$(PKGDEP_TYPE) \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster -O $(@) $(@F:%.mog=%.p5m) \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PM_TRANSFORMS) defaults synthetic
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk### Dependency detection
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterDEP_PKGS= $(PKGS:%=$(PDIR)/%.dep)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkDEP_SYNTH_PKGS= $(SYNTH_PKGS:%=$(PDIR)/%.dep)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGDEP_TOKENS_i386= \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster 'PLATFORM=i86hvm' \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster 'PLATFORM=i86pc' \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster 'PLATFORM=i86xpv' \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk 'ISALIST=amd64' \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster 'ISALIST=i386'
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGDEP_TOKENS_sparc= \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster 'PLATFORM=sun4u' \
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk 'PLATFORM=sun4v' \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster 'ISALIST=sparcv9' \
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk 'ISALIST=sparc'
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGDEP_TOKENS= $(PKGDEP_TOKENS_$(PKGMACH))
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk$(PDIR)/%.dep: $(PDIR)/%.mog
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk @print "## Generating dependencies for $(<F)"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)$(RM) $(@)
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk $(PKGDEBUG)if [[ ! -f $(@:%.dep=%.nodepend) ]]; then \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster pkgdepend generate -m $(PKGDEP_TOKENS:%=-D %) $(<) \
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk $(PKGROOT) > $(@); \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster else \
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk $(CP) $(<) $(@); \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster fi
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster$(DEP_SYNTH_PKGS): $$(@:%.dep=%.mog)
9fa57a4f31580310b62bb2f08906e6b73d510817jeff.schenk @print "## Skipping dependency generation for $(@F:%.dep=%)"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)$(CP) $(@:%.dep=%.mog) $(@)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
9fa57a4f31580310b62bb2f08906e6b73d510817jeff.schenk### Dependency resolution
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
9fa57a4f31580310b62bb2f08906e6b73d510817jeff.schenk# This rule resolves dependencies across all published manifests.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# We should be able to do this with
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# pkgdepend resolve -m $(PUB_PKGS:%.pub=%.dep)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
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.schenk#
9fa57a4f31580310b62bb2f08906e6b73d510817jeff.schenk
9fa57a4f31580310b62bb2f08906e6b73d510817jeff.schenkPKGDEP_VERBOSE_FLAG_0 =
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert WapshottPKGDEP_VERBOSE_FLAG_1 = -v
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkPKGDEP_VERBOSE_FLAG = $(PKGDEP_VERBOSE_FLAG_$(V))
9fa57a4f31580310b62bb2f08906e6b73d510817jeff.schenk
2210fc30709625f254e6a6d5dc89c3bfefa48816Robert Wapshott# Root of pkg image to use for dependency resolution
2210fc30709625f254e6a6d5dc89c3bfefa48816Robert Wapshott# Normally / on the machine used to build the binaries
2210fc30709625f254e6a6d5dc89c3bfefa48816Robert WapshottPKGDEP_RESOLVE_IMAGE = /
2210fc30709625f254e6a6d5dc89c3bfefa48816Robert Wapshott
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell$(PDIR)/gendeps: $(DEP_SYNTH_PKGS) $(DEP_PKGS)
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell -$(PKGDEBUG)if [[ "$(SUPPRESSPKGDEP)" = "true" ]]; then \
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell print "## Suppressing dependency resolution"; \
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell for p in $(DEP_PKGS:%.dep=%); do \
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell $(CP) $$p.dep $$p.res; \
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell done; \
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell else \
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell print "## Resolving dependencies"; \
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell pkgdepend -R $(PKGDEP_RESOLVE_IMAGE) resolve \
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell $(PKGDEP_VERBOSE_FLAG) -m $(DEP_PKGS); \
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell for p in $(DEP_PKGS:%.dep=%); do \
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell $(MV) $$p.dep.res $$p.res; \
2210fc30709625f254e6a6d5dc89c3bfefa48816Robert Wapshott done; \
9fa57a4f31580310b62bb2f08906e6b73d510817jeff.schenk fi
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk $(PKGDEBUG)for p in $(DEP_SYNTH_PKGS:%.dep=%); \
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk do \
9fa57a4f31580310b62bb2f08906e6b73d510817jeff.schenk $(CP) $$p.dep $$p.res; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster done
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)$(TOUCH) $(@)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fostergendeps: $(PDIR)/gendeps
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster### pkglint checking (pre-publication)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGLINT = pkglint
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterPKGLINTRC = prepub-pkglintrc
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
24ea8b0bf00ce7b51c10c2ba4108ad9b02c49e3fCraig McDonnell#
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# This rule runs pkglint across all manifests to be published.
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk#
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
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott#
7ceb1915fe31e2cde224bba1255b4b948ce7c61dRobert Wapshott$(PDIR)/checkmf: $(PDIR)/gendeps $(DEP_SYNTH_PKGS) $(DEP_PKGS)
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott @print "## Checking packages"
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott @$(TOUCH) $(PDIR)/pkglint-output.txt
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk -$(PKGDEBUG)for p in $(DEP_SYNTH_PKGS:%.dep=%) $(DEP_PKGS:%.dep=%); do \
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott if [[ -s $$p.res ]]; then \
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott CHECK_PKGS="$$p.res $${CHECK_PKGS}"; \
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott fi; \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk done; \
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott if [[ -n "$${CHECK_PKGS}" ]]; then \
72450cb9c2ca854c6d3479832c2738196c1d3282Robert Wapshott $(PKGLINT) -f $(PKGLINTRC) $${CHECK_PKGS} \
7ceb1915fe31e2cde224bba1255b4b948ce7c61dRobert Wapshott 2> $(PDIR)/pkglint-output.txt; \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk fi ; \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk if grep '^ERROR' $(PDIR)/pkglint-output.txt; then \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk return 1; \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk fi
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk### Repo setup
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# Default in developer builds is "xnv-devel"
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# X RE cronjob build scripts override to "xnv-nightly" or "xnv-biweekly"
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkPKGPUBLISHER = xnv-devel
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk# Initialize the empty on-disk repositories
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk$(PKGDEST):
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk @print "## Initializing $(@F)"
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk $(PKGDEBUG)pkgrepo create --version 4 $(@)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk $(PKGDEBUG)pkgrepo add-publisher -s $(@) $(PKGPUBLISHER)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkclean-repo:
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk $(RM) -r $(PKGDEST)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
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
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk$(PUB_PKGS): $(PKGDEST) $(PDIR)/gendeps $(PDIR)/checkmf
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk$(PDIR)/%.pub: $(PKGDEST) $(PDIR)/gendeps $(PDIR)/%.res
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk $(PKGDEBUG) if [ -s $(@:%.pub=%.res) ]; then \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk print "## Publishing $(@F:%.pub=%) to proto repository"; \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk pkgsend -s $(PKGDEST) publish -d $(PKGROOT) \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk -d license_files -d $(PROTOMETA)/$(@F:%.pub=%) \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk --fmri-in-manifest --no-index --no-catalog -T '*.py' \
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna $(@:%.pub=%.res) > /dev/null; \
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna fi; \
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna $(TOUCH) $(@)
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna### Repo finalization
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Lunainstall: repository-metadata
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Lunadefault: install
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Lunarepository-metadata: $(PUB_PKGS)
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna @print "## Creating repository metadata"
57a1b25dcdf865eacb2fe2e17c5ca83e942da047David Luna $(PKGDEBUG)pkgrepo refresh -s $(PKGDEST)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk### pkglint checking (post-publication)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkLINT_PKGLINTRC = postpub-pkglintrc
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk#
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# lint runs.
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk#
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenklint:
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk @print "## Running pkglint on the $(PKGPUBLISHER) repository"
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk -$(PKGDEBUG)$(PKGLINT) -f $(LINT_PKGLINTRC) \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk -l file://$(PKGDEST) -c /tmp/pkglint_cache.$$$$ \
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott $(PKGLINT_REFERENCE_REPO:%=-r %) \
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk > $(PDIR)/pkglint.out 2> $(PDIR)/pkglint.lint ; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster grep '^Error:' $(PDIR)/pkglint.out ; \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(RM) -rf /tmp/pkglint_cache.$$$$
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)$(SED) -e 's/@[0-9TZ.:,-]*//g' $(PDIR)/pkglint.lint
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster### Overall rules
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshottall: $(PROC_PKGS) $(PROC_SYNTH_PKGS) $(DEP_PKGS) $(DEP_SYNTH_PKGS) \
71ef1e179613c2e17b9ad5f1c9db6bf533941f9dRobert Wapshott $(PDIR)/gendeps
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterclean:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster -$(RM) -r $(PDIR)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster.PARALLEL: $(PKGS) $(PROC_PKGS) $(DEP_PKGS) \
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk $(PROC_SYNTH_PKGS) $(DEP_SYNTH_PKGS) $(PUB_PKGS)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# rules to validate proto area against manifests, and check for safe
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# file permission modes
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterEXCEPTIONS= $(PWD)/../exception_lists/packaging $(PDIR)/generated-exceptions
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Automatically exclude all pkg-config uninstalled.pc files, since those
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# should never be packaged
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster$(PDIR)/generated-exceptions:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)(cd $(PKGROOT) ; find . -name '*-uninstalled.pc') > $@
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Handle exceptions list exceptions-validate_pkg.p5m
8af80418ba1ec431c8027fa9668e5678658d3611Allan FosterEXCEPTIONS_MOG = $(PDIR)/exceptions-validate_pkg.mog
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk$(EXCEPTIONS_MOG):= EXTRA_TRANSFORMS = defaults
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenkprotocmp: $(PROC_PKGS) $(EXCEPTIONS) $(EXCEPTIONS_MOG) fix_perms
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)validate_pkg -a $(PKGMACH) -v $(EXCEPTIONS:%=-e %) \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster -m $(PDIR) -p $(PKGROOT)
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpmodes: $(PROC_PKGS) fix_perms
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)validate_pkg -a $(PKGMACH) -M -m $(PDIR)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fostercheck: protocmp pmodes lint
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
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
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterfix_perms:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster @print "## Fixing proto area permissions"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $(PKGDEBUG)find $(PKGROOT) -type f -exec chmod a-w \{\} \+
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster