Makefile revision 1261
546N/A############################################################################### 546N/A# Makefile for X Consolidation packages 919N/A# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. 919N/A# Permission is hereby granted, free of charge, to any person obtaining a 919N/A# copy of this software and associated documentation files (the "Software"), 919N/A# to deal in the Software without restriction, including without limitation 546N/A# the rights to use, copy, modify, merge, publish, distribute, sublicense, 919N/A# and/or sell copies of the Software, and to permit persons to whom the 919N/A# Software is furnished to do so, subject to the following conditions: 546N/A# The above copyright notice and this permission notice (including the next 919N/A# paragraph) shall be included in all copies or substantial portions of the 919N/A# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 919N/A# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 919N/A# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 919N/A# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 546N/A# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 546N/A# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 546N/A# DEALINGS IN THE SOFTWARE. 546N/A############################################################################### 546N/A# Please read the comments in it and the accompanying README in ON for many 546N/A# Major differences in the X implementation: 546N/A# - X only supports building one repo, not redist + extra 546N/A# - X only supports building packages on the same platform as the binaries, 546N/A# no cross-platform packaging 546N/A# - X has no bfu legacy to deal with 546N/A# - ON has all manifests in one directory, X splits into current & legacy 546N/A### Include common definitions 546N/A# We don't yet support building packages cross-architecture, but would 546N/A# need this if we ever did. (See "Cross platform packaging notes" in 546N/A# Map X makefile names to the ones used in the rules copied from ON 546N/A# More to be updated if we ever decide to support building cross-platform 546N/A# Map the V=1 style of enabling more verbose build messages used in the 546N/A# You can enable verbose output with either V=1 or PKGDEBUG="" 546N/A# Commands used in rules copied from ON 546N/A# To suppress package dependency generation on any system, regardless 546N/A# of how it was installed, set SUPPRESSPKGDEP=true in the build 546N/A# The packages directory will contain the processed manifests as 546N/A# direct build targets and subdirectories for package metadata extracted 546N/A# incidentally during manifest processing. 546N/A# Nothing underneath $(PDIR) should ever be managed by SCM. 546N/A# By default, PKGS will list all manifests. To build and/or publish a 546N/A# subset of packages, override this on the command line or in the 546N/A# build environment and then reference (implicitly or explicitly) the all 546N/A# Track the synthetic manifests separately so we can properly express 546N/A# build rules and dependencies. The synthetic and real packages use 546N/A# different sets of transforms and macros for pkgmogrify. 546N/A# Special manifest for exceptions to pass to pkglint & validate_pkg 546N/A# Manifests are in either manifests or legacy directory - merge in $(PDIR) 546N/A### Additional metadata generation 546N/A# This should eventually move into pkg publication 1233N/A @
print "## Generating font metadata in $(@F)" 546N/A### Manifest mogrification 546N/A# RELEASE = uname -r for the target release 546N/A# Generate pkgmogrify transform file with correct build version info in 546N/A# Build number is derived from last nv_XXX tag in hg log 546N/A @
print "## Substituting build info in versions transformation template" 546N/A# Set variables used by pkgmogrify 546N/A# These are the macros that may be used in package manifests 546N/A# Most upstream packages provide specific version numbers instead of using 546N/A# the default of $(OSPKGVERS) 546N/A# Some use $(X11PKGVERS) to refer to the X11 katamari version since they 546N/A# bundle together components from multiple upstream packages with individual 546N/A# Platform specific choices 546N/A# Architecture specific directory names 546N/A# Default transformations to apply 546N/A# Additional transforms for specific types of packages 546N/A# Combine & uniq metadata & license attributes generated during build 546N/A @
print "## Gathering metadata from build for $(@F)" 546N/A### Dependency detection 546N/A# Package manifest containing list of packages to use in dependency 546N/A @
print "## Generating dependencies for $(<F)" 546N/A @
print "## Skipping dependency generation for $(@F:%.dep=%)" 546N/A### Dependency resolution 546N/A# Root of pkg image to use for dependency resolution 546N/A# Normally / on the machine used to build the binaries 546N/A# File listing packages to consider in dependency resolution. 546N/A# Automatically generated from the developer package to ensure they 546N/A @
print "## Generating package list for dependency resolution" 546N/A# This rule resolves dependencies across all manifests for packages 546N/A# currently delivering files. 546N/A print "## Suppressing dependency resolution"; \
546N/A print "## Resolving dependencies"; \
546N/A @
print "## Skipping dependency generation for $(@F:%.dep.res=%)" 546N/A# Post-processing of manifests after dependency resolution 546N/A @
print "## Post-processing manifest for $(@F:%.res=%)" 546N/A# Generate info for synthetic manifests 546N/A @
print "## Gathering package lists for synthetic package $(@F:%.res=%)" 546N/A### pkglint checking (pre-publication) 546N/A# This rule runs pkglint across all manifests to be published. 546N/A# We require that packages be free from lint ERRORs before allowing them 546N/A# to be published. Lint WARNINGs are acceptable (though unpleasant) 546N/A# The list of packages is the list of packages that did not resolve to 546N/A# 0-byte files, $CHECK_PKGS 546N/A @
print "## Checking packages" 546N/A if [[ -n
"$${CHECK_PKGS}" ]];
then \
546N/A# Default in developer builds is "xnv-devel" 546N/A# X RE cronjob build scripts override to "xnv-nightly" 546N/A# Initialize the empty on-disk repositories 546N/A @
print "## Initializing $(@F)" 546N/A### Package publication to repo 546N/A print "## Publishing $(@F:%.pub=%) to proto repository"; \
546N/A @
print "## Creating repository metadata" 546N/A### pkglint checking (post-publication) 546N/A# Perform a pkglint run on the published repositories. We remove package 546N/A# version information from the lint output so that it is comparable across 546N/A# rules to validate proto area against manifests, and check for safe 546N/A# should never be packaged 546N/A @
print "## Checking for manifests not in pkgfmt expected form" 546N/A# Instead of fixing all the upstream packages to follow our permission rules 546N/A# just fix the proto area to match our rules 546N/A @
print "## Fixing proto area permissions"