| |
| 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 |
| |