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 15OSV = OpenSourceVersions 16OSL = OpenSourceLicenses 17 18RSYNC = rsync -rlpt 19PWD = $(shell pwd) 20ifndef DSTROOT 21ifdef DESTDIR 22export DSTROOT = $(shell mkdir -p '$(DESTDIR)' && echo '$(DESTDIR)') 23else 24export DSTROOT = / 25endif 26endif 27ifndef OBJROOT 28export OBJROOT = $(shell mkdir -p '$(PWD)/OBJROOT' && echo '$(PWD)/OBJROOT') 29RSYNC += --exclude=OBJROOT 30endif 31ifndef SRCROOT 32export SRCROOT = $(PWD) 33endif 34ifndef SYMROOT 35export SYMROOT = $(shell mkdir -p '$(PWD)/SYMROOT' && echo '$(PWD)/SYMROOT') 36RSYNC += --exclude=SYMROOT 37endif 38ifndef RC_ARCHS 39export RC_ARCHS = $(shell arch) 40export RC_$(RC_ARCHS) = YES 41endif 42ifndef RC_CFLAGS 43export RC_CFLAGS = $(foreach A,$(RC_ARCHS),-arch $(A)) $(RC_NONARCH_CFLAGS) 44endif 45ifndef RC_NONARCH_CFLAGS 46export RC_NONARCH_CFLAGS = -pipe 47endif 48ifndef RC_ProjectName 49export RC_ProjectName = $(Project) 50endif 51 52FIX = $(VERSIONERDIR)/$(PYTHONPROJECT)/fix 53TESTOK := -f $(shell echo $(foreach vers,$(VERSIONS),$(OBJROOT)/$(vers)/.ok) | sed 's/ / -a -f /g') 54TMPPREFIX = $(OBJROOT)/Root 55 56include $(MAKEFILEPATH)/CoreOS/ReleaseControl/Common.make 57 58installsrc: afterinstallsrc 59 60afterinstallsrc: 61 $(MAKE) -f Makefile afterinstallsrc Project=$(Project) TOPSRCROOT="$(SRCROOT)" 62 $(MAKE) -C $(SRCROOT)/tmpprefix afterinstallsrc TOPSRCROOT="$(SRCROOT)" 63 for vers in $(VERSIONS); do \ 64 [ ! -d $$vers ] || $(MAKE) -C $$vers -f Makefile afterinstallsrc Project=$(Project) SRCROOT="$(SRCROOT)/$$vers" TOPSRCROOT="$(SRCROOT)" || exit 1; \ 65 done 66 67build:: 68 $(MKDIR) $(OBJROOT)/$(OSL) 69 $(MKDIR) $(OBJROOT)/$(OSV) 70 $(MAKE) -C tmpprefix \ 71 OSL='$(OBJROOT)/$(OSL)' OSV='$(OBJROOT)/$(OSV)' \ 72 TMPPREFIX='$(TMPPREFIX)' 73 @set -x && \ 74 for vers in $(VERSIONS); do \ 75 no64= && \ 76 for n in $(NO64); do \ 77 if [ $$n = $$vers ]; then \ 78 no64=YES; \ 79 break; \ 80 fi; \ 81 done && \ 82 Copt= && \ 83 srcroot='$(SRCROOT)' && \ 84 if [ -d $$vers ]; then \ 85 srcroot="$(SRCROOT)/$$vers"; \ 86 Copt="-C $$vers"; \ 87 fi && \ 88 mkdir -p "$(SYMROOT)/$$vers" && \ 89 mkdir -p "$(OBJROOT)/$$vers/DSTROOT" || exit 1; \ 90 (echo "######## Building $$vers:" `date` '########' > "$(SYMROOT)/$$vers/LOG" 2>&1 && \ 91 VERSIONER_PYTHON_VERSION=$$vers \ 92 VERSIONER_PYTHON_PREFER_32_BIT=yes \ 93 $(MAKE) $$Copt -f Makefile install Project=$(Project) NO64=$$no64 \ 94 SRCROOT="$$srcroot" \ 95 TOPSRCROOT="$(SRCROOT)" \ 96 OBJROOT="$(OBJROOT)/$$vers" \ 97 DSTROOT="$(OBJROOT)/$$vers/DSTROOT" \ 98 SYMROOT="$(SYMROOT)/$$vers" \ 99 OSL='$(OBJROOT)/$(OSL)' OSV='$(OBJROOT)/$(OSV)' \ 100 TMPPREFIX='$(TMPPREFIX)' \ 101 RC_ARCHS='$(RC_ARCHS)' >> "$(SYMROOT)/$$vers/LOG" 2>&1 && \ 102 touch "$(OBJROOT)/$$vers/.ok" && \ 103 echo "######## Finished $$vers:" `date` '########' >> "$(SYMROOT)/$$vers/LOG" 2>&1 \ 104 ) & \ 105 done && \ 106 wait && \ 107 for vers in $(VERSIONS); do \ 108 cat $(SYMROOT)/$$vers/LOG && \ 109 rm -f $(SYMROOT)/$$vers/LOG || exit 1; \ 110 done && \ 111 if [ $(TESTOK) ]; then \ 112 $(MAKE) merge; \ 113 else \ 114 echo '#### error detected, not merging'; \ 115 exit 1; \ 116 fi 117 $(MKDIR) $(DSTROOT)/usr/local/$(OSL) 118 @set -x && \ 119 cd $(OBJROOT)/$(OSL) && \ 120 for i in *; do \ 121 echo '##########' `basename $$i` '##########' && \ 122 cat $$i || exit 1; \ 123 done > $(DSTROOT)/usr/local/$(OSL)/$(Project).txt 124 $(MKDIR) $(DSTROOT)/usr/local/$(OSV) 125 (cd $(OBJROOT)/$(OSV) && \ 126 echo '<plist version="1.0">' && \ 127 echo '<array>' && \ 128 cat * && \ 129 echo '</array>' && \ 130 echo '</plist>') > $(DSTROOT)/usr/local/$(OSV)/$(Project).plist 131 132#merge: mergebegin mergedefault mergeversions mergebin mergeman 133merge: mergebegin mergeversions mergebin mergeman 134 135mergebegin: 136 @echo ####### Merging ####### 137 138MERGEBIN = /usr/bin 139DUMMY = dummy.py 140mergebin: 141 mkdir -p $(DSTROOT)$(MERGEBIN) 142 install $(FIX)/$(DUMMY) $(DSTROOT)$(MERGEBIN) 143 @set -x && \ 144 for vers in $(ORDEREDVERS); do \ 145 cd $(OBJROOT)/$$vers/DSTROOT$(MERGEBIN) && \ 146 for f in `find . -type f ! -name "*$$vers*" | sed 's,^\./,,'`; do \ 147 fv=$$f-$$vers && \ 148 ditto $$f $(DSTROOT)$(MERGEBIN)/$$fv && \ 149 sed -e 's/@SEP@/-/g' -e "s/@VERSION@/$$vers/g" $(FIX)/scriptvers.ed | ed - $(DSTROOT)$(MERGEBIN)/$$fv && \ 150 if [ ! -e $(DSTROOT)$(MERGEBIN)/$$f ]; then \ 151 ln -f $(DSTROOT)$(MERGEBIN)/$(DUMMY) $(DSTROOT)$(MERGEBIN)/$$f; \ 152 fi || exit 1; \ 153 done && \ 154 cd $(DSTROOT)/System/Library/Frameworks/Python.framework/Versions/$$vers/Extras/bin && \ 155 for f in *; do \ 156 sed -e '/^1a/,/^\./d' -e "s/@VERSION@/$$vers/g" $(FIX)/scriptvers.ed | ed - $$f || exit 1; \ 157 done || exit 1; \ 158 done 159 rm -f $(DSTROOT)$(MERGEBIN)/$(DUMMY) 160 161MERGEVERSIONS = \ 162 System 163mergeversions: 164 @set -x && \ 165 for vers in $(VERSIONS); do \ 166 cd $(OBJROOT)/$$vers/DSTROOT && \ 167 rsync -Ra $(MERGEVERSIONS) $(DSTROOT) || exit 1; \ 168 done 169 170MERGEMAN = usr/share/man 171mergeman: 172 cd $(OBJROOT)/$(DEFAULT)/DSTROOT && rsync -Ra $(MERGEMAN) $(DSTROOT) 173