diff --git a/pythonbrew/define.py b/pythonbrew/define.py index 2a3ea61..7e01fcd 100644 --- a/pythonbrew/define.py +++ b/pythonbrew/define.py @@ -24,6 +24,7 @@ PATH_SCRIPTS_PYTHONBREW_COMMANDS = os.path.join(PATH_SCRIPTS_PYTHONBREW,"command PATH_SCRIPTS_PYTHONBREW_INSTALLER = os.path.join(PATH_SCRIPTS_PYTHONBREW,"installer") PATH_PATCHES = os.path.join(ROOT,"patches") PATH_PATCHES_MACOSX = os.path.join(PATH_PATCHES,"macosx") +PATH_PATCHES_MACOSX_PYTHON26 = os.path.join(PATH_PATCHES_MACOSX,"python26") PATH_PATCHES_MACOSX_PYTHON25 = os.path.join(PATH_PATCHES_MACOSX,"python25") PATH_PATCHES_MACOSX_PYTHON24 = os.path.join(PATH_PATCHES_MACOSX,"python24") diff --git a/pythonbrew/installer/pythoninstaller.py b/pythonbrew/installer/pythoninstaller.py index 0edb764..48143ab 100644 --- a/pythonbrew/installer/pythoninstaller.py +++ b/pythonbrew/installer/pythoninstaller.py @@ -10,7 +10,8 @@ from pythonbrew.util import makedirs, symlink, Package, is_url, Link,\ fileurl_to_path from pythonbrew.define import PATH_BUILD, PATH_DISTS, PATH_PYTHONS,\ ROOT, PATH_LOG, DISTRIBUTE_SETUP_DLSITE,\ - PATH_PATCHES_MACOSX_PYTHON25, PATH_PATCHES_MACOSX_PYTHON24 + PATH_PATCHES_MACOSX_PYTHON25, PATH_PATCHES_MACOSX_PYTHON24,\ + PATH_PATCHES_MACOSX_PYTHON26 from pythonbrew.downloader import get_python_version_url, Downloader,\ get_headerinfo_from_url from pythonbrew.log import logger @@ -200,6 +201,7 @@ class PythonInstallerMacOSX(PythonInstaller): try: s = Subprocess(log=self.logfile, cwd=self.build_dir) patches = [] + eds = {} if is_python24(version): patch_dir = PATH_PATCHES_MACOSX_PYTHON24 patches = ['patch-configure', 'patch-Makefile.pre.in', @@ -212,15 +214,38 @@ class PythonInstallerMacOSX(PythonInstaller): 'patch-gestaltmodule.c.diff'] elif is_python25(version): patch_dir = PATH_PATCHES_MACOSX_PYTHON25 - patches = ['patch-Makefile.pre.in.diff', 'patch-Lib-cgi.py.diff', - 'patch-Lib-distutils-dist.py.diff', 'patch-setup.py.diff', - 'patch-configure-badcflags.diff', 'patch-configure-arch_only.diff', - 'patch-64bit.diff', 'patch-pyconfig.h.in.diff', - 'patch-Modules-posixmodule.c.diff', 'patch-gestaltmodule.c.diff'] - if patches: + patches = ['patch-Makefile.pre.in.diff', + 'patch-Lib-cgi.py.diff', + 'patch-Lib-distutils-dist.py.diff', + 'patch-setup.py.diff', + 'patch-configure-badcflags.diff', + 'patch-configure-arch_only.diff', + 'patch-64bit.diff', + 'patch-pyconfig.h.in.diff', + 'patch-gestaltmodule.c.diff'] + eds = {'_localemodule.c.ed': 'Modules/_localemodule.c', + 'locale.py.ed': 'Lib/locale.py'} + elif is_python26(version): + patch_dir = PATH_PATCHES_MACOSX_PYTHON26 + patches = ['patch-Lib-cgi.py.diff', + 'patch-Lib-distutils-dist.py.diff', + 'patch-Mac-IDLE-Makefile.in.diff', + 'patch-Mac-Makefile.in.diff', + 'patch-Mac-PythonLauncher-Makefile.in.diff', + 'patch-Mac-Tools-Doc-setup.py.diff', + 'patch-setup.py-db46.diff', + 'patch-Lib-ctypes-macholib-dyld.py.diff', + 'patch-setup_no_tkinter.py.diff'] + eds = {'_localemodule.c.ed': 'Modules/_localemodule.c', + 'locale.py.ed': 'Lib/locale.py'} + + if patches or eds: logger.info("Patching %s" % self.pkg.name) for patch in patches: s.check_call("patch -p0 < %s" % os.path.join(patch_dir, patch)) + for (ed, source) in eds.items(): + ed = os.path.join(patch_dir, ed) + s.check_call('ed - %s < %s' % (source, ed)) except: logger.error("Failed to patch `%s`" % self.build_dir) sys.exit(1) diff --git a/pythonbrew/patches/macosx/python25/_localemodule.c.ed b/pythonbrew/patches/macosx/python25/_localemodule.c.ed new file mode 100644 index 0000000..d4617a9 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/_localemodule.c.ed @@ -0,0 +1,2 @@ +g/defined(__APPLE__)/s//0/g +w diff --git a/pythonbrew/patches/macosx/python25/locale.py.ed b/pythonbrew/patches/macosx/python25/locale.py.ed new file mode 100644 index 0000000..0bdbf3e --- /dev/null +++ b/pythonbrew/patches/macosx/python25/locale.py.ed @@ -0,0 +1,2 @@ +g/'darwin', /s/// +w diff --git a/pythonbrew/patches/macosx/python25/patch-FSIORefNum.diff b/pythonbrew/patches/macosx/python25/patch-FSIORefNum.diff deleted file mode 100644 index 6f8ac66..0000000 --- a/pythonbrew/patches/macosx/python25/patch-FSIORefNum.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- Mac/Modules/file/_Filemodule.c.orig 2009-09-12 15:55:59.000000000 +1000 -+++ Mac/Modules/file/_Filemodule.c 2009-09-12 16:12:07.000000000 +1000 -@@ -7,6 +7,8 @@ - - #include "pymactoolbox.h" - -+typedef SInt16 FSIORefNum; -+ - /* Macro to test whether a weak-loaded CFM function exists */ - #define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL ) {\ - PyErr_SetString(PyExc_NotImplementedError, \ diff --git a/pythonbrew/patches/macosx/python25/patch-Misc-setuid-prog.c.diff b/pythonbrew/patches/macosx/python25/patch-Misc-setuid-prog.c.diff deleted file mode 100644 index 0fee9e7..0000000 --- a/pythonbrew/patches/macosx/python25/patch-Misc-setuid-prog.c.diff +++ /dev/null @@ -1,16 +0,0 @@ ---- Misc/setuid-prog.c.orig Sat Dec 11 14:29:22 2004 -+++ Misc/setuid-prog.c Sat Dec 11 14:30:13 2004 -@@ -70,6 +70,12 @@ - #define environ _environ - #endif - -+#if defined(__APPLE__) -+#include -+#include -+#define environ (*_NSGetEnviron()) -+#endif -+ - /* don't change def_IFS */ - char def_IFS[] = "IFS= \t\n"; - /* you may want to change def_PATH, but you should really change it in */ - diff --git a/pythonbrew/patches/macosx/python25/patch-Modules-posixmodule.c.diff b/pythonbrew/patches/macosx/python25/patch-Modules-posixmodule.c.diff deleted file mode 100644 index c14913c..0000000 --- a/pythonbrew/patches/macosx/python25/patch-Modules-posixmodule.c.diff +++ /dev/null @@ -1,21 +0,0 @@ ---- Modules/posixmodule.c.orig Sat Dec 11 14:27:52 2004 -+++ Modules/posixmodule.c Sat Dec 11 14:28:17 2004 -@@ -339,7 +339,7 @@ - #endif - - /* Return a dictionary corresponding to the POSIX environment table */ --#ifdef WITH_NEXT_FRAMEWORK -+#ifdef __APPLE__ - /* On Darwin/MacOSX a shared library or framework has no access to - ** environ directly, we must obtain it with _NSGetEnviron(). - */ -@@ -357,7 +357,7 @@ - d = PyDict_New(); - if (d == NULL) - return NULL; --#ifdef WITH_NEXT_FRAMEWORK -+#ifdef __APPLE__ - if (environ == NULL) - environ = *_NSGetEnviron(); - #endif - diff --git a/pythonbrew/patches/macosx/python25/patch-configure.diff b/pythonbrew/patches/macosx/python25/patch-configure.diff deleted file mode 100644 index cc60be1..0000000 --- a/pythonbrew/patches/macosx/python25/patch-configure.diff +++ /dev/null @@ -1,28 +0,0 @@ ---- configure.in.orig 2007-09-28 21:07:32.000000000 +0200 -+++ configure.in 2007-09-28 21:08:12.000000000 +0200 -@@ -669,6 +669,11 @@ - BLDLIBRARY='-L. -lpython$(VERSION)' - RUNSHARED=DLL_PATH=`pwd`:${DLL_PATH:-/atheos/sys/libs:/atheos/autolnk/lib} - ;; -+ Darwin*) -+ LDLIBRARY='libpython$(VERSION).dylib' -+ BLDLIBRARY='-L. -lpython$(VERSION)' -+ RUNSHARED=DYLD_LIBRARY_PATH="`pwd`:${DYLD_LIBRARY_PATH}" -+ ;; - esac - else # shared is disabled - case $ac_sys_system in ---- configure.orig 2007-09-28 21:07:26.000000000 +0200 -+++ configure 2007-09-28 21:07:33.000000000 +0200 -@@ -3445,6 +3445,11 @@ - BLDLIBRARY='-L. -lpython$(VERSION)' - RUNSHARED=DLL_PATH=`pwd`:${DLL_PATH:-/atheos/sys/libs:/atheos/autolnk/lib} - ;; -+ Darwin*) -+ LDLIBRARY='libpython$(VERSION).dylib' -+ BLDLIBRARY='-L. -lpython$(VERSION)' -+ RUNSHARED=DYLD_LIBRARY_PATH="`pwd`:${DYLD_LIBRARY_PATH}" -+ ;; - esac - else # shared is disabled - case $ac_sys_system in diff --git a/pythonbrew/patches/macosx/python26/_localemodule.c.ed b/pythonbrew/patches/macosx/python26/_localemodule.c.ed new file mode 100644 index 0000000..db1f5e4 --- /dev/null +++ b/pythonbrew/patches/macosx/python26/_localemodule.c.ed @@ -0,0 +1,3 @@ +g/defined(__APPLE__)/s//0/g +w + diff --git a/pythonbrew/patches/macosx/python26/locale.py.ed b/pythonbrew/patches/macosx/python26/locale.py.ed new file mode 100644 index 0000000..c87797c --- /dev/null +++ b/pythonbrew/patches/macosx/python26/locale.py.ed @@ -0,0 +1,3 @@ +g/'darwin', /s/// +w + diff --git a/pythonbrew/patches/macosx/python26/patch-Lib-cgi.py.diff b/pythonbrew/patches/macosx/python26/patch-Lib-cgi.py.diff new file mode 100644 index 0000000..fb861bc --- /dev/null +++ b/pythonbrew/patches/macosx/python26/patch-Lib-cgi.py.diff @@ -0,0 +1,18 @@ +--- Lib/cgi.py.orig 2006-08-10 19:41:07.000000000 +0200 ++++ Lib/cgi.py 2007-08-21 15:36:54.000000000 +0200 +@@ -1,13 +1,6 @@ +-#! /usr/local/bin/python ++#! @@PREFIX@@/bin/python2.6 + +-# NOTE: the above "/usr/local/bin/python" is NOT a mistake. It is +-# intentionally NOT "/usr/bin/env python". On many systems +-# (e.g. Solaris), /usr/local/bin is not in $PATH as passed to CGI +-# scripts, and /usr/local/bin is the default directory where Python is +-# installed, so /usr/bin/env would be unable to find python. Granted, +-# binary installations by Linux vendors often install Python in +-# /usr/bin. So let those vendors patch cgi.py to match their choice +-# of installation. ++# NOTE: /usr/local/bin/python patched for MacPorts installation + + """Support module for CGI (Common Gateway Interface) scripts. + diff --git a/pythonbrew/patches/macosx/python26/patch-Lib-ctypes-macholib-dyld.py.diff b/pythonbrew/patches/macosx/python26/patch-Lib-ctypes-macholib-dyld.py.diff new file mode 100644 index 0000000..31216d5 --- /dev/null +++ b/pythonbrew/patches/macosx/python26/patch-Lib-ctypes-macholib-dyld.py.diff @@ -0,0 +1,11 @@ +--- Lib/ctypes/macholib/dyld.py.orig 2008-02-21 11:52:20.000000000 -0700 ++++ Lib/ctypes/macholib/dyld.py 2009-10-11 02:42:21.000000000 -0600 +@@ -26,7 +26,7 @@ + + DEFAULT_LIBRARY_FALLBACK = [ + os.path.expanduser("~/lib"), +- "/usr/local/lib", ++ "@@PREFIX@@/lib", + "/lib", + "/usr/lib", + ] diff --git a/pythonbrew/patches/macosx/python26/patch-Lib-distutils-dist.py.diff b/pythonbrew/patches/macosx/python26/patch-Lib-distutils-dist.py.diff new file mode 100644 index 0000000..45276c5 --- /dev/null +++ b/pythonbrew/patches/macosx/python26/patch-Lib-distutils-dist.py.diff @@ -0,0 +1,51 @@ +--- Lib/distutils/dist.py.orig 2008-09-03 05:13:56.000000000 -0600 ++++ Lib/distutils/dist.py 2008-10-03 18:33:47.000000000 -0600 +@@ -60,6 +60,7 @@ + ('quiet', 'q', "run quietly (turns verbosity off)"), + ('dry-run', 'n', "don't actually do anything"), + ('help', 'h', "show detailed help message"), ++ ('no-user-cfg', None,'ignore pydistutils.cfg in your home directory'), + ] + + # 'common_usage' is a short (2-3 line) string describing the common +@@ -267,6 +268,12 @@ + else: + sys.stderr.write(msg + "\n") + ++ # no-user-cfg is handled before other command line args ++ # because other args override the config files, and this ++ # one is needed before we can load the config files. ++ # If attrs['script_args'] wasn't passed, assume false. ++ self.want_user_cfg = '--no-user-cfg' not in (self.script_args or []) ++ + self.finalize_options() + + # __init__ () +@@ -327,6 +334,9 @@ + Distutils __inst__.py file lives), a file in the user's home + directory named .pydistutils.cfg on Unix and pydistutils.cfg + on Windows/Mac, and setup.cfg in the current directory. ++ ++ The file in the user's home directory can be disabled with the ++ --no-user-cfg option. + """ + files = [] + check_environ() +@@ -347,7 +357,7 @@ + + # And look for the user config file + user_file = os.path.join(os.path.expanduser('~'), user_filename) +- if os.path.isfile(user_file): ++ if self.want_user_cfg and os.path.isfile(user_file): + files.append(user_file) + + # All platforms support local setup.cfg +@@ -355,6 +365,8 @@ + if os.path.isfile(local_file): + files.append(local_file) + ++ if DEBUG: ++ print "using config files: %s" % ', '.join(files) + return files + + # find_config_files () diff --git a/pythonbrew/patches/macosx/python26/patch-Mac-IDLE-Makefile.in.diff b/pythonbrew/patches/macosx/python26/patch-Mac-IDLE-Makefile.in.diff new file mode 100644 index 0000000..36ef4b6 --- /dev/null +++ b/pythonbrew/patches/macosx/python26/patch-Mac-IDLE-Makefile.in.diff @@ -0,0 +1,20 @@ +--- Mac/IDLE/Makefile.in.orig 2009-01-02 04:47:17.000000000 -0700 ++++ Mac/IDLE/Makefile.in 2009-04-16 00:54:43.000000000 -0600 +@@ -22,7 +22,7 @@ + + BUNDLEBULDER=$(srcdir)/../../Lib/plat-mac/bundlebuilder.py + +-PYTHONAPPSDIR=/Applications/$(PYTHONFRAMEWORK) $(VERSION) ++PYTHONAPPSDIR=@@APPLICATIONS_DIR@@/$(PYTHONFRAMEWORK) $(VERSION) + + all: IDLE.app + +@@ -42,7 +42,7 @@ + $(srcdir)/../Icons/PythonSource.icns \ + $(srcdir)/../Icons/PythonCompiled.icns Info.plist + rm -fr IDLE.app +- $(RUNSHARED) @ARCH_RUN_32BIT@ $(BUILDPYTHON) $(BUNDLEBULDER) \ ++ PYTHONHOME=$(DESTDIR)$(prefix) $(RUNSHARED) @ARCH_RUN_32BIT@ $(BUILDPYTHON) $(BUNDLEBULDER) \ + --builddir=. \ + --name=IDLE \ + --link-exec \ diff --git a/pythonbrew/patches/macosx/python26/patch-Mac-Makefile.in.diff b/pythonbrew/patches/macosx/python26/patch-Mac-Makefile.in.diff new file mode 100644 index 0000000..84d41d1 --- /dev/null +++ b/pythonbrew/patches/macosx/python26/patch-Mac-Makefile.in.diff @@ -0,0 +1,20 @@ +--- Mac/Makefile.in.orig 2009-03-30 13:58:41.000000000 -0600 ++++ Mac/Makefile.in 2009-04-16 00:54:26.000000000 -0600 +@@ -19,7 +19,7 @@ + + # These are normally glimpsed from the previous set + bindir=$(prefix)/bin +-PYTHONAPPSDIR=/Applications/$(PYTHONFRAMEWORK) $(VERSION) ++PYTHONAPPSDIR=@@APPLICATIONS_DIR@@/$(PYTHONFRAMEWORK) $(VERSION) + APPINSTALLDIR=$(prefix)/Resources/Python.app + + # Variables for installing the "normal" unix binaries +@@ -224,7 +224,7 @@ + cd IDLE && make install + + install_BuildApplet: +- $(RUNSHARED) @ARCH_RUN_32BIT@ $(BUILDPYTHON) $(srcdir)/scripts/BuildApplet.py \ ++ PYTHONHOME=$(DESTDIR)$(prefix) $(RUNSHARED) @ARCH_RUN_32BIT@ $(BUILDPYTHON) $(srcdir)/scripts/BuildApplet.py \ + --destroot "$(DESTDIR)" \ + --python=$(prefix)/Resources/Python.app/Contents/MacOS/$(PYTHONFRAMEWORK)`test -f "$(DESTDIR)$(prefix)/Resources/Python.app/Contents/MacOS/$(PYTHONFRAMEWORK)-32" && echo "-32"` \ + --output "$(DESTDIR)$(PYTHONAPPSDIR)/Build Applet.app" \ diff --git a/pythonbrew/patches/macosx/python26/patch-Mac-PythonLauncher-Makefile.in.diff b/pythonbrew/patches/macosx/python26/patch-Mac-PythonLauncher-Makefile.in.diff new file mode 100644 index 0000000..2466c09 --- /dev/null +++ b/pythonbrew/patches/macosx/python26/patch-Mac-PythonLauncher-Makefile.in.diff @@ -0,0 +1,25 @@ +--- Mac/PythonLauncher/Makefile.in.orig 2009-01-02 04:47:17.000000000 -0700 ++++ Mac/PythonLauncher/Makefile.in 2009-04-16 00:55:11.000000000 -0600 +@@ -1,3 +1,4 @@ ++prefix=@prefix@ + CC=@CC@ + LD=@CC@ + BASECFLAGS=@BASECFLAGS@ +@@ -21,7 +22,7 @@ + + BUNDLEBULDER=$(srcdir)/../../Lib/plat-mac/bundlebuilder.py + +-PYTHONAPPSDIR=/Applications/$(PYTHONFRAMEWORK) $(VERSION) ++PYTHONAPPSDIR=@@APPLICATIONS_DIR@@/$(PYTHONFRAMEWORK) $(VERSION) + OBJECTS=FileSettings.o MyAppDelegate.o MyDocument.o PreferencesWindowController.o doscript.o main.o + + all: Python\ Launcher.app +@@ -42,7 +43,7 @@ + $(srcdir)/../Icons/PythonCompiled.icns \ + $(srcdir)/factorySettings.plist + rm -fr "Python Launcher.app" +- $(RUNSHARED) $(BUILDPYTHON) $(BUNDLEBULDER) \ ++ PYTHONHOME=$(DESTDIR)$(prefix) $(RUNSHARED) $(BUILDPYTHON) $(BUNDLEBULDER) \ + --builddir=. \ + --name="Python Launcher" \ + --executable="Python Launcher" \ diff --git a/pythonbrew/patches/macosx/python26/patch-Mac-Tools-Doc-setup.py.diff b/pythonbrew/patches/macosx/python26/patch-Mac-Tools-Doc-setup.py.diff new file mode 100644 index 0000000..63e4e11 --- /dev/null +++ b/pythonbrew/patches/macosx/python26/patch-Mac-Tools-Doc-setup.py.diff @@ -0,0 +1,11 @@ +--- Mac/Tools/Doc/setup.py.diff 2008-03-29 09:24:25.000000000 -0600 ++++ Mac/Tools/Doc/setup.py 2008-10-04 19:53:40.000000000 -0600 +@@ -30,7 +30,7 @@ + + MAJOR_VERSION='2.4' + MINOR_VERSION='2.4.1' +-DESTDIR='/Applications/MacPython-%s/PythonIDE.app/Contents/Resources/English.lproj/PythonDocumentation' % MAJOR_VERSION ++DESTDIR='@@APPLICATIONS_DIR@@/MacPython-%s/PythonIDE.app/Contents/Resources/English.lproj/PythonDocumentation' % MAJOR_VERSION + + class DocBuild(build): + def initialize_options(self): diff --git a/pythonbrew/patches/macosx/python26/patch-setup.py-db46.diff b/pythonbrew/patches/macosx/python26/patch-setup.py-db46.diff new file mode 100644 index 0000000..45d726e --- /dev/null +++ b/pythonbrew/patches/macosx/python26/patch-setup.py-db46.diff @@ -0,0 +1,11 @@ +--- setup.py.orig 2010-10-19 22:33:25.000000000 +0200 ++++ setup.py 2010-10-19 22:33:54.000000000 +0200 +@@ -799,7 +799,7 @@ + # BerkeleyDB 4.6.x is not stable on many architectures. + arch = platform_machine() + if arch not in ('i386', 'i486', 'i586', 'i686', +- 'x86_64', 'ia64'): ++ 'x86_64', 'ia64', 'Power Macintosh'): + return False + return True + diff --git a/pythonbrew/patches/macosx/python26/patch-setup_no_tkinter.py.diff b/pythonbrew/patches/macosx/python26/patch-setup_no_tkinter.py.diff new file mode 100644 index 0000000..5009a42 --- /dev/null +++ b/pythonbrew/patches/macosx/python26/patch-setup_no_tkinter.py.diff @@ -0,0 +1,11 @@ +--- setup.py.orig 2009-03-31 12:20:48.000000000 -0600 ++++ setup.py 2009-09-17 00:33:12.000000000 -0600 +@@ -17,7 +17,7 @@ + from distutils.command.install_lib import install_lib + + # This global variable is used to hold the list of modules to be disabled. +-disabled_module_list = [] ++disabled_module_list = ["_tkinter"] + + def add_dir_to_list(dirlist, dir): + """Add the directory 'dir' to the list 'dirlist' (at the front) if