Makefile revision 1120
bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch###############################################################################
5e0ce63bb65db34d7f48b34bbb5545fa791781c4Timo Sirainen#
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen# Makefile for X Consolidation packages
a857fb61f1cc77a81d18adee6a95ae04c27a5ffbTimo Sirainen#
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen#
1904e2fc786dbc037039d284b371730777277fc5Aki Tuomi# Permission is hereby granted, free of charge, to any person obtaining a
1904e2fc786dbc037039d284b371730777277fc5Aki Tuomi# copy of this software and associated documentation files (the "Software"),
1904e2fc786dbc037039d284b371730777277fc5Aki Tuomi# to deal in the Software without restriction, including without limitation
a95a4743552a44f95f72e9bd3ad41cc44609632dTimo Sirainen# the rights to use, copy, modify, merge, publish, distribute, sublicense,
1904e2fc786dbc037039d284b371730777277fc5Aki Tuomi# and/or sell copies of the Software, and to permit persons to whom the
fb09842fd58e4f8c30de9dd0836434c712c62198Timo Sirainen# Software is furnished to do so, subject to the following conditions:
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen#
5a35caefcf8cf38c347f8406b26701487c8cda57Timo Sirainen# The above copyright notice and this permission notice (including the next
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen# paragraph) shall be included in all copies or substantial portions of the
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# Software.
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen#
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# DEALINGS IN THE SOFTWARE.
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen#
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen###############################################################################
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen# Heavily inspired by / borrowed from the ON usr/src/pkg/Makefile
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# Please read the comments in it and the accompanying README in ON for many
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# details omitted here.
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# Major differences in the X implementation:
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# - X only supports building one repo, not redist + extra
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# - X only supports building packages on the same platform as the binaries,
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# no cross-platform packaging
35283613d4c04ce18836e9fc431582c87b3710a0Timo Sirainen# - X has no bfu legacy to deal with
35283613d4c04ce18836e9fc431582c87b3710a0Timo Sirainen# - ON has all manifests in one directory, X splits into current & legacy
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# - Integrates with X consolidation makefile/build system instead of ON's
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo SirainenPWD:sh=pwd
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo SirainenTOP=$(PWD)/..
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen### Include common definitions
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Siraineninclude $(TOP)/open-src/common/Makefile.init
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen
a07b1d77c546256eebda95b7c403e92e1bbcbe94Timo Sirainen.SUFFIXES: .p5m .mog .dep .res .pub
a07b1d77c546256eebda95b7c403e92e1bbcbe94Timo Sirainen
a07b1d77c546256eebda95b7c403e92e1bbcbe94Timo Sirainen# We don't yet support building packages cross-architecture, but would
a07b1d77c546256eebda95b7c403e92e1bbcbe94Timo Sirainen# need this if we ever did. (See "Cross platform packaging notes" in
a07b1d77c546256eebda95b7c403e92e1bbcbe94Timo Sirainen# the ON usr/src/pkg/Makefile for what we'd have to do.)
a07b1d77c546256eebda95b7c403e92e1bbcbe94Timo SirainenPKGMACH = $(MACH)
a07b1d77c546256eebda95b7c403e92e1bbcbe94Timo Sirainen
a07b1d77c546256eebda95b7c403e92e1bbcbe94Timo Sirainen# Map X makefile names to the ones used in the rules copied from ON
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen# More to be updated if we ever decide to support building cross-platform
53d794b1cb99c0cc437ec9449d19abf504058390Timo SirainenPKGROOT = $(PROTODIR)
53d794b1cb99c0cc437ec9449d19abf504058390Timo SirainenPKGDEST = $(PROTOTOP)/pkg_$(PKGMACH)
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# Map the V=1 style of enabling more verbose build messages used in the
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# X.Org/automake builds to the macro used in the rules copied from ON
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen#
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# You can enable verbose output with either V=1 or PKGDEBUG=""
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo SirainenPKGDEBUG_V_0 = @
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo SirainenPKGDEBUG_V_1 =
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo SirainenPKGDEBUG_V_ = $(PKGDEBUG_V_0)
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo SirainenPKGDEBUG = $(PKGDEBUG_V_$(V))
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen# Commands used in rules copied from ON
53d794b1cb99c0cc437ec9449d19abf504058390Timo SirainenCP= /usr/bin/cp -f
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo SirainenLN= /usr/bin/ln
a3fe8c0c54d87822f4b4f8f0d10caac611861b2bTimo SirainenMV= /usr/bin/mv -f
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo SirainenRM= /usr/bin/rm -f
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo SirainenTOUCH= /usr/bin/touch
a3fe8c0c54d87822f4b4f8f0d10caac611861b2bTimo Sirainen
a3fe8c0c54d87822f4b4f8f0d10caac611861b2bTimo Sirainen#
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen# To suppress package dependency generation on any system, regardless
a3fe8c0c54d87822f4b4f8f0d10caac611861b2bTimo Sirainen# of how it was installed, set SUPPRESSPKGDEP=true in the build
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen# environment.
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen#
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo SirainenSUPPRESSPKGDEP= false
a3fe8c0c54d87822f4b4f8f0d10caac611861b2bTimo Sirainen
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen#
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# The packages directory will contain the processed manifests as
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen# direct build targets and subdirectories for package metadata extracted
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen# incidentally during manifest processing.
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen#
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen# Nothing underneath $(PDIR) should ever be managed by SCM.
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen#
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo SirainenPDIR= build-$(PKGMACH)
a3fe8c0c54d87822f4b4f8f0d10caac611861b2bTimo Sirainen
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen$(PDIR):
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen mkdir -p $@
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen#
a3fe8c0c54d87822f4b4f8f0d10caac611861b2bTimo Sirainen# By default, PKGS will list all manifests. To build and/or publish a
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen# subset of packages, override this on the command line or in the
a3fe8c0c54d87822f4b4f8f0d10caac611861b2bTimo Sirainen# build environment and then reference (implicitly or explicitly) the all
a3fe8c0c54d87822f4b4f8f0d10caac611861b2bTimo Sirainen# or install targets.
a3fe8c0c54d87822f4b4f8f0d10caac611861b2bTimo Sirainen#
a3fe8c0c54d87822f4b4f8f0d10caac611861b2bTimo SirainenCURRENT_MANIFESTS :sh= (cd manifests; print *.p5m)
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo SirainenLEGACY_MANIFESTS :sh= (cd legacy; print *.p5m)
53d794b1cb99c0cc437ec9449d19abf504058390Timo SirainenMANIFESTS = $(CURRENT_MANIFESTS) $(LEGACY_MANIFESTS)
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo SirainenPKGS= $(MANIFESTS:%.p5m=%)
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen
eb627e89fba85791ec894e57f96752b1bd64d001Timo Sirainen#
eb627e89fba85791ec894e57f96752b1bd64d001Timo Sirainen# Track the synthetic manifests separately so we can properly express
eb627e89fba85791ec894e57f96752b1bd64d001Timo Sirainen# build rules and dependencies. The synthetic and real packages use
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# different sets of transforms and macros for pkgmogrify.
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen#
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo SirainenSYNTH_PKGS= X-incorporation X-redistributable
eb627e89fba85791ec894e57f96752b1bd64d001Timo Sirainen
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# Any given package list may be empty, but we can only determine that
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# dynamically, so we always generate all lists.
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen#
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# The meanings of each package status are as follows:
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen#
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# PKGSTAT meaning
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# ---------- ----------------------------------------------------
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# noincorp Do not include in incorporation or group package
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen# grouponly Include in group package, but not incorporation
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen# obsolete Include in incorporation, but not group package
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen# renamed Include in incorporation, but not group package
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen# current Include in incorporation and group package
30be8c9beaa6944c13d80130fa7a1778b2f8a470Timo Sirainen#
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen# Since the semantics of the "noincorp" package status dictate that
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# such packages are not included in the incorporation or group packages,
a857fb61f1cc77a81d18adee6a95ae04c27a5ffbTimo Sirainen# there is no need to build noincorp package lists.
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen#
a857fb61f1cc77a81d18adee6a95ae04c27a5ffbTimo Sirainen# Since packages depend on their incorporation, noincorp necessarily
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen# implies nodepend, or it would inadvertently pull in other packages.
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen#
a857fb61f1cc77a81d18adee6a95ae04c27a5ffbTimo SirainenPKGLISTS= \
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen $(PDIR)/packages.current \
1904e2fc786dbc037039d284b371730777277fc5Aki Tuomi $(PDIR)/packages.grouponly \
1904e2fc786dbc037039d284b371730777277fc5Aki Tuomi $(PDIR)/packages.renamed \
1904e2fc786dbc037039d284b371730777277fc5Aki Tuomi $(PDIR)/packages.obsolete
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen
a3fe8c0c54d87822f4b4f8f0d10caac611861b2bTimo Sirainen# Manifests are in either manifests or legacy directory - merge in $(PDIR)
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen$(PDIR)/%.p5m: manifests/%.p5m
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen $(PKGDEBUG)$(LN) -s ../$< $@
5a35caefcf8cf38c347f8406b26701487c8cda57Timo Sirainen
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen$(PDIR)/%.p5m: legacy/%.p5m
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen $(PKGDEBUG)$(LN) -s ../$< $@
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen
5a35caefcf8cf38c347f8406b26701487c8cda57Timo Sirainen$(PDIR)/%.p5m: %.p5m
5a35caefcf8cf38c347f8406b26701487c8cda57Timo Sirainen $(PKGDEBUG)$(LN) -s ../$< $@
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen
53d794b1cb99c0cc437ec9449d19abf504058390Timo SirainenPMANIFESTS = $(MANIFESTS:%=$(PDIR)/%)
41ba4aa040e686b1b76eeb658e48731bac573ff0Timo Sirainenmanifests: $(PMANIFESTS)
53d794b1cb99c0cc437ec9449d19abf504058390Timo Sirainen$(PMANIFESTS): $(PDIR)
41ba4aa040e686b1b76eeb658e48731bac573ff0Timo Sirainen
cd2ed64888b42b481cde6bb9548c8520516fa3e9Timo Sirainen### Additional metadata generation
d2470b3dfe91ca07459185384ee25080b42a1636Timo Sirainen
d2470b3dfe91ca07459185384ee25080b42a1636Timo Sirainen# This should eventually move into pkg publication
d2470b3dfe91ca07459185384ee25080b42a1636Timo Sirainen
53d794b1cb99c0cc437ec9449d19abf504058390Timo SirainenFONT_MANIFESTS :sh= (cd manifests; print system-font-*.p5m)
53d794b1cb99c0cc437ec9449d19abf504058390Timo SirainenFONT_METADATA = $(FONT_MANIFESTS:%.p5m=$(PDIR)/%.font)
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo SirainenFONT_ATTRS = $(FONT_MANIFESTS:%.p5m=$(PDIR)/%.attr)
5a35caefcf8cf38c347f8406b26701487c8cda57Timo Sirainen
5a35caefcf8cf38c347f8406b26701487c8cda57Timo Sirainen$(FONT_ATTRS): $(FONT_METADATA)
5a35caefcf8cf38c347f8406b26701487c8cda57Timo Sirainen
5a35caefcf8cf38c347f8406b26701487c8cda57Timo Sirainen$(PDIR)/%.font: $(PDIR)/%.p5m
5a35caefcf8cf38c347f8406b26701487c8cda57Timo Sirainen @print "## Generating font metadata in $(@F)"
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen $(PKGDEBUG)$(RM) $(@)
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen $(PKGDEBUG)$(PERL) generate_font_metadata.pl \
abc014a64d1f63e01ea134700c67af4e098bf54fTimo Sirainen -p $(PROTODIR) -m $< > $@ || ( rm $@ ; exit 1 )
29ca4c8015b4936378d49937f97049f33d3aaaf9Timo Sirainen
29ca4c8015b4936378d49937f97049f33d3aaaf9Timo Sirainen### Manifest mogrification
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo SirainenPKGMOGRIFY = pkgmogrify
29ca4c8015b4936378d49937f97049f33d3aaaf9Timo Sirainen
29ca4c8015b4936378d49937f97049f33d3aaaf9Timo Sirainen# RELEASE = uname -r for the target release
29ca4c8015b4936378d49937f97049f33d3aaaf9Timo SirainenRELEASE = 5.11
29ca4c8015b4936378d49937f97049f33d3aaaf9Timo Sirainen
29ca4c8015b4936378d49937f97049f33d3aaaf9Timo Sirainen# Generate pkgmogrify transform file with correct build version info in
29ca4c8015b4936378d49937f97049f33d3aaaf9Timo Sirainen# Build number is derived from last nv_XXX tag in hg log
29ca4c8015b4936378d49937f97049f33d3aaaf9Timo Sirainen$(PDIR)/versions: transforms/versions.tmpl $(PDIR)
29ca4c8015b4936378d49937f97049f33d3aaaf9Timo Sirainen @print "## Substituting build info in versions transformation template"
29ca4c8015b4936378d49937f97049f33d3aaaf9Timo Sirainen $(PKGDEBUG)XNV_BUILDNUM="$${XNV_BUILDNUM:-$$(hg log | \
29ca4c8015b4936378d49937f97049f33d3aaaf9Timo Sirainen $(PERL) -l -n -e \
abc014a64d1f63e01ea134700c67af4e098bf54fTimo Sirainen 'if ($$_ =~ m/^tag:\s+nv_([\d\.]+)/) { print $$1 ; exit}')}" ; \
5a35caefcf8cf38c347f8406b26701487c8cda57Timo Sirainen PKGVERS_BUILTON="$(RELEASE)" ; \
94d0d29f23083c4e79a3fc6b76e9ed761b0e3511Timo Sirainen PKGVERS_BRANCH="0.$${XNV_BUILDNUM}" ; \
PKGVERS_BUILD="$${PKGVERS_BUILTON}-$${PKGVERS_BRANCH}" ; \
HG_ID="$$(hg id)" ; \
$(PERL) -p -e "s{_PKGVERS_BUILD_}{$${PKGVERS_BUILD}};" \
-e "s{_HG_ID_}{$${HG_ID}}" transforms/versions.tmpl > $@
# Set variables used by pkgmogrify
# Most upstream packages provide specific version numbers instead of using
# the default of $(OSPKGVERS)
# Some use $(X11PKGVERS) to refer to the X11 katamari version since they
# bundle together components from multiple upstream packages with individual
# version numbers
X11PKGVERS = 7.6
OSPKGVERS = 0.$(RELEASE)
# Base URL for ARC cases used in opensolaris.arc_url metadata
ARC_URL=http://arc.opensolaris.org/caselog/
# These are the macros that may be used in package manifests
PKGMOG_DEFINES= \
i386_ONLY=$(POUND_SIGN) \
sparc_ONLY=$(POUND_SIGN) \
$(PKGMACH)_ONLY= \
ARCH=$(PKGMACH) \
ARCH32=$(SUBDIR32_$(PKGMACH)) \
ARCH64=$(SUBDIR64_$(PKGMACH)) \
OSPKGVERS=$(OSPKGVERS) \
X11PKGVERS=$(X11PKGVERS) \
ARC_URL='$(ARC_URL)'
# Default transformations to apply
PM_TRANSFORMS = $(PKG_BRANDING_TRANSFORMS) \
common_actions publish restart_fmri facets \
licenses $(PDIR)/versions extract_metadata
PM_INC = transforms
PKGDEP_INCORP = depend fmri=pkg:/consolidation/X/X-incorporation type=require
PROC_PKGS = $(PKGS:%=$(PDIR)/%.mog)
PROC_SYNTH_PKGS = $(SYNTH_PKGS:%=$(PDIR)/%.mog)
PROC_CURRENT_PKGS = $(CURRENT_MANIFESTS:%.p5m=$(PDIR)/%.mog)
# Extra transforms for non-legacy packages
$(PROC_CURRENT_PKGS):= EXTRA_TRANSFORMS = defaults
mogrify: $(PROC_PKGS)
$(PROC_PKGS): $(PDIR)/versions
# Combine & uniq metadata & license attributes generated during build
$(PDIR)/%.attr:
@print "## Gathering metadata from build for $(@F)"
$(PKGDEBUG)case '$(@F)' in \
system-font-*) ADDITIONAL_ATTRS="$(@:%.attr=%.font)" ;; \
esac ; \
$(PERL) merge-metadata.pl $${ADDITIONAL_ATTRS} \
~(N)$(PROTOMETA)/$(@F:.attr=)/attributes_*.p5m \
~(N)$(PROTOMETA)/$(@F:.attr=)/license_*.p5m /dev/null > $@
$(PDIR)/%.mog: $(PDIR)/%.p5m $(PDIR)/%.attr
@print "## Processing manifest $(@F:.mog=.p5m)"
$(PKGDEBUG)$(RM) $(@) $(@:%.mog=%) $(@:%.mog=%.nodepend) \
$(@:%.mog=%.metadata.*) $(@).vars
$(PKGDEBUG)$(PKGMOGRIFY) $(PKGMOG_VERBOSE) $(PM_INC:%= -I %) \
$(PKGMOG_DEFINES:%=-D %) -P $(@).vars -O $(@) \
$(@:.mog=.p5m) $(@:.mog=.attr) \
$(PM_TRANSFORMS) $(EXTRA_TRANSFORMS)
$(PKGDEBUG)if [[ -f $(@) ]]; then \
eval PKGSTAT=current NODEPEND="$(SUPPRESSPKGDEP)" \
$$(cat -s $(@).vars) ; \
if [[ "$$NODEPEND" != "false" || "$$PKGSTAT" = "noincorp" ]]; \
then \
$(TOUCH) $(@:%.mog=%.nodepend); \
fi; \
$(LN) -s $(@F) \
$(PDIR)/$(@F:%.mog=%).metadata.$$PKGSTAT ; \
if [[ "$$PKGSTAT" = "current" || "$$PKGSTAT" = "renamed" ]]; \
then \
print $(PKGDEP_INCORP) >> $(@); \
fi; \
else \
$(TOUCH) $(@); \
fi
$(PKGDEBUG)$(RM) $(@).vars
# make the package lists from the real manifests for the synthetic manifests
$(PKGLISTS): $(PROC_PKGS)
@print "## Generating $(@F:packages.%=%) package list"
$(PKGDEBUG)$(PERL) -nl -w -Mdiagnostics \
-e 'if ($$_ =~ m{name=pkg.fmri value=(\S+)}) {' \
-e ' printf "depend fmri=$$1 type=\$$(PKGDEP_TYPE)\n";' \
-e ' close ARGV; ' \
-e '}' $(PDIR)/*.metadata.$(@F:packages.%=%) > $(@).new
$(PKGDEBUG) mv -f $(@).new $(@)
pkglists: $(PKGLISTS)
# The package lists are generated with $(PKGDEP_TYPE) as their
# dependency types, so that they can be included by either an
# incorporation or a group package.
#
$(PDIR)/X-redistributable.mog:= PKGDEP_TYPE= require
$(PDIR)/X-incorporation.mog:= PKGDEP_TYPE= incorporate
# rule to build the synthetic manifests
$(PROC_SYNTH_PKGS): $(PKGLISTS) $$(@F:%.mog=%.p5m)
@print "## Processing synthetic manifest $(@F:%.mog=%.p5m)"
$(PKGDEBUG)$(RM) $(@) $(@:%.mog=%).metadata.*
$(PKGDEBUG)$(PKGMOGRIFY) $(PKGMOG_VERBOSE) -I transforms -I $(PDIR) \
$(PKGMOG_DEFINES:%=-D %) -D PKGDEP_TYPE=$(PKGDEP_TYPE) \
-O $(@) $(@F:%.mog=%.p5m) \
$(PM_TRANSFORMS) defaults synthetic
### Dependency detection
DEP_PKGS= $(PKGS:%=$(PDIR)/%.dep)
DEP_SYNTH_PKGS= $(SYNTH_PKGS:%=$(PDIR)/%.dep)
PKGDEP_TOKENS_i386= \
'PLATFORM=i86hvm' \
'PLATFORM=i86pc' \
'PLATFORM=i86xpv' \
'ISALIST=amd64' \
'ISALIST=i386'
PKGDEP_TOKENS_sparc= \
'PLATFORM=sun4u' \
'PLATFORM=sun4v' \
'ISALIST=sparcv9' \
'ISALIST=sparc'
PKGDEP_TOKENS= $(PKGDEP_TOKENS_$(PKGMACH))
$(PDIR)/%.dep: $(PDIR)/%.mog
@print "## Generating dependencies for $(<F)"
$(PKGDEBUG)$(RM) $(@)
$(PKGDEBUG)if [[ ! -f $(@:%.dep=%.nodepend) ]]; then \
pkgdepend generate -m $(PKGDEP_TOKENS:%=-D %) $(<) \
$(PKGROOT) > $(@); \
else \
$(CP) $(<) $(@); \
fi
$(DEP_SYNTH_PKGS): $$(@:%.dep=%.mog)
@print "## Skipping dependency generation for $(@F:%.dep=%)"
$(PKGDEBUG)$(CP) $(@:%.dep=%.mog) $(@)
### Dependency resolution
#
# This rule resolves dependencies across all published manifests.
# We should be able to do this with
#
# pkgdepend resolve -m $(PUB_PKGS:%.pub=%.dep)
#
# but until 14113 is fixed, the incorporations confuse pkgdepend, so we
# just create the .res file for DEP_SYNTH_PKGS directly.
#
PKGDEP_VERBOSE_FLAG_0 =
PKGDEP_VERBOSE_FLAG_1 = -v
PKGDEP_VERBOSE_FLAG = $(PKGDEP_VERBOSE_FLAG_$(V))
# Root of pkg image to use for dependency resolution
# Normally / on the machine used to build the binaries
PKGDEP_RESOLVE_IMAGE = /
$(PDIR)/gendeps: $(DEP_SYNTH_PKGS) $(DEP_PKGS)
-$(PKGDEBUG)if [[ "$(SUPPRESSPKGDEP)" = "true" ]]; then \
print "## Suppressing dependency resolution"; \
for p in $(DEP_PKGS:%.dep=%); do \
$(CP) $$p.dep $$p.res; \
done; \
else \
print "## Resolving dependencies"; \
pkgdepend -R $(PKGDEP_RESOLVE_IMAGE) resolve \
$(PKGDEP_VERBOSE_FLAG) -m $(DEP_PKGS); \
for p in $(DEP_PKGS:%.dep=%); do \
$(MV) $$p.dep.res $$p.res; \
done; \
fi
$(PKGDEBUG)for p in $(DEP_SYNTH_PKGS:%.dep=%); \
do \
$(CP) $$p.dep $$p.res; \
done
$(PKGDEBUG)$(TOUCH) $(@)
gendeps: $(PDIR)/gendeps
### Repo setup
# Default in developer builds is "xnv-devel"
# X RE cronjob build scripts override to "xnv-nightly" or "xnv-biweekly"
PKGPUBLISHER = xnv-devel
# Initialize the empty on-disk repositories
$(PKGDEST):
@print "## Initializing $(@F)"
$(PKGDEBUG)pkgsend -s file://$(@) create-repository \
--set-property publisher.prefix=$(PKGPUBLISHER)
clean-repo:
$(RM) -r $(PKGDEST)
### Package publication to repo
PUB_PKGS= $(SYNTH_PKGS:%=$(PDIR)/%.pub) $(PKGS:%=$(PDIR)/%.pub)
publish_pkgs: $(PKGDEST) $(PDIR)/gendeps $(PUB_PKGS)
$(PUB_PKGS): $(PKGDEST) $(PDIR)/gendeps
$(PDIR)/%.pub: $(PKGDEST) $(PDIR)/gendeps $(PDIR)/%.res
$(PKGDEBUG) if [ -s $(@:%.pub=%.res) ]; then \
print "## Publishing $(@F:%.pub=%) to proto repository"; \
pkgsend -s file://$(PKGDEST) publish -d $(PKGROOT) \
-d license_files -d $(PROTOMETA)/$(@F:%.pub=%) \
--fmri-in-manifest --no-index --no-catalog \
$(@:%.pub=%.res) > /dev/null; \
fi; \
$(TOUCH) $(@)
### Repo finalization
install: repository-metadata
default: install
repository-metadata: $(PUB_PKGS)
@print "## Creating repository metadata"
$(PKGDEBUG)/usr/lib/pkg.depotd -d $(PKGDEST) \
--add-content --exit-ready
$(PKGDEBUG)chmod a+r $(PKGDEST)/cfg_cache
### Overall rules
all: $(PROC_PKGS) $(PROC_SYNTH_PKGS) $(DEP_PKGS) $(DEP_SYNTH_PKGS) \
$(PDIR)/gendeps
clean:
-$(RM) -r $(PDIR)
.PARALLEL: $(PKGS) $(PROC_PKGS) $(DEP_PKGS) \
$(PROC_SYNTH_PKGS) $(DEP_SYNTH_PKGS) $(PUB_PKGS)
#
# rules to validate proto area against manifests, and check for safe
# file permission modes
#
EXCEPTIONS= $(PWD)/../exception_lists/packaging $(PDIR)/generated-exceptions
# Automatically exclude all pkg-config uninstalled.pc files, since those
# should never be packaged
$(PDIR)/generated-exceptions:
$(PKGDEBUG)(cd $(PKGROOT) ; find . -name '*-uninstalled.pc') > $@
# Handle exceptions list exceptions-validate_pkg.p5m
EXCEPTIONS_MOG = $(PDIR)/exceptions-validate_pkg.mog
$(EXCEPTIONS_MOG):= EXTRA_TRANSFORMS = defaults
protocmp: $(PROC_PKGS) $(EXCEPTIONS) $(EXCEPTIONS_MOG) fix_perms
$(PKGDEBUG)validate_pkg -a $(PKGMACH) -v $(EXCEPTIONS:%=-e %) \
-m $(PDIR) -p $(PKGROOT)
pmodes: $(PROC_PKGS) fix_perms
$(PKGDEBUG)validate_pkg -a $(PKGMACH) -M -m $(PDIR)
check: protocmp pmodes
# Instead of fixing all the upstream packages to follow our permission rules
# just fix the proto area to match our rules
fix_perms:
@print "## Fixing proto area permissions"
$(PKGDEBUG)find $(PKGROOT) -type f -exec chmod a-w \{\} \+