 
 INSTALLATION ON THE WIN32 PLATFORM
 ----------------------------------

 Heres a few comments about building OpenSSL in Windows environments. Most of
 this is tested on Win32 but it may also work in Win 3.1 with some
 modification.  See the end of this file for Eric's original comments.

 Note: the default Win32 environment is to leave out any Windows NT specific
 features: (currently only BIO_s_log()) if you want NT specific features see
 the "Tweaks" section later.

 You will need perl for Win32 (which can be got from various sources) and
 Visual C++. 

 If you are compiling from a tarball or a CVS snapshot then the Win32 files
 may well be not up to date. This may mean that some "tweaking" is required to
 get it all to work. See the trouble shooting section later on for if (when?)
 it goes wrong.

 Firstly you should run Configure:

 > perl Configure VC-WIN32

 Then rebuild the Win32 Makefiles and friends:

 > ms\do_ms

 If you get errors about things not having numbers assigned then check the
 troubleshooting section: you probably wont be able to compile it as it
 stands.

 Then from the VC++ environment at a prompt do:

 > nmake -f ms\ntdll.mak

 If all is well it should compile and you will have some DLLs and executables
 in out32dll. If you want to try the tests then do:
 
 > cd out32dll
 > ..\ms\test

 Troubleshooting
 ---------------

 Since the Win32 build is only occasionally tested it may not always compile
 cleanly.  If you get an error about functions not having numbers assigned
 when you run ms\do_ms then this means the Win32 ordinal files are not up to
 date. You can do:

 > perl util\mkdef.pl crypto ssl update

 then ms\do_ms should not give a warning any more. However the numbers that
 get assigned by this technique may not match those that eventually get
 assigned in the CVS tree: so anything linked against this version of the
 library may need to be recompiled.

 If you get errors about unresolved externals then this means that either you
 didn't read the note above about functions not having numbers assigned or
 someone forgot to add a function to the header file.

 In this latter case check out the header file to see if the function is
 defined in the header file: it should be defined twice: once with ANSI
 prototypes and once without. If its missing from the non ASNI section then
 add an entry for it: check that ms\do_ms now reports missing numbers and
 update the numbers as above.

 If you get warnings in the code then the compilation will halt.

 The default Makefile for Win32 halts whenever any warnings occur. Since VC++
 has its own ideas about warnings which don't always match up to other
 environments this can happen. The best fix is to edit the file with the
 warning in and fix it. Alternatively you can turn off the halt on warnings by
 editing the CFLAG line in the Makefile and deleting the /WX option.

 You might get compilation errors. Again you will have to fix these or report
 them.

 One final comment about compiling applications linked to the OpenSSL library.
 If you don't use the multithreaded DLL runtime library (/MD option) your
 program will almost certainly crash: see the original SSLeay description
 below for more details.

 Tweaks
 ------

 There are various changes you can make to the Win32 compile environment. If
 you have the MASM assembler 'ml' then you can try the assembly language code.
 To do this remove the 'no-asm' part from do_ms.bat. You can also add 'debug'
 here to make a debugging version of the library.

 If you want to enable the NT specific features of OpenSSL (currently only the
 logging BIO) follow the instructions above but call the batch file do_nt.bat
 instead of do_ms.bat.

 You can also build a static version of the library using the Makefile
 ms\nt.mak

--------------------------------------------------------------------------------
The orignal Windows build instructions from SSLeay follow. 
Note: some of this may be out of date and no longer applicable
--------------------------------------------------------------------------------

The Microsoft World.

The good news, to build SSLeay for the Microsft World

Windows 3.1 DLL's
perl Configure VC-WIN16
nmake -f ms\w31dll.mak

Windows NT/95 DLL's
perl Configure VC-WIN32
nmake -f ms\ntdll.mak

Now the bad news
All builds were done using Microsofts Visual C++ 1.52c and [45].x.
If you are a borland person, you are probably going to have to help me
finish the stuff in util/pl/BC*pl

All builds were made under Windows NT - this means long filenames, so
you may have problems under Windows 3.1 but probably not under 95.

Because file pointers don't work in DLL's under Windows 3.1 (well at
least stdin/stdout don't and I don't like having to differentiate
between these and other file pointers), I now use the BIO file-pointer
module, which needs to be linked into your application.  You can either
use the memory buffer BIO for IO, or compile bss_file.c into your
application, it is in the apps directory and is just a copy of
crypto/buffer/bss_file.c with #define APPS_WIN16 added.
I have not yet automated the makefile to automatically copy it into 'out'
for a win 3.1 build....

All callbacks passed into SSLeay for Windows 3.1 need to be of type
_far _loadds.

I don't support building with the pascal calling convention.

The DLL and static builds are large memory model.

To build static libraries for NT/95 or win 3.1

