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 !