changeset 4454:e136420ca82b

OpenOffice update: compile up to cppunit.
author Jan Nieuwenhuizen <janneke@gnu.org>
date Wed, 22 Oct 2008 21:47:11 +0200
parents 0d051a7fc96c
children 8c55e9064d87
files gub/specs/openoffice.py patches/openoffice-config_office-cross.patch patches/openoffice-external-mingwheaders.patch patches/openoffice-sal-mingw-c.patch patches/openoffice-sal-mingw.patch patches/openoffice-solenv-cross.patch sourcefiles/excpt.h sourcefiles/sehandler.h
diffstat 8 files changed, 474 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/gub/specs/openoffice.py	Wed Oct 22 21:46:25 2008 +0200
+++ b/gub/specs/openoffice.py	Wed Oct 22 21:47:11 2008 +0200
@@ -1,4 +1,6 @@
+import operator
 import os
+import re
 #
 from gub import context
 from gub import misc
@@ -12,16 +14,19 @@
    5069:Module 'external' delivered successfully. 3 files copied, 27 files unchanged
    6288:Module 'libwpd' delivered successfully. 12 files copied, 0 files unchanged
    6397:Module 'xml2cmp' delivered successfully. 3 files copied, 2 files unchanged
+   Module 'sal' delivered successfully. 109 files copied, 1 files unchanged
+Module 'vos' delivered successfully. 30 files copied, 1 files unchanged
 '''
 
 class Openoffice (targetbuild.TargetBuild):
 #    source = 'svn://gsvn.gnome.org/svn/ooo-build&branch=trunk&revision=14327'
     source = 'svn://svn.gnome.org/svn/ooo-build&branch=trunk'
     patches = ['openoffice-srcdir-build.patch']
-    upstream_patches = ['openoffice-config_office-cross.patch', 'openoffice-config_office-gnu-make.patch', 'openoffice-config_office-mingw.patch', 'openoffice-solenv-cross.patch', 'openoffice-solenv.patch', 'openoffice-sal-cross.patch', 'openoffice-soltools-cross.patch', 'openoffice-soltools-mingw.patch']
-#    upstream_patches = ['openoffice-config_office-cross.patch', 'openoffice-config_office-mingw.patch']
+#    upstream_patches = ['openoffice-config_office-cross.patch', 'openoffice-config_office-gnu-make.patch', 'openoffice-config_office-mingw.patch', 'openoffice-solenv-cross.patch', 'openoffice-solenv.patch', 'openoffice-sal-cross.patch', 'openoffice-soltools-cross.patch', 'openoffice-soltools-mingw.patch', 'openoffice-sal-mingw.patch', 'openoffice-external-mingwheaders.patch']
+    upstream_patches = ['openoffice-config_office-cross.patch', 'openoffice-config_office-gnu-make.patch', 'openoffice-solenv-cross.patch', 'openoffice-solenv.patch', 'openoffice-sal-cross.patch', 'openoffice-soltools-cross.patch']
     def get_build_dependencies (self):
-        return ['boost-devel', 'curl', 'db-devel', 'expat', 'fontconfig-devel', 'libjpeg-devel', 'libpng-devel', 'python', 'saxon-java', 'xerces-c', 'zlib-devel']
+        # redland-devel
+        return ['boost-devel', 'curl', 'cppunit-devel', 'db-devel', 'expat-devel', 'fontconfig-devel', 'libjpeg-devel', 'libpng-devel', 'python', 'saxon-java', 'xerces-c', 'zlib-devel']
     def stages (self):
         return misc.list_insert_before (targetbuild.TargetBuild.stages (self),
                                         'compile',
@@ -103,6 +108,7 @@
 --disable-vba
 --disable-vba 
 --disable-xrender-link
+--disable-atl
 
 --enable-fontconfig
 --enable-verbose
@@ -153,24 +159,22 @@
         self.system ('''
 cd %(builddir)s/build/%(cvs_tag)s && patch -p%(patch_strip_component)s < %(patchdir)s/%(name)s
 ''', locals ())
-    def patch_upstream (self):
-        base = '%(builddir)s/build/%(cvs_tag)s'
+    def upstream_patched_files (self):
+        def files_in_patch (patch):
+            string = file (self.expand ('%(patchdir)s/%(patch)s', locals ())).read ()
+            def file_name (chunk):
+                if chunk.find ('\n+++ ') >= 0:
+                    return re.search ('\n[+]{3}\s+([.]/)?([^\s]+)', chunk).group (2)
+                return ''
+            return map (file_name, ('\n' + string).split ('\n---')[1:])
+        files_with_patches = map (files_in_patch, self.upstream_patches)
+        return reduce (operator.__add__, files_with_patches)
+    def upstream_patch_reset (self):
         upstream_dir = self.upstream_dir ()
-        for file in (
-            'config_office/acinclude.m4',
-            'config_office/configure.in',
-            'config_office/bootstrap.1',
-            'config_office/set_soenv.in',
-            'solenv/inc/startup/startup.mk',
-            'solenv/inc/wntgcci6.mk',
-            'solenv/inc/unitools.mk',
-            'solenv/bin/build.pl',
-            'solenv/bin/deliver.pl',
-            'soltools/util/makefile.pmk',
-            'soltools/mkdepend/collectdircontent.cxx',
-            'sal/rtl/source/makefile.mk',
-            ):
-            self.system ('cp -p %(upstream_dir)s/%(file)s.pristine %(upstream_dir)s/%(file)s || cp -p %(upstream_dir)s/%(file)s %(upstream_dir)s/%(file)s.pristine' % locals ())
+        for f in self.upstream_patched_files ():
+            self.system ('cp -p %(upstream_dir)s/%(f)s.pristine %(upstream_dir)s/%(f)s || cp -p %(upstream_dir)s/%(f)s %(upstream_dir)s/%(f)s.pristine' % locals ())
+    def patch_upstream (self):
+        self.upstream_patch_reset ()
         map (self.apply_upstream_patch, self.__class__.upstream_patches)
 
         # FIXME: neutralize silly GNU make check
@@ -184,9 +188,6 @@
         # http://www.mail-archive.com/autoconf@gnu.org/msg02857.html
         self.system ('sed -i -e "s@AC_CHECK_FILE(@AC_CHECK_FILE_CROSS(@" %(upstream_dir)s/config_office/configure.in')
 
-        # avoid juggling of names for windows-nt
-        self.system ('sed -i -e "s@WINNT@WNT@" %(upstream_dir)s/config_office/configure.in')
-
         # TODO: ASM is handled in individual solenv/inc/*mk
         self.system (misc.join_lines ('''sed -i.guborig
 -e 's@\<ar\>@$(AR)@g'
