Move Mac/OSX/Tools one level up
This commit is contained in:
parent
e275d3d4ce
commit
8ec9f866c0
|
@ -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 = {
|
||||||
|
}
|
|
@ -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 = {
|
||||||
|
}
|
|
@ -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 = {
|
||||||
|
}
|
|
@ -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,
|
||||||
|
}
|
|
@ -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'
|
|
@ -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 = {
|
||||||
|
}
|
|
@ -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.
|
|
@ -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()
|
|
@ -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()
|
|
@ -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 */
|
||||||
|
}
|
Loading…
Reference in New Issue