--- trunk/xvidcore/dshow/dxpatch/dx90sdk-update-gcc.txt 2004/07/26 20:30:10 1525 +++ trunk/xvidcore/dshow/dxpatch/dx90sdk-update-gcc.txt 2004/07/27 21:15:37 1526 @@ -1,33 +1,72 @@ directx 9.0 software development kit update (summer 2003) -gnu c compiler compatiblity patch +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 -to apply patch --------------- -1. install the directx sdk update to /c/DX90SDK +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 /c/DX90SDK -3. patch -p0 < dx90sdk-update-gcc.patch +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} -to build strmbase ------------------ -1. cd /c/DX90SDK/Samples/C++/Directshow/BaseClasses -2. make (this will output strmbase.lib) +III) Building your own apps +--------------------------- +These variables should be defined in your Makefiles: -to build your own apps ----------------------- -DXTREE=/c/DX90SDK +DXTREE=${SDKTREE} DXBASECLASSES=$(DXTREE)/Samples/C++/DirectShow/BaseClasses CXXFLAGS += -DRELEASE \ -I$(DXTREE)/Include \ @@ -37,3 +76,40 @@ $(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 !