1## 2# Makefile for python 3## 4 5Project = python 6Extra_Configure_Flags = --enable-ipv6 --with-system-expat --with-threads --enable-framework=/System/Library/Frameworks --enable-toolbox-glue --with-system-ffi 7# Define the environment variable DEBUG to YES, to build without optimization 8ifeq ($(DEBUG),YES) 9Extra_Configure_Flags += --with-pydebug 10endif 11 12##--------------------------------------------------------------------- 13# Extra_CC_Flags and Extra_LD_Flags are needed because CFLAGS gets overridden 14# by the RC_* variables. These values would normally be set by the default 15# python Makefile 16##--------------------------------------------------------------------- 17Extra_CC_Flags += -fno-common -fno-strict-aliasing -fwrapv -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 18Extra_LD_Flags += -Wl,-F. 19Extra_Install_Flags = DESTDIR='$(DSTROOT)' 20GnuAfterInstall = fixup-after-install install-plist 21Extra_Environment = CCSHARED='$(RC_CFLAGS)' 22 23# It's a GNU Source project 24include $(MAKEFILEPATH)/CoreOS/ReleaseControl/GNUSource.make 25 26# Override compiler setting from GNUSource.make to use those set in GNUmakefile 27override CC = $(MY_CC) 28override CXX = $(MY_CXX) 29 30Install_Flags := $(shell echo $(Install_Flags) | sed 's/prefix=[^ ]* *//') 31Install_Target = frameworkinstall 32 33FIX = '$(SRCROOT)/fix' 34 35##--------------------------------------------------------------------- 36# Patch Makefiles and pyconfig.h just after running configure 37##--------------------------------------------------------------------- 38ConfigStamp2 = $(ConfigStamp)2 39 40configure:: $(ConfigStamp2) 41 42$(ConfigStamp2): $(ConfigStamp) 43 ed - '$(OBJROOT)/Makefile' < $(FIX)/Makefile.ed 44 ed - '$(OBJROOT)/pyconfig.h' < $(FIX)/pyconfig.ed 45 $(TOUCH) $(ConfigStamp2) 46 47##--------------------------------------------------------------------- 48# Fixup a lot of problems after the install 49##--------------------------------------------------------------------- 50APPS = /Applications 51USRBIN = /usr/bin 52PYTHONAPPNAME = Python.app 53FRAMEWORKS = /System/Library/Frameworks 54PYFRAMEWORK = $(FRAMEWORKS)/Python.framework 55VERSIONSVERS = $(PYFRAMEWORK)/Versions/$(VERS) 56RESOURCESVERS = $(VERSIONSVERS)/Resources 57LIBPYTHONVERS = $(VERSIONSVERS)/lib/python$(VERS) 58PYTHONAPP = $(RESOURCESVERS)/$(PYTHONAPPNAME) 59PACONTENTS = $(PYTHONAPP)/Contents 60PAMACOS = $(PACONTENTS)/MacOS 61RUNPYTHON = DYLD_FRAMEWORK_PATH='$(OBJROOT)' '$(OBJROOT)/python.exe' 62BYTE2UTF16 = $(RUNPYTHON) $(FIX)/byte2utf16.py 63UTF162BYTE = $(RUNPYTHON) $(FIX)/utf162byte.py 64 65fixup-after-install: delete-stuff \ 66 strip-installed-files \ 67 fix-PInfo \ 68 fix-paths \ 69 fix-usr-local-bin \ 70 fix-usr-bin \ 71 fix-permissions \ 72 fix-config-Makefile \ 73 additional-man-pages 74 75# We leave "Build Applet.app" in $(APPS) to be deleted, because it uses 76# Carbon, and doesn't work in 64-bit. We also leave "Python Launcher.app" 77# in $(APPS) to be deleted (10692664). 78delete-stuff: 79 rm -rf '$(DSTROOT)/usr/local' '$(DSTROOT)$(APPS)' 80 81# We now need to create the .dSYM bundles ourselves 82# ($(DSTROOT)$(PYTHONAPP) is already stripped, so copy an unstripped binary) 83strip-installed-files: 84 ditto '$(DSTROOT)$(PYTHONAPP)' '$(SYMROOT)/$(PYTHONAPPNAME)' 85 ditto '$(OBJROOT)/python.exe' '$(SYMROOT)/$(PYTHONAPPNAME)/Contents/MacOS/Python' 86 $(DSYMUTIL) -o '$(SYMROOT)/$(PYTHONAPPNAME).dSYM' '$(SYMROOT)/$(PYTHONAPPNAME)/Contents/MacOS/Python' 87 $(STRIP) -x '$(DSTROOT)$(PAMACOS)/Python' 88 ditto '$(OBJROOT)/Python.framework' '$(SYMROOT)/Python.framework' 89 $(DSYMUTIL) -o '$(SYMROOT)/Python.framework.dSYM' '$(SYMROOT)/Python.framework/Python' 90 $(STRIP) -x '$(DSTROOT)$(VERSIONSVERS)/Python' 91 ditto '$(DSTROOT)$(LIBPYTHONVERS)'/lib-dynload/*.so '$(SYMROOT)/lib-dynload/' 92 cd '$(SYMROOT)/lib-dynload' && \ 93 for so in *.so; do \ 94 $(DSYMUTIL) $$so || exit 1; \ 95 done 96 $(STRIP) -x '$(DSTROOT)$(LIBPYTHONVERS)'/lib-dynload/*.so 97 98fix-PInfo: 99 ed - '$(DSTROOT)$(PACONTENTS)/Info.plist' < $(FIX)/pinfo.ed 100 ed - '$(DSTROOT)$(RESOURCESVERS)/Info.plist' < $(FIX)/pinfo.ed 101 102##--------------------------------------------------------------------- 103# As of python 2.7, the real man page is now python2.7.1 (not python.1). 104##--------------------------------------------------------------------- 105MAN1 = /usr/share/man/man1 106additional-man-pages: 107 mv -f $(DSTROOT)$(MAN1)/python$(VERS).1 $(DSTROOT)$(MAN1)/python.1 108 install -m 0644 $(FIX)/pydoc.1 '$(DSTROOT)$(MAN1)' 109 install -m 0644 $(FIX)/pythonw.1 '$(DSTROOT)$(MAN1)' 110 ln -sf pydoc.1 '$(DSTROOT)$(MAN1)/pydoc$(VERS).1' 111 ln -sf python.1 '$(DSTROOT)$(MAN1)/python$(VERS).1' 112 ln -sf pythonw.1 '$(DSTROOT)$(MAN1)/pythonw$(VERS).1' 113 114PYDOC = $(USRBIN)/pydoc 115PYDOCORIG = $(VERSIONSVERS)/bin/pydoc 116 117##--------------------------------------------------------------------- 118# The scripts exec $(VERSIONSVERS)/bin/python$(VERS), which execs 119# $(PAMACOS)/Python. We skip the extra exec by changing the scripts 120# to exec $(PAMACOS)/Python directly. 121##--------------------------------------------------------------------- 122fix-paths: 123 @set -x && \ 124 cd '$(DSTROOT)$(VERSIONSVERS)/bin' && \ 125 for i in `find . -type f | sed 's,^\./,,'`; do \ 126 if [ -n "`file $$i | fgrep script`" ]; then \ 127 ed - $$i < $(FIX)/skipextraexec.ed; \ 128 fi || exit 1; \ 129 done 130 131CGIPY = $(LIBPYTHONVERS)/cgi.py 132fix-usr-local-bin: 133 @set -x && \ 134 cd '$(DSTROOT)$(VERSIONSVERS)' && \ 135 patch -p0 < $(FIX)/usrlocalbin.patch && \ 136 $(RUNPYTHON) -c "from py_compile import compile;compile('$(DSTROOT)$(CGIPY)', dfile='$(CGIPY)', doraise=True)" && \ 137 $(RUNPYTHON) -O -c "from py_compile import compile;compile('$(DSTROOT)$(CGIPY)', dfile='$(CGIPY)', doraise=True)" 138 139##--------------------------------------------------------------------- 140# config/Makefile needs the following changes: 141# remove -arch xxx flags 142# 4144521 - correct LINKFORSHARED 143# 3488297 - point BINDIR to /usr/local/bin 144##--------------------------------------------------------------------- 145INSTALLPY = $(LIBPYTHONVERS)/distutils/command/install.py 146SYSCONFIGDATA = $(LIBPYTHONVERS)/_sysconfigdata.py 147fix-config-Makefile: 148 ed - '$(DSTROOT)$(LIBPYTHONVERS)/config/Makefile' < $(FIX)/config_Makefile.ed 149 ed - '$(DSTROOT)$(SYSCONFIGDATA)' < $(FIX)/_sysconfigdata.py.ed 150 $(RUNPYTHON) -c "from py_compile import compile;compile('$(DSTROOT)$(SYSCONFIGDATA)', dfile='$(SYSCONFIGDATA)', doraise=True)" && \ 151 $(RUNPYTHON) -O -c "from py_compile import compile;compile('$(DSTROOT)$(SYSCONFIGDATA)', dfile='$(SYSCONFIGDATA)', doraise=True)" 152 153fix-usr-bin: 154 @set -x && \ 155 cd '$(DSTROOT)$(USRBIN)' && \ 156 rm -f idle* && \ 157 for i in *; do \ 158 rm -f $$i && \ 159 ln -s ../..$(VERSIONSVERS)/bin/$$i || exit 1; \ 160 done 161 162LIBRARYPYTHON = /Library/Python 163LIBRARYPYTHONVERS = $(LIBRARYPYTHON)/$(VERS) 164 165fix-permissions: 166ifeq ($(shell id -u), 0) 167 @set -x && \ 168 for i in Applications Developer Library; do \ 169 chgrp -Rf admin $(DSTROOT)/$$i && \ 170 chmod -Rf g+w $(DSTROOT)/$$i; \ 171 done 172endif 173 174OSV = /usr/local/OpenSourceVersions 175OSL = /usr/local/OpenSourceLicenses 176 177install-plist: 178 $(MKDIR) '$(DSTROOT)$(OSV)' 179 $(INSTALL_FILE) '$(SRCROOT)/$(Project).plist' '$(DSTROOT)$(OSV)/$(Project).plist' 180 $(MKDIR) '$(DSTROOT)$(OSL)' 181 $(INSTALL_FILE) '$(OBJROOT)/LICENSE' '$(DSTROOT)$(OSL)/$(Project).txt' 182