
Using SDL 1.3 under Windows with the OpenWatcom compiler

====================================================

Prerequisites
-------------

I have done the port under Windows XP Professional with SP2 installed.
Windows 2000 should also be working. I'm not so sure about ancient Windows NT,
since only DirectX 3 is available there. Building should be possible,
but running the compiled applications will probalbly fail with
SDL_VIDEODRIVER=directx. The windib driver should work, though.

To compile and use the SDL with Open Watcom you will need the following:
- Open Watcom compiler. I used version 1.8. The environment variables
  PATH, WATCOM and INCLUDE need to be set appropriately - please consult
  the OpenWatcom documentation and instructions given during the
  installation of the compiler.
  My setup looks like this in owvars.bat:
    set WATCOM=C:\dev\ow18
    set INCLUDE=%WATCOM%\h;%WATCOM%\h\nt
    set PATH=%PATH%;%WATCOM%\binnt;%WATCOM%\binw
- A recent DirectX SDK. The library needs D3d9.h so at leat the
  directx 9 sdk is to be used. I used DirectX 10 SDK from August 2009
  taken directly from the microsoft site.
- The SDL 1.3 sources from Subversion
- The file Watcom-Win32.zip (now available in Subversion)


Building the Library
--------------------

1) In the SDL base directory extract the archive Watcom-Win32.zip. This
   creates a subdirectory named 'watcom'.
2) The makefile expects the environment variable DXDIR to be set to the
   base directory of a DirectX SDK. I have tried the August 2009
   DirectX SDK from Microsoft
   You can also edit the makefile directly and hard code your path to
   the SDK on your system.
   I have this in my setup:
     set DXDIR=..\dx10
3) Enter the watcom directory and run
     wmake sdl
4) All tests from the test directory are working and can be built by
   running
     wmake tests

Notes:

 The makefile offers some options to tweak the way the library is built.
 You have at your disposal the option to build a static (default)
 library, or a DLL (with tgt=dll). You can also choose whether to build
 a Release (default) or a Debug version (with build=debug) of the tests
 and library. Please consult the usage comment at the top of the
 makefile for usage instructions.

 If you specify a test target (i.e. 'wmake tests' for all tests, or
 selected targets like 'wmake testgl testvidinfo testoverlay2'), the
 tests are always freshly compiled and linked. This is done to
 minimise hassle when switching between library versions (static vs.
 DLL), because they require subtly different options.
 Also, the test executables are put directly into the test directory,
 so they can find their data files. The clean target of the makefile
 removes the test executables and the SDL.dll file from the test
 directory.

 To use the library in your own projects with Open Watcom, you can use
 the way the tests are built as base of your own build environment.

 The library can also be built with the stack calling convention of the
 compiler (-6s instead of -6r).

Test applications
-----------------
$FixME: which test works ? which one compiles ?

I've tried to make all tests work. The following table gives an overview
of the current status.

 Testname        Status
~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
checkkeys       +
graywin         +
loopwave        +
testalpha       +
testbitmap      +
testdyngl       +
testerror       +
testfile        +
testgamma       +
testgl          +
testhread       +
testiconv       - (all failed)
testkeys        +
testlock        +
testoverlay     + (needs 'set SDL_VIDEODRIVER=directx')
testoverlay2    + (needs 'set SDL_VIDEODRIVER=directx')
testpalette     +
testplatform    +
testsem         +
testsprite      +
testtimer       +
testver         +
testvidinfo     +
testwin         ? (fading doesn't seem right)
testwm          +
torturethread   +
testcdrom       +
testjoystick    not tested
threadwin       +
testcursor      +


TODO
----

There is room for further improvement:
- Test joystick functionality.
- Investigate fading issue in 'testwin' test.
- Fix the UTF-8 support.
- Adapt the makefile/object file list to support more target systems
- Use "#pragma aux" syntax for the CPU info functions.


Questions and Comments
----------------------

Please direct any questions or comments to me:

        ow_sdl [at] digitalfantasy [dot] it

The original porting to the open watcom compiler was made by
Marc Peter <mailto:macpete@gmx.de>

   Happy Coding!

   Daniele Forghieri

