ports/167853: editors/apache-openoffice-3.4.0 fails to build
Don Lewis
truckman at FreeBSD.org
Fri May 18 06:20:07 UTC 2012
The following reply was made to PR ports/167853; it has been noted by GNATS.
From: Don Lewis <truckman at FreeBSD.org>
To: bug-followup at FreeBSD.org, scottsshort at gmail.com
Cc:
Subject: Re: ports/167853: editors/apache-openoffice-3.4.0 fails to build
Date: Thu, 17 May 2012 23:17:45 -0700 (PDT)
I ran into the same problem here.
There is a function definition vs. prototype error earlier in the log
file. It appears that this error is specific to FreeBSD i386. It
appears that a change was made to the addLocalFunctions() interface, but
this change was never made to the gcc3_freebsd_intel version of this
file. The upstream probably hasn't been testing on FreeBSD i386.
The following patch modifies
bridges/source/cpp_uno/gcc3_freebsd_intel/cpp2uno.cxx to be identical to
the Linux i386 version of this file, which seems to be the correct thing
to do. Compilation gets much further for me now, but I'm seeing build
errors in the apr and coinmp modules, which I also saw before this patch
in addition to the bridges problem.
Index: files/patch-bridges
===================================================================
RCS file: /home/ncvs/ports/editors/openoffice-3/files/patch-bridges,v
retrieving revision 1.3
diff -u -r1.3 patch-bridges
--- files/patch-bridges 9 May 2012 03:48:16 -0000 1.3
+++ files/patch-bridges 18 May 2012 00:17:33 -0000
@@ -10,3 +10,76 @@
#include <stdio.h>
#include <string.h>
+--- bridges/source/cpp_uno/gcc3_freebsd_intel/cpp2uno.cxx.orig 2012-01-10 02:40:18.000000000 -0800
++++ bridges/source/cpp_uno/gcc3_freebsd_intel/cpp2uno.cxx 2012-05-17 17:14:35.000000000 -0700
+@@ -355,7 +355,7 @@
+ int const codeSnippetSize = 16;
+
+ unsigned char * codeSnippet(
+- unsigned char * code, sal_Int32 functionIndex, sal_Int32 vtableOffset,
++ unsigned char * code, sal_PtrDiff writetoexecdiff, sal_Int32 functionIndex, sal_Int32 vtableOffset,
+ typelib_TypeClass returnTypeClass)
+ {
+ if (!bridges::cpp_uno::shared::isSimpleType(returnTypeClass)) {
+@@ -401,7 +401,7 @@
+ // jmp privateSnippetExecutor:
+ *p++ = 0xE9;
+ *reinterpret_cast< sal_Int32 * >(p)
+- = ((unsigned char *) exec) - p - sizeof (sal_Int32);
++ = ((unsigned char *) exec) - p - sizeof (sal_Int32) - writetoexecdiff;
+ p += sizeof (sal_Int32);
+ OSL_ASSERT(p - code <= codeSnippetSize);
+ return code + codeSnippetSize;
+@@ -412,8 +412,7 @@
+ struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+ bridges::cpp_uno::shared::VtableFactory::Slot *
+-bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+-{
++bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block) {
+ return static_cast< Slot * >(block) + 2;
+ }
+
+@@ -434,7 +433,7 @@
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- Slot ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code, sal_PtrDiff writetoexecdiff,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+ {
+@@ -447,9 +446,9 @@
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- (s++)->fn = code;
++ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+- code, functionOffset++, vtableOffset,
++ code, writetoexecdiff, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceAttributeTypeDescription * >(
+ member)->pAttributeTypeRef->eTypeClass);
+ // Setter:
+@@ -457,17 +456,17 @@
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- (s++)->fn = code;
++ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+- code, functionOffset++, vtableOffset,
++ code, writetoexecdiff, functionOffset++, vtableOffset,
+ typelib_TypeClass_VOID);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+- (s++)->fn = code;
++ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+- code, functionOffset++, vtableOffset,
++ code, writetoexecdiff, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceMethodTypeDescription * >(
+ member)->pReturnTypeRef->eTypeClass);
+ break;
More information about the freebsd-ports-bugs
mailing list