diff options
| author | Jung-uk Kim <jkim@FreeBSD.org> | 2013-09-18 23:30:31 +0000 | 
|---|---|---|
| committer | Jung-uk Kim <jkim@FreeBSD.org> | 2013-09-18 23:30:31 +0000 | 
| commit | 5f02ab9efad1fffdabf584bfde79bbc6960d373c (patch) | |
| tree | e9e47455e35fbdde1f7d4481c8e84eedb7c8e77b | |
| parent | - convert to USES (diff) | |
- 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.
Notes
Notes:
    svn path=/head/; revision=327589
4 files changed, 560 insertions, 51 deletions
| diff --git a/editors/libreoffice/Makefile b/editors/libreoffice/Makefile index 31eef4286406..1dfd2acfc77b 100644 --- a/editors/libreoffice/Makefile +++ b/editors/libreoffice/Makefile @@ -20,34 +20,34 @@ BUILD_DEPENDS=	p5-Archive-Zip>=0:${PORTSDIR}/archivers/p5-Archive-Zip \  		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 diff --git a/editors/libreoffice/files/extra-patch-libc++ b/editors/libreoffice/files/extra-patch-libc++ new file mode 100644 index 000000000000..7f1c287b49e5 --- /dev/null +++ b/editors/libreoffice/files/extra-patch-libc++ @@ -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 ] ) ) ); +     } diff --git a/editors/libreoffice/files/patch-bridges__source__cpp_uno__gcc3_linux_x86-64__callvirtualmethod.cxx b/editors/libreoffice/files/patch-bridges__source__cpp_uno__gcc3_linux_x86-64__callvirtualmethod.cxx new file mode 100644 index 000000000000..25a2a10117bb --- /dev/null +++ b/editors/libreoffice/files/patch-bridges__source__cpp_uno__gcc3_linux_x86-64__callvirtualmethod.cxx @@ -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" diff --git a/editors/libreoffice/files/patch-configure.ac b/editors/libreoffice/files/patch-configure.ac index 1c9a09b19b56..fc480dd7eba0 100644 --- a/editors/libreoffice/files/patch-configure.ac +++ b/editors/libreoffice/files/patch-configure.ac @@ -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 | 
