summaryrefslogtreecommitdiff
path: root/Mac/Tools
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/Tools')
-rw-r--r--Mac/Tools/Doc/HelpIndexingTool/Help_Indexing_Tool_Suite.py110
-rw-r--r--Mac/Tools/Doc/HelpIndexingTool/Miscellaneous_Standards.py49
-rw-r--r--Mac/Tools/Doc/HelpIndexingTool/Required_Suite.py32
-rw-r--r--Mac/Tools/Doc/HelpIndexingTool/Standard_Suite.py343
-rw-r--r--Mac/Tools/Doc/HelpIndexingTool/__init__.py78
-rw-r--r--Mac/Tools/Doc/HelpIndexingTool/odds_and_ends.py49
-rw-r--r--Mac/Tools/Doc/README35
-rw-r--r--Mac/Tools/Doc/setup.py214
-rw-r--r--Mac/Tools/fixapplepython23.py119
-rw-r--r--Mac/Tools/pythonw.c17
10 files changed, 1046 insertions, 0 deletions
diff --git a/Mac/Tools/Doc/HelpIndexingTool/Help_Indexing_Tool_Suite.py b/Mac/Tools/Doc/HelpIndexingTool/Help_Indexing_Tool_Suite.py
new file mode 100644
index 0000000000..58d73076df
--- /dev/null
+++ b/Mac/Tools/Doc/HelpIndexingTool/Help_Indexing_Tool_Suite.py
@@ -0,0 +1,110 @@
+"""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/Tools/Doc/HelpIndexingTool/Miscellaneous_Standards.py b/Mac/Tools/Doc/HelpIndexingTool/Miscellaneous_Standards.py
new file mode 100644
index 0000000000..3cf745f986
--- /dev/null
+++ b/Mac/Tools/Doc/HelpIndexingTool/Miscellaneous_Standards.py
@@ -0,0 +1,49 @@
+"""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/Tools/Doc/HelpIndexingTool/Required_Suite.py b/Mac/Tools/Doc/HelpIndexingTool/Required_Suite.py
new file mode 100644
index 0000000000..eb9fee0017
--- /dev/null
+++ b/Mac/Tools/Doc/HelpIndexingTool/Required_Suite.py
@@ -0,0 +1,32 @@
+"""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/Tools/Doc/HelpIndexingTool/Standard_Suite.py b/Mac/Tools/Doc/HelpIndexingTool/Standard_Suite.py
new file mode 100644
index 0000000000..4f6604cfeb
--- /dev/null
+++ b/Mac/Tools/Doc/HelpIndexingTool/Standard_Suite.py
@@ -0,0 +1,343 @@
+"""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/Tools/Doc/HelpIndexingTool/__init__.py b/Mac/Tools/Doc/HelpIndexingTool/__init__.py
new file mode 100644
index 0000000000..5359df53c4
--- /dev/null
+++ b/Mac/Tools/Doc/HelpIndexingTool/__init__.py
@@ -0,0 +1,78 @@
+"""
+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/Tools/Doc/HelpIndexingTool/odds_and_ends.py b/Mac/Tools/Doc/HelpIndexingTool/odds_and_ends.py
new file mode 100644
index 0000000000..7ee46f35cc
--- /dev/null
+++ b/Mac/Tools/Doc/HelpIndexingTool/odds_and_ends.py
@@ -0,0 +1,49 @@
+"""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/Tools/Doc/README b/Mac/Tools/Doc/README
new file mode 100644
index 0000000000..4f4d53d01e
--- /dev/null
+++ b/Mac/Tools/Doc/README
@@ -0,0 +1,35 @@
+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/Tools/Doc/setup.py b/Mac/Tools/Doc/setup.py
new file mode 100644
index 0000000000..bd86a20a83
--- /dev/null
+++ b/Mac/Tools/Doc/setup.py
@@ -0,0 +1,214 @@
+# 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('<style type="text/css">.*</style>', re.DOTALL)
+ hackedIndex.write(r.sub('<META NAME="AppleTitle" CONTENT="Python Documentation">',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('<dl><dt><dd>', origFile.read()))
+ else:
+ copy_file(origPath, outPath)
+
+ def hackHtml(self):
+ self.r = re.compile('<dl><dd>')
+ 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/Tools/fixapplepython23.py b/Mac/Tools/fixapplepython23.py
new file mode 100644
index 0000000000..ef352cedb1
--- /dev/null
+++ b/Mac/Tools/fixapplepython23.py
@@ -0,0 +1,119 @@
+#!/usr/bin/python
+"""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/Tools/pythonw.c b/Mac/Tools/pythonw.c
new file mode 100644
index 0000000000..e70a76f846
--- /dev/null
+++ b/Mac/Tools/pythonw.c
@@ -0,0 +1,17 @@
+/*
+ * This wrapper program executes a python executable hidden inside an
+ * application bundle inside the Python framework. This is needed to run
+ * GUI code: some GUI API's don't work unless the program is inside an
+ * application bundle.
+ */
+#include <unistd.h>
+#include <err.h>
+
+static char Python[] = PYTHONWEXECUTABLE;
+
+int main(int argc, char **argv) {
+ argv[0] = Python;
+ execv(Python, argv);
+ err(1, "execv: %s", Python);
+ /* NOTREACHED */
+}