diff --git a/Mac/OSX/Makefile.jaguar b/Mac/OSX/Makefile.jaguar
deleted file mode 100644
index 3510b72..0000000
--- a/Mac/OSX/Makefile.jaguar
+++ /dev/null
@@ -1,105 +0,0 @@
-# This Makefile, which should be run from the current directory, will build
-# a MacPython based on the /usr/bin/python installed by Apple as of 10.2.
-
-VERSION=2.2
-
-builddir = ../..
-srcdir = ../..
-dstroot=/.
-PYTHONAPPSPATH=/Applications/MacPython-OSX-$(VERSION)
-PYTHONAPPSDIR=$(dstroot)$(PYTHONAPPSPATH)
-prefix=/usr
-
-# These are normally computed form the previous ones
-osxdir=$(srcdir)/Mac/OSX
-PYTHON=$(prefix)/bin/python
-pythonw=$(prefix)/bin/pythonw
-LIBDEST=$(prefix)/lib/python$(VERSION)
-datadir=$(PYTHONAPPSDIR)/python-additions
-MACLIBDEST=$(datadir)/Lib
-MACDYNLIBDEST=$(datadir)/lib-dynload
-MACTOOLSDEST=$(datadir)/Tools
-APPNAME=Python
-APPBUNDLENAME=$(APPNAME).app
-INSTALLED_PYTHONW=$(datadir)/$(APPBUNDLENAME)/Contents/MacOS/$(APPNAME)
-
-# The usual stuff
-DIRMODE=755
-INSTALL=/usr/bin/install -c
-INSTALL_SYMLINK=ln -fs
-INSTALL_PROGRAM=${INSTALL}
-INSTALL_SCRIPT= ${INSTALL_PROGRAM}
-INSTALL_DATA=	${INSTALL} -m 644
-
-# These can be done as a normal user
-install: preflight install_dirs install_dynlib install_lib \
-	install_Python install_IDE install_IDLE install_BuildApplet \
-	install_PythonLauncher install_pythonw 
-	
-preflight:
-	@if test ! -w $(LIBDEST)/site-packages; then \
-		echo Please make directory $(LIBDEST)/site-packages writeable; \
-		exit 1; \
-	fi
-	@if grep "arch i386" $(LIBDEST)/config/Makefile >/dev/null; then \
-		echo Please edit $(LIBDEST)/config/Makefile, see README.JAGUAR; \
-		exit 1; \
-	fi
-	
-install_dirs:
-	$(INSTALL) -d -m $(DIRMODE) $(PYTHONAPPSDIR)
-	$(INSTALL) -d -m $(DIRMODE) $(datadir)
-	$(INSTALL) -d -m $(DIRMODE) $(MACDYNLIBDEST)
-	
-install_lib: Mac.jaguar.pth
-	$(MAKE) -f $(osxdir)/Makefile installmacsubtree \
-		LIBDEST=$(LIBDEST) MACLIBDEST=$(MACLIBDEST) MACTOOLSDEST=$(MACTOOLSDEST) \
-		builddir=$(builddir) srcdir=$(srcdir) PTHFILE=Mac.jaguar.pth \
-		PYTHON=$(PYTHON) compileall=$(LIBDEST)/compileall.py
-		
-Mac.jaguar.pth:
-	echo $(MACLIBDEST) > Mac.jaguar.pth
-	echo $(MACDYNLIBDEST) >> Mac.jaguar.pth
-##	echo "import macresource; macresource.open_error_resource()" >> Mac.jaguar.pth
-	
-install_dynlib:
-	$(PYTHON) $(osxdir)/setup.jaguar.py install --install-lib=$(MACDYNLIBDEST)
-	touch $(MACDYNLIBDEST)/OverrideFrom23/__init__.py
-		
-install_Python:
-	$(PYTHON) $(srcdir)/Mac/Lib/bundlebuilder.py -q --link-exec \
-		-b $(datadir) \
-		-n $(APPBUNDLENAME) \
-		-r $(srcdir)/Mac/OSXResources/app/Resources/Applet-Info.plist \
-		-r $(srcdir)/Mac/OSXResources/app/Resources/PythonApplet.icns \
-		-e $(PYTHON) \
-		build
-		
-install_IDE:
-	$(MAKE) -f $(osxdir)/Makefile install_IDE \
-		srcdir=$(srcdir) INSTALLED_PYTHONW=$(INSTALLED_PYTHONW) \
-		PYTHONAPPSDIR=$(PYTHONAPPSDIR)
-	
-install_IDLE:
-	$(MAKE) -f $(osxdir)/Makefile install_IDLE \
-		srcdir=$(srcdir) INSTALLED_PYTHONW=$(INSTALLED_PYTHONW) \
-		PYTHONAPPSDIR=$(PYTHONAPPSDIR)
-	
-install_BuildApplet:
-	$(MAKE) -f $(osxdir)/Makefile install_BuildApplet \
-		srcdir=$(srcdir) INSTALLED_PYTHONW=$(INSTALLED_PYTHONW) \
-		PYTHONAPPSDIR=$(PYTHONAPPSDIR)
-	
-install_PythonLauncher:
-	$(MAKE) -f $(osxdir)/Makefile install_PythonLauncher \
-		srcdir=$(srcdir) dstroot=$(dstroot) \
-		PYTHONAPPSPATH=$(PYTHONAPPSPATH)
-	
-install_pythonw:
-	@if test ! -w $(prefix)/bin; then \
-		echo Cannot write to $(prefix)/bin, use \"sudo make -f Makefile.jaguar install_pythonw\"; \
-		exit 1; \
-	fi
-	echo "#!/bin/sh" > pythonw.sh
-	echo "exec \"$(INSTALLED_PYTHONW)\" \"\$$@\"" >> pythonw.sh
-	$(INSTALL) pythonw.sh $(prefix)/bin/pythonw
diff --git a/Mac/OSX/README.JAGUAR b/Mac/OSX/README.JAGUAR
deleted file mode 100644
index f92326f..0000000
--- a/Mac/OSX/README.JAGUAR
+++ /dev/null
@@ -1,62 +0,0 @@
-Building a MacPython-OSX on top of Jaguar's /usr/bin/python
------------------------------------------------------------
-
-One way of getting MacPython functionality is to use the Python that Apple
-supplies since MacOSX 10.2, and extend this with the missing bits.
-
-(Another way is building a framework python, see Mac/OSX/README for
-details on that).
-
-Preparation
------------
-
-First of all you have to fix two things in the python distributed
-by Apple. This paragraph is valid for 10.2 through 10.2.2, so if you
-have a later version of Jaguar your mileage may vary.
-
-1. /usr/lib/python2.2/config/Makefile has an erronuous reference to
-   building for intel processors. Edit the file with sudo, and change
-   the line
-   LDFLAGS=        -arch i386 -arch ppc
-   to
-   LDFLAGS=        -arch ppc
-2. /usr/lib/python2.2/site-packages is not writeable except by root.
-   Make it writeable by administrators by doing
-   sudo chgrp admin /usr/lib/python2.2/site-packages
-   sudo chmod g+w /usr/lib/python2.2/site-packages
-   Alternatively you can do the make's below as superuser, but I
-   would advise against this.
-   
-Building
---------
-
-Typing "make -f Makefile.jaguar" will build and install almost everything you need.
-If you also want the "pythonw" unix program, which allows you to run GUI scripts from
-a Terminal window, you should also do "sudo make -f Makefile.jaguar install_pythonw".
-
-What do you get
----------------
-
-After the make you will have a folder /Applications/MacPython-OSX that contains the
-IDE and BuildApplet applications. Also, you will find a folder "python-additions" there
-that contains the MacPython-specific additions to your installed Python. The only thing
-that is installed outside the /Applications/MacPython-OSX folder is
-/usr/lib/python2.2/site-packages/MacPython.pth, which is the magic file that will make
-python find the new modules.
-
-Uninstalling
-------------
-1. Remove /Applications/MacPython-OSX
-2. Remove /usr/lib/python2.2/site-packages/MacPython.pth
-
-How does it work?
------------------
-
-Makefile.jaguar does most of the work by calling on Makefile (which is normally used
-to build the Mac extensions for a framework-based python) after setting various
-variables such that everything is built for /usr/bin/python. Some extension modules
-(that are included in framework python 2.3a0, but missing from static python 2.2)
-are built with setup.py. And some Carbon modules are built to replace their 2.2
-versions, which lack required functionality. The stubs in Mac/Lib/Carbon know about
-this overriding.
-
diff --git a/Mac/OSX/setup.jaguar.py b/Mac/OSX/setup.jaguar.py
deleted file mode 100644
index 2178899..0000000
--- a/Mac/OSX/setup.jaguar.py
+++ /dev/null
@@ -1,85 +0,0 @@
-from distutils.core import Extension, setup
-from distutils import sysconfig
-import os
-
-SRCDIR="../.."
-
-def find_file(filename, std_dirs, paths):
-    """Searches for the directory where a given file is located,
-    and returns a possibly-empty list of additional directories, or None
-    if the file couldn't be found at all.
-
-    'filename' is the name of a file, such as readline.h or libcrypto.a.
-    'std_dirs' is the list of standard system directories; if the
-        file is found in one of them, no additional directives are needed.
-    'paths' is a list of additional locations to check; if the file is
-        found in one of them, the resulting list will contain the directory.
-    """
-
-    # Check the standard locations
-    for dir in std_dirs:
-        f = os.path.join(dir, filename)
-        if os.path.exists(f): return []
-
-    # Check the additional directories
-    for dir in paths:
-        f = os.path.join(dir, filename)
-        if os.path.exists(f):
-            return [dir]
-
-    # Not found anywhere
-    return None
-
-def find_library_file(compiler, libname, std_dirs, paths):
-    filename = compiler.library_filename(libname, lib_type='shared')
-    result = find_file(filename, std_dirs, paths)
-    if result is not None: return result
-
-    filename = compiler.library_filename(libname, lib_type='static')
-    result = find_file(filename, std_dirs, paths)
-    return result
-    
-def waste_Extension():
-    waste_incs = find_file("WASTE.h", [], 
-            ['../'*n + 'waste/C_C++ Headers' for n in (0,1,2,3,4)])
-    if waste_incs != None:
-        waste_libs = [os.path.join(os.path.split(waste_incs[0])[0], "Static Libraries")]
-        srcdir = SRCDIR
-        return [ Extension('waste',
-                       [os.path.join(srcdir, d) for d in 
-                        'Mac/Modules/waste/wastemodule.c',
-                        'Mac/Wastemods/WEObjectHandlers.c',
-                        'Mac/Wastemods/WETabHooks.c',
-                        'Mac/Wastemods/WETabs.c'
-                       ],
-                       include_dirs = waste_incs + [
-                        os.path.join(srcdir, 'Mac/Include'),
-                        os.path.join(srcdir, 'Mac/Wastemods')
-                       ],
-                       library_dirs = waste_libs,
-                       libraries = ['WASTE'],
-                       extra_link_args = ['-framework', 'Carbon'],
-        ) ]
-    return []
-
-setup(name="MacPython for Jaguar extensions", version="2.2",
-    ext_modules=[
-        Extension("OverrideFrom23._AE",
-            [SRCDIR + "/Mac/Modules/ae/_AEmodule.c"],
-            include_dirs=[SRCDIR+"/Mac/Include"],
-            extra_link_args=['-framework', 'Carbon']),
-        Extension("OverrideFrom23._Res",
-            [SRCDIR + "/Mac/Modules/res/_Resmodule.c"],
-            include_dirs=[SRCDIR+"/Mac/Include"],
-            extra_link_args=['-framework', 'Carbon']),
-        Extension('_Help', 
-            [SRCDIR + '/Mac/Modules/help/_Helpmodule.c'],
-            include_dirs=[SRCDIR+"/Mac/Include"],
-            extra_link_args=['-framework', 'Carbon']),
-        Extension('_Scrap', 
-            [SRCDIR + '/Mac/Modules/scrap/_Scrapmodule.c'],
-            include_dirs=[SRCDIR+"/Mac/Include"],
-            extra_link_args=['-framework', 'Carbon']),
-        ] + 
-        waste_Extension()
-    )
\ No newline at end of file
