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)