1##--------------------------------------------------------------------- 2# GNUmakefile for python 3# Call Makefile to do the work, but for the install case, unpack the 4# tarball to create the project source directory 5##--------------------------------------------------------------------- 6PROJECT = python 7VERSION = 2.6.9 8 9PWD := $(shell pwd) 10 11ifeq ($(MAKECMDGOALS),) 12MAKECMDGOALS = no_target 13endif 14ifneq ($(filter no_target install,$(MAKECMDGOALS)),) 15ifndef DSTROOT 16ifdef DESTDIR 17export DSTROOT := $(shell mkdir -p '$(DESTDIR)' && echo '$(DESTDIR)') 18else 19export DSTROOT := / 20endif 21endif 22ifndef OBJROOT 23export OBJROOT := $(shell mkdir -p '$(PWD)/OBJROOT' && echo '$(PWD)/OBJROOT') 24endif 25ifndef SYMROOT 26export SYMROOT := $(shell mkdir -p '$(PWD)/SYMROOT' && echo '$(PWD)/SYMROOT') 27endif 28endif 29 30ifndef SRCROOT 31export SRCROOT := $(PWD) 32endif 33ifndef RC_ARCHS 34export RC_ARCHS := $(shell arch) 35export RC_$(RC_ARCHS) := YES 36endif 37ifndef RC_CFLAGS 38export RC_CFLAGS := $(foreach A,$(RC_ARCHS),-arch $(A)) $(RC_NONARCH_CFLAGS) 39endif 40ifndef RC_NONARCH_CFLAGS 41export RC_NONARCH_CFLAGS = -pipe 42endif 43ifndef RC_ProjectName 44export RC_ProjectName = $(PROJECT) 45endif 46 47NAME = Python 48export PYTHON_CURRENT_VERSION = $(shell echo $(VERSION) | sed 's/[a-z].*$$//') 49NAMEVERS = $(NAME)-$(VERSION) 50TARBALL = $(NAMEVERS).tar.xz 51FIX = '$(OBJROOT)/fix' 52 53VERS := $(shell echo $(VERSION) | sed 's/\(^[0-9]*\.[0-9]*\).*/\1/') 54FRAMEWORKS = /System/Library/Frameworks 55PYFRAMEWORK = $(FRAMEWORKS)/Python.framework 56VERSIONSVERS = $(PYFRAMEWORK)/Versions/$(VERS) 57INCLUDEPYTHONVERS = $(VERSIONSVERS)/include/$(PROJECT)$(VERS) 58LIBPYTHONVERS = $(VERSIONSVERS)/lib/$(PROJECT)$(VERS) 59 60DYLIB = lib$(PROJECT)$(VERS).dylib 61USRINCLUDE = /usr/include 62USRLIB = /usr/lib 63EXTRAS = $(VERSIONSVERS)/Extras 64LIBRARYPYTHON = /Library/Python/$(VERS) 65SITEPACKAGES = $(LIBRARYPYTHON)/site-packages 66 67EXTRASPYTHON = '$(DSTROOT)$(EXTRAS)/lib/python' 68PYTHON = '$(OBJROOT)/$(PROJECT)/$(PROJECT).exe' 69PYTHONENV = DYLD_FRAMEWORK_PATH='$(DSTROOT)$(FRAMEWORKS)' DYLD_NEW_LOCAL_SHARED_REGIONS=1 PYTHONPATH='$(DSTROOT)$(LIBPYTHONVERS)':$(EXTRASPYTHON) 70PYDTRACE_H = $(OBJROOT)/$(PROJECT)/Python/pydtrace.h 71 72no_target: python 73 74python: $(OBJROOT)/$(PROJECT) 75 DSTROOT='$(DSTROOT)' OBJROOT='$(OBJROOT)/$(PROJECT)' \ 76 SRCROOT='$(OBJROOT)' SYMROOT='$(SYMROOT)' RC_ARCHS='$(RC_ARCHS)' \ 77 DYLD_NEW_LOCAL_SHARED_REGIONS=1 \ 78 $(MAKE) -C '$(OBJROOT)' -f Makefile \ 79 DSTROOT='$(DSTROOT)' OBJROOT='$(OBJROOT)/$(PROJECT)' \ 80 SRCROOT='$(OBJROOT)' SYMROOT='$(SYMROOT)' RC_ARCHS='$(RC_ARCHS)' \ 81 VERS=$(VERS) 82 83##--------------------------------------------------------------------- 84# We patch configure to remove the "-arch_only ppc" option, since we 85# build fat. We also set DYLD_NEW_LOCAL_SHARED_REGIONS or else python.exe 86# will crash. And patch unixccompiler for wxWidgets (submit back to python). 87# 88# autoconf is now (normally) unavailable. So we save the output of autoconf 89# in fix/autoconf and use it to overwrite the original files. If we need 90# to update the version of python, we will need to install autoconf, and then 91# we run: 92# 93# % make `pwd`/python OBJROOT=`pwd` PYTHON_AUTOCONF=NO 94# % mv python python.bak 95# % make `pwd`/python OBJROOT=`pwd` PYTHON_AUTOCONF=YES 96# % diff -r --brief python.bak python 97# 98# Make a tarball out of the differences and put in $(FIX)/autoconf.tar.bz2 99##--------------------------------------------------------------------- 100defarchflags = $(foreach u,$(RC_ARCHS),-arch $(u)) 101 102$(OBJROOT)/$(PROJECT): 103 @set -x && \ 104 cd '$(OBJROOT)' && \ 105 tar -xof $(TARBALL) && \ 106 rm -rf $(PROJECT) && \ 107 mv $(NAMEVERS) $(PROJECT) && \ 108 ed - $(PROJECT)/Include/py_curses.h < $(FIX)/py_curses.h.ed && \ 109 ed - $(PROJECT)/Include/pymactoolbox.h < $(FIX)/pymactoolbox.h.ed && \ 110 ed - $(PROJECT)/Lib/ctypes/__init__.py < $(FIX)/Lib_ctypes___init__.py.ed && \ 111 ed - $(PROJECT)/Lib/xml/__init__.py < $(FIX)/Lib_xml___init__.py.ed && \ 112 ed - $(PROJECT)/Lib/distutils/command/install.py < $(FIX)/install.py.ed && \ 113 ed - $(PROJECT)/Lib/distutils/config.py < $(FIX)/Lib_distutils_config.py.ed && \ 114 sed 's/@DEFARCHFLAGS@/$(defarchflags)/' $(FIX)/sysconfig.py.ed | ed - $(PROJECT)/Lib/distutils/sysconfig.py && \ 115 ed - $(PROJECT)/Lib/distutils/unixccompiler.py < $(FIX)/unixccompiler.py.ed && \ 116 ed - $(PROJECT)/Lib/distutils/util.py < $(FIX)/Lib_distutils_util.py.ed && \ 117 ed - $(PROJECT)/Lib/locale.py < $(FIX)/locale.py.ed && \ 118 ed - $(PROJECT)/Lib/logging/handlers.py < $(FIX)/Lib_logging_handlers.py.ed && \ 119 ed - $(PROJECT)/Lib/os.py < $(FIX)/Lib_os.py.ed && \ 120 ed - $(PROJECT)/Lib/plat-mac/bundlebuilder.py < $(FIX)/bundlebuilder.py.ed && \ 121 ed - $(PROJECT)/Lib/plat-mac/Carbon/AppleEvents.py < $(FIX)/AppleEvents.py.ed && \ 122 ed - $(PROJECT)/Lib/platform.py < $(FIX)/Lib_platform.py.ed && \ 123 ed - $(PROJECT)/Lib/pydoc.py < $(FIX)/pydoc.py.ed && \ 124 ed - $(PROJECT)/Lib/rlcompleter.py < $(FIX)/rlcompleter.py.ed && \ 125 ed - $(PROJECT)/Lib/site.py < $(FIX)/site.py.ed && \ 126 ed - $(PROJECT)/Lib/test/test__locale.py < $(FIX)/Lib_test_test__locale.py.ed && \ 127 ed - $(PROJECT)/Lib/test/test_httpservers.py < $(FIX)/Lib_test_test_httpservers.py.ed && \ 128 ed - $(PROJECT)/Lib/test/test_platform.py < $(FIX)/Lib_test_test_platform.py.ed && \ 129 ed - $(PROJECT)/Mac/Makefile.in < $(FIX)/Mac_Makefile.in.ed && \ 130 patch $(PROJECT)/Mac/Modules/cf/_CFmodule.c $(FIX)/_CFmodule.c.patch && \ 131 ed - $(PROJECT)/Mac/Modules/cg/_CGmodule.c < $(FIX)/_CGmodule.c.ed && \ 132 ed - $(PROJECT)/Mac/Tools/pythonw.c < $(FIX)/pythonw.c.ed && \ 133 ed - $(PROJECT)/Makefile.pre.in < $(FIX)/Makefile.pre.in.ed && \ 134 patch $(PROJECT)/Misc/python.man $(FIX)/python.man.patch && \ 135 ed - $(PROJECT)/Modules/_cursesmodule.c < $(FIX)/_cursesmodule.c.ed && \ 136 ed - $(PROJECT)/Modules/dlmodule.c < $(FIX)/dlmodule.c.ed && \ 137 ed - $(PROJECT)/Modules/errnomodule.c < $(FIX)/errnomodule.c.ed && \ 138 rm $(PROJECT)/Modules/expat/expat.h $(PROJECT)/Modules/expat/expat_external.h && \ 139 ed - $(PROJECT)/Modules/getpath.c < $(FIX)/getpath.c.ed && \ 140 ed - $(PROJECT)/Modules/_localemodule.c < $(FIX)/_localemodule.c.ed && \ 141 ed - $(PROJECT)/Modules/posixmodule.c < $(FIX)/posixmodule.c.ed && \ 142 ed - $(PROJECT)/Modules/pwdmodule.c < $(FIX)/pwdmodule.c.ed && \ 143 ed - $(PROJECT)/Modules/pyexpat.c < $(FIX)/Modules_pyexpat.c.ed && \ 144 sed 's/@VERSION@/$(VERS)/' $(FIX)/python.c.ed | ed - $(PROJECT)/Modules/python.c && \ 145 ed - $(PROJECT)/Modules/readline.c < $(FIX)/readline.c.ed && \ 146 ex - $(PROJECT)/Modules/selectmodule.c < $(FIX)/selectmodule.c.ex && \ 147 ed - $(PROJECT)/pyconfig.h.in < $(FIX)/pyconfig.h.in.ed && \ 148 ed - $(PROJECT)/Python/ceval.c < $(FIX)/ceval.c.ed && \ 149 ed - $(PROJECT)/Python/dynload_shlib.c < $(FIX)/dynload_shlib.c.ed && \ 150 ed - $(PROJECT)/Python/mactoolboxglue.c < $(FIX)/mactoolboxglue.c.ed && \ 151 ed - $(PROJECT)/setup.py < $(FIX)/setup.py.ed && \ 152 for i in `find $(PROJECT)/Mac -name setup.py | xargs fgrep -l "'-framework', 'Carbon'"`; do \ 153 ed - $$i < $(FIX)/Mac_setup.py.ed || exit 1; \ 154 done && \ 155 for i in `find $(PROJECT)/Lib -name __init__.py -size 0c`; do \ 156 echo '#' > $$i; \ 157 done && \ 158 echo > $(PROJECT)/Lib/test/nullcert.pem 159ifdef PYTHON_AUTOCONF 160 @set -x && \ 161 cd '$(OBJROOT)' && \ 162 ed - $(PROJECT)/configure.in < $(FIX)/configure.in.ed 163ifeq ($(PYTHON_AUTOCONF),YES) 164 cd '$(OBJROOT)/$(PROJECT)' && autoconf 165endif 166else # !PYTHON_AUTOCONF 167 tar -xof $(FIX)/autoconf.tar.bz2 -C '$(OBJROOT)/$(PROJECT)' 168endif 169 dtrace -h -s $(FIX)/pydtrace.d -o '$(PYDTRACE_H)' 170 171install: installpython 172 install $(FIX)/audiotest.au $(DSTROOT)$(LIBPYTHONVERS)/email/test/data/audiotest.au 173 install $(FIX)/audiotest.au $(DSTROOT)$(LIBPYTHONVERS)/test/audiotest.au 174 175##--------------------------------------------------------------------- 176# PR-3478215 - for backwards compatibility with non-framework python, we 177# create symbolic links in /usr/include and /usr/lib. We now create the 178# links w.r.t. multiple versioning. In addition, the PYTHON_DEFAULT 179# environment variable will be set to YES if this version is the default 180# version of python. 181##--------------------------------------------------------------------- 182installpython: $(OBJROOT)/$(PROJECT) 183 install -d '$(DSTROOT)/usr/bin' 184 DSTROOT='$(DSTROOT)' OBJROOT='$(OBJROOT)/$(PROJECT)' \ 185 SRCROOT='$(OBJROOT)' SYMROOT='$(SYMROOT)' RC_ARCHS='$(RC_ARCHS)' \ 186 DYLD_NEW_LOCAL_SHARED_REGIONS=1 \ 187 $(MAKE) -C '$(OBJROOT)' -f Makefile install \ 188 DSTROOT='$(DSTROOT)' OBJROOT='$(OBJROOT)/$(PROJECT)' \ 189 SRCROOT='$(OBJROOT)' SYMROOT='$(SYMROOT)' RC_ARCHS='$(RC_ARCHS)' \ 190 VERS=$(VERS) 191 @obj= && \ 192 install -d '$(DSTROOT)$(USRINCLUDE)' 193 ln -sf ../..$(INCLUDEPYTHONVERS) '$(DSTROOT)$(USRINCLUDE)/$(PROJECT)$(VERS)' 194 install -d '$(DSTROOT)$(USRLIB)' 195 ln -sf ../..$(LIBPYTHONVERS) '$(DSTROOT)$(USRLIB)/$(PROJECT)$(VERS)' 196 ln -sf ../..$(VERSIONSVERS)/Python '$(DSTROOT)$(USRLIB)/$(DYLIB)' 197ifeq ($(PYTHON_DEFAULT),YES) 198 ln -sf $(DYLIB) '$(DSTROOT)$(USRLIB)/lib$(PROJECT).dylib' 199endif 200 install -d '$(DSTROOT)$(SITEPACKAGES)' 201 202.DEFAULT: 203 @$(MAKE) -f Makefile $@ 204