The GNU Objective C compiler
============================

Introduction
------------

This is a port of the GNU Objective C compiler (version 2.7.2) for the 
Objective C programming language to the Acorn range of ARM based machines,
running under RISC OS. As such, this package is covered by the FSF General
Public License (see the files docs.COPYING and docs.COPYINGLIB for details).

This port is  1996 Nick Burrett

As with GNU programs, THERE IS NO WARRANTY OF ANY SORT

This compiler requires a minimum 2800Kb of free RAM for compilations.

Thanks go to various people for the help and assistance that they have
given me during the creation of this port. These are:

Andre' Schaefer for general Objective-C information and the first Obj-C
test case.


Files
-----

This is a binary distribution only and consists of the following files:

  bin.cc1obj        Objective-C compiler
  docs.ObjectiveC   This documentation
  gcc.o.libobjc     Objective-C runtime library
  gcc.objc.h...     Objective-C runtime library header files.

The compiler sources (about 27Mb) can be obtained from the sites listed at
the end of docs.!Intro.

Installation
------------

Before attempting to use GNU C, it should be noted that this distribution
will require the GCC front end files stored in the archive gccmain.zip.
If you do not have a copy of this, it can be retrieved from
  ftp://micros.hensa.ac.uk/micros/arch/riscos/b/b013/gccmain.zip
and relevant mirrors.

GNU Obj-C 2.7.2 also requires UnixLib 3.7a or later, but not UnixLib 4.0.
GNU Obj-C will not work with UnixLib 3.6e or earlier.


Compiling Objective-C source
----------------------------

Objective-C source files are kept in the 'm' directory. Header files are
stored, as for C, in the 'h' directory.

Simply typing:
  gcc -c m.test

will compile the Objective C file, test, into an AOF file and store it
in the 'o' directory.

For compiling and linking, it is necessary to add the command -lobjc:
  gcc m.test -o test -lobjc

will compile and link the file 'test' and include the Obj-C runtime library
gcc:o.libobjc (remember that LD searches first for libraries prepended by
the name 'lib').

In all cases, the runtime library libobjc must be included in all link
operations.

All GNU compilers require the library gcc:o.libgcc to operate. So separate
compile and link operations must include this.


Compiling and running the example programs
------------------------------------------

The following example programs are to be found in the directory !gcc.files.
For each program, there is a list of the necessary command lines for how
to compile, link and run the program.


simple
^^^^^^
A simple Objective-C program.

Source: 	m.simple
Compile using: 	gcc m.simple -o simple
Run using: 	simple

If everything has been successful, you should receive an answer of 7.

SeaApp
^^^^^^
A demonstration of Objective-C classes.

Source:		m.SeaApp, m.Fishie, h.Fishie

Compile using:	gcc -c m.SeaApp
		gcc -c m.Fishie

Link using:
  drlink -o SeaApp o.SeaApp o.Fishie gcc:o.libgcc gcc:o.libobjc unix:o.unixlib

Run using:	SeaApp


Predefines
----------

In addition to the ones defined by the GCC front end, GNU Objective C also
supplies '__OBJC__'.


Known problems
--------------

If you find a bug then please read the file docs.bugs for what to do if you
have found a bug.

Here is a list of all problems that I know of:

Statements of the form #include "dir.file.h" do not work correctly - Unixlib
does not convert this to dir.h.file. Use "dir/file.h" instead or "dir.h.file".


Known Restrictions
------------------

Non-local gotos are not implemented for functions within functions. This is
being worked on, when I have the time.


Further Reading
---------------

Have a look at the official introductory reading by NeXT.
  http://www.next.com/Pubs/Documents/OPENSTEP/ObjectiveC/objctoc.htm


Contacting me
-------------

I can be contacted by e-mail at: nickb@digibank.demon.co.uk

However, if there is no response from that address I can be contacted
through Simon Callan: gcc@callan.demon.co.uk.
