Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Sep 2013 23:30:31 +0000 (UTC)
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r327589 - in head/editors/libreoffice: . files
Message-ID:  <201309182330.r8INUVUo033050@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jkim
Date: Wed Sep 18 23:30:31 2013
New Revision: 327589
URL: http://svnweb.freebsd.org/changeset/ports/327589

Log:
  - Fix build on head with clang and libc++/libcxxrt.  Note the patches were
  heavily inspired by several upstream patches and a crucial hint from tijl.
  - Remove a redundant compiler flag for MDDS.  The GXX_INCLUDE_PATH variable
  was removed with STLport support and it seems it is not necessary any more.
  - Add an upstream patch.  It may work around a potential compiler problem.
  - Convert to new LIB_DEPENDS format.

Added:
  head/editors/libreoffice/files/extra-patch-libc++   (contents, props changed)
  head/editors/libreoffice/files/patch-bridges__source__cpp_uno__gcc3_linux_x86-64__callvirtualmethod.cxx   (contents, props changed)
Modified:
  head/editors/libreoffice/Makefile
  head/editors/libreoffice/files/patch-configure.ac

Modified: head/editors/libreoffice/Makefile
==============================================================================
--- head/editors/libreoffice/Makefile	Wed Sep 18 23:20:50 2013	(r327588)
+++ head/editors/libreoffice/Makefile	Wed Sep 18 23:30:31 2013	(r327589)
@@ -20,34 +20,34 @@ BUILD_DEPENDS=	p5-Archive-Zip>=0:${PORTS
 		bash:${PORTSDIR}/shells/bash \
 		gsed:${PORTSDIR}/textproc/gsed
 
-LIB_DEPENDS=	icutu:${PORTSDIR}/devel/icu \
-		langtag:${PORTSDIR}/devel/liblangtag \
-		orcus-0.6:${PORTSDIR}/devel/liborcus \
-		curl:${PORTSDIR}/ftp/curl \
-		cairo.2:${PORTSDIR}/graphics/cairo \
-		graphite2:${PORTSDIR}/graphics/graphite2 \
-		jpeg.11:${PORTSDIR}/graphics/jpeg \
-		cdr:${PORTSDIR}/graphics/libcdr \
-		lcms2:${PORTSDIR}/graphics/lcms2 \
-		wpg-0.2.2:${PORTSDIR}/graphics/libwpg \
-		png15:${PORTSDIR}/graphics/png \
-		poppler:${PORTSDIR}/graphics/poppler \
-		lpsolve55:${PORTSDIR}/math/lp_solve \
-		cmis-0.4:${PORTSDIR}/net/libcmis \
-		mspub-0.0:${PORTSDIR}/print/libmspub \
-		nss3.1:${PORTSDIR}/security/nss \
-		clucene-core:${PORTSDIR}/textproc/clucene \
-		expat.6:${PORTSDIR}/textproc/expat2 \
-		hunspell-1.3.0:${PORTSDIR}/textproc/hunspell \
-		hyphen.2:${PORTSDIR}/textproc/hyphen \
-		exttextcat-2.0.0:${PORTSDIR}/textproc/libexttextcat \
-		visio-0.0.0:${PORTSDIR}/textproc/libvisio \
-		xml2.5:${PORTSDIR}/textproc/libxml2 \
-		xslt.2:${PORTSDIR}/textproc/libxslt \
-		wpd-0.9.9:${PORTSDIR}/textproc/libwpd \
-		wps-0.2.2:${PORTSDIR}/textproc/libwps \
-		mythes-1.2.0:${PORTSDIR}/textproc/mythes \
-		rdf.0:${PORTSDIR}/textproc/redland
+LIB_DEPENDS=	libicutu.so:${PORTSDIR}/devel/icu \
+		liblangtag.so:${PORTSDIR}/devel/liblangtag \
+		liborcus-0.6.so:${PORTSDIR}/devel/liborcus \
+		libcurl.so:${PORTSDIR}/ftp/curl \
+		libcairo.so:${PORTSDIR}/graphics/cairo \
+		libgraphite2.so:${PORTSDIR}/graphics/graphite2 \
+		libjpeg.so:${PORTSDIR}/graphics/jpeg \
+		libcdr-0.0.so:${PORTSDIR}/graphics/libcdr \
+		liblcms2.so:${PORTSDIR}/graphics/lcms2 \
+		libwpg-0.2.so:${PORTSDIR}/graphics/libwpg \
+		libpng15.so:${PORTSDIR}/graphics/png \
+		libpoppler.so:${PORTSDIR}/graphics/poppler \
+		liblpsolve55.so:${PORTSDIR}/math/lp_solve \
+		libcmis-0.4.so:${PORTSDIR}/net/libcmis \
+		libmspub-0.0.so:${PORTSDIR}/print/libmspub \
+		libnss3.so:${PORTSDIR}/security/nss \
+		libclucene-core.so:${PORTSDIR}/textproc/clucene \
+		libexpat.so:${PORTSDIR}/textproc/expat2 \
+		libhunspell-1.3.so:${PORTSDIR}/textproc/hunspell \
+		libhyphen.so:${PORTSDIR}/textproc/hyphen \
+		libexttextcat-2.0.so:${PORTSDIR}/textproc/libexttextcat \
+		libvisio-0.0.so:${PORTSDIR}/textproc/libvisio \
+		libxml2.so:${PORTSDIR}/textproc/libxml2 \
+		libxslt.so:${PORTSDIR}/textproc/libxslt \
+		libwpd-0.9.so:${PORTSDIR}/textproc/libwpd \
+		libwps-0.2.so:${PORTSDIR}/textproc/libwps \
+		libmythes-1.2.so:${PORTSDIR}/textproc/mythes \
+		librdf.so:${PORTSDIR}/textproc/redland
 
 RUN_DEPENDS=	${LOCALBASE}/lib/X11/fonts/dejavu/DejaVuSans.ttf:${PORTSDIR}/x11-fonts/dejavu \
 		${LOCALBASE}/lib/X11/fonts/GentiumBasic/GenBasI.ttf:${PORTSDIR}/x11-fonts/gentium-basic \
@@ -187,7 +187,7 @@ WEBDAV_DESC=	Enable webdav protocol
 .include <bsd.port.options.mk>
 
 .if ${PORT_OPTIONS:MCUPS}
-LIB_DEPENDS+=		cups:${PORTSDIR}/print/cups-client
+LIB_DEPENDS+=		libcups.so:${PORTSDIR}/print/cups-client
 CONFIGURE_ARGS+=	--enable-cups --without-ppds
 .else
 CONFIGURE_ARGS+=	--disable-cups
@@ -204,7 +204,7 @@ CONFIGURE_ARGS+=	--enable-release-build
 .endif
 
 .if ${PORT_OPTIONS:MGNOME}
-LIB_DEPENDS+=		dbus-glib-1:${PORTSDIR}/devel/dbus-glib
+LIB_DEPENDS+=		libdbus-glib-1.so:${PORTSDIR}/devel/dbus-glib
 USE_GNOME+=		gconf2
 CONFIGURE_ARGS+=	--enable-dbus --enable-gconf --enable-gio \
 			--enable-lockdown
@@ -327,7 +327,7 @@ CONFIGURE_ARGS+=	--disable-cve-tests
 
 .if ${PORT_OPTIONS:MWEBDAV}
 CONFIGURE_ARGS+=	--enable-neon --with-system-neon
-LIB_DEPENDS+=	neon.27:${PORTSDIR}/www/neon29
+LIB_DEPENDS+=	libneon.so:${PORTSDIR}/www/neon29
 .else
 CONFIGURE_ARGS+=	--disable-neon
 .endif
@@ -343,6 +343,9 @@ CC=		/usr/bin/clang
 CPP=		/usr/bin/clang-cpp
 CXX=		/usr/bin/clang++
 CONFIGURE_ENV+=	CXXCPP="${CPP}"
+.if ${OSVERSION} > 100054
+EXTRA_PATCHES+=	${FILESDIR}/extra-patch-libc++
+.endif
 .else
 # XXX Clang PR13308 (http://llvm.org/bugs/show_bug.cgi?id=13308)
 BUILD_DEPENDS+=	clang>=3.2_4:${PORTSDIR}/lang/clang

Added: head/editors/libreoffice/files/extra-patch-libc++
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/editors/libreoffice/files/extra-patch-libc++	Wed Sep 18 23:30:31 2013	(r327589)
@@ -0,0 +1,495 @@
+--- configure.ac.orig	2013-08-13 16:11:48.000000000 -0400
++++ configure.ac	2013-09-13 17:50:41.000000000 -0400
+@@ -5518,7 +5518,7 @@
+         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
+     fi
+ 
+-    if test "$HAVE_GCC_VISIBILITY_FEATURE" = "TRUE"; then
++    if test "$HAVE_GCC_VISIBILITY_FEATURE" = "TRUE" -a "$COM_GCC_IS_CLANG" != "TRUE"; then
+         dnl gcc#19664, gcc#22482, rhbz#162935
+         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
+         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
+--- binaryurp/source/cache.hxx.orig	2013-08-13 16:11:48.000000000 -0400
++++ binaryurp/source/cache.hxx	2013-09-13 18:14:53.000000000 -0400
+@@ -25,6 +25,7 @@
+ #include <cassert>
+ #include <cstddef>
+ #include <map>
++#include <list>
+ 
+ #include "boost/noncopyable.hpp"
+ #include "sal/types.h"
+@@ -37,88 +38,57 @@
+ 
+ }
+ 
+-template< typename T > class Cache: private boost::noncopyable {
++template< typename T > class Cache : private boost::noncopyable {
+ public:
++    typedef sal_uInt16 IdxType;
++
+     explicit Cache(std::size_t size):
+-        size_(size), first_(map_.end()), last_(map_.end())
++        size_(size)
+     {
+         assert(size < cache::ignore);
+     }
+ 
+-    sal_uInt16 add(T const & content, bool * found) {
+-        assert(found != 0);
+-        typename Map::iterator i(map_.find(content));
+-        *found = i != map_.end();
+-        if (i == map_.end()) {
+-            typename Map::size_type n = map_.size();
+-            if (n < size_) {
+-                i =
+-                    (map_.insert(
+-                        typename Map::value_type(
+-                            content,
+-                            Entry(
+-                                static_cast< sal_uInt16 >(n), map_.end(),
+-                                first_)))).
+-                    first;
+-                if (first_ == map_.end()) {
+-                    last_ = i;
+-                } else {
+-                    first_->second.prev = i;
+-                }
+-                first_ = i;
+-            } else if (last_ != map_.end()) {
+-                i =
+-                    (map_.insert(
+-                        typename Map::value_type(
+-                            content,
+-                            Entry(last_->second.index, map_.end(), first_)))).
+-                    first;
+-                first_->second.prev = i;
+-                first_ = i;
+-                typename Map::iterator j(last_);
+-                last_ = last_->second.prev;
+-                last_->second.next = map_.end();
+-                map_.erase(j);
+-            } else {
+-                // Reached iff size_ == 0:
+-                return cache::ignore;
+-            }
+-        } else if (i != first_) {
+-            // Move to front (reached only if size_ > 1):
+-            i->second.prev->second.next = i->second.next;
+-            if (i->second.next == map_.end()) {
+-                last_ = i->second.prev;
+-            } else {
+-                i->second.next->second.prev = i->second.prev;
+-            }
+-            i->second.prev = map_.end();
+-            i->second.next = first_;
+-            first_->second.prev = i;
+-            first_ = i;
+-        }
+-        return i->second.index;
++    IdxType add( const T& rContent, bool* pbFound) {
++	assert( pbFound != NULL);
++	if( !size_) {
++		*pbFound = false;
++		return cache::ignore;
++	}
++	// try to insert into the map
++	list_.push_front( rContent); // create a temp entry
++	typedef std::pair<typename LruList::iterator, IdxType> MappedType;
++	typedef std::pair<typename LruItMap::iterator,bool> MapPair;
++	MapPair aMP = map_.insert( MappedType( list_.begin(), 0));
++	*pbFound = !aMP.second;
++	
++	if( !aMP.second) { // insertion not needed => found the entry
++		list_.pop_front(); // remove the temp entry
++		list_.splice( list_.begin(), list_, aMP.first->first); // the found entry is moved to front
++		return aMP.first->second;
++	}
++
++	// test insertion successful => it was new so we keep it
++	IdxType n = static_cast<IdxType>( map_.size() - 1);
++	if( n >= size_) { // cache full => replace the LRU entry
++		// find the least recently used element in the map
++		typename LruItMap::iterator it = map_.find( --list_.end());
++		n = it->second;
++		map_.erase( it); // remove it from the map
++		list_.pop_back(); // remove from the list
++	}
++	aMP.first->second = n;
++	return n;
+     }
+ 
+ private:
+-    struct Entry;
+-
+-    typedef std::map< T, Entry > Map;
+-
+-    struct Entry {
+-        sal_uInt16 index;
+-        typename Map::iterator prev;
+-        typename Map::iterator next;
+-
+-        Entry(
+-            sal_uInt16 theIndex, typename Map::iterator thePrev,
+-            typename Map::iterator theNext):
+-            index(theIndex), prev(thePrev), next(theNext) {}
+-    };
++    typedef std::list<T> LruList; // last recently used list
++    typedef typename LruList::iterator LruListIt;
++    struct CmpT{ bool operator()( const LruListIt& rA, const LruListIt& rB) const { return (*rA<*rB);}};
++    typedef ::std::map< LruListIt, IdxType, CmpT > LruItMap; // a map into a LruList
+ 
+     std::size_t size_;
+-    Map map_;
+-    typename Map::iterator first_;
+-    typename Map::iterator last_;
++    LruItMap map_;
++    LruList list_;
+ };
+ 
+ }
+--- binaryurp/source/lessoperators.cxx.orig	2013-08-13 16:11:48.000000000 -0400
++++ binaryurp/source/lessoperators.cxx	2013-09-13 18:15:58.000000000 -0400
+@@ -38,8 +38,30 @@
+     typelib_TypeClass tc2 = right.get()->eTypeClass;
+     return tc1 < tc2 ||
+         (tc1 == tc2 &&
+-         (OUString(left.get()->pTypeName) <
+-          OUString(right.get()->pTypeName)));
++         (OUString::unacquired(&left.get()->pTypeName) <
++          OUString::unacquired(&right.get()->pTypeName)));
++}
++
++bool TypeDescEqual::operator()( const TypeDescription& rLeft, const TypeDescription& rRight) const
++{
++	assert( rLeft.is() && rRight.is());
++	const typelib_TypeDescription& rA = *rLeft.get();
++	const typelib_TypeDescription& rB = *rRight.get();
++	if( rA.eTypeClass != rB.eTypeClass)
++		return false;
++	const sal_Int32 nCmp = rtl_ustr_compare_WithLength(
++			rA.pTypeName->buffer, rA.pTypeName->length,
++			rB.pTypeName->buffer, rB.pTypeName->length);
++	return (nCmp == 0);
++}
++
++sal_Int32 TypeDescHash::operator()( const TypeDescription& rTD) const
++{
++	assert( rTD.is());
++	const typelib_TypeDescription& rA = *rTD.get();
++	sal_Int32 h = rtl_ustr_hashCode_WithLength( rA.pTypeName->buffer, rA.pTypeName->length);
++	h ^= static_cast<sal_Int32>(rA.eTypeClass);
++	return h;
+ }
+ 
+ } } } }
+@@ -47,8 +69,8 @@
+ namespace rtl {
+ 
+ bool operator <(ByteSequence const & left, ByteSequence const & right) {
+-    for (sal_Int32 i = 0; i != std::min(left.getLength(), right.getLength());
+-         ++i)
++    const sal_Int32 nLen = std::min( left.getLength(), right.getLength());
++    for( sal_Int32 i = 0; i < nLen; ++i )
+     {
+         if (left[i] < right[i]) {
+             return true;
+--- binaryurp/source/lessoperators.hxx.orig	2013-08-13 16:11:48.000000000 -0400
++++ binaryurp/source/lessoperators.hxx	2013-09-13 18:14:53.000000000 -0400
+@@ -31,6 +31,10 @@
+ 
+ bool operator <(TypeDescription const & left, TypeDescription const & right);
+ 
++struct TypeDescHash { sal_Int32 operator()( const TypeDescription&) const; };
++
++struct TypeDescEqual { bool operator()( const TypeDescription&, const TypeDescription&) const; };
++
+ } } } }
+ 
+ namespace rtl {
+--- bridges/source/cpp_uno/gcc3_linux_intel/except.cxx.orig	2013-08-13 16:11:48.000000000 -0400
++++ bridges/source/cpp_uno/gcc3_linux_intel/except.cxx	2013-09-18 13:06:42.000000000 -0400
+@@ -22,11 +22,6 @@
+ #include <dlfcn.h>
+ #include <boost/unordered_map.hpp>
+ 
+-#include <cxxabi.h>
+-#ifndef _GLIBCXX_CDTOR_CALLABI // new in GCC 4.7 cxxabi.h
+-#define _GLIBCXX_CDTOR_CALLABI
+-#endif
+-
+ #include <rtl/strbuf.hxx>
+ #include <rtl/ustrbuf.hxx>
+ #include <osl/diagnose.h>
+@@ -248,7 +243,11 @@
+             Reference< XInterface >() );
+     }
+ 
++#ifdef _LIBCPP_VERSION
++    pCppExc = __cxxabiv1::__cxa_allocate_exception( pTypeDescr->nSize );
++#else
+     pCppExc = __cxa_allocate_exception( pTypeDescr->nSize );
++#endif
+     ::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+ 
+     // destruct uno exception
+@@ -280,7 +279,11 @@
+     }
+     }
+ 
++#ifdef _LIBCPP_VERSION
++    __cxxabiv1::__cxa_throw( pCppExc, rtti, deleteException );
++#else
+     __cxa_throw( pCppExc, rtti, deleteException );
++#endif
+ }
+ 
+ //==================================================================================================
+--- bridges/source/cpp_uno/gcc3_linux_intel/share.hxx.orig	2013-08-13 16:11:48.000000000 -0400
++++ bridges/source/cpp_uno/gcc3_linux_intel/share.hxx	2013-09-18 13:06:17.000000000 -0400
+@@ -25,6 +25,37 @@
+ 
+ #include <uno/any2.h>
+ 
++#include <cxxabi.h>
++#ifndef _GLIBCXX_CDTOR_CALLABI // new in GCC 4.7 cxxabi.h
++#define _GLIBCXX_CDTOR_CALLABI
++#endif
++
++#ifdef _LIBCPP_VERSION
++
++namespace __cxxabiv1
++{
++    struct __class_type_info : public std::type_info
++    {
++        explicit __class_type_info( const char *__n ) : type_info( __n ) { }
++        virtual ~__class_type_info();
++    };
++
++    struct __si_class_type_info : public __class_type_info
++    {
++        explicit __si_class_type_info( const char *__n, const __class_type_info *__b ) :
++            __class_type_info( __n ), __base_type( __b ) { }
++        virtual ~__si_class_type_info();
++        const __class_type_info *__base_type;
++    };
++
++extern "C" void *__cxa_allocate_exception( std::size_t thrown_size ) _NOEXCEPT;
++
++extern "C" _LIBCPP_NORETURN void __cxa_throw(
++    void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) );
++}
++
++#else
++
+ namespace CPPU_CURRENT_NAMESPACE
+ {
+ 
+@@ -86,6 +117,13 @@
+     void *thrown_exception, void *tinfo, void (*dest) (void *) ) __attribute__((noreturn));
+ #endif
+ 
++}
++
++#endif
++
++namespace CPPU_CURRENT_NAMESPACE
++{
++
+ // -----
+ 
+ //==================================================================================================
+@@ -93,8 +132,11 @@
+     uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+ //==================================================================================================
+ void fillUnoException(
++#ifdef _LIBCPP_VERSION
++    __cxxabiv1::__cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
++#else
+     __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
+-
++#endif
+ }
+ 
+ namespace x86
+--- bridges/source/cpp_uno/gcc3_linux_intel/uno2cpp.cxx.orig	2013-08-13 16:11:48.000000000 -0400
++++ bridges/source/cpp_uno/gcc3_linux_intel/uno2cpp.cxx	2013-09-18 13:05:25.000000000 -0400
+@@ -203,7 +203,11 @@
+      catch (...)
+      {
+           // fill uno exception
++#ifdef _LIBCPP_VERSION
++        CPPU_CURRENT_NAMESPACE::fillUnoException( __cxxabiv1::__cxa_get_globals()->caughtExceptions, *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
++#else
+         fillUnoException( __cxa_get_globals()->caughtExceptions, *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
++#endif
+ 
+         // temporary params
+         for ( ; nTempIndizes--; )
+--- bridges/source/cpp_uno/gcc3_linux_x86-64/except.cxx.orig	2013-08-13 16:11:48.000000000 -0400
++++ bridges/source/cpp_uno/gcc3_linux_x86-64/except.cxx	2013-09-18 12:55:37.000000000 -0400
+@@ -22,11 +22,6 @@
+ #include <string.h>
+ #include <dlfcn.h>
+ 
+-#include <cxxabi.h>
+-#ifndef _GLIBCXX_CDTOR_CALLABI // new in GCC 4.7 cxxabi.h
+-#define _GLIBCXX_CDTOR_CALLABI
+-#endif
+-
+ #include <boost/unordered_map.hpp>
+ 
+ #include <rtl/strbuf.hxx>
+@@ -255,7 +250,11 @@
+             Reference< XInterface >() );
+     }
+ 
++#ifdef _LIBCPP_VERSION
++    pCppExc = __cxxabiv1::__cxa_allocate_exception( pTypeDescr->nSize );
++#else
+     pCppExc = __cxa_allocate_exception( pTypeDescr->nSize );
++#endif
+     ::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+ 
+     // destruct uno exception
+@@ -274,7 +273,11 @@
+     }
+     }
+ 
++#ifdef _LIBCPP_VERSION
++    __cxxabiv1::__cxa_throw( pCppExc, rtti, deleteException );
++#else
+     __cxa_throw( pCppExc, rtti, deleteException );
++#endif
+ }
+ 
+ //==================================================================================================
+--- bridges/source/cpp_uno/gcc3_linux_x86-64/share.hxx.orig	2013-08-13 16:11:48.000000000 -0400
++++ bridges/source/cpp_uno/gcc3_linux_x86-64/share.hxx	2013-09-18 12:53:27.000000000 -0400
+@@ -23,6 +23,37 @@
+ #include <exception>
+ #include <cstddef>
+ 
++#include <cxxabi.h>
++#ifndef _GLIBCXX_CDTOR_CALLABI // new in GCC 4.7 cxxabi.h
++#define _GLIBCXX_CDTOR_CALLABI
++#endif
++
++#ifdef _LIBCPP_VERSION
++
++namespace __cxxabiv1
++{
++    struct __class_type_info : public std::type_info
++    {
++        explicit __class_type_info( const char *__n ) : type_info( __n ) { }
++        virtual ~__class_type_info();
++    };
++
++    struct __si_class_type_info : public __class_type_info
++    {
++        explicit __si_class_type_info( const char *__n, const __class_type_info *__b ) :
++            __class_type_info( __n ), __base_type( __b ) { }
++        virtual ~__si_class_type_info();
++        const __class_type_info *__base_type;
++    };
++
++extern "C" void *__cxa_allocate_exception( std::size_t thrown_size ) _NOEXCEPT;
++
++extern "C" _LIBCPP_NORETURN void __cxa_throw(
++    void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) );
++}
++
++#else
++
+ namespace CPPU_CURRENT_NAMESPACE
+ {
+ 
+@@ -82,6 +113,13 @@
+     void *thrown_exception, void *tinfo, void (*dest) (void *) ) __attribute__((noreturn));
+ #endif
+ 
++}
++
++#endif
++
++namespace CPPU_CURRENT_NAMESPACE
++{
++
+ // -----
+ 
+ //==================================================================================================
+@@ -89,7 +128,11 @@
+     uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+ //==================================================================================================
+ void fillUnoException(
++#ifdef _LIBCPP_VERSION
++    __cxxabiv1::__cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
++#else
+     __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
++#endif
+ }
+ 
+ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+--- bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx.orig	2013-08-13 16:11:48.000000000 -0400
++++ bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx	2013-09-18 12:58:22.000000000 -0400
+@@ -291,7 +291,11 @@
+      catch (...)
+      {
+           // fill uno exception
++#ifdef _LIBCPP_VERSION
++        CPPU_CURRENT_NAMESPACE::fillUnoException( __cxxabiv1::__cxa_get_globals()->caughtExceptions, *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
++#else
+         fillUnoException( __cxa_get_globals()->caughtExceptions, *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
++#endif
+ 
+         // temporary params
+         for ( ; nTempIndizes--; )
+--- sal/inc/rtl/allocator.hxx.orig	2013-08-13 16:11:48.000000000 -0400
++++ sal/inc/rtl/allocator.hxx	2013-09-12 16:56:43.000000000 -0400
+@@ -125,7 +125,7 @@
+     }
+ 
+     //-----------------------------------------
+-#if defined HAVE_CXX11_PERFECT_FORWARDING
++#if defined(HAVE_CXX11_PERFECT_FORWARDING) && !defined(_LIBCPP_VERSION)
+     template< typename... Args >
+     void construct (pointer p, Args &&... value)
+     {
+--- sal/inc/sal/log.hxx.orig	2013-08-13 16:11:48.000000000 -0400
++++ sal/inc/sal/log.hxx	2013-09-13 05:27:31.000000000 -0400
+@@ -177,9 +177,13 @@
+ 
+     @since LibreOffice 3.5
+ */
++#ifdef _LIBCPP_VERSION
+ #define SAL_STREAM(stream) \
+-    (dynamic_cast< ::std::ostringstream & >(::std::ostringstream() << stream). \
+-     str())
++    (::std::ostringstream() << stream).str()
++#else
++#define SAL_STREAM(stream) \
++    (dynamic_cast< ::std::ostringstream & >(::std::ostringstream() << stream).str())
++#endif
+ 
+ /**
+     @page sal_log Basic logging functionality.
+--- slideshow/source/engine/activities/activitiesfactory.cxx.orig	2013-08-13 16:11:48.000000000 -0400
++++ slideshow/source/engine/activities/activitiesfactory.cxx	2013-09-13 05:47:27.000000000 -0400
+@@ -557,7 +557,7 @@
+         // interpolate between nIndex and nIndex+1 values
+         (*mpAnim)(
+             getPresentationValue(
+-                accumulate( maValues.back(),
++                accumulate<ValueType>( maValues.back(),
+                             mbCumulative ? nRepeatCount : 0,
+                             maInterpolator( maValues[ nIndex ],
+                                             maValues[ nIndex+1 ],
+@@ -577,7 +577,7 @@
+         // this is discrete, thus no lerp here.
+         (*mpAnim)(
+             getPresentationValue(
+-                accumulate( maValues.back(),
++                accumulate<ValueType>( maValues.back(),
+                             mbCumulative ? nRepeatCount : 0,
+                             maValues[ nFrame ] ) ) );
+     }

Added: head/editors/libreoffice/files/patch-bridges__source__cpp_uno__gcc3_linux_x86-64__callvirtualmethod.cxx
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/editors/libreoffice/files/patch-bridges__source__cpp_uno__gcc3_linux_x86-64__callvirtualmethod.cxx	Wed Sep 18 23:30:31 2013	(r327589)
@@ -0,0 +1,26 @@
+--- bridges/source/cpp_uno/gcc3_linux_x86-64/callvirtualmethod.cxx.orig	2013-08-13 16:11:48.000000000 -0400
++++ bridges/source/cpp_uno/gcc3_linux_x86-64/callvirtualmethod.cxx	2013-09-17 14:52:46.000000000 -0400
+@@ -63,11 +63,12 @@
+     pMethod = *((sal_uInt64 *)pMethod);
+ 
+     // Load parameters to stack, if necessary
++    sal_uInt64* pCallStack = NULL;
+     if ( nStack )
+     {
+         // 16-bytes aligned
+         sal_uInt32 nStackBytes = ( ( nStack + 1 ) >> 1 ) * 16;
+-        sal_uInt64 *pCallStack = (sal_uInt64 *) __builtin_alloca( nStackBytes );
++        pCallStack = (sal_uInt64 *) __builtin_alloca( nStackBytes );
+         std::memcpy( pCallStack, pStack, nStackBytes );
+     }
+ 
+@@ -112,7 +113,8 @@
+         "movsd %%xmm0, %2\n\t"
+         "movsd %%xmm1, %3\n\t"
+         : "=m" ( rax ), "=m" ( rdx ), "=m" ( xmm0 ), "=m" ( xmm1 )
+-        : "m" ( pMethod ), "m" ( pGPR ), "m" ( pFPR ), "m" ( nFPR )
++        : "m" ( pMethod ), "m" ( pGPR ), "m" ( pFPR ), "m" ( nFPR ),
++          "m" ( pCallStack ) // dummy input to prevent the compiler from optimizing the alloca out
+         : "rax", "rdi", "rsi", "rdx", "rcx", "r8", "r9", "r10", "r11",
+           "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7",
+           "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15"

Modified: head/editors/libreoffice/files/patch-configure.ac
==============================================================================
--- head/editors/libreoffice/files/patch-configure.ac	Wed Sep 18 23:20:50 2013	(r327588)
+++ head/editors/libreoffice/files/patch-configure.ac	Wed Sep 18 23:30:31 2013	(r327589)
@@ -1,5 +1,5 @@
 --- configure.ac.orig	2013-08-13 16:11:48.000000000 -0400
-+++ configure.ac	2013-08-16 18:17:08.000000000 -0400
++++ configure.ac	2013-09-13 17:50:41.000000000 -0400
 @@ -3637,7 +3637,7 @@
          PLATFORMID=freebsd_x86
          OUTPATH=unxfbsdi
@@ -43,22 +43,7 @@
  else
      AC_MSG_RESULT([internal])
      SYSTEM_LIBCMIS=NO
-@@ -7929,9 +7921,13 @@
-     AC_MSG_CHECKING([which hash container mdds shall use])
-     if test "x$HAVE_CXX0X" = "xTRUE"; then
-         MDDS_CPPFLAGS="-std=gnu++0x"
-+    else
-+        MDDS_CPPFLAGS="-std=gnu++98"
-+    fi
-+    if test "x`basename $GXX_INCLUDE_PATH 2>/dev/null`" != "x4.2"; then
-         AC_MSG_RESULT([std::unordered_map])
-     else
--        MDDS_CPPFLAGS="-DMDDS_HASH_CONTAINER_BOOST"
-+        MDDS_CPPFLAGS="$MDDS_CPPFLAGS -DMDDS_HASH_CONTAINER_BOOST"
-         AC_MSG_RESULT([boost::unordered_map])
-     fi
- 
-@@ -8298,7 +8294,7 @@
+@@ -8298,7 +8290,7 @@
  dnl ===================================================================
  
  AC_MSG_CHECKING([whether to enable graphite support])
@@ -67,7 +52,7 @@
      AC_MSG_RESULT([yes])
      ENABLE_GRAPHITE="TRUE"
      AC_MSG_CHECKING([which graphite to use])
-@@ -8550,8 +8546,8 @@
+@@ -8550,8 +8542,8 @@
      AC_MSG_RESULT([external])
      # Mac OS builds should get out without extra stuff is the Mac porters'
      # wish. And pkg-config is although Xcode ships a .pc for openssl
@@ -78,7 +63,7 @@
          OPENSSL_CFLAGS=
          OPENSSL_LIBS="-lssl -lcrypto"
      else
-@@ -8605,7 +8601,7 @@
+@@ -8605,7 +8597,7 @@
  if test "$with_system_orcus" = "yes"; then
      AC_MSG_RESULT([external])
      SYSTEM_LIBORCUS=YES
@@ -87,7 +72,7 @@
  else
      AC_MSG_RESULT([internal])
      BUILD_TYPE="$BUILD_TYPE ORCUS"
-@@ -10419,10 +10415,10 @@
+@@ -10419,10 +10411,10 @@
  
      dnl Check for Meta Object Compiler
  



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201309182330.r8INUVUo033050>