@@ -194,9 +195,20 @@
 -e 's@\<ld\>\([^-]\|$\)@$(LD)\\1@g'
 -e 's@\<nm\>@$(NM)@g'
 -e 's@\<ranlib\>@$(RANLIB)@g'
+-e 's@\<windres\>@$(WINDRES)@g'
 %(upstream_dir)s/solenv/inc/*mk'''))
 
         self.system ('chmod +x %(upstream_dir)s/solenv/bin/build.pl %(upstream_dir)s/solenv/bin/deliver.pl')
+
+        self.system ('sed -i -e "s@[ \t]all@ i@g" %(upstream_dir)s/redland/prj/build.lst')
+
+        # java go away
+        self.system ('sed -i -e "s@[ \t]all@ i@g" %(upstream_dir)s/sandbox/prj/build.lst')
+
+
+        # OO.o's included cppunit has build problems, but there's no --with-system-cppunit
+        # self.system ('sed -i -e "s@[ \t]\(all\|n\)[ \t]@ i @g" %(upstream_dir)s/cppunit/prj/build.lst')
+
     def makeflags (self):
         return misc.join_lines ('''
 CC_FOR_BUILD=cc
@@ -205,13 +217,49 @@
 C_INCLUDE_PATH=
 LIBRARY_PATH=
 EXECPOST=
+SOLAR_JAVA=TRUE
 ''')
 ##main configure barfs
 ##CPPFLAGS=
                 
 class Openoffice__mingw (Openoffice):
+    Openoffice.upstream_patches += ['openoffice-config_office-mingw.patch', 'openoffice-soltools-mingw.patch', 'openoffice-sal-mingw.patch', 'openoffice-external-mingwheaders.patch']
+    # external/mingwheaders seems a badly misguided effort.  It
+    # patches header files and is thus strictly tied to a gcc version;
+    # that can never build.  How can patching header files ever work,
+    # when not patching the corresponding libraries?  Some patches
+    # remove #ifdef checks that can be enabled by setting a #define.
+    # Other patches only affect OO.o client code already inside
+    # __MINGW32__ defines.  Why not fix OO.o makefiles and client
+    # code?
+    Openoffice.upstream_patches += ['openoffice-sal-mingw-c.patch']
+    def get_build_dependencies (self):
+        return Openoffice.get_build_dependencies (self) + ['libunicows-devel']
     def configure_command (self):
         return (Openoffice.configure_command (self)
                 .replace ('--with-system-xrender-headers', '')
                 + ' --disable-xrender-link'
                 + ' --with-distro=Win32')
+    def patch_upstream (self):
+        Openoffice.patch_upstream (self)
+        # avoid juggling of names for windows-nt
+        self.system ('sed -i -e "s@WINNT@WNT@" %(upstream_dir)s/config_office/configure.in')
+
+        self.system ('chmod +x %(upstream_dir)s/solenv/bin/addsym-mingw.sh')
+        
+        self.system ('cp -f %(upstream_dir)s/sal/osl/w32/MAKEFILE.MK %(upstream_dir)s/sal/osl/w32/makefile.mk')
+
+        self.dump ('''\
+#! /bin/sh
+set -e
+in=$(eval echo '$'$#)
+dir=$(dirname $in)
+/usr/bin/wrc "$@"
+if test "$dir" != "."; then
+    mv $(basename $in .rc).res $dir
+fi
+''',
+             '%(upstream_dir)s/solenv/bin/wrc',
+                   permissions=0755)
+
+        self.system ('cp -pv %(sourcefiledir)s/sehandler.h %(upstream_dir)s/solver/300/wntgcci.pro/inc')
--- a/patches/openoffice-config_office-cross.patch	Wed Oct 22 21:46:25 2008 +0200
+++ b/patches/openoffice-config_office-cross.patch	Wed Oct 22 21:47:11 2008 +0200
@@ -34,7 +34,7 @@
  dnl ===================================================================
  dnl Set the ENABLE_CRASHDUMP variable.
  dnl ===================================================================
-@@ -1649,6 +1651,26 @@ if test "$_os" = "OSF1"; then
+@@ -1649,6 +1651,27 @@ if test "$_os" = "OSF1"; then
     fi
  fi
  
@@ -44,6 +44,7 @@
 +AC_CHECK_TOOL([LD], [ld], [:])
 +AC_CHECK_TOOL([NM], [nm], [:])
 +AC_CHECK_TOOL([RANLIB], [ranlib], [:])
++AC_CHECK_TOOL([WINDRES], [windres], [:])
 +
 +BUILD_OS=$_os
 +TARGET_OS=$t_os
@@ -192,7 +193,7 @@
                          $ps.'$SOLARENV'.$BIN;
  
     if ($platform =~ m/solaris/) {
-@@ -1847,6 +1847,19 @@ ToFile( "SOLAR_JAVA",        $SOLAR_JAVA
+@@ -1847,6 +1847,20 @@ ToFile( "SOLAR_JAVA",        $SOLAR_JAVA
  ToFile( "BIG_SVX",           $BIG_SVX,           "e" );
  ToFile( "COM",               $COM,               "e" );
  ToFile( "COMPATH",           $COMPATH,           "e" );
@@ -206,8 +207,9 @@
 +ToFile( "AS",                "@AS@",             "e" );
 +ToFile( "DLLTOOL",           "@DLLTOOL@",        "e" );
 +ToFile( "LD",                "@LD@",             "e" );
++ToFile( "NM",                "@NM@",             "e" );
 +ToFile( "RANLIB",            "@RANLIB@",         "e" );
-+ToFile( "NM",                "@NM@",             "e" );
++ToFile( "WINDRES",           "@WINDRES@",         "e" );
 +ToFile( "TOOLS_DIR",         "@TOOLS_DIR@",      "e" );
  ToFile( "CPU",               $CPU,               "e" );
  ToFile( "CPUNAME",           $CPUNAME,           "e" );
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openoffice-external-mingwheaders.patch	Wed Oct 22 21:47:11 2008 +0200
@@ -0,0 +1,71 @@
+--- external/mingwheaders/makefile.mk.pristine	2008-06-06 18:46:47.000000000 +0200
++++ external/mingwheaders/makefile.mk	2008-10-22 09:10:58.000000000 +0200
+@@ -35,17 +35,26 @@
+ 
+ .INCLUDE :  settings.mk
+ 
+-.IF "$(OS)$(COM)" == "WNTGCC"
++.IF "$(OS)$(COM)" == "WNTGCC" && "$(CROSS_COMPILING)" != "yes"
++# patches fail with i686-mingw-gcc built from 4.1.1
++# How this is supposed to work, patching mingw header files
++# without patching the mingw libraries?  Why not fix OO.o
++# client code to work with latest mingw?
+ 
+ # Cygwin and MinGW use different directories for the W32API headers
+ .IF "$(USE_MINGW)" == "cygwin"
+ MINGW_INCLUDE_DIR=$/usr$/include/mingw/include/
+ MINGW_W32API_INCLUDE_DIR=$/usr$/include/w32api/
+ MINGW_W32API_LIB_DIR=$/usr$/include/w32api/
+-.ELSE
++.ELIF "$(CROSS_COMPILING)" == "no"
+ MINGW_INCLUDE_DIR=$(COMPATH)$/include/
+ MINGW_W32API_INCLUDE_DIR=$(COMPATH)$/include/
+ MINGW_W32API_LIB_DIR=$(COMPATH)$/lib/
++.ELSE # "$(CROSS_COMPILING)" == "yes"
++MINGW_INCLUDE_DIR=$(COMPATH)/../../include/
++MINGW_W32API_INCLUDE_DIR=$(COMPATH)/../../include/
++MINGW_W32API_LIB_DIR=$(COMPATH)/../../lib/
++PSDK_HOME=$(COMPATH)/../..
+ .ENDIF
+ 
+ SYS_INCLUDE_DIR=$(MINGW_INCLUDE_DIR)$/sys/
+@@ -184,29 +189,33 @@
+ 	$(COPY) $(FILES_TO_COPY_FROM_MINGW:^$(MINGW_INCLUDE_DIR)) $(MISC)$/mingw$/include
+ 	$(COPY) $(FILES_TO_COPY_FROM_W32API:^$(MINGW_W32API_INCLUDE_DIR)) $(MISC)$/mingw$/include
+ 	$(COPY) $(FILES_TO_COPY_FROM_SYS:^$(SYS_INCLUDE_DIR)) $(MISC)$/mingw$/include$/sys
+-	$(COPY) $(FILES_TO_COPY_FROM_PSDK:^$(PSDK_INCLUDE_DIR)) $(MISC)$/mingw$/include
++	$(COPY) $(FILES_TO_COPY_FROM_PSDK:^$(PSDK_INCLUDE_DIR)) $(MISC)$/mingw$/include || :
++.IF "$(DIRECTXSDK_HOME)" != ""
+ 	$(COPY) $(FILES_TO_COPY_FROM_DIRECTXSDK:^$(DIRECTXSDK_INCLUDE_DIR)) $(MISC)$/mingw$/include
++.ENDIF # "$(DIRECTXSDK_HOME)" != ""
+ 	$(TOUCH) $(MISC)$/mingwheader_copy
+ 
+ .IF "$(DISABLE_ATL)"==""
+ $(MINGWHEADER_ATL_COPY_TARGET):
+ 	$(MKDIRHIER) $(MISC)$/mingw$/include/atl
+ 	$(COPY) $(FILES_TO_COPY_FROM_ATL:^$(ATL_INCLUDE_DIR)) $(MISC)$/mingw$/include$/atl
+- 	$(TOUCH) $(MINGWHEADER_ATL_COPY_TARGET)
++	$(TOUCH) $(MINGWHEADER_ATL_COPY_TARGET)
+ .ENDIF
+ 
+ $(LB)$/libmsvcrt.a:
+ .IF "$(USE_MINGW)" == "cygwin"
+-	$(WRAPCMD) nm -g --defined-only $(COMPATH)$/lib/mingw/libmsvcrt.a > $(MISC)$/msvcrt.nm
++	$(WRAPCMD) $(NM) -g --defined-only $(COMPATH)$/lib/mingw/libmsvcrt.a > $(MISC)$/msvcrt.nm
++.ELIF "$(CROSS_COMPILING)" == "no"
++	$(WRAPCMD) $(NM) -g --defined-only $(COMPATH)$/lib/libmsvcrt.a > $(MISC)$/msvcrt.nm
+ .ELSE
+-	$(WRAPCMD) nm -g --defined-only $(COMPATH)$/lib/libmsvcrt.a > $(MISC)$/msvcrt.nm
+-.ENDIF
++	$(WRAPCMD) $(NM) -g --defined-only $(COMPATH)/../../lib/libmsvcrt.a > $(MISC)$/msvcrt.nm
++.ENDIF # "$(CROSS_COMPILING)" == "yes"
+ 	echo EXPORTS > $(MISC)$/msvcrt.def
+ 	sed -ne 's/.* T _//p' $(MISC)$/msvcrt.nm | sort >> $(MISC)$/msvcrt.def
+ 	-sed -ne 's/.* I __imp__//p' $(MISC)$/msvcrt.nm | sort | diff - $(MISC)$/msvcrt.def | \
+ 		sed -ne 's/^< \(.*\)$/\1 DATA/p' > $(MISC)$/msvcrtdata.def
+ 	cat $(MISC)$/msvcrtdata.def >> $(MISC)$/msvcrt.def
+-	dlltool --dllname msvcrt.dll --input-def=$(MISC)$/msvcrt.def --kill-at --output-lib=$(LB)$/libmsvcrt.a
++	$(DLLTOOL) --dllname msvcrt.dll --input-def=$(MISC)$/msvcrt.def --kill-at --output-lib=$(LB)$/libmsvcrt.a
+ 
+ clean:
+ 	-$(RM) $(MISC)$/mingw$/include$/*.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openoffice-sal-mingw-c.patch	Wed Oct 22 21:47:11 2008 +0200
@@ -0,0 +1,64 @@
+--- sal/osl/w32/conditn.c.~1.7.46.1.~	2008-08-21 17:30:55.000000000 +0200
++++ sal/osl/w32/conditn.c	2008-10-21 20:51:52.000000000 +0200
+@@ -108,7 +108,11 @@
+ 	{
+ 		/* Only wake up if a SendMessage call to the threads message loop is detected */
+ 
++#ifndef __MINGW32__
+ 		switch( MsgWaitForMultipleObjects( 1, &(HANDLE)Condition, FALSE, timeout, QS_SENDMESSAGE ) )
++#else /* __MINGW32__ */
++		switch( MsgWaitForMultipleObjects( 1, (HANDLE)Condition, FALSE, timeout, QS_SENDMESSAGE ) )
++#endif /* __MINGW32__ */
+ 		{
+ 			case WAIT_OBJECT_0 + 1:
+ 				{
+--- sal/osl/w32/dllentry.c.~1.34.~	2008-04-10 13:17:16.000000000 +0200
++++ sal/osl/w32/dllentry.c	2008-10-21 20:56:07.000000000 +0200
+@@ -216,7 +216,9 @@
+         
+                 //We disable floating point exceptions. This is the usual state at program startup
+                 //but on Windows 98 and ME this is not always the case.
++#ifndef __MINGW32__
+                 _control87(_MCW_EM, _MCW_EM);
++#endif
+ #ifdef __MINGW32__
+ 		atexit(do_cleanup);
+ }
+--- sal/systools/win32/uwinapi/ResolveUnicows.cpp.~1.4.~	2008-06-06 19:02:43.000000000 +0200
++++ sal/systools/win32/uwinapi/ResolveUnicows.cpp	2008-10-21 21:53:19.000000000 +0200
+@@ -227,8 +226,8 @@
+ DEFINE_UNICOWS_THUNK( kernel32, BOOL, WINAPI, GetFileAttributesExW, (LPCWSTR,GET_FILEEX_INFO_LEVELS,PVOID) )
+ DEFINE_UNICOWS_THUNK( kernel32, DWORD, WINAPI, GetFileAttributesW, (LPCWSTR) )
+ DEFINE_UNICOWS_THUNK( comdlg32, short, WINAPI, GetFileTitleW, (LPCWSTR,LPWSTR,WORD) )
+-DEFINE_UNICOWS_THUNK( version, DWORD, WINAPI, GetFileVersionInfoSizeW, (LPWSTR,PDWORD) )
+-DEFINE_UNICOWS_THUNK( version, BOOL, WINAPI, GetFileVersionInfoW, (LPWSTR,DWORD,DWORD,PVOID) )
++DEFINE_UNICOWS_THUNK( version, DWORD, WINAPI, GetFileVersionInfoSizeW, (const WCHAR*,DWORD*) )
++DEFINE_UNICOWS_THUNK( version, BOOL, WINAPI, GetFileVersionInfoW, (const WCHAR*,DWORD,DWORD,PVOID) )
+ DEFINE_UNICOWS_THUNK( kernel32, DWORD, WINAPI, GetFullPathNameW, (LPCWSTR,DWORD,LPWSTR,LPWSTR*) )
+ DEFINE_UNICOWS_THUNK( gdi32, DWORD, WINAPI, GetGlyphOutlineW, (HDC,UINT,UINT,LPGLYPHMETRICS,DWORD,PVOID,const MAT2*) )
+ DEFINE_UNICOWS_THUNK( gdi32, BOOL, WINAPI, GetICMProfileW, (HDC,LPDWORD,LPWSTR) )
+@@ -456,7 +455,7 @@
+ DEFINE_UNICOWS_THUNK( gdi32, BOOL, WINAPI, TextOutW, (HDC,int,int,LPCWSTR,int) )
+ DEFINE_UNICOWS_THUNK( user32, int, WINAPI, TranslateAcceleratorW, (HWND,HACCEL,LPMSG) )
+ DEFINE_UNICOWS_THUNK( user32, BOOL, WINAPI, UnregisterClassW, (LPCWSTR,HINSTANCE) )
+-DEFINE_UNICOWS_THUNK( gdi32, BOOL, WINAPI, UpdateICMRegKeyW, (DWORD,LPWSTR,LPWSTR,UINT) )
++DEFINE_UNICOWS_THUNK( gdi32, BOOL, WINAPI, UpdateICMRegKeyW, (DWORD,DWORD,LPWSTR,UINT) )
+ DEFINE_UNICOWS_THUNK( kernel32, BOOL, WINAPI, UpdateResourceW, (HANDLE,LPCWSTR,LPCWSTR,WORD,PVOID,DWORD) )
+ DEFINE_UNICOWS_THUNK( version, DWORD, WINAPI, VerFindFileW, (DWORD,LPWSTR,LPWSTR,LPWSTR,LPWSTR,PUINT,LPWSTR,PUINT) )
+ DEFINE_UNICOWS_THUNK( version, DWORD, WINAPI, VerInstallFileW, (DWORD,LPWSTR,LPWSTR,LPWSTR,LPWSTR,LPWSTR,LPWSTR,PUINT) )
+--- onlinecheck.cxx	10 apr 2008 14:11:15 +0200	1.8
++++ sal/systools/win32/onlineupdate/onlinecheck.cxx	22 okt 2008 10:56:53 +0200	
+@@ -45,8 +45,11 @@
+ #endif
+ #include <tchar.h>
+ #ifdef __MINGW32__
+-#include <excpt.h>
+-#endif
++#include <sehandler.h>
++// not implemented in mingw, only in wine...
++//BOOL WINAPI InternetGetConnectedStateEx(LPDWORD,LPTSTR,DWORD,DWORD);
++#define InternetGetConnectedStateEx(a,b,c,d) InternetGetConnectedState(a,c)
++#endif /* __MINGW32__ */
+ 
+ #define elementsof(a) (sizeof(a)/sizeof((a)[0]))
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openoffice-sal-mingw.patch	Wed Oct 22 21:47:11 2008 +0200
@@ -0,0 +1,67 @@
+--- sal/osl/w32/signal.c.~1.12.~	2008-04-10 13:22:35.000000000 +0200
++++ sal/osl/w32/signal.c	2008-10-21 20:53:05.000000000 +0200
+@@ -37,8 +37,8 @@
+ #include <osl/signal.h>
+ #ifndef __MINGW32__
+ #include <DbgHelp.h>
+-#endif
+ #include <ErrorRep.h>
++#endif /* __MINGW32__ */
+ #include <systools/win32/uwinapi.h>
+ 
+ typedef struct _oslSignalHandlerImpl
+--- sal/systools/win32/uwinapi/GetLongPathNameW.cpp.~1.5.~	2008-04-10 14:18:12.000000000 +0200
++++ sal/systools/win32/uwinapi/GetLongPathNameW.cpp	2008-10-21 21:30:26.000000000 +0200
+@@ -29,6 +29,13 @@
+  ************************************************************************/
+ 
+ #define UNICODE
++
++#ifdef __MINGW32__
++#undef _WIN32_WINNT
++#define _WIN32_WINNT 0x0500
++#include <windows.h>
++#endif /* __MINGW32__ */
++
+ #include "macros.h"
+ 
+ EXTERN_C DWORD WINAPI GetLongPathNameW_NT( LPCWSTR lpShortPath, LPWSTR lpLongPath, DWORD cchBuffer )
+--- sal/systools/win32/uwinapi/GetLongPathNameA.cpp.~1.5.~	2008-04-10 14:17:56.000000000 +0200
++++ sal/systools/win32/uwinapi/GetLongPathNameA.cpp	2008-10-21 21:29:56.000000000 +0200
+@@ -28,7 +28,13 @@
+  *
+  ************************************************************************/
+ 
++#ifdef __MINGW32__
++#undef _WIN32_WINNT
++#define _WIN32_WINNT 0x0500
++#include <windows.h>
++#endif /* __MINGW32__ */
++
+ #include "macros.h"
+ 
+ IMPLEMENT_THUNK( kernel32, WINDOWS, DWORD, WINAPI, GetLongPathNameA, ( LPCTSTR lpShortPath, LPTSTR lpLongPath, DWORD cchBuffer ) )
+-#include "GetLongPathName.cpp"
+\ Geen regeleindeteken (LF) aan einde van bestand
++#include "GetLongPathName.cpp"
+--- sal/systools/win32/uwinapi/ResolveUnicows.cpp.~1.4.~	2008-06-06 19:02:43.000000000 +0200
++++ sal/systools/win32/uwinapi/ResolveUnicows.cpp	2008-10-21 21:53:19.000000000 +0200
+@@ -1,7 +1,6 @@
+ #ifdef __MINGW32__
+ #define _GDI32_
+ #include "macros.h"
+-#include <multimon.h>
+ extern "C" {
+ extern HMODULE hModuleUnicowsDLL;
+ }
+--- sal/systools/win32/uwinapi/makefile.mk.~1.17.~	2008-04-10 14:26:19.000000000 +0200
++++ sal/systools/win32/uwinapi/makefile.mk	2008-10-21 23:43:31.000000000 +0200
+@@ -160,7 +160,7 @@
+ ALL: ALLTAR $(LB)$/libuwinapi.a
+ 
+ $(LB)$/libuwinapi.a: $(MISC)$/uwinapi.def
+-	dlltool --dllname uwinapi.dll --input-def=$(MISC)$/uwinapi.def --kill-at --output-lib=$(LB)$/libuwinapi.a
++	$(DLLTOOL) --dllname uwinapi.dll --input-def=$(MISC)$/uwinapi.def --kill-at --output-lib=$(LB)$/libuwinapi.a
+ .ENDIF
+ 
+ .INCLUDE : target.mk
--- a/patches/openoffice-solenv-cross.patch	Wed Oct 22 21:46:25 2008 +0200
+++ b/patches/openoffice-solenv-cross.patch	Wed Oct 22 21:47:11 2008 +0200
@@ -67,7 +67,7 @@
      return 1 if (($ENV{GUI} eq 'UNX') && ($Platform eq 'u'));
      return 1 if (($ENV{GUI} eq 'OS2') && ($Platform eq 'p'));
 -    return 1 if (($ENV{GUI} eq 'WNT') &&
-+    return 1 if (($ENV{BUILD_OS} eq 'WNT') &&
++    return 1 if ((($ENV{TARGET_OS} eq 'WNT') || ($ENV{TARGET_OS} eq 'MinGW')) &&
                   (($Platform eq 'w') || ($Platform eq 'n')));
      return 0;
  };
@@ -186,7 +186,7 @@
  ###
  CFLAGSCC=-pipe $(ARCH_FLAGS)
  CFLAGSCXX=-pipe $(ARCH_FLAGS)
-@@ -108,17 +111,35 @@ STATIC= -static
+@@ -108,17 +111,37 @@ STATIC= -static
  DYNAMIC= -dynamic
  
  LINK*=$(CC)
@@ -204,7 +204,9 @@
 +.ENDIF #"$(CYGLIB)" != ""
 +.IF "$(CROSS_COMPILING)" == "no"
 +LINKFLAGS += -nostdlib
-+.ENDIF # "$(CROSS_COMPILING)" == "no"
++.ELSE # "$(CROSS_COMPILING)" == "yes"
++LINKFLAGS += -L$(SOLARBINDIR)
++.ENDIF # "$(CROSS_COMPILING)" == "yes"
  .IF "$(USE_MINGW)"=="cygwin"
  MINGWLIBDIR=$(COMPATH)$/lib$/mingw
  .ELSE
@@ -228,6 +230,64 @@
  LINKFLAGSTACK=
  LINKFLAGSPROF=
  LINKFLAGSDEBUG=-g
+@@ -150,7 +171,11 @@ STDSHLCUIMT+=-lmingw32 -lmoldname -lming
+ MAPSYM=tmapsym
+ MAPSYMFLAGS=
+ 
++.IF "$(CROSS_COMPILING)" == "no"
+ RC=rc
++.ELSE # "$(CROSS_COMPILING)" == "yes"
++RC=wrc --nostdinc -I $(COMPATH)/../../include -DCROSS_COMPILING=1
++.ENDIF # "$(CROSS_COMPILING)" == "yes"
+ RCFLAGS=-D__MINGW32__ -DWIN32 -D_WIN32_IE=0x400 -fo$@ $(RCFILES)
+ RCLINK=
+ RCLINKFLAGS=
+@@ -168,12 +193,20 @@ RCSETVERSION=
+ DLLPOSTFIX=gi
+ PCHPOST=.gch
+ 
++.IF "$(CROSS_COMPILING)" == "no"
++LINK_PSDK_LIB=$(PSDK_HOME)/lib/
++PSDK_DOT_LIB=.lib
++.ELSE # "$(CROSS_COMPILING)" == "yes"
++LINK_PSDK_LIB=-l
++PSDK_DOT_LIB=
++.ENDIF # "$(CROSS_COMPILING)" == "yes"
++
+ ADVAPI32LIB=-ladvapi32
+ SHELL32LIB=-lshell32
+ GDI32LIB=-lgdi32
+ OLE32LIB=-lole32
+ OLEAUT32LIB=-loleaut32
+-UUIDLIB=$(PSDK_HOME)$/lib$/uuid.lib
++UUIDLIB=$(LINK_PSDK_LIB)uuid$(PSDK_DOT_LIB)
+ WINSPOOLLIB=-lwinspool
+ IMM32LIB=-limm32
+ PSPLIB=-lpsp
+@@ -187,14 +220,14 @@ USER32LIB=-luser32
+ LIBCMT=-lmsvcrt
+ COMDLG32LIB=-lcomdlg32
+ COMCTL32LIB=-lcomctl32
+-CRYPT32LIB=$(PSDK_HOME)$/lib$/crypt32.lib
+-GDIPLUSLIB=$(PSDK_HOME)$/lib$/gdiplus.lib
+-DBGHELPLIB=$(PSDK_HOME)$/lib$/dbghelp.lib
+-MSILIB=$(PSDK_HOME)$/lib$/msi.lib
+-DDRAWLIB=$(DIRECTXSDK_LIB)/ddraw.lib
+-SHLWAPILIB=$(PSDK_HOME)$/lib$/shlwapi.lib
+-URLMONLIB=$(PSDK_HOME)$/lib$/urlmon.lib
+-UNICOWSLIB=$(PSDK_HOME)$/lib$/unicows.lib
++CRYPT32LIB=$(LINK_PSDK_LIB)crypt32$(PSDK_DOT_LIB)
++GDIPLUSLIB=$(LINK_PSDK_LIB)gdiplus$(PSDK_DOT_LIB)
++DBGHELPLIB=$(LINK_PSDK_LIB)dbghelp$(PSDK_DOT_LIB)
++MSILIB=$(LINK_PSDK_LIB)msi$(PSDK_DOT_LIB)
++DDRAWLIB=$(DIRECTXSDK_LIB)/ddraw$(PSDK_DOT_LIB)
++SHLWAPILIB=$(LINK_PSDK_LIB)shlwapi$(PSDK_DOT_LIB)
++URLMONLIB=$(LINK_PSDK_LIB)urlmon$(PSDK_DOT_LIB)
++UNICOWSLIB=$(LINK_PSDK_LIB)unicows$(PSDK_DOT_LIB)
+ WININETLIB=-lwininet
+ OLDNAMESLIB=-lmoldname
+-MSIMG32LIB=$(PSDK_HOME)$/lib$/msimg32.lib
++MSIMG32LIB=$(LINK_PSDK_LIB)msimg32$(PSDK_DOT_LIB)
 --- solenv/inc/unitools.mk.pristine	2008-10-21 11:31:04.000000000 +0200
 +++ solenv/inc/unitools.mk	2008-10-21 13:54:42.000000000 +0200
 @@ -39,7 +39,7 @@ XSLTPROC*=xsltproc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sourcefiles/excpt.h	Wed Oct 22 21:47:11 2008 +0200
@@ -0,0 +1,8 @@
+#ifndef EXCPT_H
+#define EXCPT_H
+
+/* FIXME: external/mingwheaders effort compatibility */
+#include <mingw-excpt.h>
+#include <sehandler.h>
+
+#endif /* EXCPT_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sourcefiles/sehandler.h	Wed Oct 22 21:47:11 2008 +0200
@@ -0,0 +1,125 @@
+#ifndef SE_HANDLER_H
+#define SE_HANDLER_H
+
+#include <excpt.h>
+#include <setjmp.h>
+
+WINBASEAPI
+VOID
+WINAPI
+RtlUnwind (
+    IN PVOID TargetFrame OPTIONAL,
+    IN PVOID TargetIp OPTIONAL,
+    IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL,
+    IN PVOID ReturnValue
+    );
+
+// What library is this supposed to be defined in?
+#define RtlUnwind(a,b,c,d)
+
+class __SEHandler
+{
+ public:
+  __SEHandler() {}
+  ~__SEHandler() {}
+  typedef int (*PF)(void *, LPEXCEPTION_POINTERS);
+  typedef void (*PH)(void *, LPEXCEPTION_POINTERS);
+  typedef void (*PN)(void *);
+  void Set(jmp_buf jb, void *pdata=NULL, PF pfilter=NULL, PH phandlerbody=NULL, PN pfinal=NULL)
+    {
+      __builtin_memcpy(m_jmpbuf, jb, sizeof(jmp_buf));
+      m_pData=pdata;
+      switch (reinterpret_cast<int>(pfilter))
+	{
+	default:
+	  m_filter=pfilter;
+	  break;
+	case EXCEPTION_CONTINUE_EXECUTION:
+	  m_filter=DefaultFilterContinueExecution;
+	  break;
+	case EXCEPTION_EXECUTE_HANDLER:
+	  m_filter=DefaultFilterExecuteHandler;
+	  break;
+	case EXCEPTION_CONTINUE_SEARCH:
+	  m_filter=DefaultFilterContinueSearch;
+	  break;
+	}
+      if (phandlerbody)
+	m_handlerbody=phandlerbody;
+      else
+	m_handlerbody=DefaultHandler;
+      if (pfinal)
+	m_final=pfinal;
+      else
+	m_final=DefaultFinal;
+      m_ER.pHandlerClass = this;
+      m_ER.hp = handler;
+      asm("movl %%fs:0, %%eax\n\t"
+	  "movl %%eax, %0": : "m" (m_ER.prev): "%eax" );
+      asm("movl %0, %%eax\n\t"
+	  "movl %%eax, %%fs:0": : "r" (&m_ER): "%eax" );
+    }
+  void Reset()
+    {
+      m_final(m_pData);
+      asm("movl %0, %%eax \n\t"
+	  "movl %%eax, %%fs:0"
+	  : : "m" (m_ER.prev): "%eax");
+    }
+ private:
+  __SEHandler(const __SEHandler&);
+  __SEHandler& operator=(const __SEHandler&);
+  struct _ER {
+    _ER* prev;
+    PEXCEPTION_HANDLER hp;
+    __SEHandler *pHandlerClass;
+  };
+  static EXCEPTION_DISPOSITION handler(
+		     struct _EXCEPTION_RECORD *pExceptionRecord,
+		     void * EstablisherFrame,
+		     struct _CONTEXT *ContextRecord,
+		     void * /*DispatcherContext*/)
+    {
+      __SEHandler* pThis = reinterpret_cast< _ER * >(EstablisherFrame)->pHandlerClass;
+      if ( pExceptionRecord->ExceptionFlags & EH_UNWINDING )
+	{
+	  pThis->m_final(pThis->m_pData);
+	  return ExceptionContinueSearch;
+	}
+      EXCEPTION_POINTERS ep={pExceptionRecord, ContextRecord};
+      switch ( pThis->m_filter(pThis->m_pData, &ep) )
+	{
+	case EXCEPTION_EXECUTE_HANDLER:
+	  RtlUnwind(EstablisherFrame, &&__set_label, pExceptionRecord, 0);
+__set_label:
+	  pThis->m_handlerbody(pThis->m_pData, &ep);
+	  ContextRecord->Ebp = pThis->m_jmpbuf[0];
+	  ContextRecord->Eip = pThis->m_jmpbuf[1];
+	  ContextRecord->Esp = pThis->m_jmpbuf[2];
+	  return ExceptionContinueExecution;
+	case EXCEPTION_CONTINUE_SEARCH:
+	  return ExceptionContinueSearch;
+	case EXCEPTION_CONTINUE_EXECUTION:
+	  return ExceptionContinueExecution;
+	}
+	  return ExceptionContinueExecution;
+    }
+  static int DefaultFilterContinueSearch(void *, LPEXCEPTION_POINTERS) { return EXCEPTION_CONTINUE_SEARCH; }
+  static int DefaultFilterContinueExecution(void *, LPEXCEPTION_POINTERS) { return EXCEPTION_CONTINUE_EXECUTION; }
+  static int DefaultFilterExecuteHandler(void *, LPEXCEPTION_POINTERS) { return EXCEPTION_EXECUTE_HANDLER; }
+  static void DefaultHandler(void *, LPEXCEPTION_POINTERS) {}
+  static void DefaultFinal(void *) {}
+  typedef int (*handler_p)(
+			   struct _EXCEPTION_RECORD *ExceptionRecord,
+			   void * EstablisherFrame,
+			   struct _CONTEXT *ContextRecord,
+			   void * DispatcherContext);
+  _ER m_ER;
+  void *m_pData;
+  PN m_final;
+  PH m_handlerbody;
+  PF m_filter;
+  jmp_buf m_jmpbuf;
+};
+
+#endif /* SE_HANDLER_H */