summaryrefslogtreecommitdiffstats
path: root/external/libcmis
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2017-10-25 19:52:08 +0200
committerStephan Bergmann <sbergman@redhat.com>2017-11-26 18:15:55 +0100
commitae16870b2c84c116cde8279a47db106a4fa9d529 (patch)
treee5c1e79c38f967fd5cd69c0e3943bc29fa2f3791 /external/libcmis
parentNo need to test seriesStyle.m_xOldAPISeries n times (xmloff/chart) (diff)
downloadcore-ae16870b2c84c116cde8279a47db106a4fa9d529.tar.gz
core-ae16870b2c84c116cde8279a47db106a4fa9d529.zip
Build as C++17 when GCC/Clang supports it
...and the gperf being used no longer emits "register" in C++ code. Unlike Clang with -Wdynamic-exception-spec ignored, at least GCC 7.2 -std=gnu++17 always makes dynamic exception specs hard errors, which would cause errors both when building StaticLibrary_libcmis and when including libcmis/libcmis.hxx in ucb/source/ucp/cmis/. So patch away all dynamic exception specifications from all external/libcmis include files indirectly included via libcmis/libcmis.hxx, and (to silence the remaining dynamic exception specifications in the innards of external/libcmis, which I did not feel like also patching away) build StaticLibrary_libcmis as C++03 if necessary, and wait for upstream libcmis to eventually be ported to C++17. And external/firebird needs to be built with CXXFLAGS_CXX11 (which amounts to C++17 with this patch) since 9206a08ada00e8762c4a634f242bd566028964bb "Upgrade to ICU 60.1", so the relevant dynamic exception specifications had to be patched away from its innards. Change-Id: I3a0c9ec83c7c1d413559459631970f69ab977f31 Reviewed-on: https://gerrit.libreoffice.org/43851 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'external/libcmis')
-rw-r--r--external/libcmis/StaticLibrary_libcmis.mk11
-rw-r--r--external/libcmis/UnpackedTarball_libcmis.mk1
-rw-r--r--external/libcmis/c++17.patch.0412
3 files changed, 424 insertions, 0 deletions
diff --git a/external/libcmis/StaticLibrary_libcmis.mk b/external/libcmis/StaticLibrary_libcmis.mk
index b7e662465479..b3940b7a749a 100644
--- a/external/libcmis/StaticLibrary_libcmis.mk
+++ b/external/libcmis/StaticLibrary_libcmis.mk
@@ -23,6 +23,17 @@ $(eval $(call gb_StaticLibrary_add_cxxflags,libcmis,\
))
endif
+# Build as C++03 if necessary to avoid GCC C++17 "error: ISO C++1z does not
+# allow dynamic exception specifications", until upstream libcmis is ported to
+# C++17:
+ifeq ($(COM)-$(COM_IS_CLANG),GCC-)
+$(eval $(call gb_StaticLibrary_add_cxxflags,libcmis, \
+ $(if $(filter -std=gnu++17 -std=gnu++1z -std=c++17 -std=c++1z, \
+ $(CXXFLAGS_CXX11)), \
+ $(gb_CXX03FLAGS)) \
+))
+endif
+
$(eval $(call gb_StaticLibrary_set_include,libcmis, \
-I$(call gb_UnpackedTarball_get_dir,libcmis/src/libcmis) \
$$(INCLUDE) \
diff --git a/external/libcmis/UnpackedTarball_libcmis.mk b/external/libcmis/UnpackedTarball_libcmis.mk
index 3730888bf6b5..8ce0b03d10c4 100644
--- a/external/libcmis/UnpackedTarball_libcmis.mk
+++ b/external/libcmis/UnpackedTarball_libcmis.mk
@@ -20,6 +20,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,libcmis, \
external/libcmis/libcmis-fix-google-drive-2.patch \
external/libcmis/libcmis-sharepoint-repository-root.patch \
external/libcmis/libcmis-fix-error-handling.patch \
+ external/libcmis/c++17.patch.0 \
))
ifeq ($(OS),WNT)
diff --git a/external/libcmis/c++17.patch.0 b/external/libcmis/c++17.patch.0
new file mode 100644
index 000000000000..e2e90f581610
--- /dev/null
+++ b/external/libcmis/c++17.patch.0
@@ -0,0 +1,412 @@
+--- src/libcmis/allowable-actions.cxx
++++ src/libcmis/allowable-actions.cxx
+@@ -62,7 +62,7 @@
+ }
+ }
+
+- ObjectAction::Type ObjectAction::parseType( string type ) throw ( Exception )
++ ObjectAction::Type ObjectAction::parseType( string type )
+ {
+ Type value = DeleteObject;
+ if ( type == "canDeleteObject" )
+--- src/libcmis/allowable-actions.hxx
++++ src/libcmis/allowable-actions.hxx
+@@ -92,7 +92,7 @@
+ /** Parses the permission name into one of the enum values or throws
+ an exception for invalid input strings.
+ */
+- static Type parseType( std::string type ) throw ( Exception );
++ static Type parseType( std::string type );
+
+ };
+
+--- src/libcmis/document.hxx
++++ src/libcmis/document.hxx
+@@ -56,7 +56,7 @@
+
+ @return the parents folder if any.
+ */
+- virtual std::vector< boost::shared_ptr< Folder > > getParents( ) throw ( Exception ) = 0;
++ virtual std::vector< boost::shared_ptr< Folder > > getParents( ) = 0;
+
+ /** Get the content stream without using a temporary file.
+
+@@ -74,7 +74,7 @@
+ guaranteed.
+ */
+ virtual boost::shared_ptr< std::istream > getContentStream( std::string streamId = std::string( ) )
+- throw ( Exception ) = 0;
++ = 0;
+
+ /** Set or replace the content stream of the document.
+
+@@ -88,7 +88,7 @@
+ capability.
+ */
+ virtual void setContentStream( boost::shared_ptr< std::ostream > os, std::string contentType,
+- std::string filename, bool overwrite = true ) throw ( Exception ) = 0;
++ std::string filename, bool overwrite = true ) = 0;
+
+ /** Get the content mime type.
+ */
+@@ -107,12 +107,12 @@
+
+ \return the Private Working Copy document
+ */
+- virtual boost::shared_ptr< Document > checkOut( ) throw ( Exception ) = 0;
++ virtual boost::shared_ptr< Document > checkOut( ) = 0;
+
+ /** Cancels the checkout if the document is a private working copy, or
+ throws an exception.
+ */
+- virtual void cancelCheckout( ) throw ( Exception ) = 0;
++ virtual void cancelCheckout( ) = 0;
+
+ /** Check in the private working copy and create a new version or throw
+ an exception.
+@@ -131,9 +131,9 @@
+ virtual boost::shared_ptr< Document > checkIn( bool isMajor, std::string comment,
+ const std::map< std::string, PropertyPtr >& properties,
+ boost::shared_ptr< std::ostream > stream,
+- std::string contentType, std::string fileName ) throw ( Exception ) = 0;
++ std::string contentType, std::string fileName ) = 0;
+
+- virtual std::vector< boost::shared_ptr< Document > > getAllVersions( ) throw ( Exception ) = 0;
++ virtual std::vector< boost::shared_ptr< Document > > getAllVersions( ) = 0;
+
+ // virtual methods form Object
+ virtual std::vector< std::string > getPaths( );
+--- src/libcmis/folder.cxx
++++ src/libcmis/folder.cxx
+@@ -40,7 +40,7 @@
+ return paths;
+ }
+
+- libcmis::FolderPtr Folder::getFolderParent( ) throw ( libcmis::Exception )
++ libcmis::FolderPtr Folder::getFolderParent( )
+ {
+ if ( getAllowableActions( ).get() && !getAllowableActions()->isAllowed( libcmis::ObjectAction::GetFolderParent ) )
+ throw libcmis::Exception( string( "GetFolderParent not allowed on node " ) + getId() );
+--- src/libcmis/folder.hxx
++++ src/libcmis/folder.hxx
+@@ -59,20 +59,20 @@
+
+ virtual std::vector< std::string > getPaths( );
+
+- virtual ::boost::shared_ptr< Folder > getFolderParent( ) throw ( Exception );
+- virtual std::vector< ObjectPtr > getChildren( ) throw ( Exception ) = 0;
++ virtual ::boost::shared_ptr< Folder > getFolderParent( );
++ virtual std::vector< ObjectPtr > getChildren( ) = 0;
+ virtual std::string getParentId( );
+ virtual std::string getPath( );
+
+ virtual bool isRootFolder( );
+
+ virtual ::boost::shared_ptr< Folder > createFolder( const std::map< std::string, PropertyPtr >& properties )
+- throw ( libcmis::Exception ) = 0;
++ = 0;
+ virtual ::boost::shared_ptr< Document > createDocument( const std::map< std::string, PropertyPtr >& properties,
+- boost::shared_ptr< std::ostream > os, std::string contentType, std::string fileName ) throw ( Exception ) = 0;
++ boost::shared_ptr< std::ostream > os, std::string contentType, std::string fileName ) = 0;
+
+ virtual std::vector< std::string > removeTree( bool allVersion = true, UnfileObjects::Type unfile = UnfileObjects::Delete,
+- bool continueOnError = false ) throw ( Exception ) = 0;
++ bool continueOnError = false ) = 0;
+
+ virtual std::string toString( );
+ };
+--- src/libcmis/object.cxx
++++ src/libcmis/object.cxx
+@@ -226,7 +226,6 @@
+ }
+
+ ObjectPtr Object::addSecondaryType( string id, PropertyPtrMap properties )
+- throw ( Exception )
+ {
+ // First make sure the cmis:secondaryObjectTypeIds property can be defined
+ map< string, PropertyTypePtr >& propertyTypes = getTypeDescription( )->
+@@ -253,7 +252,7 @@
+ return updateProperties( newProperties );
+ }
+
+- ObjectPtr Object::removeSecondaryType( string id ) throw ( Exception )
++ ObjectPtr Object::removeSecondaryType( string id )
+ {
+ // First make sure the cmis:secondaryObjectTypeIds property can be defined
+ map< string, PropertyTypePtr >& propertyTypes = getTypeDescription( )->
+@@ -297,12 +296,12 @@
+ return m_typeDescription;
+ }
+
+- vector< RenditionPtr> Object::getRenditions( string /*filter*/ ) throw ( Exception )
++ vector< RenditionPtr> Object::getRenditions( string /*filter*/ )
+ {
+ return m_renditions;
+ }
+
+- string Object::getThumbnailUrl( ) throw ( Exception )
++ string Object::getThumbnailUrl( )
+ {
+ string url;
+ vector< RenditionPtr > renditions = getRenditions( );
+--- src/libcmis/object.hxx
++++ src/libcmis/object.hxx
+@@ -129,8 +129,7 @@
+ */
+ virtual boost::shared_ptr< Object > addSecondaryType(
+ std::string id,
+- PropertyPtrMap properties )
+- throw ( Exception );
++ PropertyPtrMap properties );
+
+ /** Convenience function removing a secondary type from the object.
+
+@@ -154,8 +153,7 @@
+ to throw a constraint exception if it doesn't allow the
+ operation.
+ */
+- virtual boost::shared_ptr< Object > removeSecondaryType( std::string id )
+- throw ( Exception );
++ virtual boost::shared_ptr< Object > removeSecondaryType( std::string id );
+
+ /** Gives access to the properties of the object.
+
+@@ -179,8 +177,7 @@
+ \attention
+ The streamId of the rendition is used in getContentStream( )
+ */
+- virtual std::vector< RenditionPtr> getRenditions( std::string filter = std::string( ) )
+- throw ( Exception );
++ virtual std::vector< RenditionPtr> getRenditions( std::string filter = std::string( ) );
+ virtual AllowableActionsPtr getAllowableActions( ) { return m_allowableActions; }
+
+ /** Update the object properties and return the updated object.
+@@ -191,21 +188,21 @@
+ are still two different instances to ease memory handling.
+ */
+ virtual boost::shared_ptr< Object > updateProperties(
+- const PropertyPtrMap& properties ) throw ( Exception ) = 0;
++ const PropertyPtrMap& properties ) = 0;
+
+ virtual ObjectTypePtr getTypeDescription( );
+
+ /** Reload the data from the server.
+ */
+- virtual void refresh( ) throw ( Exception ) = 0;
++ virtual void refresh( ) = 0;
+ virtual time_t getRefreshTimestamp( ) { return m_refreshTimestamp; }
+
+- virtual void remove( bool allVersions = true ) throw ( Exception ) = 0;
++ virtual void remove( bool allVersions = true ) = 0;
+
+- virtual void move( boost::shared_ptr< Folder > source, boost::shared_ptr< Folder > destination ) throw ( Exception ) = 0;
++ virtual void move( boost::shared_ptr< Folder > source, boost::shared_ptr< Folder > destination ) = 0;
+
+
+- virtual std::string getThumbnailUrl( ) throw ( Exception );
++ virtual std::string getThumbnailUrl( );
+
+ /** Dump the object as a string for debugging or display purpose.
+ */
+--- src/libcmis/object-type.cxx
++++ src/libcmis/object-type.cxx
+@@ -293,22 +293,22 @@
+ }
+ }
+
+- void ObjectType::refresh( ) throw ( Exception )
++ void ObjectType::refresh( )
+ {
+ throw Exception( "ObjectType::refresh() shouldn't be called" );
+ }
+
+- ObjectTypePtr ObjectType::getParentType( ) throw ( Exception )
++ ObjectTypePtr ObjectType::getParentType( )
+ {
+ throw Exception( "ObjectType::getParentType() shouldn't be called" );
+ }
+
+- ObjectTypePtr ObjectType::getBaseType( ) throw ( Exception )
++ ObjectTypePtr ObjectType::getBaseType( )
+ {
+ throw Exception( "ObjectType::getBaseType() shouldn't be called" );
+ }
+
+- vector< ObjectTypePtr > ObjectType::getChildren( ) throw ( Exception )
++ vector< ObjectTypePtr > ObjectType::getChildren( )
+ {
+ throw Exception( "ObjectType::getChildren() shouldn't be called" );
+ }
+--- src/libcmis/object-type.hxx
++++ src/libcmis/object-type.hxx
+@@ -94,7 +94,7 @@
+ This method needs to be implemented in subclasses or it will
+ do nothing
+ */
+- virtual void refresh( ) throw ( Exception );
++ virtual void refresh( );
+ virtual time_t getRefreshTimestamp( ) const;
+
+ std::string getId( ) const;
+@@ -104,9 +104,9 @@
+ std::string getQueryName( ) const;
+ std::string getDescription( ) const;
+
+- virtual boost::shared_ptr< ObjectType > getParentType( ) throw ( Exception );
+- virtual boost::shared_ptr< ObjectType > getBaseType( ) throw ( Exception );
+- virtual std::vector< boost::shared_ptr< ObjectType > > getChildren( ) throw ( Exception );
++ virtual boost::shared_ptr< ObjectType > getParentType( );
++ virtual boost::shared_ptr< ObjectType > getBaseType( );
++ virtual std::vector< boost::shared_ptr< ObjectType > > getChildren( );
+
+ /** Get the parent type id without extracting the complete parent type from
+ the repository. This is mainly provided for performance reasons.
+--- src/libcmis/session-factory.cxx
++++ src/libcmis/session-factory.cxx
+@@ -57,7 +57,7 @@
+
+ Session* SessionFactory::createSession( string bindingUrl, string username,
+ string password, string repository, bool noSslCheck,
+- libcmis::OAuth2DataPtr oauth2, bool verbose ) throw ( Exception )
++ libcmis::OAuth2DataPtr oauth2, bool verbose )
+ {
+ Session* session = NULL;
+
+@@ -138,7 +138,7 @@
+ }
+
+ vector< RepositoryPtr > SessionFactory::getRepositories( string bindingUrl,
+- string username, string password, bool verbose ) throw ( Exception )
++ string username, string password, bool verbose )
+ {
+ vector< RepositoryPtr > repos;
+
+--- src/libcmis/session-factory.hxx
++++ src/libcmis/session-factory.hxx
+@@ -128,7 +128,7 @@
+ std::string password = std::string( ),
+ std::string repositoryId = std::string( ),
+ bool noSslCheck = false,
+- OAuth2DataPtr oauth2 = OAuth2DataPtr(), bool verbose = false ) throw ( Exception );
++ OAuth2DataPtr oauth2 = OAuth2DataPtr(), bool verbose = false );
+
+ /**
+ Gets the informations of the repositories on the server.
+@@ -142,7 +142,7 @@
+ static std::vector< RepositoryPtr > getRepositories( std::string bindingUrl,
+ std::string username = std::string( ),
+ std::string password = std::string( ),
+- bool verbose = false ) throw ( Exception );
++ bool verbose = false );
+ };
+ }
+
+--- src/libcmis/session.hxx
++++ src/libcmis/session.hxx
+@@ -47,7 +47,7 @@
+
+ /** Get the current repository.
+ */
+- virtual RepositoryPtr getRepository( ) throw ( Exception ) = 0;
++ virtual RepositoryPtr getRepository( ) = 0;
+
+ virtual std::vector< RepositoryPtr > getRepositories( ) = 0;
+
+@@ -61,27 +61,27 @@
+
+ /** Get the Root folder of the repository
+ */
+- virtual FolderPtr getRootFolder() throw ( Exception )= 0;
++ virtual FolderPtr getRootFolder() = 0;
+
+ /** Get a CMIS object from its ID.
+ */
+- virtual ObjectPtr getObject( std::string id ) throw ( Exception ) = 0;
++ virtual ObjectPtr getObject( std::string id ) = 0;
+
+ /** Get a CMIS object from one of its path.
+ */
+- virtual ObjectPtr getObjectByPath( std::string path ) throw ( Exception ) = 0;
++ virtual ObjectPtr getObjectByPath( std::string path ) = 0;
+
+ /** Get a CMIS folder from its ID.
+ */
+- virtual libcmis::FolderPtr getFolder( std::string id ) throw ( Exception ) = 0;
++ virtual libcmis::FolderPtr getFolder( std::string id ) = 0;
+
+ /** Get a CMIS object type from its ID.
+ */
+- virtual ObjectTypePtr getType( std::string id ) throw ( Exception ) = 0;
++ virtual ObjectTypePtr getType( std::string id ) = 0;
+
+ /** Get all the CMIS base object types known by the server.
+ */
+- virtual std::vector< ObjectTypePtr > getBaseTypes( ) throw ( Exception ) = 0;
++ virtual std::vector< ObjectTypePtr > getBaseTypes( ) = 0;
+
+ /** Enable or disable the SSL certificate verification.
+
+--- src/libcmis/xml-utils.cxx
++++ src/libcmis/xml-utils.cxx
+@@ -361,7 +361,6 @@
+ string getXmlNodeAttributeValue( xmlNodePtr node,
+ const char* attributeName,
+ const char* defaultValue )
+- throw ( Exception )
+ {
+ xmlChar* xmlStr = xmlGetProp( node, BAD_CAST( attributeName ) );
+ if ( xmlStr == NULL )
+@@ -450,7 +449,7 @@
+ return str;
+ }
+
+- bool parseBool( string boolStr ) throw ( Exception )
++ bool parseBool( string boolStr )
+ {
+ bool value = false;
+ if ( boolStr == "true" || boolStr == "1" )
+@@ -462,7 +461,7 @@
+ return value;
+ }
+
+- long parseInteger( string intStr ) throw ( Exception )
++ long parseInteger( string intStr )
+ {
+ char* end;
+ errno = 0;
+@@ -481,7 +480,7 @@
+ return value;
+ }
+
+- double parseDouble( string doubleStr ) throw ( Exception )
++ double parseDouble( string doubleStr )
+ {
+ char* end;
+ errno = 0;
+--- src/libcmis/xml-utils.hxx
++++ src/libcmis/xml-utils.hxx
+@@ -132,8 +132,7 @@
+ */
+ std::string getXmlNodeAttributeValue( xmlNodePtr node,
+ const char* attributeName,
+- const char* defaultValue = NULL )
+- throw ( Exception );
++ const char* defaultValue = NULL );
+
+ /** Parse a xsd:dateTime string and return the corresponding UTC posix time.
+ */
+@@ -142,11 +141,11 @@
+ /// Write a UTC time object to an xsd:dateTime string
+ std::string writeDateTime( boost::posix_time::ptime time );
+
+- bool parseBool( std::string str ) throw ( Exception );
++ bool parseBool( std::string str );
+
+- long parseInteger( std::string str ) throw ( Exception );
++ long parseInteger( std::string str );
+
+- double parseDouble( std::string str ) throw ( Exception );
++ double parseDouble( std::string str );
+
+ /** Trim spaces on the left and right of a string.
+ */