1##--------------------------------------------------------------------- 2# Makefile for python_modules (supporting multiple versions) 3##--------------------------------------------------------------------- 4Project = python_modules 5PYTHONPROJECT = python 6MYFIX = $(SRCROOT)/fix 7_VERSIONERDIR := /usr/local/versioner 8# Look for /usr/local/versioner in $(SDKROOT), defaulting to /usr/local/versioner 9VERSIONERDIR := $(or $(wildcard $(SDKROOT)$(_VERSIONERDIR)),$(_VERSIONERDIR)) 10PYTHONVERSIONS = $(VERSIONERDIR)/$(PYTHONPROJECT)/versions 11INCOMPATIBLE = 12DEFAULT := $(shell sed -n '/^DEFAULT = /s///p' $(PYTHONVERSIONS)) 13KNOWNVERSIONS := $(filter-out $(INCOMPATIBLE), $(shell grep '^[0-9]' $(PYTHONVERSIONS))) 14BOOTSTRAPPYTHON = 15VERSIONS = $(sort $(KNOWNVERSIONS) $(BOOTSTRAPPYTHON)) 16ORDEREDVERS := $(DEFAULT) $(filter-out $(DEFAULT),$(VERSIONS)) 17VERSIONERFLAGS = -std=gnu99 -Wall -mdynamic-no-pic -I$(VERSIONERDIR)/$(PYTHONPROJECT) -I$(MYFIX) -framework CoreFoundation 18OSV = OpenSourceVersions 19OSL = OpenSourceLicenses 20 21FIX = $(VERSIONERDIR)/$(PYTHONPROJECT)/fix 22TESTOK := -f $(shell echo $(foreach vers,$(VERSIONS),$(OBJROOT)/$(vers)/.ok) | sed 's/ / -a -f /g') 23TMPPREFIX = $(OBJROOT)/Root 24 25include $(MAKEFILEPATH)/CoreOS/ReleaseControl/Common.make 26 27installsrc: afterinstallsrc 28 29afterinstallsrc: 30 for i in $(SRCROOT)/Modules/*; do \ 31 [ ! -d $$i ] || $(MAKE) -C $$i afterinstallsrc Project=$(Project) || exit 1; \ 32 done 33 $(MAKE) -C $(SRCROOT)/tmpprefix afterinstallsrc 34 35build:: 36 $(MKDIR) $(OBJROOT)/$(OSL) 37 $(MKDIR) $(OBJROOT)/$(OSV) 38 $(MAKE) -C tmpprefix \ 39 OSL='$(OBJROOT)/$(OSL)' OSV='$(OBJROOT)/$(OSV)' \ 40 TMPPREFIX='$(TMPPREFIX)' 41 @set -x && \ 42 for vers in $(VERSIONS); do \ 43 mkdir -p "$(SYMROOT)/$$vers" && \ 44 mkdir -p "$(OBJROOT)/$$vers/DSTROOT" || exit 1; \ 45 (echo "######## Building $$vers:" `date` '########' > "$(SYMROOT)/$$vers/LOG" 2>&1 && \ 46 PATH="$(TMPPREFIX)/bin:$$PATH" \ 47 VERSIONER_PYTHON_VERSION=$$vers \ 48 VERSIONER_PYTHON_PREFER_32_BIT=yes \ 49 $(MAKE) -f Makefile install Project=$(Project) \ 50 OBJROOT="$(OBJROOT)/$$vers" \ 51 DSTROOT="$(OBJROOT)/$$vers/DSTROOT" \ 52 SYMROOT="$(SYMROOT)/$$vers" \ 53 OSL='$(OBJROOT)/$(OSL)' OSV='$(OBJROOT)/$(OSV)' \ 54 TMPPREFIX='$(TMPPREFIX)' \ 55 RC_ARCHS='$(RC_ARCHS)' >> "$(SYMROOT)/$$vers/LOG" 2>&1 && \ 56 touch "$(OBJROOT)/$$vers/.ok" && \ 57 echo "######## Finished $$vers:" `date` '########' >> "$(SYMROOT)/$$vers/LOG" 2>&1 \ 58 ) & \ 59 done && \ 60 wait && \ 61 for vers in $(VERSIONS); do \ 62 cat $(SYMROOT)/$$vers/LOG && \ 63 rm -f $(SYMROOT)/$$vers/LOG || exit 1; \ 64 done && \ 65 if [ $(TESTOK) ]; then \ 66 $(MAKE) merge; \ 67 else \ 68 echo '#### error detected, not merging'; \ 69 exit 1; \ 70 fi 71 $(MKDIR) $(DSTROOT)/usr/local/$(OSL) 72 @set -x && \ 73 cd $(OBJROOT)/$(OSL) && \ 74 for i in *; do \ 75 echo '##########' `basename $$i` '##########' && \ 76 cat $$i || exit 1; \ 77 done > $(DSTROOT)/usr/local/$(OSL)/$(Project).txt 78 $(MKDIR) $(DSTROOT)/usr/local/$(OSV) 79 (cd $(OBJROOT)/$(OSV) && \ 80 echo '<plist version="1.0">' && \ 81 echo '<array>' && \ 82 cat * && \ 83 echo '</array>' && \ 84 echo '</plist>') > $(DSTROOT)/usr/local/$(OSV)/$(Project).plist 85 86#merge: mergebegin mergedefault mergeversions mergebin mergeman 87merge: mergebegin mergeversions mergebin mergeman 88 89mergebegin: 90 @echo ####### Merging ####### 91 92MERGEBIN = /usr/bin 93DUMMY = dummy.py 94mergebin: 95 mkdir -p $(DSTROOT)$(MERGEBIN) 96 install $(FIX)/$(DUMMY) $(DSTROOT)$(MERGEBIN) 97 @set -x && \ 98 for vers in $(ORDEREDVERS); do \ 99 cd $(OBJROOT)/$$vers/DSTROOT$(MERGEBIN) && \ 100 for f in `find . -type f ! -name "*$$vers*" | sed 's,^\./,,'`; do \ 101 fv=$$f-$$vers && \ 102 ditto $$f $(DSTROOT)$(MERGEBIN)/$$fv && \ 103 sed -e 's/@SEP@/-/g' -e "s/@VERSION@/$$vers/g" $(FIX)/scriptvers.ed | ed - $(DSTROOT)$(MERGEBIN)/$$fv && \ 104 if [ ! -e $(DSTROOT)$(MERGEBIN)/$$f ]; then \ 105 ln -f $(DSTROOT)$(MERGEBIN)/$(DUMMY) $(DSTROOT)$(MERGEBIN)/$$f; \ 106 fi || exit 1; \ 107 done && \ 108 cd $(DSTROOT)/System/Library/Frameworks/Python.framework/Versions/$$vers/Extras/bin && \ 109 for f in *; do \ 110 sed -e '/^1a/,/^\./d' -e "s/@VERSION@/$$vers/g" $(FIX)/scriptvers.ed | ed - $$f || exit 1; \ 111 done || exit 1; \ 112 done 113 rm -f $(DSTROOT)$(MERGEBIN)/$(DUMMY) 114 115MERGEVERSIONS = \ 116 System 117mergeversions: 118 @set -x && \ 119 for vers in $(VERSIONS); do \ 120 cd $(OBJROOT)/$$vers/DSTROOT && \ 121 rsync -Ra $(MERGEVERSIONS) $(DSTROOT) || exit 1; \ 122 done 123 124MERGEMAN = usr/share/man 125mergeman: 126 cd $(OBJROOT)/$(DEFAULT)/DSTROOT && rsync -Ra $(MERGEMAN) $(DSTROOT) 127