 
 INSTALLATION FOR THE WINDOWS CE PLATFORM
 ----------------------------------------

 Building OpenSSL for Windows CE requires the following external tools:

  * Microsoft eMbedded Visual C++ 3.0
  * wcecompat compatibility library (www.essemer.com.au)
  * Optionally ceutils for running automated tests (www.essemer.com.au)

 You also need Perl for Win32.  You will need ActiveState Perl, available
 from http://www.activestate.com/ActivePerl.

 Windows CE support in OpenSSL relies on wcecompat and therefore it's
 appropriate to check http://www.essemer.com.au/windowsce/ for updates in
 case of compilation problems. As for the moment of this writing version
 1.1 is available and actually required for WCE 4.2 and newer platforms.
 All Windows CE specific issues should be directed to www.essemer.com.au.

 The C Runtime Library implementation for Windows CE that is included with
 Microsoft eMbedded Visual C++ 3.0 is incomplete and in some places
 incorrect.  wcecompat plugs the holes and tries to bring the Windows CE
 CRT to a level that is more compatible with ANSI C.  wcecompat goes further
 and provides low-level IO and stream IO support for stdin/stdout/stderr
 (which Windows CE does not provide).  This IO functionality is not needed
 by the OpenSSL library itself but is used for the tests and openssl.exe.
 More information is available at www.essemer.com.au.

 Building
 --------

 Setup the eMbedded Visual C++ environment.  There are batch files for doing
 this installed with eVC++.  For an ARM processor, for example, execute:

 > "C:\Program Files\Microsoft eMbedded Tools\EVC\WCE300\BIN\WCEARM.BAT"

 Next indicate where wcecompat is located:

 > set WCECOMPAT=C:\wcecompat

 Next you should run Configure:

 > perl Configure VC-CE

 Next you need to build the Makefiles:

 > ms\do_ms

 If you get errors about things not having numbers assigned then check the
 troubleshooting section in INSTALL.W32: you probably won't be able to compile
 it as it stands.

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

 - to build static libraries:

   > nmake -f ms\ce.mak

 - or to build DLLs:

   > nmake -f ms\cedll.mak

 If all is well it should compile and you will have some static libraries and
 executables in out32, or some DLLs and executables in out32dll.  If you want
 to try the tests then make sure the ceutils are in the path and do:
 
 > cd out32
 > ..\ms\testce

 This will copy each of the test programs to the Windows CE device and execute
 them, displaying the output of the tests on this computer.  The output should
 look similar to the output produced by running the tests for a regular Windows
 build.

