directx 9.0 software development kit update (summer 2003)
gnu c compiler compatibility patch
===============================================

this patch has been tested with:
	gcc v3.2.3
	gcc v3.3.3
	gcc v3.4.1 (linux->win32 cross compiler)
	msc v6.0 + sp5 + pp

I) Applying the patch
------------------

1. Install the directx sdk update to /c/DX90SDK (to match default
   Makefile variable values) or to any other dir. From now on, the
   sdk install directory will be called ${SDKDIR}.

	dx90updatesdk.exe
	size: 190,991,976 bytes
	md5: ed328da4033e18124801265ee91f690e

2. cd ${SDKDIR}
3. patch -p0 --dry-run < /path/to/dx90sdk-update-gcc.patch
   (if all goes well, no rejects... else read the special notes)
   patch -p0 < /path/to/dx90sdk-update-gcc.patch


--
Special notes for cross compilation on GNU/Linux systems (or any
supported platform for wine):
 - You can install the DX SDK using the wine win32 API emulation
   layer. The unzipping stage of the install will succeed, it's
   all that is required to continue. So don't panic if the install
   program breaks/crashes after the self unzip did succeed.
 - Then depending on your cvs program, you may require to unix'ify
   the endlines of all sources in the SDK before applying the patch.
   That can be required CVS uses to expand/replace endlines according
   to the host platform type, so it's very likely that if you do
   extract the xvidcore sources from a windows box, this step isn't
   mandatory, but if you're using a unix box (even cygwin), you may
   be obliged to proceed with:
   find ${SDKDIR} -name "*.cpp" -exec dos2unix {} \;
   find ${SDKDIR} -name "*.h" -exec dos2unix {} \;

II) building strmbase.lib
-------------------------

1. cd ${SDKDIR}/Samples/C++/Directshow/BaseClasses
2. make
   (this should output strmbase.lib)

--
Special notes for people cross compiling, or people who installed
the SDK elsewhere than /c/DX90SDK:
 - you can overide Makefile defaults in the make command line,
   just use something like this command line (adapt according to
   your build environment):
   make \
       CXX=/opt/mingw32-cross/bin/i386-mingw32-g++ \
       RANLIB=/opt/mingw32-cross/bin/i386-mingw32-ranlib \
       DXTREE=${SDKDIR}


III) Building your own apps
---------------------------

These variables should be defined in your Makefiles:

DXTREE=${SDKTREE}
DXBASECLASSES=$(DXTREE)/Samples/C++/DirectShow/BaseClasses
CXXFLAGS += -DRELEASE \
        -I$(DXTREE)/Include \
        -I$(DXBASECLASSES) \
        -include $(DXTREE)/mingw_dshow_port.h
LDFLAGS += -L$(DXTREE)/Lib -lstrmiids \
        $(DXBASECLASSES)/strmbase.lib \
	-lole32 -loleaut32 -lstdc++

So it's now time to build the XviD Dshow filter (the xvidcore
source dir is supposed to be ${xvidcore}):

1. cd ${xvidcore}/dshow
2. make
  (should output a xvid.ax file in a =build dir by default)

--
Notes for people using a cross compiler, or people who did install
the SDK elsewhere than /c/DX90SDK:
 - you can overide Makefile variables from the make command line,
   a fairly complete command could look like this, adapt to your
   build environment:
   make \
        CC=/opt/mingw32-cross/bin/i386-mingw32-gcc  \
        CXX=/opt/mingw32-cross/bin/i386-mingw32-g++ \
        WINDRES=/opt/mingw32-cross/bin/i386-mingw32-windres \
        DXTREE=/mnt/data/windows/dx9sdk

NB: with some win32-api headers from mingw.org, you may suffer
    multiple QACONTAINERFLAGS definitions. In that case you need
    to manually edit ${mingw_install}/include/ocidl.h; Search for
    QACONTAINERFLAGS. It should look like this:

      enum tagQACONTAINERFLAGS
      {
       ...
      } QACONTAINERFLAGS;

    Then change this to that:

      typedef enum tagQACONTAINERFLAGS
      {
       ...
      } QACONTAINERFLAGS;

    Noticed the additional typedef ? that's the point !
