diff --git a/README.rst b/README.rst index 86a097b..9b40ea8 100644 --- a/README.rst +++ b/README.rst @@ -35,6 +35,7 @@ Install some Pythons:: pythonbrew install Python-2.5.5 pythonbrew install --configure="CC=gcc_4.1" Python-2.6.6 pythonbrew install --no-setuptools Python-2.6.6 + pythonbrew install http://www.python.org/ftp/python/2.7/Python-2.7.tgz Switch python in the $PATH:: diff --git a/pythonbrew/commands/install.py b/pythonbrew/commands/install.py index a4b8cb0..0b23306 100644 --- a/pythonbrew/commands/install.py +++ b/pythonbrew/commands/install.py @@ -1,13 +1,6 @@ -import os -import sys -import re -import shutil from pythonbrew.basecommand import Command -from pythonbrew.util import unlink, splitext, Subprocess, Package, makedirs,\ - rm_r -from pythonbrew.define import ROOT, PATH_PYTHONS, PATH_DISTS, PATH_BUILD, PATH_LOG, DISTRIBUTE_SETUP_DLSITE from pythonbrew.log import logger -from pythonbrew.downloader import get_python_package_url, Downloader +from pythonbrew.installer import PythonInstaller class InstallCommand(Command): name = "install" @@ -37,148 +30,12 @@ class InstallCommand(Command): default=False, help="Skip installation of setuptools." ) - self._logfile = "%s/build.log" % PATH_LOG def run_command(self, options, args): if args: # Install Python - self._install_python(args[0], options) + PythonInstaller(args[0], options).install() else: logger.error("Package not found.") - def _install_python(self, dist, options): - pkg = Package(dist) - distname = self._download_package(pkg) - pkgname = pkg.name - version = pkg.version - - install_dir = "%s/%s" % (PATH_PYTHONS, pkgname) - configure = "--prefix=%s %s" % (install_dir, options.configure) - logger.info("") - logger.info("This could take a while. You can run the following command on another shell to track the status:") - logger.info(" tail -f %s" % self._logfile) - logger.info("") - - try: - s = Subprocess(log=self._logfile, shell=True, cwd=PATH_BUILD, print_cmd=False) - - logger.info("Extracting %s" % distname) - s.check_call(self._get_uncompress_command(distname)) - - logger.info("Installing %s into %s" % (pkgname, install_dir)) - s.chdir("%s/%s" % (PATH_BUILD, pkgname)) - s.check_call("./configure %s" % (configure)) - if options.force: - s.check_call("make") - else: - s.check_call("make") - s.check_call("make test") - if version == "1.5.2" or version == "1.6.1": - makedirs(install_dir) - s.check_call("make install") - except: - rm_r(install_dir) - logger.error("""Failed to install %(pkgname)s. See %(ROOT)s/build.log to see why. - - pythonbrew install --force %(version)s""" % {"pkgname":pkgname, "ROOT":ROOT, "version":version}) - sys.exit(1) - - # install setuptools - self._install_setuptools(pkgname, options.no_setuptools) - logger.info(""" -Installed %(pkgname)s successfully. Run the following command to switch to %(pkgname)s. - - pythonbrew switch %(version)s""" % {"pkgname":pkgname, "version":version}) - - def _download_package(self, pkg): - pkgname = pkg.name - version = pkg.version - - if os.path.isdir("%s/%s" % (PATH_PYTHONS, pkgname)): - logger.error("You are already installed `%s`." % pkgname) - sys.exit(1) - - download_url = get_python_package_url(version) - if not download_url: - logger.error("Unknown package: `%s`" % pkgname) - sys.exit(1) - distname = os.path.basename(download_url) - download_path = "%s/%s" % (PATH_DISTS, distname) - - if os.path.isfile(download_path): - logger.info("Use the previously fetched %s" % (download_path)) - else: - try: - dl = Downloader() - dl.download( - distname, - download_url, - download_path - ) - except: - unlink(download_path) - logger.info("\nInterrupt to abort. `%s`" % (download_url)) - sys.exit(1) - # iffy - if os.path.getsize(download_path) < 1000000: - logger.error("Failed to download. `%s`" % (download_url)) - unlink(download_path) - sys.exit(1) - return distname - - def _get_uncompress_command(self, basename): - distpath = "%s/%s" % (PATH_DISTS, basename) - if os.path.isfile(distpath): - ext = splitext(basename)[1] - if ext == ".tar.gz" or ext == ".tgz": - return "tar zxf %s" % (distpath) - elif ext == ".tar.bz2": - return "tar jxf %s" % (distpath) - elif ext == ".tar": - return "tar xf %s" % (distpath) - elif ext == ".zip": - return "unzip %s" % (distpath) - elif os.path.isdir(distpath): - return "mv %s %s/%s" % (distpath, PATH_BUILD, basename) - else: - logger.error("File not found. `%s`" % (basename)) - return "" - - def _install_setuptools(self, pkgname, no_setuptools): - if no_setuptools: - logger.info("Skip installation setuptools.") - return - if re.match("^Python-3.*", pkgname): - is_python3 = True - else: - is_python3 = False - download_url = DISTRIBUTE_SETUP_DLSITE - basename = os.path.basename(download_url) - - dl = Downloader() - dl.download(basename, download_url, "%s/%s" % (PATH_DISTS, basename)) - - install_dir = "%s/%s" % (PATH_PYTHONS, pkgname) - if is_python3: - if os.path.isfile("%s/bin/python3" % (install_dir)): - pyexec = "%s/bin/python3" % (install_dir) - elif os.path.isfile("%s/bin/python3.0" % (install_dir)): - pyexec = "%s/bin/python3.0" % (install_dir) - else: - logger.error("Python3 binary not found. `%s`" % (install_dir)) - return - else: - pyexec = "%s/bin/python" % (install_dir) - - try: - s = Subprocess(log=self._logfile, shell=True, cwd=PATH_DISTS, print_cmd=False) - logger.info("Installing distribute into %s" % install_dir) - s.check_call("%s %s" % (pyexec, basename)) - if os.path.isfile("%s/bin/easy_install" % (install_dir)) and not is_python3: - logger.info("Installing pip into %s" % install_dir) - s.check_call("%s/bin/easy_install pip" % (install_dir), cwd=None) - except: - logger.error("Failed to install setuptools. See %s/build.log to see why." % (ROOT)) - logger.info("Skip install setuptools.") - InstallCommand() diff --git a/pythonbrew/commands/update.py b/pythonbrew/commands/update.py index a08e680..1d9ff40 100644 --- a/pythonbrew/commands/update.py +++ b/pythonbrew/commands/update.py @@ -18,7 +18,7 @@ class UpdateCommand(Command): version = args[0] # check for latest version - if version == VERSION: + if version <= VERSION: logger.info("You are already running the installed latest version of pythonbrew.") sys.exit() diff --git a/pythonbrew/define.py b/pythonbrew/define.py index 1273a48..d618bb8 100644 --- a/pythonbrew/define.py +++ b/pythonbrew/define.py @@ -18,6 +18,9 @@ PATH_LOG = "%s/log" % ROOT PATH_SCRIPTS = "%s/scripts" % ROOT PATH_SCRIPTS_PYTHONBREW = "%s/pythonbrew" % PATH_SCRIPTS PATH_SCRIPTS_PYTHONBREW_COMMANDS = "%s/commands" % PATH_SCRIPTS_PYTHONBREW +PATH_PATCHES = "%s/patches" % ROOT +PATH_PATCHES_MACOSX = "%s/macosx" % PATH_PATCHES +PATH_PATCHES_MACOSX_PYTHON25 = "%s/python25" % PATH_PATCHES_MACOSX # file path PATH_BIN_PYTHONBREW = "%s/pythonbrew" % PATH_BIN @@ -28,7 +31,8 @@ DISTRIBUTE_SETUP_DLSITE = "http://python-distribute.org/distribute_setup.py" # download pythonbrew url PYTHONBREW_UPDATE_URL = { - "head": "http://github.com/utahta/pythonbrew/tarball/master" + "head": "http://github.com/utahta/pythonbrew/tarball/master", + "0.5": "https://github.com/utahta/pythonbrew/tarball/0.5", } PYTHONBREW_DIRNAME = "utahta-pythonbrew" @@ -46,11 +50,12 @@ _PYTHON_PACKAGE_VERSIONS = [ "2.6", "2.6.1", "2.6.2", "2.6.3", "2.6.4", "2.6.5", "2.6.6", "2.7", "3.0", "3.0.1", - "3.1", "3.1.1", "3.1.2", + "3.1", "3.1.1", "3.1.2", ] for version in _PYTHON_PACKAGE_VERSIONS: PYTHON_PACKAGE_URL[version] = "http://www.python.org/ftp/python/%s/Python-%s.tgz" % (version, version) del _PYTHON_PACKAGE_VERSIONS PYTHON_PACKAGE_URL["3.2a1"] = "http://www.python.org/ftp/python/3.2/Python-3.2a1.tgz" PYTHON_PACKAGE_URL["3.2a2"] = "http://www.python.org/ftp/python/3.2/Python-3.2a2.tgz" +PYTHON_PACKAGE_URL["3.2a3"] = "http://www.python.org/ftp/python/3.2/Python-3.2a3.tgz" diff --git a/pythonbrew/downloader.py b/pythonbrew/downloader.py index 6c88b48..ce41269 100644 --- a/pythonbrew/downloader.py +++ b/pythonbrew/downloader.py @@ -1,7 +1,21 @@ import sys import urllib +import urllib2 from pythonbrew.util import size_format from pythonbrew.define import PYTHON_PACKAGE_URL, PYTHONBREW_UPDATE_URL +from pythonbrew.log import logger + +def get_response_from_url(url): + try: + resp = urllib2.urlopen(url) + except urllib2.HTTPError, e: + logger.error("HTTP error %s while getting %s" % (e.code)) + raise + except IOError, e: + # Typically an FTP error + logger.error("Error %s while getting %s" % (e)) + raise + return resp class Downloader(object): def __init__(self): diff --git a/pythonbrew/installer.py b/pythonbrew/installer.py index 215cd5f..2acb04b 100644 --- a/pythonbrew/installer.py +++ b/pythonbrew/installer.py @@ -2,11 +2,16 @@ import os import sys import glob import shutil -from pythonbrew.util import makedirs, symlink +import re +from pythonbrew.util import makedirs, symlink, Package, is_url, splitext, Link,\ + unlink, is_gzip, is_html, untar_file, Subprocess, rm_r from pythonbrew.define import PATH_BUILD, PATH_BIN, PATH_DISTS, PATH_PYTHONS,\ PATH_ETC, PATH_SCRIPTS, PATH_SCRIPTS_PYTHONBREW,\ PATH_SCRIPTS_PYTHONBREW_COMMANDS, INSTALLER_ROOT, PATH_BIN_PYTHONBREW,\ - PATH_BIN_PYBREW, ROOT, PATH_LOG + PATH_BIN_PYBREW, ROOT, PATH_LOG, DISTRIBUTE_SETUP_DLSITE, PATH_PATCHES +from pythonbrew.downloader import get_python_package_url, Downloader,\ + get_response_from_url +from pythonbrew.log import logger def install_pythonbrew(): makedirs(PATH_PYTHONS) @@ -18,14 +23,18 @@ def install_pythonbrew(): makedirs(PATH_SCRIPTS) makedirs(PATH_SCRIPTS_PYTHONBREW) makedirs(PATH_SCRIPTS_PYTHONBREW_COMMANDS) + makedirs(PATH_PATCHES) for path in glob.glob("%s/*.py" % INSTALLER_ROOT): shutil.copy(path, PATH_SCRIPTS_PYTHONBREW) for path in glob.glob("%s/commands/*.py" % INSTALLER_ROOT): shutil.copy(path, PATH_SCRIPTS_PYTHONBREW_COMMANDS) - - fp = open("%s/pythonbrew.py" % PATH_SCRIPTS, "w") + +# for path in glob.glob("%s/patches" % INSTALLER_ROOT): +# shutil.copytree(path, PATH_PATCHES) + + fp = open("%s/pythonbrew_main.py" % PATH_SCRIPTS, "w") fp.write("""import pythonbrew if __name__ == "__main__": pythonbrew.main() @@ -34,7 +43,7 @@ if __name__ == "__main__": fp = open(PATH_BIN_PYTHONBREW, "w") fp.write("""#!/usr/bin/env bash -%s %s/pythonbrew.py "$@" +%s %s/pythonbrew_main.py "$@" """ % (sys.executable, PATH_SCRIPTS)) fp.close() os.chmod(PATH_BIN_PYTHONBREW, 0755) @@ -42,5 +51,142 @@ if __name__ == "__main__": os.system("echo 'export PATH=%s/bin:%s/current/bin:${PATH}' > %s/bashrc" % (ROOT, PATH_PYTHONS, PATH_ETC)) os.system("echo 'setenv PATH %s/bin:%s/current/bin:$PATH' > %s/cshrc" % (ROOT, PATH_PYTHONS, PATH_ETC)) + +class PythonInstaller(object): + def __init__(self, arg, options): + if is_url(arg): + self.download_url = arg + filename = Link(self.download_url).filename + pkg = Package(splitext(filename)[0]) + else: + pkg = Package(arg) + self.download_url = get_python_package_url(pkg.version) + if not self.download_url: + logger.error("Unknown package: `%s`" % pkg.name) + sys.exit(1) + filename = Link(self.download_url).filename + self.pkg = pkg + self.install_dir = "%s/%s" % (PATH_PYTHONS, pkg.name) + self.build_dir = "%s/%s" % (PATH_BUILD, pkg.name) + self.download_file = "%s/%s" % (PATH_DISTS, filename) + resp = get_response_from_url(self.download_url) + self.content_type = resp.info()['content-type'] + self.options = options + self.logfile = "%s/build.log" % PATH_LOG - \ No newline at end of file + def install(self): + if os.path.isdir(self.install_dir): + logger.info("You are already installed `%s`" % self.pkg.name) + sys.exit() + self.download() + logger.info("") + logger.info("This could take a while. You can run the following command on another shell to track the status:") + logger.info(" tail -f %s" % self.logfile) + logger.info("") + self.unpack() + logger.info("Installing %s into %s" % (self.pkg.name, self.install_dir)) + try: + self.configure() + self.make() + self.make_install() + except: + rm_r(self.install_dir) + logger.error("Failed to install %s. See %s to see why." % (self.pkg.name, self.logfile)) + logger.error(" pythonbrew install --force %s" % self.pkg.version) + sys.exit(1) + self.install_setuptools() + logger.info("Installed %(pkgname)s successfully. Run the following command to switch to %(pkgname)s." + % {"pkgname":self.pkg.name}) + logger.info("") + logger.info(" pythonbrew switch %s" % self.pkg.version) + + def download(self): + content_type = self.content_type + if is_html(content_type): + logger.error("Invalid content-type: `%s`" % content_type) + sys.exit(1) + if os.path.isfile(self.download_file): + logger.info("Use the previously fetched %s" % (self.download_file)) + return + msg = Link(self.download_url).show_msg + try: + dl = Downloader() + dl.download( + msg, + self.download_url, + self.download_file + ) + except: + unlink(self.download_file) + logger.info("\nInterrupt to abort. `%s`" % (self.download_url)) + sys.exit(1) + + def unpack(self): + logger.info("Extracting %s" % os.path.basename(self.download_file)) + if is_gzip(self.content_type, self.download_file): + untar_file(self.download_file, self.build_dir) + else: + logger.error("Cannot determine archive format of %s" % self.download_file) + + def configure(self): + s = Subprocess(log=self.logfile, shell=True, cwd=self.build_dir, print_cmd=False) + s.check_call("./configure --prefix=%s %s" % (self.install_dir, self.options.configure)) + + def make(self): + s = Subprocess(log=self.logfile, shell=True, cwd=self.build_dir, print_cmd=False) + if self.options.force: + s.check_call("make") + else: + s.check_call("make") + s.check_call("make test") + + def make_install(self): + version = self.pkg.version + if version == "1.5.2" or version == "1.6.1": + makedirs(self.install_dir) + s = Subprocess(log=self.logfile, shell=True, cwd=self.build_dir, print_cmd=False) + s.check_call("make install") + + def install_setuptools(self): + options = self.options + pkgname = self.pkg.name + if options.no_setuptools: + logger.info("Skip installation setuptools.") + return + if re.match("^Python-3.*", pkgname): + is_python3 = True + else: + is_python3 = False + download_url = DISTRIBUTE_SETUP_DLSITE + filename = Link(download_url).filename + + dl = Downloader() + dl.download(filename, download_url, "%s/%s" % (PATH_DISTS, filename)) + + install_dir = "%s/%s" % (PATH_PYTHONS, pkgname) + if is_python3: + if os.path.isfile("%s/bin/python3" % (install_dir)): + pyexec = "%s/bin/python3" % (install_dir) + elif os.path.isfile("%s/bin/python3.0" % (install_dir)): + pyexec = "%s/bin/python3.0" % (install_dir) + else: + logger.error("Python3 binary not found. `%s`" % (install_dir)) + return + else: + pyexec = "%s/bin/python" % (install_dir) + + try: + s = Subprocess(log=self.logfile, shell=True, cwd=PATH_DISTS, print_cmd=False) + logger.info("Installing distribute into %s" % install_dir) + s.check_call("%s %s" % (pyexec, filename)) + if os.path.isfile("%s/bin/easy_install" % (install_dir)) and not is_python3: + logger.info("Installing pip into %s" % install_dir) + s.check_call("%s/bin/easy_install pip" % (install_dir), cwd=None) + except: + logger.error("Failed to install setuptools. See %s/build.log to see why." % (ROOT)) + logger.info("Skip install setuptools.") + + + + + diff --git a/pythonbrew/log.py b/pythonbrew/log.py index f57a472..3ddf3cd 100644 --- a/pythonbrew/log.py +++ b/pythonbrew/log.py @@ -1,6 +1,14 @@ import sys import logging +class LoggerInfo(object): + def log(self, level, msg, *arg, **keys): + sys.stdout.write("%s\n" % msg) + +class LoggerError(object): + def log(self, level, msg, *arg, **keys): + sys.stderr.write("ERROR: %s\n" % msg) + class Logger(object): DEBUG = logging.DEBUG @@ -9,18 +17,10 @@ class Logger(object): def __init__(self): self._consumers = [] - consumer = logging.getLogger('info') - consumer.setLevel(Logger.INFO) - hdlr = logging.StreamHandler(sys.stdout) - hdlr.setFormatter(logging.Formatter("%(message)s")) - consumer.addHandler(hdlr) + consumer = LoggerInfo() self.add_consumer(Logger.INFO, consumer) - consumer = logging.getLogger('error') - consumer.setLevel(Logger.ERROR) - hdlr = logging.StreamHandler(sys.stderr) - hdlr.setFormatter(logging.Formatter("%(levelname)s: %(message)s")) - consumer.addHandler(hdlr) + consumer = LoggerError() self.add_consumer(Logger.ERROR, consumer) def debug(self, msg, *args, **keys): diff --git a/pythonbrew/patches/macosx/python25/.svn/all-wcprops b/pythonbrew/patches/macosx/python25/.svn/all-wcprops new file mode 100644 index 0000000..1506367 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/.svn/all-wcprops @@ -0,0 +1,11 @@ +K 25 +svn:wc:ra_dav:version-url +V 62 +/repository/macports/!svn/ver/69520/trunk/dports/lang/python25 +END +Portfile +K 25 +svn:wc:ra_dav:version-url +V 71 +/repository/macports/!svn/ver/69520/trunk/dports/lang/python25/Portfile +END diff --git a/pythonbrew/patches/macosx/python25/.svn/entries b/pythonbrew/patches/macosx/python25/.svn/entries new file mode 100644 index 0000000..9341647 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/.svn/entries @@ -0,0 +1,65 @@ +10 + +dir +73426 +http://svn.macports.org/repository/macports/trunk/dports/lang/python25 +http://svn.macports.org/repository/macports + + + +2010-07-08T20:19:52.476265Z +69520 +jmr@macports.org + + + + + + + + + + + + + + +d073be05-634f-4543-b044-5fe20cf6d1d6 + +files +dir + +Portfile +file + + + + +2010-11-13T11:26:29.000000Z +ca4390c343e6a0ff2dff18fd4e3cc961 +2010-07-08T20:19:52.476265Z +69520 +jmr@macports.org +has-props + + + + + + + + + + + + + + + + + + + + +7650 + diff --git a/pythonbrew/patches/macosx/python25/.svn/prop-base/Portfile.svn-base b/pythonbrew/patches/macosx/python25/.svn/prop-base/Portfile.svn-base new file mode 100644 index 0000000..75f38ed --- /dev/null +++ b/pythonbrew/patches/macosx/python25/.svn/prop-base/Portfile.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 2 +Id +END diff --git a/pythonbrew/patches/macosx/python25/.svn/text-base/Portfile.svn-base b/pythonbrew/patches/macosx/python25/.svn/text-base/Portfile.svn-base new file mode 100644 index 0000000..07c29c9 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/.svn/text-base/Portfile.svn-base @@ -0,0 +1,194 @@ +# $Id$ + +PortSystem 1.0 +PortGroup select 1.0 + +name python25 +version 2.5.5 +revision 1 + +set branch [join [lrange [split ${version} .] 0 1] .] +categories lang +platforms darwin +maintainers jwa openmaintainer + +description An interpreted, object-oriented programming language +long_description Python is an interpreted, interactive, object-oriented \ + programming language. + +homepage http://www.python.org/ +master_sites http://ftp.python.org/ftp/python/${version}/ + +distname Python-${version} +use_bzip2 yes + +checksums md5 1d00e2fb19418e486c30b850df625aa3 \ + sha1 dcf1abd94a1ab4155dcd3668cca42c5bfc81159f \ + rmd160 4754238d415142466778560d989582464385654c + +# patch-Lib-distutils-dist.py.diff comes from +# +patchfiles 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 + +depends_lib port:gettext port:zlib port:openssl port:tk \ + port:sqlite3 port:db46 port:bzip2 \ + port:gdbm port:readline port:ncurses + +configure.args --enable-shared \ + --enable-framework=${frameworks_dir} \ + --mandir=${prefix}/share/man \ + --enable-ipv6 \ + --with-cxx=${configure.cxx} + +configure.cppflags-append -I${prefix}/include/ncurses + +post-patch { + reinplace "s|__PREFIX__|${prefix}|g" ${worksrcpath}/Lib/cgi.py \ + ${worksrcpath}/setup.py + reinplace "s|/Applications/MacPython|${applications_dir}/MacPython|g" \ + ${worksrcpath}/Mac/Makefile.in \ + ${worksrcpath}/Mac/IDLE/Makefile.in \ + ${worksrcpath}/Mac/Tools/Doc/setup.py \ + ${worksrcpath}/Mac/PythonLauncher/Makefile.in \ + ${worksrcpath}/Mac/BuildScript/build-installer.py + reinplace "s|xargs -0 rm -r|xargs -0 rm -rf|g" \ + ${worksrcpath}/Mac/PythonLauncher/Makefile.in +} + +build.target all + +# TODO: From python24, do we still need this? +# Workaround for case-sensitive file systems +post-build { + if { ![file exists ${worksrcpath}/python.exe] } { + ln -s python ${worksrcpath}/python.exe + } +} + +test.run yes +test.target test + +destroot.target frameworkinstall maninstall + +# ensure that correct compiler is used +build.args-append MAKE="${build.cmd}" CC="${configure.cc}" +destroot.args-append MAKE="${destroot.cmd}" CC="${configure.cc}" + +select.group python +select.file ${filespath}/python[string map {. {}} ${branch}] + +platform macosx { +post-destroot { + + set framewpath ${frameworks_dir}/Python.framework + set framewdir ${framewpath}/Versions/${branch} + + # Without this, LINKFORSHARED is set to + # ... $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK) + # (this becomes Python.framework/Versions/2.5/Python) which doesn't + # quite work (see ticket #15099); instead specifically list the + # full path to the proper Python framework file (which becomes + # ${prefix}/Library/Frameworks/Python.framework/Versions/2.5/Python) + reinplace {s|^\(LINKFORSHARED=.*\)$(PYTHONFRAMEWORKDIR).*$|\1 $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)|} ${destroot}${framewdir}/lib/python${branch}/config/Makefile + + foreach dir { lib include } { + file rename ${destroot}${framewdir}/${dir}/python${branch} ${destroot}${prefix}/${dir} + ln -s ${prefix}/${dir}/python${branch} ${destroot}${framewdir}/${dir}/python${branch} + } + ln -s ${prefix}/share ${destroot}${framewdir}/share + + ln -s ${framewdir}/Python ${destroot}${prefix}/lib/libpython${branch}.dylib + + file rename ${destroot}${prefix}/share/man/man1/python.1 ${destroot}${prefix}/share/man/man1/python${branch}.1 + + # delete symlinks without version suffix, use python_select instead to choose version + foreach bin { python pythonw idle pydoc smtpd.py python-config } { + file delete ${destroot}${prefix}/bin/${bin} + } + foreach bin [list python${branch} pythonw${branch} idle${branch} pydoc${branch} smtpd${branch}.py python${branch}-config] { + file rename -force ${destroot}${framewdir}/bin/${bin} ${destroot}${prefix}/bin + ln -s ${prefix}/bin/${bin} ${destroot}${framewdir}/bin/${bin} + } + + foreach dir { Headers Resources Python Versions/Current } { + file delete ${destroot}${framewpath}/${dir} + } + + # Fix incorrectly-pointed libpython2.5.a symlink, see + # http://trac.macports.org/ticket/19906 + set python_staticlink ${destroot}${prefix}/lib/python${branch}/config/libpython${branch}.a + file delete ${python_staticlink} + ln -s ${framewdir}/Python ${python_staticlink} +} +} + +post-activate { + ui_msg "\nTo fully complete your installation and make python $branch the default, please run +\n\tsudo port install python_select \ +\n\tsudo python_select $name\n" +} + +platform darwin { + post-configure { + # See http://trac.macports.org/ticket/18376 + system "cd ${worksrcpath} && ed - pyconfig.h < ${filespath}/pyconfig.ed" + } +} + +platform darwin 8 { + patchfiles-append patch-FSIORefNum.diff +} + +platform darwin 9 { + configure.cppflags-append -D__DARWIN_UNIX03 +} + +platform darwin 10 { + configure.cppflags-append -D_DARWIN_C_SOURCE + patchfiles-append patch-pyconfig.h.in.diff +} + +platform puredarwin { + patchfiles-append patch-Modules-posixmodule.c.diff + configure.args-delete --enable-framework=${frameworks_dir} + configure.args-append --disable-toolbox-glue --disable-framework + destroot.target install maninstall + +post-build { + # thin dynamic library to have the same arch as static lib, even after -lSystemStubs + system "lipo ${worksrcpath}/libpython${branch}.dylib -output ${worksrcpath}/libpython${branch}.dylib -thin `lipo -info ${worksrcpath}/libpython${branch}.a | tail -n 1 | sed -e 's/.*architecture: \\(.*\\)/\\1/'`" +} + +post-destroot { + # delete symlinks without version suffix, use python_select instead to choose version + foreach bin { python pythonw idle pydoc smtpd.py python-config } { + file delete ${destroot}${prefix}/bin/${bin} + } + + file rename ${destroot}${prefix}/share/man/man1/python.1 ${destroot}${prefix}/share/man/man1/python${branch}.1 + + # install select file for python_select + xinstall -m 755 -d ${destroot}${prefix}/etc/select/python + xinstall -m 644 ${filespath}/python[string map {. {}} ${branch}] ${destroot}${prefix}/etc/select/python/ +} +} + +configure.universal_archs i386 ppc + +variant universal { + if {${configure.sdkroot} == ""} { + configure.args-append --enable-universalsdk=/ + } else { + configure.args-append --enable-universalsdk=${configure.sdkroot} + } +} + +livecheck.type regex +livecheck.url ${homepage}download/releases/ +livecheck.regex Python (${branch}.\[0-9\]+) diff --git a/pythonbrew/patches/macosx/python25/Portfile b/pythonbrew/patches/macosx/python25/Portfile new file mode 100644 index 0000000..efe12c5 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/Portfile @@ -0,0 +1,194 @@ +# $Id: Portfile 69520 2010-07-08 20:19:52Z jmr@macports.org $ + +PortSystem 1.0 +PortGroup select 1.0 + +name python25 +version 2.5.5 +revision 1 + +set branch [join [lrange [split ${version} .] 0 1] .] +categories lang +platforms darwin +maintainers jwa openmaintainer + +description An interpreted, object-oriented programming language +long_description Python is an interpreted, interactive, object-oriented \ + programming language. + +homepage http://www.python.org/ +master_sites http://ftp.python.org/ftp/python/${version}/ + +distname Python-${version} +use_bzip2 yes + +checksums md5 1d00e2fb19418e486c30b850df625aa3 \ + sha1 dcf1abd94a1ab4155dcd3668cca42c5bfc81159f \ + rmd160 4754238d415142466778560d989582464385654c + +# patch-Lib-distutils-dist.py.diff comes from +# +patchfiles 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 + +depends_lib port:gettext port:zlib port:openssl port:tk \ + port:sqlite3 port:db46 port:bzip2 \ + port:gdbm port:readline port:ncurses + +configure.args --enable-shared \ + --enable-framework=${frameworks_dir} \ + --mandir=${prefix}/share/man \ + --enable-ipv6 \ + --with-cxx=${configure.cxx} + +configure.cppflags-append -I${prefix}/include/ncurses + +post-patch { + reinplace "s|__PREFIX__|${prefix}|g" ${worksrcpath}/Lib/cgi.py \ + ${worksrcpath}/setup.py + reinplace "s|/Applications/MacPython|${applications_dir}/MacPython|g" \ + ${worksrcpath}/Mac/Makefile.in \ + ${worksrcpath}/Mac/IDLE/Makefile.in \ + ${worksrcpath}/Mac/Tools/Doc/setup.py \ + ${worksrcpath}/Mac/PythonLauncher/Makefile.in \ + ${worksrcpath}/Mac/BuildScript/build-installer.py + reinplace "s|xargs -0 rm -r|xargs -0 rm -rf|g" \ + ${worksrcpath}/Mac/PythonLauncher/Makefile.in +} + +build.target all + +# TODO: From python24, do we still need this? +# Workaround for case-sensitive file systems +post-build { + if { ![file exists ${worksrcpath}/python.exe] } { + ln -s python ${worksrcpath}/python.exe + } +} + +test.run yes +test.target test + +destroot.target frameworkinstall maninstall + +# ensure that correct compiler is used +build.args-append MAKE="${build.cmd}" CC="${configure.cc}" +destroot.args-append MAKE="${destroot.cmd}" CC="${configure.cc}" + +select.group python +select.file ${filespath}/python[string map {. {}} ${branch}] + +platform macosx { +post-destroot { + + set framewpath ${frameworks_dir}/Python.framework + set framewdir ${framewpath}/Versions/${branch} + + # Without this, LINKFORSHARED is set to + # ... $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK) + # (this becomes Python.framework/Versions/2.5/Python) which doesn't + # quite work (see ticket #15099); instead specifically list the + # full path to the proper Python framework file (which becomes + # ${prefix}/Library/Frameworks/Python.framework/Versions/2.5/Python) + reinplace {s|^\(LINKFORSHARED=.*\)$(PYTHONFRAMEWORKDIR).*$|\1 $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)|} ${destroot}${framewdir}/lib/python${branch}/config/Makefile + + foreach dir { lib include } { + file rename ${destroot}${framewdir}/${dir}/python${branch} ${destroot}${prefix}/${dir} + ln -s ${prefix}/${dir}/python${branch} ${destroot}${framewdir}/${dir}/python${branch} + } + ln -s ${prefix}/share ${destroot}${framewdir}/share + + ln -s ${framewdir}/Python ${destroot}${prefix}/lib/libpython${branch}.dylib + + file rename ${destroot}${prefix}/share/man/man1/python.1 ${destroot}${prefix}/share/man/man1/python${branch}.1 + + # delete symlinks without version suffix, use python_select instead to choose version + foreach bin { python pythonw idle pydoc smtpd.py python-config } { + file delete ${destroot}${prefix}/bin/${bin} + } + foreach bin [list python${branch} pythonw${branch} idle${branch} pydoc${branch} smtpd${branch}.py python${branch}-config] { + file rename -force ${destroot}${framewdir}/bin/${bin} ${destroot}${prefix}/bin + ln -s ${prefix}/bin/${bin} ${destroot}${framewdir}/bin/${bin} + } + + foreach dir { Headers Resources Python Versions/Current } { + file delete ${destroot}${framewpath}/${dir} + } + + # Fix incorrectly-pointed libpython2.5.a symlink, see + # http://trac.macports.org/ticket/19906 + set python_staticlink ${destroot}${prefix}/lib/python${branch}/config/libpython${branch}.a + file delete ${python_staticlink} + ln -s ${framewdir}/Python ${python_staticlink} +} +} + +post-activate { + ui_msg "\nTo fully complete your installation and make python $branch the default, please run +\n\tsudo port install python_select \ +\n\tsudo python_select $name\n" +} + +platform darwin { + post-configure { + # See http://trac.macports.org/ticket/18376 + system "cd ${worksrcpath} && ed - pyconfig.h < ${filespath}/pyconfig.ed" + } +} + +platform darwin 8 { + patchfiles-append patch-FSIORefNum.diff +} + +platform darwin 9 { + configure.cppflags-append -D__DARWIN_UNIX03 +} + +platform darwin 10 { + configure.cppflags-append -D_DARWIN_C_SOURCE + patchfiles-append patch-pyconfig.h.in.diff +} + +platform puredarwin { + patchfiles-append patch-Modules-posixmodule.c.diff + configure.args-delete --enable-framework=${frameworks_dir} + configure.args-append --disable-toolbox-glue --disable-framework + destroot.target install maninstall + +post-build { + # thin dynamic library to have the same arch as static lib, even after -lSystemStubs + system "lipo ${worksrcpath}/libpython${branch}.dylib -output ${worksrcpath}/libpython${branch}.dylib -thin `lipo -info ${worksrcpath}/libpython${branch}.a | tail -n 1 | sed -e 's/.*architecture: \\(.*\\)/\\1/'`" +} + +post-destroot { + # delete symlinks without version suffix, use python_select instead to choose version + foreach bin { python pythonw idle pydoc smtpd.py python-config } { + file delete ${destroot}${prefix}/bin/${bin} + } + + file rename ${destroot}${prefix}/share/man/man1/python.1 ${destroot}${prefix}/share/man/man1/python${branch}.1 + + # install select file for python_select + xinstall -m 755 -d ${destroot}${prefix}/etc/select/python + xinstall -m 644 ${filespath}/python[string map {. {}} ${branch}] ${destroot}${prefix}/etc/select/python/ +} +} + +configure.universal_archs i386 ppc + +variant universal { + if {${configure.sdkroot} == ""} { + configure.args-append --enable-universalsdk=/ + } else { + configure.args-append --enable-universalsdk=${configure.sdkroot} + } +} + +livecheck.type regex +livecheck.url ${homepage}download/releases/ +livecheck.regex Python (${branch}.\[0-9\]+) diff --git a/pythonbrew/patches/macosx/python25/files/.svn/all-wcprops b/pythonbrew/patches/macosx/python25/files/.svn/all-wcprops new file mode 100644 index 0000000..febf4a9 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/all-wcprops @@ -0,0 +1,89 @@ +K 25 +svn:wc:ra_dav:version-url +V 68 +/repository/macports/!svn/ver/60380/trunk/dports/lang/python25/files +END +patch-Misc-setuid-prog.c.diff +K 25 +svn:wc:ra_dav:version-url +V 98 +/repository/macports/!svn/ver/34379/trunk/dports/lang/python25/files/patch-Misc-setuid-prog.c.diff +END +patch-FSIORefNum.diff +K 25 +svn:wc:ra_dav:version-url +V 90 +/repository/macports/!svn/ver/57516/trunk/dports/lang/python25/files/patch-FSIORefNum.diff +END +patch-Lib-cgi.py.diff +K 25 +svn:wc:ra_dav:version-url +V 90 +/repository/macports/!svn/ver/34379/trunk/dports/lang/python25/files/patch-Lib-cgi.py.diff +END +patch-configure-arch_only.diff +K 25 +svn:wc:ra_dav:version-url +V 99 +/repository/macports/!svn/ver/52864/trunk/dports/lang/python25/files/patch-configure-arch_only.diff +END +patch-Modules-posixmodule.c.diff +K 25 +svn:wc:ra_dav:version-url +V 101 +/repository/macports/!svn/ver/34379/trunk/dports/lang/python25/files/patch-Modules-posixmodule.c.diff +END +patch-Lib-distutils-dist.py.diff +K 25 +svn:wc:ra_dav:version-url +V 101 +/repository/macports/!svn/ver/42997/trunk/dports/lang/python25/files/patch-Lib-distutils-dist.py.diff +END +patch-configure.diff +K 25 +svn:wc:ra_dav:version-url +V 89 +/repository/macports/!svn/ver/34379/trunk/dports/lang/python25/files/patch-configure.diff +END +pyconfig.ed +K 25 +svn:wc:ra_dav:version-url +V 80 +/repository/macports/!svn/ver/60380/trunk/dports/lang/python25/files/pyconfig.ed +END +python25 +K 25 +svn:wc:ra_dav:version-url +V 77 +/repository/macports/!svn/ver/50424/trunk/dports/lang/python25/files/python25 +END +patch-configure-badcflags.diff +K 25 +svn:wc:ra_dav:version-url +V 99 +/repository/macports/!svn/ver/40837/trunk/dports/lang/python25/files/patch-configure-badcflags.diff +END +patch-Makefile.pre.in.diff +K 25 +svn:wc:ra_dav:version-url +V 95 +/repository/macports/!svn/ver/43000/trunk/dports/lang/python25/files/patch-Makefile.pre.in.diff +END +patch-setup.py.diff +K 25 +svn:wc:ra_dav:version-url +V 88 +/repository/macports/!svn/ver/57388/trunk/dports/lang/python25/files/patch-setup.py.diff +END +patch-64bit.diff +K 25 +svn:wc:ra_dav:version-url +V 85 +/repository/macports/!svn/ver/57388/trunk/dports/lang/python25/files/patch-64bit.diff +END +patch-pyconfig.h.in.diff +K 25 +svn:wc:ra_dav:version-url +V 93 +/repository/macports/!svn/ver/55669/trunk/dports/lang/python25/files/patch-pyconfig.h.in.diff +END diff --git a/pythonbrew/patches/macosx/python25/files/.svn/entries b/pythonbrew/patches/macosx/python25/files/.svn/entries new file mode 100644 index 0000000..423af6b --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/entries @@ -0,0 +1,504 @@ +10 + +dir +73426 +http://svn.macports.org/repository/macports/trunk/dports/lang/python25/files +http://svn.macports.org/repository/macports + + + +2009-11-10T14:40:06.347802Z +60380 +jmr@macports.org + + + + + + + + + + + + + + +d073be05-634f-4543-b044-5fe20cf6d1d6 + +patch-Misc-setuid-prog.c.diff +file + + + + +2010-11-13T11:26:29.000000Z +2bc1e6606dde7390fd8240b131bdf4ec +2008-02-22T23:26:05.539782Z +34379 +mww@macports.org + + + + + + + + + + + + + + + + + + + + + +410 + +patch-FSIORefNum.diff +file + + + + +2010-11-13T11:26:29.000000Z +8084ec041a99e7cb661772f009df15a7 +2009-09-12T06:14:57.000179Z +57516 +jmr@macports.org + + + + + + + + + + + + + + + + + + + + + +399 + +patch-Lib-cgi.py.diff +file + + + + +2010-11-13T11:26:29.000000Z +82a8c9d18f4280a8bbb8a6cbf5868a8a +2008-02-22T23:26:05.539782Z +34379 +mww@macports.org + + + + + + + + + + + + + + + + + + + + + +808 + +patch-configure-arch_only.diff +file + + + + +2010-11-13T11:26:29.000000Z +14c3bb850c180ab737a46d59bc82d6a0 +2009-06-24T22:01:14.810769Z +52864 +landonf@macports.org + + + + + + + + + + + + + + + + + + + + + +941 + +patch-Modules-posixmodule.c.diff +file + + + + +2010-11-13T11:26:29.000000Z +10bf449d661c9721211c94b5c3acd7fb +2008-02-22T23:26:05.539782Z +34379 +mww@macports.org + + + + + + + + + + + + + + + + + + + + + +571 + +patch-Lib-distutils-dist.py.diff +file + + + + +2010-11-13T11:26:29.000000Z +92eea653ba7debcbfd848b3e95fa664e +2008-12-03T05:16:31.085444Z +42997 +blb@macports.org + + + + + + + + + + + + + + + + + + + + + +2050 + +patch-configure.diff +file + + + + +2010-11-13T11:26:29.000000Z +758a0b524c7089e1367b9304628b7f33 +2008-02-22T23:26:05.539782Z +34379 +mww@macports.org + + + + + + + + + + + + + + + + + + + + + +956 + +pyconfig.ed +file + + + + +2010-11-13T11:26:29.000000Z +674a4842ff1491cf7669c37d9b0b95bc +2009-11-10T14:40:06.347802Z +60380 +jmr@macports.org + + + + + + + + + + + + + + + + + + + + + +49 + +python25 +file + + + + +2010-11-13T11:26:29.000000Z +00706fcdb40c3ab1242bd33ffcaecf00 +2009-04-30T21:04:30.747761Z +50424 +jmr@macports.org + + + + + + + + + + + + + + + + + + + + + +340 + +patch-configure-badcflags.diff +file + + + + +2010-11-13T11:26:29.000000Z +0270e74fe78847844dbd13831777d22c +2008-10-16T01:47:43.712585Z +40837 +toby@macports.org + + + + + + + + + + + + + + + + + + + + + +460 + +patch-Makefile.pre.in.diff +file + + + + +2010-11-13T11:26:29.000000Z +715099f836a2265992b3b1842f05d2a2 +2008-12-03T06:04:11.934031Z +43000 +blb@macports.org + + + + + + + + + + + + + + + + + + + + + +1449 + +patch-setup.py.diff +file + + + + +2010-11-13T11:26:29.000000Z +36831c5d2729aee54fe424ba32776ace +2009-09-10T13:23:37.201201Z +57388 +jmr@macports.org + + + + + + + + + + + + + + + + + + + + + +3814 + +patch-64bit.diff +file + + + + +2010-11-13T11:26:29.000000Z +5f7cfee7ab539a15e7997224f51e8b97 +2009-09-10T13:23:37.201201Z +57388 +jmr@macports.org + + + + + + + + + + + + + + + + + + + + + +37004 + +patch-pyconfig.h.in.diff +file + + + + +2010-11-13T11:26:29.000000Z +df5999ec974fbe1a2716a63c882b4639 +2009-08-16T18:17:13.357907Z +55669 +landonf@macports.org + + + + + + + + + + + + + + + + + + + + + +396 + diff --git a/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-64bit.diff.svn-base b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-64bit.diff.svn-base new file mode 100644 index 0000000..100617d --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-64bit.diff.svn-base @@ -0,0 +1,1234 @@ +--- Include/pymactoolbox.h.orig 2004-11-05 18:02:59.000000000 +1100 ++++ Include/pymactoolbox.h 2009-09-10 18:08:58.000000000 +1000 +@@ -8,7 +8,9 @@ + #endif + + #include ++#ifndef __LP64__ + #include ++#endif /* !__LP64__ */ + + /* + ** Helper routines for error codes and such. +@@ -18,8 +20,10 @@ + PyObject *PyMac_GetOSErrException(void); /* Initialize & return it */ + PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */ + PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */ ++#ifndef __LP64__ + extern OSErr PyMac_GetFullPathname(FSSpec *, char *, int); /* convert + fsspec->path */ ++#endif /* !__LP64__ */ + /* + ** These conversion routines are defined in mactoolboxglue.c itself. + */ +@@ -83,9 +87,10 @@ + #endif /* USE_TOOLBOX_OBJECT_GLUE */ + + /* macfs exports */ ++#ifndef __LP64__ + int PyMac_GetFSSpec(PyObject *, FSSpec *); /* argument parser for FSSpec */ + PyObject *PyMac_BuildFSSpec(FSSpec *); /* Convert FSSpec to PyObject */ +- ++#endif /* !__LP64__ */ + int PyMac_GetFSRef(PyObject *, FSRef *); /* argument parser for FSRef */ + PyObject *PyMac_BuildFSRef(FSRef *); /* Convert FSRef to PyObject */ + +@@ -101,39 +106,54 @@ + extern int CmpInstObj_Convert(PyObject *, ComponentInstance *); + + /* Ctl exports */ ++#ifndef __LP64__ + extern PyObject *CtlObj_New(ControlHandle); + extern int CtlObj_Convert(PyObject *, ControlHandle *); ++#endif /* !__LP64__ */ + + /* Dlg exports */ ++#ifndef __LP64__ + extern PyObject *DlgObj_New(DialogPtr); + extern int DlgObj_Convert(PyObject *, DialogPtr *); + extern PyObject *DlgObj_WhichDialog(DialogPtr); ++#endif /* !__LP64__ */ + + /* Drag exports */ ++#ifndef __LP64__ + extern PyObject *DragObj_New(DragReference); + extern int DragObj_Convert(PyObject *, DragReference *); ++#endif /* !__LP64__ */ + + /* List exports */ ++#ifndef __LP64__ + extern PyObject *ListObj_New(ListHandle); + extern int ListObj_Convert(PyObject *, ListHandle *); ++#endif /* !__LP64__ */ + + /* Menu exports */ ++#ifndef __LP64__ + extern PyObject *MenuObj_New(MenuHandle); + extern int MenuObj_Convert(PyObject *, MenuHandle *); ++#endif /* !__LP64__ */ + + /* Qd exports */ ++#ifndef __LP64__ + extern PyObject *GrafObj_New(GrafPtr); + extern int GrafObj_Convert(PyObject *, GrafPtr *); + extern PyObject *BMObj_New(BitMapPtr); + extern int BMObj_Convert(PyObject *, BitMapPtr *); + extern PyObject *QdRGB_New(RGBColor *); + extern int QdRGB_Convert(PyObject *, RGBColor *); ++#endif /* !__LP64__ */ + + /* Qdoffs exports */ ++#ifndef __LP64__ + extern PyObject *GWorldObj_New(GWorldPtr); + extern int GWorldObj_Convert(PyObject *, GWorldPtr *); ++#endif /* !__LP64__ */ + + /* Qt exports */ ++#ifndef __LP64__ + extern PyObject *TrackObj_New(Track); + extern int TrackObj_Convert(PyObject *, Track *); + extern PyObject *MovieObj_New(Movie); +@@ -146,6 +166,7 @@ + extern int UserDataObj_Convert(PyObject *, UserData *); + extern PyObject *MediaObj_New(Media); + extern int MediaObj_Convert(PyObject *, Media *); ++#endif /* !__LP64__ */ + + /* Res exports */ + extern PyObject *ResObj_New(Handle); +@@ -154,13 +175,17 @@ + extern int OptResObj_Convert(PyObject *, Handle *); + + /* TE exports */ ++#ifndef __LP64__ + extern PyObject *TEObj_New(TEHandle); + extern int TEObj_Convert(PyObject *, TEHandle *); ++#endif /* !__LP64__ */ + + /* Win exports */ ++#ifndef __LP64__ + extern PyObject *WinObj_New(WindowPtr); + extern int WinObj_Convert(PyObject *, WindowPtr *); + extern PyObject *WinObj_WhichWindow(WindowPtr); ++#endif /* !__LP64__ */ + + /* CF exports */ + extern PyObject *CFObj_New(CFTypeRef); +--- Python/mactoolboxglue.c.orig 2006-07-12 02:44:25.000000000 +1000 ++++ Python/mactoolboxglue.c 2009-09-10 19:26:39.000000000 +1000 +@@ -105,7 +105,7 @@ + return PyErr_Mac(PyMac_GetOSErrException(), err); + } + +- ++#ifndef __LP64__ + OSErr + PyMac_GetFullPathname(FSSpec *fss, char *path, int len) + { +@@ -153,6 +153,7 @@ + Py_XDECREF(fs); + return err; + } ++#endif /* !__LP64__ */ + + /* Convert a 4-char string object argument to an OSType value */ + int +@@ -417,6 +418,7 @@ + GLUE_NEW(GWorldPtr, GWorldObj_New, "Carbon.Qdoffs") + GLUE_CONVERT(GWorldPtr, GWorldObj_Convert, "Carbon.Qdoffs") + ++#ifndef __LP64__ + GLUE_NEW(Track, TrackObj_New, "Carbon.Qt") + GLUE_CONVERT(Track, TrackObj_Convert, "Carbon.Qt") + GLUE_NEW(Movie, MovieObj_New, "Carbon.Qt") +@@ -429,6 +431,7 @@ + GLUE_CONVERT(UserData, UserDataObj_Convert, "Carbon.Qt") + GLUE_NEW(Media, MediaObj_New, "Carbon.Qt") + GLUE_CONVERT(Media, MediaObj_Convert, "Carbon.Qt") ++#endif /* !__LP64__ */ + + GLUE_NEW(Handle, ResObj_New, "Carbon.Res") + GLUE_CONVERT(Handle, ResObj_Convert, "Carbon.Res") +--- Modules/_ctypes/libffi/src/darwin/ffitarget.h.orig 2006-05-26 07:58:05.000000000 +1000 ++++ Modules/_ctypes/libffi/src/darwin/ffitarget.h 2009-09-10 20:15:39.000000000 +1000 +@@ -4,7 +4,7 @@ + * created by configure). This makes is possible to build a univeral binary + * of ctypes in one go. + */ +-#if defined(__i386__) ++#if defined(__i386__) || defined(__x86_64__) + + #ifndef X86_DARWIN + #define X86_DARWIN +@@ -13,7 +13,7 @@ + + #include "../src/x86/ffitarget.h" + +-#elif defined(__ppc__) ++#elif defined(__ppc__) || defined(__ppc64__) + + #ifndef POWERPC_DARWIN + #define POWERPC_DARWIN +--- Mac/Modules/res/_Resmodule.c.orig 2005-07-04 06:59:44.000000000 +1000 ++++ Mac/Modules/res/_Resmodule.c 2009-09-10 20:44:43.000000000 +1000 +@@ -414,6 +414,7 @@ + return _res; + } + ++#ifndef __LP64__ + static PyObject *ResObj_as_Control(ResourceObject *_self, PyObject *_args) + { + PyObject *_res = NULL; +@@ -431,6 +432,7 @@ + return _res; + + } ++#endif /* !__LP64__ */ + + static PyObject *ResObj_LoadResource(ResourceObject *_self, PyObject *_args) + { +@@ -501,10 +503,12 @@ + PyDoc_STR("(long newSize) -> None")}, + {"GetNextFOND", (PyCFunction)ResObj_GetNextFOND, 1, + PyDoc_STR("() -> (Handle _rv)")}, ++#ifndef __LP64__ + {"as_Control", (PyCFunction)ResObj_as_Control, 1, + PyDoc_STR("Return this resource/handle as a Control")}, + {"as_Menu", (PyCFunction)ResObj_as_Menu, 1, + PyDoc_STR("Return this resource/handle as a Menu")}, ++#endif /* !__LP64__ */ + {"LoadResource", (PyCFunction)ResObj_LoadResource, 1, + PyDoc_STR("() -> None")}, + {"AutoDispose", (PyCFunction)ResObj_AutoDispose, 1, +@@ -1152,6 +1156,7 @@ + return _res; + } + ++#ifndef __LP64__ + static PyObject *Res_OpenRFPerm(PyObject *_self, PyObject *_args) + { + PyObject *_res = NULL; +@@ -1287,6 +1292,7 @@ + _res = Py_None; + return _res; + } ++#endif /* !__LP64__ */ + + static PyObject *Res_InsertResourceFile(PyObject *_self, PyObject *_args) + { +@@ -1327,6 +1333,7 @@ + return _res; + } + ++#ifndef __LP64__ + static PyObject *Res_FSpResourceFileAlreadyOpen(PyObject *_self, PyObject *_args) + { + PyObject *_res = NULL; +@@ -1413,6 +1420,7 @@ + nextRefNum); + return _res; + } ++#endif /* !__LP64__ */ + + static PyObject *Res_FSOpenResFile(PyObject *_self, PyObject *_args) + { +@@ -1438,6 +1446,7 @@ + return _res; + } + ++#ifndef __LP64__ + static PyObject *Res_FSCreateResFile(PyObject *_self, PyObject *_args) + { + PyObject *_res = NULL; +@@ -1534,6 +1543,7 @@ + PyMac_BuildFSSpec, &newSpec); + return _res; + } ++#endif /* !__LP64__ */ + + static PyObject *Res_FSOpenResourceFile(PyObject *_self, PyObject *_args) + { +@@ -1637,6 +1647,7 @@ + PyDoc_STR("(short refNum) -> (short _rv)")}, + {"SetResFileAttrs", (PyCFunction)Res_SetResFileAttrs, 1, + PyDoc_STR("(short refNum, short attrs) -> None")}, ++#ifndef __LP64__ + {"OpenRFPerm", (PyCFunction)Res_OpenRFPerm, 1, + PyDoc_STR("(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)")}, + {"HOpenResFile", (PyCFunction)Res_HOpenResFile, 1, +@@ -1647,10 +1658,12 @@ + PyDoc_STR("(FSSpec spec, SignedByte permission) -> (short _rv)")}, + {"FSpCreateResFile", (PyCFunction)Res_FSpCreateResFile, 1, + PyDoc_STR("(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None")}, ++#endif /* !__LP64__ */ + {"InsertResourceFile", (PyCFunction)Res_InsertResourceFile, 1, + PyDoc_STR("(SInt16 refNum, RsrcChainLocation where) -> None")}, + {"DetachResourceFile", (PyCFunction)Res_DetachResourceFile, 1, + PyDoc_STR("(SInt16 refNum) -> None")}, ++#ifndef __LP64__ + {"FSpResourceFileAlreadyOpen", (PyCFunction)Res_FSpResourceFileAlreadyOpen, 1, + PyDoc_STR("(FSSpec resourceFile) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, + {"FSpOpenOrphanResFile", (PyCFunction)Res_FSpOpenOrphanResFile, 1, +@@ -1659,14 +1672,17 @@ + PyDoc_STR("() -> (SInt16 refNum)")}, + {"GetNextResourceFile", (PyCFunction)Res_GetNextResourceFile, 1, + PyDoc_STR("(SInt16 curRefNum) -> (SInt16 nextRefNum)")}, ++#endif /* !__LP64__ */ + {"FSOpenResFile", (PyCFunction)Res_FSOpenResFile, 1, + PyDoc_STR("(FSRef ref, SignedByte permission) -> (short _rv)")}, ++#ifndef __LP64__ + {"FSCreateResFile", (PyCFunction)Res_FSCreateResFile, 1, + PyDoc_STR("(FSRef parentRef, Buffer nameLength) -> (FSRef newRef, FSSpec newSpec)")}, + {"FSResourceFileAlreadyOpen", (PyCFunction)Res_FSResourceFileAlreadyOpen, 1, + PyDoc_STR("(FSRef resourceFileRef) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, + {"FSCreateResourceFile", (PyCFunction)Res_FSCreateResourceFile, 1, + PyDoc_STR("(FSRef parentRef, Buffer nameLength, Buffer forkNameLength) -> (FSRef newRef, FSSpec newSpec)")}, ++#endif /* !__LP64__ */ + {"FSOpenResourceFile", (PyCFunction)Res_FSOpenResourceFile, 1, + PyDoc_STR("(FSRef ref, Buffer forkNameLength, SignedByte permissions) -> (SInt16 refNum)")}, + {"Handle", (PyCFunction)Res_Handle, 1, +--- Mac/Modules/MacOS.c.orig 2006-07-26 05:20:54.000000000 +1000 ++++ Mac/Modules/MacOS.c 2009-09-10 21:47:34.000000000 +1000 +@@ -54,7 +54,7 @@ + do_close(rfobject *self) + { + if (self->isclosed ) return; +- (void)FSClose(self->fRefNum); ++ (void)FSCloseFork(self->fRefNum); + self->isclosed = 1; + } + +@@ -68,6 +68,7 @@ + long n; + PyObject *v; + OSErr err; ++ ByteCount n2; + + if (self->isclosed) { + PyErr_SetString(PyExc_ValueError, "Operation on closed file"); +@@ -81,13 +82,13 @@ + if (v == NULL) + return NULL; + +- err = FSRead(self->fRefNum, &n, PyString_AsString(v)); ++ err = FSReadFork(self->fRefNum, fsAtMark, 0, n, PyString_AsString(v), &n2); + if (err && err != eofErr) { + PyMac_Error(err); + Py_DECREF(v); + return NULL; + } +- _PyString_Resize(&v, n); ++ _PyString_Resize(&v, n2); + return v; + } + +@@ -109,7 +110,7 @@ + } + if (!PyArg_ParseTuple(args, "s#", &buffer, &size)) + return NULL; +- err = FSWrite(self->fRefNum, &size, buffer); ++ err = FSWriteFork(self->fRefNum, fsAtMark, 0, size, buffer, NULL); + if (err) { + PyMac_Error(err); + return NULL; +@@ -126,9 +127,9 @@ + static PyObject * + rf_seek(rfobject *self, PyObject *args) + { +- long amount, pos; ++ long amount; + int whence = SEEK_SET; +- long eof; ++ int mode; + OSErr err; + + if (self->isclosed) { +@@ -138,35 +139,23 @@ + if (!PyArg_ParseTuple(args, "l|i", &amount, &whence)) + return NULL; + +- if ((err = GetEOF(self->fRefNum, &eof))) +- goto ioerr; +- + switch (whence) { + case SEEK_CUR: +- if ((err = GetFPos(self->fRefNum, &pos))) +- goto ioerr; ++ mode = fsFromMark; + break; + case SEEK_END: +- pos = eof; ++ mode = fsFromLEOF; + break; + case SEEK_SET: +- pos = 0; ++ mode = fsFromStart; + break; + default: + PyErr_BadArgument(); + return NULL; + } + +- pos += amount; +- +- /* Don't bother implementing seek past EOF */ +- if (pos > eof || pos < 0) { +- PyErr_BadArgument(); +- return NULL; +- } +- +- if ((err = SetFPos(self->fRefNum, fsFromStart, pos)) ) { +-ioerr: ++ err = FSSetForkPosition(self->fRefNum, mode, amount); ++ if (err != noErr) { + PyMac_Error(err); + return NULL; + } +@@ -182,7 +171,7 @@ + static PyObject * + rf_tell(rfobject *self, PyObject *args) + { +- long where; ++ long long where; + OSErr err; + + if (self->isclosed) { +@@ -191,11 +180,13 @@ + } + if (!PyArg_ParseTuple(args, "")) + return NULL; +- if ((err = GetFPos(self->fRefNum, &where)) ) { ++ ++ err = FSGetForkPosition(self->fRefNum, &where); ++ if (err != noErr) { + PyMac_Error(err); + return NULL; + } +- return PyInt_FromLong(where); ++ return PyLong_FromLongLong(where); + } + + static char rf_close__doc__[] = +@@ -292,17 +283,61 @@ + static PyObject * + MacOS_GetCreatorAndType(PyObject *self, PyObject *args) + { +- FSSpec fss; +- FInfo info; + PyObject *creator, *type, *res; + OSErr err; +- +- if (!PyArg_ParseTuple(args, "O&", PyMac_GetFSSpec, &fss)) ++ FSRef ref; ++ FSCatalogInfo cataloginfo; ++ FileInfo* finfo; ++ ++ if (!PyArg_ParseTuple(args, "O&", PyMac_GetFSRef, &ref)) { ++#ifndef __LP64__ ++ /* This function is documented to take an FSSpec as well, ++ * which only works in 32-bit mode. ++ */ ++ PyErr_Clear(); ++ FSSpec fss; ++ FInfo info; ++ ++ if (!PyArg_ParseTuple(args, "O&", PyMac_GetFSSpec, &fss)) ++ return NULL; ++ ++ if ((err = FSpGetFInfo(&fss, &info)) != noErr) { ++ return PyErr_Mac(MacOS_Error, err); ++ } ++ creator = PyString_FromStringAndSize( ++ (char *)&info.fdCreator, 4); ++ type = PyString_FromStringAndSize((char *)&info.fdType, 4); ++ res = Py_BuildValue("OO", creator, type); ++ Py_DECREF(creator); ++ Py_DECREF(type); ++ return res; ++#else /* __LP64__ */ ++ return NULL; ++#endif /* __LP64__ */ ++ } ++ ++ err = FSGetCatalogInfo(&ref, ++ kFSCatInfoFinderInfo|kFSCatInfoNodeFlags, &cataloginfo, ++ NULL, NULL, NULL); ++ if (err != noErr) { ++ PyErr_Mac(MacOS_Error, err); + return NULL; +- if ((err = FSpGetFInfo(&fss, &info)) != noErr) +- return PyErr_Mac(MacOS_Error, err); +- creator = PyString_FromStringAndSize((char *)&info.fdCreator, 4); +- type = PyString_FromStringAndSize((char *)&info.fdType, 4); ++ } ++ ++ if ((cataloginfo.nodeFlags & kFSNodeIsDirectoryMask) != 0) { ++ /* Directory: doesn't have type/creator info. ++ * ++ * The specific error code is for backward compatibility with ++ * earlier versions. ++ */ ++ PyErr_Mac(MacOS_Error, fnfErr); ++ return NULL; ++ ++ } ++ finfo = (FileInfo*)&(cataloginfo.finderInfo); ++ creator = PyString_FromStringAndSize((char*)&(finfo->fileCreator), 4); ++ type = PyString_FromStringAndSize((char*)&(finfo->fileType), 4); ++ + res = Py_BuildValue("OO", creator, type); + Py_DECREF(creator); + Py_DECREF(type); +@@ -314,20 +349,66 @@ + static PyObject * + MacOS_SetCreatorAndType(PyObject *self, PyObject *args) + { +- FSSpec fss; + ResType creator, type; +- FInfo info; ++ FSRef ref; ++ FileInfo* finfo; + OSErr err; +- ++ FSCatalogInfo cataloginfo; ++ + if (!PyArg_ParseTuple(args, "O&O&O&", ++ PyMac_GetFSRef, &ref, PyMac_GetOSType, &creator, PyMac_GetOSType, &type)) { ++#ifndef __LP64__ ++ /* Try to handle FSSpec arguments, for backward compatibility */ ++ FSSpec fss; ++ FInfo info; ++ ++ if (!PyArg_ParseTuple(args, "O&O&O&", + PyMac_GetFSSpec, &fss, PyMac_GetOSType, &creator, PyMac_GetOSType, &type)) ++ return NULL; ++ ++ if ((err = FSpGetFInfo(&fss, &info)) != noErr) ++ return PyErr_Mac(MacOS_Error, err); ++ ++ info.fdCreator = creator; ++ info.fdType = type; ++ ++ if ((err = FSpSetFInfo(&fss, &info)) != noErr) ++ return PyErr_Mac(MacOS_Error, err); ++ Py_INCREF(Py_None); ++ return Py_None; ++#else /* __LP64__ */ ++ return NULL; ++#endif /* __LP64__ */ ++ } ++ ++ err = FSGetCatalogInfo(&ref, ++ kFSCatInfoFinderInfo|kFSCatInfoNodeFlags, &cataloginfo, ++ NULL, NULL, NULL); ++ if (err != noErr) { ++ PyErr_Mac(MacOS_Error, err); + return NULL; +- if ((err = FSpGetFInfo(&fss, &info)) != noErr) +- return PyErr_Mac(MacOS_Error, err); +- info.fdCreator = creator; +- info.fdType = type; +- if ((err = FSpSetFInfo(&fss, &info)) != noErr) +- return PyErr_Mac(MacOS_Error, err); ++ } ++ ++ if ((cataloginfo.nodeFlags & kFSNodeIsDirectoryMask) != 0) { ++ /* Directory: doesn't have type/creator info. ++ * ++ * The specific error code is for backward compatibility with ++ * earlier versions. ++ */ ++ PyErr_Mac(MacOS_Error, fnfErr); ++ return NULL; ++ ++ } ++ finfo = (FileInfo*)&(cataloginfo.finderInfo); ++ finfo->fileCreator = creator; ++ finfo->fileType = type; ++ ++ err = FSSetCatalogInfo(&ref, kFSCatInfoFinderInfo, &cataloginfo); ++ if (err != noErr) { ++ PyErr_Mac(MacOS_Error, fnfErr); ++ return NULL; ++ } ++ + Py_INCREF(Py_None); + return Py_None; + } +@@ -399,6 +480,7 @@ + return Py_BuildValue("s", buf); + } + ++#ifndef __LP64__ + static char splash_doc[] = "Open a splash-screen dialog by resource-id (0=close)"; + + static PyObject * +@@ -470,6 +552,7 @@ + Py_INCREF(Py_None); + return Py_None; + } ++#endif /* !__LP64__ */ + + static char WMAvailable_doc[] = + "True if this process can interact with the display." +@@ -530,17 +613,18 @@ + { + OSErr err; + char *mode = "r"; +- FSSpec fss; +- SignedByte permission = 1; ++ FSRef ref; ++ SInt8 permission = fsRdPerm; + rfobject *fp; ++ HFSUniStr255 name; + +- if (!PyArg_ParseTuple(args, "O&|s", PyMac_GetFSSpec, &fss, &mode)) ++ if (!PyArg_ParseTuple(args, "O&|s", PyMac_GetFSRef, &ref, &mode)) + return NULL; + while (*mode) { + switch (*mode++) { + case '*': break; +- case 'r': permission = 1; break; +- case 'w': permission = 2; break; ++ case 'r': permission = fsRdPerm; break; ++ case 'w': permission = fsWrPerm; break; + case 'b': break; + default: + PyErr_BadArgument(); +@@ -548,33 +632,18 @@ + } + } + +- if ( (fp = newrfobject()) == NULL ) ++ err = FSGetResourceForkName(&name); ++ if (err != noErr) { ++ PyMac_Error(err); + return NULL; ++ } + +- err = HOpenRF(fss.vRefNum, fss.parID, fss.name, permission, &fp->fRefNum); ++ if ( (fp = newrfobject()) == NULL ) ++ return NULL; ++ + +- if ( err == fnfErr ) { +- /* In stead of doing complicated things here to get creator/type +- ** correct we let the standard i/o library handle it +- */ +- FILE *tfp; +- char pathname[PATHNAMELEN]; +- +- if ( (err=PyMac_GetFullPathname(&fss, pathname, PATHNAMELEN)) ) { +- PyMac_Error(err); +- Py_DECREF(fp); +- return NULL; +- } +- +- if ( (tfp = fopen(pathname, "w")) == NULL ) { +- PyMac_Error(fnfErr); /* What else... */ +- Py_DECREF(fp); +- return NULL; +- } +- fclose(tfp); +- err = HOpenRF(fss.vRefNum, fss.parID, fss.name, permission, &fp->fRefNum); +- } +- if ( err ) { ++ err = FSOpenFork(&ref, name.length, name.unicode, permission, &fp->fRefNum); ++ if (err != noErr) { + Py_DECREF(fp); + PyMac_Error(err); + return NULL; +@@ -589,10 +658,12 @@ + {"SetCreatorAndType", MacOS_SetCreatorAndType, 1, setcrtp_doc}, + {"GetErrorString", MacOS_GetErrorString, 1, geterr_doc}, + {"openrf", MacOS_openrf, 1, openrf_doc}, ++#ifndef __LP64__ + {"splash", MacOS_splash, 1, splash_doc}, + {"DebugStr", MacOS_DebugStr, 1, DebugStr_doc}, +- {"GetTicks", MacOS_GetTicks, 1, GetTicks_doc}, + {"SysBeep", MacOS_SysBeep, 1, SysBeep_doc}, ++#endif /* !__LP64__ */ ++ {"GetTicks", MacOS_GetTicks, 1, GetTicks_doc}, + {"WMAvailable", MacOS_WMAvailable, 1, WMAvailable_doc}, + {NULL, NULL} /* Sentinel */ + }; +--- Mac/Modules/file/_Filemodule.c.orig 2006-05-29 07:57:35.000000000 +1000 ++++ Mac/Modules/file/_Filemodule.c 2009-09-10 22:48:47.000000000 +1000 +@@ -18,9 +18,11 @@ + #include + + #ifdef USE_TOOLBOX_OBJECT_GLUE ++#ifndef __LP64__ + extern int _PyMac_GetFSSpec(PyObject *v, FSSpec *spec); +-extern int _PyMac_GetFSRef(PyObject *v, FSRef *fsr); + extern PyObject *_PyMac_BuildFSSpec(FSSpec *spec); ++#endif /* !__LP64__ */ ++extern int _PyMac_GetFSRef(PyObject *v, FSRef *fsr); + extern PyObject *_PyMac_BuildFSRef(FSRef *spec); + + #define PyMac_GetFSSpec _PyMac_GetFSSpec +@@ -28,20 +30,26 @@ + #define PyMac_BuildFSSpec _PyMac_BuildFSSpec + #define PyMac_BuildFSRef _PyMac_BuildFSRef + #else ++#ifndef __LP64__ + extern int PyMac_GetFSSpec(PyObject *v, FSSpec *spec); +-extern int PyMac_GetFSRef(PyObject *v, FSRef *fsr); + extern PyObject *PyMac_BuildFSSpec(FSSpec *spec); ++#endif /* !__LP64__ */ ++extern int PyMac_GetFSRef(PyObject *v, FSRef *fsr); + extern PyObject *PyMac_BuildFSRef(FSRef *spec); + #endif + + /* Forward declarations */ ++#ifndef __LP64__ + static PyObject *FInfo_New(FInfo *itself); +-static PyObject *FSRef_New(FSRef *itself); + static PyObject *FSSpec_New(FSSpec *itself); ++#define FSSpec_Convert PyMac_GetFSSpec ++#endif /* !__LP64__ */ ++static PyObject *FSRef_New(FSRef *itself); + static PyObject *Alias_New(AliasHandle itself); ++#ifndef __LP64__ + static int FInfo_Convert(PyObject *v, FInfo *p_itself); ++#endif /* !__LP64__ */ + #define FSRef_Convert PyMac_GetFSRef +-#define FSSpec_Convert PyMac_GetFSSpec + static int Alias_Convert(PyObject *v, AliasHandle *p_itself); + + /* +@@ -62,6 +70,7 @@ + /* + ** Optional fsspec and fsref pointers. None will pass NULL + */ ++#ifndef __LP64__ + static int + myPyMac_GetOptFSSpecPtr(PyObject *v, FSSpec **spec) + { +@@ -71,6 +80,7 @@ + } + return PyMac_GetFSSpec(v, *spec); + } ++#endif /* !__LP64__ */ + + static int + myPyMac_GetOptFSRefPtr(PyObject *v, FSRef **ref) +@@ -92,6 +102,7 @@ + return Py_BuildValue("u#", itself->unicode, itself->length); + } + ++#ifndef __LP64__ + static OSErr + _PyMac_GetFullPathname(FSSpec *fss, char *path, int len) + { +@@ -135,6 +146,7 @@ + } + return 0; + } ++#endif /* !__LP64__ */ + + + static PyObject *File_Error; +@@ -282,12 +294,28 @@ + + static PyObject *FSCatalogInfo_get_permissions(FSCatalogInfoObject *self, void *closure) + { +- return Py_BuildValue("(llll)", self->ob_itself.permissions[0], self->ob_itself.permissions[1], self->ob_itself.permissions[2], self->ob_itself.permissions[3]); ++ FSPermissionInfo* info = (FSPermissionInfo*)&(self->ob_itself.permissions); ++ return Py_BuildValue("(llll)", info->userID, info->groupID, info->userAccess, info->mode); + } + + static int FSCatalogInfo_set_permissions(FSCatalogInfoObject *self, PyObject *v, void *closure) + { +- return PyArg_Parse(v, "(llll)", &self->ob_itself.permissions[0], &self->ob_itself.permissions[1], &self->ob_itself.permissions[2], &self->ob_itself.permissions[3])-1; ++ long userID; ++ long groupID; ++ long userAccess; ++ long mode; ++ int r; ++ ++ FSPermissionInfo* info = (FSPermissionInfo*)&(self->ob_itself.permissions); ++ ++ r = PyArg_Parse(v, "(llll)", &userID, &groupID, &userAccess, &mode); ++ if (!r) { ++ return -1; ++ } ++ info->userID = userID; ++ info->groupID = groupID; ++ info->userAccess = userAccess; ++ info->mode = mode; + return 0; + } + +@@ -501,6 +529,7 @@ + + /* ----------------------- Object type FInfo ------------------------ */ + ++#ifndef __LP64__ + static PyTypeObject FInfo_Type; + + #define FInfo_Check(x) ((x)->ob_type == &FInfo_Type || PyObject_TypeCheck((x), &FInfo_Type)) +@@ -682,6 +711,7 @@ + FInfo_tp_free, /* tp_free */ + }; + ++#endif /* !__LP64__ */ + /* --------------------- End object type FInfo ---------------------- */ + + +@@ -729,6 +759,7 @@ + self->ob_type->tp_free((PyObject *)self); + } + ++#ifndef __LP64__ + static PyObject *Alias_ResolveAlias(AliasObject *_self, PyObject *_args) + { + PyObject *_res = NULL; +@@ -818,6 +849,7 @@ + wasChanged); + return _res; + } ++#endif /* !__LP64__ */ + + static PyObject *Alias_FSResolveAliasWithMountFlags(AliasObject *_self, PyObject *_args) + { +@@ -891,6 +923,7 @@ + } + + static PyMethodDef Alias_methods[] = { ++#ifndef __LP64__ + {"ResolveAlias", (PyCFunction)Alias_ResolveAlias, 1, + PyDoc_STR("(FSSpec fromFile) -> (FSSpec target, Boolean wasChanged)")}, + {"GetAliasInfo", (PyCFunction)Alias_GetAliasInfo, 1, +@@ -899,6 +932,7 @@ + PyDoc_STR("(FSSpec fromFile, unsigned long mountFlags) -> (FSSpec target, Boolean wasChanged)")}, + {"FollowFinderAlias", (PyCFunction)Alias_FollowFinderAlias, 1, + PyDoc_STR("(FSSpec fromFile, Boolean logon) -> (FSSpec target, Boolean wasChanged)")}, ++#endif /* !__LP64__ */ + {"FSResolveAliasWithMountFlags", (PyCFunction)Alias_FSResolveAliasWithMountFlags, 1, + PyDoc_STR("(FSRef fromFile, unsigned long mountFlags) -> (FSRef target, Boolean wasChanged)")}, + {"FSResolveAlias", (PyCFunction)Alias_FSResolveAlias, 1, +@@ -1033,6 +1067,7 @@ + + + /* ----------------------- Object type FSSpec ----------------------- */ ++#ifndef __LP64__ + + static PyTypeObject FSSpec_Type; + +@@ -1488,6 +1523,7 @@ + FSSpec_tp_free, /* tp_free */ + }; + ++#endif /* !__LP64__ */ + /* --------------------- End object type FSSpec --------------------- */ + + +@@ -1568,7 +1604,9 @@ + FSCatalogInfoBitmap whichInfo; + FSCatalogInfo catalogInfo; + FSRef newRef; ++#ifndef __LP64__ + FSSpec newSpec; ++#endif /* !__LP64__ */ + if (!PyArg_ParseTuple(_args, "u#lO&", + &nameLength__in__, &nameLength__in_len__, + &whichInfo, +@@ -1580,11 +1618,20 @@ + whichInfo, + &catalogInfo, + &newRef, +- &newSpec); ++#ifndef __LP64__ ++ &newSpec ++#else ++ NULL ++#endif /* !__LP64__ */ ++ ); + if (_err != noErr) return PyMac_Error(_err); ++#ifndef __LP64__ + _res = Py_BuildValue("O&O&", + FSRef_New, &newRef, + FSSpec_New, &newSpec); ++#else ++ _res = Py_BuildValue("O&O", FSRef_New, &newRef, Py_None); ++#endif /* !__LP64__ */ + return _res; + } + +@@ -1598,7 +1645,9 @@ + FSCatalogInfoBitmap whichInfo; + FSCatalogInfo catalogInfo; + FSRef newRef; ++#ifndef __LP64__ + FSSpec newSpec; ++#endif /* !__LP64__ */ + UInt32 newDirID; + if (!PyArg_ParseTuple(_args, "u#lO&", + &nameLength__in__, &nameLength__in_len__, +@@ -1611,13 +1660,25 @@ + whichInfo, + &catalogInfo, + &newRef, ++#ifndef __LP64__ + &newSpec, ++#else ++ NULL, ++#endif /* !__LP64__ */ + &newDirID); + if (_err != noErr) return PyMac_Error(_err); ++ ++#ifndef __LP64__ + _res = Py_BuildValue("O&O&l", + FSRef_New, &newRef, + FSSpec_New, &newSpec, + newDirID); ++#else ++ _res = Py_BuildValue("O&Ol", ++ FSRef_New, &newRef, ++ Py_None, ++ newDirID); ++#endif /* !__LP64__ */ + return _res; + } + +@@ -1699,7 +1760,9 @@ + FSCatalogInfoBitmap whichInfo; + FSCatalogInfo catalogInfo; + HFSUniStr255 outName; ++#ifndef __LP64__ + FSSpec fsSpec; ++#endif /* !__LP64__ */ + FSRef parentRef; + if (!PyArg_ParseTuple(_args, "l", + &whichInfo)) +@@ -1708,14 +1771,26 @@ + whichInfo, + &catalogInfo, + &outName, ++#ifndef __LP64__ + &fsSpec, ++#else ++ NULL, ++#endif /* !__LP64__ */ + &parentRef); + if (_err != noErr) return PyMac_Error(_err); ++#ifndef __LP64__ + _res = Py_BuildValue("O&O&O&O&", + FSCatalogInfo_New, &catalogInfo, + PyMac_BuildHFSUniStr255, &outName, + FSSpec_New, &fsSpec, + FSRef_New, &parentRef); ++#else ++ _res = Py_BuildValue("O&O&OO&", ++ FSCatalogInfo_New, &catalogInfo, ++ PyMac_BuildHFSUniStr255, &outName, ++ Py_None, ++ FSRef_New, &parentRef); ++#endif /* !__LP64__ */ + return _res; + } + +@@ -1784,7 +1859,7 @@ + UniCharCount forkNameLength__len__; + int forkNameLength__in_len__; + SInt8 permissions; +- SInt16 forkRefNum; ++ FSIORefNum forkRefNum; + if (!PyArg_ParseTuple(_args, "u#b", + &forkNameLength__in__, &forkNameLength__in_len__, + &permissions)) +@@ -2034,7 +2109,7 @@ + + /* --------------------- End object type FSRef ---------------------- */ + +- ++#ifndef __LP64__ + static PyObject *File_UnmountVol(PyObject *_self, PyObject *_args) + { + PyObject *_res = NULL; +@@ -2562,6 +2637,7 @@ + FSSpec_New, &spec); + return _res; + } ++#endif /* !__LP64__ */ + + static PyObject *File_FSGetForkPosition(PyObject *_self, PyObject *_args) + { +@@ -2785,6 +2861,7 @@ + return _res; + } + ++#ifndef __LP64__ + static PyObject *File_NewAlias(PyObject *_self, PyObject *_args) + { + PyObject *_res = NULL; +@@ -2933,6 +3010,7 @@ + wasAliased); + return _res; + } ++#endif /* !__LP64__ */ + + static PyObject *File_FSNewAlias(PyObject *_self, PyObject *_args) + { +@@ -3050,6 +3128,7 @@ + } + + static PyMethodDef File_methods[] = { ++#ifndef __LP64__ + {"UnmountVol", (PyCFunction)File_UnmountVol, 1, + PyDoc_STR("(Str63 volName, short vRefNum) -> None")}, + {"FlushVol", (PyCFunction)File_FlushVol, 1, +@@ -3100,6 +3179,7 @@ + PyDoc_STR("(short vRefNum, long dirID, Str255 oldName, long newDirID, Str255 newName) -> None")}, + {"FSMakeFSSpec", (PyCFunction)File_FSMakeFSSpec, 1, + PyDoc_STR("(short vRefNum, long dirID, Str255 fileName) -> (FSSpec spec)")}, ++#endif /* !__LP64__ */ + {"FSGetForkPosition", (PyCFunction)File_FSGetForkPosition, 1, + PyDoc_STR("(SInt16 forkRefNum) -> (SInt64 position)")}, + {"FSSetForkPosition", (PyCFunction)File_FSSetForkPosition, 1, +@@ -3124,6 +3204,7 @@ + PyDoc_STR("(UInt8 * path, FNMessage message, OptionBits flags) -> None")}, + {"FNNotifyAll", (PyCFunction)File_FNNotifyAll, 1, + PyDoc_STR("(FNMessage message, OptionBits flags) -> None")}, ++#ifndef __LP64__ + {"NewAlias", (PyCFunction)File_NewAlias, 1, + PyDoc_STR("(FSSpec fromFile, FSSpec target) -> (AliasHandle alias)")}, + {"NewAliasMinimalFromFullPath", (PyCFunction)File_NewAliasMinimalFromFullPath, 1, +@@ -3136,6 +3217,7 @@ + PyDoc_STR("(FSSpec fromFile, FSSpec target, AliasHandle alias) -> (Boolean wasChanged)")}, + {"ResolveAliasFileWithMountFlagsNoUI", (PyCFunction)File_ResolveAliasFileWithMountFlagsNoUI, 1, + PyDoc_STR("(FSSpec theSpec, Boolean resolveAliasChains, unsigned long mountFlags) -> (FSSpec theSpec, Boolean targetIsFolder, Boolean wasAliased)")}, ++#endif /* !__LP64__ */ + {"FSNewAlias", (PyCFunction)File_FSNewAlias, 1, + PyDoc_STR("(FSRef fromFile, FSRef target) -> (AliasHandle inAlias)")}, + {"FSResolveAliasFileWithMountFlags", (PyCFunction)File_FSResolveAliasFileWithMountFlags, 1, +@@ -3150,7 +3232,7 @@ + }; + + +- ++#ifndef __LP64__ + int + PyMac_GetFSSpec(PyObject *v, FSSpec *spec) + { +@@ -3188,12 +3270,15 @@ + } + return 0; + } ++#endif /* !__LP64__ */ + + int + PyMac_GetFSRef(PyObject *v, FSRef *fsr) + { + OSStatus err; ++#ifndef __LP64__ + FSSpec fss; ++#endif /* !__LP64__ */ + + if (FSRef_Check(v)) { + *fsr = ((FSRefObject *)v)->ob_itself; +@@ -3211,6 +3296,7 @@ + return !err; + } + /* XXXX Should try unicode here too */ ++#ifndef __LP64__ + /* Otherwise we try to go via an FSSpec */ + if (FSSpec_Check(v)) { + fss = ((FSSpecObject *)v)->ob_itself; +@@ -3219,15 +3305,18 @@ + PyMac_Error(err); + return 0; + } ++#endif /* !__LP64__ */ + PyErr_SetString(PyExc_TypeError, "FSRef, FSSpec or pathname required"); + return 0; + } + ++#ifndef __LP64__ + extern PyObject * + PyMac_BuildFSSpec(FSSpec *spec) + { + return FSSpec_New(spec); + } ++#endif /* !__LP64__ */ + + extern PyObject * + PyMac_BuildFSRef(FSRef *spec) +@@ -3242,10 +3331,11 @@ + PyObject *d; + + +- ++#ifndef __LP64__ + PyMac_INIT_TOOLBOX_OBJECT_NEW(FSSpec *, PyMac_BuildFSSpec); +- PyMac_INIT_TOOLBOX_OBJECT_NEW(FSRef *, PyMac_BuildFSRef); + PyMac_INIT_TOOLBOX_OBJECT_CONVERT(FSSpec, PyMac_GetFSSpec); ++#endif /* !__LP64__ */ ++ PyMac_INIT_TOOLBOX_OBJECT_NEW(FSRef *, PyMac_BuildFSRef); + PyMac_INIT_TOOLBOX_OBJECT_CONVERT(FSRef, PyMac_GetFSRef); + + +@@ -3262,6 +3352,7 @@ + /* Backward-compatible name */ + Py_INCREF(&FSCatalogInfo_Type); + PyModule_AddObject(m, "FSCatalogInfoType", (PyObject *)&FSCatalogInfo_Type); ++#ifndef __LP64__ + FInfo_Type.ob_type = &PyType_Type; + if (PyType_Ready(&FInfo_Type) < 0) return; + Py_INCREF(&FInfo_Type); +@@ -3269,6 +3360,7 @@ + /* Backward-compatible name */ + Py_INCREF(&FInfo_Type); + PyModule_AddObject(m, "FInfoType", (PyObject *)&FInfo_Type); ++#endif /* !__LP64__ */ + Alias_Type.ob_type = &PyType_Type; + if (PyType_Ready(&Alias_Type) < 0) return; + Py_INCREF(&Alias_Type); +@@ -3276,6 +3368,7 @@ + /* Backward-compatible name */ + Py_INCREF(&Alias_Type); + PyModule_AddObject(m, "AliasType", (PyObject *)&Alias_Type); ++#ifndef __LP64__ + FSSpec_Type.ob_type = &PyType_Type; + if (PyType_Ready(&FSSpec_Type) < 0) return; + Py_INCREF(&FSSpec_Type); +@@ -3283,6 +3376,7 @@ + /* Backward-compatible name */ + Py_INCREF(&FSSpec_Type); + PyModule_AddObject(m, "FSSpecType", (PyObject *)&FSSpec_Type); ++#endif /* !__LP64__ */ + FSRef_Type.ob_type = &PyType_Type; + if (PyType_Ready(&FSRef_Type) < 0) return; + Py_INCREF(&FSRef_Type); +Index: Lib/plat-mac/macresource.py +=================================================================== +--- Lib/plat-mac/macresource.py (revision 74680) ++++ Lib/plat-mac/macresource.py (revision 74681) +@@ -79,8 +79,8 @@ + AppleSingle file""" + try: + refno = Res.FSpOpenResFile(pathname, 1) +- except Res.Error, arg: +- if arg[0] in (-37, -39): ++ except (AttributeError, Res.Error), arg: ++ if isinstance(arg, AttributeError) or arg[0] in (-37, -39): + # No resource fork. We may be on OSX, and this may be either + # a data-fork based resource file or a AppleSingle file + # from the CVS repository. +@@ -106,8 +106,8 @@ + try: + refno = Res.FSpOpenResFile(pathname, 1) + Res.CloseResFile(refno) +- except Res.Error, arg: +- if arg[0] in (-37, -39): ++ except (AttributeError, Res.Error), arg: ++ if isinstance(arg, AttributeError) or arg[0] in (-37, -39): + # No resource fork. We may be on OSX, and this may be either + # a data-fork based resource file or a AppleSingle file + # from the CVS repository. +Index: Lib/plat-mac/applesingle.py +=================================================================== +--- Lib/plat-mac/applesingle.py (revision 74680) ++++ Lib/plat-mac/applesingle.py (revision 74681) +@@ -119,8 +119,13 @@ + if not hasattr(infile, 'read'): + if isinstance(infile, Carbon.File.Alias): + infile = infile.ResolveAlias()[0] +- if isinstance(infile, (Carbon.File.FSSpec, Carbon.File.FSRef)): +- infile = infile.as_pathname() ++ ++ if hasattr(Carbon.File, "FSSpec"): ++ if isinstance(infile, (Carbon.File.FSSpec, Carbon.File.FSRef)): ++ infile = infile.as_pathname() ++ else: ++ if isinstance(infile, Carbon.File.FSRef): ++ infile = infile.as_pathname() + infile = open(infile, 'rb') + + asfile = AppleSingle(infile, verbose=verbose) +Index: Mac/scripts/BuildApplet.py +=================================================================== +--- Mac/scripts/BuildApplet.py (revision 74680) ++++ Mac/scripts/BuildApplet.py (revision 74681) +@@ -12,7 +12,10 @@ + + import os + import MacOS +-import EasyDialogs ++try: ++ import EasyDialogs ++except ImportError: ++ EasyDialogs = None + import buildtools + import getopt + +@@ -32,7 +35,10 @@ + try: + buildapplet() + except buildtools.BuildError, detail: +- EasyDialogs.Message(detail) ++ if EasyDialogs is None: ++ print detail ++ else: ++ EasyDialogs.Message(detail) + + + def buildapplet(): +@@ -46,6 +52,10 @@ + # Ask for source text if not specified in sys.argv[1:] + + if not sys.argv[1:]: ++ if EasyDialogs is None: ++ usage() ++ sys.exit(1) ++ + filename = EasyDialogs.AskFileForOpen(message='Select Python source or applet:', + typeList=('TEXT', 'APPL')) + if not filename: +Index: Lib/plat-mac/buildtools.py +=================================================================== +--- Lib/plat-mac/buildtools.py (revision 74680) ++++ Lib/plat-mac/buildtools.py (revision 74681) +@@ -15,7 +15,10 @@ + import MacOS + import macostools + import macresource +-import EasyDialogs ++try: ++ import EasyDialogs ++except ImportError: ++ EasyDialogs = None + import shutil + + +@@ -67,9 +70,13 @@ + rsrcname=None, others=[], raw=0, progress="default", destroot=""): + + if progress == "default": +- progress = EasyDialogs.ProgressBar("Processing %s..."%os.path.split(filename)[1], 120) +- progress.label("Compiling...") +- progress.inc(0) ++ if EasyDialogs is None: ++ print "Compiling %s"%(os.path.split(filename)[1],) ++ process = None ++ else: ++ progress = EasyDialogs.ProgressBar("Processing %s..."%os.path.split(filename)[1], 120) ++ progress.label("Compiling...") ++ progress.inc(0) + # check for the script name being longer than 32 chars. This may trigger a bug + # on OSX that can destroy your sourcefile. + if '#' in os.path.split(filename)[1]: +@@ -119,7 +126,11 @@ + if MacOS.runtimemodel == 'macho': + raise BuildError, "No updating yet for MachO applets" + if progress: +- progress = EasyDialogs.ProgressBar("Updating %s..."%os.path.split(filename)[1], 120) ++ if EasyDialogs is None: ++ print "Updating %s"%(os.path.split(filename)[1],) ++ progress = None ++ else: ++ progress = EasyDialogs.ProgressBar("Updating %s..."%os.path.split(filename)[1], 120) + else: + progress = None + if not output: diff --git a/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-FSIORefNum.diff.svn-base b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-FSIORefNum.diff.svn-base new file mode 100644 index 0000000..6f8ac66 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-FSIORefNum.diff.svn-base @@ -0,0 +1,11 @@ +--- 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/files/.svn/text-base/patch-Lib-cgi.py.diff.svn-base b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-Lib-cgi.py.diff.svn-base new file mode 100644 index 0000000..1e27ee8 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-Lib-cgi.py.diff.svn-base @@ -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.5 + +-# 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/python25/files/.svn/text-base/patch-Lib-distutils-dist.py.diff.svn-base b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-Lib-distutils-dist.py.diff.svn-base new file mode 100644 index 0000000..961a8ad --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-Lib-distutils-dist.py.diff.svn-base @@ -0,0 +1,51 @@ +--- Lib/distutils/dist.py.orig 2005-03-23 11:54:36.000000000 -0700 ++++ Lib/distutils/dist.py 2008-07-25 21:27:15.000000000 -0600 +@@ -57,6 +57,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 +@@ -264,6 +265,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__ () +@@ -324,6 +331,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() +@@ -343,7 +353,7 @@ + user_filename = "pydistutils.cfg" + + # And look for the user config file +- if os.environ.has_key('HOME'): ++ if self.want_user_cfg and os.environ.has_key('HOME'): + user_file = os.path.join(os.environ.get('HOME'), user_filename) + if os.path.isfile(user_file): + files.append(user_file) +@@ -353,6 +363,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/python25/files/.svn/text-base/patch-Makefile.pre.in.diff.svn-base b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-Makefile.pre.in.diff.svn-base new file mode 100644 index 0000000..1ef8d7b --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-Makefile.pre.in.diff.svn-base @@ -0,0 +1,31 @@ +--- Makefile.pre.in.orig 2007-12-05 13:43:57.000000000 -0700 ++++ Makefile.pre.in 2008-07-25 21:41:02.000000000 -0600 +@@ -348,8 +348,8 @@ + # Build the shared modules + sharedmods: $(BUILDPYTHON) + case $$MAKEFLAGS in \ +- *-s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ +- *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ ++ *-s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q --no-user-cfg build;; \ ++ *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py --no-user-cfg build;; \ + esac + + # Build static library +@@ -894,7 +904,7 @@ + # Install the dynamically loadable modules + # This goes into $(exec_prefix) + sharedinstall: +- $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \ ++ $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py --no-user-cfg install \ + --prefix=$(prefix) \ + --install-scripts=$(BINDIR) \ + --install-platlib=$(DESTSHARED) \ +@@ -968,7 +978,7 @@ + # This installs a few of the useful scripts in Tools/scripts + scriptsinstall: + SRCDIR=$(srcdir) $(RUNSHARED) \ +- ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/setup.py install \ ++ ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/setup.py --no-user-cfg install \ + --prefix=$(prefix) \ + --install-scripts=$(BINDIR) \ + --root=/$(DESTDIR) diff --git a/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-Misc-setuid-prog.c.diff.svn-base b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-Misc-setuid-prog.c.diff.svn-base new file mode 100644 index 0000000..0fee9e7 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-Misc-setuid-prog.c.diff.svn-base @@ -0,0 +1,16 @@ +--- 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/files/.svn/text-base/patch-Modules-posixmodule.c.diff.svn-base b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-Modules-posixmodule.c.diff.svn-base new file mode 100644 index 0000000..c14913c --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-Modules-posixmodule.c.diff.svn-base @@ -0,0 +1,21 @@ +--- 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/files/.svn/text-base/patch-configure-arch_only.diff.svn-base b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-configure-arch_only.diff.svn-base new file mode 100644 index 0000000..b0df6a4 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-configure-arch_only.diff.svn-base @@ -0,0 +1,20 @@ +--- configure.orig 2009-06-24 13:57:38.000000000 -0700 ++++ configure 2009-06-24 13:58:38.000000000 -0700 +@@ -11362,7 +11362,7 @@ + if test "${enable_universalsdk}"; then + : + else +- LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `arch`" ++ LIBTOOL_CRUFT="${LIBTOOL_CRUFT}" + fi + LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' + LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; +@@ -11374,7 +11374,7 @@ + else + LIBTOOL_CRUFT="" + fi +- LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only `arch`" ++ LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs" + LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' + LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; + esac diff --git a/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-configure-badcflags.diff.svn-base b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-configure-badcflags.diff.svn-base new file mode 100644 index 0000000..8d26ebd --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-configure-badcflags.diff.svn-base @@ -0,0 +1,11 @@ +--- configure.orig 2008-10-15 18:00:59.000000000 -0700 ++++ configure 2008-10-15 18:02:47.000000000 -0700 +@@ -4538,7 +4538,7 @@ + ;; + # is there any other compiler on Darwin besides gcc? + Darwin*) +- BASECFLAGS="$BASECFLAGS -Wno-long-double -no-cpp-precomp -mno-fused-madd" ++ BASECFLAGS="$BASECFLAGS -mno-fused-madd" + if test "${enable_universalsdk}"; then + BASECFLAGS="-arch ppc -arch i386 -isysroot ${UNIVERSALSDK} ${BASECFLAGS}" + fi diff --git a/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-configure.diff.svn-base b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-configure.diff.svn-base new file mode 100644 index 0000000..cc60be1 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-configure.diff.svn-base @@ -0,0 +1,28 @@ +--- 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/python25/files/.svn/text-base/patch-pyconfig.h.in.diff.svn-base b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-pyconfig.h.in.diff.svn-base new file mode 100644 index 0000000..bd0ecd8 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-pyconfig.h.in.diff.svn-base @@ -0,0 +1,13 @@ +--- pyconfig.h.in.orig 2009-08-16 10:22:50.000000000 -0700 ++++ pyconfig.h.in 2009-08-16 10:23:24.000000000 -0700 +@@ -4,6 +4,10 @@ + #ifndef Py_PYCONFIG_H + #define Py_PYCONFIG_H + ++// Required on Darwin 10+ ++#ifndef _DARWIN_C_SOURCE ++#define _DARWIN_C_SOURCE ++#endif + + /* Define for AIX if your compiler is a genuine IBM xlC/xlC_r and you want + support for AIX C++ shared extension modules. */ diff --git a/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-setup.py.diff.svn-base b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-setup.py.diff.svn-base new file mode 100644 index 0000000..2649594 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/text-base/patch-setup.py.diff.svn-base @@ -0,0 +1,80 @@ +--- setup.py.orig 2008-10-16 12:58:19.000000000 -0600 ++++ setup.py 2009-06-07 20:55:17.000000000 -0600 +@@ -609,7 +609,7 @@ + # a release. Most open source OSes come with one or more + # versions of BerkeleyDB already installed. + +- max_db_ver = (4, 5) ++ max_db_ver = (4, 6) + # NOTE: while the _bsddb.c code links against BerkeleyDB 4.6.x + # we leave that version disabled by default as it has proven to be + # quite a buggy library release on many platforms. +@@ -636,6 +636,7 @@ + db_inc_paths.append('/usr/local/include/db4%d' % x) + db_inc_paths.append('/pkg/db-4.%d/include' % x) + db_inc_paths.append('/opt/db-4.%d/include' % x) ++ db_inc_paths.append('__PREFIX__/include/db4%d' % x) + # 3.x minor number specific paths + for x in (3,): + db_inc_paths.append('/usr/include/db3%d' % x) +@@ -711,6 +712,7 @@ + + # check lib directories parallel to the location of the header + db_dirs_to_check = [ ++ os.path.join('__PREFIX__', 'lib', 'db46'), + os.path.join(db_incdir, '..', 'lib64'), + os.path.join(db_incdir, '..', 'lib'), + os.path.join(db_incdir, '..', '..', 'lib64'), +@@ -1212,13 +1214,7 @@ + def detect_tkinter(self, inc_dirs, lib_dirs): + # The _tkinter module. + +- # Rather than complicate the code below, detecting and building +- # AquaTk is a separate method. Only one Tkinter will be built on +- # Darwin - either AquaTk, if it is found, or X11 based Tk. + platform = self.get_platform() +- if (platform == 'darwin' and +- self.detect_tkinter_darwin(inc_dirs, lib_dirs)): +- return + + # Assume we haven't found any of the libraries or include files + # The versions with dots are used on Unix, and the versions without +--- setup.py.orig 2009-09-10 19:41:32.000000000 +1000 ++++ setup.py 2009-09-10 19:48:30.000000000 +1000 +@@ -1197,7 +1197,7 @@ + # For 8.4a2, the X11 headers are not included. Rather than include a + # complicated search, this is a hard-coded path. It could bail out + # if X11 libs are not found... +- include_dirs.append('/usr/X11R6/include') ++ #include_dirs.append('/usr/X11R6/include') + frameworks = ['-framework', 'Tcl', '-framework', 'Tk'] + + ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'], +@@ -1262,17 +1262,17 @@ + if platform == 'sunos5': + include_dirs.append('/usr/openwin/include') + added_lib_dirs.append('/usr/openwin/lib') +- elif os.path.exists('/usr/X11R6/include'): +- include_dirs.append('/usr/X11R6/include') +- added_lib_dirs.append('/usr/X11R6/lib64') +- added_lib_dirs.append('/usr/X11R6/lib') +- elif os.path.exists('/usr/X11R5/include'): +- include_dirs.append('/usr/X11R5/include') +- added_lib_dirs.append('/usr/X11R5/lib') +- else: ++ #elif os.path.exists('/usr/X11R6/include'): ++ # include_dirs.append('/usr/X11R6/include') ++ # added_lib_dirs.append('/usr/X11R6/lib64') ++ # added_lib_dirs.append('/usr/X11R6/lib') ++ #elif os.path.exists('/usr/X11R5/include'): ++ # include_dirs.append('/usr/X11R5/include') ++ # added_lib_dirs.append('/usr/X11R5/lib') ++ #else: + # Assume default location for X11 +- include_dirs.append('/usr/X11/include') +- added_lib_dirs.append('/usr/X11/lib') ++ # include_dirs.append('/usr/X11/include') ++ # added_lib_dirs.append('/usr/X11/lib') + + # If Cygwin, then verify that X is installed before proceeding + if platform == 'cygwin': diff --git a/pythonbrew/patches/macosx/python25/files/.svn/text-base/pyconfig.ed.svn-base b/pythonbrew/patches/macosx/python25/files/.svn/text-base/pyconfig.ed.svn-base new file mode 100644 index 0000000..671d0d5 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/text-base/pyconfig.ed.svn-base @@ -0,0 +1,2 @@ +g,.*\(HAVE_POLL[_A-Z]*\).*,s,,/* #undef \1 */, +w diff --git a/pythonbrew/patches/macosx/python25/files/.svn/text-base/python25.svn-base b/pythonbrew/patches/macosx/python25/files/.svn/text-base/python25.svn-base new file mode 100644 index 0000000..fbae300 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/.svn/text-base/python25.svn-base @@ -0,0 +1,12 @@ +bin/python2.5 +bin/pythonw2.5 +bin/python2.5-config +bin/idle2.5 +bin/pydoc2.5 +bin/smtpd2.5.py +- +share/man/man1/python2.5.1.gz +${frameworks_dir}/Python.framework/Versions/2.5 +${frameworks_dir}/Python.framework/Versions/2.5/Headers +${frameworks_dir}/Python.framework/Versions/2.5/Resources +${frameworks_dir}/Python.framework/Versions/2.5/Python diff --git a/pythonbrew/patches/macosx/python25/files/patch-64bit.diff b/pythonbrew/patches/macosx/python25/files/patch-64bit.diff new file mode 100644 index 0000000..100617d --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/patch-64bit.diff @@ -0,0 +1,1234 @@ +--- Include/pymactoolbox.h.orig 2004-11-05 18:02:59.000000000 +1100 ++++ Include/pymactoolbox.h 2009-09-10 18:08:58.000000000 +1000 +@@ -8,7 +8,9 @@ + #endif + + #include ++#ifndef __LP64__ + #include ++#endif /* !__LP64__ */ + + /* + ** Helper routines for error codes and such. +@@ -18,8 +20,10 @@ + PyObject *PyMac_GetOSErrException(void); /* Initialize & return it */ + PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */ + PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */ ++#ifndef __LP64__ + extern OSErr PyMac_GetFullPathname(FSSpec *, char *, int); /* convert + fsspec->path */ ++#endif /* !__LP64__ */ + /* + ** These conversion routines are defined in mactoolboxglue.c itself. + */ +@@ -83,9 +87,10 @@ + #endif /* USE_TOOLBOX_OBJECT_GLUE */ + + /* macfs exports */ ++#ifndef __LP64__ + int PyMac_GetFSSpec(PyObject *, FSSpec *); /* argument parser for FSSpec */ + PyObject *PyMac_BuildFSSpec(FSSpec *); /* Convert FSSpec to PyObject */ +- ++#endif /* !__LP64__ */ + int PyMac_GetFSRef(PyObject *, FSRef *); /* argument parser for FSRef */ + PyObject *PyMac_BuildFSRef(FSRef *); /* Convert FSRef to PyObject */ + +@@ -101,39 +106,54 @@ + extern int CmpInstObj_Convert(PyObject *, ComponentInstance *); + + /* Ctl exports */ ++#ifndef __LP64__ + extern PyObject *CtlObj_New(ControlHandle); + extern int CtlObj_Convert(PyObject *, ControlHandle *); ++#endif /* !__LP64__ */ + + /* Dlg exports */ ++#ifndef __LP64__ + extern PyObject *DlgObj_New(DialogPtr); + extern int DlgObj_Convert(PyObject *, DialogPtr *); + extern PyObject *DlgObj_WhichDialog(DialogPtr); ++#endif /* !__LP64__ */ + + /* Drag exports */ ++#ifndef __LP64__ + extern PyObject *DragObj_New(DragReference); + extern int DragObj_Convert(PyObject *, DragReference *); ++#endif /* !__LP64__ */ + + /* List exports */ ++#ifndef __LP64__ + extern PyObject *ListObj_New(ListHandle); + extern int ListObj_Convert(PyObject *, ListHandle *); ++#endif /* !__LP64__ */ + + /* Menu exports */ ++#ifndef __LP64__ + extern PyObject *MenuObj_New(MenuHandle); + extern int MenuObj_Convert(PyObject *, MenuHandle *); ++#endif /* !__LP64__ */ + + /* Qd exports */ ++#ifndef __LP64__ + extern PyObject *GrafObj_New(GrafPtr); + extern int GrafObj_Convert(PyObject *, GrafPtr *); + extern PyObject *BMObj_New(BitMapPtr); + extern int BMObj_Convert(PyObject *, BitMapPtr *); + extern PyObject *QdRGB_New(RGBColor *); + extern int QdRGB_Convert(PyObject *, RGBColor *); ++#endif /* !__LP64__ */ + + /* Qdoffs exports */ ++#ifndef __LP64__ + extern PyObject *GWorldObj_New(GWorldPtr); + extern int GWorldObj_Convert(PyObject *, GWorldPtr *); ++#endif /* !__LP64__ */ + + /* Qt exports */ ++#ifndef __LP64__ + extern PyObject *TrackObj_New(Track); + extern int TrackObj_Convert(PyObject *, Track *); + extern PyObject *MovieObj_New(Movie); +@@ -146,6 +166,7 @@ + extern int UserDataObj_Convert(PyObject *, UserData *); + extern PyObject *MediaObj_New(Media); + extern int MediaObj_Convert(PyObject *, Media *); ++#endif /* !__LP64__ */ + + /* Res exports */ + extern PyObject *ResObj_New(Handle); +@@ -154,13 +175,17 @@ + extern int OptResObj_Convert(PyObject *, Handle *); + + /* TE exports */ ++#ifndef __LP64__ + extern PyObject *TEObj_New(TEHandle); + extern int TEObj_Convert(PyObject *, TEHandle *); ++#endif /* !__LP64__ */ + + /* Win exports */ ++#ifndef __LP64__ + extern PyObject *WinObj_New(WindowPtr); + extern int WinObj_Convert(PyObject *, WindowPtr *); + extern PyObject *WinObj_WhichWindow(WindowPtr); ++#endif /* !__LP64__ */ + + /* CF exports */ + extern PyObject *CFObj_New(CFTypeRef); +--- Python/mactoolboxglue.c.orig 2006-07-12 02:44:25.000000000 +1000 ++++ Python/mactoolboxglue.c 2009-09-10 19:26:39.000000000 +1000 +@@ -105,7 +105,7 @@ + return PyErr_Mac(PyMac_GetOSErrException(), err); + } + +- ++#ifndef __LP64__ + OSErr + PyMac_GetFullPathname(FSSpec *fss, char *path, int len) + { +@@ -153,6 +153,7 @@ + Py_XDECREF(fs); + return err; + } ++#endif /* !__LP64__ */ + + /* Convert a 4-char string object argument to an OSType value */ + int +@@ -417,6 +418,7 @@ + GLUE_NEW(GWorldPtr, GWorldObj_New, "Carbon.Qdoffs") + GLUE_CONVERT(GWorldPtr, GWorldObj_Convert, "Carbon.Qdoffs") + ++#ifndef __LP64__ + GLUE_NEW(Track, TrackObj_New, "Carbon.Qt") + GLUE_CONVERT(Track, TrackObj_Convert, "Carbon.Qt") + GLUE_NEW(Movie, MovieObj_New, "Carbon.Qt") +@@ -429,6 +431,7 @@ + GLUE_CONVERT(UserData, UserDataObj_Convert, "Carbon.Qt") + GLUE_NEW(Media, MediaObj_New, "Carbon.Qt") + GLUE_CONVERT(Media, MediaObj_Convert, "Carbon.Qt") ++#endif /* !__LP64__ */ + + GLUE_NEW(Handle, ResObj_New, "Carbon.Res") + GLUE_CONVERT(Handle, ResObj_Convert, "Carbon.Res") +--- Modules/_ctypes/libffi/src/darwin/ffitarget.h.orig 2006-05-26 07:58:05.000000000 +1000 ++++ Modules/_ctypes/libffi/src/darwin/ffitarget.h 2009-09-10 20:15:39.000000000 +1000 +@@ -4,7 +4,7 @@ + * created by configure). This makes is possible to build a univeral binary + * of ctypes in one go. + */ +-#if defined(__i386__) ++#if defined(__i386__) || defined(__x86_64__) + + #ifndef X86_DARWIN + #define X86_DARWIN +@@ -13,7 +13,7 @@ + + #include "../src/x86/ffitarget.h" + +-#elif defined(__ppc__) ++#elif defined(__ppc__) || defined(__ppc64__) + + #ifndef POWERPC_DARWIN + #define POWERPC_DARWIN +--- Mac/Modules/res/_Resmodule.c.orig 2005-07-04 06:59:44.000000000 +1000 ++++ Mac/Modules/res/_Resmodule.c 2009-09-10 20:44:43.000000000 +1000 +@@ -414,6 +414,7 @@ + return _res; + } + ++#ifndef __LP64__ + static PyObject *ResObj_as_Control(ResourceObject *_self, PyObject *_args) + { + PyObject *_res = NULL; +@@ -431,6 +432,7 @@ + return _res; + + } ++#endif /* !__LP64__ */ + + static PyObject *ResObj_LoadResource(ResourceObject *_self, PyObject *_args) + { +@@ -501,10 +503,12 @@ + PyDoc_STR("(long newSize) -> None")}, + {"GetNextFOND", (PyCFunction)ResObj_GetNextFOND, 1, + PyDoc_STR("() -> (Handle _rv)")}, ++#ifndef __LP64__ + {"as_Control", (PyCFunction)ResObj_as_Control, 1, + PyDoc_STR("Return this resource/handle as a Control")}, + {"as_Menu", (PyCFunction)ResObj_as_Menu, 1, + PyDoc_STR("Return this resource/handle as a Menu")}, ++#endif /* !__LP64__ */ + {"LoadResource", (PyCFunction)ResObj_LoadResource, 1, + PyDoc_STR("() -> None")}, + {"AutoDispose", (PyCFunction)ResObj_AutoDispose, 1, +@@ -1152,6 +1156,7 @@ + return _res; + } + ++#ifndef __LP64__ + static PyObject *Res_OpenRFPerm(PyObject *_self, PyObject *_args) + { + PyObject *_res = NULL; +@@ -1287,6 +1292,7 @@ + _res = Py_None; + return _res; + } ++#endif /* !__LP64__ */ + + static PyObject *Res_InsertResourceFile(PyObject *_self, PyObject *_args) + { +@@ -1327,6 +1333,7 @@ + return _res; + } + ++#ifndef __LP64__ + static PyObject *Res_FSpResourceFileAlreadyOpen(PyObject *_self, PyObject *_args) + { + PyObject *_res = NULL; +@@ -1413,6 +1420,7 @@ + nextRefNum); + return _res; + } ++#endif /* !__LP64__ */ + + static PyObject *Res_FSOpenResFile(PyObject *_self, PyObject *_args) + { +@@ -1438,6 +1446,7 @@ + return _res; + } + ++#ifndef __LP64__ + static PyObject *Res_FSCreateResFile(PyObject *_self, PyObject *_args) + { + PyObject *_res = NULL; +@@ -1534,6 +1543,7 @@ + PyMac_BuildFSSpec, &newSpec); + return _res; + } ++#endif /* !__LP64__ */ + + static PyObject *Res_FSOpenResourceFile(PyObject *_self, PyObject *_args) + { +@@ -1637,6 +1647,7 @@ + PyDoc_STR("(short refNum) -> (short _rv)")}, + {"SetResFileAttrs", (PyCFunction)Res_SetResFileAttrs, 1, + PyDoc_STR("(short refNum, short attrs) -> None")}, ++#ifndef __LP64__ + {"OpenRFPerm", (PyCFunction)Res_OpenRFPerm, 1, + PyDoc_STR("(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)")}, + {"HOpenResFile", (PyCFunction)Res_HOpenResFile, 1, +@@ -1647,10 +1658,12 @@ + PyDoc_STR("(FSSpec spec, SignedByte permission) -> (short _rv)")}, + {"FSpCreateResFile", (PyCFunction)Res_FSpCreateResFile, 1, + PyDoc_STR("(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None")}, ++#endif /* !__LP64__ */ + {"InsertResourceFile", (PyCFunction)Res_InsertResourceFile, 1, + PyDoc_STR("(SInt16 refNum, RsrcChainLocation where) -> None")}, + {"DetachResourceFile", (PyCFunction)Res_DetachResourceFile, 1, + PyDoc_STR("(SInt16 refNum) -> None")}, ++#ifndef __LP64__ + {"FSpResourceFileAlreadyOpen", (PyCFunction)Res_FSpResourceFileAlreadyOpen, 1, + PyDoc_STR("(FSSpec resourceFile) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, + {"FSpOpenOrphanResFile", (PyCFunction)Res_FSpOpenOrphanResFile, 1, +@@ -1659,14 +1672,17 @@ + PyDoc_STR("() -> (SInt16 refNum)")}, + {"GetNextResourceFile", (PyCFunction)Res_GetNextResourceFile, 1, + PyDoc_STR("(SInt16 curRefNum) -> (SInt16 nextRefNum)")}, ++#endif /* !__LP64__ */ + {"FSOpenResFile", (PyCFunction)Res_FSOpenResFile, 1, + PyDoc_STR("(FSRef ref, SignedByte permission) -> (short _rv)")}, ++#ifndef __LP64__ + {"FSCreateResFile", (PyCFunction)Res_FSCreateResFile, 1, + PyDoc_STR("(FSRef parentRef, Buffer nameLength) -> (FSRef newRef, FSSpec newSpec)")}, + {"FSResourceFileAlreadyOpen", (PyCFunction)Res_FSResourceFileAlreadyOpen, 1, + PyDoc_STR("(FSRef resourceFileRef) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, + {"FSCreateResourceFile", (PyCFunction)Res_FSCreateResourceFile, 1, + PyDoc_STR("(FSRef parentRef, Buffer nameLength, Buffer forkNameLength) -> (FSRef newRef, FSSpec newSpec)")}, ++#endif /* !__LP64__ */ + {"FSOpenResourceFile", (PyCFunction)Res_FSOpenResourceFile, 1, + PyDoc_STR("(FSRef ref, Buffer forkNameLength, SignedByte permissions) -> (SInt16 refNum)")}, + {"Handle", (PyCFunction)Res_Handle, 1, +--- Mac/Modules/MacOS.c.orig 2006-07-26 05:20:54.000000000 +1000 ++++ Mac/Modules/MacOS.c 2009-09-10 21:47:34.000000000 +1000 +@@ -54,7 +54,7 @@ + do_close(rfobject *self) + { + if (self->isclosed ) return; +- (void)FSClose(self->fRefNum); ++ (void)FSCloseFork(self->fRefNum); + self->isclosed = 1; + } + +@@ -68,6 +68,7 @@ + long n; + PyObject *v; + OSErr err; ++ ByteCount n2; + + if (self->isclosed) { + PyErr_SetString(PyExc_ValueError, "Operation on closed file"); +@@ -81,13 +82,13 @@ + if (v == NULL) + return NULL; + +- err = FSRead(self->fRefNum, &n, PyString_AsString(v)); ++ err = FSReadFork(self->fRefNum, fsAtMark, 0, n, PyString_AsString(v), &n2); + if (err && err != eofErr) { + PyMac_Error(err); + Py_DECREF(v); + return NULL; + } +- _PyString_Resize(&v, n); ++ _PyString_Resize(&v, n2); + return v; + } + +@@ -109,7 +110,7 @@ + } + if (!PyArg_ParseTuple(args, "s#", &buffer, &size)) + return NULL; +- err = FSWrite(self->fRefNum, &size, buffer); ++ err = FSWriteFork(self->fRefNum, fsAtMark, 0, size, buffer, NULL); + if (err) { + PyMac_Error(err); + return NULL; +@@ -126,9 +127,9 @@ + static PyObject * + rf_seek(rfobject *self, PyObject *args) + { +- long amount, pos; ++ long amount; + int whence = SEEK_SET; +- long eof; ++ int mode; + OSErr err; + + if (self->isclosed) { +@@ -138,35 +139,23 @@ + if (!PyArg_ParseTuple(args, "l|i", &amount, &whence)) + return NULL; + +- if ((err = GetEOF(self->fRefNum, &eof))) +- goto ioerr; +- + switch (whence) { + case SEEK_CUR: +- if ((err = GetFPos(self->fRefNum, &pos))) +- goto ioerr; ++ mode = fsFromMark; + break; + case SEEK_END: +- pos = eof; ++ mode = fsFromLEOF; + break; + case SEEK_SET: +- pos = 0; ++ mode = fsFromStart; + break; + default: + PyErr_BadArgument(); + return NULL; + } + +- pos += amount; +- +- /* Don't bother implementing seek past EOF */ +- if (pos > eof || pos < 0) { +- PyErr_BadArgument(); +- return NULL; +- } +- +- if ((err = SetFPos(self->fRefNum, fsFromStart, pos)) ) { +-ioerr: ++ err = FSSetForkPosition(self->fRefNum, mode, amount); ++ if (err != noErr) { + PyMac_Error(err); + return NULL; + } +@@ -182,7 +171,7 @@ + static PyObject * + rf_tell(rfobject *self, PyObject *args) + { +- long where; ++ long long where; + OSErr err; + + if (self->isclosed) { +@@ -191,11 +180,13 @@ + } + if (!PyArg_ParseTuple(args, "")) + return NULL; +- if ((err = GetFPos(self->fRefNum, &where)) ) { ++ ++ err = FSGetForkPosition(self->fRefNum, &where); ++ if (err != noErr) { + PyMac_Error(err); + return NULL; + } +- return PyInt_FromLong(where); ++ return PyLong_FromLongLong(where); + } + + static char rf_close__doc__[] = +@@ -292,17 +283,61 @@ + static PyObject * + MacOS_GetCreatorAndType(PyObject *self, PyObject *args) + { +- FSSpec fss; +- FInfo info; + PyObject *creator, *type, *res; + OSErr err; +- +- if (!PyArg_ParseTuple(args, "O&", PyMac_GetFSSpec, &fss)) ++ FSRef ref; ++ FSCatalogInfo cataloginfo; ++ FileInfo* finfo; ++ ++ if (!PyArg_ParseTuple(args, "O&", PyMac_GetFSRef, &ref)) { ++#ifndef __LP64__ ++ /* This function is documented to take an FSSpec as well, ++ * which only works in 32-bit mode. ++ */ ++ PyErr_Clear(); ++ FSSpec fss; ++ FInfo info; ++ ++ if (!PyArg_ParseTuple(args, "O&", PyMac_GetFSSpec, &fss)) ++ return NULL; ++ ++ if ((err = FSpGetFInfo(&fss, &info)) != noErr) { ++ return PyErr_Mac(MacOS_Error, err); ++ } ++ creator = PyString_FromStringAndSize( ++ (char *)&info.fdCreator, 4); ++ type = PyString_FromStringAndSize((char *)&info.fdType, 4); ++ res = Py_BuildValue("OO", creator, type); ++ Py_DECREF(creator); ++ Py_DECREF(type); ++ return res; ++#else /* __LP64__ */ ++ return NULL; ++#endif /* __LP64__ */ ++ } ++ ++ err = FSGetCatalogInfo(&ref, ++ kFSCatInfoFinderInfo|kFSCatInfoNodeFlags, &cataloginfo, ++ NULL, NULL, NULL); ++ if (err != noErr) { ++ PyErr_Mac(MacOS_Error, err); + return NULL; +- if ((err = FSpGetFInfo(&fss, &info)) != noErr) +- return PyErr_Mac(MacOS_Error, err); +- creator = PyString_FromStringAndSize((char *)&info.fdCreator, 4); +- type = PyString_FromStringAndSize((char *)&info.fdType, 4); ++ } ++ ++ if ((cataloginfo.nodeFlags & kFSNodeIsDirectoryMask) != 0) { ++ /* Directory: doesn't have type/creator info. ++ * ++ * The specific error code is for backward compatibility with ++ * earlier versions. ++ */ ++ PyErr_Mac(MacOS_Error, fnfErr); ++ return NULL; ++ ++ } ++ finfo = (FileInfo*)&(cataloginfo.finderInfo); ++ creator = PyString_FromStringAndSize((char*)&(finfo->fileCreator), 4); ++ type = PyString_FromStringAndSize((char*)&(finfo->fileType), 4); ++ + res = Py_BuildValue("OO", creator, type); + Py_DECREF(creator); + Py_DECREF(type); +@@ -314,20 +349,66 @@ + static PyObject * + MacOS_SetCreatorAndType(PyObject *self, PyObject *args) + { +- FSSpec fss; + ResType creator, type; +- FInfo info; ++ FSRef ref; ++ FileInfo* finfo; + OSErr err; +- ++ FSCatalogInfo cataloginfo; ++ + if (!PyArg_ParseTuple(args, "O&O&O&", ++ PyMac_GetFSRef, &ref, PyMac_GetOSType, &creator, PyMac_GetOSType, &type)) { ++#ifndef __LP64__ ++ /* Try to handle FSSpec arguments, for backward compatibility */ ++ FSSpec fss; ++ FInfo info; ++ ++ if (!PyArg_ParseTuple(args, "O&O&O&", + PyMac_GetFSSpec, &fss, PyMac_GetOSType, &creator, PyMac_GetOSType, &type)) ++ return NULL; ++ ++ if ((err = FSpGetFInfo(&fss, &info)) != noErr) ++ return PyErr_Mac(MacOS_Error, err); ++ ++ info.fdCreator = creator; ++ info.fdType = type; ++ ++ if ((err = FSpSetFInfo(&fss, &info)) != noErr) ++ return PyErr_Mac(MacOS_Error, err); ++ Py_INCREF(Py_None); ++ return Py_None; ++#else /* __LP64__ */ ++ return NULL; ++#endif /* __LP64__ */ ++ } ++ ++ err = FSGetCatalogInfo(&ref, ++ kFSCatInfoFinderInfo|kFSCatInfoNodeFlags, &cataloginfo, ++ NULL, NULL, NULL); ++ if (err != noErr) { ++ PyErr_Mac(MacOS_Error, err); + return NULL; +- if ((err = FSpGetFInfo(&fss, &info)) != noErr) +- return PyErr_Mac(MacOS_Error, err); +- info.fdCreator = creator; +- info.fdType = type; +- if ((err = FSpSetFInfo(&fss, &info)) != noErr) +- return PyErr_Mac(MacOS_Error, err); ++ } ++ ++ if ((cataloginfo.nodeFlags & kFSNodeIsDirectoryMask) != 0) { ++ /* Directory: doesn't have type/creator info. ++ * ++ * The specific error code is for backward compatibility with ++ * earlier versions. ++ */ ++ PyErr_Mac(MacOS_Error, fnfErr); ++ return NULL; ++ ++ } ++ finfo = (FileInfo*)&(cataloginfo.finderInfo); ++ finfo->fileCreator = creator; ++ finfo->fileType = type; ++ ++ err = FSSetCatalogInfo(&ref, kFSCatInfoFinderInfo, &cataloginfo); ++ if (err != noErr) { ++ PyErr_Mac(MacOS_Error, fnfErr); ++ return NULL; ++ } ++ + Py_INCREF(Py_None); + return Py_None; + } +@@ -399,6 +480,7 @@ + return Py_BuildValue("s", buf); + } + ++#ifndef __LP64__ + static char splash_doc[] = "Open a splash-screen dialog by resource-id (0=close)"; + + static PyObject * +@@ -470,6 +552,7 @@ + Py_INCREF(Py_None); + return Py_None; + } ++#endif /* !__LP64__ */ + + static char WMAvailable_doc[] = + "True if this process can interact with the display." +@@ -530,17 +613,18 @@ + { + OSErr err; + char *mode = "r"; +- FSSpec fss; +- SignedByte permission = 1; ++ FSRef ref; ++ SInt8 permission = fsRdPerm; + rfobject *fp; ++ HFSUniStr255 name; + +- if (!PyArg_ParseTuple(args, "O&|s", PyMac_GetFSSpec, &fss, &mode)) ++ if (!PyArg_ParseTuple(args, "O&|s", PyMac_GetFSRef, &ref, &mode)) + return NULL; + while (*mode) { + switch (*mode++) { + case '*': break; +- case 'r': permission = 1; break; +- case 'w': permission = 2; break; ++ case 'r': permission = fsRdPerm; break; ++ case 'w': permission = fsWrPerm; break; + case 'b': break; + default: + PyErr_BadArgument(); +@@ -548,33 +632,18 @@ + } + } + +- if ( (fp = newrfobject()) == NULL ) ++ err = FSGetResourceForkName(&name); ++ if (err != noErr) { ++ PyMac_Error(err); + return NULL; ++ } + +- err = HOpenRF(fss.vRefNum, fss.parID, fss.name, permission, &fp->fRefNum); ++ if ( (fp = newrfobject()) == NULL ) ++ return NULL; ++ + +- if ( err == fnfErr ) { +- /* In stead of doing complicated things here to get creator/type +- ** correct we let the standard i/o library handle it +- */ +- FILE *tfp; +- char pathname[PATHNAMELEN]; +- +- if ( (err=PyMac_GetFullPathname(&fss, pathname, PATHNAMELEN)) ) { +- PyMac_Error(err); +- Py_DECREF(fp); +- return NULL; +- } +- +- if ( (tfp = fopen(pathname, "w")) == NULL ) { +- PyMac_Error(fnfErr); /* What else... */ +- Py_DECREF(fp); +- return NULL; +- } +- fclose(tfp); +- err = HOpenRF(fss.vRefNum, fss.parID, fss.name, permission, &fp->fRefNum); +- } +- if ( err ) { ++ err = FSOpenFork(&ref, name.length, name.unicode, permission, &fp->fRefNum); ++ if (err != noErr) { + Py_DECREF(fp); + PyMac_Error(err); + return NULL; +@@ -589,10 +658,12 @@ + {"SetCreatorAndType", MacOS_SetCreatorAndType, 1, setcrtp_doc}, + {"GetErrorString", MacOS_GetErrorString, 1, geterr_doc}, + {"openrf", MacOS_openrf, 1, openrf_doc}, ++#ifndef __LP64__ + {"splash", MacOS_splash, 1, splash_doc}, + {"DebugStr", MacOS_DebugStr, 1, DebugStr_doc}, +- {"GetTicks", MacOS_GetTicks, 1, GetTicks_doc}, + {"SysBeep", MacOS_SysBeep, 1, SysBeep_doc}, ++#endif /* !__LP64__ */ ++ {"GetTicks", MacOS_GetTicks, 1, GetTicks_doc}, + {"WMAvailable", MacOS_WMAvailable, 1, WMAvailable_doc}, + {NULL, NULL} /* Sentinel */ + }; +--- Mac/Modules/file/_Filemodule.c.orig 2006-05-29 07:57:35.000000000 +1000 ++++ Mac/Modules/file/_Filemodule.c 2009-09-10 22:48:47.000000000 +1000 +@@ -18,9 +18,11 @@ + #include + + #ifdef USE_TOOLBOX_OBJECT_GLUE ++#ifndef __LP64__ + extern int _PyMac_GetFSSpec(PyObject *v, FSSpec *spec); +-extern int _PyMac_GetFSRef(PyObject *v, FSRef *fsr); + extern PyObject *_PyMac_BuildFSSpec(FSSpec *spec); ++#endif /* !__LP64__ */ ++extern int _PyMac_GetFSRef(PyObject *v, FSRef *fsr); + extern PyObject *_PyMac_BuildFSRef(FSRef *spec); + + #define PyMac_GetFSSpec _PyMac_GetFSSpec +@@ -28,20 +30,26 @@ + #define PyMac_BuildFSSpec _PyMac_BuildFSSpec + #define PyMac_BuildFSRef _PyMac_BuildFSRef + #else ++#ifndef __LP64__ + extern int PyMac_GetFSSpec(PyObject *v, FSSpec *spec); +-extern int PyMac_GetFSRef(PyObject *v, FSRef *fsr); + extern PyObject *PyMac_BuildFSSpec(FSSpec *spec); ++#endif /* !__LP64__ */ ++extern int PyMac_GetFSRef(PyObject *v, FSRef *fsr); + extern PyObject *PyMac_BuildFSRef(FSRef *spec); + #endif + + /* Forward declarations */ ++#ifndef __LP64__ + static PyObject *FInfo_New(FInfo *itself); +-static PyObject *FSRef_New(FSRef *itself); + static PyObject *FSSpec_New(FSSpec *itself); ++#define FSSpec_Convert PyMac_GetFSSpec ++#endif /* !__LP64__ */ ++static PyObject *FSRef_New(FSRef *itself); + static PyObject *Alias_New(AliasHandle itself); ++#ifndef __LP64__ + static int FInfo_Convert(PyObject *v, FInfo *p_itself); ++#endif /* !__LP64__ */ + #define FSRef_Convert PyMac_GetFSRef +-#define FSSpec_Convert PyMac_GetFSSpec + static int Alias_Convert(PyObject *v, AliasHandle *p_itself); + + /* +@@ -62,6 +70,7 @@ + /* + ** Optional fsspec and fsref pointers. None will pass NULL + */ ++#ifndef __LP64__ + static int + myPyMac_GetOptFSSpecPtr(PyObject *v, FSSpec **spec) + { +@@ -71,6 +80,7 @@ + } + return PyMac_GetFSSpec(v, *spec); + } ++#endif /* !__LP64__ */ + + static int + myPyMac_GetOptFSRefPtr(PyObject *v, FSRef **ref) +@@ -92,6 +102,7 @@ + return Py_BuildValue("u#", itself->unicode, itself->length); + } + ++#ifndef __LP64__ + static OSErr + _PyMac_GetFullPathname(FSSpec *fss, char *path, int len) + { +@@ -135,6 +146,7 @@ + } + return 0; + } ++#endif /* !__LP64__ */ + + + static PyObject *File_Error; +@@ -282,12 +294,28 @@ + + static PyObject *FSCatalogInfo_get_permissions(FSCatalogInfoObject *self, void *closure) + { +- return Py_BuildValue("(llll)", self->ob_itself.permissions[0], self->ob_itself.permissions[1], self->ob_itself.permissions[2], self->ob_itself.permissions[3]); ++ FSPermissionInfo* info = (FSPermissionInfo*)&(self->ob_itself.permissions); ++ return Py_BuildValue("(llll)", info->userID, info->groupID, info->userAccess, info->mode); + } + + static int FSCatalogInfo_set_permissions(FSCatalogInfoObject *self, PyObject *v, void *closure) + { +- return PyArg_Parse(v, "(llll)", &self->ob_itself.permissions[0], &self->ob_itself.permissions[1], &self->ob_itself.permissions[2], &self->ob_itself.permissions[3])-1; ++ long userID; ++ long groupID; ++ long userAccess; ++ long mode; ++ int r; ++ ++ FSPermissionInfo* info = (FSPermissionInfo*)&(self->ob_itself.permissions); ++ ++ r = PyArg_Parse(v, "(llll)", &userID, &groupID, &userAccess, &mode); ++ if (!r) { ++ return -1; ++ } ++ info->userID = userID; ++ info->groupID = groupID; ++ info->userAccess = userAccess; ++ info->mode = mode; + return 0; + } + +@@ -501,6 +529,7 @@ + + /* ----------------------- Object type FInfo ------------------------ */ + ++#ifndef __LP64__ + static PyTypeObject FInfo_Type; + + #define FInfo_Check(x) ((x)->ob_type == &FInfo_Type || PyObject_TypeCheck((x), &FInfo_Type)) +@@ -682,6 +711,7 @@ + FInfo_tp_free, /* tp_free */ + }; + ++#endif /* !__LP64__ */ + /* --------------------- End object type FInfo ---------------------- */ + + +@@ -729,6 +759,7 @@ + self->ob_type->tp_free((PyObject *)self); + } + ++#ifndef __LP64__ + static PyObject *Alias_ResolveAlias(AliasObject *_self, PyObject *_args) + { + PyObject *_res = NULL; +@@ -818,6 +849,7 @@ + wasChanged); + return _res; + } ++#endif /* !__LP64__ */ + + static PyObject *Alias_FSResolveAliasWithMountFlags(AliasObject *_self, PyObject *_args) + { +@@ -891,6 +923,7 @@ + } + + static PyMethodDef Alias_methods[] = { ++#ifndef __LP64__ + {"ResolveAlias", (PyCFunction)Alias_ResolveAlias, 1, + PyDoc_STR("(FSSpec fromFile) -> (FSSpec target, Boolean wasChanged)")}, + {"GetAliasInfo", (PyCFunction)Alias_GetAliasInfo, 1, +@@ -899,6 +932,7 @@ + PyDoc_STR("(FSSpec fromFile, unsigned long mountFlags) -> (FSSpec target, Boolean wasChanged)")}, + {"FollowFinderAlias", (PyCFunction)Alias_FollowFinderAlias, 1, + PyDoc_STR("(FSSpec fromFile, Boolean logon) -> (FSSpec target, Boolean wasChanged)")}, ++#endif /* !__LP64__ */ + {"FSResolveAliasWithMountFlags", (PyCFunction)Alias_FSResolveAliasWithMountFlags, 1, + PyDoc_STR("(FSRef fromFile, unsigned long mountFlags) -> (FSRef target, Boolean wasChanged)")}, + {"FSResolveAlias", (PyCFunction)Alias_FSResolveAlias, 1, +@@ -1033,6 +1067,7 @@ + + + /* ----------------------- Object type FSSpec ----------------------- */ ++#ifndef __LP64__ + + static PyTypeObject FSSpec_Type; + +@@ -1488,6 +1523,7 @@ + FSSpec_tp_free, /* tp_free */ + }; + ++#endif /* !__LP64__ */ + /* --------------------- End object type FSSpec --------------------- */ + + +@@ -1568,7 +1604,9 @@ + FSCatalogInfoBitmap whichInfo; + FSCatalogInfo catalogInfo; + FSRef newRef; ++#ifndef __LP64__ + FSSpec newSpec; ++#endif /* !__LP64__ */ + if (!PyArg_ParseTuple(_args, "u#lO&", + &nameLength__in__, &nameLength__in_len__, + &whichInfo, +@@ -1580,11 +1618,20 @@ + whichInfo, + &catalogInfo, + &newRef, +- &newSpec); ++#ifndef __LP64__ ++ &newSpec ++#else ++ NULL ++#endif /* !__LP64__ */ ++ ); + if (_err != noErr) return PyMac_Error(_err); ++#ifndef __LP64__ + _res = Py_BuildValue("O&O&", + FSRef_New, &newRef, + FSSpec_New, &newSpec); ++#else ++ _res = Py_BuildValue("O&O", FSRef_New, &newRef, Py_None); ++#endif /* !__LP64__ */ + return _res; + } + +@@ -1598,7 +1645,9 @@ + FSCatalogInfoBitmap whichInfo; + FSCatalogInfo catalogInfo; + FSRef newRef; ++#ifndef __LP64__ + FSSpec newSpec; ++#endif /* !__LP64__ */ + UInt32 newDirID; + if (!PyArg_ParseTuple(_args, "u#lO&", + &nameLength__in__, &nameLength__in_len__, +@@ -1611,13 +1660,25 @@ + whichInfo, + &catalogInfo, + &newRef, ++#ifndef __LP64__ + &newSpec, ++#else ++ NULL, ++#endif /* !__LP64__ */ + &newDirID); + if (_err != noErr) return PyMac_Error(_err); ++ ++#ifndef __LP64__ + _res = Py_BuildValue("O&O&l", + FSRef_New, &newRef, + FSSpec_New, &newSpec, + newDirID); ++#else ++ _res = Py_BuildValue("O&Ol", ++ FSRef_New, &newRef, ++ Py_None, ++ newDirID); ++#endif /* !__LP64__ */ + return _res; + } + +@@ -1699,7 +1760,9 @@ + FSCatalogInfoBitmap whichInfo; + FSCatalogInfo catalogInfo; + HFSUniStr255 outName; ++#ifndef __LP64__ + FSSpec fsSpec; ++#endif /* !__LP64__ */ + FSRef parentRef; + if (!PyArg_ParseTuple(_args, "l", + &whichInfo)) +@@ -1708,14 +1771,26 @@ + whichInfo, + &catalogInfo, + &outName, ++#ifndef __LP64__ + &fsSpec, ++#else ++ NULL, ++#endif /* !__LP64__ */ + &parentRef); + if (_err != noErr) return PyMac_Error(_err); ++#ifndef __LP64__ + _res = Py_BuildValue("O&O&O&O&", + FSCatalogInfo_New, &catalogInfo, + PyMac_BuildHFSUniStr255, &outName, + FSSpec_New, &fsSpec, + FSRef_New, &parentRef); ++#else ++ _res = Py_BuildValue("O&O&OO&", ++ FSCatalogInfo_New, &catalogInfo, ++ PyMac_BuildHFSUniStr255, &outName, ++ Py_None, ++ FSRef_New, &parentRef); ++#endif /* !__LP64__ */ + return _res; + } + +@@ -1784,7 +1859,7 @@ + UniCharCount forkNameLength__len__; + int forkNameLength__in_len__; + SInt8 permissions; +- SInt16 forkRefNum; ++ FSIORefNum forkRefNum; + if (!PyArg_ParseTuple(_args, "u#b", + &forkNameLength__in__, &forkNameLength__in_len__, + &permissions)) +@@ -2034,7 +2109,7 @@ + + /* --------------------- End object type FSRef ---------------------- */ + +- ++#ifndef __LP64__ + static PyObject *File_UnmountVol(PyObject *_self, PyObject *_args) + { + PyObject *_res = NULL; +@@ -2562,6 +2637,7 @@ + FSSpec_New, &spec); + return _res; + } ++#endif /* !__LP64__ */ + + static PyObject *File_FSGetForkPosition(PyObject *_self, PyObject *_args) + { +@@ -2785,6 +2861,7 @@ + return _res; + } + ++#ifndef __LP64__ + static PyObject *File_NewAlias(PyObject *_self, PyObject *_args) + { + PyObject *_res = NULL; +@@ -2933,6 +3010,7 @@ + wasAliased); + return _res; + } ++#endif /* !__LP64__ */ + + static PyObject *File_FSNewAlias(PyObject *_self, PyObject *_args) + { +@@ -3050,6 +3128,7 @@ + } + + static PyMethodDef File_methods[] = { ++#ifndef __LP64__ + {"UnmountVol", (PyCFunction)File_UnmountVol, 1, + PyDoc_STR("(Str63 volName, short vRefNum) -> None")}, + {"FlushVol", (PyCFunction)File_FlushVol, 1, +@@ -3100,6 +3179,7 @@ + PyDoc_STR("(short vRefNum, long dirID, Str255 oldName, long newDirID, Str255 newName) -> None")}, + {"FSMakeFSSpec", (PyCFunction)File_FSMakeFSSpec, 1, + PyDoc_STR("(short vRefNum, long dirID, Str255 fileName) -> (FSSpec spec)")}, ++#endif /* !__LP64__ */ + {"FSGetForkPosition", (PyCFunction)File_FSGetForkPosition, 1, + PyDoc_STR("(SInt16 forkRefNum) -> (SInt64 position)")}, + {"FSSetForkPosition", (PyCFunction)File_FSSetForkPosition, 1, +@@ -3124,6 +3204,7 @@ + PyDoc_STR("(UInt8 * path, FNMessage message, OptionBits flags) -> None")}, + {"FNNotifyAll", (PyCFunction)File_FNNotifyAll, 1, + PyDoc_STR("(FNMessage message, OptionBits flags) -> None")}, ++#ifndef __LP64__ + {"NewAlias", (PyCFunction)File_NewAlias, 1, + PyDoc_STR("(FSSpec fromFile, FSSpec target) -> (AliasHandle alias)")}, + {"NewAliasMinimalFromFullPath", (PyCFunction)File_NewAliasMinimalFromFullPath, 1, +@@ -3136,6 +3217,7 @@ + PyDoc_STR("(FSSpec fromFile, FSSpec target, AliasHandle alias) -> (Boolean wasChanged)")}, + {"ResolveAliasFileWithMountFlagsNoUI", (PyCFunction)File_ResolveAliasFileWithMountFlagsNoUI, 1, + PyDoc_STR("(FSSpec theSpec, Boolean resolveAliasChains, unsigned long mountFlags) -> (FSSpec theSpec, Boolean targetIsFolder, Boolean wasAliased)")}, ++#endif /* !__LP64__ */ + {"FSNewAlias", (PyCFunction)File_FSNewAlias, 1, + PyDoc_STR("(FSRef fromFile, FSRef target) -> (AliasHandle inAlias)")}, + {"FSResolveAliasFileWithMountFlags", (PyCFunction)File_FSResolveAliasFileWithMountFlags, 1, +@@ -3150,7 +3232,7 @@ + }; + + +- ++#ifndef __LP64__ + int + PyMac_GetFSSpec(PyObject *v, FSSpec *spec) + { +@@ -3188,12 +3270,15 @@ + } + return 0; + } ++#endif /* !__LP64__ */ + + int + PyMac_GetFSRef(PyObject *v, FSRef *fsr) + { + OSStatus err; ++#ifndef __LP64__ + FSSpec fss; ++#endif /* !__LP64__ */ + + if (FSRef_Check(v)) { + *fsr = ((FSRefObject *)v)->ob_itself; +@@ -3211,6 +3296,7 @@ + return !err; + } + /* XXXX Should try unicode here too */ ++#ifndef __LP64__ + /* Otherwise we try to go via an FSSpec */ + if (FSSpec_Check(v)) { + fss = ((FSSpecObject *)v)->ob_itself; +@@ -3219,15 +3305,18 @@ + PyMac_Error(err); + return 0; + } ++#endif /* !__LP64__ */ + PyErr_SetString(PyExc_TypeError, "FSRef, FSSpec or pathname required"); + return 0; + } + ++#ifndef __LP64__ + extern PyObject * + PyMac_BuildFSSpec(FSSpec *spec) + { + return FSSpec_New(spec); + } ++#endif /* !__LP64__ */ + + extern PyObject * + PyMac_BuildFSRef(FSRef *spec) +@@ -3242,10 +3331,11 @@ + PyObject *d; + + +- ++#ifndef __LP64__ + PyMac_INIT_TOOLBOX_OBJECT_NEW(FSSpec *, PyMac_BuildFSSpec); +- PyMac_INIT_TOOLBOX_OBJECT_NEW(FSRef *, PyMac_BuildFSRef); + PyMac_INIT_TOOLBOX_OBJECT_CONVERT(FSSpec, PyMac_GetFSSpec); ++#endif /* !__LP64__ */ ++ PyMac_INIT_TOOLBOX_OBJECT_NEW(FSRef *, PyMac_BuildFSRef); + PyMac_INIT_TOOLBOX_OBJECT_CONVERT(FSRef, PyMac_GetFSRef); + + +@@ -3262,6 +3352,7 @@ + /* Backward-compatible name */ + Py_INCREF(&FSCatalogInfo_Type); + PyModule_AddObject(m, "FSCatalogInfoType", (PyObject *)&FSCatalogInfo_Type); ++#ifndef __LP64__ + FInfo_Type.ob_type = &PyType_Type; + if (PyType_Ready(&FInfo_Type) < 0) return; + Py_INCREF(&FInfo_Type); +@@ -3269,6 +3360,7 @@ + /* Backward-compatible name */ + Py_INCREF(&FInfo_Type); + PyModule_AddObject(m, "FInfoType", (PyObject *)&FInfo_Type); ++#endif /* !__LP64__ */ + Alias_Type.ob_type = &PyType_Type; + if (PyType_Ready(&Alias_Type) < 0) return; + Py_INCREF(&Alias_Type); +@@ -3276,6 +3368,7 @@ + /* Backward-compatible name */ + Py_INCREF(&Alias_Type); + PyModule_AddObject(m, "AliasType", (PyObject *)&Alias_Type); ++#ifndef __LP64__ + FSSpec_Type.ob_type = &PyType_Type; + if (PyType_Ready(&FSSpec_Type) < 0) return; + Py_INCREF(&FSSpec_Type); +@@ -3283,6 +3376,7 @@ + /* Backward-compatible name */ + Py_INCREF(&FSSpec_Type); + PyModule_AddObject(m, "FSSpecType", (PyObject *)&FSSpec_Type); ++#endif /* !__LP64__ */ + FSRef_Type.ob_type = &PyType_Type; + if (PyType_Ready(&FSRef_Type) < 0) return; + Py_INCREF(&FSRef_Type); +Index: Lib/plat-mac/macresource.py +=================================================================== +--- Lib/plat-mac/macresource.py (revision 74680) ++++ Lib/plat-mac/macresource.py (revision 74681) +@@ -79,8 +79,8 @@ + AppleSingle file""" + try: + refno = Res.FSpOpenResFile(pathname, 1) +- except Res.Error, arg: +- if arg[0] in (-37, -39): ++ except (AttributeError, Res.Error), arg: ++ if isinstance(arg, AttributeError) or arg[0] in (-37, -39): + # No resource fork. We may be on OSX, and this may be either + # a data-fork based resource file or a AppleSingle file + # from the CVS repository. +@@ -106,8 +106,8 @@ + try: + refno = Res.FSpOpenResFile(pathname, 1) + Res.CloseResFile(refno) +- except Res.Error, arg: +- if arg[0] in (-37, -39): ++ except (AttributeError, Res.Error), arg: ++ if isinstance(arg, AttributeError) or arg[0] in (-37, -39): + # No resource fork. We may be on OSX, and this may be either + # a data-fork based resource file or a AppleSingle file + # from the CVS repository. +Index: Lib/plat-mac/applesingle.py +=================================================================== +--- Lib/plat-mac/applesingle.py (revision 74680) ++++ Lib/plat-mac/applesingle.py (revision 74681) +@@ -119,8 +119,13 @@ + if not hasattr(infile, 'read'): + if isinstance(infile, Carbon.File.Alias): + infile = infile.ResolveAlias()[0] +- if isinstance(infile, (Carbon.File.FSSpec, Carbon.File.FSRef)): +- infile = infile.as_pathname() ++ ++ if hasattr(Carbon.File, "FSSpec"): ++ if isinstance(infile, (Carbon.File.FSSpec, Carbon.File.FSRef)): ++ infile = infile.as_pathname() ++ else: ++ if isinstance(infile, Carbon.File.FSRef): ++ infile = infile.as_pathname() + infile = open(infile, 'rb') + + asfile = AppleSingle(infile, verbose=verbose) +Index: Mac/scripts/BuildApplet.py +=================================================================== +--- Mac/scripts/BuildApplet.py (revision 74680) ++++ Mac/scripts/BuildApplet.py (revision 74681) +@@ -12,7 +12,10 @@ + + import os + import MacOS +-import EasyDialogs ++try: ++ import EasyDialogs ++except ImportError: ++ EasyDialogs = None + import buildtools + import getopt + +@@ -32,7 +35,10 @@ + try: + buildapplet() + except buildtools.BuildError, detail: +- EasyDialogs.Message(detail) ++ if EasyDialogs is None: ++ print detail ++ else: ++ EasyDialogs.Message(detail) + + + def buildapplet(): +@@ -46,6 +52,10 @@ + # Ask for source text if not specified in sys.argv[1:] + + if not sys.argv[1:]: ++ if EasyDialogs is None: ++ usage() ++ sys.exit(1) ++ + filename = EasyDialogs.AskFileForOpen(message='Select Python source or applet:', + typeList=('TEXT', 'APPL')) + if not filename: +Index: Lib/plat-mac/buildtools.py +=================================================================== +--- Lib/plat-mac/buildtools.py (revision 74680) ++++ Lib/plat-mac/buildtools.py (revision 74681) +@@ -15,7 +15,10 @@ + import MacOS + import macostools + import macresource +-import EasyDialogs ++try: ++ import EasyDialogs ++except ImportError: ++ EasyDialogs = None + import shutil + + +@@ -67,9 +70,13 @@ + rsrcname=None, others=[], raw=0, progress="default", destroot=""): + + if progress == "default": +- progress = EasyDialogs.ProgressBar("Processing %s..."%os.path.split(filename)[1], 120) +- progress.label("Compiling...") +- progress.inc(0) ++ if EasyDialogs is None: ++ print "Compiling %s"%(os.path.split(filename)[1],) ++ process = None ++ else: ++ progress = EasyDialogs.ProgressBar("Processing %s..."%os.path.split(filename)[1], 120) ++ progress.label("Compiling...") ++ progress.inc(0) + # check for the script name being longer than 32 chars. This may trigger a bug + # on OSX that can destroy your sourcefile. + if '#' in os.path.split(filename)[1]: +@@ -119,7 +126,11 @@ + if MacOS.runtimemodel == 'macho': + raise BuildError, "No updating yet for MachO applets" + if progress: +- progress = EasyDialogs.ProgressBar("Updating %s..."%os.path.split(filename)[1], 120) ++ if EasyDialogs is None: ++ print "Updating %s"%(os.path.split(filename)[1],) ++ progress = None ++ else: ++ progress = EasyDialogs.ProgressBar("Updating %s..."%os.path.split(filename)[1], 120) + else: + progress = None + if not output: diff --git a/pythonbrew/patches/macosx/python25/files/patch-FSIORefNum.diff b/pythonbrew/patches/macosx/python25/files/patch-FSIORefNum.diff new file mode 100644 index 0000000..6f8ac66 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/patch-FSIORefNum.diff @@ -0,0 +1,11 @@ +--- 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/files/patch-Lib-cgi.py.diff b/pythonbrew/patches/macosx/python25/files/patch-Lib-cgi.py.diff new file mode 100644 index 0000000..1e27ee8 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/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.5 + +-# 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/python25/files/patch-Lib-distutils-dist.py.diff b/pythonbrew/patches/macosx/python25/files/patch-Lib-distutils-dist.py.diff new file mode 100644 index 0000000..961a8ad --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/patch-Lib-distutils-dist.py.diff @@ -0,0 +1,51 @@ +--- Lib/distutils/dist.py.orig 2005-03-23 11:54:36.000000000 -0700 ++++ Lib/distutils/dist.py 2008-07-25 21:27:15.000000000 -0600 +@@ -57,6 +57,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 +@@ -264,6 +265,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__ () +@@ -324,6 +331,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() +@@ -343,7 +353,7 @@ + user_filename = "pydistutils.cfg" + + # And look for the user config file +- if os.environ.has_key('HOME'): ++ if self.want_user_cfg and os.environ.has_key('HOME'): + user_file = os.path.join(os.environ.get('HOME'), user_filename) + if os.path.isfile(user_file): + files.append(user_file) +@@ -353,6 +363,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/python25/files/patch-Makefile.pre.in.diff b/pythonbrew/patches/macosx/python25/files/patch-Makefile.pre.in.diff new file mode 100644 index 0000000..1ef8d7b --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/patch-Makefile.pre.in.diff @@ -0,0 +1,31 @@ +--- Makefile.pre.in.orig 2007-12-05 13:43:57.000000000 -0700 ++++ Makefile.pre.in 2008-07-25 21:41:02.000000000 -0600 +@@ -348,8 +348,8 @@ + # Build the shared modules + sharedmods: $(BUILDPYTHON) + case $$MAKEFLAGS in \ +- *-s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ +- *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ ++ *-s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q --no-user-cfg build;; \ ++ *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py --no-user-cfg build;; \ + esac + + # Build static library +@@ -894,7 +904,7 @@ + # Install the dynamically loadable modules + # This goes into $(exec_prefix) + sharedinstall: +- $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \ ++ $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py --no-user-cfg install \ + --prefix=$(prefix) \ + --install-scripts=$(BINDIR) \ + --install-platlib=$(DESTSHARED) \ +@@ -968,7 +978,7 @@ + # This installs a few of the useful scripts in Tools/scripts + scriptsinstall: + SRCDIR=$(srcdir) $(RUNSHARED) \ +- ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/setup.py install \ ++ ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/setup.py --no-user-cfg install \ + --prefix=$(prefix) \ + --install-scripts=$(BINDIR) \ + --root=/$(DESTDIR) diff --git a/pythonbrew/patches/macosx/python25/files/patch-Misc-setuid-prog.c.diff b/pythonbrew/patches/macosx/python25/files/patch-Misc-setuid-prog.c.diff new file mode 100644 index 0000000..0fee9e7 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/patch-Misc-setuid-prog.c.diff @@ -0,0 +1,16 @@ +--- 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/files/patch-Modules-posixmodule.c.diff b/pythonbrew/patches/macosx/python25/files/patch-Modules-posixmodule.c.diff new file mode 100644 index 0000000..c14913c --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/patch-Modules-posixmodule.c.diff @@ -0,0 +1,21 @@ +--- 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/files/patch-configure-arch_only.diff b/pythonbrew/patches/macosx/python25/files/patch-configure-arch_only.diff new file mode 100644 index 0000000..b0df6a4 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/patch-configure-arch_only.diff @@ -0,0 +1,20 @@ +--- configure.orig 2009-06-24 13:57:38.000000000 -0700 ++++ configure 2009-06-24 13:58:38.000000000 -0700 +@@ -11362,7 +11362,7 @@ + if test "${enable_universalsdk}"; then + : + else +- LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `arch`" ++ LIBTOOL_CRUFT="${LIBTOOL_CRUFT}" + fi + LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' + LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; +@@ -11374,7 +11374,7 @@ + else + LIBTOOL_CRUFT="" + fi +- LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only `arch`" ++ LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs" + LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' + LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; + esac diff --git a/pythonbrew/patches/macosx/python25/files/patch-configure-badcflags.diff b/pythonbrew/patches/macosx/python25/files/patch-configure-badcflags.diff new file mode 100644 index 0000000..8d26ebd --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/patch-configure-badcflags.diff @@ -0,0 +1,11 @@ +--- configure.orig 2008-10-15 18:00:59.000000000 -0700 ++++ configure 2008-10-15 18:02:47.000000000 -0700 +@@ -4538,7 +4538,7 @@ + ;; + # is there any other compiler on Darwin besides gcc? + Darwin*) +- BASECFLAGS="$BASECFLAGS -Wno-long-double -no-cpp-precomp -mno-fused-madd" ++ BASECFLAGS="$BASECFLAGS -mno-fused-madd" + if test "${enable_universalsdk}"; then + BASECFLAGS="-arch ppc -arch i386 -isysroot ${UNIVERSALSDK} ${BASECFLAGS}" + fi diff --git a/pythonbrew/patches/macosx/python25/files/patch-configure.diff b/pythonbrew/patches/macosx/python25/files/patch-configure.diff new file mode 100644 index 0000000..cc60be1 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/patch-configure.diff @@ -0,0 +1,28 @@ +--- 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/python25/files/patch-pyconfig.h.in.diff b/pythonbrew/patches/macosx/python25/files/patch-pyconfig.h.in.diff new file mode 100644 index 0000000..bd0ecd8 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/patch-pyconfig.h.in.diff @@ -0,0 +1,13 @@ +--- pyconfig.h.in.orig 2009-08-16 10:22:50.000000000 -0700 ++++ pyconfig.h.in 2009-08-16 10:23:24.000000000 -0700 +@@ -4,6 +4,10 @@ + #ifndef Py_PYCONFIG_H + #define Py_PYCONFIG_H + ++// Required on Darwin 10+ ++#ifndef _DARWIN_C_SOURCE ++#define _DARWIN_C_SOURCE ++#endif + + /* Define for AIX if your compiler is a genuine IBM xlC/xlC_r and you want + support for AIX C++ shared extension modules. */ diff --git a/pythonbrew/patches/macosx/python25/files/patch-setup.py.diff b/pythonbrew/patches/macosx/python25/files/patch-setup.py.diff new file mode 100644 index 0000000..2649594 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/patch-setup.py.diff @@ -0,0 +1,80 @@ +--- setup.py.orig 2008-10-16 12:58:19.000000000 -0600 ++++ setup.py 2009-06-07 20:55:17.000000000 -0600 +@@ -609,7 +609,7 @@ + # a release. Most open source OSes come with one or more + # versions of BerkeleyDB already installed. + +- max_db_ver = (4, 5) ++ max_db_ver = (4, 6) + # NOTE: while the _bsddb.c code links against BerkeleyDB 4.6.x + # we leave that version disabled by default as it has proven to be + # quite a buggy library release on many platforms. +@@ -636,6 +636,7 @@ + db_inc_paths.append('/usr/local/include/db4%d' % x) + db_inc_paths.append('/pkg/db-4.%d/include' % x) + db_inc_paths.append('/opt/db-4.%d/include' % x) ++ db_inc_paths.append('__PREFIX__/include/db4%d' % x) + # 3.x minor number specific paths + for x in (3,): + db_inc_paths.append('/usr/include/db3%d' % x) +@@ -711,6 +712,7 @@ + + # check lib directories parallel to the location of the header + db_dirs_to_check = [ ++ os.path.join('__PREFIX__', 'lib', 'db46'), + os.path.join(db_incdir, '..', 'lib64'), + os.path.join(db_incdir, '..', 'lib'), + os.path.join(db_incdir, '..', '..', 'lib64'), +@@ -1212,13 +1214,7 @@ + def detect_tkinter(self, inc_dirs, lib_dirs): + # The _tkinter module. + +- # Rather than complicate the code below, detecting and building +- # AquaTk is a separate method. Only one Tkinter will be built on +- # Darwin - either AquaTk, if it is found, or X11 based Tk. + platform = self.get_platform() +- if (platform == 'darwin' and +- self.detect_tkinter_darwin(inc_dirs, lib_dirs)): +- return + + # Assume we haven't found any of the libraries or include files + # The versions with dots are used on Unix, and the versions without +--- setup.py.orig 2009-09-10 19:41:32.000000000 +1000 ++++ setup.py 2009-09-10 19:48:30.000000000 +1000 +@@ -1197,7 +1197,7 @@ + # For 8.4a2, the X11 headers are not included. Rather than include a + # complicated search, this is a hard-coded path. It could bail out + # if X11 libs are not found... +- include_dirs.append('/usr/X11R6/include') ++ #include_dirs.append('/usr/X11R6/include') + frameworks = ['-framework', 'Tcl', '-framework', 'Tk'] + + ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'], +@@ -1262,17 +1262,17 @@ + if platform == 'sunos5': + include_dirs.append('/usr/openwin/include') + added_lib_dirs.append('/usr/openwin/lib') +- elif os.path.exists('/usr/X11R6/include'): +- include_dirs.append('/usr/X11R6/include') +- added_lib_dirs.append('/usr/X11R6/lib64') +- added_lib_dirs.append('/usr/X11R6/lib') +- elif os.path.exists('/usr/X11R5/include'): +- include_dirs.append('/usr/X11R5/include') +- added_lib_dirs.append('/usr/X11R5/lib') +- else: ++ #elif os.path.exists('/usr/X11R6/include'): ++ # include_dirs.append('/usr/X11R6/include') ++ # added_lib_dirs.append('/usr/X11R6/lib64') ++ # added_lib_dirs.append('/usr/X11R6/lib') ++ #elif os.path.exists('/usr/X11R5/include'): ++ # include_dirs.append('/usr/X11R5/include') ++ # added_lib_dirs.append('/usr/X11R5/lib') ++ #else: + # Assume default location for X11 +- include_dirs.append('/usr/X11/include') +- added_lib_dirs.append('/usr/X11/lib') ++ # include_dirs.append('/usr/X11/include') ++ # added_lib_dirs.append('/usr/X11/lib') + + # If Cygwin, then verify that X is installed before proceeding + if platform == 'cygwin': diff --git a/pythonbrew/patches/macosx/python25/files/pyconfig.ed b/pythonbrew/patches/macosx/python25/files/pyconfig.ed new file mode 100644 index 0000000..671d0d5 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/pyconfig.ed @@ -0,0 +1,2 @@ +g,.*\(HAVE_POLL[_A-Z]*\).*,s,,/* #undef \1 */, +w diff --git a/pythonbrew/patches/macosx/python25/files/python25 b/pythonbrew/patches/macosx/python25/files/python25 new file mode 100644 index 0000000..fbae300 --- /dev/null +++ b/pythonbrew/patches/macosx/python25/files/python25 @@ -0,0 +1,12 @@ +bin/python2.5 +bin/pythonw2.5 +bin/python2.5-config +bin/idle2.5 +bin/pydoc2.5 +bin/smtpd2.5.py +- +share/man/man1/python2.5.1.gz +${frameworks_dir}/Python.framework/Versions/2.5 +${frameworks_dir}/Python.framework/Versions/2.5/Headers +${frameworks_dir}/Python.framework/Versions/2.5/Resources +${frameworks_dir}/Python.framework/Versions/2.5/Python diff --git a/pythonbrew/util.py b/pythonbrew/util.py index 2c15242..12ffc20 100644 --- a/pythonbrew/util.py +++ b/pythonbrew/util.py @@ -1,13 +1,13 @@ import os -import sys import errno import shutil -import urllib import subprocess import re +import posixpath from pythonbrew.define import PATH_BIN, PATH_PYTHONS from pythonbrew.exceptions import BuildingException from pythonbrew.log import logger +import tarfile def size_format(b): kb = 1000 @@ -39,6 +39,18 @@ def is_archive_file(name): return True return False +def is_html(content_type): + if content_type and content_type.startswith('text/html'): + return True + return False + +def is_gzip(content_type, filename): + if (content_type == 'application/x-gzip' + or tarfile.is_tarfile(filename) + or splitext(filename)[1].lower() in ('.tar', '.tar.gz', '.tar.bz2', '.tgz', '.tbz')): + return True + return False + def makedirs(path): try: os.makedirs(path) @@ -73,7 +85,82 @@ def off(): continue unlink("%s/%s" % (root, f)) unlink("%s/current" % PATH_PYTHONS) - + +def split_leading_dir(path): + path = str(path) + path = path.lstrip('/').lstrip('\\') + if '/' in path and (('\\' in path and path.find('/') < path.find('\\')) + or '\\' not in path): + return path.split('/', 1) + elif '\\' in path: + return path.split('\\', 1) + else: + return path, '' + +def has_leading_dir(paths): + """Returns true if all the paths have the same leading path name + (i.e., everything is in one subdirectory in an archive)""" + common_prefix = None + for path in paths: + prefix, rest = split_leading_dir(path) + if not prefix: + return False + elif common_prefix is None: + common_prefix = prefix + elif prefix != common_prefix: + return False + return True + +def untar_file(filename, location): + if not os.path.exists(location): + makedirs(location) + if filename.lower().endswith('.gz') or filename.lower().endswith('.tgz'): + mode = 'r:gz' + elif filename.lower().endswith('.bz2') or filename.lower().endswith('.tbz'): + mode = 'r:bz2' + elif filename.lower().endswith('.tar'): + mode = 'r' + else: + logger.error('Cannot determine compression type for file %s' % filename) + mode = 'r:*' + tar = tarfile.open(filename, mode) + try: + # note: python<=2.5 doesnt seem to know about pax headers, filter them + leading = has_leading_dir([ + member.name for member in tar.getmembers() + if member.name != 'pax_global_header' + ]) + for member in tar.getmembers(): + fn = member.name + if fn == 'pax_global_header': + continue + if leading: + fn = split_leading_dir(fn)[1] + path = os.path.join(location, fn) + if member.isdir(): + if not os.path.exists(path): + os.makedirs(path) + else: + try: + fp = tar.extractfile(member) + except (KeyError, AttributeError), e: + # Some corrupt tar files seem to produce this + # (specifically bad symlinks) + logger.error('In the tar file %s the member %s is invalid: %s' + % (filename, member.name, e)) + continue + if not os.path.exists(os.path.dirname(path)): + os.makedirs(os.path.dirname(path)) + destfp = open(path, 'wb') + try: + shutil.copyfileobj(fp, destfp) + finally: + destfp.close() + os.chmod(path, member.mode) + fp.close() + finally: + tar.close() + class Subprocess(object): def __init__(self, log=None, shell=False, cwd=None, print_cmd=True): self._log = log @@ -108,4 +195,23 @@ class Package(object): else: self.name = "Python-%s" % name self.version = name + +class Link(object): + def __init__(self, url): + self._url = url + + @property + def filename(self): + url = self._url + url = url.split('#', 1)[0] + url = url.split('?', 1)[0] + url = url.rstrip('/') + name = posixpath.basename(url) + assert name, ('URL %r produced no filename' % url) + return name + + @property + def show_msg(self): + return posixpath.basename(self._url.split('#', 1)[0].split('?', 1)[0]) + \ No newline at end of file