From 32f5d8f1b153be33be42df82eb0f04c42006db54 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Wed, 7 Jun 2006 19:02:03 +0000 Subject: [PATCH] Move Mac/OSX/* one level up --- Mac/{OSX => }/Extras.ReadMe.txt | 0 Mac/{OSX => }/Extras.install.py | 0 Mac/{OSX => }/Icons/Disk Image.icns | Bin Mac/{OSX => }/Icons/IDLE.icns | Bin Mac/{OSX => }/Icons/Python Folder.icns | Bin Mac/{OSX => }/Icons/PythonCompiled.icns | Bin Mac/{OSX => }/Icons/PythonLauncher.icns | Bin Mac/{OSX => }/Icons/PythonSource.icns | Bin Mac/{OSX => }/Icons/ReadMe.txt | 0 Mac/{OSX => }/Makefile.in | 58 +- Mac/OSX/BuildScript/README.txt | 35 - Mac/OSX/BuildScript/build-installer.py | 1014 ----------------- Mac/OSX/BuildScript/ncurses-5.5.patch | 36 - Mac/OSX/BuildScript/resources/ReadMe.txt | 31 - Mac/OSX/BuildScript/resources/Welcome.rtf | 15 - Mac/OSX/BuildScript/resources/background.jpg | Bin 45421 -> 0 bytes .../scripts/postflight.documentation | 12 - .../BuildScript/scripts/postflight.framework | 33 - .../scripts/postflight.patch-profile | 71 -- .../Help_Indexing_Tool_Suite.py | 110 -- .../Miscellaneous_Standards.py | 49 - .../Doc/HelpIndexingTool/Required_Suite.py | 32 - .../Doc/HelpIndexingTool/Standard_Suite.py | 343 ------ Mac/OSX/Doc/HelpIndexingTool/__init__.py | 78 -- Mac/OSX/Doc/HelpIndexingTool/odds_and_ends.py | 49 - Mac/OSX/Doc/README | 35 - Mac/OSX/Doc/setup.py | 214 ---- Mac/OSX/IDLE/Info.plist | 55 - Mac/OSX/IDLE/Makefile.in | 54 - Mac/OSX/IDLE/config-extensions.def | 88 -- Mac/OSX/IDLE/config-main.def | 79 -- Mac/OSX/IDLE/idlemain.py | 27 - .../PythonLauncher/English.lproj/Credits.rtf | 30 - .../English.lproj/MainMenu.nib/classes.nib | 12 - .../English.lproj/MainMenu.nib/info.nib | 21 - .../English.lproj/MainMenu.nib/objects.nib | Bin 5016 -> 0 bytes .../English.lproj/MyDocument.nib/classes.nib | 26 - .../English.lproj/MyDocument.nib/info.nib | 16 - .../English.lproj/MyDocument.nib/objects.nib | Bin 4845 -> 0 bytes .../PreferenceWindow.nib/classes.nib | 26 - .../PreferenceWindow.nib/info.nib | 16 - .../PreferenceWindow.nib/objects.nib | Bin 5882 -> 0 bytes Mac/OSX/PythonLauncher/FileSettings.h | 64 -- Mac/OSX/PythonLauncher/FileSettings.m | 298 ----- Mac/OSX/PythonLauncher/Info.plist | 65 -- Mac/OSX/PythonLauncher/Makefile.in | 78 -- Mac/OSX/PythonLauncher/MyAppDelegate.h | 15 - Mac/OSX/PythonLauncher/MyAppDelegate.m | 96 -- Mac/OSX/PythonLauncher/MyDocument.h | 41 - Mac/OSX/PythonLauncher/MyDocument.m | 175 --- .../PreferenceWindow.nib/classes.nib | 26 - .../PreferenceWindow.nib/info.nib | 16 - .../PreferenceWindow.nib/objects.nib | Bin 5882 -> 0 bytes .../PreferencesWindowController.h | 38 - .../PreferencesWindowController.m | 121 -- Mac/OSX/PythonLauncher/doscript.h | 12 - Mac/OSX/PythonLauncher/doscript.m | 118 -- Mac/OSX/PythonLauncher/factorySettings.plist | 87 -- Mac/OSX/PythonLauncher/main.m | 17 - Mac/OSX/Tools/pythonw.c | 17 - Mac/OSX/fixapplepython23.py | 118 -- Mac/{OSX => }/README | 0 .../app/Info.plist | 0 Mac/{OSXResources => Resources}/app/PkgInfo | 0 .../Documentation/PackageManager.gif | Bin .../Documentation/community.html | 0 .../Documentation/doc/index.html | 0 .../English.lproj/Documentation/finder.html | 0 .../English.lproj/Documentation/gui.html | 0 .../English.lproj/Documentation/ide/IDE.gif | Bin .../ide/entering_in_new_window.gif | Bin .../Documentation/ide/hello_world.gif | Bin .../Documentation/ide/index.html | 0 .../Documentation/ide/loading_ide.gif | Bin .../Documentation/ide/making_new_window.gif | Bin .../Documentation/ide/new_ide_window.gif | Bin .../Documentation/ide/new_window_made.gif | Bin .../Documentation/ide/output_window.gif | Bin .../Documentation/ide/saving_edited_file.gif | Bin .../Documentation/ide/simple_commands.gif | Bin .../Documentation/ide/syntax_error.gif | Bin .../English.lproj/Documentation/index.html | 0 .../English.lproj/Documentation/intro.html | 0 .../English.lproj/Documentation/packman.html | 0 .../English.lproj/Documentation/python.gif | Bin .../Documentation/pythonsmall.gif | Bin .../Documentation/scripting.html | 0 .../English.lproj/Documentation/shell.html | 0 .../Resources/English.lproj/InfoPlist.strings | Bin .../app/Resources/PythonApplet.icns | Bin .../app/Resources/PythonInterpreter.icns | Bin .../framework/English.lproj/InfoPlist.strings | Bin .../framework/Info.plist | 0 .../framework/version.plist | 0 .../iconsrc/IDE.psd | Bin .../iconsrc/PackageManager.psd | Bin .../iconsrc/PythonApplet.psd | Bin .../iconsrc/PythonCompiled.psd | Bin .../iconsrc/PythonIcon.psd | Bin .../iconsrc/PythonSource.psd | Bin .../iconsrc/PythonWSource.psd | Bin 101 files changed, 25 insertions(+), 4042 deletions(-) rename Mac/{OSX => }/Extras.ReadMe.txt (100%) rename Mac/{OSX => }/Extras.install.py (100%) rename Mac/{OSX => }/Icons/Disk Image.icns (100%) rename Mac/{OSX => }/Icons/IDLE.icns (100%) rename Mac/{OSX => }/Icons/Python Folder.icns (100%) rename Mac/{OSX => }/Icons/PythonCompiled.icns (100%) rename Mac/{OSX => }/Icons/PythonLauncher.icns (100%) rename Mac/{OSX => }/Icons/PythonSource.icns (100%) rename Mac/{OSX => }/Icons/ReadMe.txt (100%) rename Mac/{OSX => }/Makefile.in (81%) delete mode 100644 Mac/OSX/BuildScript/README.txt delete mode 100755 Mac/OSX/BuildScript/build-installer.py delete mode 100644 Mac/OSX/BuildScript/ncurses-5.5.patch delete mode 100644 Mac/OSX/BuildScript/resources/ReadMe.txt delete mode 100644 Mac/OSX/BuildScript/resources/Welcome.rtf delete mode 100644 Mac/OSX/BuildScript/resources/background.jpg delete mode 100755 Mac/OSX/BuildScript/scripts/postflight.documentation delete mode 100755 Mac/OSX/BuildScript/scripts/postflight.framework delete mode 100755 Mac/OSX/BuildScript/scripts/postflight.patch-profile delete mode 100644 Mac/OSX/Doc/HelpIndexingTool/Help_Indexing_Tool_Suite.py delete mode 100644 Mac/OSX/Doc/HelpIndexingTool/Miscellaneous_Standards.py delete mode 100644 Mac/OSX/Doc/HelpIndexingTool/Required_Suite.py delete mode 100644 Mac/OSX/Doc/HelpIndexingTool/Standard_Suite.py delete mode 100644 Mac/OSX/Doc/HelpIndexingTool/__init__.py delete mode 100644 Mac/OSX/Doc/HelpIndexingTool/odds_and_ends.py delete mode 100644 Mac/OSX/Doc/README delete mode 100644 Mac/OSX/Doc/setup.py delete mode 100644 Mac/OSX/IDLE/Info.plist delete mode 100644 Mac/OSX/IDLE/Makefile.in delete mode 100644 Mac/OSX/IDLE/config-extensions.def delete mode 100644 Mac/OSX/IDLE/config-main.def delete mode 100644 Mac/OSX/IDLE/idlemain.py delete mode 100644 Mac/OSX/PythonLauncher/English.lproj/Credits.rtf delete mode 100644 Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/classes.nib delete mode 100644 Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/info.nib delete mode 100644 Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/objects.nib delete mode 100644 Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/classes.nib delete mode 100644 Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/info.nib delete mode 100644 Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/objects.nib delete mode 100644 Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/classes.nib delete mode 100644 Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/info.nib delete mode 100644 Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/objects.nib delete mode 100755 Mac/OSX/PythonLauncher/FileSettings.h delete mode 100755 Mac/OSX/PythonLauncher/FileSettings.m delete mode 100644 Mac/OSX/PythonLauncher/Info.plist delete mode 100644 Mac/OSX/PythonLauncher/Makefile.in delete mode 100644 Mac/OSX/PythonLauncher/MyAppDelegate.h delete mode 100644 Mac/OSX/PythonLauncher/MyAppDelegate.m delete mode 100755 Mac/OSX/PythonLauncher/MyDocument.h delete mode 100755 Mac/OSX/PythonLauncher/MyDocument.m delete mode 100644 Mac/OSX/PythonLauncher/PreferenceWindow.nib/classes.nib delete mode 100644 Mac/OSX/PythonLauncher/PreferenceWindow.nib/info.nib delete mode 100644 Mac/OSX/PythonLauncher/PreferenceWindow.nib/objects.nib delete mode 100644 Mac/OSX/PythonLauncher/PreferencesWindowController.h delete mode 100644 Mac/OSX/PythonLauncher/PreferencesWindowController.m delete mode 100644 Mac/OSX/PythonLauncher/doscript.h delete mode 100644 Mac/OSX/PythonLauncher/doscript.m delete mode 100644 Mac/OSX/PythonLauncher/factorySettings.plist delete mode 100755 Mac/OSX/PythonLauncher/main.m delete mode 100644 Mac/OSX/Tools/pythonw.c delete mode 100644 Mac/OSX/fixapplepython23.py rename Mac/{OSX => }/README (100%) rename Mac/{OSXResources => Resources}/app/Info.plist (100%) rename Mac/{OSXResources => Resources}/app/PkgInfo (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/PackageManager.gif (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/community.html (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/doc/index.html (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/finder.html (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/gui.html (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/ide/IDE.gif (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/ide/entering_in_new_window.gif (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/ide/hello_world.gif (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/ide/index.html (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/ide/loading_ide.gif (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/ide/making_new_window.gif (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/ide/new_ide_window.gif (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/ide/new_window_made.gif (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/ide/output_window.gif (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/ide/saving_edited_file.gif (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/ide/simple_commands.gif (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/ide/syntax_error.gif (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/index.html (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/intro.html (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/packman.html (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/python.gif (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/pythonsmall.gif (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/scripting.html (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/Documentation/shell.html (100%) rename Mac/{OSXResources => Resources}/app/Resources/English.lproj/InfoPlist.strings (100%) rename Mac/{OSXResources => Resources}/app/Resources/PythonApplet.icns (100%) rename Mac/{OSXResources => Resources}/app/Resources/PythonInterpreter.icns (100%) rename Mac/{OSXResources => Resources}/framework/English.lproj/InfoPlist.strings (100%) rename Mac/{OSXResources => Resources}/framework/Info.plist (100%) rename Mac/{OSXResources => Resources}/framework/version.plist (100%) rename Mac/{OSXResources => Resources}/iconsrc/IDE.psd (100%) rename Mac/{OSXResources => Resources}/iconsrc/PackageManager.psd (100%) rename Mac/{OSXResources => Resources}/iconsrc/PythonApplet.psd (100%) rename Mac/{OSXResources => Resources}/iconsrc/PythonCompiled.psd (100%) rename Mac/{OSXResources => Resources}/iconsrc/PythonIcon.psd (100%) rename Mac/{OSXResources => Resources}/iconsrc/PythonSource.psd (100%) rename Mac/{OSXResources => Resources}/iconsrc/PythonWSource.psd (100%) diff --git a/Mac/OSX/Extras.ReadMe.txt b/Mac/Extras.ReadMe.txt similarity index 100% rename from Mac/OSX/Extras.ReadMe.txt rename to Mac/Extras.ReadMe.txt diff --git a/Mac/OSX/Extras.install.py b/Mac/Extras.install.py similarity index 100% rename from Mac/OSX/Extras.install.py rename to Mac/Extras.install.py diff --git a/Mac/OSX/Icons/Disk Image.icns b/Mac/Icons/Disk Image.icns similarity index 100% rename from Mac/OSX/Icons/Disk Image.icns rename to Mac/Icons/Disk Image.icns diff --git a/Mac/OSX/Icons/IDLE.icns b/Mac/Icons/IDLE.icns similarity index 100% rename from Mac/OSX/Icons/IDLE.icns rename to Mac/Icons/IDLE.icns diff --git a/Mac/OSX/Icons/Python Folder.icns b/Mac/Icons/Python Folder.icns similarity index 100% rename from Mac/OSX/Icons/Python Folder.icns rename to Mac/Icons/Python Folder.icns diff --git a/Mac/OSX/Icons/PythonCompiled.icns b/Mac/Icons/PythonCompiled.icns similarity index 100% rename from Mac/OSX/Icons/PythonCompiled.icns rename to Mac/Icons/PythonCompiled.icns diff --git a/Mac/OSX/Icons/PythonLauncher.icns b/Mac/Icons/PythonLauncher.icns similarity index 100% rename from Mac/OSX/Icons/PythonLauncher.icns rename to Mac/Icons/PythonLauncher.icns diff --git a/Mac/OSX/Icons/PythonSource.icns b/Mac/Icons/PythonSource.icns similarity index 100% rename from Mac/OSX/Icons/PythonSource.icns rename to Mac/Icons/PythonSource.icns diff --git a/Mac/OSX/Icons/ReadMe.txt b/Mac/Icons/ReadMe.txt similarity index 100% rename from Mac/OSX/Icons/ReadMe.txt rename to Mac/Icons/ReadMe.txt diff --git a/Mac/OSX/Makefile.in b/Mac/Makefile.in similarity index 81% rename from Mac/OSX/Makefile.in rename to Mac/Makefile.in index d0e39e40c8..82514b2fb2 100644 --- a/Mac/OSX/Makefile.in +++ b/Mac/Makefile.in @@ -3,25 +3,23 @@ # commandline in that case. VERSION=@VERSION@ -builddir = ../.. -srcdir = @srcdir@ +builddir = .. +srcdir=@srcdir@ prefix=/Library/Frameworks/Python.framework/Versions/$(VERSION) LIBDEST=$(prefix)/lib/python$(VERSION) -BUILDPYTHON=$(builddir)/python.exe +RUNSHARED=@RUNSHARED@ +BUILDEXE=@BUILDEXEEXT@ +BUILDPYTHON=$(builddir)/python$(BUILDEXE) DESTDIR= -LDFLAGS= @LDFLAGS@ +LDFLAGS=@LDFLAGS@ FRAMEWORKUNIXTOOLSPREFIX=@FRAMEWORKUNIXTOOLSPREFIX@ # These are normally glimpsed from the previous set -bindir=@exec_prefix@/bin +bindir=$(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 @@ -36,15 +34,15 @@ LN=@LN@ STRIPFLAG=-s CPMAC=/Developer/Tools/CpMac -APPTEMPLATE=$(srcdir)/../OSXResources/app +APPTEMPLATE=$(srcdir)/Resources/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 +DOCDIR=$(srcdir)/Resources/app/Resources/English.lproj/Documentation DOCINDEX=$(DOCDIR)/"Documentation idx" -CACHERSRC=$(srcdir)/../scripts/cachersrc.py -compileall=$(srcdir)/../../Lib/compileall.py +CACHERSRC=$(srcdir)/scripts/cachersrc.py +compileall=$(srcdir)/../Lib/compileall.py installapps: install_Python install_BuildApplet install_PythonLauncher \ install_IDLE checkapplepython install_pythonw install_versionedtools @@ -163,11 +161,11 @@ install_IDLE: cd IDLE && make install install_BuildApplet: - $(BUILDPYTHON) $(srcdir)/../scripts/BuildApplet.py \ + $(RUNSHARED) $(BUILDPYTHON) $(srcdir)/scripts/BuildApplet.py \ --destroot "$(DESTDIR)" \ --python $(INSTALLED_PYTHONAPP) \ --output "$(DESTDIR)$(PYTHONAPPSDIR)/Build Applet.app" \ - $(srcdir)/../scripts/BuildApplet.py + $(srcdir)/scripts/BuildApplet.py MACLIBDEST=$(LIBDEST)/plat-mac MACTOOLSDEST=$(prefix)/Mac/Tools @@ -225,29 +223,25 @@ installmacsubtree: 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) + $(RUNSHARED) $(BUILDPYTHON) $(CACHERSRC) -v $(DESTDIR)$(MACLIBDEST) $(DESTDIR)$(MACTOOLSDEST) + $(RUNSHARED) $(BUILDPYTHON) -Wi -tt $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST) + $(RUNSHARED) $(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 -$(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. +$(INSTALLED_PYTHONAPP): install_Python -installextras: +installextras: $(srcdir)/Extras.ReadMe.txt $(srcdir)/Extras.install.py $(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 \ + $(INSTALL) $(srcdir)/Extras.ReadMe.txt "$(DESTDIR)$(PYTHONAPPSDIR)/Extras/ReadMe.txt" + $(RUNSHARED) $(BUILDPYTHON) $(srcdir)/Extras.install.py $(srcdir)/../Demo \ "$(DESTDIR)$(PYTHONAPPSDIR)/Extras/Demo" + $(RUNSHARED) $(BUILDPYTHON) $(srcdir)/Extras.install.py $(srcdir)/Demo \ + "$(DESTDIR)$(PYTHONAPPSDIR)/Extras/Demo.Mac" -checkapplepython: - @if ! $(BUILDPYTHON) $(srcdir)/fixapplepython23.py -n; then \ +checkapplepython: $(srcdir)/Tools/fixapplepython23.py + @if ! $(RUNSHARED) $(BUILDPYTHON) $(srcdir)/Tools/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."; \ + echo "* WARNING: Run $(srcdir)/Tools/fixapplepython23.py with \"sudo\" to fix this."; \ fi @@ -255,5 +249,3 @@ clean: rm pythonw cd PythonLauncher && make clean cd IDLE && make clean - - diff --git a/Mac/OSX/BuildScript/README.txt b/Mac/OSX/BuildScript/README.txt deleted file mode 100644 index c556de8329..0000000000 --- a/Mac/OSX/BuildScript/README.txt +++ /dev/null @@ -1,35 +0,0 @@ -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 deleted file mode 100755 index b24f5dcee0..0000000000 --- a/Mac/OSX/BuildScript/build-installer.py +++ /dev/null @@ -1,1014 +0,0 @@ -#!/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 deleted file mode 100644 index 0eab3d3666..0000000000 --- a/Mac/OSX/BuildScript/ncurses-5.5.patch +++ /dev/null @@ -1,36 +0,0 @@ -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 deleted file mode 100644 index 1a6e63764f..0000000000 --- a/Mac/OSX/BuildScript/resources/ReadMe.txt +++ /dev/null @@ -1,31 +0,0 @@ -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/BuildScript/resources/Welcome.rtf b/Mac/OSX/BuildScript/resources/Welcome.rtf deleted file mode 100644 index cb65f09409..0000000000 --- a/Mac/OSX/BuildScript/resources/Welcome.rtf +++ /dev/null @@ -1,15 +0,0 @@ -{\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 $FULL_VERSION -\f0\b0 for -\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, 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 deleted file mode 100644 index b3c76406cf4a264410e12d5af1c11380164f1e66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45421 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 le> "${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/Doc/HelpIndexingTool/Help_Indexing_Tool_Suite.py b/Mac/OSX/Doc/HelpIndexingTool/Help_Indexing_Tool_Suite.py deleted file mode 100644 index 58d73076df..0000000000 --- a/Mac/OSX/Doc/HelpIndexingTool/Help_Indexing_Tool_Suite.py +++ /dev/null @@ -1,110 +0,0 @@ -"""Suite Help Indexing Tool Suite: Special events that just the Help Indexing Tool supports. -Level 0, version 0 - -Generated from /Developer/Applications/Apple Help Indexing Tool.app -AETE/AEUT resource version 1/1, language 0, script 0 -""" - -import aetools -import MacOS - -_code = 'HIT ' - -class Help_Indexing_Tool_Suite_Events: - - def turn_anchor_indexing(self, _object, _attributes={}, **_arguments): - """turn anchor indexing: Turns anchor indexing on or off. - Required argument: \xd2on\xd3 or \xd2off\xd3, to turn anchor indexing on or off - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'HIT ' - _subcode = 'tAnc' - - if _arguments: raise TypeError, 'No optional args expected' - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error, aetools.decodeerror(_arguments) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - _argmap_turn_remote_root = { - 'with_root_url' : 'rURL', - } - - def turn_remote_root(self, _object, _attributes={}, **_arguments): - """turn remote root: Turn usage of remote root for content on the web on or off. If turning \xd2on\xd3, supply a string as second parameter. - Required argument: \xd2on\xd3 or \xd2off\xd3, to turn remote root on or off - Keyword argument with_root_url: The remote root to use, in the form of \xd2http://www.apple.com/help/\xd3. - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'HIT ' - _subcode = 'tRem' - - aetools.keysubst(_arguments, self._argmap_turn_remote_root) - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error, aetools.decodeerror(_arguments) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - def use_tokenizer(self, _object, _attributes={}, **_arguments): - """use tokenizer: Tells the indexing tool which tokenizer to use. - Required argument: Specify \xd2English\xd3, \xd2European\xd3, \xd2Japanese\xd3, \xd2Korean\xd3, or \xd2Simple\xd3. - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'HIT ' - _subcode = 'uTok' - - if _arguments: raise TypeError, 'No optional args expected' - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error, aetools.decodeerror(_arguments) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - -class application(aetools.ComponentItem): - """application - Application class """ - want = 'capp' -class _Prop_idleStatus(aetools.NProperty): - """idleStatus - """ - which = 'sIdl' - want = 'bool' -application._superclassnames = [] -application._privpropdict = { - 'idleStatus' : _Prop_idleStatus, -} -application._privelemdict = { -} - -# -# Indices of types declared in this module -# -_classdeclarations = { - 'capp' : application, -} - -_propdeclarations = { - 'sIdl' : _Prop_idleStatus, -} - -_compdeclarations = { -} - -_enumdeclarations = { -} diff --git a/Mac/OSX/Doc/HelpIndexingTool/Miscellaneous_Standards.py b/Mac/OSX/Doc/HelpIndexingTool/Miscellaneous_Standards.py deleted file mode 100644 index 3cf745f986..0000000000 --- a/Mac/OSX/Doc/HelpIndexingTool/Miscellaneous_Standards.py +++ /dev/null @@ -1,49 +0,0 @@ -"""Suite Miscellaneous Standards: Useful events that aren\xd5t in any other suite -Level 0, version 0 - -Generated from /Developer/Applications/Apple Help Indexing Tool.app -AETE/AEUT resource version 1/1, language 0, script 0 -""" - -import aetools -import MacOS - -_code = 'misc' - -class Miscellaneous_Standards_Events: - - def revert(self, _object, _attributes={}, **_arguments): - """revert: Revert an object to the most recently saved version - Required argument: object to revert - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'misc' - _subcode = 'rvrt' - - if _arguments: raise TypeError, 'No optional args expected' - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error, aetools.decodeerror(_arguments) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - -# -# Indices of types declared in this module -# -_classdeclarations = { -} - -_propdeclarations = { -} - -_compdeclarations = { -} - -_enumdeclarations = { -} diff --git a/Mac/OSX/Doc/HelpIndexingTool/Required_Suite.py b/Mac/OSX/Doc/HelpIndexingTool/Required_Suite.py deleted file mode 100644 index eb9fee0017..0000000000 --- a/Mac/OSX/Doc/HelpIndexingTool/Required_Suite.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Suite Required Suite: Terms that every application should support -Level 1, version 1 - -Generated from /Developer/Applications/Apple Help Indexing Tool.app -AETE/AEUT resource version 1/1, language 0, script 0 -""" - -import aetools -import MacOS - -_code = 'reqd' - -from StdSuites.Required_Suite import * -class Required_Suite_Events(Required_Suite_Events): - - pass - - -# -# Indices of types declared in this module -# -_classdeclarations = { -} - -_propdeclarations = { -} - -_compdeclarations = { -} - -_enumdeclarations = { -} diff --git a/Mac/OSX/Doc/HelpIndexingTool/Standard_Suite.py b/Mac/OSX/Doc/HelpIndexingTool/Standard_Suite.py deleted file mode 100644 index 4f6604cfeb..0000000000 --- a/Mac/OSX/Doc/HelpIndexingTool/Standard_Suite.py +++ /dev/null @@ -1,343 +0,0 @@ -"""Suite Standard Suite: Common terms for most applications -Level 1, version 1 - -Generated from /Developer/Applications/Apple Help Indexing Tool.app -AETE/AEUT resource version 1/1, language 0, script 0 -""" - -import aetools -import MacOS - -_code = 'CoRe' - -from StdSuites.Standard_Suite import * -class Standard_Suite_Events(Standard_Suite_Events): - - _argmap_close = { - 'saving' : 'savo', - 'in_' : 'kfil', - } - - def close(self, _object, _attributes={}, **_arguments): - """close: Close an object - Required argument: the objects to close - Keyword argument saving: specifies whether or not changes should be saved before closing - Keyword argument in_: the file in which to save the object - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'core' - _subcode = 'clos' - - aetools.keysubst(_arguments, self._argmap_close) - _arguments['----'] = _object - - aetools.enumsubst(_arguments, 'savo', _Enum_savo) - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error, aetools.decodeerror(_arguments) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - def data_size(self, _object, _attributes={}, **_arguments): - """data size: Return the size in bytes of an object - Required argument: the object whose data size is to be returned - Keyword argument _attributes: AppleEvent attribute dictionary - Returns: the size of the object in bytes - """ - _code = 'core' - _subcode = 'dsiz' - - if _arguments: raise TypeError, 'No optional args expected' - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error, aetools.decodeerror(_arguments) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - def get(self, _object, _attributes={}, **_arguments): - """get: Get the data for an object - Required argument: the object whose data is to be returned - Keyword argument _attributes: AppleEvent attribute dictionary - Returns: The data from the object - """ - _code = 'core' - _subcode = 'getd' - - if _arguments: raise TypeError, 'No optional args expected' - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error, aetools.decodeerror(_arguments) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - _argmap_make = { - 'new' : 'kocl', - 'at' : 'insh', - 'with_data' : 'data', - 'with_properties' : 'prdt', - } - - def make(self, _no_object=None, _attributes={}, **_arguments): - """make: Make a new element - Keyword argument new: the class of the new element - Keyword argument at: the location at which to insert the element - Keyword argument with_data: the initial data for the element - Keyword argument with_properties: the initial values for the properties of the element - Keyword argument _attributes: AppleEvent attribute dictionary - Returns: Object specifier for the new element - """ - _code = 'core' - _subcode = 'crel' - - aetools.keysubst(_arguments, self._argmap_make) - if _no_object != None: raise TypeError, 'No direct arg expected' - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error, aetools.decodeerror(_arguments) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - def open(self, _object, _attributes={}, **_arguments): - """open: Open the specified object(s) - Required argument: Objects to open. Can be a list of files or an object specifier. - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'aevt' - _subcode = 'odoc' - - if _arguments: raise TypeError, 'No optional args expected' - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error, aetools.decodeerror(_arguments) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - def print_(self, _object, _attributes={}, **_arguments): - """print: Print the specified object(s) - Required argument: Objects to print. Can be a list of files or an object specifier. - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'aevt' - _subcode = 'pdoc' - - if _arguments: raise TypeError, 'No optional args expected' - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error, aetools.decodeerror(_arguments) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - _argmap_save = { - 'in_' : 'kfil', - 'as' : 'fltp', - } - - def save(self, _object, _attributes={}, **_arguments): - """save: save a set of objects - Required argument: Objects to save. - Keyword argument in_: the file in which to save the object(s) - Keyword argument as: the file type of the document in which to save the data - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'core' - _subcode = 'save' - - aetools.keysubst(_arguments, self._argmap_save) - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error, aetools.decodeerror(_arguments) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - _argmap_set = { - 'to' : 'data', - } - - def set(self, _object, _attributes={}, **_arguments): - """set: Set an object\xd5s data - Required argument: the object to change - Keyword argument to: the new value - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'core' - _subcode = 'setd' - - aetools.keysubst(_arguments, self._argmap_set) - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error, aetools.decodeerror(_arguments) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - -class application(aetools.ComponentItem): - """application - An application program """ - want = 'capp' -# element 'cwin' as ['indx', 'name', 'rele'] -# element 'docu' as ['name'] - -class window(aetools.ComponentItem): - """window - A Window """ - want = 'cwin' -class _Prop_bounds(aetools.NProperty): - """bounds - the boundary rectangle for the window """ - which = 'pbnd' - want = 'qdrt' -class _Prop_closeable(aetools.NProperty): - """closeable - Does the window have a close box? """ - which = 'hclb' - want = 'bool' -class _Prop_floating(aetools.NProperty): - """floating - Does the window float? """ - which = 'isfl' - want = 'bool' -class _Prop_index(aetools.NProperty): - """index - the number of the window """ - which = 'pidx' - want = 'long' -class _Prop_modal(aetools.NProperty): - """modal - Is the window modal? """ - which = 'pmod' - want = 'bool' -class _Prop_name(aetools.NProperty): - """name - the title of the window """ - which = 'pnam' - want = 'itxt' -class _Prop_position(aetools.NProperty): - """position - upper left coordinates of window """ - which = 'ppos' - want = 'QDpt' -class _Prop_resizable(aetools.NProperty): - """resizable - Is the window resizable? """ - which = 'prsz' - want = 'bool' -class _Prop_titled(aetools.NProperty): - """titled - Does the window have a title bar? """ - which = 'ptit' - want = 'bool' -class _Prop_visible(aetools.NProperty): - """visible - is the window visible? """ - which = 'pvis' - want = 'bool' -class _Prop_zoomable(aetools.NProperty): - """zoomable - Is the window zoomable? """ - which = 'iszm' - want = 'bool' -class _Prop_zoomed(aetools.NProperty): - """zoomed - Is the window zoomed? """ - which = 'pzum' - want = 'bool' - -class document(aetools.ComponentItem): - """document - A Document """ - want = 'docu' -class _Prop_modified(aetools.NProperty): - """modified - Has the document been modified since the last save? """ - which = 'imod' - want = 'bool' -application._superclassnames = [] -application._privpropdict = { -} -application._privelemdict = { - 'document' : document, - 'window' : window, -} -window._superclassnames = [] -window._privpropdict = { - 'bounds' : _Prop_bounds, - 'closeable' : _Prop_closeable, - 'floating' : _Prop_floating, - 'index' : _Prop_index, - 'modal' : _Prop_modal, - 'name' : _Prop_name, - 'position' : _Prop_position, - 'resizable' : _Prop_resizable, - 'titled' : _Prop_titled, - 'visible' : _Prop_visible, - 'zoomable' : _Prop_zoomable, - 'zoomed' : _Prop_zoomed, -} -window._privelemdict = { -} -document._superclassnames = [] -document._privpropdict = { - 'modified' : _Prop_modified, - 'name' : _Prop_name, -} -document._privelemdict = { -} -_Enum_savo = { - 'yes' : 'yes ', # Save objects now - 'no' : 'no ', # Do not save objects - 'ask' : 'ask ', # Ask the user whether to save -} - - -# -# Indices of types declared in this module -# -_classdeclarations = { - 'capp' : application, - 'cwin' : window, - 'docu' : document, -} - -_propdeclarations = { - 'hclb' : _Prop_closeable, - 'imod' : _Prop_modified, - 'isfl' : _Prop_floating, - 'iszm' : _Prop_zoomable, - 'pbnd' : _Prop_bounds, - 'pidx' : _Prop_index, - 'pmod' : _Prop_modal, - 'pnam' : _Prop_name, - 'ppos' : _Prop_position, - 'prsz' : _Prop_resizable, - 'ptit' : _Prop_titled, - 'pvis' : _Prop_visible, - 'pzum' : _Prop_zoomed, -} - -_compdeclarations = { -} - -_enumdeclarations = { - 'savo' : _Enum_savo, -} diff --git a/Mac/OSX/Doc/HelpIndexingTool/__init__.py b/Mac/OSX/Doc/HelpIndexingTool/__init__.py deleted file mode 100644 index 5359df53c4..0000000000 --- a/Mac/OSX/Doc/HelpIndexingTool/__init__.py +++ /dev/null @@ -1,78 +0,0 @@ -""" -Package generated from /Developer/Applications/Apple Help Indexing Tool.app -""" -import aetools -Error = aetools.Error -import Standard_Suite -import Help_Indexing_Tool_Suite -import odds_and_ends -import Miscellaneous_Standards -import Required_Suite - - -_code_to_module = { - 'CoRe' : Standard_Suite, - 'HIT ' : Help_Indexing_Tool_Suite, - 'Odds' : odds_and_ends, - 'misc' : Miscellaneous_Standards, - 'reqd' : Required_Suite, -} - - - -_code_to_fullname = { - 'CoRe' : ('HelpIndexingTool.Standard_Suite', 'Standard_Suite'), - 'HIT ' : ('HelpIndexingTool.Help_Indexing_Tool_Suite', 'Help_Indexing_Tool_Suite'), - 'Odds' : ('HelpIndexingTool.odds_and_ends', 'odds_and_ends'), - 'misc' : ('HelpIndexingTool.Miscellaneous_Standards', 'Miscellaneous_Standards'), - 'reqd' : ('HelpIndexingTool.Required_Suite', 'Required_Suite'), -} - -from Standard_Suite import * -from Help_Indexing_Tool_Suite import * -from odds_and_ends import * -from Miscellaneous_Standards import * -from Required_Suite import * - -def getbaseclasses(v): - if not getattr(v, '_propdict', None): - v._propdict = {} - v._elemdict = {} - for superclassname in getattr(v, '_superclassnames', []): - superclass = eval(superclassname) - getbaseclasses(superclass) - v._propdict.update(getattr(superclass, '_propdict', {})) - v._elemdict.update(getattr(superclass, '_elemdict', {})) - v._propdict.update(getattr(v, '_privpropdict', {})) - v._elemdict.update(getattr(v, '_privelemdict', {})) - -import StdSuites - -# -# Set property and element dictionaries now that all classes have been defined -# -getbaseclasses(window) -getbaseclasses(application) -getbaseclasses(document) -getbaseclasses(application) - -# -# Indices of types declared in this module -# -_classdeclarations = { - 'cwin' : window, - 'capp' : application, - 'docu' : document, - 'capp' : application, -} - - -class HelpIndexingTool(Standard_Suite_Events, - Help_Indexing_Tool_Suite_Events, - odds_and_ends_Events, - Miscellaneous_Standards_Events, - Required_Suite_Events, - aetools.TalkTo): - _signature = 'hiti' - - _moduleName = 'HelpIndexingTool' diff --git a/Mac/OSX/Doc/HelpIndexingTool/odds_and_ends.py b/Mac/OSX/Doc/HelpIndexingTool/odds_and_ends.py deleted file mode 100644 index 7ee46f35cc..0000000000 --- a/Mac/OSX/Doc/HelpIndexingTool/odds_and_ends.py +++ /dev/null @@ -1,49 +0,0 @@ -"""Suite odds and ends: Things that should be in some standard suite, but aren\xd5t -Level 1, version 1 - -Generated from /Developer/Applications/Apple Help Indexing Tool.app -AETE/AEUT resource version 1/1, language 0, script 0 -""" - -import aetools -import MacOS - -_code = 'Odds' - -class odds_and_ends_Events: - - def select(self, _object=None, _attributes={}, **_arguments): - """select: Select the specified object - Required argument: the object to select - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'misc' - _subcode = 'slct' - - if _arguments: raise TypeError, 'No optional args expected' - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error, aetools.decodeerror(_arguments) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - -# -# Indices of types declared in this module -# -_classdeclarations = { -} - -_propdeclarations = { -} - -_compdeclarations = { -} - -_enumdeclarations = { -} diff --git a/Mac/OSX/Doc/README b/Mac/OSX/Doc/README deleted file mode 100644 index 4f4d53d01e..0000000000 --- a/Mac/OSX/Doc/README +++ /dev/null @@ -1,35 +0,0 @@ -In this directory you can build the Python documentation in a form that -is suitable for access with Apple Help Viewer. This will enable the -"Python Documentation" menu entries in the MacPython IDE Help menu. - -Unfortunately the procedure to build the docs is not very streamlined. - -First, edit setup.py. At the top, edit MAJOR_VERSION and MINOR_VERSION, -and check that DESTDIR makes sense. The documentation will be installed -inside PythonIDE.app. - -In DocBuild.initialize_options, set self.download to True if you want to -download the docs. Set it to False if you want to build the docs from -the source tree, but this requires LaTex and lots of other stuff. -Doable, but not easy. - -Second, if you want to download the docs you may need to do a couple -more edits. The way the docs are packaged will often change between -major releases. Fiddle DocBuild.downloadDocs to make it do the right -thing (download the docs from python.org, unpack them, rename the -directory to "build/html"). - -After these edits you should be ready to roll. "pythonw setup.py build" -should download and unpack (or build) the docs. Next, it will do some -magic to make the docs indexable. Finally, it will run the Apple Help -Indexing Tool. (This last step is the reason you must use "pythonw" as -opposed to "python"). Usually it will time out while waiting for AHIT to -do its work. Wait until AHIT is done. - -Now you're ready to install with "python setup.py install". - -After this is done test your work. Fire up PythonIDE, and check that -Help->Python Documentation brings up the documentation in the Help Viewer. -Also open an IDE edit window, type something like "import sys", select -"import", and use Help->Lookup in Python Documentation to check that the -index has been generated correctly. diff --git a/Mac/OSX/Doc/setup.py b/Mac/OSX/Doc/setup.py deleted file mode 100644 index bd86a20a83..0000000000 --- a/Mac/OSX/Doc/setup.py +++ /dev/null @@ -1,214 +0,0 @@ -# Build and install an Apple Help Viewer compatible version of the Python -# documentation into the framework. -# Code by Bill Fancher, with some modifications by Jack Jansen. -# -# You must run this as a two-step process -# 1. python setupDocs.py build -# 2. Wait for Apple Help Indexing Tool to finish -# 3. python setupDocs.py install -# -# To do: -# - test whether the docs are available locally before downloading -# - fix buildDocsFromSource -# - Get documentation version from sys.version, fallback to 2.2.1 -# - See if we can somehow detect that Apple Help Indexing Tool is finished -# - data_files to setup() doesn't seem the right way to pass the arguments -# -import sys, os, re -from distutils.cmd import Command -from distutils.command.build import build -from distutils.core import setup -from distutils.file_util import copy_file -from distutils.dir_util import copy_tree -from distutils.log import log -from distutils.spawn import spawn -from distutils import sysconfig, dep_util -from distutils.util import change_root -import HelpIndexingTool -import Carbon.File -import time - -MAJOR_VERSION='2.4' -MINOR_VERSION='2.4.1' -DESTDIR='/Applications/MacPython-%s/PythonIDE.app/Contents/Resources/English.lproj/PythonDocumentation' % MAJOR_VERSION - -class DocBuild(build): - def initialize_options(self): - build.initialize_options(self) - self.build_html = None - self.build_dest = None - self.download = 1 - self.doc_version = MINOR_VERSION # Only needed if download is true - - def finalize_options(self): - build.finalize_options(self) - if self.build_html is None: - self.build_html = os.path.join(self.build_base, 'html') - if self.build_dest is None: - self.build_dest = os.path.join(self.build_base, 'PythonDocumentation') - - def spawn(self, *args): - spawn(args, 1, self.verbose, self.dry_run) - - def downloadDocs(self): - workdir = os.getcwd() - # XXX Note: the next strings may change from version to version - url = 'http://www.python.org/ftp/python/doc/%s/html-%s.tar.bz2' % \ - (self.doc_version,self.doc_version) - tarfile = 'html-%s.tar.bz2' % self.doc_version - dirname = 'Python-Docs-%s' % self.doc_version - - if os.path.exists(self.build_html): - raise RuntimeError, '%s: already exists, please remove and try again' % self.build_html - os.chdir(self.build_base) - self.spawn('curl','-O', url) - self.spawn('tar', '-xjf', tarfile) - os.rename(dirname, 'html') - os.chdir(workdir) -## print "** Please unpack %s" % os.path.join(self.build_base, tarfile) -## print "** Unpack the files into %s" % self.build_html -## raise RuntimeError, "You need to unpack the docs manually" - - def buildDocsFromSource(self): - srcdir = '../../..' - docdir = os.path.join(srcdir, 'Doc') - htmldir = os.path.join(docdir, 'html') - spawn(('make','--directory', docdir, 'html'), 1, self.verbose, self.dry_run) - self.mkpath(self.build_html) - copy_tree(htmldir, self.build_html) - - def ensureHtml(self): - if not os.path.exists(self.build_html): - if self.download: - self.downloadDocs() - else: - self.buildDocsFromSource() - - def hackIndex(self): - ind_html = 'index.html' - #print 'self.build_dest =', self.build_dest - hackedIndex = file(os.path.join(self.build_dest, ind_html),'w') - origIndex = file(os.path.join(self.build_html,ind_html)) - r = re.compile('', re.DOTALL) - hackedIndex.write(r.sub('',origIndex.read())) - - def hackFile(self,d,f): - origPath = os.path.join(d,f) - assert(origPath[:len(self.build_html)] == self.build_html) - outPath = os.path.join(self.build_dest, d[len(self.build_html)+1:], f) - (name, ext) = os.path.splitext(f) - if os.path.isdir(origPath): - self.mkpath(outPath) - elif ext == '.html': - if self.verbose: print 'hacking %s to %s' % (origPath,outPath) - hackedFile = file(outPath, 'w') - origFile = file(origPath,'r') - hackedFile.write(self.r.sub('
', origFile.read())) - else: - copy_file(origPath, outPath) - - def hackHtml(self): - self.r = re.compile('
') - os.path.walk(self.build_html, self.visit, None) - - def visit(self, dummy, dirname, filenames): - for f in filenames: - self.hackFile(dirname, f) - - def makeHelpIndex(self): - app = '/Developer/Applications/Apple Help Indexing Tool.app' - self.spawn('open', '-a', app , self.build_dest) - print "Please wait until Apple Help Indexing Tool finishes before installing" - - def makeHelpIndex(self): - app = HelpIndexingTool.HelpIndexingTool(start=1) - app.open(Carbon.File.FSSpec(self.build_dest)) - sys.stderr.write("Waiting for Help Indexing Tool to start...") - while 1: - # This is bad design in the suite generation code! - idle = app._get(HelpIndexingTool.Help_Indexing_Tool_Suite._Prop_idleStatus()) - time.sleep(10) - if not idle: break - sys.stderr.write(".") - sys.stderr.write("\n") - sys.stderr.write("Waiting for Help Indexing Tool to finish...") - while 1: - # This is bad design in the suite generation code! - idle = app._get(HelpIndexingTool.Help_Indexing_Tool_Suite._Prop_idleStatus()) - time.sleep(10) - if idle: break - sys.stderr.write(".") - sys.stderr.write("\n") - - - def run(self): - self.ensure_finalized() - self.mkpath(self.build_base) - self.ensureHtml() - if not os.path.isdir(self.build_html): - raise RuntimeError, \ - "Can't find source folder for documentation." - self.mkpath(self.build_dest) - if dep_util.newer(os.path.join(self.build_html,'index.html'), os.path.join(self.build_dest,'index.html')): - self.mkpath(self.build_dest) - self.hackHtml() - self.hackIndex() - self.makeHelpIndex() - -class AHVDocInstall(Command): - description = "install Apple Help Viewer html files" - user_options = [('install-doc=', 'd', - 'directory to install HTML tree'), - ('root=', None, - "install everything relative to this alternate root directory"), - ] - - def initialize_options(self): - self.build_dest = None - self.install_doc = None - self.prefix = None - self.root = None - - def finalize_options(self): - self.set_undefined_options('install', - ('prefix', 'prefix'), - ('root', 'root')) -# import pdb ; pdb.set_trace() - build_cmd = self.get_finalized_command('build') - if self.build_dest == None: - build_cmd = self.get_finalized_command('build') - self.build_dest = build_cmd.build_dest - if self.install_doc == None: - self.install_doc = os.path.join(self.prefix, DESTDIR) - print 'INSTALL', self.build_dest, '->', self.install_doc - - def run(self): - self.finalize_options() - self.ensure_finalized() - print "Running Installer" - instloc = self.install_doc - if self.root: - instloc = change_root(self.root, instloc) - self.mkpath(instloc) - copy_tree(self.build_dest, instloc) - print "Installation complete" - -def mungeVersion(infile, outfile): - i = file(infile,'r') - o = file(outfile,'w') - o.write(re.sub('\$\(VERSION\)',sysconfig.get_config_var('VERSION'),i.read())) - i.close() - o.close() - -def main(): - # turn off warnings when deprecated modules are imported -## import warnings -## warnings.filterwarnings("ignore",category=DeprecationWarning) - setup(name = 'Documentation', - version = '%d.%d' % sys.version_info[:2], - cmdclass = {'install_data':AHVDocInstall, 'build':DocBuild}, - data_files = ['dummy'], - ) - -if __name__ == '__main__': - main() diff --git a/Mac/OSX/IDLE/Info.plist b/Mac/OSX/IDLE/Info.plist deleted file mode 100644 index bbe2ea1182..0000000000 --- a/Mac/OSX/IDLE/Info.plist +++ /dev/null @@ -1,55 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleDocumentTypes - - - CFBundleTypeExtensions - - py - pyw - - CFBundleTypeIconFile - PythonSource.icns - CFBundleTypeName - Python Script - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - pyc - pyo - - CFBundleTypeIconFile - PythonCompiled.icns - CFBundleTypeName - Python Bytecode Document - CFBundleTypeRole - Editor - - - CFBundleExecutable - IDLE - CFBundleGetInfoString - 2.5, © 001-2006 Python Software Foundation - CFBundleIconFile - IDLE.icns - CFBundleIdentifier - org.python.IDLE - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - IDLE - CFBundlePackageType - APPL - CFBundleShortVersionString - 2.5 - CFBundleVersion - 2.5 - - diff --git a/Mac/OSX/IDLE/Makefile.in b/Mac/OSX/IDLE/Makefile.in deleted file mode 100644 index 5ed1d5a0eb..0000000000 --- a/Mac/OSX/IDLE/Makefile.in +++ /dev/null @@ -1,54 +0,0 @@ -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 $(srcdir)/config-main.def $(srcdir)/config-extensions.def - 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" - cp $(srcdir)/config-main.def "$(DESTDIR)$(prefix)/lib/python$(VERSION)/idlelib/config-main.def" - cp $(srcdir)/config-extensions.def "$(DESTDIR)$(prefix)/lib/python$(VERSION)/idlelib/config-extensions.def" - -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/config-extensions.def b/Mac/OSX/IDLE/config-extensions.def deleted file mode 100644 index c17f068e2d..0000000000 --- a/Mac/OSX/IDLE/config-extensions.def +++ /dev/null @@ -1,88 +0,0 @@ -# config-extensions.def -# -# IDLE reads several config files to determine user preferences. This -# file is the default configuration file for IDLE extensions settings. -# -# Each extension must have at least one section, named after the extension -# module. This section must contain an 'enable' item (=1 to enable the -# extension, =0 to disable it), it may contain 'enable_editor' or 'enable_shell' -# items, to apply it only to editor/shell windows, and may also contain any -# other general configuration items for the extension. -# -# Each extension must define at least one section named ExtensionName_bindings -# or ExtensionName_cfgBindings. If present, ExtensionName_bindings defines -# virtual event bindings for the extension that are not user re-configurable. -# If present, ExtensionName_cfgBindings defines virtual event bindings for the -# extension that may be sensibly re-configured. -# -# If there are no keybindings for a menus' virtual events, include lines like -# <>= (See [CodeContext], below.) -# -# Currently it is necessary to manually modify this file to change extension -# key bindings and default values. To customize, create -# ~/.idlerc/config-extensions.cfg and append the appropriate customized -# section(s). Those sections will override the defaults in this file. -# -# Note: If a keybinding is already in use when the extension is -# loaded, the extension's virtual event's keybinding will be set to ''. -# -# See config-keys.def for notes on specifying keys and extend.txt for -# information on creating IDLE extensions. - -[FormatParagraph] -enable=1 -[FormatParagraph_cfgBindings] -format-paragraph= - -[AutoExpand] -enable=1 -[AutoExpand_cfgBindings] -expand-word= - -[ZoomHeight] -enable=1 -[ZoomHeight_cfgBindings] -zoom-height= - -[ScriptBinding] -enable=1 -[ScriptBinding_cfgBindings] -run-module= -check-module= - -[CallTips] -enable=1 -[CallTips_cfgBindings] -force-open-calltip= -[CallTips_bindings] -try-open-calltip= -refresh-calltip= - -[ParenMatch] -enable=1 -style= expression -flash-delay= 500 -bell= 1 -[ParenMatch_cfgBindings] -flash-paren= -[ParenMatch_bindings] -paren-closed= - -[AutoComplete] -enable=1 -popupwait=2000 -[AutoComplete_cfgBindings] -force-open-completions= -[AutoComplete_bindings] -autocomplete= -try-open-completions= - -[CodeContext] -enable=1 -enable_shell=0 -numlines=3 -visible=0 -bgcolor=LightGray -fgcolor=Black -[CodeContext_bindings] -toggle-code-context= diff --git a/Mac/OSX/IDLE/config-main.def b/Mac/OSX/IDLE/config-main.def deleted file mode 100644 index 1cdc0c541d..0000000000 --- a/Mac/OSX/IDLE/config-main.def +++ /dev/null @@ -1,79 +0,0 @@ -# IDLE reads several config files to determine user preferences. This -# file is the default config file for general idle settings. -# -# When IDLE starts, it will look in -# the following two sets of files, in order: -# -# default configuration -# --------------------- -# config-main.def the default general config file -# config-extensions.def the default extension config file -# config-highlight.def the default highlighting config file -# config-keys.def the default keybinding config file -# -# user configuration -# ------------------- -# ~/.idlerc/config-main.cfg the user general config file -# ~/.idlerc/config-extensions.cfg the user extension config file -# ~/.idlerc/config-highlight.cfg the user highlighting config file -# ~/.idlerc/config-keys.cfg the user keybinding config file -# -# On Windows2000 and Windows XP the .idlerc directory is at -# Documents and Settings\\.idlerc -# -# On Windows98 it is at c:\.idlerc -# -# Any options the user saves through the config dialog will be saved to -# the relevant user config file. Reverting any general setting to the -# default causes that entry to be wiped from the user file and re-read -# from the default file. User highlighting themes or keybinding sets are -# retained unless specifically deleted within the config dialog. Choosing -# one of the default themes or keysets just applies the relevant settings -# from the default file. -# -# Additional help sources are listed in the [HelpFiles] section and must be -# viewable by a web browser (or the Windows Help viewer in the case of .chm -# files). These sources will be listed on the Help menu. The pattern is -# -# You can't use a semi-colon in a menu item or path. The path will be platform -# specific because of path separators, drive specs etc. -# -# It is best to use the Configuration GUI to set up additional help sources! -# Example: -#1 = My Extra Help Source;/usr/share/doc/foo/index.html -#2 = Another Help Source;/path/to/another.pdf - -[General] -editor-on-startup= 0 -autosave= 0 -print-command-posix=lpr %s -print-command-win=start /min notepad /p %s -delete-exitfunc= 1 - -[EditorWindow] -width= 80 -height= 40 -font= courier -font-size= 10 -font-bold= 0 -encoding= none - -[FormatParagraph] -paragraph=70 - -[Indent] -use-spaces= 1 -num-spaces= 4 - -[Theme] -default= 1 -name= IDLE Classic - -[Keys] -default= 1 -name= IDLE Classic Mac - -[History] -cyclic=1 - -[HelpFiles] diff --git a/Mac/OSX/IDLE/idlemain.py b/Mac/OSX/IDLE/idlemain.py deleted file mode 100644 index aa75d4cb15..0000000000 --- a/Mac/OSX/IDLE/idlemain.py +++ /dev/null @@ -1,27 +0,0 @@ -""" -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/PythonLauncher/English.lproj/Credits.rtf b/Mac/OSX/PythonLauncher/English.lproj/Credits.rtf deleted file mode 100644 index 930ca221a1..0000000000 --- a/Mac/OSX/PythonLauncher/English.lproj/Credits.rtf +++ /dev/null @@ -1,30 +0,0 @@ -{\rtf1\mac\ansicpg10000\cocoartf100 -{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\b\fs24 \cf0 Engineering: -\f1\b0 \ - Jack Jansen\ -\ - -\f0\b Human Interface Design: -\f1\b0 \ - Jack Jansen\ -\ - -\f0\b Testing: -\f1\b0 \ - Jack Jansen\ - Pythonmac-SIG@python.org\ -\ - -\f0\b Documentation: -\f1\b0 \ - Missing\ -\ - -\f0\b With special thanks to: -\f1\b0 \ - Guido, of course\ -} \ No newline at end of file diff --git a/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/classes.nib b/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/classes.nib deleted file mode 100644 index 47b40aba31..0000000000 --- a/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/classes.nib +++ /dev/null @@ -1,12 +0,0 @@ -{ - IBClasses = ( - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, - { - ACTIONS = {showPreferences = id; }; - CLASS = MyAppDelegate; - LANGUAGE = ObjC; - SUPERCLASS = NSObject; - } - ); - IBVersion = 1; -} \ No newline at end of file diff --git a/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/info.nib b/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/info.nib deleted file mode 100644 index b96759af1c..0000000000 --- a/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/info.nib +++ /dev/null @@ -1,21 +0,0 @@ - - - - - IBDocumentLocation - 99 33 356 240 0 0 800 578 - IBEditorPositions - - 29 - 82 396 318 44 0 0 800 578 - - IBFramework Version - 263.2 - IBOpenObjects - - 29 - - IBSystem Version - 5S66 - - diff --git a/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/objects.nib b/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/objects.nib deleted file mode 100644 index 532a5c828967455b622d4670969ba546ec4adf21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5016 zcma)AeQZHYeWh7kTv!ixhCsF5w!hLB=+ZyL#%Z%xRKE?FDM{VD#)=;=BnT*FG zniVs2C*#<@*p~sB&B)|>y4T_f;rrhxP159w1pD`>-4N^S>}2--{r)~JrW4X}-SDRC zGEHrS+4d~7uRce!jr;6(_T}tWWcKzFy|W{xOaul-tRX{xQA_KQA#OTol{tIaT*mh9 zdGh25%b?}Cp|Bg^7M?QFW`sXG3W!7Vy$NlQ6Nh3&Ke~r_WJf|XcQ{VQ{uO+L8YGjZ zFSd(E!=;`Up(uGNlLr_LW9GKPa) z@px5`mDm}({!%(twR+_GYg4&S8Jmq6qg}zv(v?%?(9jc$^D5se7QlsI@>{4P3W`=A z;=^Rvr%yHQ1a?+`lIv79gg0vATL>TA!XsR_ruVD@i4OW`(#y)h=I%Jx%%F;Qs!}9} z7Gh@HsWusrH0~cORhFZ|!P@KMCZw@DZlu(%^$ph!u_3JObit|G;AR2`yVTC36ozY4 znzrzr+{Elnv8`twSL*;CM!_(*(#g^i4%D9CKY(YmRU#y(BH-z)cCJ^7Uya6UEO>*0 zluEJaR`4r&)KImxd#ZV;EIjZQ?t#BGJ-GI|y9VpK)0Uci*Yx)2=xFFRk|PQnsSR!% z&{BA=(}M4u0a}%N)ov+2V_bim!#s}Ht~!y(wl=-(nWh2H2t8Ug{p4c=A-Hzx+Vrcn zn?$;e#Q*%gy;5u4 z8RNC-^TQF-h{uDLF=0eay?rWfX(zag=Xr9>%Zvtz2M zCO84rSp-W=<>3ppX^SgqcrpdQX{3WMW20B)Z>az&J{4n@ruX*yW*$#gF)C|DK}sk4 zN)_q+%GM?5LU3WeGL`FUa$LF=JnP4sJ4YF7dKC-G7@ppX5~!5%c188~#q?Mrw%gsK ziK!;1c-v=ijkrcXvyqxw+MQH9J*M#~SKxR~F{A*7Y{JSPq^>gKj6sVZ z9u{GqA08Fq#BnH`hx{Q}zSScGGFXez>$%do%?*9)+`4OXsz_3dyp52y36xCpEW7YlGM4{O`ulRPYI%YFe? zU<2q|%hHA z$#V`AdSF!#EUJ{F4+|sG>$pCi;{{YKA0>xhJyMv&mp_1l8rez-viglG$vsAWZp_|?s=6ggf2!&c|a(- z*aPQK+OP)y98g{O#4=$HmQ@0v*)K3>{fd z>Ny&|5cNUctE(OCscw@hV5W6ysb17Z@EPW5R*~kZ6uuPbF!O|0NcePw+So}Ass}hn zRo`rJGZE8qvwG5_Bwb>dQEsZq@p-66H8ZN7eFK`#;~wzz7-ntZ5Wa-eW2WrUobnK- z2+>FgPjE(2(mILoi24-DLvp$yG9KAu`oAejt&C^mK1mu)Y{NW39SNFK>asI(T}G+^KE@+EO4pr7TAslmms-Z) zV4PDK#Pl>a3JRp|IXsR%`*;<{3#u&tk@ zxIv0J<%+J-V%#LvLhNI(uP?D)Ho|Bl>P>ft5P>9h-X(yiIo5%ixs;f)hrH6+_5!s5 z`qNgNTjlj1J2FNrf3$QLV0~w@-^QO|VtWMptz0oEFTXCc^W{mwelFVtJ0%|omXmh{ z`#^qAu>EqGV1JTJ1^c6XELdKi6YNKF@bmI&zbw2Y{erzG8wLA~OuQ=Zgyfh{rUZLa z-WTksyqT1O{ZO#q%h&eE3tQy1UKtSVBNVCM|*L?>GKNIY%JSLdH@An1!m&`4ZE4RzD zf{mdhBiIS~38L`(CxV^9VN9^U;_yqs{)WR_f}O+R9l`!C&j<$cb-|9I;DBKNki&xQ zlT5I~@}6MtqV>{XrhuAa8wL&J*mAd??sK*&Gf00!u;0n+-@vb52=*5o_6v4ib_n)Qxyq2s1^csHgucl0VR>Ufwtp58 jLa^gFHtd(W^u - - - - IBDocumentLocation - 398 60 356 240 0 0 1024 746 - IBFramework Version - 291.0 - IBOpenObjects - - 5 - - IBSystem Version - 6L60 - - diff --git a/Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/objects.nib b/Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/objects.nib deleted file mode 100644 index 0473a31a21f113e527bc0c4f1aa9dd0a26653a4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4845 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 diff --git a/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/classes.nib b/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/classes.nib deleted file mode 100644 index 467aa8b261..0000000000 --- a/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/classes.nib +++ /dev/null @@ -1,26 +0,0 @@ -{ - 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 deleted file mode 100644 index bc558f7e82..0000000000 --- a/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/info.nib +++ /dev/null @@ -1,16 +0,0 @@ - - - - - IBDocumentLocation - 565 235 519 534 0 0 1280 1002 - IBFramework Version - 364.0 - IBOpenObjects - - 5 - - IBSystem Version - 7H63 - - diff --git a/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/objects.nib b/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/objects.nib deleted file mode 100644 index 3dfed33cbdb5b263001bd8bc5a1fd7ec268d704c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5882 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 diff --git a/Mac/OSX/PythonLauncher/FileSettings.h b/Mac/OSX/PythonLauncher/FileSettings.h deleted file mode 100755 index d807bae59c..0000000000 --- a/Mac/OSX/PythonLauncher/FileSettings.h +++ /dev/null @@ -1,64 +0,0 @@ -// -// FileSettings.h -// PythonLauncher -// -// Created by Jack Jansen on Sun Jul 21 2002. -// Copyright (c) 2002 __MyCompanyName__. All rights reserved. -// - -#import - -@protocol FileSettingsSource -- (NSString *) interpreter; -- (BOOL) honourhashbang; -- (BOOL) debug; -- (BOOL) verbose; -- (BOOL) inspect; -- (BOOL) optimize; -- (BOOL) nosite; -- (BOOL) tabs; -- (NSString *) others; -- (BOOL) with_terminal; -- (NSString *) scriptargs; -@end - -@interface FileSettings : NSObject -{ - NSString *interpreter; // The pathname of the interpreter to use - NSArray *interpreters; // List of known interpreters - BOOL honourhashbang; // #! line overrides interpreter - BOOL debug; // -d option: debug parser - BOOL verbose; // -v option: verbose import - BOOL inspect; // -i option: interactive mode after script - BOOL optimize; // -O option: optimize bytecode - BOOL nosite; // -S option: don't import site.py - BOOL tabs; // -t option: warn about inconsistent tabs - NSString *others; // other options - NSString *scriptargs; // script arguments (not for preferences) - BOOL with_terminal; // Run in terminal window - - FileSettings *origsource; - NSString *prefskey; -} - -+ (id)getDefaultsForFileType: (NSString *)filetype; -+ (id)getFactorySettingsForFileType: (NSString *)filetype; -+ (id)newSettingsForFileType: (NSString *)filetype; - -//- (id)init; -- (id)initForFileType: (NSString *)filetype; -- (id)initForFSDefaultFileType: (NSString *)filetype; -- (id)initForDefaultFileType: (NSString *)filetype; -//- (id)initWithFileSettings: (FileSettings *)source; - -- (void)updateFromSource: (id )source; -- (NSString *)commandLineForScript: (NSString *)script; - -//- (void)applyFactorySettingsForFileType: (NSString *)filetype; -//- (void)saveDefaults; -//- (void)applyUserDefaults: (NSString *)filetype; -- (void)applyValuesFromDict: (NSDictionary *)dict; -- (void)reset; -- (NSArray *) interpreters; - -@end diff --git a/Mac/OSX/PythonLauncher/FileSettings.m b/Mac/OSX/PythonLauncher/FileSettings.m deleted file mode 100755 index fc3937b3dc..0000000000 --- a/Mac/OSX/PythonLauncher/FileSettings.m +++ /dev/null @@ -1,298 +0,0 @@ -// -// FileSettings.m -// PythonLauncher -// -// Created by Jack Jansen on Sun Jul 21 2002. -// Copyright (c) 2002 __MyCompanyName__. All rights reserved. -// - -#import "FileSettings.h" - -@implementation FileSettings - -+ (id)getFactorySettingsForFileType: (NSString *)filetype -{ - static FileSettings *fsdefault_py, *fsdefault_pyw, *fsdefault_pyc; - FileSettings **curdefault; - - if ([filetype isEqualToString: @"Python Script"]) { - curdefault = &fsdefault_py; - } else if ([filetype isEqualToString: @"Python GUI Script"]) { - curdefault = &fsdefault_pyw; - } else if ([filetype isEqualToString: @"Python Bytecode Document"]) { - curdefault = &fsdefault_pyc; - } else { - NSLog(@"Funny File Type: %@\n", filetype); - curdefault = &fsdefault_py; - filetype = @"Python Script"; - } - if (!*curdefault) { - *curdefault = [[FileSettings new] initForFSDefaultFileType: filetype]; - } - return *curdefault; -} - -+ (id)getDefaultsForFileType: (NSString *)filetype -{ - static FileSettings *default_py, *default_pyw, *default_pyc; - FileSettings **curdefault; - - if ([filetype isEqualToString: @"Python Script"]) { - curdefault = &default_py; - } else if ([filetype isEqualToString: @"Python GUI Script"]) { - curdefault = &default_pyw; - } else if ([filetype isEqualToString: @"Python Bytecode Document"]) { - curdefault = &default_pyc; - } else { - NSLog(@"Funny File Type: %@\n", filetype); - curdefault = &default_py; - filetype = @"Python Script"; - } - if (!*curdefault) { - *curdefault = [[FileSettings new] initForDefaultFileType: filetype]; - } - return *curdefault; -} - -+ (id)newSettingsForFileType: (NSString *)filetype -{ - FileSettings *cur; - - cur = [FileSettings new]; - [cur initForFileType: filetype]; - return [cur retain]; -} - -- (id)initWithFileSettings: (FileSettings *)source -{ - self = [super init]; - if (!self) return self; - - interpreter = [source->interpreter retain]; - honourhashbang = source->honourhashbang; - debug = source->debug; - verbose = source->verbose; - inspect = source->inspect; - optimize = source->optimize; - nosite = source->nosite; - tabs = source->tabs; - others = [source->others retain]; - scriptargs = [source->scriptargs retain]; - with_terminal = source->with_terminal; - prefskey = source->prefskey; - if (prefskey) [prefskey retain]; - - return self; -} - -- (id)initForFileType: (NSString *)filetype -{ - FileSettings *defaults; - - defaults = [FileSettings getDefaultsForFileType: filetype]; - self = [self initWithFileSettings: defaults]; - origsource = [defaults retain]; - return self; -} - -//- (id)init -//{ -// self = [self initForFileType: @"Python Script"]; -// return self; -//} - -- (id)initForFSDefaultFileType: (NSString *)filetype -{ - int i; - NSString *filename; - NSDictionary *dict; - static NSDictionary *factorySettings; - - self = [super init]; - if (!self) return self; - - if (factorySettings == NULL) { - NSBundle *bdl = [NSBundle mainBundle]; - NSString *path = [ bdl pathForResource: @"factorySettings" - ofType: @"plist"]; - factorySettings = [[NSDictionary dictionaryWithContentsOfFile: - path] retain]; - if (factorySettings == NULL) { - NSLog(@"Missing %@", path); - return NULL; - } - } - dict = [factorySettings objectForKey: filetype]; - if (dict == NULL) { - NSLog(@"factorySettings.plist misses file type \"%@\"", filetype); - interpreter = [@"no default found" retain]; - return NULL; - } - [self applyValuesFromDict: dict]; - interpreters = [dict objectForKey: @"interpreter_list"]; - interpreter = NULL; - for (i=0; i < [interpreters count]; i++) { - filename = [interpreters objectAtIndex: i]; - filename = [filename stringByExpandingTildeInPath]; - if ([[NSFileManager defaultManager] fileExistsAtPath: filename]) { - interpreter = [filename retain]; - break; - } - } - if (interpreter == NULL) - interpreter = [@"no default found" retain]; - origsource = NULL; - return self; -} - -- (void)applyUserDefaults: (NSString *)filetype -{ - NSUserDefaults *defaults; - NSDictionary *dict; - - defaults = [NSUserDefaults standardUserDefaults]; - dict = [defaults dictionaryForKey: filetype]; - if (!dict) - return; - [self applyValuesFromDict: dict]; -} - -- (id)initForDefaultFileType: (NSString *)filetype -{ - FileSettings *fsdefaults; - - fsdefaults = [FileSettings getFactorySettingsForFileType: filetype]; - self = [self initWithFileSettings: fsdefaults]; - if (!self) return self; - interpreters = [fsdefaults->interpreters retain]; - scriptargs = [@"" retain]; - [self applyUserDefaults: filetype]; - prefskey = [filetype retain]; - return self; -} - -- (void)reset -{ - if (origsource) { - [self updateFromSource: origsource]; - } else { - FileSettings *fsdefaults; - fsdefaults = [FileSettings getFactorySettingsForFileType: prefskey]; - [self updateFromSource: fsdefaults]; - } -} - -- (void)updateFromSource: (id )source -{ - interpreter = [[source interpreter] retain]; - honourhashbang = [source honourhashbang]; - debug = [source debug]; - verbose = [source verbose]; - inspect = [source inspect]; - optimize = [source optimize]; - nosite = [source nosite]; - tabs = [source tabs]; - others = [[source others] retain]; - scriptargs = [[source scriptargs] retain]; - with_terminal = [source with_terminal]; - // And if this is a user defaults object we also save the - // values - if (!origsource) { - NSUserDefaults *defaults; - NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: - interpreter, @"interpreter", - [NSNumber numberWithBool: honourhashbang], @"honourhashbang", - [NSNumber numberWithBool: debug], @"debug", - [NSNumber numberWithBool: verbose], @"verbose", - [NSNumber numberWithBool: inspect], @"inspect", - [NSNumber numberWithBool: optimize], @"optimize", - [NSNumber numberWithBool: nosite], @"nosite", - [NSNumber numberWithBool: nosite], @"nosite", - others, @"others", - scriptargs, @"scriptargs", - [NSNumber numberWithBool: with_terminal], @"with_terminal", - nil]; - defaults = [NSUserDefaults standardUserDefaults]; - [defaults setObject: dict forKey: prefskey]; - } -} - -- (void)applyValuesFromDict: (NSDictionary *)dict -{ - id value; - - value = [dict objectForKey: @"interpreter"]; - if (value) interpreter = [value retain]; - value = [dict objectForKey: @"honourhashbang"]; - if (value) honourhashbang = [value boolValue]; - value = [dict objectForKey: @"debug"]; - if (value) debug = [value boolValue]; - value = [dict objectForKey: @"verbose"]; - if (value) verbose = [value boolValue]; - value = [dict objectForKey: @"inspect"]; - if (value) inspect = [value boolValue]; - value = [dict objectForKey: @"optimize"]; - if (value) optimize = [value boolValue]; - value = [dict objectForKey: @"nosite"]; - if (value) nosite = [value boolValue]; - value = [dict objectForKey: @"nosite"]; - if (value) tabs = [value boolValue]; - value = [dict objectForKey: @"others"]; - if (value) others = [value retain]; - value = [dict objectForKey: @"scriptargs"]; - if (value) scriptargs = [value retain]; - value = [dict objectForKey: @"with_terminal"]; - if (value) with_terminal = [value boolValue]; -} - -- (NSString *)commandLineForScript: (NSString *)script -{ - NSString *cur_interp = NULL; - char hashbangbuf[1024]; - FILE *fp; - char *p; - - if (honourhashbang && - (fp=fopen([script cString], "r")) && - fgets(hashbangbuf, sizeof(hashbangbuf), fp) && - strncmp(hashbangbuf, "#!", 2) == 0 && - (p=strchr(hashbangbuf, '\n'))) { - *p = '\0'; - p = hashbangbuf + 2; - while (*p == ' ') p++; - cur_interp = [NSString stringWithCString: p]; - } - if (!cur_interp) - cur_interp = interpreter; - - return [NSString stringWithFormat: - @"\"%@\"%s%s%s%s%s%s %@ \"%@\" %@ %s", - cur_interp, - debug?" -d":"", - verbose?" -v":"", - inspect?" -i":"", - optimize?" -O":"", - nosite?" -S":"", - tabs?" -t":"", - others, - script, - scriptargs, - with_terminal? "&& echo Exit status: $? && exit 1" : " &"]; -} - -- (NSArray *) interpreters { return interpreters;}; - -// FileSettingsSource protocol -- (NSString *) interpreter { return interpreter;}; -- (BOOL) honourhashbang { return honourhashbang; }; -- (BOOL) debug { return debug;}; -- (BOOL) verbose { return verbose;}; -- (BOOL) inspect { return inspect;}; -- (BOOL) optimize { return optimize;}; -- (BOOL) nosite { return nosite;}; -- (BOOL) tabs { return tabs;}; -- (NSString *) others { return others;}; -- (NSString *) scriptargs { return scriptargs;}; -- (BOOL) with_terminal { return with_terminal;}; - -@end diff --git a/Mac/OSX/PythonLauncher/Info.plist b/Mac/OSX/PythonLauncher/Info.plist deleted file mode 100644 index 1dd795f776..0000000000 --- a/Mac/OSX/PythonLauncher/Info.plist +++ /dev/null @@ -1,65 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleDocumentTypes - - - CFBundleTypeExtensions - - py - pyw - - CFBundleTypeIconFile - PythonSource.icns - CFBundleTypeName - Python Script - CFBundleTypeRole - Viewer - NSDocumentClass - MyDocument - - - CFBundleTypeExtensions - - pyc - pyo - - CFBundleTypeIconFile - PythonCompiled.icns - CFBundleTypeName - Python Bytecode Document - CFBundleTypeRole - Viewer - NSDocumentClass - MyDocument - - - CFBundleExecutable - PythonLauncher - CFBundleGetInfoString - 2.5, © 001-2006 Python Software Foundation - CFBundleIconFile - PythonLauncher.icns - CFBundleIdentifier - org.python.PythonLauncher - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Python Launcher - CFBundlePackageType - APPL - CFBundleShortVersionString - 2.5 - CFBundleSignature - PytL - CFBundleVersion - 2.5 - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - diff --git a/Mac/OSX/PythonLauncher/Makefile.in b/Mac/OSX/PythonLauncher/Makefile.in deleted file mode 100644 index e6dacb3c5e..0000000000 --- a/Mac/OSX/PythonLauncher/Makefile.in +++ /dev/null @@ -1,78 +0,0 @@ -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/MyAppDelegate.h b/Mac/OSX/PythonLauncher/MyAppDelegate.h deleted file mode 100644 index 097b54177c..0000000000 --- a/Mac/OSX/PythonLauncher/MyAppDelegate.h +++ /dev/null @@ -1,15 +0,0 @@ -/* MyAppDelegate */ - -#import - -@interface MyAppDelegate : NSObject -{ - BOOL initial_action_done; - BOOL should_terminate; -} -- (id)init; -- (IBAction)showPreferences:(id)sender; -- (BOOL)shouldShowUI; -- (BOOL)shouldTerminate; -- (void)testFileTypeBinding; -@end diff --git a/Mac/OSX/PythonLauncher/MyAppDelegate.m b/Mac/OSX/PythonLauncher/MyAppDelegate.m deleted file mode 100644 index a5ba751078..0000000000 --- a/Mac/OSX/PythonLauncher/MyAppDelegate.m +++ /dev/null @@ -1,96 +0,0 @@ -#import "MyAppDelegate.h" -#import "PreferencesWindowController.h" -#import -#import - -@implementation MyAppDelegate - -- (id)init -{ - self = [super init]; - initial_action_done = NO; - should_terminate = NO; - return self; -} - -- (IBAction)showPreferences:(id)sender -{ - [PreferencesWindowController getPreferencesWindow]; -} - -- (void)applicationDidFinishLaunching:(NSNotification *)notification -{ - // Test that the file mappings are correct - [self testFileTypeBinding]; - // If we were opened because of a file drag or doubleclick - // we've set initial_action_done in shouldShowUI - // Otherwise we open a preferences dialog. - if (!initial_action_done) { - initial_action_done = YES; - [self showPreferences: self]; - } -} - -- (BOOL)shouldShowUI -{ - // if this call comes before applicationDidFinishLaunching: we - // should terminate immedeately after starting the script. - if (!initial_action_done) - should_terminate = YES; - initial_action_done = YES; - if( GetCurrentKeyModifiers() & optionKey ) - return YES; - return NO; -} - -- (BOOL)shouldTerminate -{ - return should_terminate; -} - -- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender -{ - return NO; -} - -- (void)testFileTypeBinding -{ - NSURL *ourUrl; - OSStatus err; - FSRef appRef; - NSURL *appUrl; - static NSString *extensions[] = { @"py", @"pyw", @"pyc", NULL}; - NSString **ext_p; - int i; - - if ([[NSUserDefaults standardUserDefaults] boolForKey: @"SkipFileBindingTest"]) - return; - ourUrl = [NSURL fileURLWithPath: [[NSBundle mainBundle] bundlePath]]; - for( ext_p = extensions; *ext_p; ext_p++ ) { - err = LSGetApplicationForInfo( - kLSUnknownType, - kLSUnknownCreator, - (CFStringRef)*ext_p, - kLSRolesViewer, - &appRef, - (CFURLRef *)&appUrl); - if (err || ![appUrl isEqual: ourUrl] ) { - i = NSRunAlertPanel(@"File type binding", - @"PythonLauncher is not the default application for all " \ - @"Python script types. You should fix this with the " \ - @"Finder's \"Get Info\" command.\n\n" \ - @"See \"Changing the application that opens a file\" in " \ - @"Mac Help for details.", - @"OK", - @"Don't show this warning again", - NULL); - if ( i == 0 ) { // Don't show again - [[NSUserDefaults standardUserDefaults] - setObject:@"YES" forKey:@"SkipFileBindingTest"]; - } - return; - } - } -} - -@end diff --git a/Mac/OSX/PythonLauncher/MyDocument.h b/Mac/OSX/PythonLauncher/MyDocument.h deleted file mode 100755 index 00c1bae54e..0000000000 --- a/Mac/OSX/PythonLauncher/MyDocument.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// MyDocument.h -// PythonLauncher -// -// Created by Jack Jansen on Fri Jul 19 2002. -// Copyright (c) 2002 __MyCompanyName__. All rights reserved. -// - - -#import - -#import "FileSettings.h" - -@interface MyDocument : NSDocument -{ - IBOutlet NSTextField *interpreter; - IBOutlet NSButton *honourhashbang; - IBOutlet NSButton *debug; - IBOutlet NSButton *verbose; - IBOutlet NSButton *inspect; - IBOutlet NSButton *optimize; - IBOutlet NSButton *nosite; - IBOutlet NSButton *tabs; - IBOutlet NSTextField *others; - IBOutlet NSButton *with_terminal; - IBOutlet NSTextField *scriptargs; - IBOutlet NSTextField *commandline; - - NSString *script; - NSString *filetype; - FileSettings *settings; -} - -- (IBAction)do_run:(id)sender; -- (IBAction)do_cancel:(id)sender; -- (IBAction)do_reset:(id)sender; -- (IBAction)do_apply:(id)sender; - -- (void)controlTextDidChange:(NSNotification *)aNotification; - -@end diff --git a/Mac/OSX/PythonLauncher/MyDocument.m b/Mac/OSX/PythonLauncher/MyDocument.m deleted file mode 100755 index 5acc2dcc90..0000000000 --- a/Mac/OSX/PythonLauncher/MyDocument.m +++ /dev/null @@ -1,175 +0,0 @@ -// -// MyDocument.m -// PythonLauncher -// -// Created by Jack Jansen on Fri Jul 19 2002. -// Copyright (c) 2002 __MyCompanyName__. All rights reserved. -// - -#import "MyDocument.h" -#import "MyAppDelegate.h" -#import "doscript.h" - -@implementation MyDocument - -- (id)init -{ - self = [super init]; - if (self) { - - // Add your subclass-specific initialization here. - // If an error occurs here, send a [self dealloc] message and return nil. - script = [@".py" retain]; - filetype = [@"Python Script" retain]; - settings = NULL; - } - return self; -} - -- (NSString *)windowNibName -{ - // Override returning the nib file name of the document - // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead. - return @"MyDocument"; -} - -- (void)close -{ - NSApplication *app = [NSApplication sharedApplication]; - [super close]; - if ([[app delegate] shouldTerminate]) - [app terminate: self]; -} - -- (void)load_defaults -{ -// if (settings) [settings release]; - settings = [FileSettings newSettingsForFileType: filetype]; -} - -- (void)update_display -{ -// [[self window] setTitle: script]; - - [interpreter setStringValue: [settings interpreter]]; - [honourhashbang setState: [settings honourhashbang]]; - [debug setState: [settings debug]]; - [verbose setState: [settings verbose]]; - [inspect setState: [settings inspect]]; - [optimize setState: [settings optimize]]; - [nosite setState: [settings nosite]]; - [tabs setState: [settings tabs]]; - [others setStringValue: [settings others]]; - [scriptargs setStringValue: [settings scriptargs]]; - [with_terminal setState: [settings with_terminal]]; - - [commandline setStringValue: [settings commandLineForScript: script]]; -} - -- (void)update_settings -{ - [settings updateFromSource: self]; -} - -- (BOOL)run -{ - const char *cmdline; - int sts; - - cmdline = [[settings commandLineForScript: script] cString]; - if ([settings with_terminal]) { - sts = doscript(cmdline); - } else { - sts = system(cmdline); - } - if (sts) { - NSLog(@"Exit status: %d\n", sts); - return NO; - } - return YES; -} - -- (void)windowControllerDidLoadNib:(NSWindowController *) aController -{ - [super windowControllerDidLoadNib:aController]; - // Add any code here that need to be executed once the windowController has loaded the document's window. - [self load_defaults]; - [self update_display]; -} - -- (NSData *)dataRepresentationOfType:(NSString *)aType -{ - // Insert code here to write your document from the given data. You can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead. - return nil; -} - -- (BOOL)readFromFile:(NSString *)fileName ofType:(NSString *)type; -{ - // Insert code here to read your document from the given data. You can also choose to override -loadFileWrapperRepresentation:ofType: or -readFromFile:ofType: instead. - BOOL show_ui; - - // ask the app delegate whether we should show the UI or not. - show_ui = [[[NSApplication sharedApplication] delegate] shouldShowUI]; - [script release]; - script = [fileName retain]; - [filetype release]; - filetype = [type retain]; -// if (settings) [settings release]; - settings = [FileSettings newSettingsForFileType: filetype]; - if (show_ui) { - [self update_display]; - return YES; - } else { - [self run]; - [self close]; - return NO; - } -} - -- (IBAction)do_run:(id)sender -{ - [self update_settings]; - [self update_display]; - if ([self run]) - [self close]; -} - -- (IBAction)do_cancel:(id)sender -{ - [self close]; -} - - -- (IBAction)do_reset:(id)sender -{ - [settings reset]; - [self update_display]; -} - -- (IBAction)do_apply:(id)sender -{ - [self update_settings]; - [self update_display]; -} - -// FileSettingsSource protocol -- (NSString *) interpreter { return [interpreter stringValue];}; -- (BOOL) honourhashbang { return [honourhashbang state];}; -- (BOOL) debug { return [debug state];}; -- (BOOL) verbose { return [verbose state];}; -- (BOOL) inspect { return [inspect state];}; -- (BOOL) optimize { return [optimize state];}; -- (BOOL) nosite { return [nosite state];}; -- (BOOL) tabs { return [tabs state];}; -- (NSString *) others { return [others stringValue];}; -- (NSString *) scriptargs { return [scriptargs stringValue];}; -- (BOOL) with_terminal { return [with_terminal state];}; - -// Delegates -- (void)controlTextDidChange:(NSNotification *)aNotification -{ - [self update_settings]; - [self update_display]; -}; - -@end diff --git a/Mac/OSX/PythonLauncher/PreferenceWindow.nib/classes.nib b/Mac/OSX/PythonLauncher/PreferenceWindow.nib/classes.nib deleted file mode 100644 index 467aa8b261..0000000000 --- a/Mac/OSX/PythonLauncher/PreferenceWindow.nib/classes.nib +++ /dev/null @@ -1,26 +0,0 @@ -{ - 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/PreferenceWindow.nib/info.nib b/Mac/OSX/PythonLauncher/PreferenceWindow.nib/info.nib deleted file mode 100644 index bc558f7e82..0000000000 --- a/Mac/OSX/PythonLauncher/PreferenceWindow.nib/info.nib +++ /dev/null @@ -1,16 +0,0 @@ - - - - - IBDocumentLocation - 565 235 519 534 0 0 1280 1002 - IBFramework Version - 364.0 - IBOpenObjects - - 5 - - IBSystem Version - 7H63 - - diff --git a/Mac/OSX/PythonLauncher/PreferenceWindow.nib/objects.nib b/Mac/OSX/PythonLauncher/PreferenceWindow.nib/objects.nib deleted file mode 100644 index 3dfed33cbdb5b263001bd8bc5a1fd7ec268d704c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5882 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 diff --git a/Mac/OSX/PythonLauncher/PreferencesWindowController.h b/Mac/OSX/PythonLauncher/PreferencesWindowController.h deleted file mode 100644 index 63469968c1..0000000000 --- a/Mac/OSX/PythonLauncher/PreferencesWindowController.h +++ /dev/null @@ -1,38 +0,0 @@ -/* PreferencesWindowController */ - -#import - -#import "FileSettings.h" - -@interface PreferencesWindowController : NSWindowController -{ - IBOutlet NSPopUpButton *filetype; - IBOutlet NSComboBox *interpreter; - IBOutlet NSButton *honourhashbang; - IBOutlet NSButton *debug; - IBOutlet NSButton *verbose; - IBOutlet NSButton *inspect; - IBOutlet NSButton *optimize; - IBOutlet NSButton *nosite; - IBOutlet NSButton *tabs; - IBOutlet NSTextField *others; - IBOutlet NSButton *with_terminal; - IBOutlet NSTextField *commandline; - - FileSettings *settings; -} - -+ getPreferencesWindow; - -- (IBAction)do_reset:(id)sender; -- (IBAction)do_apply:(id)sender; -- (IBAction)do_filetype:(id)sender; - -- (void)controlTextDidChange:(NSNotification *)aNotification; - -- (unsigned int)comboBox:(NSComboBox *)aComboBox indexOfItemWithStringValue:(NSString *)aString; -- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(int)index; -- (int)numberOfItemsInComboBox:(NSComboBox *)aComboBox; - - -@end diff --git a/Mac/OSX/PythonLauncher/PreferencesWindowController.m b/Mac/OSX/PythonLauncher/PreferencesWindowController.m deleted file mode 100644 index 311c37502b..0000000000 --- a/Mac/OSX/PythonLauncher/PreferencesWindowController.m +++ /dev/null @@ -1,121 +0,0 @@ -#import "PreferencesWindowController.h" - -@implementation PreferencesWindowController - -+ getPreferencesWindow -{ - static PreferencesWindowController *_singleton; - - if (!_singleton) - _singleton = [[PreferencesWindowController alloc] init]; - [_singleton showWindow: _singleton]; - return _singleton; -} - -- (id) init -{ - self = [self initWithWindowNibName: @"PreferenceWindow"]; - return self; -} - -- (void)load_defaults -{ - NSString *title = [filetype titleOfSelectedItem]; - - settings = [FileSettings getDefaultsForFileType: title]; -} - -- (void)update_display -{ -// [[self window] setTitle: script]; - - [interpreter reloadData]; - [interpreter setStringValue: [settings interpreter]]; - [honourhashbang setState: [settings honourhashbang]]; - [debug setState: [settings debug]]; - [verbose setState: [settings verbose]]; - [inspect setState: [settings inspect]]; - [optimize setState: [settings optimize]]; - [nosite setState: [settings nosite]]; - [tabs setState: [settings tabs]]; - [others setStringValue: [settings others]]; - [with_terminal setState: [settings with_terminal]]; - // Not scriptargs, it isn't for preferences - - [commandline setStringValue: [settings commandLineForScript: @""]]; -} - -- (void) windowDidLoad -{ - [super windowDidLoad]; - [self load_defaults]; - [self update_display]; -} - -- (void)update_settings -{ - [settings updateFromSource: self]; -} - -- (IBAction)do_filetype:(id)sender -{ - [self load_defaults]; - [self update_display]; -} - -- (IBAction)do_reset:(id)sender -{ - [settings reset]; - [self update_display]; -} - -- (IBAction)do_apply:(id)sender -{ - [self update_settings]; - [self update_display]; -} - -// FileSettingsSource protocol -- (NSString *) interpreter { return [interpreter stringValue];}; -- (BOOL) honourhashbang { return [honourhashbang state]; }; -- (BOOL) debug { return [debug state];}; -- (BOOL) verbose { return [verbose state];}; -- (BOOL) inspect { return [inspect state];}; -- (BOOL) optimize { return [optimize state];}; -- (BOOL) nosite { return [nosite state];}; -- (BOOL) tabs { return [tabs state];}; -- (NSString *) others { return [others stringValue];}; -- (BOOL) with_terminal { return [with_terminal state];}; -- (NSString *) scriptargs { return @"";}; - -// Delegates -- (void)controlTextDidChange:(NSNotification *)aNotification -{ - [self update_settings]; - [self update_display]; -}; - -// NSComboBoxDataSource protocol -- (unsigned int)comboBox:(NSComboBox *)aComboBox indexOfItemWithStringValue:(NSString *)aString -{ - NSArray *interp_list = [settings interpreters]; - unsigned int rv = [interp_list indexOfObjectIdenticalTo: aString]; - return rv; -} - -- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(int)index -{ - NSArray *interp_list = [settings interpreters]; - id rv = [interp_list objectAtIndex: index]; - return rv; -} - -- (int)numberOfItemsInComboBox:(NSComboBox *)aComboBox -{ - NSArray *interp_list = [settings interpreters]; - int rv = [interp_list count]; - return rv; -} - - -@end diff --git a/Mac/OSX/PythonLauncher/doscript.h b/Mac/OSX/PythonLauncher/doscript.h deleted file mode 100644 index eef0b5641f..0000000000 --- a/Mac/OSX/PythonLauncher/doscript.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * doscript.h - * PythonLauncher - * - * Created by Jack Jansen on Wed Jul 31 2002. - * Copyright (c) 2002 __MyCompanyName__. All rights reserved. - * - */ - -#include - -extern int doscript(const char *command); \ No newline at end of file diff --git a/Mac/OSX/PythonLauncher/doscript.m b/Mac/OSX/PythonLauncher/doscript.m deleted file mode 100644 index 3e4e22393c..0000000000 --- a/Mac/OSX/PythonLauncher/doscript.m +++ /dev/null @@ -1,118 +0,0 @@ -/* - * doscript.c - * PythonLauncher - * - * Created by Jack Jansen on Wed Jul 31 2002. - * Copyright (c) 2002 __MyCompanyName__. All rights reserved. - * - */ - -#import -#import -#import "doscript.h" - -/* I assume I could pick these up from somewhere, but where... */ -#define CREATOR 'trmx' - -#define ACTIVATE_CMD 'misc' -#define ACTIVATE_SUITE 'actv' - -#define DOSCRIPT_CMD 'dosc' -#define DOSCRIPT_SUITE 'core' -#define WITHCOMMAND 'cmnd' - -/* ... and there's probably also a better way to do this... */ -#define START_TERMINAL "/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal &" - -extern int -doscript(const char *command) -{ - OSErr err; - AppleEvent theAEvent, theReply; - AEAddressDesc terminalAddress; - AEDesc commandDesc; - OSType terminalCreator = CREATOR; - - /* set up locals */ - AECreateDesc(typeNull, NULL, 0, &theAEvent); - AECreateDesc(typeNull, NULL, 0, &terminalAddress); - AECreateDesc(typeNull, NULL, 0, &theReply); - AECreateDesc(typeNull, NULL, 0, &commandDesc); - - /* create the "activate" event for Terminal */ - err = AECreateDesc(typeApplSignature, (Ptr) &terminalCreator, - sizeof(terminalCreator), &terminalAddress); - if (err != noErr) { - NSLog(@"doscript: AECreateDesc: error %d\n", err); - goto bail; - } - err = AECreateAppleEvent(ACTIVATE_SUITE, ACTIVATE_CMD, - &terminalAddress, kAutoGenerateReturnID, - kAnyTransactionID, &theAEvent); - - if (err != noErr) { - NSLog(@"doscript: AECreateAppleEvent(activate): error %d\n", err); - goto bail; - } - /* send the event */ - err = AESend(&theAEvent, &theReply, kAEWaitReply, - kAENormalPriority, kAEDefaultTimeout, NULL, NULL); - if ( err == -600 ) { - int count=10; - /* If it failed with "no such process" try to start Terminal */ - err = system(START_TERMINAL); - if ( err ) { - NSLog(@"doscript: system(): %s\n", strerror(errno)); - goto bail; - } - do { - sleep(1); - /* send the event again */ - err = AESend(&theAEvent, &theReply, kAEWaitReply, - kAENormalPriority, kAEDefaultTimeout, NULL, NULL); - } while (err == -600 && --count > 0); - if ( err == -600 ) - NSLog(@"doscript: Could not activate Terminal\n"); - } - if (err != noErr) { - NSLog(@"doscript: AESend(activate): error %d\n", err); - goto bail; - } - - /* create the "doscript with command" event for Terminal */ - err = AECreateAppleEvent(DOSCRIPT_SUITE, DOSCRIPT_CMD, - &terminalAddress, kAutoGenerateReturnID, - kAnyTransactionID, &theAEvent); - if (err != noErr) { - NSLog(@"doscript: AECreateAppleEvent(doscript): error %d\n", err); - goto bail; - } - - /* add the command to the apple event */ - err = AECreateDesc(typeChar, command, strlen(command), &commandDesc); - if (err != noErr) { - NSLog(@"doscript: AECreateDesc(command): error %d\n", err); - goto bail; - } - err = AEPutParamDesc(&theAEvent, WITHCOMMAND, &commandDesc); - if (err != noErr) { - NSLog(@"doscript: AEPutParamDesc: error %d\n", err); - goto bail; - } - - /* send the command event to Terminal.app */ - err = AESend(&theAEvent, &theReply, kAEWaitReply, - kAENormalPriority, kAEDefaultTimeout, NULL, NULL); - - if (err != noErr) { - NSLog(@"doscript: AESend(docommand): error %d\n", err); - goto bail; - } - /* clean up and leave */ -bail: - AEDisposeDesc(&commandDesc); - AEDisposeDesc(&theAEvent); - AEDisposeDesc(&terminalAddress); - AEDisposeDesc(&theReply); - return err; -} diff --git a/Mac/OSX/PythonLauncher/factorySettings.plist b/Mac/OSX/PythonLauncher/factorySettings.plist deleted file mode 100644 index 120242135c..0000000000 --- a/Mac/OSX/PythonLauncher/factorySettings.plist +++ /dev/null @@ -1,87 +0,0 @@ - - - - - Python GUI Script - - debug - - inspect - - interpreter_list - - /usr/local/bin/pythonw - /usr/bin/pythonw - /sw/bin/pythonw - - honourhashbang - - nosite - - optimize - - others - - verbose - - with_terminal - - - Python Script - - debug - - inspect - - interpreter_list - - /usr/local/bin/pythonw - /usr/local/bin/python - /usr/bin/pythonw - /usr/bin/python - /sw/bin/pythonw - /sw/bin/python - - honourhashbang - - nosite - - optimize - - others - - verbose - - with_terminal - - - Python Bytecode Document - - debug - - inspect - - interpreter_list - - /usr/local/bin/pythonw - /usr/local/bin/python - /usr/bin/pythonw - /usr/bin/python - /sw/bin/pythonw - /sw/bin/python - - honourhashbang - - nosite - - optimize - - others - - verbose - - with_terminal - - - - diff --git a/Mac/OSX/PythonLauncher/main.m b/Mac/OSX/PythonLauncher/main.m deleted file mode 100755 index 6841433f42..0000000000 --- a/Mac/OSX/PythonLauncher/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// PythonLauncher -// -// Created by Jack Jansen on Fri Jul 19 2002. -// Copyright (c) 2002 __MyCompanyName__. All rights reserved. -// - -#import -#include - -int main(int argc, const char *argv[]) -{ - char *home = getenv("HOME"); - if (home) chdir(home); - return NSApplicationMain(argc, argv); -} diff --git a/Mac/OSX/Tools/pythonw.c b/Mac/OSX/Tools/pythonw.c deleted file mode 100644 index e70a76f846..0000000000 --- a/Mac/OSX/Tools/pythonw.c +++ /dev/null @@ -1,17 +0,0 @@ -/* - * 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 -#include - -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/fixapplepython23.py b/Mac/OSX/fixapplepython23.py deleted file mode 100644 index 181181ea79..0000000000 --- a/Mac/OSX/fixapplepython23.py +++ /dev/null @@ -1,118 +0,0 @@ -"""fixapplepython23 - Fix Apple-installed Python 2.3 (on Mac OS X 10.3) - -Python 2.3 (and 2.3.X for X<5) have the problem that building an extension -for a framework installation may accidentally pick up the framework -of a newer Python, in stead of the one that was used to build the extension. - -This script modifies the Makefile (in .../lib/python2.3/config) to use -the newer method of linking extensions with "-undefined dynamic_lookup" -which fixes this problem. - -The script will first check all prerequisites, and return a zero exit -status also when nothing needs to be fixed. -""" -import sys -import os -import gestalt - -MAKEFILE='/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/config/Makefile' -CHANGES=(( - 'LDSHARED=\t$(CC) $(LDFLAGS) -bundle -framework $(PYTHONFRAMEWORK)\n', - 'LDSHARED=\t$(CC) $(LDFLAGS) -bundle -undefined dynamic_lookup\n' - ),( - 'BLDSHARED=\t$(CC) $(LDFLAGS) -bundle -framework $(PYTHONFRAMEWORK)\n', - 'BLDSHARED=\t$(CC) $(LDFLAGS) -bundle -undefined dynamic_lookup\n' - ),( - 'CC=\t\tgcc\n', - 'CC=\t\t/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/config/PantherPythonFix/run-gcc\n' - ),( - 'CXX=\t\tc++\n', - 'CXX=\t\t/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/config/PantherPythonFix/run-g++\n' -)) - -GCC_SCRIPT='/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/config/PantherPythonFix/run-gcc' -GXX_SCRIPT='/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/config/PantherPythonFix/run-g++' -SCRIPT="""#!/bin/sh -export MACOSX_DEPLOYMENT_TARGET=10.3 -exec %s "${@}" -""" - -def findline(lines, start): - """return line starting with given string or -1""" - for i in range(len(lines)): - if lines[i][:len(start)] == start: - return i - return -1 - -def fix(makefile, do_apply): - """Fix the Makefile, if required.""" - fixed = False - lines = open(makefile).readlines() - - for old, new in CHANGES: - i = findline(lines, new) - if i >= 0: - # Already fixed - continue - i = findline(lines, old) - if i < 0: - print 'fixapplepython23: Python installation not fixed (appears broken)' - print 'fixapplepython23: missing line:', old - return 2 - lines[i] = new - fixed = True - - if fixed: - if do_apply: - print 'fixapplepython23: Fix to Apple-installed Python 2.3 applied' - os.rename(makefile, makefile + '~') - open(makefile, 'w').writelines(lines) - return 0 - else: - print 'fixapplepython23: Fix to Apple-installed Python 2.3 should be applied' - return 1 - else: - print 'fixapplepython23: No fix needed, appears to have been applied before' - return 0 - -def makescript(filename, compiler): - """Create a wrapper script for a compiler""" - dirname = os.path.split(filename)[0] - if not os.access(dirname, os.X_OK): - os.mkdir(dirname, 0755) - fp = open(filename, 'w') - fp.write(SCRIPT % compiler) - fp.close() - os.chmod(filename, 0755) - print 'fixapplepython23: Created', filename - -def main(): - # Check for -n option - if len(sys.argv) > 1 and sys.argv[1] == '-n': - do_apply = False - else: - do_apply = True - # First check OS version - if gestalt.gestalt('sysv') < 0x1030: - print 'fixapplepython23: no fix needed on MacOSX < 10.3' - sys.exit(0) - # Test that a framework Python is indeed installed - if not os.path.exists(MAKEFILE): - print 'fixapplepython23: Python framework does not appear to be installed (?), nothing fixed' - sys.exit(0) - # Check that we can actually write the file - if do_apply and not os.access(MAKEFILE, os.W_OK): - print 'fixapplepython23: No write permission, please run with "sudo"' - sys.exit(2) - # Create the shell scripts - if do_apply: - if not os.access(GCC_SCRIPT, os.X_OK): - makescript(GCC_SCRIPT, "gcc") - if not os.access(GXX_SCRIPT, os.X_OK): - makescript(GXX_SCRIPT, "g++") - # Finally fix the makefile - rv = fix(MAKEFILE, do_apply) - sys.exit(rv) - -if __name__ == '__main__': - main() diff --git a/Mac/OSX/README b/Mac/README similarity index 100% rename from Mac/OSX/README rename to Mac/README diff --git a/Mac/OSXResources/app/Info.plist b/Mac/Resources/app/Info.plist similarity index 100% rename from Mac/OSXResources/app/Info.plist rename to Mac/Resources/app/Info.plist diff --git a/Mac/OSXResources/app/PkgInfo b/Mac/Resources/app/PkgInfo similarity index 100% rename from Mac/OSXResources/app/PkgInfo rename to Mac/Resources/app/PkgInfo diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/PackageManager.gif b/Mac/Resources/app/Resources/English.lproj/Documentation/PackageManager.gif similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/PackageManager.gif rename to Mac/Resources/app/Resources/English.lproj/Documentation/PackageManager.gif diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/community.html b/Mac/Resources/app/Resources/English.lproj/Documentation/community.html similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/community.html rename to Mac/Resources/app/Resources/English.lproj/Documentation/community.html diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/doc/index.html b/Mac/Resources/app/Resources/English.lproj/Documentation/doc/index.html similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/doc/index.html rename to Mac/Resources/app/Resources/English.lproj/Documentation/doc/index.html diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/finder.html b/Mac/Resources/app/Resources/English.lproj/Documentation/finder.html similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/finder.html rename to Mac/Resources/app/Resources/English.lproj/Documentation/finder.html diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/gui.html b/Mac/Resources/app/Resources/English.lproj/Documentation/gui.html similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/gui.html rename to Mac/Resources/app/Resources/English.lproj/Documentation/gui.html diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/IDE.gif b/Mac/Resources/app/Resources/English.lproj/Documentation/ide/IDE.gif similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/IDE.gif rename to Mac/Resources/app/Resources/English.lproj/Documentation/ide/IDE.gif diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/entering_in_new_window.gif b/Mac/Resources/app/Resources/English.lproj/Documentation/ide/entering_in_new_window.gif similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/entering_in_new_window.gif rename to Mac/Resources/app/Resources/English.lproj/Documentation/ide/entering_in_new_window.gif diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/hello_world.gif b/Mac/Resources/app/Resources/English.lproj/Documentation/ide/hello_world.gif similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/hello_world.gif rename to Mac/Resources/app/Resources/English.lproj/Documentation/ide/hello_world.gif diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/index.html b/Mac/Resources/app/Resources/English.lproj/Documentation/ide/index.html similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/index.html rename to Mac/Resources/app/Resources/English.lproj/Documentation/ide/index.html diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/loading_ide.gif b/Mac/Resources/app/Resources/English.lproj/Documentation/ide/loading_ide.gif similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/loading_ide.gif rename to Mac/Resources/app/Resources/English.lproj/Documentation/ide/loading_ide.gif diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/making_new_window.gif b/Mac/Resources/app/Resources/English.lproj/Documentation/ide/making_new_window.gif similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/making_new_window.gif rename to Mac/Resources/app/Resources/English.lproj/Documentation/ide/making_new_window.gif diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/new_ide_window.gif b/Mac/Resources/app/Resources/English.lproj/Documentation/ide/new_ide_window.gif similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/new_ide_window.gif rename to Mac/Resources/app/Resources/English.lproj/Documentation/ide/new_ide_window.gif diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/new_window_made.gif b/Mac/Resources/app/Resources/English.lproj/Documentation/ide/new_window_made.gif similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/new_window_made.gif rename to Mac/Resources/app/Resources/English.lproj/Documentation/ide/new_window_made.gif diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/output_window.gif b/Mac/Resources/app/Resources/English.lproj/Documentation/ide/output_window.gif similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/output_window.gif rename to Mac/Resources/app/Resources/English.lproj/Documentation/ide/output_window.gif diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/saving_edited_file.gif b/Mac/Resources/app/Resources/English.lproj/Documentation/ide/saving_edited_file.gif similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/saving_edited_file.gif rename to Mac/Resources/app/Resources/English.lproj/Documentation/ide/saving_edited_file.gif diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/simple_commands.gif b/Mac/Resources/app/Resources/English.lproj/Documentation/ide/simple_commands.gif similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/simple_commands.gif rename to Mac/Resources/app/Resources/English.lproj/Documentation/ide/simple_commands.gif diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/syntax_error.gif b/Mac/Resources/app/Resources/English.lproj/Documentation/ide/syntax_error.gif similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/ide/syntax_error.gif rename to Mac/Resources/app/Resources/English.lproj/Documentation/ide/syntax_error.gif diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/index.html b/Mac/Resources/app/Resources/English.lproj/Documentation/index.html similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/index.html rename to Mac/Resources/app/Resources/English.lproj/Documentation/index.html diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/intro.html b/Mac/Resources/app/Resources/English.lproj/Documentation/intro.html similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/intro.html rename to Mac/Resources/app/Resources/English.lproj/Documentation/intro.html diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/packman.html b/Mac/Resources/app/Resources/English.lproj/Documentation/packman.html similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/packman.html rename to Mac/Resources/app/Resources/English.lproj/Documentation/packman.html diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/python.gif b/Mac/Resources/app/Resources/English.lproj/Documentation/python.gif similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/python.gif rename to Mac/Resources/app/Resources/English.lproj/Documentation/python.gif diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/pythonsmall.gif b/Mac/Resources/app/Resources/English.lproj/Documentation/pythonsmall.gif similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/pythonsmall.gif rename to Mac/Resources/app/Resources/English.lproj/Documentation/pythonsmall.gif diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/scripting.html b/Mac/Resources/app/Resources/English.lproj/Documentation/scripting.html similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/scripting.html rename to Mac/Resources/app/Resources/English.lproj/Documentation/scripting.html diff --git a/Mac/OSXResources/app/Resources/English.lproj/Documentation/shell.html b/Mac/Resources/app/Resources/English.lproj/Documentation/shell.html similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/Documentation/shell.html rename to Mac/Resources/app/Resources/English.lproj/Documentation/shell.html diff --git a/Mac/OSXResources/app/Resources/English.lproj/InfoPlist.strings b/Mac/Resources/app/Resources/English.lproj/InfoPlist.strings similarity index 100% rename from Mac/OSXResources/app/Resources/English.lproj/InfoPlist.strings rename to Mac/Resources/app/Resources/English.lproj/InfoPlist.strings diff --git a/Mac/OSXResources/app/Resources/PythonApplet.icns b/Mac/Resources/app/Resources/PythonApplet.icns similarity index 100% rename from Mac/OSXResources/app/Resources/PythonApplet.icns rename to Mac/Resources/app/Resources/PythonApplet.icns diff --git a/Mac/OSXResources/app/Resources/PythonInterpreter.icns b/Mac/Resources/app/Resources/PythonInterpreter.icns similarity index 100% rename from Mac/OSXResources/app/Resources/PythonInterpreter.icns rename to Mac/Resources/app/Resources/PythonInterpreter.icns diff --git a/Mac/OSXResources/framework/English.lproj/InfoPlist.strings b/Mac/Resources/framework/English.lproj/InfoPlist.strings similarity index 100% rename from Mac/OSXResources/framework/English.lproj/InfoPlist.strings rename to Mac/Resources/framework/English.lproj/InfoPlist.strings diff --git a/Mac/OSXResources/framework/Info.plist b/Mac/Resources/framework/Info.plist similarity index 100% rename from Mac/OSXResources/framework/Info.plist rename to Mac/Resources/framework/Info.plist diff --git a/Mac/OSXResources/framework/version.plist b/Mac/Resources/framework/version.plist similarity index 100% rename from Mac/OSXResources/framework/version.plist rename to Mac/Resources/framework/version.plist diff --git a/Mac/OSXResources/iconsrc/IDE.psd b/Mac/Resources/iconsrc/IDE.psd similarity index 100% rename from Mac/OSXResources/iconsrc/IDE.psd rename to Mac/Resources/iconsrc/IDE.psd diff --git a/Mac/OSXResources/iconsrc/PackageManager.psd b/Mac/Resources/iconsrc/PackageManager.psd similarity index 100% rename from Mac/OSXResources/iconsrc/PackageManager.psd rename to Mac/Resources/iconsrc/PackageManager.psd diff --git a/Mac/OSXResources/iconsrc/PythonApplet.psd b/Mac/Resources/iconsrc/PythonApplet.psd similarity index 100% rename from Mac/OSXResources/iconsrc/PythonApplet.psd rename to Mac/Resources/iconsrc/PythonApplet.psd diff --git a/Mac/OSXResources/iconsrc/PythonCompiled.psd b/Mac/Resources/iconsrc/PythonCompiled.psd similarity index 100% rename from Mac/OSXResources/iconsrc/PythonCompiled.psd rename to Mac/Resources/iconsrc/PythonCompiled.psd diff --git a/Mac/OSXResources/iconsrc/PythonIcon.psd b/Mac/Resources/iconsrc/PythonIcon.psd similarity index 100% rename from Mac/OSXResources/iconsrc/PythonIcon.psd rename to Mac/Resources/iconsrc/PythonIcon.psd diff --git a/Mac/OSXResources/iconsrc/PythonSource.psd b/Mac/Resources/iconsrc/PythonSource.psd similarity index 100% rename from Mac/OSXResources/iconsrc/PythonSource.psd rename to Mac/Resources/iconsrc/PythonSource.psd diff --git a/Mac/OSXResources/iconsrc/PythonWSource.psd b/Mac/Resources/iconsrc/PythonWSource.psd similarity index 100% rename from Mac/OSXResources/iconsrc/PythonWSource.psd rename to Mac/Resources/iconsrc/PythonWSource.psd -- 2.50.1