[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Patches for OpenOffice.org and gcc-3.1



Hi OpenOffice.org users....

Im working for the switch to using gcc3.1 fo building OpenOffice.org.
This was nessassary for building OpenOffice.org on PPC with gcc3 and
above. 

Kevin B Hendriks and me ported the assambly code in the bridges module
for using gcc3.1 with OpenOffice.org.

gcc3.0.x was not quite ready for using with OpenOffice.org, so Kevin 
wanted not to port the assambly with gcc-3.0.x.

So .. I think it is done an time to check. I finished the patchset for
using gcc3.1. The new bridges code will follow ... 

I want to leave the alternative with building with gcc3.0.x for woody,
but for PPC I will drop the gcc2.95 support.

This means, OpenOffice.org compiled with gcc-3.1 will break the
compatibility for using with woody, because there were some ABI-changes.

I had attached the patches I wanted include to OpenOffice.org. I have to
see, perhaps, some of the other patches can be dropped, but I'm not
sure.

If you have some thoughts of it, please mail.

	Regards
		Jan

-- 
  .''`.    Jan-Hendrik Palic     |
 : :' : ** Debian GNU/ Linux **  |   ** OpenOffice.org **         ,.. ,..
 `. `'   http://www.debian.org   | http://www.openoffice.org    ,: ..`   `
   `-  jan.palic@linux-debian.de |                             '  `  `
--- oo_641c_src/tools/source/datetime/ttime.cxx.gcc3	Mon Jun 11 19:17:46 2001
+++ oo_641c_src/tools/source/datetime/ttime.cxx	Thu Feb 21 19:44:52 2002
@@ -73,7 +73,7 @@
 #include <dos.h>
 #elif defined UNX
 #include <limits.h>
-#ifdef IRIX
+#if defined( IRIX ) || defined( UNX )
 #include <unistd.h>
 #endif
 #include <sys/times.h>
@@ -493,7 +493,13 @@
 
 	if ( !nImplTicksPerSecond )
 	{
+#if defined( CLK_TCK )
 		nImplTicksPerSecond = CLK_TCK;
+#elif defined( _SC_CLK_TCK )
+		nImplTicksPerSecond = sysconf(_SC_CLK_TCK);
+#else
+#error "I don't know how to get CLK_TCK, you lose."
+#endif
 		dImplTicksPerSecond = nImplTicksPerSecond;
 		dImplTicksULONGMAX	= (double)(ULONG)ULONG_MAX;
 	}
--- solenv/inc/settings.mk.orig	Fri Mar  8 04:23:21 2002
+++ solenv/inc/settings.mk	Tue May 21 14:55:11 2002
@@ -986,6 +986,7 @@
 .ENDIF			# "$(L10N_framework)"!=""
 
 SCPDEFS+=-U$(COMID) -DCOMID=$(COMID) -DCOMNAME=$(COMNAME) -D_$(COMID)
+SCPDEFS+=-DCCNUMVER=$(CCNUMVER)
 
 UNOIDLDEFS+=-DSUPD=$(UPD) -DUPD=$(UPD)
 
--- solenv/bin/getcompver.awk.orig	Tue May 21 14:28:43 2002
+++ solenv/bin/getcompver.awk	Tue May 21 14:37:29 2002
@@ -80,6 +80,9 @@
 /^[0-9]*[.][0-9]*[.][0-9]*$/ {
     CCversion = $0
 }
+/^[0-9]*[.][0-9]**$/ {
+    CCversion = $0 ".0"
+}
 END {
     if ( num == "true" ) {
         tokencount = split (CCversion,vertoken,".")
--- oo_1.0_src/cppu/inc/cppu/macros.hxx~	Mon Oct 29 16:25:29 2001
+++ oo_1.0_src/cppu/inc/cppu/macros.hxx	Tue May 28 14:02:10 2002
@@ -76,7 +76,7 @@
     the struct inherits from a base struct the first member is no double or [unsigned] long long.
     @internal
 */
-#if defined(__GNUC__) && defined(LINUX) && defined(INTEL) && (__GNUC__ == 3)
+#if defined(__GNUC__) && defined(LINUX) && (defined(INTEL) || defined(POWERPC)) && (__GNUC__ == 3)
 #define CPPU_GCC3_ALIGN( base_struct ) __attribute__ ((aligned (__alignof__ (base_struct))))
 #else
 #define CPPU_GCC3_ALIGN( base_struct )
--- oo_1.0_src/cppu/source/uno/data.cxx~	Fri Oct 19 15:25:14 2001
+++ oo_1.0_src/cppu/source/uno/data.cxx	Tue May 28 14:06:02 2002
@@ -307,7 +307,7 @@
     if (OFFSET_OF(s, m) != n) { fprintf( stderr, "### OFFSET_OF(" #s ", "  #m ") = %d instead of expected %d!!!\n", OFFSET_OF(s, m), n ); abort(); }
 
 #ifdef DEBUG
-#if defined(__GNUC__) && defined(LINUX) && defined(INTEL)
+#if defined(__GNUC__) && defined(LINUX) && (defined(INTEL) || defined(POWERPC))
 #define BINTEST_VERIFYSIZE( s, n ) \
     fprintf( stderr, "> sizeof(" #s ") = %d; __alignof__ (" #s ") = %d\n", sizeof(s), __alignof__ (s) ); \
     if (sizeof(s) != n) { fprintf( stderr, "### sizeof(" #s ") = %d instead of expected %d!!!\n", sizeof(s), n ); abort(); }
--- oo_1.0_src/product/util/makefile.mk~	Mon Apr  8 10:34:21 2002
+++ oo_1.0_src/product/util/makefile.mk	Tue May 28 13:26:42 2002
@@ -105,14 +105,21 @@
 DESTDIRBIN=$(DESTDIR)$/linux$/bin
 DESTDIRLIB=$(DESTDIR)$/linux$/lib
 DESTDIRDLL=$(DESTDIRLIB)
-STLPORTLIBNAME=libstlport_gcc.so
+STLPORTLIBNAME=libstlport_gcc_3.1.so
 BINDINGDLL=$(COMNAME)_uno
 .IF "$(COMID)"=="gcc3"
+.IF "$(CCNUMVER)">="000300010000"
+ADDITIONAL_DLLS= \
+       $(DESTDIRDLL)$/libgcc_s.so.1            \
+       $(DESTDIRDLL)$/libgcc_s.so              \
+       $(DESTDIRDLL)$/libstdc++.so.4           \
+       $(DESTDIRDLL)$/libstdc++.so.4.0.0
+.ELSE
 ADDITIONAL_DLLS= \
 	$(DESTDIRDLL)$/libgcc_s.so.1 		\
 	$(DESTDIRDLL)$/libgcc_s.so 		\
 	$(DESTDIRDLL)$/libstdc++.so.3 		\
-	$(DESTDIRDLL)$/libstdc++.so.3.0.1
+	$(DESTDIRDLL)$/libstdc++.so.3.0.4
 .ENDIF
 .ELIF "$(OS)"=="FREEBSD"
 ###########
@@ -432,19 +439,37 @@
 	$(GNUCOPY) -p $(DLLOUT)$/$(@:f) $@
 
 $(DESTDIRDLL)$/%$(MY_VERSION_LINKPOSTFIX) : $(DESTDIRDLL)$/%$(MY_VERSION_DLLPOSTFIX) $(DIRLIST)
+	+rm -f $@
 	+ln -fs $(@:f)$(MY_VERSION_LINKTARGETPOSTFIX) $@
+	+rm -f $@	
 	+ln -fs $(@:f)$(MY_VERSION_LINKTARGETPOSTFIX) $(@:db)
-
+
 
 #---------------------------------------------------------
 # special targets for linux gcc3 
-$(DESTDIRDLL)$/libstdc++.so.3.0.1 : $(DLLOUT)$/libstdc++.so.3.0.1 $(DIRLIST)
+
+.IF "$(CCNUMVER)">="000300010000"
+
+$(DESTDIRDLL)$/libstdc++.so.4.0.0 : $(DLLOUT)$/libstdc++.so.4.0.0 $(DIRLIST)
+       -rm -f $@
+       $(GNUCOPY) -p $(DLLOUT)$/libstdc++.so.4.0.0 $@
+
+$(DESTDIRDLL)$/libstdc++.so.4 : $(DESTDIRDLL)$/libstdc++.so.4.0.0 $(DIRLIST)
+       -rm -f $@
+       +ln -s libstdc++.so.4.0.0 $@
+
+.ELSE
+
+$(DESTDIRDLL)$/libstdc++.so.3.0.4 : $(DLLOUT)$/libstdc++.so.3.0.4 $(DIRLIST)
 	-rm -f $@
-	$(GNUCOPY) -p $(DLLOUT)$/libstdc++.so.3.0.1 $@
+	$(GNUCOPY) -p $(DLLOUT)$/libstdc++.so.3.0.4 $@
 
-$(DESTDIRDLL)$/libstdc++.so.3 : $(DESTDIRDLL)$/libstdc++.so.3.0.1 $(DIRLIST)
+$(DESTDIRDLL)$/libstdc++.so.3 : $(DESTDIRDLL)$/libstdc++.so.3.0.4 $(DIRLIST)
 	-rm -f $@
-	+ln -s libstdc++.so.3.0.1 $@
+	+ln -s libstdc++.so.3.0.4 $@
+
+.ENDIF
+
 
 $(DESTDIRDLL)$/libgcc_s.so.1 : $(DLLOUT)$/libgcc_s.so.1 $(DIRLIST)
 	-rm -f $@


--- oo_1.0_src/product/inc/scp/udk_basefiles.scp~	Fri Mar 15 12:58:28 2002
+++ oo_1.0_src/product/inc/scp/udk_basefiles.scp	Tue May 28 13:41:33 2002
@@ -3,6 +3,7 @@
 // Temporary solution/hack: at the moment libstdc++.so and libgcc_s.so are needed for unxlngi4 environment
 // (setup is linked against it).
 #if ( defined( _gcc3 ) && defined( C300 ) )
+
 File gid_File_Lib_gcc
     BIN_FILE_BODY;
 	Name		= STRING(libgcc_s.so.1);
@@ -10,6 +11,25 @@
     Styles		= (PACKED, SETUPZIP);
 End
 
+
+#if ( CCNUMVER >= 000300010000 )
+
+File gid_File_Lib_Stdc
+    BIN_FILE_BODY;
+    Name               = STRING(libstdc++.so.4.0.0);
+    Dir                        = GCFG_BINARY_DIR;
+    Styles             = (PACKED, SETUPZIP);
+End
+
+Shortcut gid_Shortcut_Lib_Stdc
+    FileID      = gid_File_Lib_Stdc;
+    Dir         = GCFG_BINARY_DIR;
+    Name        = STRING(libstdc++.so.4);
+    Styles      = (NETWORK,RELATIVE);
+End
+
+#else
+
 File gid_File_Lib_Stdc
     BIN_FILE_BODY;
     Name		= STRING(libstdc++.so.3.0.1);
@@ -23,6 +43,8 @@
     Name        = STRING(libstdc++.so.3);
     Styles      = (NETWORK,RELATIVE);
 End
+
+#endif
 #endif
 
 File gid_File_Lib_Sal
--- oo_1.0_src/config_office/configure.in.config-fixes	2002-05-01 15:51:49.000000000 +0200
+++ oo_1.0_src/config_office/configure.in	2002-05-01 16:25:06.000000000 +0200
@@ -984,6 +984,7 @@ dnl testing for X libraries and includes
 dnl ***************************************
 if test "$_os" = "Darwin" -a "x$x_includes" = "xno_x_includes"; then
    dnl Mac OS X using Aqua graphics. Don't check for X11.
+   :
 elif test "$_os" != "WINNT" ; then
    AC_PATH_X
    AC_PATH_XTRA
--- oo_641d_src/config_office/configure.in.gcc31	2002-03-27 20:32:56.000000000 +0100
+++ oo_641d_src/config_office/configure.in	2002-04-08 17:11:32.000000000 +0200
@@ -277,13 +277,15 @@
 
    if test $GCC; then
       AC_MSG_CHECKING([the GNU gcc compiler version])
-      _gcc_releasetype=`$GCC --version | $AWK -F"-" '{ print \$1 }'`
+      dnl (gb) GCC 3.1+ has more versioning information in --version now
+      GCC_VERSION=`$GCC --version | head -n 1 | cut -d' ' -f3`
+      _gcc_releasetype=`echo $GCC_VERSION | $AWK -F"-" '{ print \$1 }'`
       if test "$_gcc_releasetype" = "egcs"; then
          AC_MSG_WARN([found egcs- version,  use (stable=gcc-) version of the compiler])
          AC_MSG_WARN([found egcs- version,  use (stable=gcc-) version of the compiler]) >> warn
-         _gcc_version=`$GCC --version | $AWK -F"-" '{ print \$2 }'`
+         _gcc_version=`echo $GCC_VERSION | $AWK -F"-" '{ print \$2 }'`
       else
-         _gcc_version=`$GCC --version`
+         _gcc_version=`echo $GCC_VERSION`
       fi
       _gcc_major=`echo $_gcc_version | $AWK -F. '{ print \$1 }'` 
       if test -n "$enable_gcc3"; then 
@@ -296,13 +298,13 @@
            AC_MSG_WARN([found version "$_gcc_version", use version 2.95.2+ of the gcc compiler]) >> warn
            COMPATH="NO_GCC"
         else
-           _gcc_middle=`$GCC --version | $AWK -F. '{ if ($2 != 95) print "false"; else print "true" }'` 
+           _gcc_middle=`echo $GCC_VERSION | $AWK -F. '{ if ($2 != 95) print "false"; else print "true" }'` 
            if test "$_gcc_middle" = "false"; then
               AC_MSG_WARN([found version "$_gcc_version", use version 2.95.2+ of the gcc compiler])
               AC_MSG_WARN([found version "$_gcc_version", use version 2.95.2+ of the gcc compiler]) >> warn
               COMPATH="NO_GCC"
            else
-              _gcc_minor=`$GCC --version | $AWK -F. '{ if ($3 < 2) print "false"; else print "true" }'` 
+              _gcc_minor=`echo $GCC_VERSION | $AWK -F. '{ if ($3 < 2) print "false"; else print "true" }'` 
               if test "$_gcc_minor" = "false"; then
                  AC_MSG_WARN([found version "$_gcc_version", use version 2.95.2+ of the gcc compiler])
                  AC_MSG_WARN([found version "$_gcc_version", use version 2.95.2+ of the gcc compiler]) >> warn
--- oo_641d_src/cppu/inc/uno/lbnames.h.gcc31	2002-04-08 16:46:15.000000000 +0200
+++ oo_641d_src/cppu/inc/uno/lbnames.h	2002-04-08 17:44:00.000000000 +0200
@@ -98,8 +98,10 @@
 #error "Tested gcc 2 versions are 2.91 and 2.95.  Patch uno/lbnames.h to try your gcc 2 version."
 #elif (__GNUC__ == 3 && __GNUC_MINOR__ == 0)
 #define	__CPPU_ENV gcc3
+#elif (__GNUC__ == 3 && __GNUC_MINOR__ == 1)
+#define __CPPU_ENV gcc3
 #elif (__GNUC__ == 3)
-#error "Tested gcc 3 version is 3.0.  Patch uno/lbnames.h to try your gcc 3 version."
+#error "Tested gcc 3 version is <= 3.1.  Patch uno/lbnames.h to try your gcc 3 version."
 #else
 #error "Supported gcc majors are 2 and 3.  Unsupported gcc major version."
 #endif /* defined (__GNUC__) */
--- tools/inc/solmath.hxx.prev	Tue May 21 11:34:03 2002
+++ tools/inc/solmath.hxx	Tue May 21 11:33:16 2002
@@ -306,19 +306,48 @@
 #elif defined(LINUX)
 #include <fpu_control.h>
 
+#if defined(POWERPC)
+
+// we need to work around a compiler issue for ppc linux in gcc 3.1
+
+#define _MYFPU_GETCW(cw) ( { \
+  union { double d; fpu_control_t cw[2]; } tmp __attribute__ ((__aligned__(8))); \
+  __asm__ ("mffs 0; fmr %0, 0" : "=f" (tmp.d) : : "fr0"); \
+  (cw)=tmp.cw[1]; \
+  tmp.cw[1]; } )
+
+#define _MYFPU_SETCW(cw) { \
+  union { double d; fpu_control_t cw[2]; } tmp __attribute__ ((__aligned__(8))); \
+  tmp.cw[0] = 0xFFF80000; /* More-or-less arbitrary; this is a QNaN. */ \
+  tmp.cw[1] = cw; \
+  __asm__ ("lfd%U0 0,%0; mtfsf 255,0" : : "m" (tmp.d) : "fr0"); \
+}
+
+#endif
+
 extern inline void glibc_setfpucw( fpu_control_t set )
 {
 	fpu_control_t cw;
 
 	/* Fetch the current control word.  */
+
+#if defined(POWERPC)
+	_MYFPU_GETCW(cw);
+#else
 	_FPU_GETCW(cw);
+#endif
 
 	/* Preserve the reserved bits, and set the rest as the user
 	   specified (or the default, if the user gave zero).  */
 	cw &= _FPU_RESERVED;
 	cw |= set & ~_FPU_RESERVED;
 
+#if defined(POWERPC)
+	_MYFPU_SETCW(cw);
+#else
 	_FPU_SETCW(cw);
+#endif
+
 }
 
 #define __setfpucw( control_word ) glibc_setfpucw( control_word )

Attachment: pgpcais2AOccj.pgp
Description: PGP signature


Reply to: