OpenSSL - Port To The Macintosh
===============================

Thanks to Roy Wood <roy@centricsystems.ca> initial support for MacOS (pre
X) is now provided. "Initial" means that unlike other platforms where you
get an SDK and a "swiss army" openssl application, on Macintosh you only
get one sample application which fetches a page over HTTPS(*) and dumps it
in a window. We don't even build the test applications so that we can't
guarantee that all algorithms are operational.

Required software:

- StuffIt Expander 5.5 or later, alternatively MacGzip and SUNtar;
- Scriptable Finder;
- CodeWarrior Pro 5;

Installation procedure:

- fetch the source at ftp://ftp.openssl.org/ (well, you probably already
  did, huh?)
- unpack the .tar.gz file:
	- if you have StuffIt Expander then just drag it over it;
	- otherwise uncompress it with MacGzip and then unpack with SUNtar;
- locate MacOS folder in OpenSSL source tree and open it;
- unbinhex mklinks.as.hqx and OpenSSL.mcp.hqx if present (**), do it
  "in-place", i.e. unpacked files should end-up in the very same folder;
- execute mklinks.as;
- open OpenSSL.mcp(***) and build 'GetHTTPS PPC' target(****);
- that's it for now;

(*)	URL is hardcoded into ./MacOS/GetHTTPS.src/GetHTTPS.cpp, lines 40
        to 42, change appropriately.
(**)	If you use SUNtar, then it might have already unbinhexed the files
	in question.
(***)	The project file was saved with CW Pro 5.3. If you have earlier
	version and it refuses to open it, then download
	http://www.openssl.org/~appro/OpenSSL.mcp.xml and import it
	overwriting the original OpenSSL.mcp.
(****)	Other targets are work in progress. If you feel like giving 'em a
	shot, then you should know that OpenSSL* and Lib* targets are
	supposed to be built with the GUSI, MacOS library which mimics
	BSD sockets and some other POSIX APIs. The GUSI distribution is
	expected to be found in the same directory as openssl source tree,
	i.e. in the parent directory to the one where this very file,
	namely INSTALL.MacOS. For more informations about GUSI, see
	http://www.iis.ee.ethz.ch/~neeri/macintosh/gusi-qa.html

Finally some essential comments from our generous contributor:-)

"I've gotten OpenSSL working on the Macintosh. It's probably a bit of a
hack, but it works for what I'm doing. If you don't like the way I've done
it, then feel free to change what I've done. I freely admit that I've done
some less-than-ideal things in my port, and if you don't like the way I've
done something, then feel free to change it-- I won't be offended!

... I've tweaked "bss_sock.c" a little to call routines in a "MacSocket"
library I wrote. My MacSocket library is a wrapper around OpenTransport,
handling stuff like endpoint creation, reading, writing, etc. It is not
designed as a high-performance package such as you'd use in a webserver,
but is fine for lots of other applications. MacSocket also uses some other
code libraries I've written to deal with string manipulations and error
handling. Feel free to use these things in your own code, but give me
credit and/or send me free stuff in appreciation! :-)

...

If you have any questions, feel free to email me as the following:

roy@centricsystems.ca

-Roy Wood"

