1##--------------------------------------------------------------------- 2# Makefile for python_modules (supporting multiple versions) 3##--------------------------------------------------------------------- 4Project = python_modules 5PYTHONPROJECT = python 6MYFIX = $(SRCROOT)/fix 7VERSIONERDIR = /usr/local/versioner 8PYTHONVERSIONS = $(VERSIONERDIR)/$(PYTHONPROJECT)/versions 9INCOMPATIBLE = 3.0 10DEFAULT := $(shell sed -n '/^DEFAULT = /s///p' $(PYTHONVERSIONS)) 11VERSIONS := $(filter-out $(INCOMPATIBLE), $(shell grep '^[0-9]' $(PYTHONVERSIONS))) 12ORDEREDVERS := $(DEFAULT) $(filter-out $(DEFAULT),$(VERSIONS)) 13VERSIONERFLAGS = -std=gnu99 -Wall -mdynamic-no-pic -I$(VERSIONERDIR)/$(PYTHONPROJECT) -I$(MYFIX) -framework CoreFoundation 14NO64 = 2.5 15 16RSYNC = rsync -rlpt 17PWD = $(shell pwd) 18ifndef DSTROOT 19ifdef DESTDIR 20export DSTROOT = $(shell mkdir -p '$(DESTDIR)' && echo '$(DESTDIR)') 21else 22export DSTROOT = / 23endif 24endif 25ifndef OBJROOT 26export OBJROOT = $(shell mkdir -p '$(PWD)/OBJROOT' && echo '$(PWD)/OBJROOT') 27RSYNC += --exclude=OBJROOT 28endif 29ifndef SRCROOT 30export SRCROOT = $(PWD) 31endif 32ifndef SYMROOT 33export SYMROOT = $(shell mkdir -p '$(PWD)/SYMROOT' && echo '$(PWD)/SYMROOT') 34RSYNC += --exclude=SYMROOT 35endif 36ifndef RC_ARCHS 37export RC_ARCHS = $(shell arch) 38export RC_$(RC_ARCHS) = YES 39endif 40ifndef RC_CFLAGS 41export RC_CFLAGS = $(foreach A,$(RC_ARCHS),-arch $(A)) $(RC_NONARCH_CFLAGS) 42endif 43ifndef RC_NONARCH_CFLAGS 44export RC_NONARCH_CFLAGS = -pipe 45endif 46ifndef RC_ProjectName 47export RC_ProjectName = $(Project) 48endif 49 50FIX = $(VERSIONERDIR)/$(PYTHONPROJECT)/fix 51TESTOK := -f $(shell echo $(foreach vers,$(VERSIONS),$(OBJROOT)/$(vers)/.ok) | sed 's/ / -a -f /g') 52 53include $(MAKEFILEPATH)/CoreOS/ReleaseControl/Common.make 54 55installsrc: afterinstallsrc 56 57afterinstallsrc: 58 $(MAKE) -f Makefile afterinstallsrc Project=$(Project) 59 60build:: 61 @set -x && \ 62 for vers in $(VERSIONS); do \ 63 no64= && \ 64 if echo $(NO64) | fgrep -q $$vers; then \ 65 no64=YES; \ 66 fi && \ 67 mkdir -p "$(SYMROOT)/$$vers" && \ 68 mkdir -p "$(OBJROOT)/$$vers/DSTROOT" || exit 1; \ 69 (echo "######## Building $$vers:" `date` '########' > "$(SYMROOT)/$$vers/LOG" 2>&1 && \ 70 TOPOBJROOT='$(OBJROOT)' \ 71 VERSIONER_PYTHON_VERSION=$$vers \ 72 VERSIONER_PYTHON_PREFER_32_BIT=yes \ 73 $(MAKE) -f Makefile install Project=$(Project) NO64=$$no64 \ 74 OBJROOT="$(OBJROOT)/$$vers" \ 75 DSTROOT="$(OBJROOT)/$$vers/DSTROOT" \ 76 SYMROOT="$(SYMROOT)/$$vers" \ 77 RC_ARCHS='$(RC_ARCHS)' >> "$(SYMROOT)/$$vers/LOG" 2>&1 && \ 78 touch "$(OBJROOT)/$$vers/.ok" && \ 79 echo "######## Finished $$vers:" `date` '########' >> "$(SYMROOT)/$$vers/LOG" 2>&1 \ 80 ) & \ 81 done && \ 82 wait && \ 83 for vers in $(VERSIONS); do \ 84 cat $(SYMROOT)/$$vers/LOG && \ 85 rm -f $(SYMROOT)/$$vers/LOG || exit 1; \ 86 done && \ 87 if [ $(TESTOK) ]; then \ 88 $(MAKE) merge; \ 89 else \ 90 echo '#### error detected, not merging'; \ 91 exit 1; \ 92 fi 93 94#merge: mergebegin mergedefault mergeversions mergebin mergeman 95merge: mergebegin mergeversions mergebin mergedefault 96 97mergebegin: 98 @echo ####### Merging ####### 99 100MERGEBIN = /usr/bin 101DUMMY = dummy.py 102mergebin: 103 mkdir -p $(DSTROOT)$(MERGEBIN) 104 install $(FIX)/$(DUMMY) $(DSTROOT)$(MERGEBIN) 105 @set -x && \ 106 for vers in $(ORDEREDVERS); do \ 107 cd $(OBJROOT)/$$vers/DSTROOT$(MERGEBIN) && \ 108 for f in `find . -type f ! -name "*$$vers*" | sed 's,^\./,,'`; do \ 109 fv=$$f-$$vers && \ 110 ditto $$f $(DSTROOT)$(MERGEBIN)/$$fv && \ 111 sed -e 's/@SEP@/-/g' -e "s/@VERSION@/$$vers/g" $(FIX)/scriptvers.ed | ed - $(DSTROOT)$(MERGEBIN)/$$fv && \ 112 if [ ! -e $(DSTROOT)$(MERGEBIN)/$$f ]; then \ 113 ln -f $(DSTROOT)$(MERGEBIN)/$(DUMMY) $(DSTROOT)$(MERGEBIN)/$$f; \ 114 fi || exit 1; \ 115 done && \ 116 cd $(DSTROOT)/System/Library/Frameworks/Python.framework/Versions/$$vers/Extras/bin && \ 117 for f in *; do \ 118 sed -e '/^1a/,/^\./d' -e "s/@VERSION@/$$vers/g" $(FIX)/scriptvers.ed | ed - $$f || exit 1; \ 119 done || exit 1; \ 120 done 121 rm -f $(DSTROOT)$(MERGEBIN)/$(DUMMY) 122 123MERGEDEFAULT = \ 124 usr/local 125mergedefault: 126 cd $(OBJROOT)/$(DEFAULT)/DSTROOT && rsync -Ra $(MERGEDEFAULT) $(DSTROOT) 127 128#MYVERSIONMANLIST = $(OBJROOT)/usr-share-man.list 129#VERSIONMANLIST = $(VERSIONERDIR)/$(PYTHONPROJECT)/usr-share-man.list 130#MERGEMAN = /usr/share/man 131#mergeman: 132# @set -x && \ 133# for vers in $(ORDEREDVERS); do \ 134# cd $(OBJROOT)/$$vers/DSTROOT$(MERGEMAN) && \ 135# for d in man*; do \ 136# cd $$d && \ 137# for f in *.gz; do \ 138# ff=`echo $$f | sed "s/\.[^.]*\.gz/$$vers&/"` && \ 139# ditto $$f $(DSTROOT)$(MERGEMAN)/$$d/$$ff && \ 140# if [ ! -e $(DSTROOT)$(MERGEMAN)/$$d/$$f ]; then \ 141# ln -fs $$ff $(DSTROOT)$(MERGEMAN)/$$d/$$f; \ 142# fi || exit 1; \ 143# done && \ 144# cd .. || exit 1; \ 145# done || exit 1; \ 146# done 147# cd $(DSTROOT)$(MERGEMAN) && \ 148# find . ! -type d | sed 's,^\./,,' | sort > $(MYVERSIONMANLIST) && \ 149# rm -fv `comm -12 $(VERSIONMANLIST) $(MYVERSIONMANLIST)` 150 151MERGEVERSIONS = \ 152 System 153mergeversions: 154 @set -x && \ 155 for vers in $(VERSIONS); do \ 156 cd $(OBJROOT)/$$vers/DSTROOT && \ 157 rsync -Ra $(MERGEVERSIONS) $(DSTROOT) || exit 1; \ 158 done 159