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