1# 2# xbs-compatible Makefile for pyobjc. 3# 4 5#GCC_VERSION := $(shell cc -dumpversion | sed -e 's/^\([^.]*\.[^.]*\).*/\1/') 6#GCC_42 := $(shell perl -e "print ($(GCC_VERSION) >= 4.2 ? 'YES' : 'NO')") 7 8GnuNoConfigure = YES 9Extra_CC_Flags = -no-cpp-precomp -g 10Extra_Install_Flags = PREFIX=$(RC_Install_Prefix) 11 12#include $(MAKEFILEPATH)/CoreOS/ReleaseControl/GNUSource.make 13include $(MAKEFILEPATH)/CoreOS/ReleaseControl/Common.make 14 15Install_Target = install 16 17# Automatic Extract & Patch 18AEP = YES 19AEP_Project = $(Project) 20AEP_Version = 2.3.2a0 21AEP_ProjVers = $(AEP_Project)-$(AEP_Version) 22AEP_Filename = $(AEP_ProjVers).tar.gz 23AEP_ExtractDir = $(AEP_ProjVers) 24AEP_Patches = parser-fixes.diff float.diff CGFloat.diff pyobjc-core_Modules_objc_selector.m.diff pyobjc-core_Modules_objc_objc-runtime-compat.h.diff pyobjc-core_Modules_objc_objc-runtime-compat.m.diff pyobjc-framework-Quartz_Modules__callbacks.m.diff pyobjc-core_Modules_objc_OC_PythonNumber.m.diff 25 26ifeq ($(suffix $(AEP_Filename)),.bz2) 27AEP_ExtractOption = j 28else 29AEP_ExtractOption = z 30endif 31 32# Extract the source. 33DEPRECATED_FRAMEWORKS = pyobjc-framework-ServerNotification pyobjc-framework-CalendarStore 34UNUSED = 02-develop-all.sh PyOpenGL-2.0.2.01 altgraph build-support macholib modulegraph py2app pyobjc pyobjc-metadata pyobjc-website pyobjc-xcode trac-example-plugin 35install_source:: 36ifeq ($(AEP),YES) 37 $(TAR) -C $(SRCROOT) -$(AEP_ExtractOption)xof $(SRCROOT)/$(AEP_Filename) 38 $(RM) $(SRCROOT)/$(AEP_Filename) 39 $(RMDIR) $(SRCROOT)/$(AEP_Project) 40 $(MV) $(SRCROOT)/$(AEP_ExtractDir) $(SRCROOT)/$(AEP_Project) 41 @set -x && \ 42 cd $(SRCROOT)/$(Project) && \ 43 rm -rf $(UNUSED) $(DEPRECATED_FRAMEWORKS) && \ 44 for patchfile in $(AEP_Patches); do \ 45 patch -p0 -i $(SRCROOT)/patches/$$patchfile || exit 1; \ 46 done && \ 47 find . \( -name \*.h -or -name \*.m \) -print0 | xargs -0 egrep -l 'CGFLOAT_DEFINED|NSINTEGER_DEFINED' | while read patchfile; do \ 48 mv -f "$$patchfile" "$$patchfile.orig" && \ 49 { unifdef -DCGFLOAT_DEFINED -DNSINTEGER_DEFINED "$$patchfile.orig" > "$$patchfile" || [ $$? -ne 2 ]; } && \ 50 rm -f "$$patchfile.orig" || exit 1; \ 51 done && \ 52 find . -name pyobjc_setup.py -print0 | xargs -0 egrep -l 'CGFLOAT_DEFINED|NSINTEGER_DEFINED' | while read patchfile; do \ 53 mv -f "$$patchfile" "$$patchfile.orig" && \ 54 { unifdef -t -DCGFLOAT_DEFINED -DNSINTEGER_DEFINED "$$patchfile.orig" > "$$patchfile" || [ $$? -ne 2 ]; } && \ 55 rm -f "$$patchfile.orig" || exit 1; \ 56 done && \ 57 find . -name \*.bridgesupport -print0 | xargs -0 fgrep -l "tollfree='NSCF" | while read patchfile; do \ 58 mv -f "$$patchfile" "$$patchfile.orig" && \ 59 sed "s/tollfree='NSCF/tollfree='__NSCF/" "$$patchfile.orig" > "$$patchfile" && \ 60 rm -f "$$patchfile.orig" || exit 1; \ 61 done && \ 62 find . -type f -print0 | xargs -0 grep -lw iChat | while read patchfile; do \ 63 mv -f "$$patchfile" "$$patchfile.orig" && \ 64 sed 's/[[:<:]]iChat[[:>:]]/Messages/g' "$$patchfile.orig" > "$$patchfile" && \ 65 rm -f "$$patchfile.orig" || exit 1; \ 66 done && \ 67 find . -name \*setup.py -print0 | xargs -0 fgrep -l ".extend(['-isysroot'," | while read patchfile; do \ 68 ed - "$$patchfile" < '$(SRCROOT)/patches/isysroot.ed' || exit 1; \ 69 done 70 ed - $(SRCROOT)/$(Project)/pyobjc-core/setup.py < '$(SRCROOT)/patches/pyobjc-core_setup.py.ed' 71 ed - $(SRCROOT)/$(Project)/pyobjc-core/Lib/objc/_convenience.py < '$(SRCROOT)/patches/pyobjc-core_Lib_objc__convenience.py.ed' 72 ed - $(SRCROOT)/$(Project)/pyobjc-core/Modules/objc/parsexml.m < '$(SRCROOT)/patches/pyobjc-core_Modules_objc_parsexml.m.ed' 73 ed - $(SRCROOT)/$(Project)/pyobjc-framework-Cocoa/Lib/Foundation/PyObjC.bridgesupport < '$(SRCROOT)/patches/pyobjc-framework-Cocoa_Lib_Foundation_PyObjC.bridgesupport.ed' 74 ed - $(SRCROOT)/$(Project)/pyobjc-framework-Cocoa/Lib/PyObjCTools/Conversion.py < '$(SRCROOT)/patches/pyobjc-framework-Cocoa_Lib_PyObjCTools_Conversion.py.ed' 75 ed - $(SRCROOT)/$(Project)/pyobjc-framework-Quartz/Lib/Quartz/CoreGraphics/PyObjC.bridgesupport < '$(SRCROOT)/patches/pyobjc-framework-Quartz_Lib_Quartz_CoreGraphics_PyObjC.bridgesupport.ed' 76 @set -x && for z in `find $(SRCROOT)/$(Project) -name \*.py -size 0c`; do \ 77 echo '#' > $$z || exit 1; \ 78 done 79 find $(SRCROOT)/$(Project) -name \*.so -print -delete 80endif 81 82copysource: 83 ditto '$(SRCROOT)' '$(OBJROOT)' 84 85DOCS=/Developer/Documentation/Python/PyObjC 86EXAMPLES=/Developer/Examples/Python/PyObjC 87EXTRAS:=$(shell python -c "import sys, os;print os.path.join(sys.prefix, 'Extras')") 88EXTRASLIBPYTHON=$(EXTRAS)/lib/python 89EXTRASPYOBJC=$(EXTRASLIBPYTHON)/PyObjC 90 91real-install: 92 @set -x && \ 93 cd '$(OBJROOT)/$(Project)' && \ 94 for pkg in pyobjc-core pyobjc-framework-Cocoa `ls -d pyobjc-framework-* | grep -v pyobjc-framework-Cocoa`; do \ 95 cd "$(OBJROOT)/$(Project)/$$pkg" && \ 96 ARCHFLAGS="$(RC_CFLAGS) -D_FORTIFY_SOURCE=0" PYTHONPATH="$(DSTROOT)$(EXTRASPYOBJC)" \ 97 python setup.py install --home="$(EXTRAS)" --root="$(DSTROOT)" || exit 1; \ 98 done 99 @set -x && cd "$(DSTROOT)$(EXTRASLIBPYTHON)" && \ 100 install -d PyObjC && \ 101 for x in *; do \ 102 if [ "$$x" != PyObjC -a "$$x" != PyObjC.pth ]; then \ 103 if [ -e PyObjC/$$x ]; then \ 104 ditto $$x PyObjC/$$x && \ 105 $(RMDIR) $$x; \ 106 else \ 107 $(MV) "$$x" PyObjC; \ 108 fi; \ 109 fi || exit 1; \ 110 done 111 cp -f $(Project).txt "$(OSL)/$(Project)-$(AEP_Version).txt" 112 cp -f $(Project).partial "$(OSV)/$(Project)-$(AEP_Version).partial" 113 114ADDMODULES = AVFoundation 115add-module: 116 @set -x && \ 117 for i in $(ADDMODULES); do \ 118 install -d $(DSTROOT)$(EXTRASPYOBJC)/$$i && \ 119 sed "s/@XXX@/$$i/g" $(SRCROOT)/patches/newmoduletemplate.py > "$(DSTROOT)$(EXTRASPYOBJC)/$$i/__init__.py" && \ 120 python -c "import py_compile;py_compile.compile('$(DSTROOT)$(EXTRASPYOBJC)/$$i/__init__.py')" && \ 121 chmod 0644 "$(DSTROOT)$(EXTRASPYOBJC)/$$i/__init__.py"* || exit 1; \ 122 done 123 124install-docs: 125 $(INSTALL) -d '$(DSTROOT)$(DOCS)' 126 @set -x && \ 127 for e in `find "$(OBJROOT)/$(Project)" -name Doc ! -empty ! -path '*pyobjc-metadata*'`; do \ 128 d=`dirname $$e` && \ 129 n=`basename $$d` && \ 130 case $$n in \ 131 pyobjc-core) \ 132 rsync -rplt $$e/ "$(DSTROOT)$(DOCS)" || exit 1;; \ 133 pyobjc-*) \ 134 b=`echo $$n | sed 's/^.*-//'` && \ 135 rsync -rplt $$e/ "$(DSTROOT)$(DOCS)/$$b" || exit 1;; \ 136 esac \ 137 done 138 139install-examples: 140 $(INSTALL) -d '$(DSTROOT)$(EXAMPLES)' 141 @set -x && \ 142 for e in `find "$(OBJROOT)/$(Project)" -name Examples ! -empty -maxdepth 2`; do \ 143 d=`dirname $$e` && \ 144 n=`basename $$d` && \ 145 case $$n in \ 146 pyobjc-core) \ 147 rsync -rplt $$e/ "$(DSTROOT)$(EXAMPLES)" || exit 1;; \ 148 pyobjc-*) \ 149 b=`echo $$n | sed 's/^.*-//'` && \ 150 rsync -rplt $$e/ "$(DSTROOT)$(EXAMPLES)/$$b" || exit 1;; \ 151 esac \ 152 done 153 154fix_strip: 155 @echo ======== fix verification errors ========= 156 @echo '=== strip .so files ===' 157 @set -x && cd '$(DSTROOT)' && \ 158 for i in `find . -name \*.so | sed 's,^\./,,'`; do \ 159 rsync -R $$i $(SYMROOT) && \ 160 $(STRIP) -x $$i || exit 1; \ 161 done 162 163fix_bogus_files: 164 @echo '=== fix bogus_files ===' 165 find -d "$(DSTROOT)$(EXAMPLES)" -name '*~.nib' -print -exec rm -rf {} ';' 166 167fix_inappropriate_executables: 168 @echo '=== fix inappropriate_executables ===' 169 chmod a-x "$(DSTROOT)$(EXAMPLES)/Quartz/Core Graphics/CGRotation/demo.png" 170 171fix_verification-errors: fix_bogus_files fix_inappropriate_executables fix_strip 172 173install:: copysource real-install add-module install-docs install-examples fix_verification-errors 174