diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2017-10-25 19:52:08 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2017-11-26 18:15:55 +0100 |
commit | ae16870b2c84c116cde8279a47db106a4fa9d529 (patch) | |
tree | e5c1e79c38f967fd5cd69c0e3943bc29fa2f3791 /external/libcmis | |
parent | No need to test seriesStyle.m_xOldAPISeries n times (xmloff/chart) (diff) | |
download | core-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.mk | 11 | ||||
-rw-r--r-- | external/libcmis/UnpackedTarball_libcmis.mk | 1 | ||||
-rw-r--r-- | external/libcmis/c++17.patch.0 | 412 |
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. + */ |