summaryrefslogtreecommitdiffstats
path: root/Mac
diff options
context:
space:
mode:
Diffstat (limited to 'Mac')
-rw-r--r--Mac/Modules/cf/_CFmodule.c18
-rw-r--r--Mac/Modules/file/_Filemodule.c9
-rw-r--r--Mac/Modules/mlte/_Mltemodule.c17
-rw-r--r--Mac/OSX/BuildScript/README.txt35
-rwxr-xr-xMac/OSX/BuildScript/build-installer.py1014
-rw-r--r--Mac/OSX/BuildScript/ncurses-5.5.patch36
-rw-r--r--Mac/OSX/BuildScript/resources/ReadMe.txt31
-rw-r--r--Mac/OSX/BuildScript/resources/Welcome.rtf (renamed from Mac/OSX/Dist/resources/Welcome.rtf)10
-rw-r--r--Mac/OSX/BuildScript/resources/background.jpgbin0 -> 45421 bytes
-rwxr-xr-xMac/OSX/BuildScript/scripts/postflight.documentation12
-rwxr-xr-xMac/OSX/BuildScript/scripts/postflight.framework33
-rwxr-xr-xMac/OSX/BuildScript/scripts/postflight.patch-profile71
-rw-r--r--Mac/OSX/Dist/README.txt50
-rwxr-xr-xMac/OSX/Dist/build164
-rw-r--r--Mac/OSX/Dist/example-pimp-database.plist51
-rwxr-xr-xMac/OSX/Dist/makedmg95
-rw-r--r--Mac/OSX/Dist/resources/ReadMe.txt31
-rwxr-xr-xMac/OSX/Dist/resources/postflight92
-rw-r--r--Mac/OSX/Extras.ReadMe.txt9
-rw-r--r--Mac/OSX/Extras.install.py1
-rw-r--r--Mac/OSX/IDLE/Info.plist55
-rw-r--r--Mac/OSX/IDLE/Makefile.in52
-rw-r--r--Mac/OSX/IDLE/idlemain.py27
-rw-r--r--Mac/OSX/Icons/Disk Image.icnsbin0 -> 50703 bytes
-rw-r--r--Mac/OSX/Icons/IDLE.icnsbin0 -> 53456 bytes
-rw-r--r--Mac/OSX/Icons/Python Folder.icnsbin0 -> 133608 bytes
-rw-r--r--Mac/OSX/Icons/PythonCompiled.icnsbin0 -> 60777 bytes
-rw-r--r--Mac/OSX/Icons/PythonLauncher.icnsbin0 -> 42658 bytes
-rw-r--r--Mac/OSX/Icons/PythonSource.icnsbin0 -> 54522 bytes
-rw-r--r--Mac/OSX/Icons/ReadMe.txt3
-rw-r--r--Mac/OSX/Makefile273
-rw-r--r--Mac/OSX/Makefile.in241
-rw-r--r--Mac/OSX/PythonLauncher/English.lproj/InfoPlist.stringsbin618 -> 0 bytes
-rw-r--r--Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/classes.nib26
-rw-r--r--Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/info.nib16
-rw-r--r--Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/objects.nibbin0 -> 5882 bytes
-rw-r--r--Mac/OSX/PythonLauncher/Info.plist65
-rw-r--r--Mac/OSX/PythonLauncher/Makefile.in78
-rw-r--r--Mac/OSX/PythonLauncher/PythonCompiled.icnsbin57125 -> 0 bytes
-rw-r--r--Mac/OSX/PythonLauncher/PythonInterpreter.icnsbin45913 -> 0 bytes
-rwxr-xr-xMac/OSX/PythonLauncher/PythonLauncher.pbproj/project.pbxproj681
-rw-r--r--Mac/OSX/PythonLauncher/PythonSource.icnsbin50112 -> 0 bytes
-rw-r--r--Mac/OSX/PythonLauncher/PythonWSource.icnsbin49891 -> 0 bytes
-rw-r--r--Mac/OSX/README156
-rw-r--r--Mac/OSX/Tools/pythonw.c17
-rw-r--r--Mac/OSX/fixversions.py69
-rw-r--r--Mac/OSX/sample_sitecustomize.py6
-rw-r--r--Mac/OSXResources/app/Resources/PythonApplet.icnsbin36565 -> 63136 bytes
-rw-r--r--Mac/OSXResources/app/Resources/PythonInterpreter.icnsbin45913 -> 42658 bytes
-rw-r--r--Mac/OSXResources/framework/Info.plist4
-rw-r--r--Mac/scripts/BuildApplet.icnsbin35833 -> 120107 bytes
51 files changed, 1914 insertions, 1634 deletions
diff --git a/Mac/Modules/cf/_CFmodule.c b/Mac/Modules/cf/_CFmodule.c
index 5f934c2..3f4d4f2 100644
--- a/Mac/Modules/cf/_CFmodule.c
+++ b/Mac/Modules/cf/_CFmodule.c
@@ -524,7 +524,7 @@ static void CFArrayRefObj_dealloc(CFArrayRefObject *self)
self->ob_freeit((CFTypeRef)self->ob_itself);
self->ob_itself = NULL;
}
- self->ob_type->tp_base->tp_dealloc((PyObject *)self);
+ CFTypeRef_Type.tp_dealloc((PyObject *)self);
}
static PyObject *CFArrayRefObj_CFArrayCreateCopy(CFArrayRefObject *_self, PyObject *_args)
@@ -735,7 +735,7 @@ static void CFMutableArrayRefObj_dealloc(CFMutableArrayRefObject *self)
self->ob_freeit((CFTypeRef)self->ob_itself);
self->ob_itself = NULL;
}
- self->ob_type->tp_base->tp_dealloc((PyObject *)self);
+ CFArrayRef_Type.tp_dealloc((PyObject *)self);
}
static PyObject *CFMutableArrayRefObj_CFArrayRemoveValueAtIndex(CFMutableArrayRefObject *_self, PyObject *_args)
@@ -975,7 +975,7 @@ static void CFDictionaryRefObj_dealloc(CFDictionaryRefObject *self)
self->ob_freeit((CFTypeRef)self->ob_itself);
self->ob_itself = NULL;
}
- self->ob_type->tp_base->tp_dealloc((PyObject *)self);
+ CFTypeRef_Type.tp_dealloc((PyObject *)self);
}
static PyObject *CFDictionaryRefObj_CFDictionaryCreateCopy(CFDictionaryRefObject *_self, PyObject *_args)
@@ -1168,7 +1168,7 @@ static void CFMutableDictionaryRefObj_dealloc(CFMutableDictionaryRefObject *self
self->ob_freeit((CFTypeRef)self->ob_itself);
self->ob_itself = NULL;
}
- self->ob_type->tp_base->tp_dealloc((PyObject *)self);
+ CFDictionaryRef_Type.tp_dealloc((PyObject *)self);
}
static PyObject *CFMutableDictionaryRefObj_CFDictionaryRemoveAllValues(CFMutableDictionaryRefObject *_self, PyObject *_args)
@@ -1351,7 +1351,7 @@ static void CFDataRefObj_dealloc(CFDataRefObject *self)
self->ob_freeit((CFTypeRef)self->ob_itself);
self->ob_itself = NULL;
}
- self->ob_type->tp_base->tp_dealloc((PyObject *)self);
+ CFTypeRef_Type.tp_dealloc((PyObject *)self);
}
static PyObject *CFDataRefObj_CFDataCreateCopy(CFDataRefObject *_self, PyObject *_args)
@@ -1576,7 +1576,7 @@ static void CFMutableDataRefObj_dealloc(CFMutableDataRefObject *self)
self->ob_freeit((CFTypeRef)self->ob_itself);
self->ob_itself = NULL;
}
- self->ob_type->tp_base->tp_dealloc((PyObject *)self);
+ CFDataRef_Type.tp_dealloc((PyObject *)self);
}
static PyObject *CFMutableDataRefObj_CFDataSetLength(CFMutableDataRefObject *_self, PyObject *_args)
@@ -1856,7 +1856,7 @@ static void CFStringRefObj_dealloc(CFStringRefObject *self)
self->ob_freeit((CFTypeRef)self->ob_itself);
self->ob_itself = NULL;
}
- self->ob_type->tp_base->tp_dealloc((PyObject *)self);
+ CFTypeRef_Type.tp_dealloc((PyObject *)self);
}
static PyObject *CFStringRefObj_CFStringCreateWithSubstring(CFStringRefObject *_self, PyObject *_args)
@@ -2583,7 +2583,7 @@ static void CFMutableStringRefObj_dealloc(CFMutableStringRefObject *self)
self->ob_freeit((CFTypeRef)self->ob_itself);
self->ob_itself = NULL;
}
- self->ob_type->tp_base->tp_dealloc((PyObject *)self);
+ CFStringRef_Type.tp_dealloc((PyObject *)self);
}
static PyObject *CFMutableStringRefObj_CFStringAppend(CFMutableStringRefObject *_self, PyObject *_args)
@@ -2971,7 +2971,7 @@ static void CFURLRefObj_dealloc(CFURLRefObject *self)
self->ob_freeit((CFTypeRef)self->ob_itself);
self->ob_itself = NULL;
}
- self->ob_type->tp_base->tp_dealloc((PyObject *)self);
+ CFTypeRef_Type.tp_dealloc((PyObject *)self);
}
static PyObject *CFURLRefObj_CFURLCreateData(CFURLRefObject *_self, PyObject *_args)
diff --git a/Mac/Modules/file/_Filemodule.c b/Mac/Modules/file/_Filemodule.c
index 81f0c02..c211de1 100644
--- a/Mac/Modules/file/_Filemodule.c
+++ b/Mac/Modules/file/_Filemodule.c
@@ -105,13 +105,14 @@ _PyMac_GetFullPathname(FSSpec *fss, char *path, int len)
FSSpec fss2;
int tocopy;
- err = FSMakeFSSpec(fss->vRefNum, fss->parID, "", &fss2);
+ err = FSMakeFSSpec(fss->vRefNum, fss->parID,
+ (unsigned char*)"", &fss2);
if (err)
return err;
err = FSpMakeFSRef(&fss2, &fsr);
if (err)
return err;
- err = (OSErr)FSRefMakePath(&fsr, path, len-1);
+ err = (OSErr)FSRefMakePath(&fsr, (unsigned char*)path, len-1);
if (err)
return err;
/* This part is not 100% safe: we append the filename part, but
@@ -123,12 +124,12 @@ _PyMac_GetFullPathname(FSSpec *fss, char *path, int len)
if ((strlen(path) + tocopy) >= len)
tocopy = len - strlen(path) - 1;
if (tocopy > 0)
- strncat(path, fss->name+1, tocopy);
+ strncat(path, (char*)fss->name+1, tocopy);
}
else {
if (err)
return err;
- err = (OSErr)FSRefMakePath(&fsr, path, len);
+ err = (OSErr)FSRefMakePath(&fsr, (unsigned char*)path, len);
if (err)
return err;
}
diff --git a/Mac/Modules/mlte/_Mltemodule.c b/Mac/Modules/mlte/_Mltemodule.c
index 64ceaf6..a79b257 100644
--- a/Mac/Modules/mlte/_Mltemodule.c
+++ b/Mac/Modules/mlte/_Mltemodule.c
@@ -49,23 +49,6 @@ OptFSSpecPtr_Convert(PyObject *v, FSSpec **p_itself)
}
/*
-** Parse an optional rect
-*/
-static int
-OptRectPtr_Convert(PyObject *v, Rect **p_itself)
-{
- static Rect r;
-
- if (v == Py_None)
- {
- *p_itself = NULL;
- return 1;
- }
- *p_itself = &r;
- return PyMac_GetRect(v, *p_itself);
-}
-
-/*
** Parse an optional GWorld
*/
static int
diff --git a/Mac/OSX/BuildScript/README.txt b/Mac/OSX/BuildScript/README.txt
new file mode 100644
index 0000000..c556de83
--- /dev/null
+++ b/Mac/OSX/BuildScript/README.txt
@@ -0,0 +1,35 @@
+Building a MacPython distribution
+=================================
+
+The ``build-install.py`` script creates MacPython distributions, including
+sleepycat db4, sqlite3 and readline support. It builds a complete
+framework-based Python out-of-tree, installs it in a funny place with
+$DESTROOT, massages that installation to remove .pyc files and such, creates
+an Installer package from the installation plus other files in ``resources``
+and ``scripts`` and placed that on a ``.dmg`` disk image.
+
+Here are the steps you ned to follow to build a MacPython installer:
+
+- Run ``./build-installer.py``. Optionally you can pass a number of arguments
+ to specify locations of various files. Please see the top of
+ ``build-installer.py`` for its usage.
+- When done the script will tell you where the DMG image is.
+
+The script needs to be run on Mac OS X 10.4 with Xcode 2.2 or later and
+the 10.4u SDK.
+
+When all is done, announcements can be posted to at least the following
+places:
+- pythonmac-sig@python.org
+- python-dev@python.org
+- python-announce@python.org
+- archivist@info-mac.org
+- adcnews@apple.com
+- news@macnn.com
+- http://www.macupdate.com
+- http://guide.apple.com/usindex.lasso
+- http://www.apple.com/downloads/macosx/submit
+- http://www.versiontracker.com/ (userid Jack.Jansen@oratrix.com)
+- http://www.macshareware.net (userid jackjansen)
+
+Also, check out Stephan Deibels http://pythonology.org/market contact list
diff --git a/Mac/OSX/BuildScript/build-installer.py b/Mac/OSX/BuildScript/build-installer.py
new file mode 100755
index 0000000..b24f5dc
--- /dev/null
+++ b/Mac/OSX/BuildScript/build-installer.py
@@ -0,0 +1,1014 @@
+#!/usr/bin/python2.3
+"""
+This script is used to build the "official unofficial" universal build on
+Mac OS X. It requires Mac OS X 10.4, Xcode 2.2 and the 10.4u SDK to do its
+work.
+
+Please ensure that this script keeps working with Python 2.3, to avoid
+bootstrap issues (/usr/bin/python is Python 2.3 on OSX 10.4)
+
+Usage: see USAGE variable in the script.
+"""
+import platform, os, sys, getopt, textwrap, shutil, urllib2, stat, time, pwd
+
+INCLUDE_TIMESTAMP=1
+VERBOSE=1
+
+from plistlib import Plist
+
+import MacOS
+import Carbon.File
+import Carbon.Icn
+import Carbon.Res
+from Carbon.Files import kCustomIconResource, fsRdWrPerm, kHasCustomIcon
+from Carbon.Files import kFSCatInfoFinderInfo
+
+try:
+ from plistlib import writePlist
+except ImportError:
+ # We're run using python2.3
+ def writePlist(plist, path):
+ plist.write(path)
+
+def shellQuote(value):
+ """
+ Return the string value in a form that can savely be inserted into
+ a shell command.
+ """
+ return "'%s'"%(value.replace("'", "'\"'\"'"))
+
+def grepValue(fn, variable):
+ variable = variable + '='
+ for ln in open(fn, 'r'):
+ if ln.startswith(variable):
+ value = ln[len(variable):].strip()
+ return value[1:-1]
+
+def getVersion():
+ return grepValue(os.path.join(SRCDIR, 'configure'), 'PACKAGE_VERSION')
+
+def getFullVersion():
+ fn = os.path.join(SRCDIR, 'Include', 'patchlevel.h')
+ for ln in open(fn):
+ if 'PY_VERSION' in ln:
+ return ln.split()[-1][1:-1]
+
+ raise RuntimeError, "Cannot find full version??"
+
+# The directory we'll use to create the build, will be erased and recreated
+WORKDIR="/tmp/_py"
+
+# The directory we'll use to store third-party sources, set this to something
+# else if you don't want to re-fetch required libraries every time.
+DEPSRC=os.path.join(WORKDIR, 'third-party')
+DEPSRC=os.path.expanduser('~/Universal/other-sources')
+
+# Location of the preferred SDK
+SDKPATH="/Developer/SDKs/MacOSX10.4u.sdk"
+#SDKPATH="/"
+
+# Source directory (asume we're in Mac/OSX/Dist)
+SRCDIR=os.path.dirname(
+ os.path.dirname(
+ os.path.dirname(
+ os.path.dirname(
+ os.path.abspath(__file__
+ )))))
+
+USAGE=textwrap.dedent("""\
+ Usage: build_python [options]
+
+ Options:
+ -? or -h: Show this message
+ -b DIR
+ --build-dir=DIR: Create build here (default: %(WORKDIR)r)
+ --third-party=DIR: Store third-party sources here (default: %(DEPSRC)r)
+ --sdk-path=DIR: Location of the SDK (default: %(SDKPATH)r)
+ --src-dir=DIR: Location of the Python sources (default: %(SRCDIR)r)
+""")% globals()
+
+
+# Instructions for building libraries that are necessary for building a
+# batteries included python.
+LIBRARY_RECIPES=[
+ dict(
+ # Note that GNU readline is GPL'd software
+ name="GNU Readline 5.1.4",
+ url="http://ftp.gnu.org/pub/gnu/readline/readline-5.1.tar.gz" ,
+ patchlevel='0',
+ patches=[
+ # The readline maintainers don't do actual micro releases, but
+ # just ship a set of patches.
+ 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-001',
+ 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-002',
+ 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-003',
+ 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-004',
+ ]
+ ),
+
+ dict(
+ name="SQLite 3.3.5",
+ url="http://www.sqlite.org/sqlite-3.3.5.tar.gz",
+ checksum='93f742986e8bc2dfa34792e16df017a6feccf3a2',
+ configure_pre=[
+ '--enable-threadsafe',
+ '--enable-tempstore',
+ '--enable-shared=no',
+ '--enable-static=yes',
+ '--disable-tcl',
+ ]
+ ),
+
+ dict(
+ name="NCurses 5.5",
+ url="http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.5.tar.gz",
+ configure_pre=[
+ "--without-cxx",
+ "--without-ada",
+ "--without-progs",
+ "--without-curses-h",
+ "--enable-shared",
+ "--with-shared",
+ "--datadir=/usr/share",
+ "--sysconfdir=/etc",
+ "--sharedstatedir=/usr/com",
+ "--with-terminfo-dirs=/usr/share/terminfo",
+ "--with-default-terminfo-dir=/usr/share/terminfo",
+ "--libdir=/Library/Frameworks/Python.framework/Versions/%s/lib"%(getVersion(),),
+ "--enable-termcap",
+ ],
+ patches=[
+ "ncurses-5.5.patch",
+ ],
+ useLDFlags=False,
+ install='make && make install DESTDIR=%s && cd %s/usr/local/lib && ln -fs ../../../Library/Frameworks/Python.framework/Versions/%s/lib/lib* .'%(
+ shellQuote(os.path.join(WORKDIR, 'libraries')),
+ shellQuote(os.path.join(WORKDIR, 'libraries')),
+ getVersion(),
+ ),
+ ),
+ dict(
+ name="Sleepycat DB 4.4",
+ url="http://downloads.sleepycat.com/db-4.4.20.tar.gz",
+ #name="Sleepycat DB 4.3.29",
+ #url="http://downloads.sleepycat.com/db-4.3.29.tar.gz",
+ buildDir="build_unix",
+ configure="../dist/configure",
+ configure_pre=[
+ '--includedir=/usr/local/include/db4',
+ ]
+ ),
+]
+
+
+# Instructions for building packages inside the .mpkg.
+PKG_RECIPES=[
+ dict(
+ name="PythonFramework",
+ long_name="Python Framework",
+ source="/Library/Frameworks/Python.framework",
+ readme="""\
+ This package installs Python.framework, that is the python
+ interpreter and the standard library. This also includes Python
+ wrappers for lots of Mac OS X API's.
+ """,
+ postflight="scripts/postflight.framework",
+ ),
+ dict(
+ name="PythonApplications",
+ long_name="GUI Applications",
+ source="/Applications/MacPython %(VER)s",
+ readme="""\
+ This package installs Python.framework, that is the python
+ interpreter and the standard library. This also includes Python
+ wrappers for lots of Mac OS X API's.
+ """,
+ required=False,
+ ),
+ dict(
+ name="PythonUnixTools",
+ long_name="UNIX command-line tools",
+ source="/usr/local/bin",
+ readme="""\
+ This package installs the unix tools in /usr/local/bin for
+ compatibility with older releases of MacPython. This package
+ is not necessary to use MacPython.
+ """,
+ required=False,
+ ),
+ dict(
+ name="PythonDocumentation",
+ long_name="Python Documentation",
+ topdir="/Library/Frameworks/Python.framework/Versions/%(VER)s/Resources/English.lproj/Documentation",
+ source="/pydocs",
+ readme="""\
+ This package installs the python documentation at a location
+ that is useable for pydoc and IDLE. If you have installed Xcode
+ it will also install a link to the documentation in
+ /Developer/Documentation/Python
+ """,
+ postflight="scripts/postflight.documentation",
+ required=False,
+ ),
+ dict(
+ name="PythonProfileChanges",
+ long_name="Shell profile updater",
+ readme="""\
+ This packages updates your shell profile to make sure that
+ the MacPython tools are found by your shell in preference of
+ the system provided Python tools.
+
+ If you don't install this package you'll have to add
+ "/Library/Frameworks/Python.framework/Versions/%(VER)s/bin"
+ to your PATH by hand.
+ """,
+ postflight="scripts/postflight.patch-profile",
+ topdir="/Library/Frameworks/Python.framework",
+ source="/empty-dir",
+ required=False,
+ ),
+]
+
+
+def fatal(msg):
+ """
+ A fatal error, bail out.
+ """
+ sys.stderr.write('FATAL: ')
+ sys.stderr.write(msg)
+ sys.stderr.write('\n')
+ sys.exit(1)
+
+def fileContents(fn):
+ """
+ Return the contents of the named file
+ """
+ return open(fn, 'rb').read()
+
+def runCommand(commandline):
+ """
+ Run a command and raise RuntimeError if it fails. Output is surpressed
+ unless the command fails.
+ """
+ fd = os.popen(commandline, 'r')
+ data = fd.read()
+ xit = fd.close()
+ if xit != None:
+ sys.stdout.write(data)
+ raise RuntimeError, "command failed: %s"%(commandline,)
+
+ if VERBOSE:
+ sys.stdout.write(data); sys.stdout.flush()
+
+def captureCommand(commandline):
+ fd = os.popen(commandline, 'r')
+ data = fd.read()
+ xit = fd.close()
+ if xit != None:
+ sys.stdout.write(data)
+ raise RuntimeError, "command failed: %s"%(commandline,)
+
+ return data
+
+def checkEnvironment():
+ """
+ Check that we're running on a supported system.
+ """
+
+ if platform.system() != 'Darwin':
+ fatal("This script should be run on a Mac OS X 10.4 system")
+
+ if platform.release() <= '8.':
+ fatal("This script should be run on a Mac OS X 10.4 system")
+
+ if not os.path.exists(SDKPATH):
+ fatal("Please install the latest version of Xcode and the %s SDK"%(
+ os.path.basename(SDKPATH[:-4])))
+
+
+
+def parseOptions(args = None):
+ """
+ Parse arguments and update global settings.
+ """
+ global WORKDIR, DEPSRC, SDKPATH, SRCDIR
+
+ if args is None:
+ args = sys.argv[1:]
+
+ try:
+ options, args = getopt.getopt(args, '?hb',
+ [ 'build-dir=', 'third-party=', 'sdk-path=' , 'src-dir='])
+ except getopt.error, msg:
+ print msg
+ sys.exit(1)
+
+ if args:
+ print "Additional arguments"
+ sys.exit(1)
+
+ for k, v in options:
+ if k in ('-h', '-?'):
+ print USAGE
+ sys.exit(0)
+
+ elif k in ('-d', '--build-dir'):
+ WORKDIR=v
+
+ elif k in ('--third-party',):
+ DEPSRC=v
+
+ elif k in ('--sdk-path',):
+ SDKPATH=v
+
+ elif k in ('--src-dir',):
+ SRCDIR=v
+
+ else:
+ raise NotImplementedError, k
+
+ SRCDIR=os.path.abspath(SRCDIR)
+ WORKDIR=os.path.abspath(WORKDIR)
+ SDKPATH=os.path.abspath(SDKPATH)
+ DEPSRC=os.path.abspath(DEPSRC)
+
+ print "Settings:"
+ print " * Source directory:", SRCDIR
+ print " * Build directory: ", WORKDIR
+ print " * SDK location: ", SDKPATH
+ print " * third-party source:", DEPSRC
+ print ""
+
+
+
+
+def extractArchive(builddir, archiveName):
+ """
+ Extract a source archive into 'builddir'. Returns the path of the
+ extracted archive.
+
+ XXX: This function assumes that archives contain a toplevel directory
+ that is has the same name as the basename of the archive. This is
+ save enough for anything we use.
+ """
+ curdir = os.getcwd()
+ try:
+ os.chdir(builddir)
+ if archiveName.endswith('.tar.gz'):
+ retval = os.path.basename(archiveName[:-7])
+ if os.path.exists(retval):
+ shutil.rmtree(retval)
+ fp = os.popen("tar zxf %s 2>&1"%(shellQuote(archiveName),), 'r')
+
+ elif archiveName.endswith('.tar.bz2'):
+ retval = os.path.basename(archiveName[:-8])
+ if os.path.exists(retval):
+ shutil.rmtree(retval)
+ fp = os.popen("tar jxf %s 2>&1"%(shellQuote(archiveName),), 'r')
+
+ elif archiveName.endswith('.tar'):
+ retval = os.path.basename(archiveName[:-4])
+ if os.path.exists(retval):
+ shutil.rmtree(retval)
+ fp = os.popen("tar xf %s 2>&1"%(shellQuote(archiveName),), 'r')
+
+ elif archiveName.endswith('.zip'):
+ retval = os.path.basename(archiveName[:-4])
+ if os.path.exists(retval):
+ shutil.rmtree(retval)
+ fp = os.popen("unzip %s 2>&1"%(shellQuote(archiveName),), 'r')
+
+ data = fp.read()
+ xit = fp.close()
+ if xit is not None:
+ sys.stdout.write(data)
+ raise RuntimeError, "Cannot extract %s"%(archiveName,)
+
+ return os.path.join(builddir, retval)
+
+ finally:
+ os.chdir(curdir)
+
+KNOWNSIZES = {
+ "http://ftp.gnu.org/pub/gnu/readline/readline-5.1.tar.gz": 7952742,
+ "http://downloads.sleepycat.com/db-4.4.20.tar.gz": 2030276,
+}
+
+def downloadURL(url, fname):
+ """
+ Download the contents of the url into the file.
+ """
+ try:
+ size = os.path.getsize(fname)
+ except OSError:
+ pass
+ else:
+ if KNOWNSIZES.get(url) == size:
+ print "Using existing file for", url
+ return
+ fpIn = urllib2.urlopen(url)
+ fpOut = open(fname, 'wb')
+ block = fpIn.read(10240)
+ try:
+ while block:
+ fpOut.write(block)
+ block = fpIn.read(10240)
+ fpIn.close()
+ fpOut.close()
+ except:
+ try:
+ os.unlink(fname)
+ except:
+ pass
+
+def buildRecipe(recipe, basedir, archList):
+ """
+ Build software using a recipe. This function does the
+ 'configure;make;make install' dance for C software, with a possibility
+ to customize this process, basically a poor-mans DarwinPorts.
+ """
+ curdir = os.getcwd()
+
+ name = recipe['name']
+ url = recipe['url']
+ configure = recipe.get('configure', './configure')
+ install = recipe.get('install', 'make && make install DESTDIR=%s'%(
+ shellQuote(basedir)))
+
+ archiveName = os.path.split(url)[-1]
+ sourceArchive = os.path.join(DEPSRC, archiveName)
+
+ if not os.path.exists(DEPSRC):
+ os.mkdir(DEPSRC)
+
+
+ if os.path.exists(sourceArchive):
+ print "Using local copy of %s"%(name,)
+
+ else:
+ print "Downloading %s"%(name,)
+ downloadURL(url, sourceArchive)
+ print "Archive for %s stored as %s"%(name, sourceArchive)
+
+ print "Extracting archive for %s"%(name,)
+ buildDir=os.path.join(WORKDIR, '_bld')
+ if not os.path.exists(buildDir):
+ os.mkdir(buildDir)
+
+ workDir = extractArchive(buildDir, sourceArchive)
+ os.chdir(workDir)
+ if 'buildDir' in recipe:
+ os.chdir(recipe['buildDir'])
+
+
+ for fn in recipe.get('patches', ()):
+ if fn.startswith('http://'):
+ # Download the patch before applying it.
+ path = os.path.join(DEPSRC, os.path.basename(fn))
+ downloadURL(fn, path)
+ fn = path
+
+ fn = os.path.join(curdir, fn)
+ runCommand('patch -p%s < %s'%(recipe.get('patchlevel', 1),
+ shellQuote(fn),))
+
+ configure_args = [
+ "--prefix=/usr/local",
+ "--enable-static",
+ "--disable-shared",
+ #"CPP=gcc -arch %s -E"%(' -arch '.join(archList,),),
+ ]
+
+ if 'configure_pre' in recipe:
+ args = list(recipe['configure_pre'])
+ if '--disable-static' in args:
+ configure_args.remove('--enable-static')
+ if '--enable-shared' in args:
+ configure_args.remove('--disable-shared')
+ configure_args.extend(args)
+
+ if recipe.get('useLDFlags', 1):
+ configure_args.extend([
+ "CFLAGS=-arch %s -isysroot %s -I%s/usr/local/include"%(
+ ' -arch '.join(archList),
+ shellQuote(SDKPATH)[1:-1],
+ shellQuote(basedir)[1:-1],),
+ "LDFLAGS=-syslibroot,%s -L%s/usr/local/lib -arch %s"%(
+ shellQuote(SDKPATH)[1:-1],
+ shellQuote(basedir)[1:-1],
+ ' -arch '.join(archList)),
+ ])
+ else:
+ configure_args.extend([
+ "CFLAGS=-arch %s -isysroot %s -I%s/usr/local/include"%(
+ ' -arch '.join(archList),
+ shellQuote(SDKPATH)[1:-1],
+ shellQuote(basedir)[1:-1],),
+ ])
+
+ if 'configure_post' in recipe:
+ configure_args = configure_args = list(recipe['configure_post'])
+
+ configure_args.insert(0, configure)
+ configure_args = [ shellQuote(a) for a in configure_args ]
+
+ print "Running configure for %s"%(name,)
+ runCommand(' '.join(configure_args) + ' 2>&1')
+
+ print "Running install for %s"%(name,)
+ runCommand('{ ' + install + ' ;} 2>&1')
+
+ print "Done %s"%(name,)
+ print ""
+
+ os.chdir(curdir)
+
+def buildLibraries():
+ """
+ Build our dependencies into $WORKDIR/libraries/usr/local
+ """
+ print ""
+ print "Building required libraries"
+ print ""
+ universal = os.path.join(WORKDIR, 'libraries')
+ os.mkdir(universal)
+ os.makedirs(os.path.join(universal, 'usr', 'local', 'lib'))
+ os.makedirs(os.path.join(universal, 'usr', 'local', 'include'))
+
+ for recipe in LIBRARY_RECIPES:
+ buildRecipe(recipe, universal, ('i386', 'ppc',))
+
+
+
+def buildPythonDocs():
+ # This stores the documentation as Resources/English.lproj/Docuentation
+ # inside the framwork. pydoc and IDLE will pick it up there.
+ print "Install python documentation"
+ rootDir = os.path.join(WORKDIR, '_root')
+ version = getVersion()
+ docdir = os.path.join(rootDir, 'pydocs')
+
+ name = 'html-%s.tar.bz2'%(getFullVersion(),)
+ sourceArchive = os.path.join(DEPSRC, name)
+ if os.path.exists(sourceArchive):
+ print "Using local copy of %s"%(name,)
+
+ else:
+ print "Downloading %s"%(name,)
+ downloadURL('http://www.python.org/ftp/python/doc/%s/%s'%(
+ getFullVersion(), name), sourceArchive)
+ print "Archive for %s stored as %s"%(name, sourceArchive)
+
+ extractArchive(os.path.dirname(docdir), sourceArchive)
+ os.rename(
+ os.path.join(
+ os.path.dirname(docdir), 'Python-Docs-%s'%(getFullVersion(),)),
+ docdir)
+
+
+def buildPython():
+ print "Building a universal python"
+
+ buildDir = os.path.join(WORKDIR, '_bld', 'python')
+ rootDir = os.path.join(WORKDIR, '_root')
+
+ if os.path.exists(buildDir):
+ shutil.rmtree(buildDir)
+ if os.path.exists(rootDir):
+ shutil.rmtree(rootDir)
+ os.mkdir(buildDir)
+ os.mkdir(rootDir)
+ os.mkdir(os.path.join(rootDir, 'empty-dir'))
+ curdir = os.getcwd()
+ os.chdir(buildDir)
+
+ # Not sure if this is still needed, the original build script
+ # claims that parts of the install assume python.exe exists.
+ os.symlink('python', os.path.join(buildDir, 'python.exe'))
+
+ # Extract the version from the configure file, needed to calculate
+ # several paths.
+ version = getVersion()
+
+ print "Running configure..."
+ runCommand("%s -C --enable-framework --enable-universalsdk=%s LDFLAGS='-g -L%s/libraries/usr/local/lib' OPT='-g -O3 -I%s/libraries/usr/local/include' 2>&1"%(
+ shellQuote(os.path.join(SRCDIR, 'configure')),
+ shellQuote(SDKPATH), shellQuote(WORKDIR)[1:-1],
+ shellQuote(WORKDIR)[1:-1]))
+
+ print "Running make"
+ runCommand("make")
+
+ print "Runing make frameworkinstall"
+ runCommand("make frameworkinstall DESTDIR=%s"%(
+ shellQuote(rootDir)))
+
+ print "Runing make frameworkinstallextras"
+ runCommand("make frameworkinstallextras DESTDIR=%s"%(
+ shellQuote(rootDir)))
+
+ print "Copy required shared libraries"
+ if os.path.exists(os.path.join(WORKDIR, 'libraries', 'Library')):
+ runCommand("mv %s/* %s"%(
+ shellQuote(os.path.join(
+ WORKDIR, 'libraries', 'Library', 'Frameworks',
+ 'Python.framework', 'Versions', getVersion(),
+ 'lib')),
+ shellQuote(os.path.join(WORKDIR, '_root', 'Library', 'Frameworks',
+ 'Python.framework', 'Versions', getVersion(),
+ 'lib'))))
+
+ print "Fix file modes"
+ frmDir = os.path.join(rootDir, 'Library', 'Frameworks', 'Python.framework')
+ for dirpath, dirnames, filenames in os.walk(frmDir):
+ for dn in dirnames:
+ os.chmod(os.path.join(dirpath, dn), 0775)
+
+ for fn in filenames:
+ if os.path.islink(fn):
+ continue
+
+ # "chmod g+w $fn"
+ p = os.path.join(dirpath, fn)
+ st = os.stat(p)
+ os.chmod(p, stat.S_IMODE(st.st_mode) | stat.S_IXGRP)
+
+ # We added some directories to the search path during the configure
+ # phase. Remove those because those directories won't be there on
+ # the end-users system.
+ path =os.path.join(rootDir, 'Library', 'Frameworks', 'Python.framework',
+ 'Versions', version, 'lib', 'python%s'%(version,),
+ 'config', 'Makefile')
+ fp = open(path, 'r')
+ data = fp.read()
+ fp.close()
+
+ data = data.replace('-L%s/libraries/usr/local/lib'%(WORKDIR,), '')
+ data = data.replace('-I%s/libraries/usr/local/include'%(WORKDIR,), '')
+ fp = open(path, 'w')
+ fp.write(data)
+ fp.close()
+
+ # Add symlinks in /usr/local/bin, using relative links
+ usr_local_bin = os.path.join(rootDir, 'usr', 'local', 'bin')
+ to_framework = os.path.join('..', '..', '..', 'Library', 'Frameworks',
+ 'Python.framework', 'Versions', version, 'bin')
+ if os.path.exists(usr_local_bin):
+ shutil.rmtree(usr_local_bin)
+ os.makedirs(usr_local_bin)
+ for fn in os.listdir(
+ os.path.join(frmDir, 'Versions', version, 'bin')):
+ os.symlink(os.path.join(to_framework, fn),
+ os.path.join(usr_local_bin, fn))
+
+ os.chdir(curdir)
+
+
+
+def patchFile(inPath, outPath):
+ data = fileContents(inPath)
+ data = data.replace('$FULL_VERSION', getFullVersion())
+ data = data.replace('$VERSION', getVersion())
+ data = data.replace('$MACOSX_DEPLOYMENT_TARGET', '10.3 or later')
+ data = data.replace('$ARCHITECTURES', "i386, ppc")
+ data = data.replace('$INSTALL_SIZE', installSize())
+ fp = open(outPath, 'wb')
+ fp.write(data)
+ fp.close()
+
+def patchScript(inPath, outPath):
+ data = fileContents(inPath)
+ data = data.replace('@PYVER@', getVersion())
+ fp = open(outPath, 'wb')
+ fp.write(data)
+ fp.close()
+ os.chmod(outPath, 0755)
+
+
+
+def packageFromRecipe(targetDir, recipe):
+ curdir = os.getcwd()
+ try:
+ pkgname = recipe['name']
+ srcdir = recipe.get('source')
+ pkgroot = recipe.get('topdir', srcdir)
+ postflight = recipe.get('postflight')
+ readme = textwrap.dedent(recipe['readme'])
+ isRequired = recipe.get('required', True)
+
+ print "- building package %s"%(pkgname,)
+
+ # Substitute some variables
+ textvars = dict(
+ VER=getVersion(),
+ FULLVER=getFullVersion(),
+ )
+ readme = readme % textvars
+
+ if pkgroot is not None:
+ pkgroot = pkgroot % textvars
+ else:
+ pkgroot = '/'
+
+ if srcdir is not None:
+ srcdir = os.path.join(WORKDIR, '_root', srcdir[1:])
+ srcdir = srcdir % textvars
+
+ if postflight is not None:
+ postflight = os.path.abspath(postflight)
+
+ packageContents = os.path.join(targetDir, pkgname + '.pkg', 'Contents')
+ os.makedirs(packageContents)
+
+ if srcdir is not None:
+ os.chdir(srcdir)
+ runCommand("pax -wf %s . 2>&1"%(shellQuote(os.path.join(packageContents, 'Archive.pax')),))
+ runCommand("gzip -9 %s 2>&1"%(shellQuote(os.path.join(packageContents, 'Archive.pax')),))
+ runCommand("mkbom . %s 2>&1"%(shellQuote(os.path.join(packageContents, 'Archive.bom')),))
+
+ fn = os.path.join(packageContents, 'PkgInfo')
+ fp = open(fn, 'w')
+ fp.write('pmkrpkg1')
+ fp.close()
+
+ rsrcDir = os.path.join(packageContents, "Resources")
+ os.mkdir(rsrcDir)
+ fp = open(os.path.join(rsrcDir, 'ReadMe.txt'), 'w')
+ fp.write(readme)
+ fp.close()
+
+ if postflight is not None:
+ patchScript(postflight, os.path.join(rsrcDir, 'postflight'))
+
+ vers = getFullVersion()
+ major, minor = map(int, getVersion().split('.', 2))
+ pl = Plist(
+ CFBundleGetInfoString="MacPython.%s %s"%(pkgname, vers,),
+ CFBundleIdentifier='org.python.MacPython.%s'%(pkgname,),
+ CFBundleName='MacPython.%s'%(pkgname,),
+ CFBundleShortVersionString=vers,
+ IFMajorVersion=major,
+ IFMinorVersion=minor,
+ IFPkgFormatVersion=0.10000000149011612,
+ IFPkgFlagAllowBackRev=False,
+ IFPkgFlagAuthorizationAction="RootAuthorization",
+ IFPkgFlagDefaultLocation=pkgroot,
+ IFPkgFlagFollowLinks=True,
+ IFPkgFlagInstallFat=True,
+ IFPkgFlagIsRequired=isRequired,
+ IFPkgFlagOverwritePermissions=False,
+ IFPkgFlagRelocatable=False,
+ IFPkgFlagRestartAction="NoRestart",
+ IFPkgFlagRootVolumeOnly=True,
+ IFPkgFlagUpdateInstalledLangauges=False,
+ )
+ writePlist(pl, os.path.join(packageContents, 'Info.plist'))
+
+ pl = Plist(
+ IFPkgDescriptionDescription=readme,
+ IFPkgDescriptionTitle=recipe.get('long_name', "MacPython.%s"%(pkgname,)),
+ IFPkgDescriptionVersion=vers,
+ )
+ writePlist(pl, os.path.join(packageContents, 'Resources', 'Description.plist'))
+
+ finally:
+ os.chdir(curdir)
+
+
+def makeMpkgPlist(path):
+
+ vers = getFullVersion()
+ major, minor = map(int, getVersion().split('.', 2))
+
+ pl = Plist(
+ CFBundleGetInfoString="MacPython %s"%(vers,),
+ CFBundleIdentifier='org.python.MacPython',
+ CFBundleName='MacPython',
+ CFBundleShortVersionString=vers,
+ IFMajorVersion=major,
+ IFMinorVersion=minor,
+ IFPkgFlagComponentDirectory="Contents/Packages",
+ IFPkgFlagPackageList=[
+ dict(
+ IFPkgFlagPackageLocation='%s.pkg'%(item['name']),
+ IFPkgFlagPackageSelection='selected'
+ )
+ for item in PKG_RECIPES
+ ],
+ IFPkgFormatVersion=0.10000000149011612,
+ IFPkgFlagBackgroundScaling="proportional",
+ IFPkgFlagBackgroundAlignment="left",
+ )
+
+ writePlist(pl, path)
+
+
+def buildInstaller():
+
+ # Zap all compiled files
+ for dirpath, _, filenames in os.walk(os.path.join(WORKDIR, '_root')):
+ for fn in filenames:
+ if fn.endswith('.pyc') or fn.endswith('.pyo'):
+ os.unlink(os.path.join(dirpath, fn))
+
+ outdir = os.path.join(WORKDIR, 'installer')
+ if os.path.exists(outdir):
+ shutil.rmtree(outdir)
+ os.mkdir(outdir)
+
+ pkgroot = os.path.join(outdir, 'MacPython.mpkg', 'Contents')
+ pkgcontents = os.path.join(pkgroot, 'Packages')
+ os.makedirs(pkgcontents)
+ for recipe in PKG_RECIPES:
+ packageFromRecipe(pkgcontents, recipe)
+
+ rsrcDir = os.path.join(pkgroot, 'Resources')
+
+ fn = os.path.join(pkgroot, 'PkgInfo')
+ fp = open(fn, 'w')
+ fp.write('pmkrpkg1')
+ fp.close()
+
+ os.mkdir(rsrcDir)
+
+ makeMpkgPlist(os.path.join(pkgroot, 'Info.plist'))
+ pl = Plist(
+ IFPkgDescriptionTitle="Universal MacPython",
+ IFPkgDescriptionVersion=getVersion(),
+ )
+
+ writePlist(pl, os.path.join(pkgroot, 'Resources', 'Description.plist'))
+ for fn in os.listdir('resources'):
+ if fn == '.svn': continue
+ if fn.endswith('.jpg'):
+ shutil.copy(os.path.join('resources', fn), os.path.join(rsrcDir, fn))
+ else:
+ patchFile(os.path.join('resources', fn), os.path.join(rsrcDir, fn))
+
+ shutil.copy("../../../LICENSE", os.path.join(rsrcDir, 'License.txt'))
+
+
+def installSize(clear=False, _saved=[]):
+ if clear:
+ del _saved[:]
+ if not _saved:
+ data = captureCommand("du -ks %s"%(
+ shellQuote(os.path.join(WORKDIR, '_root'))))
+ _saved.append("%d"%((0.5 + (int(data.split()[0]) / 1024.0)),))
+ return _saved[0]
+
+
+def buildDMG():
+ """
+ Create DMG containing the rootDir
+ """
+ outdir = os.path.join(WORKDIR, 'diskimage')
+ if os.path.exists(outdir):
+ shutil.rmtree(outdir)
+
+ imagepath = os.path.join(outdir,
+ 'python-%s-macosx'%(getFullVersion(),))
+ if INCLUDE_TIMESTAMP:
+ imagepath = imagepath + '%04d-%02d-%02d'%(time.localtime()[:3])
+ imagepath = imagepath + '.dmg'
+
+ os.mkdir(outdir)
+ runCommand("hdiutil create -volname 'Univeral MacPython %s' -srcfolder %s %s"%(
+ getFullVersion(),
+ shellQuote(os.path.join(WORKDIR, 'installer')),
+ shellQuote(imagepath)))
+
+ return imagepath
+
+
+def setIcon(filePath, icnsPath):
+ """
+ Set the custom icon for the specified file or directory.
+
+ For a directory the icon data is written in a file named 'Icon\r' inside
+ the directory. For both files and directories write the icon as an 'icns'
+ resource. Furthermore set kHasCustomIcon in the finder flags for filePath.
+ """
+ ref, isDirectory = Carbon.File.FSPathMakeRef(icnsPath)
+ icon = Carbon.Icn.ReadIconFile(ref)
+ del ref
+
+ #
+ # Open the resource fork of the target, to add the icon later on.
+ # For directories we use the file 'Icon\r' inside the directory.
+ #
+
+ ref, isDirectory = Carbon.File.FSPathMakeRef(filePath)
+
+ if isDirectory:
+ tmpPath = os.path.join(filePath, "Icon\r")
+ if not os.path.exists(tmpPath):
+ fp = open(tmpPath, 'w')
+ fp.close()
+
+ tmpRef, _ = Carbon.File.FSPathMakeRef(tmpPath)
+ spec = Carbon.File.FSSpec(tmpRef)
+
+ else:
+ spec = Carbon.File.FSSpec(ref)
+
+ try:
+ Carbon.Res.HCreateResFile(*spec.as_tuple())
+ except MacOS.Error:
+ pass
+
+ # Try to create the resource fork again, this will avoid problems
+ # when adding an icon to a directory. I have no idea why this helps,
+ # but without this adding the icon to a directory will fail sometimes.
+ try:
+ Carbon.Res.HCreateResFile(*spec.as_tuple())
+ except MacOS.Error:
+ pass
+
+ refNum = Carbon.Res.FSpOpenResFile(spec, fsRdWrPerm)
+
+ Carbon.Res.UseResFile(refNum)
+
+ # Check if there already is an icon, remove it if there is.
+ try:
+ h = Carbon.Res.Get1Resource('icns', kCustomIconResource)
+ except MacOS.Error:
+ pass
+
+ else:
+ h.RemoveResource()
+ del h
+
+ # Add the icon to the resource for of the target
+ res = Carbon.Res.Resource(icon)
+ res.AddResource('icns', kCustomIconResource, '')
+ res.WriteResource()
+ res.DetachResource()
+ Carbon.Res.CloseResFile(refNum)
+
+ # And now set the kHasCustomIcon property for the target. Annoyingly,
+ # python doesn't seem to have bindings for the API that is needed for
+ # this. Cop out and call SetFile
+ os.system("/Developer/Tools/SetFile -a C %s"%(
+ shellQuote(filePath),))
+
+ if isDirectory:
+ os.system('/Developer/Tools/SetFile -a V %s'%(
+ shellQuote(tmpPath),
+ ))
+
+def main():
+ # First parse options and check if we can perform our work
+ parseOptions()
+ checkEnvironment()
+
+ os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.3'
+
+ if os.path.exists(WORKDIR):
+ shutil.rmtree(WORKDIR)
+ os.mkdir(WORKDIR)
+
+ # Then build third-party libraries such as sleepycat DB4.
+ buildLibraries()
+
+ # Now build python itself
+ buildPython()
+ buildPythonDocs()
+ fn = os.path.join(WORKDIR, "_root", "Applications",
+ "MacPython %s"%(getVersion(),), "Update Shell Profile.command")
+ shutil.copy("scripts/postflight.patch-profile", fn)
+ os.chmod(fn, 0755)
+
+ folder = os.path.join(WORKDIR, "_root", "Applications", "MacPython %s"%(
+ getVersion(),))
+ os.chmod(folder, 0755)
+ setIcon(folder, "../Icons/Python Folder.icns")
+
+ # Create the installer
+ buildInstaller()
+
+ # And copy the readme into the directory containing the installer
+ patchFile('resources/ReadMe.txt', os.path.join(WORKDIR, 'installer', 'ReadMe.txt'))
+
+ # Ditto for the license file.
+ shutil.copy('../../../LICENSE', os.path.join(WORKDIR, 'installer', 'License.txt'))
+
+ fp = open(os.path.join(WORKDIR, 'installer', 'Build.txt'), 'w')
+ print >> fp, "# BUILD INFO"
+ print >> fp, "# Date:", time.ctime()
+ print >> fp, "# By:", pwd.getpwuid(os.getuid()).pw_gecos
+ fp.close()
+
+ # Custom icon for the DMG, shown when the DMG is mounted.
+ shutil.copy("../Icons/Disk Image.icns",
+ os.path.join(WORKDIR, "installer", ".VolumeIcon.icns"))
+ os.system("/Developer/Tools/SetFile -a C %s"%(
+ os.path.join(WORKDIR, "installer", ".VolumeIcon.icns")))
+
+
+ # And copy it to a DMG
+ buildDMG()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/Mac/OSX/BuildScript/ncurses-5.5.patch b/Mac/OSX/BuildScript/ncurses-5.5.patch
new file mode 100644
index 0000000..0eab3d3
--- /dev/null
+++ b/Mac/OSX/BuildScript/ncurses-5.5.patch
@@ -0,0 +1,36 @@
+diff -r -u ncurses-5.5-orig/test/Makefile.in ncurses-5.5/test/Makefile.in
+--- ncurses-5.5-orig/test/Makefile.in 2006-03-24 12:47:40.000000000 +0100
++++ ncurses-5.5/test/Makefile.in 2006-03-24 12:47:50.000000000 +0100
+@@ -75,7 +75,7 @@
+ MATH_LIB = @MATH_LIB@
+
+ LD = @LD@
+-LINK = @LINK_TESTS@ $(LIBTOOL_LINK) $(CC) $(CFLAGS)
++LINK = @LINK_TESTS@ $(LIBTOOL_LINK) $(CC)
+
+ usFLAGS = @LD_MODEL@ @LOCAL_LDFLAGS@ @LDFLAGS@
+
+diff -ru ncurses-5.5-orig/ncurses/tinfo/read_entry.c ncurses-5.5/ncurses/tinfo/read_entry.c
+--- ncurses-5.5-orig/ncurses/tinfo/read_entry.c 2004-01-11 02:57:05.000000000 +0100
++++ ncurses-5.5/ncurses/tinfo/read_entry.c 2006-03-25 22:49:39.000000000 +0100
+@@ -474,7 +474,7 @@
+ }
+
+ /* truncate the terminal name to prevent buffer overflow */
+- (void) sprintf(ttn, "%c/%.*s", *tn, (int) sizeof(ttn) - 3, tn);
++ (void) sprintf(ttn, "%x/%.*s", *tn, (int) sizeof(ttn) - 3, tn);
+
+ /* This is System V behavior, in conjunction with our requirements for
+ * writing terminfo entries.
+diff -ru ncurses-5.5-orig/configure ncurses-5.5/configure
+--- ncurses-5.5-orig/configure 2005-09-24 23:50:50.000000000 +0200
++++ ncurses-5.5/configure 2006-03-26 22:24:59.000000000 +0200
+@@ -5027,7 +5027,7 @@
+ darwin*)
+ EXTRA_CFLAGS="-no-cpp-precomp"
+ CC_SHARED_OPTS="-dynamic"
+- MK_SHARED_LIB='$(CC) -dynamiclib -install_name $(DESTDIR)$(libdir)/`basename $@` -compatibility_version $(ABI_VERSION) -current_version $(ABI_VERSION) -o $@'
++ MK_SHARED_LIB='$(CC) $(CFLAGS) -dynamiclib -install_name $(DESTDIR)$(libdir)/`basename $@` -compatibility_version $(ABI_VERSION) -current_version $(ABI_VERSION) -o $@'
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=abi
+ cf_cv_shlib_version_infix=yes
+ ;;
diff --git a/Mac/OSX/BuildScript/resources/ReadMe.txt b/Mac/OSX/BuildScript/resources/ReadMe.txt
new file mode 100644
index 0000000..1a6e637
--- /dev/null
+++ b/Mac/OSX/BuildScript/resources/ReadMe.txt
@@ -0,0 +1,31 @@
+This package will install MacPython $FULL_VERSION for Mac OS X
+$MACOSX_DEPLOYMENT_TARGET for the following
+architecture(s): $ARCHITECTURES.
+
+Separate installers are available for older versions
+of Mac OS X, see the homepage, below.
+
+Installation requires approximately $INSTALL_SIZE MB of disk
+space, ignore the message that it will take zero bytes.
+
+You must install onto your current boot disk, even
+though the installer does not enforce this, otherwise
+things will not work.
+
+MacPython consists of the Python programming language
+interpreter, plus a set of programs to allow easy
+access to it for Mac users (an integrated development
+environment, an applet builder), plus a set of pre-built
+extension modules that open up specific Macintosh technologies
+to Python programs (Carbon, AppleScript, Quicktime, more).
+
+The installer puts the applications in "MacPython $VERSION"
+in your Applications folder, command-line tools in
+/usr/local/bin and the underlying machinery in
+$PYTHONFRAMEWORKINSTALLDIR.
+
+More information on MacPython can be found at
+http://www.cwi.nl/~jack/macpython and
+http://pythonmac.org/. More information on
+Python in general can be found at
+http://www.python.org.
diff --git a/Mac/OSX/Dist/resources/Welcome.rtf b/Mac/OSX/BuildScript/resources/Welcome.rtf
index ec6bb1a..cb65f09 100644
--- a/Mac/OSX/Dist/resources/Welcome.rtf
+++ b/Mac/OSX/BuildScript/resources/Welcome.rtf
@@ -1,15 +1,15 @@
-{\rtf1\mac\ansicpg10000\cocoartf102
+{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330
{\fonttbl\f0\fswiss\fcharset77 Helvetica;\f1\fswiss\fcharset77 Helvetica-Bold;}
{\colortbl;\red255\green255\blue255;}
\paperw11900\paperh16840\margl1440\margr1440\vieww9920\viewh10660\viewkind0
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural
\f0\fs24 \cf0 This package will install
-\f1\b MacPython 2.5a0
+\f1\b MacPython $FULL_VERSION
\f0\b0 for
-\f1\b Mac OS X 10.3
-\f0\b0 . Installation on 10.2 or earlier will not work.\
+\f1\b Mac OS X $MACOSX_DEPLOYMENT_TARGET
+\f0\b0 .\
\
-MacPython consists of the Python programming language interpreter, plus a set of programs to allow easy access to it for Mac users (an integrated development environment, a Python extension package manager), plus a set of pre-built extension modules that open up specific Macintosh technologies to Python programs (Carbon, AppleScript, Quicktime, more).\
+MacPython consists of the Python programming language interpreter, plus a set of programs to allow easy access to it for Mac users (an integrated development environment, an applet builder), plus a set of pre-built extension modules that open up specific Macintosh technologies to Python programs (Carbon, AppleScript, Quicktime, more).\
\
See the ReadMe file for more information.} \ No newline at end of file
diff --git a/Mac/OSX/BuildScript/resources/background.jpg b/Mac/OSX/BuildScript/resources/background.jpg
new file mode 100644
index 0000000..b3c7640
--- /dev/null
+++ b/Mac/OSX/BuildScript/resources/background.jpg
Binary files differ
diff --git a/Mac/OSX/BuildScript/scripts/postflight.documentation b/Mac/OSX/BuildScript/scripts/postflight.documentation
new file mode 100755
index 0000000..85d400f
--- /dev/null
+++ b/Mac/OSX/BuildScript/scripts/postflight.documentation
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# FIXME
+PYVER="@PYVER@"
+
+if [ -d /Developer/Documentation ]; then
+ if [ ! -d /Developer/Documentation/Python ]; then
+ mkdir -p /Developer/Documentation/Python
+ fi
+
+ ln -fhs /Library/Frameworks/Python.framework/Versions/${PYVER}/Resources/English.lproj/Documentation "/Developer/Documentation/Python/Reference Documentation"
+fi
diff --git a/Mac/OSX/BuildScript/scripts/postflight.framework b/Mac/OSX/BuildScript/scripts/postflight.framework
new file mode 100755
index 0000000..532e745
--- /dev/null
+++ b/Mac/OSX/BuildScript/scripts/postflight.framework
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# Recompile the .py files.
+#
+
+PYVER="@PYVER@"
+FWK="/Library/Frameworks/Python.framework/Versions/@PYVER@/"
+
+"${FWK}/bin/python" -Wi -tt \
+ "${FWK}/lib/python${PYVER}/compileall.py" \
+ -x badsyntax -x site-packages \
+ "${FWK}/lib/python${PYVER}"
+
+"${FWK}/bin/python" -Wi -tt -O \
+ "${FWK}/lib/python${PYVER}/compileall.py" \
+ -x badsyntax -x site-packages \
+ "${FWK}/lib/python${PYVER}"
+
+"${FWK}/bin/python" -Wi -tt \
+ "${FWK}/lib/python${PYVER}/compileall.py" \
+ -x badsyntax -x site-packages \
+ "${FWK}/Mac/Tools"
+
+"${FWK}/bin/python" -Wi -tt -O \
+ "${FWK}/lib/python${PYVER}/compileall.py" \
+ -x badsyntax -x site-packages \
+ "${FWK}/Mac/Tools"
+
+
+chown -R admin "${FWK}"
+chmod -R g+w "${FWK}"
+
+exit 0
diff --git a/Mac/OSX/BuildScript/scripts/postflight.patch-profile b/Mac/OSX/BuildScript/scripts/postflight.patch-profile
new file mode 100755
index 0000000..48bf701
--- /dev/null
+++ b/Mac/OSX/BuildScript/scripts/postflight.patch-profile
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+echo "This script will update your shell profile when the 'bin' directory"
+echo "of python is not early enough of the PATH of your shell."
+echo "These changes will be effective only in shell windows that you open"
+echo "after running this script."
+
+PYVER=@PYVER@
+PYTHON_ROOT="/Library/Frameworks/Python.framework/Versions/Current"
+
+# Make sure the directory ${PYTHON_ROOT}/bin is on the users PATH.
+BSH="`basename "${SHELL}"`"
+case "${BSH}" in
+bash|ksh|sh|*csh)
+ P="`${SHELL} -c 'echo $PATH'`"
+ ;;
+*)
+ echo "Sorry, I don't know how to patch $BSH shells"
+ exit 0
+ ;;
+esac
+
+# Now ensure that our bin directory is on $P and before /usr/bin at that
+for elem in `echo $P | tr ':' ' '`
+do
+ if [ "${elem}" == "${PYTHON_ROOT}/bin" ]; then
+ echo "All right, you're a python lover already"
+ exit 0
+ elif [ "${elem}" == "/usr/bin" ]; then
+ break
+ fi
+done
+
+echo "${PYTHON_ROOT}/bin is not on your PATH or at least not early enough"
+case "${BSH}" in
+*csh)
+ # Create backup copy before patching
+ if [ -f "${HOME}/.cshrc" ]; then
+ cp -fp "${HOME}/.cshrc" "${HOME}/.cshrc.pysave"
+ fi
+ echo "" >> "${HOME}/.cshrc"
+ echo "# Setting PATH for MacPython ${PYVER}" >> "${HOME}/.cshrc"
+ echo "# The orginal version is saved in .cshrc.pysave" >> "${HOME}/.cshrc"
+ echo "set path=(${PYTHON_ROOT}/bin "'$path'")" >> "${HOME}/.cshrc"
+ exit 0
+ ;;
+bash)
+ if [ -e "${HOME}/.profile" ]; then
+ PR="${HOME}/.profile"
+ else
+ PR="${HOME}/.bash_profile"
+ fi
+ ;;
+*sh)
+ PR="${HOME}/.profile"
+ ;;
+esac
+
+# Create backup copy before patching
+if [ -f "${PR}" ]; then
+ cp -fp "${PR}" "${PR}.pysave"
+fi
+echo "" >> "${PR}"
+echo "# Setting PATH for MacPython ${PYVER}" >> "${PR}"
+echo "# The orginal version is saved in `basename ${PR}`.pysave" >> "${PR}"
+echo 'PATH="'"${PYTHON_ROOT}/bin"':${PATH}"' >> "${PR}"
+echo 'export PATH' >> "${PR}"
+if [ `id -ur` = 0 ]; then
+ chown "${LOGNAME}" "${PR}"
+fi
+exit 0
diff --git a/Mac/OSX/Dist/README.txt b/Mac/OSX/Dist/README.txt
deleted file mode 100644
index 371c3fe..0000000
--- a/Mac/OSX/Dist/README.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-Building a MacPython distribution
-=================================
-
-The ``build`` shell script here creates MacPython distributions.
-It builds a complete framework-based Python out-of-tree, installs
-it in a funny place with $DESTROOT, massages that installation to remove
-.pyc files and such, creates an Installer package from the installation
-plus the stuff in ``resources`` and compresses that installer as a
-``.dmg`` disk image.
-
-Here are the steps you ned to follow to build a MacPython installer:
-
-- There are various version numbers that need to be updated. Weed through
- ``Mac/OSXResources``, ``Mac/scripts`` and ``Mac/Tools`` and inspect the
- various ``.plist`` and ``.strings`` files. Note that the latter are
- UTF-16 files.
-- Edit ``resource/ReadMe.txt`` and ``resources/Welcome.rtf`` to reflect
- version number and such.
-- Edit ``build`` to change ``PYVERSION``, ``PYVER`` and ``BUILDNUM``.
-- Edit ``resources/postflight`` and change version number.
-- Run ``./build``. Optionally you can pass the name of the directory
- where Python will be built, so you don't have to wait for the complete
- build when you're debugging the process. For the final distribution use
- a clean build.
-- When done the script will tell you where the DMG image is.
-
-Currently (November 2003) there is still a bug in the build procedure
-for $DESTROOT builds: building some of the applets will fail (in
-``Mac/OSX/Makefile``) if you don't have the same version of Python installed
-normally. So before doing the distribution you should build and install
-a framework Python in the normal way.
-
-When all is done, announcements can be posted to at least the following
-places:
-- pythonmac-sig@python.org
-- python-dev@python.org
-- python-announce@python.org
-- archivist@info-mac.org
-- adcnews@apple.com
-- news@macnn.com
-- http://www.macupdate.com
-- http://guide.apple.com/usindex.lasso
-- http://www.apple.com/downloads/macosx/submit
-- http://www.versiontracker.com/ (userid Jack.Jansen@oratrix.com)
-- http://www.macshareware.net (userid jackjansen)
-
-Also, check out Stephan Deibels http://pythonology.org/market contact list
-
-After all this is done you may also need to update the Package Manager
-database for the new distribution. A description of this remains TBD.
diff --git a/Mac/OSX/Dist/build b/Mac/OSX/Dist/build
deleted file mode 100755
index b5ebe3e..0000000
--- a/Mac/OSX/Dist/build
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/bin/sh -e
-#----------------------------------------------------------------------
-# Build MacPython 2.5 and make an Installer package of it
-
-# TODO: Parameterize the versions, builddirs, etc...
-
-# Script configs
-PYVERSION=2.5a0
-PYVER=2.5
-BUILDNUM=1
-DOCLEANUP=no
-
-PROGDIR="`dirname \"$0\"`"
-case x$PROGDIR in
-x|x.) PROGDIR=`pwd` ;;
-x/*) ;;
-*) echo "Please run with a full pathname"
- exit 1
- ;;
-esac
-
-TMPDIR=/tmp/_py
-#TMPDIR=/projects/_py
-
-INSTALLROOT=$TMPDIR/install
-DMGDIR=$TMPDIR/dmg
-RESOURCEDIR=$PROGDIR/resources
-DESTDIR=$TMPDIR/dist
-PYTHONSRC=$PROGDIR/../../..
-WASTEDIR=$PYTHONSRC/../waste
-
-case x$1 in
-x)
- BUILDROOT=$TMPDIR/build
- ;;
-*)
- BUILDROOT=$1
- ;;
-esac
-
-# Setup
-if [ -e $BUILDROOT ]; then
- echo Using existing build directory $BUILDROOT
- CLEANBUILD=no
-else
- echo Creating clean build directory $BUILDROOT
- CLEANBUILD=yes
- mkdir -p $BUILDROOT
-fi
-rm -rf $DMGDIR
-if [ ! -e $TMPDIR ]; then
- mkdir $TMPDIR
-fi
-chgrp admin $TMPDIR
-mkdir -p $DMGDIR/root
-
-
-# Configure and build Python
-pushd $BUILDROOT
-
-# Ask the user whether s/he has edited Welcome.txt
-read -p "Have you updated $RESOURCEDIR/Welcome.txt (Y/n)? " welcome
-
-if [ "$welcome" = "n" -o "$welcome" = "N" ]; then
- echo "Please do so and retry"
- exit
-fi
-
-# Check if we should build and install the docs, but only if it
-# doesn't appear to be done already. TODO: fix this path to be version independent
-if [ ! -e "build/temp.darwin-6.3-Power Macintosh-2.3/build-html/build-html idx" ]; then
- read -p "Build the Python docs? (y/N)? " builddocs
-fi
-
-# If the filesystem is case-sensitive then "python" will be built, but
-# some parts of the install expect "python.exe which is what is built
-# on a case-insensitive filesystem. Make a link just in case it is
-# needed.
-if [ ! -e python.exe ]; then
- ln -s python python.exe
-fi
-
-# Make a link to the waste dir so that lib can be found. This allows
-# the PythonIDE to be built
-if [ ! -e waste ]; then
- ln -s $WASTEDIR waste
-fi
-
-#$PYTHONSRC/configure -C --enable-framework LDFLAGS=-Wl,-x
-$PYTHONSRC/configure -C --enable-framework
-make
-make DIRMODE=775 EXEMODE=775 FILEMODE=664 DESTDIR=$INSTALLROOT frameworkinstall
-make DIRMODE=775 EXEMODE=775 FILEMODE=664 DESTDIR=$INSTALLROOT frameworkinstallextras
-
-# Unfortunately all the ...MODE arguments above still don't do the trick.
-# Cop out, and recursively set everything group-writeable.
-chmod -R ug+w $INSTALLROOT
-
-if [ "$builddocs" = "y" -o "$builddocs" = "Y" ]; then
- ./python.exe $PYTHONSRC/Mac/OSX/setupDocs.py build
- echo ""
- read -p "When the help indexer is done press Enter..." ans
- ./python.exe $PYTHONSRC/Mac/OSX/setupDocs.py install \
- --prefix=$INSTALLROOT/Library/Frameworks/Python.framework/Versions/$PYVER
-fi
-
-popd
-
-
-
-# Make the Installer package:
-# First, remove the unix tools as their paths will be wrong. We'll recreate
-# them in the postinstall.
-rm -rf $INSTALLROOT/usr
-
-# Next, remove the .pyc/.pyo files
-python $PYTHONSRC/Mac/scripts/zappycfiles.py $INSTALLROOT/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER
-python $PYTHONSRC/Mac/scripts/zappycfiles.py $INSTALLROOT/Library/Frameworks/Python.framework/Versions/$PYVER/Mac/Tools
-
-# Finally, build the package...
-rm -rf MacPython-OSX.pkg
-python $PYTHONSRC/Mac/scripts/buildpkg.py \
- --Title=MacPython-OSX \
- --Version=$PYVERSION-$BUILDNUM \
- --Description="Python $PYVERSION for Mac OS X, framework based" \
- --NeedsAuthorization="YES" \
- --Relocatable="NO" \
- --InstallOnly="YES" \
- --UseUserMask="NO" \
- $INSTALLROOT \
- $RESOURCEDIR
-
-# --RootVolumeOnly="YES" \
-
-# ...and then make a disk image containing the package.
-mv MacPython-OSX.pkg $DMGDIR/root
-cp $RESOURCEDIR/ReadMe.txt $DMGDIR/root/ReadMe.txt
-$PROGDIR/makedmg $DMGDIR/root $DMGDIR MacPython-OSX-$PYVERSION-$BUILDNUM
-
-echo Moving $DMGDIR/MacPython-OSX-$PYVERSION-$BUILDNUM to $DESTDIR
-if [ ! -e $DESTDIR ]; then
- mkdir $DESTDIR
-fi
-mv $DMGDIR/MacPython-OSX-$PYVERSION-$BUILDNUM.dmg $DESTDIR
-
-
-# Cleanup build/install dirs
-if [ $DOCLEANUP = yes ]; then
- echo "Cleaning up..."
- if [ $CLEANBUILD = yes ]; then
- rm -rf $BUILDROOT
- fi
- rm -rf $INSTALLROOT
- rm -rf $DMGDIR
-else
- echo "Cleanup is disabled. You should remove these dirs when done:"
- if [ $CLEANBUILD = yes ]; then
- echo " $BUILDROOT"
- fi
- echo " $INSTALLROOT"
- echo " $DMGDIR"
-fi
-echo "Your installer can be found in $DESTDIR"
-
diff --git a/Mac/OSX/Dist/example-pimp-database.plist b/Mac/OSX/Dist/example-pimp-database.plist
deleted file mode 100644
index c0c52ab..0000000
--- a/Mac/OSX/Dist/example-pimp-database.plist
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>Description</key>
- <string>Enter database description</string>
- <key>Maintainer</key>
- <string>Enter your email address</string>
- <key>Packages</key>
- <array>
- <dict>
- <key>Description</key>
- <string>Enter package description</string>
- <key>Download-URL</key>
- <string>Enter URL for archive download, delete for pseudo-pkgs</string>
- <key>Flavor</key>
- <string>Enter binary or source</string>
- <key>Home-page</key>
- <string>Enter URL of human-readable webpage</string>
- <key>Install-command</key>
- <string>Enter shell commands to run for installation</string>
- <key>Install-test</key>
- <string>Enter Python code to test for already installed</string>
- <key>MD5Sum</key>
- <string>Enter checksum of package archive</string>
- <key>Name</key>
- <string>Enter name of package</string>
- <key>Post-install-command</key>
- <string>Enter shell command to run after install</string>
- <key>Pre-install-command</key>
- <string>Enter shell command to run before install</string>
- <key>Prerequisites</key>
- <array>
- <string>Enter human-readable recipy for pseudo-dependencies</string>
- <dict>
- <key>Flavor</key>
- <string>Enter optional flavor for real dependency</string>
- <key>Name</key>
- <string>Enter name for real dependency</string>
- <key>Version</key>
- <string></string>
- </dict>
- </array>
- <key>Version</key>
- <string>Enter version string for package</string>
- </dict>
- </array>
- <key>Version</key>
- <string>0.1</string>
-</dict>
-</plist>
diff --git a/Mac/OSX/Dist/makedmg b/Mac/OSX/Dist/makedmg
deleted file mode 100755
index de13ef9..0000000
--- a/Mac/OSX/Dist/makedmg
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/perl -w
-#
-# make disk image from folder
-#
-# usage: makedmg src dst name
-#
-# Donated by Frank Vercruesse
-
-
-$hdiUtilExec = "/usr/bin/hdiutil";
-$hdiDrvExec = "/usr/bin/hdid";
-$newfsExec = "/sbin/newfs_hfs";
-$duExec = "/usr/bin/du";
-$dittoExec = "/usr/bin/ditto";
-
-if ( $#ARGV != 2 ) {
- die "Wrong number of arguments.\nUsage: makedmg src dst name\n";
-}
-
-&make_dmg( $ARGV[0], $ARGV[1], $ARGV[2]);
-
-
-sub make_dmg
-{
- my $src = $_[0];
- my $dst = $_[1];
- my $name = $_[2];
-
- # check dirs
- if( not -d $dst && -d $src ) {
- die "src and dst must be directories\n";
- }
-
- # calc disk image size
- if( not open( MYPIPE, "$duExec -sk \"${src}\" |") ) {
- die "couldn't open pipe\n";
- }
- (my $dmgsize) = split( /\s+/, <MYPIPE>);
- close( MYPIPE);
- $dmgsize /= 1024;
- $dmgsize = int($dmgsize + 4);
- if( $dmgsize < 5 ) {
- $dmgsize = 5
- }
-
- # create disk image
- system "cd \"$dst\"; $hdiUtilExec create -megabytes $dmgsize -ov \"_${name}\"";
- if( $? ) { die "couldn't create disk image\n"; }
-
- # format disk image
- if( not open( MYPIPE, "cd \"$dst\"; $hdiDrvExec -nomount \"_${name}.dmg\" |") ) {
- die "couldn't open pipe\n";
- }
- (my $dev) = split( /\t/, <MYPIPE>);
- $dev =~ s/^(.*\S)\s*$/$1/;
- my( $part, $raw, $pname);
- while( <MYPIPE> ) {
- ($part,$pname) = split /\t/;
- if( $pname =~ m/^Apple_HFS/ ) {
- $part =~ s/^\s*(.*\S)\s*$/$1/;
- $raw = $part;
- $raw =~ s/^(\/dev\/)(.+)/$1r$2/;
- last;
- }
- }
- close( MYPIPE);
- system "cd \"$dst\" ; $newfsExec -v \"$name\" $raw";
- if( $? ) { system "$hdiUtilExec eject $dev"; die "couldn't format disk image\n"; }
- system "$hdiUtilExec eject $dev";
- if( $? ) { die "couldn't eject disk image\n"; }
-
- # copy files
- if( not open( MYPIPE, "cd \"$dst\"; $hdiDrvExec \"_${name}.dmg\" |") ) {
- die "couldn't open pipe\n";
- }
- ($dev) = split( /\t/, <MYPIPE>);
- $dev =~ s/^(.*\S)\s*$/$1/;
- my $vname;
- while( <MYPIPE> ) {
- ($part,$pname,$vname) = split /\t/;
- if( $pname =~ m/^Apple_HFS/ ) {
- $vname =~ s/^(.*\S)\s*$/$1/;
- last;
- }
- }
- close( MYPIPE);
- system "$dittoExec \"${src}\" \"${vname}\"";
- if( $? ) { system "$hdiUtilExec eject $dev"; die "couldn't copy files\n"; }
- system "$hdiUtilExec eject $dev";
- if( $? ) { die "couldn't eject disk image\n"; }
-
- # convert disk image
- system "cd \"$dst\"; $hdiUtilExec convert \"_${name}.dmg\" -format UDCO -o \"${name}\"";
- if( $? ) { die "couldn't convert disk image\n"; }
-}
diff --git a/Mac/OSX/Dist/resources/ReadMe.txt b/Mac/OSX/Dist/resources/ReadMe.txt
deleted file mode 100644
index 39a7b82..0000000
--- a/Mac/OSX/Dist/resources/ReadMe.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-This package will install MacPython 2.5a0 for Mac OS X
-10.3.
-
-Installation requires approximately 20 MB of disk
-space, ignore the message that it will take zero bytes.
-
-You must install onto your current boot disk, even
-though the installer does not enforce this, otherwise
-things will not work.
-
-MacPython consists of the Python programming language
-interpreter, plus a set of programs to allow easy
-access to it for Mac users (an integrated development
-environment, a Python extension package manager), plus
-a set of pre-built extension modules that open up
-specific Macintosh technologies to Python programs
-(Carbon, AppleScript, Quicktime, more).
-
-The installer puts the applications in MacPython-2.5 in
-your Applications folder, command-line tools in
-/usr/local/bin and the underlying machinery in
-/Library/Frameworks/Python.framework.
-
-The PythonIDE application has a Help command that gets
-you started quickly with MacPython and contains
-references to other documentation.
-
-More information on MacPython can be found at
-http://www.cwi.nl/~jack/macpython, more
-information on Python in general at
-http://www.python.org.
diff --git a/Mac/OSX/Dist/resources/postflight b/Mac/OSX/Dist/resources/postflight
deleted file mode 100755
index 878b6d4..0000000
--- a/Mac/OSX/Dist/resources/postflight
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/bin/sh
-#----------------------------------------------------------------------
-# Create the unix tools and compile the .py files after Python has been
-# installed.
-#----------------------------------------------------------------------
-
-PYVER=2.5
-
-PKG=$1
-DEST=$2
-
-# Make sure things are group-writeable
-umask 2
-
-# if destination is / then use usr/local/bin, otherwise just bin
-if [ "$DEST" = "/" ]; then
- TOOLDIR=/usr/local/bin
- DEST=
-else
- TOOLDIR=$DEST/bin
-fi
-
-# Make sure the dir exists
-mkdir -p $TOOLDIR
-
-# Make some links to the python executable
-ln -fsh $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/bin/python $TOOLDIR/python$PYVER
-ln -fsh python$PYVER $TOOLDIR/python
-
-
-# make the pythonw script
-rm -f $TOOLDIR/pythonw$PYVER
-cat > $TOOLDIR/pythonw$PYVER <<EOF
-#!/bin/sh
-exec "$DEST/Library/Frameworks/Python.framework/Versions/$PYVER/Resources/Python.app/Contents/MacOS/Python" "\$@"
-EOF
-chmod +x $TOOLDIR/pythonw$PYVER
-ln -fsh pythonw$PYVER $TOOLDIR/pythonw
-
-
-# Compile the .py files in the Python library to .pyc's and then .pyo's
-$TOOLDIR/python -Wi -tt \
- $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/compileall.py \
- -x badsyntax -x site-packages $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER
-
-$TOOLDIR/python -Wi -tt -O \
- $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/compileall.py \
- -x badsyntax -x site-packages $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER
-
-$TOOLDIR/python -Wi -tt \
- $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/compileall.py \
- $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/Mac/Tools
-
-$TOOLDIR/python -Wi -tt -O \
- $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/compileall.py \
- $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/Mac/Tools
-
-
-# Make the site-packages and other dirs writable by the admin if destination is /
-
-if [ "$DEST" = "/" ]; then
- for d in $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/site-packages \
- $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/bin \
- $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/Resources/Python.app/Contents/Resources \
- $DEST/Applications/MacPython-$PYVER; do
- chgrp -R admin $d
- chmod -R g+w $d
- done
-fi
-
-if [ "$DEST" != "/" ]; then
- # The link in the app bundles and in pydoc need updating.
- installed_python=$DEST/Library/Frameworks/Python.framework/Versions/$PYVER/Resources/Python.app/Contents/MacOS/python
- for app in BuildApplet IDLE PackageManager PythonIDE; do
- ln -fsh $installed_python \
- $DEST/Applications/MacPython-$PYVER/$app.app/Contents/MacOS
- ed -s $DEST/Applications/MacPython-$PYVER/$app.app/Contents/MacOS/$app << xyzzy
-1c
-#!$installed_python
-.
-w
-q
-xyzzy
- ed -s $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/bin/pydoc << xyzzy
-1c
-#!$installed_python
-.
-w
-q
-xyzzy
- done
-fi
diff --git a/Mac/OSX/Extras.ReadMe.txt b/Mac/OSX/Extras.ReadMe.txt
index 3ab4568..2d7fd42 100644
--- a/Mac/OSX/Extras.ReadMe.txt
+++ b/Mac/OSX/Extras.ReadMe.txt
@@ -3,12 +3,3 @@ This folder contains examples of Python usage and useful scripts and tools.
You should be aware that these are not Macintosh-specific but are shared
among Python on all platforms, so there are some that only run on Windows
or Unix or another platform, and/or make little sense on a Macintosh.
-
-Some examples can be run from within the PythonIDE, but many will require
-that you start them from the command line or with PythonLauncher. In the
-latter case, you can supply any needed command line arguments by holding
-the "alt" key while dragging the script to PythonLauncher, or while
-double-clicking the script if PythonLauncher is set as the default application
-to open Python scripts with. See "Changing the application that opens a file"
-in Mac Help for information on making PythonLauncher the default application.
-
diff --git a/Mac/OSX/Extras.install.py b/Mac/OSX/Extras.install.py
index 2521f06..ce00af3 100644
--- a/Mac/OSX/Extras.install.py
+++ b/Mac/OSX/Extras.install.py
@@ -12,6 +12,7 @@ def isclean(name):
if name == 'CVS': return 0
if name == '.cvsignore': return 0
if name == '.DS_store': return 0
+ if name == '.svn': return 0
if name.endswith('~'): return 0
if name.endswith('.BAK'): return 0
if name.endswith('.pyc'): return 0
diff --git a/Mac/OSX/IDLE/Info.plist b/Mac/OSX/IDLE/Info.plist
new file mode 100644
index 0000000..bbe2ea1
--- /dev/null
+++ b/Mac/OSX/IDLE/Info.plist
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleDocumentTypes</key>
+ <array>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>py</string>
+ <string>pyw</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>PythonSource.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Python Script</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>pyc</string>
+ <string>pyo</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>PythonCompiled.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Python Bytecode Document</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ </array>
+ <key>CFBundleExecutable</key>
+ <string>IDLE</string>
+ <key>CFBundleGetInfoString</key>
+ <string>2.5, © 001-2006 Python Software Foundation</string>
+ <key>CFBundleIconFile</key>
+ <string>IDLE.icns</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.python.IDLE</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>IDLE</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>2.5</string>
+ <key>CFBundleVersion</key>
+ <string>2.5</string>
+</dict>
+</plist>
diff --git a/Mac/OSX/IDLE/Makefile.in b/Mac/OSX/IDLE/Makefile.in
new file mode 100644
index 0000000..a96e7ef
--- /dev/null
+++ b/Mac/OSX/IDLE/Makefile.in
@@ -0,0 +1,52 @@
+prefix=@prefix@
+CC=@CC@
+LD=@CC@
+BASECFLAGS=@BASECFLAGS@
+OPT=@OPT@
+CFLAGS=$(BASECFLAGS) $(OPT)
+LDFLAGS=@LDFLAGS@
+srcdir= @srcdir@
+VERSION= @VERSION@
+UNIVERSALSDK=@UNIVERSALSDK@
+builddir= ../../..
+
+RUNSHARED= @RUNSHARED@
+BUILDEXE= @BUILDEXEEXT@
+BUILDPYTHON= ../../../python$(BUILDEXE)
+
+# Deployment target selected during configure, to be checked
+# by distutils
+MACOSX_DEPLOYMENT_TARGET=@CONFIGURE_MACOSX_DEPLOYMENT_TARGET@
+@EXPORT_MACOSX_DEPLOYMENT_TARGET@export MACOSX_DEPLOYMENT_TARGET
+
+BUNDLEBULDER=$(srcdir)/../../../Lib/plat-mac/bundlebuilder.py
+
+PYTHONAPPSDIR=/Applications/MacPython $(VERSION)
+
+all: IDLE.app
+
+install: IDLE.app
+ test -d "$(DESTDIR)$(PYTHONAPPSDIR)" || mkdir -p "$(DESTDIR)$(PYTHONAPPSDIR)"
+ -test -d "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app" && rm -r "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app"
+ cp -PR IDLE.app "$(DESTDIR)$(PYTHONAPPSDIR)"
+ touch "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app"
+
+clean:
+ rm -rf IDLE.app
+
+IDLE.app: \
+ $(srcdir)/../Icons/IDLE.icns $(srcdir)/idlemain.py \
+ $(srcdir)/../Icons/PythonSource.icns \
+ $(srcdir)/../Icons/PythonCompiled.icns
+ rm -fr IDLE.app
+ $(RUNSHARED) $(BUILDPYTHON) $(BUNDLEBULDER) \
+ --builddir=. \
+ --name=IDLE \
+ --link-exec \
+ --plist=$(srcdir)/Info.plist \
+ --mainprogram=$(srcdir)/idlemain.py \
+ --iconfile=$(srcdir)/../Icons/IDLE.icns \
+ --resource=$(srcdir)/../Icons/PythonSource.icns \
+ --resource=$(srcdir)/../Icons/PythonCompiled.icns \
+ --python=$(prefix)/Resources/Python.app/Contents/MacOS/Python \
+ build
diff --git a/Mac/OSX/IDLE/idlemain.py b/Mac/OSX/IDLE/idlemain.py
new file mode 100644
index 0000000..aa75d4c
--- /dev/null
+++ b/Mac/OSX/IDLE/idlemain.py
@@ -0,0 +1,27 @@
+"""
+Bootstrap script for IDLE as an application bundle.
+"""
+import sys, os
+
+from idlelib.PyShell import main
+
+# Change the current directory the user's home directory, that way we'll get
+# a more useful default location in the open/save dialogs.
+os.chdir(os.path.expanduser('~/Documents'))
+
+
+# Make sure sys.executable points to the python interpreter inside the
+# framework, instead of at the helper executable inside the application
+# bundle (the latter works, but doesn't allow access to the window server)
+sys.executable = os.path.join(sys.prefix, 'bin', 'python')
+
+# Look for the -psn argument that the launcher adds and remove it, it will
+# only confuse the IDLE startup code.
+for idx, value in enumerate(sys.argv):
+ if value.startswith('-psn_'):
+ del sys.argv[idx]
+ break
+
+#argvemulator.ArgvCollector().mainloop()
+if __name__ == '__main__':
+ main()
diff --git a/Mac/OSX/Icons/Disk Image.icns b/Mac/OSX/Icons/Disk Image.icns
new file mode 100644
index 0000000..35f16bf
--- /dev/null
+++ b/Mac/OSX/Icons/Disk Image.icns
Binary files differ
diff --git a/Mac/OSX/Icons/IDLE.icns b/Mac/OSX/Icons/IDLE.icns
new file mode 100644
index 0000000..c12c9da
--- /dev/null
+++ b/Mac/OSX/Icons/IDLE.icns
Binary files differ
diff --git a/Mac/OSX/Icons/Python Folder.icns b/Mac/OSX/Icons/Python Folder.icns
new file mode 100644
index 0000000..ae766ee
--- /dev/null
+++ b/Mac/OSX/Icons/Python Folder.icns
Binary files differ
diff --git a/Mac/OSX/Icons/PythonCompiled.icns b/Mac/OSX/Icons/PythonCompiled.icns
new file mode 100644
index 0000000..7d9f320
--- /dev/null
+++ b/Mac/OSX/Icons/PythonCompiled.icns
Binary files differ
diff --git a/Mac/OSX/Icons/PythonLauncher.icns b/Mac/OSX/Icons/PythonLauncher.icns
new file mode 100644
index 0000000..e09fd38
--- /dev/null
+++ b/Mac/OSX/Icons/PythonLauncher.icns
Binary files differ
diff --git a/Mac/OSX/Icons/PythonSource.icns b/Mac/OSX/Icons/PythonSource.icns
new file mode 100644
index 0000000..9e35c1e
--- /dev/null
+++ b/Mac/OSX/Icons/PythonSource.icns
Binary files differ
diff --git a/Mac/OSX/Icons/ReadMe.txt b/Mac/OSX/Icons/ReadMe.txt
new file mode 100644
index 0000000..226836a
--- /dev/null
+++ b/Mac/OSX/Icons/ReadMe.txt
@@ -0,0 +1,3 @@
+The icons for use on MacOS X were created by Jacob Rus <jrus@fas.harvard.edu>
+with some feedback from the folks on pythonmac-sig@python.org.
+
diff --git a/Mac/OSX/Makefile b/Mac/OSX/Makefile
deleted file mode 100644
index 10b0f5d..0000000
--- a/Mac/OSX/Makefile
+++ /dev/null
@@ -1,273 +0,0 @@
-# This file can be invoked from the various frameworkinstall... targets in the
-# main Makefile. The next couple of variables are overridden on the
-# commandline in that case.
-
-VERSION=2.5
-builddir = ../..
-srcdir = ../..
-prefix=/Library/Frameworks/Python.framework/Versions/$(VERSION)
-LIBDEST=$(prefix)/lib/python$(VERSION)
-BUILDPYTHON=$(builddir)/python.exe
-DESTDIR=
-# Test whether to use xcodebuild (preferred) or pbxbuild:
-ifeq ($(shell ls /usr/bin/xcodebuild),/usr/bin/xcodebuild)
-PBXBUILD=xcodebuild
-else
-PBXBUILD=pbxbuild
-endif
-
-# These are normally glimpsed from the previous set
-bindir=/usr/local/bin
-PYTHONAPPSPATH=/Applications/MacPython-$(VERSION)
-PYTHONAPPSDIR=$(PYTHONAPPSPATH)
-APPINSTALLDIR=$(prefix)/Resources/Python.app
-
-# Variables for installing the "normal" unix binaries
-INSTALLED_PYTHON=$(prefix)/bin/python
-INSTALLED_PYTHONW=$(APPINSTALLDIR)/Contents/MacOS/Python
-
-# Items more-or-less copied from the main Makefile
-DIRMODE=755
-FILEMODE=644
-INSTALL=/usr/bin/install -c
-INSTALL_SYMLINK=ln -fsn
-INSTALL_PROGRAM=${INSTALL}
-INSTALL_SCRIPT= ${INSTALL_PROGRAM}
-INSTALL_DATA= ${INSTALL} -m ${FILEMODE}
-LN=ln
-STRIPFLAG=-s
-##OPT=-g -O3 -Wall -Wstrict-prototypes -Wno-long-double -no-cpp-precomp \
-## -fno-common -dynamic
-##INCLUDES=-I$(builddir) -I$(srcdir)/Include -I$(srcdir)/Mac/Include
-##DEFINES=
-##
-##CFLAGS=$(OPT) $(DEFINES) $(INCLUDES)
-##LDFLAGS=-F$(builddir) -framework System -framework Python -framework Carbon \
-## -framework Foundation
-##CC=cc
-##LD=cc
-CPMAC=/Developer/Tools/CpMac
-
-APPTEMPLATE=$(srcdir)/Mac/OSXResources/app
-APPSUBDIRS=MacOS Resources Resources/English.lproj \
- Resources/English.lproj/Documentation \
- Resources/English.lproj/Documentation/doc \
- Resources/English.lproj/Documentation/ide
-DOCDIR=$(srcdir)/Mac/OSXResources/app/Resources/English.lproj/Documentation
-DOCINDEX=$(DOCDIR)/"Documentation idx"
-CACHERSRC=$(srcdir)/Mac/scripts/cachersrc.py
-compileall=$(srcdir)/Lib/compileall.py
-bundlebuilder=$(srcdir)/Lib/plat-mac/bundlebuilder.py
-
-installapps: install_PythonLauncher install_Python install_BuildApplet install_IDE \
- install_IDLE install_PackageManager checkapplepython
-
-install_PythonLauncher:
- cd $(srcdir)/Mac/OSX/PythonLauncher/PythonLauncher.pbproj ; \
- $(PBXBUILD) -target PythonLauncher -buildstyle Deployment install \
- DSTROOT=$(DESTDIR)/ INSTALL_PATH=$(PYTHONAPPSPATH)
-
-install_Python:
- @if test ! -f $(DOCINDEX); then \
- echo WARNING: you should run Apple Help Indexing Tool on $(DOCDIR); \
- fi
- @for i in $(PYTHONAPPSDIR) $(APPINSTALLDIR) $(APPINSTALLDIR)/Contents; do \
- if test ! -d $(DESTDIR)$$i; then \
- echo "Creating directory $(DESTDIR)$$i"; \
- $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \
- fi;\
- done
- @for i in $(APPSUBDIRS); do \
- if test ! -d $(DESTDIR)$(APPINSTALLDIR)/Contents/$$i; then \
- echo "Creating directory $(DESTDIR)$(APPINSTALLDIR)/Contents/$$i"; \
- $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$(APPINSTALLDIR)/Contents/$$i; \
- else true; \
- fi; \
- done
- @for d in . $(APPSUBDIRS); \
- do \
- a=$(APPTEMPLATE)/$$d; \
- if test ! -d $$a; then continue; else true; fi; \
- b=$(DESTDIR)$(APPINSTALLDIR)/Contents/$$d; \
- for i in $$a/*; \
- do \
- case $$i in \
- *CVS) ;; \
- *.py[co]) ;; \
- *.orig) ;; \
- *~) ;; \
- *idx) \
- echo $(CPMAC) "$$i" $$b; \
- $(CPMAC) "$$i" $$b; \
- ;; \
- *) \
- if test -d $$i; then continue; fi; \
- if test -x $$i; then \
- echo $(INSTALL_SCRIPT) $$i $$b; \
- $(INSTALL_SCRIPT) $$i $$b; \
- else \
- echo $(INSTALL_DATA) $$i $$b; \
- $(INSTALL_DATA) $$i $$b; \
- fi;; \
- esac; \
- done; \
- done
- $(INSTALL_PROGRAM) $(STRIPFLAG) $(BUILDPYTHON) $(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/Python
-
-install_IDE:
- @if ! $(BUILDPYTHON) -c "import waste"; then \
- echo PythonIDE needs the \"waste\" extension module; \
- echo See Mac/OSX/README for details; \
- else \
- echo $(BUILDPYTHON) $(srcdir)/Mac/scripts/BuildApplet.py \
- --destroot "$(DESTDIR)" \
- --python $(INSTALLED_PYTHONW) \
- --output $(DESTDIR)$(PYTHONAPPSDIR)/PythonIDE.app --noargv \
- $(srcdir)/Mac/Tools/IDE/PythonIDE.py ; \
- $(BUILDPYTHON) $(srcdir)/Mac/scripts/BuildApplet.py \
- --destroot "$(DESTDIR)" \
- --python $(INSTALLED_PYTHONW) \
- --output $(DESTDIR)$(PYTHONAPPSDIR)/PythonIDE.app --noargv \
- $(srcdir)/Mac/Tools/IDE/PythonIDE.py; \
- fi
-
-install_PackageManager:
- @if ! $(BUILDPYTHON) -c "import waste"; then \
- echo PackageManager needs the \"waste\" extension module; \
- echo See Mac/OSX/README for details; \
- else \
- echo $(BUILDPYTHON) $(bundlebuilder) \
- --builddir $(DESTDIR)$(PYTHONAPPSDIR)/ \
- --destroot "$(DESTDIR)" \
- --python $(INSTALLED_PYTHONW) \
- --resource $(srcdir)/Mac/Tools/IDE/PythonIDE.rsrc \
- --mainprogram $(srcdir)/Mac/Tools/IDE/PackageManager.py \
- --iconfile $(srcdir)/Mac/Tools/IDE/PackageManager.icns \
- --creator Pimp build; \
- $(BUILDPYTHON) $(bundlebuilder) \
- --builddir $(DESTDIR)$(PYTHONAPPSDIR)/ \
- --destroot "$(DESTDIR)" \
- --python $(INSTALLED_PYTHONW) \
- --resource $(srcdir)/Mac/Tools/IDE/PythonIDE.rsrc \
- --mainprogram $(srcdir)/Mac/Tools/IDE/PackageManager.py \
- --iconfile $(srcdir)/Mac/Tools/IDE/PackageManager.icns \
- --creator Pimp build; \
- fi
-
-install_IDLE:
- @if ! $(BUILDPYTHON) -c "import _tkinter"; then \
- echo IDLE needs the \"Tkinter\" extension module; \
- echo See Mac/OSX/README for details; \
- else \
- echo $(BUILDPYTHON) $(srcdir)/Mac/scripts/BuildApplet.py \
- --python $(INSTALLED_PYTHONW) \
- --destroot "$(DESTDIR)" \
- --output $(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app \
- --extra $(srcdir)/Lib/idlelib \
- $(srcdir)/Tools/scripts/idle ; \
- $(BUILDPYTHON) $(srcdir)/Mac/scripts/BuildApplet.py \
- --python $(INSTALLED_PYTHONW) \
- --destroot "$(DESTDIR)" \
- --output $(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app \
- --extra $(srcdir)/Lib/idlelib:Contents/Resources/idlelib \
- $(srcdir)/Tools/scripts/idle ; \
- fi
-
-
-install_BuildApplet:
- $(BUILDPYTHON) $(srcdir)/Mac/scripts/BuildApplet.py \
- --destroot "$(DESTDIR)" \
- --python $(INSTALLED_PYTHONW) \
- --output $(DESTDIR)$(PYTHONAPPSDIR)/BuildApplet.app \
- $(srcdir)/Mac/scripts/BuildApplet.py
-
-MACLIBDEST=$(LIBDEST)/plat-mac
-MACTOOLSDEST=$(prefix)/Mac/Tools
-MACTOOLSSRC=$(srcdir)/Mac/Tools
-MACTOOLSSUBDIRS=IDE
-installmacsubtree:
- @for i in $(MACTOOLSDEST); \
- do \
- if test ! -d $(DESTDIR)$$i; then \
- echo "Creating directory $(DESTDIR)$$i"; \
- $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \
- else true; \
- fi; \
- done
- @for d in $(MACTOOLSSUBDIRS); \
- do \
- a=$(MACTOOLSSRC)/$$d; \
- if test ! -d $$a; then continue; else true; fi; \
- b=$(DESTDIR)$(MACTOOLSDEST)/$$d; \
- if test ! -d $$b; then \
- echo "Creating directory $$b"; \
- $(INSTALL) -d -m $(DIRMODE) $$b; \
- else true; \
- fi; \
- done
- @for d in $(MACTOOLSSUBDIRS); \
- do \
- a=$(MACTOOLSSRC)/$$d; \
- if test ! -d $$a; then continue; else true; fi; \
- b=$(DESTDIR)$(MACTOOLSDEST)/$$d; \
- for i in $$a/*; \
- do \
- case $$i in \
- *CVS) ;; \
- *.py[co]) ;; \
- *.orig) ;; \
- *~) ;; \
- *.rsrc) \
- echo $(CPMAC) $$i $$b ; \
- $(CPMAC) $$i $$b ; \
- ;; \
- *) \
- if test -d $$i; then continue; fi; \
- if test -x $$i; then \
- echo $(INSTALL_SCRIPT) $$i $$b; \
- $(INSTALL_SCRIPT) $$i $$b; \
- else \
- echo $(INSTALL_DATA) $$i $$b; \
- $(INSTALL_DATA) $$i $$b; \
- fi;; \
- esac; \
- done; \
- done
-
-
- $(BUILDPYTHON) $(CACHERSRC) -v $(DESTDIR)$(MACLIBDEST) $(DESTDIR)$(MACTOOLSDEST)
- $(BUILDPYTHON) -Wi -tt $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST)
- $(BUILDPYTHON) -O -Wi -tt $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST)
-
-#
-# We use the full name here in stead of $(INSTALLED_PYTHONW), because
-# the latter may be overridden by Makefile.jaguar when building for a pre-installed
-# /usr/bin/python
-$(APPINSTALLDIR)/Contents/MacOS/Python: install_Python
-
-# $(INSTALLED_PYTHON) has to be done by the main Makefile, we cannot do that here.
-# At least this rule will give an error if it doesn't exist.
-
-installunixtools:
- $(INSTALL) -d $(DESTDIR)$(bindir)
- $(INSTALL_SYMLINK) $(INSTALLED_PYTHON) $(DESTDIR)$(bindir)/python$(VERSION)
- $(INSTALL_SYMLINK) python$(VERSION) $(DESTDIR)$(bindir)/python
- echo "#!/bin/sh" > pythonw.sh
- echo "exec \"$(INSTALLED_PYTHONW)\" \"\$$@\"" >> pythonw.sh
- $(INSTALL) pythonw.sh $(DESTDIR)$(bindir)/pythonw$(VERSION)
- $(INSTALL_SYMLINK) pythonw$(VERSION) $(DESTDIR)$(bindir)/pythonw
-
-installextras:
- $(INSTALL) -d $(DESTDIR)$(PYTHONAPPSDIR)/Extras
- $(INSTALL) $(srcdir)/Mac/OSX/Extras.ReadMe.txt $(DESTDIR)$(PYTHONAPPSDIR)/Extras/ReadMe
- $(BUILDPYTHON) $(srcdir)/Mac/OSX/Extras.install.py $(srcdir)/Demo \
- $(DESTDIR)$(PYTHONAPPSDIR)/Extras/Demo
- $(BUILDPYTHON) $(srcdir)/Mac/OSX/Extras.install.py $(srcdir)/Tools \
- $(DESTDIR)$(PYTHONAPPSDIR)/Extras/Tools
-
-checkapplepython:
- @if ! $(BUILDPYTHON) $(srcdir)/Mac/OSX/fixapplepython23.py -n; then \
- echo "* WARNING: Apple-installed Python 2.3 will have trouble building extensions from now on."; \
- echo "* WARNING: Run $(srcdir)/Mac/OSX/fixapplepython23.py with \"sudo\" to fix this."; \
- fi
-
diff --git a/Mac/OSX/Makefile.in b/Mac/OSX/Makefile.in
new file mode 100644
index 0000000..a44191d
--- /dev/null
+++ b/Mac/OSX/Makefile.in
@@ -0,0 +1,241 @@
+# This file can be invoked from the various frameworkinstall... targets in the
+# main Makefile. The next couple of variables are overridden on the
+# commandline in that case.
+
+VERSION=@VERSION@
+builddir = ../..
+srcdir = @srcdir@
+prefix=/Library/Frameworks/Python.framework/Versions/$(VERSION)
+LIBDEST=$(prefix)/lib/python$(VERSION)
+BUILDPYTHON=$(builddir)/python.exe
+DESTDIR=
+
+# These are normally glimpsed from the previous set
+bindir=@exec_prefix@/bin
+PYTHONAPPSDIR=/Applications/MacPython $(VERSION)
+APPINSTALLDIR=$(prefix)/Resources/Python.app
+
+# Variables for installing the "normal" unix binaries
+INSTALLED_PYDOC=$(prefix)/bin/pydoc
+INSTALLED_IDLE=$(prefix)/bin/idle
+INSTALLED_PYTHON=$(prefix)/bin/python
+INSTALLED_PYTHONW=$(prefix)/bin/pythonw
+INSTALLED_PYTHONAPP=$(APPINSTALLDIR)/Contents/MacOS/Python
+
+# Items more-or-less copied from the main Makefile
+DIRMODE=755
+FILEMODE=644
+INSTALL=@INSTALL@
+INSTALL_SYMLINK=ln -fsn
+INSTALL_PROGRAM=@INSTALL_PROGRAM@
+INSTALL_SCRIPT= @INSTALL_SCRIPT@
+INSTALL_DATA=@INSTALL_DATA@
+LN=@LN@
+STRIPFLAG=-s
+CPMAC=/Developer/Tools/CpMac
+
+APPTEMPLATE=$(srcdir)/../OSXResources/app
+APPSUBDIRS=MacOS Resources Resources/English.lproj \
+ Resources/English.lproj/Documentation \
+ Resources/English.lproj/Documentation/doc \
+ Resources/English.lproj/Documentation/ide
+DOCDIR=$(srcdir)/../OSXResources/app/Resources/English.lproj/Documentation
+DOCINDEX=$(DOCDIR)/"Documentation idx"
+CACHERSRC=$(srcdir)/../scripts/cachersrc.py
+compileall=$(srcdir)/../../Lib/compileall.py
+
+installapps: install_Python install_BuildApplet install_PythonLauncher \
+ install_IDLE checkapplepython install_pythonw install_versionedtools
+
+install_pythonw: pythonw
+ $(INSTALL_PROGRAM) $(STRIPFLAG) pythonw "$(DESTDIR)$(prefix)/bin/pythonw$(VERSION)"
+ $(INSTALL_PROGRAM) $(STRIPFLAG) pythonw "$(DESTDIR)$(prefix)/bin/python$(VERSION)"
+ ln -sf python$(VERSION) "$(DESTDIR)$(prefix)/bin/python"
+ ln -sf pythonw$(VERSION) "$(DESTDIR)$(prefix)/bin/pythonw"
+
+#
+# Install unix tools in /usr/local/bin. These are just aliases for the
+# actual installation inside the framework.
+#
+installunixtools:
+ if [ ! -d "$(DESTDIR)/usr/local/bin" ]; then \
+ $(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)/usr/local/bin" ;\
+ fi
+ for fn in `ls "$(DESTDIR)$(prefix)/bin/"` ; \
+ do \
+ ln -fs "$(prefix)/bin/$${fn}" "$(DESTDIR)/usr/local/bin/$${fn}" ;\
+ done
+
+# By default most tools are installed without a version in their basename, to
+# make it easier to install (and use) several python versions side-by-side move
+# the tools to a version-specific name and add the non-versioned name as an
+# alias.
+install_versionedtools:
+ for fn in idle pydoc python-config ;\
+ do \
+ if [ -h "$(DESTDIR)$(prefix)/bin/$${fn}" ]; then \
+ continue ;\
+ fi ;\
+ mv "$(DESTDIR)$(prefix)/bin/$${fn}" "$(DESTDIR)$(prefix)/bin/$${fn}$(VERSION)" ;\
+ ln -sf "$${fn}$(VERSION)" "$(DESTDIR)$(prefix)/bin/$${fn}" ;\
+ done
+ if [ ! -h "$(DESTDIR)$(prefix)/bin/smtpd.py" ]; then \
+ mv "$(DESTDIR)$(prefix)/bin/smtpd.py" "$(DESTDIR)$(prefix)/bin/smtpd$(VERSION).py" ;\
+ ln -sf "smtpd$(VERSION).py" "$(DESTDIR)$(prefix)/bin/smtpd.py" ;\
+ fi
+
+
+pythonw: $(srcdir)/Tools/pythonw.c
+ $(CC) $(LDFLAGS) -o $@ $(srcdir)/Tools/pythonw.c \
+ -DPYTHONWEXECUTABLE='"$(APPINSTALLDIR)/Contents/MacOS/Python"'
+
+
+install_PythonLauncher:
+ cd PythonLauncher && make install DESTDIR=$(DESTDIR)
+
+install_Python:
+ @if test ! -f $(DOCINDEX); then \
+ echo WARNING: you should run Apple Help Indexing Tool on $(DOCDIR); \
+ fi
+ @for i in "$(PYTHONAPPSDIR)" "$(APPINSTALLDIR)" "$(APPINSTALLDIR)/Contents"; do \
+ if test ! -d "$(DESTDIR)$$i"; then \
+ echo "Creating directory $(DESTDIR)$$i"; \
+ $(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$$i"; \
+ fi;\
+ done
+ @for i in $(APPSUBDIRS); do \
+ if test ! -d "$(DESTDIR)$(APPINSTALLDIR)/Contents/$$i"; then \
+ echo "Creating directory $(DESTDIR)$(APPINSTALLDIR)/Contents/$$i"; \
+ $(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$(APPINSTALLDIR)/Contents/$$i"; \
+ else true; \
+ fi; \
+ done
+ @for d in . $(APPSUBDIRS); \
+ do \
+ a=$(APPTEMPLATE)/$$d; \
+ if test ! -d $$a; then continue; else true; fi; \
+ b="$(DESTDIR)$(APPINSTALLDIR)/Contents/$$d"; \
+ for i in $$a/*; \
+ do \
+ case $$i in \
+ *CVS) ;; \
+ *.svn) ;; \
+ *.py[co]) ;; \
+ *.orig) ;; \
+ *~) ;; \
+ *idx) \
+ echo $(CPMAC) "$$i" $$b; \
+ $(CPMAC) "$$i" "$$b"; \
+ ;; \
+ *) \
+ if test -d $$i; then continue; fi; \
+ if test -x $$i; then \
+ echo $(INSTALL_SCRIPT) "$$i" "$$b"; \
+ $(INSTALL_SCRIPT) "$$i" "$$b"; \
+ else \
+ echo $(INSTALL_DATA) "$$i" "$$b"; \
+ $(INSTALL_DATA) "$$i" "$$b"; \
+ fi;; \
+ esac; \
+ done; \
+ done
+ $(INSTALL_PROGRAM) $(STRIPFLAG) $(BUILDPYTHON) "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/Python"
+
+install_IDLE:
+ cd IDLE && make install
+
+install_BuildApplet:
+ $(BUILDPYTHON) $(srcdir)/../scripts/BuildApplet.py \
+ --destroot "$(DESTDIR)" \
+ --python $(INSTALLED_PYTHONAPP) \
+ --output "$(DESTDIR)$(PYTHONAPPSDIR)/Build Applet.app" \
+ $(srcdir)/../scripts/BuildApplet.py
+
+MACLIBDEST=$(LIBDEST)/plat-mac
+MACTOOLSDEST=$(prefix)/Mac/Tools
+MACTOOLSSRC=$(srcdir)/Mac/Tools
+MACTOOLSSUBDIRS=IDE
+
+installmacsubtree:
+ @for i in $(MACTOOLSDEST); \
+ do \
+ if test ! -d $(DESTDIR)$$i; then \
+ echo "Creating directory $(DESTDIR)$$i"; \
+ $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \
+ else true; \
+ fi; \
+ done
+ @for d in $(MACTOOLSSUBDIRS); \
+ do \
+ a=$(MACTOOLSSRC)/$$d; \
+ if test ! -d $$a; then continue; else true; fi; \
+ b=$(DESTDIR)$(MACTOOLSDEST)/$$d; \
+ if test ! -d $$b; then \
+ echo "Creating directory $$b"; \
+ $(INSTALL) -d -m $(DIRMODE) $$b; \
+ else true; \
+ fi; \
+ done
+ @for d in $(MACTOOLSSUBDIRS); \
+ do \
+ a=$(MACTOOLSSRC)/$$d; \
+ if test ! -d $$a; then continue; else true; fi; \
+ b=$(DESTDIR)$(MACTOOLSDEST)/$$d; \
+ for i in $$a/*; \
+ do \
+ case $$i in \
+ *CVS) ;; \
+ *.svn) ;; \
+ *.py[co]) ;; \
+ *.orig) ;; \
+ *~) ;; \
+ *.rsrc) \
+ echo $(CPMAC) $$i $$b ; \
+ $(CPMAC) $$i $$b ; \
+ ;; \
+ *) \
+ if test -d $$i; then continue; fi; \
+ if test -x $$i; then \
+ echo $(INSTALL_SCRIPT) $$i $$b; \
+ $(INSTALL_SCRIPT) $$i $$b; \
+ else \
+ echo $(INSTALL_DATA) $$i $$b; \
+ $(INSTALL_DATA) $$i $$b; \
+ fi;; \
+ esac; \
+ done; \
+ done
+
+
+ $(BUILDPYTHON) $(CACHERSRC) -v $(DESTDIR)$(MACLIBDEST) $(DESTDIR)$(MACTOOLSDEST)
+ $(BUILDPYTHON) -Wi -tt $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST)
+ $(BUILDPYTHON) -O -Wi -tt $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST)
+
+#
+# We use the full name here in stead of $(INSTALLED_PYTHONAPP), because
+# the latter may be overridden by Makefile.jaguar when building for a pre-installed
+$(INSTALLED_PYTHONAPP)/Contents/MacOS/Python: install_Python
+
+# $(INSTALLED_PYTHON) has to be done by the main Makefile, we cannot do that here.
+# At least this rule will give an error if it doesn't exist.
+
+installextras:
+ $(INSTALL) -d "$(DESTDIR)$(PYTHONAPPSDIR)/Extras"
+ $(INSTALL) $(srcdir)/Mac/OSX/Extras.ReadMe.txt "$(DESTDIR)$(PYTHONAPPSDIR)/Extras/ReadMe.txt"
+ $(BUILDPYTHON) $(srcdir)/Mac/OSX/Extras.install.py $(srcdir)/Demo \
+ "$(DESTDIR)$(PYTHONAPPSDIR)/Extras/Demo"
+
+
+checkapplepython:
+ @if ! $(BUILDPYTHON) $(srcdir)/fixapplepython23.py -n; then \
+ echo "* WARNING: Apple-installed Python 2.3 will have trouble building extensions from now on."; \
+ echo "* WARNING: Run $(srcdir)/fixapplepython23.py with \"sudo\" to fix this."; \
+ fi
+
+
+clean:
+ rm pythonw
+ cd PythonLauncher && make clean
+ cd IDLE && make clean
+
+
diff --git a/Mac/OSX/PythonLauncher/English.lproj/InfoPlist.strings b/Mac/OSX/PythonLauncher/English.lproj/InfoPlist.strings
deleted file mode 100644
index 40b6185..0000000
--- a/Mac/OSX/PythonLauncher/English.lproj/InfoPlist.strings
+++ /dev/null
Binary files differ
diff --git a/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/classes.nib b/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/classes.nib
new file mode 100644
index 0000000..467aa8b
--- /dev/null
+++ b/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/classes.nib
@@ -0,0 +1,26 @@
+{
+ IBClasses = (
+ {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
+ {
+ ACTIONS = {"do_apply" = id; "do_filetype" = id; "do_reset" = id; };
+ CLASS = PreferencesWindowController;
+ LANGUAGE = ObjC;
+ OUTLETS = {
+ commandline = NSTextField;
+ debug = NSButton;
+ filetype = NSPopUpButton;
+ honourhashbang = NSButton;
+ inspect = NSButton;
+ interpreter = NSTextField;
+ nosite = NSButton;
+ optimize = NSButton;
+ others = NSTextField;
+ tabs = NSButton;
+ verbose = NSButton;
+ "with_terminal" = NSButton;
+ };
+ SUPERCLASS = NSWindowController;
+ }
+ );
+ IBVersion = 1;
+} \ No newline at end of file
diff --git a/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/info.nib b/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/info.nib
new file mode 100644
index 0000000..bc558f7
--- /dev/null
+++ b/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/info.nib
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IBDocumentLocation</key>
+ <string>565 235 519 534 0 0 1280 1002 </string>
+ <key>IBFramework Version</key>
+ <string>364.0</string>
+ <key>IBOpenObjects</key>
+ <array>
+ <integer>5</integer>
+ </array>
+ <key>IBSystem Version</key>
+ <string>7H63</string>
+</dict>
+</plist>
diff --git a/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/objects.nib b/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/objects.nib
new file mode 100644
index 0000000..3dfed33
--- /dev/null
+++ b/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/objects.nib
Binary files differ
diff --git a/Mac/OSX/PythonLauncher/Info.plist b/Mac/OSX/PythonLauncher/Info.plist
new file mode 100644
index 0000000..1dd795f
--- /dev/null
+++ b/Mac/OSX/PythonLauncher/Info.plist
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleDocumentTypes</key>
+ <array>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>py</string>
+ <string>pyw</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>PythonSource.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Python Script</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ <key>NSDocumentClass</key>
+ <string>MyDocument</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>pyc</string>
+ <string>pyo</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>PythonCompiled.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Python Bytecode Document</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ <key>NSDocumentClass</key>
+ <string>MyDocument</string>
+ </dict>
+ </array>
+ <key>CFBundleExecutable</key>
+ <string>PythonLauncher</string>
+ <key>CFBundleGetInfoString</key>
+ <string>2.5, © 001-2006 Python Software Foundation</string>
+ <key>CFBundleIconFile</key>
+ <string>PythonLauncher.icns</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.python.PythonLauncher</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>Python Launcher</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>2.5</string>
+ <key>CFBundleSignature</key>
+ <string>PytL</string>
+ <key>CFBundleVersion</key>
+ <string>2.5</string>
+ <key>NSMainNibFile</key>
+ <string>MainMenu</string>
+ <key>NSPrincipalClass</key>
+ <string>NSApplication</string>
+</dict>
+</plist>
diff --git a/Mac/OSX/PythonLauncher/Makefile.in b/Mac/OSX/PythonLauncher/Makefile.in
new file mode 100644
index 0000000..e6dacb3
--- /dev/null
+++ b/Mac/OSX/PythonLauncher/Makefile.in
@@ -0,0 +1,78 @@
+CC=@CC@
+LD=@CC@
+BASECFLAGS=@BASECFLAGS@
+OPT=@OPT@
+CFLAGS=$(BASECFLAGS) $(OPT)
+LDFLAGS=@LDFLAGS@
+srcdir= @srcdir@
+VERSION= @VERSION@
+UNIVERSALSDK=@UNIVERSALSDK@
+builddir= ../../..
+
+RUNSHARED= @RUNSHARED@
+BUILDEXE= @BUILDEXEEXT@
+BUILDPYTHON= ../../../python$(BUILDEXE)
+
+# Deployment target selected during configure, to be checked
+# by distutils
+MACOSX_DEPLOYMENT_TARGET=@CONFIGURE_MACOSX_DEPLOYMENT_TARGET@
+@EXPORT_MACOSX_DEPLOYMENT_TARGET@export MACOSX_DEPLOYMENT_TARGET
+
+BUNDLEBULDER=$(srcdir)/../../../Lib/plat-mac/bundlebuilder.py
+
+PYTHONAPPSDIR=/Applications/MacPython $(VERSION)
+OBJECTS=FileSettings.o MyAppDelegate.o MyDocument.o PreferencesWindowController.o doscript.o main.o
+
+all: Python\ Launcher.app
+
+install: Python\ Launcher.app
+ test -d "$(DESTDIR)$(PYTHONAPPSDIR)" || mkdir -p "$(DESTDIR)$(PYTHONAPPSDIR)"
+ -test -d "$(DESTDIR)$(PYTHONAPPSDIR)/Python Launcher.app" && rm -r "$(DESTDIR)$(PYTHONAPPSDIR)/Python Launcher.app"
+ cp -r "Python Launcher.app" "$(DESTDIR)$(PYTHONAPPSDIR)"
+ touch "$(DESTDIR)$(PYTHONAPPSDIR)/Python Launcher.app"
+
+clean:
+ rm -f *.o "Python Launcher"
+ rm -rf "Python Launcher.app"
+
+Python\ Launcher.app: \
+ Python\ Launcher $(srcdir)/../Icons/PythonLauncher.icns \
+ $(srcdir)/../Icons/PythonSource.icns \
+ $(srcdir)/../Icons/PythonCompiled.icns \
+ $(srcdir)/factorySettings.plist
+ rm -fr "Python Launcher.app"
+ $(RUNSHARED) $(BUILDPYTHON) $(BUNDLEBULDER) \
+ --builddir=. \
+ --name="Python Launcher" \
+ --executable="Python Launcher" \
+ --iconfile=$(srcdir)/../Icons/PythonLauncher.icns \
+ --bundle-id=org.python.PythonLauncher \
+ --resource=$(srcdir)/../Icons/PythonSource.icns \
+ --resource=$(srcdir)/../Icons/PythonCompiled.icns \
+ --resource=$(srcdir)/English.lproj \
+ --resource=$(srcdir)/factorySettings.plist \
+ --plist=$(srcdir)/Info.plist \
+ build
+ find "Python Launcher.app" -name '.svn' -print0 | xargs -0 rm -r
+
+
+FileSettings.o: $(srcdir)/FileSettings.m
+ $(CC) $(CFLAGS) -o $@ -c $(srcdir)/FileSettings.m
+
+MyAppDelegate.o: $(srcdir)/MyAppDelegate.m
+ $(CC) $(CFLAGS) -o $@ -c $(srcdir)/MyAppDelegate.m
+
+MyDocument.o: $(srcdir)/MyDocument.m
+ $(CC) $(CFLAGS) -o $@ -c $(srcdir)/MyDocument.m
+
+PreferencesWindowController.o: $(srcdir)/PreferencesWindowController.m
+ $(CC) $(CFLAGS) -o $@ -c $(srcdir)/PreferencesWindowController.m
+
+doscript.o: $(srcdir)/doscript.m
+ $(CC) $(CFLAGS) -o $@ -c $(srcdir)/doscript.m
+
+main.o: $(srcdir)/main.m
+ $(CC) $(CFLAGS) -o $@ -c $(srcdir)/main.m
+
+Python\ Launcher: $(OBJECTS)
+ $(CC) $(LDFLAGS) -o "Python Launcher" $(OBJECTS) -framework AppKit -framework Carbon
diff --git a/Mac/OSX/PythonLauncher/PythonCompiled.icns b/Mac/OSX/PythonLauncher/PythonCompiled.icns
deleted file mode 100644
index afead3e..0000000
--- a/Mac/OSX/PythonLauncher/PythonCompiled.icns
+++ /dev/null
Binary files differ
diff --git a/Mac/OSX/PythonLauncher/PythonInterpreter.icns b/Mac/OSX/PythonLauncher/PythonInterpreter.icns
deleted file mode 100644
index d5dd12f..0000000
--- a/Mac/OSX/PythonLauncher/PythonInterpreter.icns
+++ /dev/null
Binary files differ
diff --git a/Mac/OSX/PythonLauncher/PythonLauncher.pbproj/project.pbxproj b/Mac/OSX/PythonLauncher/PythonLauncher.pbproj/project.pbxproj
deleted file mode 100755
index 06e45dc..0000000
--- a/Mac/OSX/PythonLauncher/PythonLauncher.pbproj/project.pbxproj
+++ /dev/null
@@ -1,681 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 38;
- objects = {
- 080E96D9FE201CDB7F000001 = {
- fileRef = 2A37F4B9FDCFA73011CA2CEA;
- isa = PBXBuildFile;
- settings = {
- };
- };
- 080E96DAFE201CDB7F000001 = {
- fileRef = 2A37F4B6FDCFA73011CA2CEA;
- isa = PBXBuildFile;
- settings = {
- };
- };
- 080E96DBFE201CDB7F000001 = {
- fileRef = 2A37F4B4FDCFA73011CA2CEA;
- isa = PBXBuildFile;
- settings = {
- };
- };
- 089C165FFE840EACC02AAC07 = {
- children = (
- 089C1660FE840EACC02AAC07,
- );
- isa = PBXVariantGroup;
- name = InfoPlist.strings;
- refType = 4;
- };
- 089C1660FE840EACC02AAC07 = {
- fileEncoding = 10;
- isa = PBXFileReference;
- name = English;
- path = English.lproj/InfoPlist.strings;
- refType = 4;
- };
- 089C1661FE840EACC02AAC07 = {
- fileRef = 089C165FFE840EACC02AAC07;
- isa = PBXBuildFile;
- settings = {
- };
- };
-//080
-//081
-//082
-//083
-//084
-//100
-//101
-//102
-//103
-//104
- 1058C7A6FEA54F5311CA2CBB = {
- children = (
- 1058C7A7FEA54F5311CA2CBB,
- F5AA9D0102F807EE0110C447,
- );
- isa = PBXGroup;
- name = "Linked Frameworks";
- refType = 4;
- };
- 1058C7A7FEA54F5311CA2CBB = {
- isa = PBXFrameworkReference;
- name = Cocoa.framework;
- path = /System/Library/Frameworks/Cocoa.framework;
- refType = 0;
- };
- 1058C7A8FEA54F5311CA2CBB = {
- children = (
- 2A37F4C5FDCFA73011CA2CEA,
- 2A37F4C4FDCFA73011CA2CEA,
- );
- isa = PBXGroup;
- name = "Other Frameworks";
- refType = 4;
- };
- 1058C7A9FEA54F5311CA2CBB = {
- fileRef = 1058C7A7FEA54F5311CA2CBB;
- isa = PBXBuildFile;
- settings = {
- };
- };
-//100
-//101
-//102
-//103
-//104
-//170
-//171
-//172
-//173
-//174
- 1758732AFF379DA111CA2CBB = {
- isa = PBXApplicationReference;
- path = PythonLauncher.app;
- refType = 3;
- };
-//170
-//171
-//172
-//173
-//174
-//190
-//191
-//192
-//193
-//194
- 19C28FB0FE9D524F11CA2CBB = {
- children = (
- 1758732AFF379DA111CA2CBB,
- );
- isa = PBXGroup;
- name = Products;
- refType = 4;
- };
-//190
-//191
-//192
-//193
-//194
-//2A0
-//2A1
-//2A2
-//2A3
-//2A4
- 2A37F4A9FDCFA73011CA2CEA = {
- buildStyles = (
- 4A9504D0FFE6A4CB11CA0CBA,
- 4A9504D1FFE6A4CB11CA0CBA,
- );
- isa = PBXProject;
- mainGroup = 2A37F4AAFDCFA73011CA2CEA;
- projectDirPath = "";
- targets = (
- 2A37F4C6FDCFA73011CA2CEA,
- );
- };
- 2A37F4AAFDCFA73011CA2CEA = {
- children = (
- 2A37F4ABFDCFA73011CA2CEA,
- 2A37F4AFFDCFA73011CA2CEA,
- 2A37F4B8FDCFA73011CA2CEA,
- 2A37F4C3FDCFA73011CA2CEA,
- 19C28FB0FE9D524F11CA2CBB,
- );
- isa = PBXGroup;
- name = PythonLauncher;
- path = "";
- refType = 4;
- };
- 2A37F4ABFDCFA73011CA2CEA = {
- children = (
- 2A37F4AEFDCFA73011CA2CEA,
- 2A37F4ACFDCFA73011CA2CEA,
- F52A90CD02EB5C6A01000102,
- F52A90CE02EB5C6A01000102,
- F5A4C14002F2055C01000102,
- F5A4C14102F2055C01000102,
- F5A4C14402F2070D01000102,
- F5A4C14502F2070D01000102,
- );
- isa = PBXGroup;
- name = Classes;
- path = "";
- refType = 4;
- };
- 2A37F4ACFDCFA73011CA2CEA = {
- fileEncoding = 30;
- isa = PBXFileReference;
- path = MyDocument.m;
- refType = 4;
- };
- 2A37F4AEFDCFA73011CA2CEA = {
- fileEncoding = 30;
- isa = PBXFileReference;
- path = MyDocument.h;
- refType = 4;
- };
- 2A37F4AFFDCFA73011CA2CEA = {
- children = (
- F5AA9C6A02F8042D0110C447,
- 2A37F4B0FDCFA73011CA2CEA,
- F5AAA21D02F8115D0110C447,
- );
- isa = PBXGroup;
- name = "Other Sources";
- path = "";
- refType = 4;
- };
- 2A37F4B0FDCFA73011CA2CEA = {
- fileEncoding = 30;
- isa = PBXFileReference;
- path = main.m;
- refType = 4;
- };
- 2A37F4B4FDCFA73011CA2CEA = {
- children = (
- 2A37F4B5FDCFA73011CA2CEA,
- );
- isa = PBXVariantGroup;
- name = MyDocument.nib;
- path = "";
- refType = 4;
- };
- 2A37F4B5FDCFA73011CA2CEA = {
- isa = PBXFileReference;
- name = English;
- path = English.lproj/MyDocument.nib;
- refType = 4;
- };
- 2A37F4B6FDCFA73011CA2CEA = {
- children = (
- 2A37F4B7FDCFA73011CA2CEA,
- );
- isa = PBXVariantGroup;
- name = MainMenu.nib;
- path = "";
- refType = 4;
- };
- 2A37F4B7FDCFA73011CA2CEA = {
- isa = PBXFileReference;
- name = English;
- path = English.lproj/MainMenu.nib;
- refType = 4;
- };
- 2A37F4B8FDCFA73011CA2CEA = {
- children = (
- F58D4A3A02F1F94B01000102,
- F58D4A3B02F1F94B01000102,
- F58D4A3C02F1F94B01000102,
- F5449B4B02FB3F7E01000102,
- 2A37F4B9FDCFA73011CA2CEA,
- 2A37F4B6FDCFA73011CA2CEA,
- 2A37F4B4FDCFA73011CA2CEA,
- F5A4C13E02F203F601000102,
- 089C165FFE840EACC02AAC07,
- F5A42167038BDD8E0110C447,
- );
- isa = PBXGroup;
- name = Resources;
- path = "";
- refType = 4;
- };
- 2A37F4B9FDCFA73011CA2CEA = {
- children = (
- 2A37F4BAFDCFA73011CA2CEA,
- );
- isa = PBXVariantGroup;
- name = Credits.rtf;
- path = "";
- refType = 4;
- };
- 2A37F4BAFDCFA73011CA2CEA = {
- isa = PBXFileReference;
- name = English;
- path = English.lproj/Credits.rtf;
- refType = 4;
- };
- 2A37F4C3FDCFA73011CA2CEA = {
- children = (
- 1058C7A6FEA54F5311CA2CBB,
- 1058C7A8FEA54F5311CA2CBB,
- );
- isa = PBXGroup;
- name = Frameworks;
- path = "";
- refType = 4;
- };
- 2A37F4C4FDCFA73011CA2CEA = {
- isa = PBXFrameworkReference;
- name = AppKit.framework;
- path = /System/Library/Frameworks/AppKit.framework;
- refType = 0;
- };
- 2A37F4C5FDCFA73011CA2CEA = {
- isa = PBXFrameworkReference;
- name = Foundation.framework;
- path = /System/Library/Frameworks/Foundation.framework;
- refType = 0;
- };
- 2A37F4C6FDCFA73011CA2CEA = {
- buildPhases = (
- 2A37F4C7FDCFA73011CA2CEA,
- 2A37F4C9FDCFA73011CA2CEA,
- 2A37F4CEFDCFA73011CA2CEA,
- 2A37F4D1FDCFA73011CA2CEA,
- );
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = "";
- HEADER_SEARCH_PATHS = "";
- INSTALL_MODE_FLAG = "a+rX";
- INSTALL_PATH = /Applications/Python;
- LIBRARY_SEARCH_PATHS = "";
- OPTIMIZATION_CFLAGS = "-O0";
- OTHER_LDFLAGS = "";
- PRODUCT_NAME = PythonLauncher;
- SECTORDER_FLAGS = "";
- WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
- WRAPPER_EXTENSION = app;
- };
- dependencies = (
- );
- isa = PBXApplicationTarget;
- name = PythonLauncher;
- productInstallPath = /Applications/Python;
- productName = PythonLauncher;
- productReference = 1758732AFF379DA111CA2CBB;
- productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
-<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
-<plist version=\"1.0\">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleDocumentTypes</key>
- <array>
- <dict>
- <key>CFBundleTypeExtensions</key>
- <array>
- <string>py</string>
- </array>
- <key>CFBundleTypeIconFile</key>
- <string>PythonSource.icns</string>
- <key>CFBundleTypeName</key>
- <string>Python Script</string>
- <key>CFBundleTypeRole</key>
- <string>Viewer</string>
- <key>NSDocumentClass</key>
- <string>MyDocument</string>
- </dict>
- <dict>
- <key>CFBundleTypeExtensions</key>
- <array>
- <string>pyw</string>
- </array>
- <key>CFBundleTypeIconFile</key>
- <string>PythonWSource.icns</string>
- <key>CFBundleTypeName</key>
- <string>Python GUI Script</string>
- <key>CFBundleTypeRole</key>
- <string>Viewer</string>
- <key>NSDocumentClass</key>
- <string>MyDocument</string>
- </dict>
- <dict>
- <key>CFBundleTypeExtensions</key>
- <array>
- <string>pyc</string>
- </array>
- <key>CFBundleTypeIconFile</key>
- <string>PythonCompiled.icns</string>
- <key>CFBundleTypeName</key>
- <string>Python Bytecode Document</string>
- <key>CFBundleTypeRole</key>
- <string>Viewer</string>
- <key>NSDocumentClass</key>
- <string>MyDocument</string>
- </dict>
- </array>
- <key>CFBundleExecutable</key>
- <string>PythonLauncher</string>
- <key>CFBundleGetInfoString</key>
- <string>2.3, © 2001-2003 Python Software Foundation</string>
- <key>CFBundleIconFile</key>
- <string>PythonInterpreter.icns</string>
- <key>CFBundleIdentifier</key>
- <string>org.python.PythonLauncher</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>PythonLauncher</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleShortVersionString</key>
- <string>2.3</string>
- <key>CFBundleSignature</key>
- <string>PytL</string>
- <key>CFBundleVersion</key>
- <string>2.3</string>
- <key>NSMainNibFile</key>
- <string>MainMenu</string>
- <key>NSPrincipalClass</key>
- <string>NSApplication</string>
-</dict>
-</plist>
-";
- shouldUseHeadermap = 0;
- };
- 2A37F4C7FDCFA73011CA2CEA = {
- buildActionMask = 2147483647;
- files = (
- 2A37F4C8FDCFA73011CA2CEA,
- F52A90D002EB5C6A01000102,
- F5A4C14202F2055D01000102,
- F5A4C14702F2070D01000102,
- F5AA9C6C02F8042D0110C447,
- );
- isa = PBXHeadersBuildPhase;
- runOnlyForDeploymentPostprocessing = 0;
- };
- 2A37F4C8FDCFA73011CA2CEA = {
- fileRef = 2A37F4AEFDCFA73011CA2CEA;
- isa = PBXBuildFile;
- settings = {
- };
- };
- 2A37F4C9FDCFA73011CA2CEA = {
- buildActionMask = 2147483647;
- files = (
- 080E96D9FE201CDB7F000001,
- 080E96DAFE201CDB7F000001,
- 080E96DBFE201CDB7F000001,
- 089C1661FE840EACC02AAC07,
- F58D4A3D02F1F94B01000102,
- F58D4A3E02F1F94B01000102,
- F58D4A3F02F1F94B01000102,
- F5A4C13F02F203F701000102,
- F5449B4C02FB3F7E01000102,
- F5A42168038BDD8E0110C447,
- );
- isa = PBXResourcesBuildPhase;
- runOnlyForDeploymentPostprocessing = 0;
- };
- 2A37F4CEFDCFA73011CA2CEA = {
- buildActionMask = 2147483647;
- files = (
- 2A37F4CFFDCFA73011CA2CEA,
- 2A37F4D0FDCFA73011CA2CEA,
- F52A90CF02EB5C6A01000102,
- F5A4C14302F2055D01000102,
- F5A4C14602F2070D01000102,
- F5AAA21E02F8115D0110C447,
- );
- isa = PBXSourcesBuildPhase;
- runOnlyForDeploymentPostprocessing = 0;
- };
- 2A37F4CFFDCFA73011CA2CEA = {
- fileRef = 2A37F4ACFDCFA73011CA2CEA;
- isa = PBXBuildFile;
- settings = {
- ATTRIBUTES = (
- );
- };
- };
- 2A37F4D0FDCFA73011CA2CEA = {
- fileRef = 2A37F4B0FDCFA73011CA2CEA;
- isa = PBXBuildFile;
- settings = {
- ATTRIBUTES = (
- );
- };
- };
- 2A37F4D1FDCFA73011CA2CEA = {
- buildActionMask = 2147483647;
- files = (
- 1058C7A9FEA54F5311CA2CBB,
- F5AA9D9B02F807EF0110C447,
- );
- isa = PBXFrameworksBuildPhase;
- runOnlyForDeploymentPostprocessing = 0;
- };
-//2A0
-//2A1
-//2A2
-//2A3
-//2A4
-//4A0
-//4A1
-//4A2
-//4A3
-//4A4
- 4A9504D0FFE6A4CB11CA0CBA = {
- buildRules = (
- );
- buildSettings = {
- COPY_PHASE_STRIP = NO;
- OPTIMIZATION_CFLAGS = "-O0";
- };
- isa = PBXBuildStyle;
- name = Development;
- };
- 4A9504D1FFE6A4CB11CA0CBA = {
- buildRules = (
- );
- buildSettings = {
- COPY_PHASE_STRIP = YES;
- };
- isa = PBXBuildStyle;
- name = Deployment;
- };
-//4A0
-//4A1
-//4A2
-//4A3
-//4A4
-//F50
-//F51
-//F52
-//F53
-//F54
- F52A90CD02EB5C6A01000102 = {
- fileEncoding = 30;
- isa = PBXFileReference;
- path = FileSettings.m;
- refType = 4;
- };
- F52A90CE02EB5C6A01000102 = {
- fileEncoding = 30;
- isa = PBXFileReference;
- path = FileSettings.h;
- refType = 4;
- };
- F52A90CF02EB5C6A01000102 = {
- fileRef = F52A90CD02EB5C6A01000102;
- isa = PBXBuildFile;
- settings = {
- };
- };
- F52A90D002EB5C6A01000102 = {
- fileRef = F52A90CE02EB5C6A01000102;
- isa = PBXBuildFile;
- settings = {
- };
- };
- F5449B4B02FB3F7E01000102 = {
- isa = PBXFileReference;
- path = PythonWSource.icns;
- refType = 4;
- };
- F5449B4C02FB3F7E01000102 = {
- fileRef = F5449B4B02FB3F7E01000102;
- isa = PBXBuildFile;
- settings = {
- };
- };
- F58D4A3A02F1F94B01000102 = {
- isa = PBXFileReference;
- path = PythonCompiled.icns;
- refType = 4;
- };
- F58D4A3B02F1F94B01000102 = {
- isa = PBXFileReference;
- path = PythonInterpreter.icns;
- refType = 4;
- };
- F58D4A3C02F1F94B01000102 = {
- isa = PBXFileReference;
- path = PythonSource.icns;
- refType = 4;
- };
- F58D4A3D02F1F94B01000102 = {
- fileRef = F58D4A3A02F1F94B01000102;
- isa = PBXBuildFile;
- settings = {
- };
- };
- F58D4A3E02F1F94B01000102 = {
- fileRef = F58D4A3B02F1F94B01000102;
- isa = PBXBuildFile;
- settings = {
- };
- };
- F58D4A3F02F1F94B01000102 = {
- fileRef = F58D4A3C02F1F94B01000102;
- isa = PBXBuildFile;
- settings = {
- };
- };
- F5A42167038BDD8E0110C447 = {
- fileEncoding = 30;
- isa = PBXFileReference;
- path = factorySettings.plist;
- refType = 4;
- };
- F5A42168038BDD8E0110C447 = {
- fileRef = F5A42167038BDD8E0110C447;
- isa = PBXBuildFile;
- settings = {
- };
- };
- F5A4C13E02F203F601000102 = {
- isa = PBXFileReference;
- path = PreferenceWindow.nib;
- refType = 4;
- };
- F5A4C13F02F203F701000102 = {
- fileRef = F5A4C13E02F203F601000102;
- isa = PBXBuildFile;
- settings = {
- };
- };
- F5A4C14002F2055C01000102 = {
- fileEncoding = 30;
- isa = PBXFileReference;
- path = PreferencesWindowController.h;
- refType = 4;
- };
- F5A4C14102F2055C01000102 = {
- fileEncoding = 30;
- isa = PBXFileReference;
- path = PreferencesWindowController.m;
- refType = 4;
- };
- F5A4C14202F2055D01000102 = {
- fileRef = F5A4C14002F2055C01000102;
- isa = PBXBuildFile;
- settings = {
- };
- };
- F5A4C14302F2055D01000102 = {
- fileRef = F5A4C14102F2055C01000102;
- isa = PBXBuildFile;
- settings = {
- };
- };
- F5A4C14402F2070D01000102 = {
- fileEncoding = 30;
- isa = PBXFileReference;
- path = MyAppDelegate.m;
- refType = 4;
- };
- F5A4C14502F2070D01000102 = {
- fileEncoding = 30;
- isa = PBXFileReference;
- path = MyAppDelegate.h;
- refType = 4;
- };
- F5A4C14602F2070D01000102 = {
- fileRef = F5A4C14402F2070D01000102;
- isa = PBXBuildFile;
- settings = {
- };
- };
- F5A4C14702F2070D01000102 = {
- fileRef = F5A4C14502F2070D01000102;
- isa = PBXBuildFile;
- settings = {
- };
- };
- F5AA9C6A02F8042D0110C447 = {
- fileEncoding = 30;
- isa = PBXFileReference;
- path = doscript.h;
- refType = 4;
- };
- F5AA9C6C02F8042D0110C447 = {
- fileRef = F5AA9C6A02F8042D0110C447;
- isa = PBXBuildFile;
- settings = {
- };
- };
- F5AA9D0102F807EE0110C447 = {
- isa = PBXFrameworkReference;
- name = Carbon.framework;
- path = /System/Library/Frameworks/Carbon.framework;
- refType = 0;
- };
- F5AA9D9B02F807EF0110C447 = {
- fileRef = F5AA9D0102F807EE0110C447;
- isa = PBXBuildFile;
- settings = {
- };
- };
- F5AAA21D02F8115D0110C447 = {
- fileEncoding = 30;
- isa = PBXFileReference;
- path = doscript.m;
- refType = 4;
- };
- F5AAA21E02F8115D0110C447 = {
- fileRef = F5AAA21D02F8115D0110C447;
- isa = PBXBuildFile;
- settings = {
- };
- };
- };
- rootObject = 2A37F4A9FDCFA73011CA2CEA;
-}
diff --git a/Mac/OSX/PythonLauncher/PythonSource.icns b/Mac/OSX/PythonLauncher/PythonSource.icns
deleted file mode 100644
index 4ac7a96..0000000
--- a/Mac/OSX/PythonLauncher/PythonSource.icns
+++ /dev/null
Binary files differ
diff --git a/Mac/OSX/PythonLauncher/PythonWSource.icns b/Mac/OSX/PythonLauncher/PythonWSource.icns
deleted file mode 100644
index b0a8593..0000000
--- a/Mac/OSX/PythonLauncher/PythonWSource.icns
+++ /dev/null
Binary files differ
diff --git a/Mac/OSX/README b/Mac/OSX/README
index 26c646db..1e58b02 100644
--- a/Mac/OSX/README
+++ b/Mac/OSX/README
@@ -1,29 +1,57 @@
+============
+MacOSX Notes
+============
+
+This document provides a quick overview of some Mac OS X specific features in
+the Python distribution.
+
+
+Building and using a universal binary of Python on Mac OS X
+===========================================================
+
+1. What is a universal binary
+-----------------------------
+
+A universal binary build of Python contains object code for both PPC and i386
+and can therefore run at native speed on both classic powerpc based macs and
+the newer intel based macs.
+
+2. How do I build a universal binary
+------------------------------------
+
+You can enable universal binaries by specifying the "--enable-universalsdk"
+flag to configure::
+
+ $ ./configure --enable-universalsdk
+ $ make
+ $ make install
+
+This flag can be used a framework build of python, but also with a classic
+unix build. Either way you will have to build python on Mac OS X 10.4 (or later)
+with Xcode 2.1 (or later). You also have to install the 10.4u SDK when
+installing Xcode.
+
+
Building and using a framework-based Python on Mac OS X.
---------------------------------------------------------
+========================================================
-This document provides a quick introduction to framework-based Python, its
-advantages, and how to build it.
1. Why would I want a framework Python instead of a normal static Python?
--------------------------------------------------------------------------
The main reason is because you want to create GUI programs in Python. With the
-exception of X11/XDarwin-based GUI toolkits it appears that all GUI programs
-need to be run from a fullblown MacOSX application (a ".app" bundle).
+exception of X11/XDarwin-based GUI toolkits all GUI programs need to be run
+from a fullblown MacOSX application (a ".app" bundle).
While it is technically possible to create a .app without using frameworks you
will have to do the work yourself if you really want this.
A second reason for using frameworks is that they put Python-related items in
-only two places: /Library/Framework/Python.framework and /Applications/MacPython-2.3.
-This simplifies matters for users installing Python from a binary distribution
-if they want to get rid of it again. Moreover, due to the way frameworks work
-a user without admin privileges can install a binary distribution in his or
-her home directory without recompilation.
-
-Incidentally, the procedure described here is also the procedure that is
-used to create the MacPython binary installer, so the information here
-should theoretically allow you to rebuild that.
+only two places: "/Library/Framework/Python.framework" and
+"/Applications/MacPython 2.5". This simplifies matters for users installing
+Python from a binary distribution if they want to get rid of it again. Moreover,
+due to the way frameworks work a user without admin privileges can install a
+binary distribution in his or her home directory without recompilation.
2. How does a framework Python differ from a normal static Python?
------------------------------------------------------------------
@@ -37,44 +65,40 @@ Versions/Current and you will see the familiar bin and lib directories.
3. Do I need extra packages?
----------------------------
-Yes, probably. If you want to be able to use the PythonIDE you will need to
-get Waste, an all-singing-all-dancing TextEdit replacement, from
-www.merzwaren.com. It will unpack into a folder named something like "Waste
-2.1 Distribution". Make a symlink called "waste" to this folder, somewhere
-beside your Python source distribution (it can be "../waste", "../../waste",
-etc).
-
-If you want Tkinter support you need to get the OSX AquaTk distribution. If
+Yes, probably. If you want Tkinter support you need to get the OSX AquaTk
+distribution, this is installed by default on Mac OS X 10.4 or later. If
you want wxPython you need to get that. If you want Cocoa you need to get
-pyobjc. Because all these are currently in a state of flux please refer to
-http://www.cwi.nl/~jack/macpython.html, which should contain pointers to more
-information.
+PyObjC.
4. How do I build a framework Python?
-------------------------------------
This directory contains a Makefile that will create a couple of python-related
applications (fullblown OSX .app applications, that is) in
-/Applications/MacPython-2.3, and a hidden helper application Python.app inside the
-Python.framework, and unix tools "python" and "pythonw" into /usr/local/bin.
-In addition it has a target "installmacsubtree" that installs the relevant
-portions of the Mac subtree into the Python.framework.
+"/Applications/MacPython 2.3", and a hidden helper application Python.app
+inside the Python.framework, and unix tools "python" and "pythonw" into
+/usr/local/bin. In addition it has a target "installmacsubtree" that installs
+the relevant portions of the Mac subtree into the Python.framework.
It is normally invoked indirectly through the main Makefile, as the last step
in the sequence
-1. ./configure --enable-framework
-2. make
-3. make frameworkinstall
+
+ 1. ./configure --enable-framework
+
+ 2. make
+
+ 3. make install
This sequence will put the framework in /Library/Framework/Python.framework,
-the applications in /Applications/Python and the unix tools in /usr/local/bin.
+the applications in /Applications/MacPython 2.5 and the unix tools in
+/usr/local/bin.
Installing in another place, for instance $HOME/Library/Frameworks if you have
no admin privileges on your machine, has only been tested very lightly. This
can be done by configuring with --enable-framework=$HOME/Library/Frameworks.
-The other two directories, /Applications/MacPython-2.3 and /usr/local/bin, will then
-also be deposited in $HOME. This is sub-optimal for the unix tools, which you
-would want in $HOME/bin, but there is no easy way to fix this right now.
+The other two directories, /Applications/MacPython-2.3 and /usr/local/bin, will
+then also be deposited in $HOME. This is sub-optimal for the unix tools, which
+you would want in $HOME/bin, but there is no easy way to fix this right now.
Note that there are no references to the actual locations in the code or
resource files, so you are free to move things around afterwards. For example,
@@ -89,18 +113,13 @@ There is an extra target frameworkinstallextras that is not part of the
normal frameworkinstall which installs the Demo and Tools directories
into /Applications/MacPython-2.3, this is useful for binary distributions.
-If you want to run the Makefile here directly, in stead of through the main
-Makefile, you will have to pass various variable-assignments. Read the
-beginning of the Makefile for details.
+What do all these programs do?
+===============================
-
-5. What do all these programs do?
----------------------------------
-
-PythonIDE.app is an integrated development environment for Python: editor,
+"IDLE.app" is an integrated development environment for Python: editor,
debugger, etc.
-PythonLauncher.app is a helper application that will handle things when you
+"PythonLauncher.app" is a helper application that will handle things when you
double-click a .py, .pyc or .pyw file. For the first two it creates a Terminal
window and runs the scripts with the normal command-line Python. For the
latter it runs the script in the Python.app interpreter so the script can do
@@ -108,7 +127,7 @@ GUI-things. Keep the "alt" key depressed while dragging or double-clicking a
script to set runtime options. These options can be set once and for all
through PythonLauncher's preferences dialog.
-BuildApplet.app creates an applet from a Python script. Drop the script on it
+"BuildApplet.app" creates an applet from a Python script. Drop the script on it
and out comes a full-featured MacOS application. There is much more to this,
to be supplied later. Some useful (but outdated) info can be found in
Mac/Demo.
@@ -116,43 +135,27 @@ Mac/Demo.
The commandline scripts /usr/local/bin/python and pythonw can be used to run
non-GUI and GUI python scripts from the command line, respectively.
-6. How do I create a binary distribution?
------------------------------------------
+How do I create a binary distribution?
+======================================
-First go to Mac/OSX and run "python fixversions.py -a" with the Python
-you are going to distribute. This will fix the version numbers and copyright
-strings in the various Info.plist files.
+Go to the directory "Mac/OSX/BuildScript". There you'll find a script
+"build-installer.py" that does all the work. This will download and build
+a number of 3th-party libaries, configures and builds a framework Python,
+installs it, creates the installer pacakge files and then packs this in a
+DMG image.
-Go to the Mac/OSX/Dist directory. There you find a script "build" that
-does all the work: it configures and builds a framework Python, installs
-it, creates the installer package file and packs this in a DMG image.
+The script will build a universal binary, you'll therefore have to run this
+script on Mac OS X 10.4 or later and with Xcode 2.1 or later installed.
All of this is normally done completely isolated in /tmp/_py, so it does not
use your normal build directory nor does it install into /.
-Because the build script locates the Python source tree relative to its own
-pathname you may have to run it with a full pathname. If you are debugging your
-install you can pass one argument: the pathname where the build directory
-is located (i.e. where configure and make will be run), then this directory
-will be saved between runs of the build script. Do *not* specify your normal
-build directory here.
-
-build will ask you whether you have updated the readme file, and it will offer
-to include the full documentation in the installer. That option has not
-been used for a while, and it may not work.
-
-If you need to execute code on the client machine after installing Python
-you can add this to resources/postflight. If you need to do even stranger things
-you have to read Apple's documentation on PackageMaker and read the source
-of Mac/scripts/buildpkg.py.
-
-7. Odds and ends.
------------------
+Because of the way the script locates the files it needs you have to run it
+from within the BuildScript directory. The script accepts a number of
+command-line arguments, run it with --help for more information.
-The PythonLauncher is actually an Objective C Cocoa app built with Project
-Builder. It could be a Python program, except for the fact that pyobjc is not
-a part of the core distribution, and is not completely finished yet as of this
-writing.
+Odds and ends
+=============
Something to take note of is that the ".rsrc" files in the distribution are
not actually resource files, they're AppleSingle encoded resource files. The
@@ -161,3 +164,4 @@ macresource module and the Mac/OSX/Makefile cater for this, and create
files.
Jack Jansen, Jack.Jansen@cwi.nl, 15-Jul-2004.
+ Ronald Oussoren, RonaldOussoren@mac.com, 26-May-2006
diff --git a/Mac/OSX/Tools/pythonw.c b/Mac/OSX/Tools/pythonw.c
new file mode 100644
index 0000000..e70a76f
--- /dev/null
+++ b/Mac/OSX/Tools/pythonw.c
@@ -0,0 +1,17 @@
+/*
+ * This wrapper program executes a python executable hidden inside an
+ * application bundle inside the Python framework. This is needed to run
+ * GUI code: some GUI API's don't work unless the program is inside an
+ * application bundle.
+ */
+#include <unistd.h>
+#include <err.h>
+
+static char Python[] = PYTHONWEXECUTABLE;
+
+int main(int argc, char **argv) {
+ argv[0] = Python;
+ execv(Python, argv);
+ err(1, "execv: %s", Python);
+ /* NOTREACHED */
+}
diff --git a/Mac/OSX/fixversions.py b/Mac/OSX/fixversions.py
deleted file mode 100644
index 0277c79..0000000
--- a/Mac/OSX/fixversions.py
+++ /dev/null
@@ -1,69 +0,0 @@
-"""fixversions - Fix version numbers in .plist files to match current
-python version and date"""
-
-import sys
-import os
-import time
-import plistlib
-
-SHORTVERSION = "%d.%d" % (sys.version_info[0], sys.version_info[1])
-if sys.version_info[2]:
- SHORTVERSION = SHORTVERSION + ".%d" % sys.version_info[2]
-if sys.version_info[3] != 'final':
- SHORTVERSION = SHORTVERSION + "%s%d" % (sys.version_info[3], sys.version_info[4])
-
-COPYRIGHT = "(c) %d Python Software Foundation." % time.gmtime()[0]
-
-LONGVERSION = SHORTVERSION + ", " + COPYRIGHT
-
-def fix(file):
- plist = plistlib.Plist.fromFile(file)
- changed = False
- if plist.has_key("CFBundleGetInfoString") and \
- plist["CFBundleGetInfoString"] != LONGVERSION:
- plist["CFBundleGetInfoString"] = LONGVERSION
- changed = True
- if plist.has_key("CFBundleLongVersionString") and \
- plist["CFBundleLongVersionString"] != LONGVERSION:
- plist["CFBundleLongVersionString"] = LONGVERSION
- changed = True
- if plist.has_key("NSHumanReadableCopyright") and \
- plist["NSHumanReadableCopyright"] != COPYRIGHT:
- plist["NSHumanReadableCopyright"] = COPYRIGHT
- changed = True
- if plist.has_key("CFBundleVersion") and \
- plist["CFBundleVersion"] != SHORTVERSION:
- plist["CFBundleVersion"] = SHORTVERSION
- changed = True
- if plist.has_key("CFBundleShortVersionString") and \
- plist["CFBundleShortVersionString"] != SHORTVERSION:
- plist["CFBundleShortVersionString"] = SHORTVERSION
- changed = True
- if changed:
- os.rename(file, file + '~')
- plist.write(file)
-
-def main():
- if len(sys.argv) < 2:
- print "Usage: %s plistfile ..." % sys.argv[0]
- print "or: %s -a fix standard Python plist files"
- sys.exit(1)
- if sys.argv[1] == "-a":
- files = [
- "../OSXResources/app/Info.plist",
- "../OSXResources/framework/version.plist",
- "../Tools/IDE/PackageManager.plist",
- "../Tools/IDE/PythonIDE.plist",
- "../scripts/BuildApplet.plist"
- ]
- if not os.path.exists(files[0]):
- print "%s -a must be run from Mac/OSX directory"
- sys.exit(1)
- else:
- files = sys.argv[1:]
- for file in files:
- fix(file)
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/Mac/OSX/sample_sitecustomize.py b/Mac/OSX/sample_sitecustomize.py
deleted file mode 100644
index d7bbb12..0000000
--- a/Mac/OSX/sample_sitecustomize.py
+++ /dev/null
@@ -1,6 +0,0 @@
-import sys
-import os
-_maclib = os.path.join(sys.prefix, 'Mac', 'Lib')
-_scriptlib = os.path.join(_maclib, 'lib-scriptpackages')
-sys.path.append(_maclib)
-sys.path.append(_scriptlib)
diff --git a/Mac/OSXResources/app/Resources/PythonApplet.icns b/Mac/OSXResources/app/Resources/PythonApplet.icns
index ffe7ef0..c8aad9f 100644
--- a/Mac/OSXResources/app/Resources/PythonApplet.icns
+++ b/Mac/OSXResources/app/Resources/PythonApplet.icns
Binary files differ
diff --git a/Mac/OSXResources/app/Resources/PythonInterpreter.icns b/Mac/OSXResources/app/Resources/PythonInterpreter.icns
index d5dd12f..e09fd38 100644
--- a/Mac/OSXResources/app/Resources/PythonInterpreter.icns
+++ b/Mac/OSXResources/app/Resources/PythonInterpreter.icns
Binary files differ
diff --git a/Mac/OSXResources/framework/Info.plist b/Mac/OSXResources/framework/Info.plist
index 34eacd5..302ff48 100644
--- a/Mac/OSXResources/framework/Info.plist
+++ b/Mac/OSXResources/framework/Info.plist
@@ -17,10 +17,10 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
- <string>2.2</string>
+ <string>2.5</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
- <string>2.2</string>
+ <string>2.5</string>
</dict>
</plist>
diff --git a/Mac/scripts/BuildApplet.icns b/Mac/scripts/BuildApplet.icns
index 26ee1c0..ea0214c 100644
--- a/Mac/scripts/BuildApplet.icns
+++ b/Mac/scripts/BuildApplet.icns
Binary files differ