This is a port of the GL and GLU libraries to NeXT/Apple object
orientated systems. As these systems have their own window handling
systems we simply use the offscreen rendering capability of Mesa
to generate bitmaps which may then be displayed by the application
with a View as required. Example pieces of code may be found in the
OpenStep directory.

Sadly there are now a proliferation of different system that we need to
support compilation for: The original NextStep system, The OpenStep
system, the Rhapsody/Mac OS X system and also the windows implementations
of the latter two systems. This version of the code has been compiled and
tested under the following architectures:

	NextStep 3.3 
	OpenStep 4.2
	Rhapsody DR2
	WebObjects for NT 3.5
	WebObjects for NT 4.0

All tests were done with Intel processors. Feedback on other systems would,
however, be appreciated !

On UNIX systems simply type "make openstep". Under Windows systems
with WebObjects run the "win32-openstep.sh" script from within the Bourne
shell provided with the development environment. In both cases this will
build the libraries and place them into the "lib" directory. Some examples
may be found in the OpenStep directory showing how to use the code in an
actual application (MesaView) as well as some command line demos.

The CC variable may be specified on the command line for doing such things
as building FFAT libraries or using alternative compilers to the standard 'cc'
e.g.  make CC='cc -arch m68k -arch i386' openstep" will build the libraries
with both intel and motorola architectures.

-Pete French. (pete@ohm.york.ac.uk) 7/6/1999