perl util/mk1mf.pl VC-WIN32 > mf-stat.nt
perl util/mk1mf.pl VC-WIN16 > mf-stat.w31
for DLL's
perl util/mk1mf.pl dll VC-WIN32	> mf-dll.nt
perl util/mk1mf.pl dll VC-WIN16 > mf-dll.w31

Again you will notice that if you dont have perl, you cannot do this.

Now the next importaint issue.  Running Configure!
I have small assember code files for critical big number library operation
in crypto/bn/asm.  There is, asm code, object files and uuencode
object files.  They are
x86nt32.asm	- 32bit flat memory model assember - suitable Win32
x86w16.asm	- 16bit assember - used in the msdos build.
x86w32.asm	- 32bit assember, win 3.1 segments, used for win16 build.

If you feel compelled to build the 16bit maths routines in the windows 3.1
build,
perl Configure VC-W31-16
perl util/mk1mf.pl dll VC-W31-16 > mf-dll.w31

If you hate assember and don't want anything to do with it,
perl util/mk1mf.pl no-asm VC-WIN16 > mf-dll.w31
will work for any of the makefile generations.

There are more options to mk1mf.pl but these all leave the temporary
files in 'tmp' and the output files in 'out' by default.

The NT build is done for console mode.

The Windows 3.1 version of SSLeay uses quickwin, the interface is ugly
but it is better than nothing.  If you want ugly, try doing anything
that involves getting a password.  I decided to be ugly instead of
echoing characters.  For Windows 3.1 I would just sugest using the
msdos version of the ssleay application for command line work.
The QuickWin build is primarily for testing.

For both NT and Windows 3.1, I have not written the code so that
s_client, s_server can take input from the keyboard.  You can happily
start applications up in separate windows, watch them handshake, and then sit
there for-ever.  I have not had the time to get this working, and I've
been able to test things from a unix box to the NT box :-).
Try running ssleay s_server on the windows box
(with either -cert ../apps/server.pem -www)
and run ssleay s_time from another window.
This often stuffs up on Windows 3.1, but I'm not worried since this is
probably a problem with my demo applications, not the libraries.

After a build of one of the version of microsoft SSLeay,
'cd ms' and then run 'test'.  This should check everything out and
even does a trial run of generating certificates.
'test.bat' requires that perl be install, you be in the ms directory
(not the test directory, thats for unix so stay out :-) and that the
build output directory be ../out 

On a last note, you will probably get division by zero errors and
stuff after a build.  This is due to your own inability to follow
instructions :-).

The reasons for the problem is probably one of the following.

1)	You did not run Configure.  This is critical for windows 3.1 when
	using assember.  The values in crypto/bn/bn.h must match the
	ones requred for the assember code.  (remember that if you
	edit crypto/bn/bn.h by hand, it will be clobered the next time
	you run Configure by the contents of crypto/bn/bn.org).
	SSLeay version -o will list the compile options.
	For VC-WIN32 you need bn(64,32) or bn(32,32)
	For VC-W31-32/VC-WIN16 you need bn(32,32)
	For VC-W31-16 you need bn(32,16) or bn(16,16)
	For VC-MSDOS you need bn(32,16) or bn(16,16).

	The first number will be 2 times bigger than the second if
	BN_LLONG is defined in bn.h and the size of the second number
	depends on the 'bits' defined at the start of bn.h.  Have a
	look, it's all reasonably clear.
	If you want to start messing with 8 bit builds and things like
	that, build without the assember by re-generating a makefile
	via 'perl util/mk1mf.pl no-asm'.
2)	You tried to build under MS-DOS or Windows 3.1 using the /G3
	option.  Don't.  It is buggy (thats why you just got that
	error) and unless you want to work out which optimising flag
	to turn off, I'm not going to help you :-).  I also noticed
	that code often ran slower when compiled with /G3.
3)	Under NT/95, malloc goes stupid.  You are probably linking with
	the wrong library, there are problems if you mix the threaded
	and non-threaded libraries (due to the DLL being staticly
	linked with one and the applicaion using another.

Well hopefully thats most of the MS issues handled, see you in ssl-users :-).

eric 30-Aug-1996

SSLeay 0.6.5
For Windows 95/NT, add CRYPTO_malloc_init() to your program before any
calls to the SSLeay libraries.  This function will insert callbacks so that
the SSLeay libraries will use the same malloc(), free() and realloc() as
your application so 'problem 3)' mentioned above will go away.

There is now DES assember for Windows NT/95.  The file is
crypto/des/asm/win32.asm and replaces crypto/des/des_enc.c in the build.

There is also Blowfish assember for Windows NT/95.  The file is
crypto/bf/asm/win32.asm and replaces crypto/bf/bf_enc.c in the build.

eric 25-Jun-1997

