1 #
   2 # CDDL HEADER START
   3 #
   4 # The contents of this file are subject to the terms of the
   5 # Common Development and Distribution License (the "License").
   6 # You may not use this file except in compliance with the License.
   7 #
   8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9 # or http://www.opensolaris.org/os/licensing.
  10 # See the License for the specific language governing permissions
  11 # and limitations under the License.
  12 #
  13 # When distributing Covered Code, include this CDDL HEADER in each
  14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15 # If applicable, add the following below this CDDL HEADER, with the
  16 # fields enclosed by brackets "[]" replaced with your own identifying
  17 # information: Portions Copyright [yyyy] [name of copyright owner]
  18 #
  19 # CDDL HEADER END
  20 #
  21 
  22 #
  23 # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
  24 #
  25 
  26 #
  27 # This Makefile provides a framework for building the onbld python
  28 # modules with multiple versions of python.
  29 #
  30 # It expects as input:
  31 #
  32 #    PYSRCS   - List of python source files, these are also delivered as
  33 #               build product.
  34 #             
  35 #    PYOBJS   - List of compiled python (.pyc) files, with no directory prefix
  36 #             
  37 #    PYTOPDIR - Absolute (including $(ROOT)) path to which files will
  38 #               be installed, up until the version specific component.
  39 #             
  40 #    PYMODDIR - Relative path to which files will be installed, below
  41 #               the version specific component.
  42 #
  43 #    For example, to install to /opt/onbld/lib/onbld/python*/bar/
  44 #
  45 #          PYTOPDIR = $(ROOTONBLDLIB)
  46 #          PYMODDIR = bar
  47 #
  48 #
  49 # It provides as output:
  50 #
  51 #    ROOTPYFILES - The list of $(ROOT)-relative paths to which python
  52 #                  source and binary files will be installed.  Your
  53 #                  Makefile's 'install' target should depend upon
  54 #                  this.
  55 #
  56 #    PYVERSOBJS  - The list of paths to compiled python build products,
  57 #                  including their subdirectory.
  58 #
  59 #    pyclobber   - A target on which 'clobber' should depend, which
  60 #                  removes the per-version python directories and the
  61 #                  output within them.
  62 #
  63 
  64 PYFILES = $(PYSRCS) $(PYOBJS)
  65 
  66 ROOTPYDIR_24 = $(PYTOPDIR)/python2.4/$(PYMODDIR)
  67 ROOTPYFILES_24 = $(PYFILES:%=$(ROOTPYDIR_24)/%)
  68 
  69 ROOTPYDIR_26 = $(PYTOPDIR)/python2.6/$(PYMODDIR)
  70 ROOTPYFILES_26  = $(PYFILES:%=$(ROOTPYDIR_26)/%)
  71 
  72 ROOTPYFILES = $(ROOTPYFILES_24) $(ROOTPYFILES_26)
  73 $(ROOTPYFILES) := FILEMODE = 0444
  74 
  75 PYVERSDIRS = python2.4 python2.6
  76 
  77 PY24OBJS = $(PYOBJS:%=python2.4/%)
  78 $(PY24OBJS) := PYTHON = $(PYTHON_24)
  79 
  80 PY26OBJS = $(PYOBJS:%=python2.6/%)
  81 $(PY26OBJS) := PYTHON = $(PYTHON_26)
  82 
  83 PYVERSOBJS = $(PY24OBJS) $(PY26OBJS)
  84 
  85 CLOBBERFILES += $(PYVERSOBJS)
  86 CLOBBERDIRS += $(PYVERSDIRS)
  87 
  88 .KEEP_STATE:
  89 
  90 python2.4/%.pyc python2.6/%.pyc: %.py
  91         @[ -d $(@D) ] || mkdir $(@D)
  92         $(RM) $@
  93         $(PYTHON) -mpy_compile $<
  94         $(MV) $(*).pyc $@
  95 
  96 $(ROOTPYDIR_24)/%.pyc: python2.4/%.pyc
  97         $(INS.pyfile)
  98 
  99 $(ROOTPYDIR_26)/%.pyc: python2.6/%.pyc
 100         $(INS.pyfile)
 101 
 102 $(ROOTPYDIR_24)/%.py $(ROOTPYDIR_26)/%.py: %.py
 103         $(INS.pyfile)
 104 
 105 pyclobber:
 106         $(RM) $(CLOBBERFILES)
 107         $(RM) -rf $(CLOBBERDIRS)