# -*- indented-text -*- # # This file is part of the PyObjC package. # WHAT'S NEW: Version 0.9 (May-02-2003): - This version includes numerous bugfixes and improvements. - The module AppKit.NibClassBuilder has been moved to the package PyObjCTools. - Usage of libFFI (http://sources.redhat.com/libffi) is now mandatory. The setup.py gives the impression that it isn't, but we do *not* support non-FFI builds. - We actually have some documentation, more will be added in future releases. - There are more Project Builder templates (see 'Project Templates'). - The InterfaceBuilder, PreferencePanes and ScreenSaver frameworks have been wrapped. - Management of reference counts is now completely automatic, it is no longer necessary to manually compensate for the higher reference count of objects returned by the alloc, copy and copyWithZone: class methods. - Various function and keyword arguments have been renamed for a better integration with Cocoa. A partial list is of the changed names is: objc.lookup_class -> objc.lookUpClass objc.selector arguments/attributes: is_initializer -> isInitializer is_allocator -> isAlloc donates_ref -> doesDonateReference is_required -> isRequired class_method -> isClassMethod defining_class -> definingClass returns_self -> returnsSelf argument_types -> argumentTypes return_type -> returnType objc.get_class_list -> objc.getClassList - On Python 2.2, objc.YES and objc.NO are instances of a private boolean type, on Python 2.3 these are instances of the builtin type bool. Version 0.8 (Dec-10-2002): - GNUStep support has been removed for lack of support. Volunteers needed. - Subclassing Objective-C classes from Python, including the addition of instance variables (like 'IBOutlet's) - Generic support for pass-by-reference arguments - More complete Cocoa package, including wrappers for a number of C functions, enumerated types, and globals. - More example code - Objective-C mappings and sequences can be accessed using the normal python methods for accessing mappings and sequences (e.g. subscripting works as expected) - Documentation: See the directory 'docs' - Can build standalone Cocoa applications based entirely on Python without requiring that user installs anything extra (requires 10.2). - Better packaging and wrapper construction tools (borrowed from MacPython). - An installer package. - Support for Project Builder based Cocoa-Python projects. - Unit tests. Version 2002-01-30 (January 30, 2002): - Version bumped to 0.6.1 ( __version__ is now a PyString ) - Will now build for Python 2.2 - added Cocoa package with Foundation.py and AppKit.py wrappers. - HelloWorld.py in Examples - builds with -g flag for debugging. -v option will dump log of message sends to /tmp file. - Fixed one major runtime bug: added ISCLASS test before isKindOfClass - without check, it crashes on sends to abstract classes like NSProxy. - There are still problems with Delegates and Notifications. Version 2001-03-17 (March 17, 2001): - moved to using distutils setup.py (requires small patch to distutils that has been submitted against python 2.1b1) Version 2000-11-14 (November 14, 2000): - GNU_RUNTIME is likely completely broken - Compiles on Mac OS X Server (python 2.0) - Compiles on Mac OS X (python 2.0) - Works as either a dynamically loadable module or statically built into a python executable - Requires a modified makesetup to work [patches have been sent to SourceForge.net's Python project]. - Supports NSAutoReleasepool. - Some pre-OSX stuff removed; references to old APIs, etc... (but nowhere near clean) Version 0.55, 18 August 1998: - Here again, supporting GNU_RUNTIME and GNUstep Base! On my new Linux box I can finally test the module against them: I installed the latest snapshot of gstep-core, that contains the base library too. Given a sane GNUstep env (GNUSTEP_XXX env vars), you should be able to build a static ObjC-ized interpreter by: o Adjusting Setup, commenting out NeXT definition and enabling GNU ones; o make -f Makefile.pre.in boot o make static Version 0.54, 24 March 1998: - OC_Pasteboard.[hm], OC_Stream.[mh] and ObjCStreams.m are definitively gone. - OC_PythonObject derives from NSProxy. Version 0.53, 4 January 1998: - Tons of changes, retargeting the core functionality around the OpenSTEP API. This release basically matches the previous one in terms of functionalities, but is should be closer to GNUstep. - OC_Streams and OC_Pasteboard aren't supported, I've not yet decided if they are needed anymore. - Updated LittleButtonedWindow demo. Version 0.47, 29 October 1996: - Misc/Makefile.pre.in automatically sets TARGET to `pyobjc'. - ObjC.m splitted to ObjCObject.m ObjCMethod.m ObjCPointer.m ObjCRuntime.m. - New (almost invisible) types: ObjCSequenceObject and ObjCMappingObject; this to implement sequence and mapping syntax (several mapping methods have stub implementation). - OC_Pasteboard class is gone. Its functionalities are now in a category of Pasteboard/NSPasteboard. - Better methods doc. - PyArg_ParseTuple format strings contain arguments names. - OC_Streams are mapped to ObjCStreams by pythonify_c_value and its counterpart. Version 0.46, 18 October 1996: - OC_Stream is now a subclass of NSData under Foundation. - New Objective-C class: OC_Pasteboard. Use it instead of Pasteboard/ NSPasteboard. - New Objective-C class: OC_PythonBundle. Use it instead of NXBundle/NSBundle. The ShellText demo has been upgraded to use it, and now you can run it directly from the WorkSpace. - OC_Python.[hm] aren't in the package anymore. - Setup.in directives changed again, due to OC_Python.m dropping. Version 0.45, 14 October 1996: - Double syntax: to make it easier for us to test and choose the better candidate, the only one that will be present in the final 1.0 release. Keeping both would result in a speed penality. - Revisited streams, in particular GNUstep support. Version 0.44, 9 October 1996: - Integers are now accepted too where floats or doubles are expected. - New method: ObjC.make_pointer (1) returns an ObjCPointer containing ((void *) 1). Version 0.43, 7 October 1996: - Completed ObjCStream implementation. There is now a new module, ObjCStreams which is automatically loaded by ObjC. You can access it as ObjC.streams. - Manual splitted in three parts: libPyObjC.tex with the chapter intro, libObjC.tex describing the main module, libObjCStreams.tex explains the stream facilities. Version 0.42, 4 October 1996: - You can pass initialization arguments when using the Class() syntax. You select the right initializer selector with the `init' keyword parameter. - First cut on ObjCStream objects. Thanx to Bill Bumgarner for motivations. - New demo ShellText, to test above points. Version 0.41, 2 October 1996: - Revised error messages: for arguments type mismatch they show the ObjC type expected. - When a method returns a pointer to something, it gets translated as an ObjCPointer object, not the pythonified pointed value. When a method expects a pointer argument, it accepts such an object as well. - New demo: Fred. To halt it, suspend the Python process with ^Z then kill it ;-). - Setup.in directives changed. See the new file Modules/Setup.PyObjC.in - Distribuited as a standalone package. Special thanks to Bill Bumgarner. Version 0.4, 27 September 1996: - Now handles methods returning doubles or floats. - ObjCRuntime responds to .sel_is_mapped(). Version 0.31, 26 September 1996: - It's now possible to use a different strategy to map ObjC method names to Python ones. Sooner or later we should decide the one to go, and drop the other. For details, see comments on PYTHONIFY_WITH_DOUBLE_UNDERSCORE in objc_support.h. - Manual section. - ObjC.runtime.__dict__ added. - ObjC.runtime.kind added. Version 0.3, 20 September 1996: - No user visible changes, just a little effort towards GNU_RUNTIME support. Version 0.2, 16 September 1996: - Accepts a struct.pack() string for pointer arguments, but... - ... New methods on ObjCMethod: .pack_argument and .unpack_argument: these should be used whenever an ObjC method expects a passed-by-reference argument; for example, on NeXTSTEP [View getFrame:] expects a pointer to an NXRect structure, that it will fill with the current frame of the view: in this case you should use something similar to framep = aView.getFrame__.pack_argument (0) aView.getFrame__ (framep) frame = aView.getFrame__.unpack_argument (0, framep) Version 0.1, 13 September 1996: - Correctly handle pointer arguments. - New syntax to get a class: ObjC.runtime.NameOfClass - New syntax aliasing .new(): SomeClass() - New Demo: LittleButtonedWindow, that tests points above. - What follow is the recipe to get PyObjC dinamically loadable on NeXTSTEP: * apply the patch in Misc/INSTALL.PyObjC to Python/importdl.c * modify Python/Makefile adding the switch ``-ObjC'' to the importdl.o build rule: importdl.o: importdl.c $(CC) -ObjC -c $(CFLAGS) -I$(DLINCLDIR) $(srcdir)/importdl.c * modify Modules/Setup moving the PyObjC entry suggested above AFTER ``*shared*'', and remove ``-u libNeXT_s -lNeXT_s'' from it. * run ``make'': this will update various files, in particular Modules/Makefile. * modify Modules/Makefile adding ``-u libNeXT_s -lNeXT_s'' to SYSLIBS: SYSLIBS= $(LIBM) $(LIBC) -u libNeXT_s -lNeXT_s * run ``make'' again