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)) 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 14 15RSYNC = rsync -rlpt 16PWD = $(shell pwd) 17ifndef DSTROOT 18ifdef DESTDIR 19export DSTROOT = $(shell mkdir -p '$(DESTDIR)' && echo '$(DESTDIR)') 20else 21export DSTROOT = / 22endif 23endif 24ifndef OBJROOT 25export OBJROOT = $(shell mkdir -p '$(PWD)/OBJROOT' && echo '$(PWD)/OBJROOT') 26RSYNC += --exclude=OBJROOT 27endif 28ifndef SRCROOT 29export SRCROOT = $(PWD) 30endif 31ifndef SYMROOT 32export SYMROOT = $(shell mkdir -p '$(PWD)/SYMROOT' && echo '$(PWD)/SYMROOT') 33RSYNC += --exclude=SYMROOT 34endif 35ifndef RC_ARCHS 36export RC_ARCHS = $(shell arch) 37export RC_$(RC_ARCHS) = YES 38endif 39ifndef RC_CFLAGS 40export RC_CFLAGS = $(foreach A,$(RC_ARCHS),-arch $(A)) $(RC_NONARCH_CFLAGS) 41endif 42ifndef RC_NONARCH_CFLAGS 43export RC_NONARCH_CFLAGS = -pipe 44endif 45ifndef RC_ProjectName 46export RC_ProjectName = $(Project) 47endif 48 49FIX = $(VERSIONERDIR)/$(PYTHONPROJECT)/fix 50TESTOK := -f $(shell echo $(foreach vers,$(VERSIONS),$(OBJROOT)/$(vers)/.ok) | sed 's/ / -a -f /g') 51 52installsrc: 53 echo GNU installsrc 54 $(MAKE) -f Makefile installsrc Project=$(Project) 55 56include $(MAKEFILEPATH)/CoreOS/ReleaseControl/Common.make 57 58build:: 59 @set -x && \ 60 for vers in $(VERSIONS); do \ 61 mkdir -p "$(SYMROOT)/$$vers" && \ 62 mkdir -p "$(OBJROOT)/$$vers/DSTROOT" || exit 1; \ 63 (echo "######## Building $$vers:" `date` '########' > "$(SYMROOT)/$$vers/LOG" 2>&1 && \ 64 TOPSRCROOT='$(SRCROOT)' \ 65 VERSIONER_PYTHON_VERSION=$$vers \ 66 VERSIONER_PYTHON_PREFER_32_BIT=yes \ 67 $(MAKE) -f Makefile install Project=$(Project) \ 68 OBJROOT="$(OBJROOT)/$$vers" \ 69 DSTROOT="$(OBJROOT)/$$vers/DSTROOT" \ 70 SYMROOT="$(SYMROOT)/$$vers" \ 71 RC_ARCHS='$(RC_ARCHS) -g' >> "$(SYMROOT)/$$vers/LOG" 2>&1 && \ 72 touch "$(OBJROOT)/$$vers/.ok" && \ 73 echo "######## Finished $$vers:" `date` '########' >> "$(SYMROOT)/$$vers/LOG" 2>&1 \ 74 ) & \ 75 done && \ 76 wait && \ 77 for vers in $(VERSIONS); do \ 78 cat $(SYMROOT)/$$vers/LOG && \ 79 rm -f $(SYMROOT)/$$vers/LOG || exit 1; \ 80 done && \ 81 if [ $(TESTOK) ]; then \ 82 $(MAKE) merge; \ 83 else \ 84 echo '#### error detected, not merging'; \ 85 exit 1; \ 86 fi 87 88#merge: mergebegin mergedefault mergeversions mergebin mergeman 89merge: mergebegin mergedefault mergeversions 90 91mergebegin: 92 @echo '####### Merging #######' 93 94#mergebin: 95# @set -x && \ 96# for vers in $(ORDEREDVERS); do \ 97# cd $(DSTROOT)/System/Library/Frameworks/Python.framework/Versions/$$vers/Extras/bin && \ 98# for f in *; do \ 99# sed -e '/^1a/,/^\./d' -e "s/@VERSION@/$$vers/g" $(FIX)/scriptvers.ed | ed - $$f || exit 1; \ 100# done || exit 1; \ 101# done 102 103MERGEDEFAULT = \ 104 Developer \ 105 usr 106mergedefault: 107 cd $(OBJROOT)/$(DEFAULT)/DSTROOT && rsync -Ra $(MERGEDEFAULT) $(DSTROOT) 108 109#MYVERSIONMANLIST = $(OBJROOT)/usr-share-man.list 110#VERSIONMANLIST = $(VERSIONERDIR)/$(PYTHONPROJECT)/usr-share-man.list 111#MERGEMAN = /usr/share/man 112#mergeman: 113# @set -x && \ 114# for vers in $(ORDEREDVERS); do \ 115# cd $(OBJROOT)/$$vers/DSTROOT$(MERGEMAN) && \ 116# for d in man*; do \ 117# cd $$d && \ 118# for f in *.gz; do \ 119# ff=`echo $$f | sed "s/\.[^.]*\.gz/$$vers&/"` && \ 120# ditto $$f $(DSTROOT)$(MERGEMAN)/$$d/$$ff && \ 121# if [ ! -e $(DSTROOT)$(MERGEMAN)/$$d/$$f ]; then \ 122# ln -fs $$ff $(DSTROOT)$(MERGEMAN)/$$d/$$f; \ 123# fi || exit 1; \ 124# done && \ 125# cd .. || exit 1; \ 126# done || exit 1; \ 127# done 128# cd $(DSTROOT)$(MERGEMAN) && \ 129# find . ! -type d | sed 's,^\./,,' | sort > $(MYVERSIONMANLIST) && \ 130# rm -fv `comm -12 $(VERSIONMANLIST) $(MYVERSIONMANLIST)` 131 132MERGEVERSIONS = \ 133 System 134mergeversions: 135 @set -x && \ 136 for vers in $(VERSIONS); do \ 137 cd $(OBJROOT)/$$vers/DSTROOT && \ 138 rsync -Ra $(MERGEVERSIONS) $(DSTROOT) || exit 1; \ 139 done 140