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