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