From d7ab19a268cc8d869d8b3702ecfaab5d32933250 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 7 Dec 2021 12:29:53 -0500 Subject: [PATCH] import libreoffice-7.1.7.2-3.el9 --- .gitignore | 6 +- .libreoffice.metadata | 6 +- ...d-DOCTYPE-from-odk-examples-xcu-file.patch | 36 - ...250-don-t-share-adjustments-between-.patch | 123 ++ ...567-restore-focus-to-the-usual-frame.patch | 63 + ...0-gdrive-support-w-oAuth-and-Drive-A.patch | 1262 +++++++++++++++++ ...uldn-t-get-prefixed-to-become-libreo.patch | 45 + ...-fix-comparison-when-searching-cache.patch | 40 + ...pp-cpp-work-for-gcc-cpp-as-a-ucpp-re.patch | 111 ++ ...n-t-use-undo-array-s-m_pOutlineNodes.patch | 72 + SOURCES/libreoffice-7.1.5.2.tar.xz.asc | 16 - SOURCES/libreoffice-7.1.7.2.tar.xz.asc | 16 + SOURCES/libreoffice-help-7.1.5.2.tar.xz.asc | 16 - SOURCES/libreoffice-help-7.1.7.2.tar.xz.asc | 16 + ...ibreoffice-translations-7.1.5.2.tar.xz.asc | 16 - ...ibreoffice-translations-7.1.7.2.tar.xz.asc | 16 + SPECS/libreoffice.spec | 40 +- 17 files changed, 1801 insertions(+), 99 deletions(-) delete mode 100644 SOURCES/0001-Remove-unused-DOCTYPE-from-odk-examples-xcu-file.patch create mode 100644 SOURCES/0001-Resolves-tdf-140250-don-t-share-adjustments-between-.patch create mode 100644 SOURCES/0001-Resolves-tdf-145567-restore-focus-to-the-usual-frame.patch create mode 100644 SOURCES/0001-Revert-tdf-101630-gdrive-support-w-oAuth-and-Drive-A.patch create mode 100644 SOURCES/0001-document-new-shouldn-t-get-prefixed-to-become-libreo.patch create mode 100644 SOURCES/0001-fix-comparison-when-searching-cache.patch create mode 100644 SOURCES/0001-make-with-idlc-cpp-cpp-work-for-gcc-cpp-as-a-ucpp-re.patch create mode 100644 SOURCES/0001-tdf-121546-sw-don-t-use-undo-array-s-m_pOutlineNodes.patch delete mode 100644 SOURCES/libreoffice-7.1.5.2.tar.xz.asc create mode 100644 SOURCES/libreoffice-7.1.7.2.tar.xz.asc delete mode 100644 SOURCES/libreoffice-help-7.1.5.2.tar.xz.asc create mode 100644 SOURCES/libreoffice-help-7.1.7.2.tar.xz.asc delete mode 100644 SOURCES/libreoffice-translations-7.1.5.2.tar.xz.asc create mode 100644 SOURCES/libreoffice-translations-7.1.7.2.tar.xz.asc diff --git a/.gitignore b/.gitignore index e9b21b5..78421a1 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,6 @@ SOURCES/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip SOURCES/dtoa-20180411.tgz SOURCES/f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf SOURCES/gpgkey-C2839ECAD9408FBE9531C3E9F434A1EFAFEEAEA3.gpg.asc -SOURCES/libreoffice-7.1.5.2.tar.xz -SOURCES/libreoffice-help-7.1.5.2.tar.xz -SOURCES/libreoffice-translations-7.1.5.2.tar.xz +SOURCES/libreoffice-7.1.7.2.tar.xz +SOURCES/libreoffice-help-7.1.7.2.tar.xz +SOURCES/libreoffice-translations-7.1.7.2.tar.xz diff --git a/.libreoffice.metadata b/.libreoffice.metadata index a8161ce..607a381 100644 --- a/.libreoffice.metadata +++ b/.libreoffice.metadata @@ -4,6 +4,6 @@ 083509db5ad9d1680830be9add727d58b54ca0d3 SOURCES/dtoa-20180411.tgz dd55efd721df8a013709e27836bdf26623e5320e SOURCES/f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf 7b5fd93d787fbc6d9c2d4025d543730ee8dc4559 SOURCES/gpgkey-C2839ECAD9408FBE9531C3E9F434A1EFAFEEAEA3.gpg.asc -712834480f3e1537edaf95a9512f8889e05242e2 SOURCES/libreoffice-7.1.5.2.tar.xz -6d8f78f168f6cf1bbe21c96abf073cc8c7001509 SOURCES/libreoffice-help-7.1.5.2.tar.xz -881371920c0bfad2dcb8bb697bd7a0d14b8f93e3 SOURCES/libreoffice-translations-7.1.5.2.tar.xz +f78cb0b9fe9d264ccab701bd310c6b5cafc5310d SOURCES/libreoffice-7.1.7.2.tar.xz +1fbdfbc179ffece0b018d41ae4ba9a85abbfae42 SOURCES/libreoffice-help-7.1.7.2.tar.xz +6b3b281e626680fca62f2bddbe1c19cc8eb8225e SOURCES/libreoffice-translations-7.1.7.2.tar.xz diff --git a/SOURCES/0001-Remove-unused-DOCTYPE-from-odk-examples-xcu-file.patch b/SOURCES/0001-Remove-unused-DOCTYPE-from-odk-examples-xcu-file.patch deleted file mode 100644 index 4b999c0..0000000 --- a/SOURCES/0001-Remove-unused-DOCTYPE-from-odk-examples-xcu-file.patch +++ /dev/null @@ -1,36 +0,0 @@ -From a344462ccb324b14dbf17391146f78d84307cbec Mon Sep 17 00:00:00 2001 -From: Stephan Bergmann -Date: Tue, 22 Jun 2021 14:14:34 +0200 -Subject: [PATCH] Remove unused DOCTYPE from odk/examples xcu file - -The declared entities have apparently never been referenced ever since the -file's introduction in 9fa09d43d0dc0ec0ac71bad31b85ce7fc302ee90 "INTEGRATION: -CWS sdkinspector2". (And at least xmlreader skips and ignores the content of -such document type declarations anyway.) - -Change-Id: I8263200f52bb5f1692090995574619f9c0ec478f -Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117658 -Tested-by: Jenkins -Reviewed-by: Stephan Bergmann ---- - odk/examples/java/Inspector/ObjectInspector.xcu | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/odk/examples/java/Inspector/ObjectInspector.xcu b/odk/examples/java/Inspector/ObjectInspector.xcu -index b7696086629c..d6fb08a0f8ce 100644 ---- a/odk/examples/java/Inspector/ObjectInspector.xcu -+++ b/odk/examples/java/Inspector/ObjectInspector.xcu -@@ -16,10 +16,6 @@ - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - --> -- -- --]> - +Date: Sun, 14 Nov 2021 14:59:38 +0000 +Subject: [PATCH] Resolves: tdf#140250 don't share adjustments between + differerent spinbuttons + +Change-Id: Ib684c746ff3176cf45ea9364efc12f2d6dde1f70 +--- + cui/uiconfig/ui/breaknumberoption.ui | 18 ++++++++++++++++-- + cui/uiconfig/ui/calloutpage.ui | 14 ++++++++++++-- + svx/uiconfig/ui/sidebareffect.ui | 7 ++++++- + 3 files changed, 34 insertions(+), 5 deletions(-) + +diff --git a/cui/uiconfig/ui/breaknumberoption.ui b/cui/uiconfig/ui/breaknumberoption.ui +index 2641babeeb5d..23fe294ec702 100644 +--- a/cui/uiconfig/ui/breaknumberoption.ui ++++ b/cui/uiconfig/ui/breaknumberoption.ui +@@ -9,6 +9,20 @@ + 1 + 10 + ++ ++ 2 ++ 9 ++ 1 ++ 1 ++ 10 ++ ++ ++ 2 ++ 9 ++ 1 ++ 1 ++ 10 ++ + + False + 6 +@@ -134,7 +148,7 @@ + True + start + True +- adjustment1 ++ adjustment2 + True + + +@@ -179,7 +193,7 @@ + True + start + True +- adjustment1 ++ adjustment3 + True + + +diff --git a/cui/uiconfig/ui/calloutpage.ui b/cui/uiconfig/ui/calloutpage.ui +index 87d4eff64eb4..00898dc3390c 100644 +--- a/cui/uiconfig/ui/calloutpage.ui ++++ b/cui/uiconfig/ui/calloutpage.ui +@@ -7,6 +7,16 @@ + 0.5 + 10 + ++ ++ 2400 ++ 0.5 ++ 10 ++ ++ ++ 2400 ++ 0.5 ++ 10 ++ + + True + False +@@ -231,7 +241,7 @@ + True + True + 0.00 +- adjustment1 ++ adjustment2 + 2 + True + +@@ -277,7 +287,7 @@ + True + True + 0.00 +- adjustment1 ++ adjustment3 + 2 + True + +diff --git a/svx/uiconfig/ui/sidebareffect.ui b/svx/uiconfig/ui/sidebareffect.ui +index 0e633242cd5c..1e041a2a8726 100644 +--- a/svx/uiconfig/ui/sidebareffect.ui ++++ b/svx/uiconfig/ui/sidebareffect.ui +@@ -12,6 +12,11 @@ + 1 + 10 + ++ ++ 150 ++ 1 ++ 10 ++ + + + True +@@ -195,7 +200,7 @@ + True + True + True +- adjustment1 ++ adjustment3 + + + 1 +-- +2.33.1 + diff --git a/SOURCES/0001-Resolves-tdf-145567-restore-focus-to-the-usual-frame.patch b/SOURCES/0001-Resolves-tdf-145567-restore-focus-to-the-usual-frame.patch new file mode 100644 index 0000000..cced1b7 --- /dev/null +++ b/SOURCES/0001-Resolves-tdf-145567-restore-focus-to-the-usual-frame.patch @@ -0,0 +1,63 @@ +From ea6cfca48017b76bfeb8898e6d9e47b3011a3add Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Sat, 6 Nov 2021 21:32:21 +0000 +Subject: [PATCH] Resolves: tdf#145567 restore focus to the usual frame focus + widget + +when tearing down the start center. Don't leave the focus in an +arbitrary widget. + +Change-Id: I82c30c94121dc43b2ea1b4fbc66a0a3e79f7e664 +--- + vcl/unx/gtk3/gtk3gtkinst.cxx | 28 ++++++++++++++++++++++++++++ + 1 file changed, 28 insertions(+) + +diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx +index a5d233e2f95e..0fddb27aaa2d 100644 +--- a/vcl/unx/gtk3/gtk3gtkinst.cxx ++++ b/vcl/unx/gtk3/gtk3gtkinst.cxx +@@ -1899,6 +1899,26 @@ GdkDragAction VclToGdk(sal_Int8 dragOperation) + return eRet; + } + ++GtkWindow* get_active_window() ++{ ++ GtkWindow* pFocus = nullptr; ++ ++ GList* pList = gtk_window_list_toplevels(); ++ ++ for (GList* pEntry = pList; pEntry; pEntry = pEntry->next) ++ { ++ if (gtk_window_has_toplevel_focus(GTK_WINDOW(pEntry->data))) ++ { ++ pFocus = GTK_WINDOW(pEntry->data); ++ break; ++ } ++ } ++ ++ g_list_free(pList); ++ ++ return pFocus; ++} ++ + class GtkInstanceWidget : public virtual weld::Widget + { + protected: +@@ -16635,6 +16655,14 @@ private: + // rehook handler and let vcl cycle its own way through this widget's + // children + pFrame->AllowCycleFocusOut(); ++ ++ // tdf#145567 if the focus is in this hierarchy then, now that we are tearing down, ++ // move focus to the usual focus candidate for the frame ++ GtkWindow* pFocusWin = get_active_window(); ++ GtkWidget* pFocus = pFocusWin ? gtk_window_get_focus(pFocusWin) : nullptr; ++ bool bHasFocus = pFocus && gtk_widget_is_ancestor(pFocus, pTopLevel); ++ if (bHasFocus) ++ pFrame->GrabFocus(); + } + + static void signalUnmap(GtkWidget*, gpointer user_data) +-- +2.33.1 + diff --git a/SOURCES/0001-Revert-tdf-101630-gdrive-support-w-oAuth-and-Drive-A.patch b/SOURCES/0001-Revert-tdf-101630-gdrive-support-w-oAuth-and-Drive-A.patch new file mode 100644 index 0000000..2399026 --- /dev/null +++ b/SOURCES/0001-Revert-tdf-101630-gdrive-support-w-oAuth-and-Drive-A.patch @@ -0,0 +1,1262 @@ +From 12f14a6c9d2b5034df53646bbc57774c0c83ecaa Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 3 Sep 2021 09:13:03 +0100 +Subject: [PATCH] Revert "tdf#101630 - gdrive support w/oAuth and Drive API v3" + +This reverts commit 854c03ebc94aae205b85d0c9d342048baf93e9a9. +--- + Repository.mk | 2 +- + config_host/config_oauth2.h.in | 8 +- + external/libcmis/UnpackedTarball_libcmis.mk | 2 - + external/libcmis/libcmis_gdrive.patch.1 | 702 ------------------ + .../libcmis_oauth_pw_as_refreshtoken.patch.1 | 185 ----- + .../data/org/openoffice/Office/Common.xcu | 2 +- + ucb/source/ucp/cmis/auth_provider.cxx | 130 +--- + ucb/source/ucp/cmis/auth_provider.hxx | 8 +- + ucb/source/ucp/cmis/cmis_content.cxx | 21 +- + ucb/source/ucp/cmis/cmis_repo_content.cxx | 4 +- + 10 files changed, 56 insertions(+), 1008 deletions(-) + delete mode 100644 external/libcmis/libcmis_gdrive.patch.1 + delete mode 100644 external/libcmis/libcmis_oauth_pw_as_refreshtoken.patch.1 + +diff --git a/Repository.mk b/Repository.mk +index 23c268775fcf..c887d9b4297d 100644 +--- a/Repository.mk ++++ b/Repository.mk +@@ -432,7 +432,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \ + ucpexpand1 \ + ucpext \ + ucpimage \ +- $(if $(ENABLE_LIBCMIS),ucpcmis1) \ ++ ucpcmis1 \ + ucptdoc1 \ + unordf \ + unoxml \ +diff --git a/config_host/config_oauth2.h.in b/config_host/config_oauth2.h.in +index 9945dda3dda5..a95015b41f3e 100644 +--- a/config_host/config_oauth2.h.in ++++ b/config_host/config_oauth2.h.in +@@ -15,13 +15,13 @@ + + + /* Google Drive settings */ +-#define GDRIVE_BASE_URL "https://www.googleapis.com/drive/v3" ++#define GDRIVE_BASE_URL "https://www.googleapis.com/drive/v2" + #define GDRIVE_CLIENT_ID "" + #define GDRIVE_CLIENT_SECRET "" +-#define GDRIVE_AUTH_URL "https://accounts.google.com/o/oauth2/v2/auth" +-#define GDRIVE_TOKEN_URL "https://oauth2.googleapis.com/token" ++#define GDRIVE_AUTH_URL "https://accounts.google.com/o/oauth2/auth" ++#define GDRIVE_TOKEN_URL "https://accounts.google.com/o/oauth2/token" + #define GDRIVE_REDIRECT_URI "urn:ietf:wg:oauth:2.0:oob" +-#define GDRIVE_SCOPE "https://www.googleapis.com/auth/drive.file" ++#define GDRIVE_SCOPE "https://www.googleapis.com/auth/drive" + + + /* Alfresco Cloud */ +diff --git a/external/libcmis/UnpackedTarball_libcmis.mk b/external/libcmis/UnpackedTarball_libcmis.mk +index 8398853e4511..a5be3078c95a 100644 +--- a/external/libcmis/UnpackedTarball_libcmis.mk ++++ b/external/libcmis/UnpackedTarball_libcmis.mk +@@ -17,8 +17,6 @@ $(eval $(call gb_UnpackedTarball_add_patches,libcmis, \ + external/libcmis/libcmis-libxml2_compatibility.patch \ + external/libcmis/0001-rename-class-GetObject-to-avoid-name-clash-on-Window.patch \ + external/libcmis/libcmis_onedrive.patch \ +- external/libcmis/libcmis_oauth_pw_as_refreshtoken.patch.1 \ +- external/libcmis/libcmis_gdrive.patch.1 \ + )) + + # vim: set noet sw=4 ts=4: +diff --git a/external/libcmis/libcmis_gdrive.patch.1 b/external/libcmis/libcmis_gdrive.patch.1 +deleted file mode 100644 +index 24ff65d1ef15..000000000000 +--- a/external/libcmis/libcmis_gdrive.patch.1 ++++ /dev/null +@@ -1,702 +0,0 @@ +-diff -ur libcmis.org/src/libcmis/gdrive-document.cxx libcmis/src/libcmis/gdrive-document.cxx +---- libcmis.org/src/libcmis/gdrive-document.cxx 2021-07-27 19:11:02.679247008 +0200 +-+++ libcmis/src/libcmis/gdrive-document.cxx 2021-07-27 19:11:18.873246420 +0200 +-@@ -145,23 +145,17 @@ +- { +- if ( !os.get( ) ) +- throw libcmis::Exception( "Missing stream" ); +-- if ( !isImmutable( ) ) +-- throw libcmis::Exception( string ( "Document " + getId( )+ +-- " is not editable" ) ); +-- string putUrl = getUploadUrl( ) + getId( ); +-- putUrl += "?uploadType=media"; +-- +-- // If it's a Google document, convert it +-- if ( isGoogleDoc( ) ) +-- putUrl += "&convert=true"; +-+ +-+ string putUrl = GDRIVE_UPLOAD_LINK + getId( ) + "?uploadType=media"; +- +- // Upload stream +- boost::shared_ptr< istream> is ( new istream ( os->rdbuf( ) ) ); +- vector headers; +- headers.push_back( string( "Content-Type: " ) + contentType ); +-+ string res; +- try +- { +-- getSession()->httpPutRequest( putUrl, *is, headers ); +-+ res = getSession()->httpPatchRequest( putUrl, *is, headers )->getStream()->str(); +- } +- catch ( const CurlException& e ) +- { +-@@ -181,35 +175,10 @@ +- { +- if ( !os.get( ) ) +- throw libcmis::Exception( "Missing stream" ); +-- +-- if ( !isImmutable( ) ) +-- throw libcmis::Exception( string ( "Document " + getId( )+ +-- " is not editable" ) ); +-- string metaUrl = getUrl( ); +-- +-- // If it's a Google document, convert it +-- if ( isGoogleDoc( ) ) +-- metaUrl += "?convert=true"; +-- +-- // Update file name meta information +-- if ( !fileName.empty( ) && fileName != getContentFilename( ) ) +-- { +-- Json metaJson; +-- Json fileJson( fileName.c_str( ) ); +-- metaJson.add("title", fileJson ); +-- +-- std::istringstream is( metaJson.toString( ) ); +-- vector headers; +-- headers.push_back( "Content-Type: application/json" ); +-- try +-- { +-- getSession()->httpPutRequest( metaUrl, is, headers ); +-- } +-- catch ( const CurlException& e ) +-- { +-- throw e.getCmisException( ); +-- } +-- } +-+ +-+ // TODO: when would the filename need an update? +-+ if (!fileName.empty() && fileName != getContentFilename()) +-+ std::cout << "filename change is not implemented in setContentStream" << std::endl; +- +- // Upload stream +- uploadStream( os, contentType ); +-@@ -251,7 +220,7 @@ +- vector< libcmis::DocumentPtr > GDriveDocument::getAllVersions( ) +- { +- vector< libcmis::DocumentPtr > revisions; +-- string versionUrl = getUrl( ) + "/revisions"; +-+ string versionUrl = GDRIVE_METADATA_LINK + getId( ) + "/revisions"; +- // Run the http request to get the properties definition +- string res; +- try +-@@ -263,7 +232,7 @@ +- throw e.getCmisException( ); +- } +- Json jsonRes = Json::parse( res ); +-- Json::JsonVector objs = jsonRes["items"].getList( ); +-+ Json::JsonVector objs = jsonRes["revisions"].getList( ); +- +- string parentId = getStringProperty( "cmis:parentId" ); +- +-diff -ur libcmis.org/src/libcmis/gdrive-folder.cxx libcmis/src/libcmis/gdrive-folder.cxx +---- libcmis.org/src/libcmis/gdrive-folder.cxx 2021-07-27 19:11:02.678247008 +0200 +-+++ libcmis/src/libcmis/gdrive-folder.cxx 2021-07-27 19:11:18.874246420 +0200 +-@@ -62,8 +62,8 @@ +- // Instead of sending multiple queries for children, +- // we send a single query to search for objects where parents +- // include the folderID. +-- string query = getSession( )->getBindingUrl( ) + +-- "/files?q=\"" + getId( ) + "\"+in+parents+and+trashed+=+false"; +-+ string query = GDRIVE_METADATA_LINK + "?q=\"" + getId( ) + "\"+in+parents+and+trashed+=+false" + +-+ "&fields=files(kind,id,name,parents,mimeType,createdTime,modifiedTime,thumbnailLink,size)"; +- +- string res; +- try +-@@ -76,7 +76,7 @@ +- } +- +- Json jsonRes = Json::parse( res ); +-- Json::JsonVector objs = jsonRes["items"].getList( ); +-+ Json::JsonVector objs = jsonRes["files"].getList( ); +- +- // Create children objects from Json objects +- for(unsigned int i = 0; i < objs.size(); i++) +-@@ -95,7 +95,7 @@ +- string GDriveFolder::uploadProperties( Json properties ) +- { +- // URL for uploading meta data +-- string metaUrl = getSession()->getBindingUrl() + "/files/"; +-+ string metaUrl = GDRIVE_METADATA_LINK + "?fields=kind,id,name,parents,mimeType,createdTime,modifiedTime"; +- +- // add parents to the properties +- properties.add( "parents", GdriveUtils::createJsonFromParentId( getId( ) ) ); +-@@ -147,9 +147,15 @@ +- +- Json propsJson = GdriveUtils::toGdriveJson( properties ); +- +-- // Add filename to properties +-- Json jsonFilename( fileName.c_str( ) ); +-- propsJson.add( "title", jsonFilename ); +-+ if(!fileName.empty()) { +-+ // use provided filename +-+ Json jsonFilename( fileName.c_str( ) ); +-+ +-+ propsJson.add( "name", jsonFilename ); +-+ } +-+ if(!contentType.empty()) { +-+ propsJson.add( "mimeType", Json(contentType.c_str())); +-+ } +- +- // Upload meta-datas +- string res = uploadProperties( propsJson); +-@@ -171,12 +177,9 @@ +- libcmis::UnfileObjects::Type /*unfile*/, +- bool /*continueOnError*/ ) +- { +-- // Object remove doesn't work with folder +-- // Using trash instead +- try +- { +-- istringstream is( "" ); +-- getSession( )->httpPostRequest( getUrl( ) + "/trash", is, "" ); +-+ getSession( )->httpDeleteRequest( GDRIVE_METADATA_LINK + getId( ) ); +- } +- catch ( const CurlException& e ) +- { +-diff -ur libcmis.org/src/libcmis/gdrive-object.cxx libcmis/src/libcmis/gdrive-object.cxx +---- libcmis.org/src/libcmis/gdrive-object.cxx 2021-07-27 19:11:02.675247009 +0200 +-+++ libcmis/src/libcmis/gdrive-object.cxx 2021-07-27 19:11:18.874246420 +0200 +-@@ -89,8 +89,8 @@ +- property.reset( new GDriveProperty( it->first, it->second ) ); +- m_properties[ property->getPropertyType( )->getId()] = property; +- +-- // we map "title" to both "cmis:name" and "cmis:getContentStreamFileName" +-- if ( it->first == "title" ) +-+ // we map "name" to both "cmis:name" and "cmis:getContentStreamFileName" +-+ if ( it->first == "name" ) +- { +- property.reset( new GDriveProperty( "cmis:name", it->second) ); +- m_properties[ property->getPropertyType( )->getId()] = property; +-@@ -142,16 +142,13 @@ +- { +- if ( m_renditions.empty( ) ) +- { +-- string downloadUrl = getStringProperty( "downloadUrl" ); +-- if ( !downloadUrl.empty( ) ) +-- { +-- string mimeType = getStringProperty( "cmis:contentStreamMimeType" ); +-- if ( !mimeType.empty( ) ) +-- { +-- RenditionPtr rendition( +-- new Rendition( mimeType, mimeType, mimeType, downloadUrl )); +-- m_renditions.push_back( rendition ); +-- } +-+ string downloadUrl = GDRIVE_METADATA_LINK + getId( ) + "?alt=media"; +-+ string mimeType = getStringProperty( "cmis:contentStreamMimeType" ); +-+ if ( !mimeType.empty( ) ) +-+ { +-+ RenditionPtr rendition( +-+ new Rendition( mimeType, mimeType, mimeType, downloadUrl )); +-+ m_renditions.push_back( rendition ); +- } +- +- vector< string > exportLinks = getMultiStringProperty( "exportLinks" ); +-@@ -192,7 +189,7 @@ +- { +- vector< string > headers; +- headers.push_back( "Content-Type: application/json" ); +-- response = getSession( )->httpPutRequest( getUrl( ), is, headers ); +-+ response = getSession( )->httpPatchRequest( getUrl( ), is, headers ); +- } +- catch ( const CurlException& e ) +- { +-@@ -228,7 +225,7 @@ +- { +- try +- { +-- getSession( )->httpDeleteRequest( getUrl( ) ); +-+ getSession( )->httpDeleteRequest( GDRIVE_METADATA_LINK + getId( ) ); +- } +- catch ( const CurlException& e ) +- { +-@@ -239,8 +236,8 @@ +- void GDriveObject::move( FolderPtr /*source*/, FolderPtr destination ) +- { +- Json parentsJson; +-- Json parentsValue = GdriveUtils::createJsonFromParentId( destination->getId( ) ); +-- parentsJson.add( "parents", parentsValue ); +-+ parentsJson.add( "addParents", Json(destination->getId( ).c_str()) ); +-+ parentsJson.add( "removeParents", Json(getStringProperty( "cmis:parentId" ).c_str()) ); +- +- istringstream is( parentsJson.toString( ) ); +- libcmis::HttpResponsePtr response; +-@@ -248,7 +245,7 @@ +- { +- vector< string > headers; +- headers.push_back( "Content-Type: application/json" ); +-- response = getSession( )->httpPutRequest( getUrl( ), is, headers ); +-+ response = getSession( )->httpPatchRequest( getUrl( ), is, headers ); +- } +- catch ( const CurlException& e ) +- { +-@@ -262,12 +259,10 @@ +- +- string GDriveObject::getUrl( ) +- { +-- return getSession( )->getBindingUrl( ) + "/files/" + getId( ); +--} +-- +--string GDriveObject::getUploadUrl( ) +--{ +-- return GDRIVE_UPLOAD_LINKS; +-+ // thumbnailLink causes some operations to fail with internal server error, +-+ // see https://issuetracker.google.com/issues/36760667 +-+ return GDRIVE_METADATA_LINK + getId( ) + +-+ "?fields=kind,id,name,parents,mimeType,createdTime,modifiedTime,size"; +- } +- +- vector< string> GDriveObject::getMultiStringProperty( const string& propertyName ) +-diff -ur libcmis.org/src/libcmis/gdrive-repository.cxx libcmis/src/libcmis/gdrive-repository.cxx +---- libcmis.org/src/libcmis/gdrive-repository.cxx 2021-07-27 19:11:02.676247009 +0200 +-+++ libcmis/src/libcmis/gdrive-repository.cxx 2021-07-27 19:11:18.874246420 +0200 +-@@ -35,7 +35,7 @@ +- m_name = "Google Drive"; +- m_description = "Google Drive repository"; +- m_productName = "Google Drive"; +-- m_productVersion = "v2"; +-+ m_productVersion = "v3"; +- m_rootId = "root"; +- +- m_capabilities[ ACL ] = "discover"; +-diff -ur libcmis.org/src/libcmis/gdrive-session.cxx libcmis/src/libcmis/gdrive-session.cxx +---- libcmis.org/src/libcmis/gdrive-session.cxx 2021-07-27 19:11:02.675247009 +0200 +-+++ libcmis/src/libcmis/gdrive-session.cxx 2021-07-27 19:11:18.874246420 +0200 +-@@ -124,9 +124,13 @@ +- +- libcmis::ObjectPtr GDriveSession::getObject( string objectId ) +- { +-+ if(objectId == "root") { +-+ return getRootFolder(); +-+ } +- // Run the http request to get the properties definition +- string res; +-- string objectLink = m_bindingUrl + "/files/" + objectId; +-+ string objectLink = GDRIVE_METADATA_LINK + objectId + +-+ "?fields=kind,id,name,parents,mimeType,createdTime,modifiedTime,thumbnailLink,size"; +- try +- { +- res = httpGetRequest( objectLink )->getStream()->str(); +-@@ -188,9 +192,10 @@ +- { +- // Normal child case +- // Ask for the ID of the child if there is any +-- string childIdUrl = m_bindingUrl + "/files/" + objectId + +-- "/children/?q=title+=+'" + segment + +-- "'&fields=items:id"; +-+ // somewhat flawed as names are not necessarily unique in GDrive... +-+ string query = libcmis::escape("'" + objectId + "' in parents and trashed = false and name='" + segment + "'"); +-+ +-+ string childIdUrl = m_bindingUrl + "/files/?q=" + query + "&fields=files(id)"; +- +- string res; +- try +-@@ -204,7 +209,7 @@ +- Json jsonRes = Json::parse( res ); +- +- // Did we get an id? +-- Json::JsonVector items = jsonRes["items"].getList(); +-+ Json::JsonVector items = jsonRes["files"].getList(); +- if ( items.empty( ) ) +- throw libcmis::Exception( "Object not found: " + path, "objectNotFound" ); +- +-@@ -219,6 +224,27 @@ +- return getObject( objectId ); +- } +- +-+libcmis::FolderPtr GDriveSession::getRootFolder() +-+{ +-+ // permissions/scope with just drive.file don't allow to get it with the "root" alias/by its actual object-ID +-+ Json propsJson; +-+ +-+ // GDrive folder is a file with a different mime type. +-+ string mimeType = GDRIVE_FOLDER_MIME_TYPE; +-+ +-+ // Add mimetype to the propsJson +-+ Json jsonMimeType( mimeType.c_str( ) ); +-+ propsJson.add( "mimeType", jsonMimeType ); +-+ propsJson.add( "id", "root" ); +-+ +-+ // Upload meta-datas +-+ propsJson.add("cmis:name", "VirtualRoot"); +-+ +-+ libcmis::FolderPtr folderPtr( new GDriveFolder( this, propsJson ) ); +-+ +-+ return folderPtr; +-+} +-+ +- libcmis::ObjectTypePtr GDriveSession::getType( string id ) +- { +- libcmis::ObjectTypePtr type( new GdriveObjectType( id ) ); +-diff -ur libcmis.org/src/libcmis/gdrive-session.hxx libcmis/src/libcmis/gdrive-session.hxx +---- libcmis.org/src/libcmis/gdrive-session.hxx 2021-07-27 19:11:02.675247009 +0200 +-+++ libcmis/src/libcmis/gdrive-session.hxx 2021-07-27 19:11:18.875246420 +0200 +-@@ -57,6 +57,8 @@ +- +- virtual std::vector< libcmis::ObjectTypePtr > getBaseTypes( ); +- +-+ virtual libcmis::FolderPtr getRootFolder(); +-+ +- virtual std::string getRefreshToken(); +- +- private: +-diff -ur libcmis.org/src/libcmis/gdrive-utils.cxx libcmis/src/libcmis/gdrive-utils.cxx +---- libcmis.org/src/libcmis/gdrive-utils.cxx 2021-07-27 19:11:02.677247008 +0200 +-+++ libcmis/src/libcmis/gdrive-utils.cxx 2021-07-27 19:11:18.875246420 +0200 +-@@ -44,17 +44,17 @@ +- convertedKey = "cmis:createdBy"; +- else if ( key == "description" ) +- convertedKey = "cmis:description"; +-- else if ( key == "createdDate" ) +-+ else if ( key == "createdTime" ) +- convertedKey = "cmis:creationDate"; +- else if ( key == "lastModifyingUserName" ) +- convertedKey = "cmis:lastModifiedBy"; +-- else if ( key == "modifiedDate" ) +-+ else if ( key == "modifiedTime" ) +- convertedKey = "cmis:lastModificationDate"; +-- else if ( key == "title" ) +-+ else if ( key == "name" ) +- convertedKey = "cmis:contentStreamFileName"; +- else if ( key == "mimeType" ) +- convertedKey = "cmis:contentStreamMimeType"; +-- else if ( key == "fileSize" ) +-+ else if ( key == "size" ) +- convertedKey = "cmis:contentStreamLength"; +- else if ( key == "editable" ) +- convertedKey = "cmis:isImmutable"; +-@@ -72,21 +72,21 @@ +- else if ( key == "cmis:createdBy" ) +- convertedKey = "ownerNames"; +- else if ( key == "cmis:creationDate" ) +-- convertedKey = "createdDate"; +-+ convertedKey = "createdTime"; +- else if ( key == "cmis:description" ) +- convertedKey = "description"; +- else if ( key == "cmis:lastModifiedBy" ) +- convertedKey = "lastModifyingUserName"; +- else if ( key == "cmis:lastModificationDate" ) +-- convertedKey = "modifiedDate"; +-+ convertedKey = "modifiedTime"; +- else if ( key == "cmis:contentStreamFileName" ) +-- convertedKey = "title"; +-+ convertedKey = "name"; +- else if ( key == "cmis:name" ) +-- convertedKey = "title"; +-+ convertedKey = "name"; +- else if ( key == "cmis:contentStreamMimeType" ) +- convertedKey = "mimeType"; +- else if ( key == "cmis:contentStreamLength" ) +-- convertedKey = "fileSize"; +-+ convertedKey = "size"; +- else if ( key == "cmis:isImmutable" ) +- convertedKey = "editable"; +- else if ( key == "cmis:parentId" ) +-@@ -124,9 +124,9 @@ +- bool GdriveUtils::checkUpdatable( const string& key ) +- { +- // taken from https://developers.google.com/drive/v2/reference/files +-- bool updatable = ( key == "title" || +-+ bool updatable = ( key == "name" || +- key == "description" || +-- key == "modifiedDate" || +-+ key == "modifiedTime" || +- key == "lastViewedByMeDate" ); +- return updatable; +- } +-@@ -143,18 +143,11 @@ +- +- Json GdriveUtils::createJsonFromParentId( const string& parentId ) +- { +-- Json parentValue( parentId.c_str( ) ); +-- +- // parents is a Json array +- Json firstParent; +-- firstParent.add( "id", parentValue ); +-- +-- Json::JsonVector parents; +-- parents.insert( parents.begin( ), firstParent ); +-+ firstParent.add( Json( parentId.c_str() ) ); +- +-- Json parentsValue( parents ); +-- +-- return parentsValue; +-+ return firstParent; +- } +- +- vector< string > GdriveUtils::parseGdriveProperty( string key, Json json ) +-diff -ur libcmis.org/src/libcmis/gdrive-utils.hxx libcmis/src/libcmis/gdrive-utils.hxx +---- libcmis.org/src/libcmis/gdrive-utils.hxx 2021-07-27 19:11:02.677247008 +0200 +-+++ libcmis/src/libcmis/gdrive-utils.hxx 2021-07-27 19:11:18.875246420 +0200 +-@@ -35,7 +35,8 @@ +- #include "json-utils.hxx" +- +- static const std::string GDRIVE_FOLDER_MIME_TYPE = "application/vnd.google-apps.folder" ; +--static const std::string GDRIVE_UPLOAD_LINKS = "https://www.googleapis.com/upload/drive/v2/files/"; +-+static const std::string GDRIVE_UPLOAD_LINK = "https://www.googleapis.com/upload/drive/v3/files/"; +-+static const std::string GDRIVE_METADATA_LINK = "https://www.googleapis.com/drive/v3/files/"; +- +- class GdriveUtils +- { +-diff -ur libcmis.org/src/libcmis/oauth2-handler.cxx libcmis/src/libcmis/oauth2-handler.cxx +---- libcmis.org/src/libcmis/oauth2-handler.cxx 2021-07-27 19:11:02.676247009 +0200 +-+++ libcmis/src/libcmis/oauth2-handler.cxx 2021-07-27 19:11:18.875246420 +0200 +-@@ -92,8 +92,11 @@ +- "code=" + authCode + +- "&client_id=" + m_data->getClientId() + +- "&redirect_uri=" + m_data->getRedirectUri() + +-- "&scope=" + libcmis::escape( m_data->getScope() ) + +- "&grant_type=authorization_code" ; +-+ if(boost::starts_with(m_data->getTokenUrl(), "https://oauth2.googleapis.com/")) +-+ post += "&client_secret=" + m_data->getClientSecret(); +-+ else +-+ post += "&scope=" + libcmis::escape( m_data->getScope() ); +- +- istringstream is( post ); +- +-@@ -104,7 +107,7 @@ +- resp = m_session->httpPostRequest ( m_data->getTokenUrl(), is, +- "application/x-www-form-urlencoded" ); +- } +-- catch ( const CurlException& ) +-+ catch ( const CurlException& e) +- { +- throw libcmis::Exception( +- "Couldn't get tokens from the authorization code "); +-@@ -122,6 +125,8 @@ +- "refresh_token=" + m_refresh + +- "&client_id=" + m_data->getClientId() + +- "&grant_type=refresh_token" ; +-+ if(boost::starts_with(m_data->getTokenUrl(), "https://oauth2.googleapis.com/")) +-+ post += "&client_secret=" + m_data->getClientSecret(); +- +- istringstream is( post ); +- libcmis::HttpResponsePtr resp; +-@@ -130,7 +135,7 @@ +- resp = m_session->httpPostRequest( m_data->getTokenUrl( ), is, +- "application/x-www-form-urlencoded" ); +- } +-- catch (const CurlException& ) +-+ catch (const CurlException& e ) +- { +- throw libcmis::Exception( "Couldn't refresh token "); +- } +-diff -ur libcmis.org/src/libcmis/oauth2-providers.cxx libcmis/src/libcmis/oauth2-providers.cxx +---- libcmis.org/src/libcmis/oauth2-providers.cxx 2021-07-27 19:11:02.679247008 +0200 +-+++ libcmis/src/libcmis/oauth2-providers.cxx 2021-07-27 19:11:18.886246420 +0200 +-@@ -80,172 +80,8 @@ +- +- } +- +--string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUrl, +-- const string& username, const string& password ) +--{ +-- /* This member function implements 'Google OAuth 2.0' +-- * +-- * The interaction is carried out by libcmis, with no web browser involved. +-- * +-- * Normal sequence (without 2FA) is: +-- * 1) a get to activate login page +-- * receive first login page, html format +-- * 2) subsequent post to sent email +-- * receive html page for password input +-- * 3) subsequent post to send password +-- * receive html page for application consent +-- * 4) subsequent post to send a consent for the application +-- * receive a single-use authorization code +-- * this code is returned as a string +-- * +-- * Sequence with 2FA is: +-- * 1) a get to activate login page +-- * receive first login page, html format +-- * 2) subsequent post to sent email +-- * receive html page for password input +-- * 3) subsequent post to send password +-- * receive html page for pin input +-- * 3b) subsequent post to send pin number +-- * receive html page for application consent +-- * 4) subsequent post to send a consent for the application +-- * receive a single-use authorization code +-- * this code is returned as a string +-- */ +-- +-- static const string CONTENT_TYPE( "application/x-www-form-urlencoded" ); +-- // STEP 1: get login page +-- string res; +-- try +-- { +-- // send the first get, receive the html login page +-- res = session->httpGetRequest( authUrl )->getStream( )->str( ); +-- } +-- catch ( const CurlException& ) +-- { +-- return string( ); +-- } +-- +-- // STEP 2: send email +-- +-- string loginEmailPost, loginEmailLink; +-- if ( !parseResponse( res.c_str( ), loginEmailPost, loginEmailLink ) ) +-- return string( ); +-- +-- loginEmailPost += "Email="; +-- loginEmailPost += escapeForm( username ); +-- +-- istringstream loginEmailIs( loginEmailPost ); +-- string loginEmailRes; +-- try +-- { +-- // send a post with user email, receive the html page for password input +-- loginEmailRes = session->httpPostRequest ( loginEmailLink, loginEmailIs, CONTENT_TYPE ) +-- ->getStream( )->str( ); +-- } +-- catch ( const CurlException& ) +-- { +-- return string( ); +-- } +-- +-- // STEP 3: password page +-- +-- string loginPasswdPost, loginPasswdLink; +-- if ( !parseResponse( loginEmailRes.c_str( ), loginPasswdPost, loginPasswdLink ) ) +-- return string( ); +-- +-- loginPasswdPost += "Passwd="; +-- loginPasswdPost += escapeForm( password ); +-- +-- istringstream loginPasswdIs( loginPasswdPost ); +-- string loginPasswdRes; +-- try +-- { +-- // send a post with user password, receive the application consent page +-- loginPasswdRes = session->httpPostRequest ( loginPasswdLink, loginPasswdIs, CONTENT_TYPE ) +-- ->getStream( )->str( ); +-- } +-- catch ( const CurlException& ) +-- { +-- return string( ); +-- } +-- +-- string approvalPost, approvalLink; +-- if ( !parseResponse( loginPasswdRes. c_str( ), approvalPost, approvalLink) ) +-- return string( ); +-- +-- // when 2FA is enabled, link doesn't start with 'http' +-- if ( approvalLink.compare(0, 4, "http") != 0 ) +-- { +-- // STEP 3b: 2 Factor Authentication, pin code request +-- +-- string loginChallengePost( approvalPost ); +-- string loginChallengeLink( approvalLink ); +-- +-- libcmis::OAuth2AuthCodeProvider fallbackProvider = libcmis::SessionFactory::getOAuth2AuthCodeProvider( ); +-- unique_ptr< char, void (*)( void * ) > pin{ fallbackProvider( "", "", "" ), free }; +-- +-- if( !pin ) +-- { +-- // unset OAuth2AuthCode Provider to avoid showing pin request again in the HttpSession::oauth2Authenticate +-- libcmis::SessionFactory::setOAuth2AuthCodeProvider( NULL ); +-- return string( ); +-- } +-- +-- loginChallengeLink = "https://accounts.google.com" + loginChallengeLink; +-- loginChallengePost += string( PIN_INPUT_NAME ) + "="; +-- loginChallengePost += string( pin.get() ); +-- +-- istringstream loginChallengeIs( loginChallengePost ); +-- string loginChallengeRes; +-- try +-- { +-- // send a post with pin, receive the application consent page +-- loginChallengeRes = session->httpPostRequest ( loginChallengeLink, loginChallengeIs, CONTENT_TYPE ) +-- ->getStream( )->str( ); +-- } +-- catch ( const CurlException& ) +-- { +-- return string( ); +-- } +-- +-- approvalPost = string(); +-- approvalLink = string(); +-- +-- if ( !parseResponse( loginChallengeRes. c_str( ), approvalPost, approvalLink) ) +-- return string( ); +-- } +-- else if( approvalLink.compare( "https://accounts.google.com/ServiceLoginAuth" ) == 0 ) +-- { +-- // wrong password, +-- // unset OAuth2AuthCode Provider to avoid showing pin request again in the HttpSession::oauth2Authenticate +-- libcmis::SessionFactory::setOAuth2AuthCodeProvider( NULL ); +-- return string( ); +-- } +-- +-- // STEP 4: allow libcmis to access google drive +-- approvalPost += "submit_access=true"; +-- +-- istringstream approvalIs( approvalPost ); +-- string approvalRes; +-- try +-- { +-- // send a post with application consent +-- approvalRes = session->httpPostRequest ( approvalLink, approvalIs, +-- CONTENT_TYPE) ->getStream( )->str( ); +-- } +-- catch ( const CurlException& e ) +-- { +-- throw e.getCmisException( ); +-- } +-- +-- // Take the authentication code from the text bar +-- string code = parseCode( approvalRes.c_str( ) ); +-- +-- return code; +--} +-- +--string OAuth2Providers::OAuth2Onedrive( HttpSession* /*session*/, const string& /*authUrl*/, +-- const string& /*username*/, const string& /*password*/ ) +-+string OAuth2Providers::OAuth2Dummy( HttpSession* /*session*/, const string& /*authUrl*/, +-+ const string& /*username*/, const string& /*password*/ ) +- { +- return string( ); +- } +-@@ -314,12 +150,8 @@ +- // For Alfresco in the cloud, only match the hostname as there can be several +- // binding URLs created with it. +- return OAuth2Alfresco; +-- else if ( boost::starts_with( url, "https://www.googleapis.com/drive/v2" ) ) +-- return OAuth2Gdrive; +-- else if ( boost::starts_with( url, "https://graph.microsoft.com/v1.0" ) ) +-- return OAuth2Onedrive; +- +-- return OAuth2Gdrive; +-+ return OAuth2Dummy; +- } +- +- int OAuth2Providers::parseResponse ( const char* response, string& post, string& link ) +-diff -ur libcmis.org/src/libcmis/oauth2-providers.hxx libcmis/src/libcmis/oauth2-providers.hxx +---- libcmis.org/src/libcmis/oauth2-providers.hxx 2021-07-27 19:11:02.678247008 +0200 +-+++ libcmis/src/libcmis/oauth2-providers.hxx 2021-07-27 19:11:18.886246420 +0200 +-@@ -39,12 +39,8 @@ +- class OAuth2Providers +- { +- public : +-- static std::string OAuth2Gdrive( HttpSession* session, const std::string& authUrl, +-+ static std::string OAuth2Dummy( HttpSession* session, const std::string& authUrl, +- const std::string& username, const std::string& password ); +-- +-- static std::string OAuth2Onedrive( HttpSession* session, const std::string& authUrl, +-- const std::string& username, const std::string& password ); +-- +- static std::string OAuth2Alfresco( HttpSession* session, const std::string& authUrl, +- const std::string& username, const std::string& password ); +- +-diff -ur libcmis.org/src/libcmis/session-factory.cxx libcmis/src/libcmis/session-factory.cxx +---- libcmis.org/src/libcmis/session-factory.cxx 2021-07-27 19:11:02.679247008 +0200 +-+++ libcmis/src/libcmis/session-factory.cxx 2021-07-27 19:11:18.886246420 +0200 +-@@ -66,7 +66,7 @@ +- if ( !bindingUrl.empty( ) ) +- { +- // Try the special cases based on the binding URL +-- if ( bindingUrl == "https://www.googleapis.com/drive/v2" ) +-+ if ( bindingUrl == "https://www.googleapis.com/drive/v3" ) +- { +- session = new GDriveSession( bindingUrl, username, password, +- oauth2, verbose ); +diff --git a/external/libcmis/libcmis_oauth_pw_as_refreshtoken.patch.1 b/external/libcmis/libcmis_oauth_pw_as_refreshtoken.patch.1 +deleted file mode 100644 +index a8cb06509421..000000000000 +--- a/external/libcmis/libcmis_oauth_pw_as_refreshtoken.patch.1 ++++ /dev/null +@@ -1,185 +0,0 @@ +-diff -ur libcmis.org/inc/libcmis/session.hxx libcmis/inc/libcmis/session.hxx +---- libcmis.org/inc/libcmis/session.hxx 2021-07-27 19:09:42.580249917 +0200 +-+++ libcmis/inc/libcmis/session.hxx 2021-07-27 19:10:02.368249199 +0200 +-@@ -95,6 +95,8 @@ +- certificate exception feature available on common web browser. +- */ +- virtual void setNoSSLCertificateCheck( bool noCheck ) = 0; +-+ +-+ virtual std::string getRefreshToken() { return ""; }; +- }; +- } +- +-diff -ur libcmis.org/src/libcmis/gdrive-session.cxx libcmis/src/libcmis/gdrive-session.cxx +---- libcmis.org/src/libcmis/gdrive-session.cxx 2021-07-27 19:09:42.581249917 +0200 +-+++ libcmis/src/libcmis/gdrive-session.cxx 2021-07-27 19:10:02.369249198 +0200 +-@@ -70,6 +70,46 @@ +- { +- } +- +-+ +-+void GDriveSession::setOAuth2Data( libcmis::OAuth2DataPtr oauth2 ) +-+{ +-+ m_oauth2Handler = new OAuth2Handler( this, oauth2 ); +-+ m_oauth2Handler->setOAuth2Parser( OAuth2Providers::getOAuth2Parser( getBindingUrl( ) ) ); +-+ +-+ oauth2Authenticate( ); +-+} +-+ +-+void GDriveSession::oauth2Authenticate() +-+{ +-+ // treat the supplied password as refresh token +-+ if (!m_password.empty()) +-+ { +-+ try +-+ { +-+ m_inOAuth2Authentication = true; +-+ +-+ m_oauth2Handler->setRefreshToken(m_password); +-+ // Try to get new access tokens using the stored refreshtoken +-+ m_oauth2Handler->refresh(); +-+ m_inOAuth2Authentication = false; +-+ } +-+ catch (const CurlException &e) +-+ { +-+ m_inOAuth2Authentication = false; +-+ // refresh token expired or invalid, trigger initial auth (that in turn will hit the fallback with copy'n'paste method) +-+ BaseSession::oauth2Authenticate(); +-+ } +-+ } +-+ else +-+ { +-+ BaseSession::oauth2Authenticate(); +-+ } +-+} +-+ +-+string GDriveSession::getRefreshToken() { +-+ return HttpSession::getRefreshToken(); +-+} +-+ +- libcmis::RepositoryPtr GDriveSession::getRepository( ) +- { +- // Return a dummy repository since GDrive doesn't have that notion +-diff -ur libcmis.org/src/libcmis/gdrive-session.hxx libcmis/src/libcmis/gdrive-session.hxx +---- libcmis.org/src/libcmis/gdrive-session.hxx 2021-07-27 19:09:42.583249917 +0200 +-+++ libcmis/src/libcmis/gdrive-session.hxx 2021-07-27 19:10:02.369249198 +0200 +-@@ -57,8 +57,14 @@ +- +- virtual std::vector< libcmis::ObjectTypePtr > getBaseTypes( ); +- +-+ virtual std::string getRefreshToken(); +-+ +- private: +- GDriveSession( ); +-+ +-+ virtual void setOAuth2Data( libcmis::OAuth2DataPtr oauth2 ); +-+ +-+ void oauth2Authenticate( ); +- }; +- +- #endif /* _GDRIVE_SESSION_HXX_ */ +-diff -ur libcmis.org/src/libcmis/http-session.hxx libcmis/src/libcmis/http-session.hxx +---- libcmis.org/src/libcmis/http-session.hxx 2021-07-27 19:09:42.582249917 +0200 +-+++ libcmis/src/libcmis/http-session.hxx 2021-07-27 19:10:02.369249198 +0200 +-@@ -148,7 +148,7 @@ +- +- void setNoSSLCertificateCheck( bool noCheck ); +- +-- std::string getRefreshToken( ); +-+ virtual std::string getRefreshToken( ); +- +- protected: +- HttpSession( ); +-diff -ur libcmis.org/src/libcmis/oauth2-handler.cxx libcmis/src/libcmis/oauth2-handler.cxx +---- libcmis.org/src/libcmis/oauth2-handler.cxx 2021-07-27 19:09:42.582249917 +0200 +-+++ libcmis/src/libcmis/oauth2-handler.cxx 2021-07-27 19:10:02.369249198 +0200 +-@@ -158,6 +158,11 @@ +- return m_refresh; +- } +- +-+void OAuth2Handler::setRefreshToken( string refreshToken ) +-+{ +-+ m_refresh = refreshToken; +-+} +-+ +- string OAuth2Handler::getHttpHeader( ) +- { +- string header; +-diff -ur libcmis.org/src/libcmis/oauth2-handler.hxx libcmis/src/libcmis/oauth2-handler.hxx +---- libcmis.org/src/libcmis/oauth2-handler.hxx 2021-07-27 19:09:42.582249917 +0200 +-+++ libcmis/src/libcmis/oauth2-handler.hxx 2021-07-27 19:10:02.370249198 +0200 +-@@ -61,6 +61,7 @@ +- +- std::string getAccessToken( ) ; +- std::string getRefreshToken( ) ; +-+ void setRefreshToken( std::string refreshToken ) ; +- +- // adding HTTP auth header +- std::string getHttpHeader( ) ; +-diff -ur libcmis.org/src/libcmis/onedrive-session.cxx libcmis/src/libcmis/onedrive-session.cxx +---- libcmis.org/src/libcmis/onedrive-session.cxx 2021-07-27 19:09:42.583249917 +0200 +-+++ libcmis/src/libcmis/onedrive-session.cxx 2021-07-27 19:10:02.370249198 +0200 +-@@ -68,6 +68,45 @@ +- { +- } +- +-+void OneDriveSession::setOAuth2Data( libcmis::OAuth2DataPtr oauth2 ) +-+{ +-+ m_oauth2Handler = new OAuth2Handler( this, oauth2 ); +-+ m_oauth2Handler->setOAuth2Parser( OAuth2Providers::getOAuth2Parser( getBindingUrl( ) ) ); +-+ +-+ oauth2Authenticate( ); +-+} +-+ +-+void OneDriveSession::oauth2Authenticate() +-+{ +-+ // treat the supplied password as refresh token +-+ if (!m_password.empty()) +-+ { +-+ try +-+ { +-+ m_inOAuth2Authentication = true; +-+ +-+ m_oauth2Handler->setRefreshToken(m_password); +-+ // Try to get new access tokens using the stored refreshtoken +-+ m_oauth2Handler->refresh(); +-+ m_inOAuth2Authentication = false; +-+ } +-+ catch (const CurlException &e) +-+ { +-+ m_inOAuth2Authentication = false; +-+ // refresh token expired or invalid, trigger initial auth (that in turn will hit the fallback with copy'n'paste method) +-+ BaseSession::oauth2Authenticate(); +-+ } +-+ } +-+ else +-+ { +-+ BaseSession::oauth2Authenticate(); +-+ } +-+} +-+ +-+string OneDriveSession::getRefreshToken() { +-+ return HttpSession::getRefreshToken(); +-+} +-+ +- libcmis::RepositoryPtr OneDriveSession::getRepository( ) +- { +- // Return a dummy repository since OneDrive doesn't have that notion +-diff -ur libcmis.org/src/libcmis/onedrive-session.hxx libcmis/src/libcmis/onedrive-session.hxx +---- libcmis.org/src/libcmis/onedrive-session.hxx 2021-07-27 19:09:42.583249917 +0200 +-+++ libcmis/src/libcmis/onedrive-session.hxx 2021-07-27 19:10:02.370249198 +0200 +-@@ -62,8 +62,14 @@ +- +- bool isAPathMatch( Json objectJson, std::string path ); +- +-+ virtual std::string getRefreshToken(); +-+ +- private: +- OneDriveSession( ); +-+ +-+ virtual void setOAuth2Data( libcmis::OAuth2DataPtr oauth2 ); +-+ +-+ void oauth2Authenticate( ); +- }; +- +- #endif /* _ONEDRIVE_SESSION_HXX_ */ +diff --git a/officecfg/registry/data/org/openoffice/Office/Common.xcu b/officecfg/registry/data/org/openoffice/Office/Common.xcu +index fde7c90f9b26..816d22bc993c 100644 +--- a/officecfg/registry/data/org/openoffice/Office/Common.xcu ++++ b/officecfg/registry/data/org/openoffice/Office/Common.xcu +@@ -433,7 +433,7 @@ + + + +- https://www.googleapis.com/drive/v3 ++ https://www.googleapis.com/drive/v2 + https://graph.microsoft.com/v1.0 + https://api.alfresco.com/cmis/versions/1.0/atom/ + +diff --git a/ucb/source/ucp/cmis/auth_provider.cxx b/ucb/source/ucp/cmis/auth_provider.cxx +index c4407f47cc3f..dd7b4f9f1e3c 100644 +--- a/ucb/source/ucp/cmis/auth_provider.cxx ++++ b/ucb/source/ucp/cmis/auth_provider.cxx +@@ -11,10 +11,7 @@ + #define STD_TO_OUSTR( str ) OUString( str.c_str(), str.length( ), RTL_TEXTENCODING_UTF8 ) + + #include +-#include +-#include + +-#include + #include + #include + +@@ -67,91 +64,6 @@ namespace cmis + return false; + } + +- string AuthProvider::getRefreshToken(string& rUsername) +- { +- string refreshToken; +- const css::uno::Reference xEnv = getXEnv(); +- if (xEnv.is()) +- { +- uno::Reference xIH = xEnv->getInteractionHandler(); +- +- if (rUsername.empty()) +- { +- rtl::Reference xRequest +- = new ucbhelper::SimpleAuthenticationRequest( +- m_sUrl, m_sBindingUrl, +- ucbhelper::SimpleAuthenticationRequest::EntityType::ENTITY_NA, OUString(), +- ucbhelper::SimpleAuthenticationRequest::EntityType::ENTITY_MODIFY, +- STD_TO_OUSTR(rUsername), +- ucbhelper::SimpleAuthenticationRequest::EntityType::ENTITY_NA, OUString()); +- xIH->handle(xRequest.get()); +- +- rtl::Reference xSelection +- = xRequest->getSelection(); +- +- if (xSelection.is()) +- { +- // Handler handled the request. +- uno::Reference xAbort(xSelection.get(), +- uno::UNO_QUERY); +- if (!xAbort.is()) +- { +- const rtl::Reference& xSupp +- = xRequest->getAuthenticationSupplier(); +- +- rUsername = OUSTR_TO_STDSTR(xSupp->getUserName()); +- } +- } +- } +- +- uno::Reference xContext +- = ::comphelper::getProcessComponentContext(); +- uno::Reference xMasterPasswd +- = task::PasswordContainer::create(xContext); +- if (xMasterPasswd->hasMasterPassword()) +- { +- xMasterPasswd->authorizateWithMasterPassword(xIH); +- } +- if (xMasterPasswd->isPersistentStoringAllowed()) +- { +- task::UrlRecord aRec +- = xMasterPasswd->findForName(m_sBindingUrl, STD_TO_OUSTR(rUsername), xIH); +- if (aRec.UserList.hasElements() && aRec.UserList[0].Passwords.hasElements()) +- refreshToken = OUSTR_TO_STDSTR(aRec.UserList[0].Passwords[0]); +- } +- } +- return refreshToken; +- } +- +- bool AuthProvider::storeRefreshToken(const string& username, const string& password, +- const string& refreshToken) +- { +- if (refreshToken.empty()) +- return false; +- if (password == refreshToken) +- return true; +- const css::uno::Reference xEnv = getXEnv(); +- if (xEnv.is()) +- { +- uno::Reference xIH = xEnv->getInteractionHandler(); +- uno::Reference xContext +- = ::comphelper::getProcessComponentContext(); +- uno::Reference xMasterPasswd +- = task::PasswordContainer::create(xContext); +- uno::Sequence aPasswd{ STD_TO_OUSTR(refreshToken) }; +- if (xMasterPasswd->isPersistentStoringAllowed()) +- { +- if (xMasterPasswd->hasMasterPassword()) +- { +- xMasterPasswd->authorizateWithMasterPassword(xIH); +- } +- xMasterPasswd->addPersistent(m_sBindingUrl, STD_TO_OUSTR(username), aPasswd, xIH); +- return true; +- } +- } +- return false; +- } +- + css::uno::WeakReference< css::ucb::XCommandEnvironment> AuthProvider::sm_xEnv; + + void AuthProvider::setXEnv(const css::uno::Reference< css::ucb::XCommandEnvironment>& xEnv ) +@@ -164,7 +76,7 @@ namespace cmis + return sm_xEnv; + } + +- char* AuthProvider::copyWebAuthCodeFallback( const char* url, ++ char* AuthProvider::onedriveAuthCodeFallback( const char* url, + const char* /*username*/, + const char* /*password*/ ) + { +@@ -208,6 +120,46 @@ namespace cmis + + return strdup( "" ); + } ++ ++ char* AuthProvider::gdriveAuthCodeFallback( const char* /*url*/, ++ const char* /*username*/, ++ const char* /*password*/ ) ++ { ++ const css::uno::Reference< ++ css::ucb::XCommandEnvironment> xEnv = getXEnv( ); ++ ++ if ( xEnv.is() ) ++ { ++ uno::Reference< task::XInteractionHandler > xIH ++ = xEnv->getInteractionHandler(); ++ ++ if ( xIH.is() ) ++ { ++ rtl::Reference< ucbhelper::AuthenticationFallbackRequest > xRequest ++ = new ucbhelper::AuthenticationFallbackRequest ( ++ "PIN:", "" ); ++ ++ xIH->handle( xRequest.get() ); ++ ++ rtl::Reference< ucbhelper::InteractionContinuation > xSelection ++ = xRequest->getSelection(); ++ ++ if ( xSelection.is() ) ++ { ++ // Handler handled the request. ++ const rtl::Reference< ucbhelper::InteractionAuthFallback >& ++ xAuthFallback = xRequest->getAuthFallbackInter( ); ++ if ( xAuthFallback.is() ) ++ { ++ OUString code = xAuthFallback->getCode( ); ++ return strdup( OUSTR_TO_STDSTR( code ).c_str( ) ); ++ } ++ } ++ } ++ } ++ ++ return strdup( "" ); ++ } + } + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/ucb/source/ucp/cmis/auth_provider.hxx b/ucb/source/ucp/cmis/auth_provider.hxx +index 462f7edba54d..24430401d278 100644 +--- a/ucb/source/ucp/cmis/auth_provider.hxx ++++ b/ucb/source/ucp/cmis/auth_provider.hxx +@@ -39,11 +39,11 @@ namespace cmis + + bool authenticationQuery( std::string& username, std::string& password ) override; + +- std::string getRefreshToken( std::string& username ); +- bool storeRefreshToken(const std::string& username, const std::string& password, +- const std::string& refreshToken); ++ static char* onedriveAuthCodeFallback( const char* url, ++ const char* /*username*/, ++ const char* /*password*/ ); + +- static char* copyWebAuthCodeFallback( const char* url, ++ static char* gdriveAuthCodeFallback( const char* /*url*/, + const char* /*username*/, + const char* /*password*/ ); + +diff --git a/ucb/source/ucp/cmis/cmis_content.cxx b/ucb/source/ucp/cmis/cmis_content.cxx +index edb13ddf2457..355575d185d1 100644 +--- a/ucb/source/ucp/cmis/cmis_content.cxx ++++ b/ucb/source/ucp/cmis/cmis_content.cxx +@@ -347,15 +347,12 @@ namespace cmis + string rPassword = OUSTR_TO_STDSTR( m_aURL.getPassword( ) ); + + bool bSkipInitialPWAuth = false; +- if (m_aURL.getBindingUrl() == ONEDRIVE_BASE_URL +- || m_aURL.getBindingUrl() == GDRIVE_BASE_URL) +- { ++ if ( m_aURL.getBindingUrl( ) == ONEDRIVE_BASE_URL ) { + // skip the initial username and pw-auth prompt, the only supported method is the + // auth-code-fallback one (login with your browser, copy code into the dialog) + // TODO: if LO were to listen on localhost for the request, it would be much nicer + // user experience + bSkipInitialPWAuth = true; +- rPassword = aAuthProvider.getRefreshToken(rUsername); + } + + bool bIsDone = false; +@@ -368,9 +365,7 @@ namespace cmis + libcmis::OAuth2DataPtr oauth2Data; + if ( m_aURL.getBindingUrl( ) == GDRIVE_BASE_URL ) + { +- // reset the skip, so user gets a chance to cancel +- bSkipInitialPWAuth = false; +- libcmis::SessionFactory::setOAuth2AuthCodeProvider(AuthProvider::copyWebAuthCodeFallback); ++ libcmis::SessionFactory::setOAuth2AuthCodeProvider(AuthProvider::gdriveAuthCodeFallback); + oauth2Data.reset( new libcmis::OAuth2Data( + GDRIVE_AUTH_URL, GDRIVE_TOKEN_URL, + GDRIVE_SCOPE, GDRIVE_REDIRECT_URI, +@@ -385,7 +380,7 @@ namespace cmis + { + // reset the skip, so user gets a chance to cancel + bSkipInitialPWAuth = false; +- libcmis::SessionFactory::setOAuth2AuthCodeProvider(AuthProvider::copyWebAuthCodeFallback); ++ libcmis::SessionFactory::setOAuth2AuthCodeProvider(AuthProvider::onedriveAuthCodeFallback); + oauth2Data.reset( new libcmis::OAuth2Data( + ONEDRIVE_AUTH_URL, ONEDRIVE_TOKEN_URL, + ONEDRIVE_SCOPE, ONEDRIVE_REDIRECT_URI, +@@ -417,12 +412,6 @@ namespace cmis + else + { + m_pProvider->registerSession(sSessionId, m_aURL.getUsername( ), m_pSession); +- if (m_aURL.getBindingUrl() == ONEDRIVE_BASE_URL +- || m_aURL.getBindingUrl() == GDRIVE_BASE_URL) +- { +- aAuthProvider.storeRefreshToken(rUsername, rPassword, +- m_pSession->getRefreshToken()); +- } + } + + bIsDone = true; +@@ -430,10 +419,7 @@ namespace cmis + catch( const libcmis::Exception & e ) + { + if ( e.getType() != "permissionDenied" ) +- { +- SAL_INFO("ucb.ucp.cmis", "Unexpected libcmis exception: " << e.what()); + throw; +- } + } + } + else +@@ -525,7 +511,6 @@ namespace cmis + } + catch ( const libcmis::Exception& ) + { +- SAL_INFO( "ucb.ucp.cmis", "object: " << OUSTR_TO_STDSTR(m_sObjectId)); + throw libcmis::Exception( "Object not found" ); + } + } +diff --git a/ucb/source/ucp/cmis/cmis_repo_content.cxx b/ucb/source/ucp/cmis/cmis_repo_content.cxx +index 1bec3152b3b6..d98da53d5e2d 100644 +--- a/ucb/source/ucp/cmis/cmis_repo_content.cxx ++++ b/ucb/source/ucp/cmis/cmis_repo_content.cxx +@@ -165,7 +165,7 @@ namespace cmis + libcmis::OAuth2DataPtr oauth2Data; + if ( m_aURL.getBindingUrl( ) == GDRIVE_BASE_URL ) + { +- libcmis::SessionFactory::setOAuth2AuthCodeProvider( AuthProvider::copyWebAuthCodeFallback ); ++ libcmis::SessionFactory::setOAuth2AuthCodeProvider( AuthProvider::gdriveAuthCodeFallback ); + oauth2Data.reset( new libcmis::OAuth2Data( + GDRIVE_AUTH_URL, GDRIVE_TOKEN_URL, + GDRIVE_SCOPE, GDRIVE_REDIRECT_URI, +@@ -178,7 +178,7 @@ namespace cmis + ALFRESCO_CLOUD_CLIENT_ID, ALFRESCO_CLOUD_CLIENT_SECRET ) ); + if ( m_aURL.getBindingUrl( ) == ONEDRIVE_BASE_URL ) + { +- libcmis::SessionFactory::setOAuth2AuthCodeProvider( AuthProvider::copyWebAuthCodeFallback ); ++ libcmis::SessionFactory::setOAuth2AuthCodeProvider( AuthProvider::onedriveAuthCodeFallback ); + oauth2Data.reset( new libcmis::OAuth2Data( + ONEDRIVE_AUTH_URL, ONEDRIVE_TOKEN_URL, + ONEDRIVE_SCOPE, ONEDRIVE_REDIRECT_URI, +-- +2.31.1 + diff --git a/SOURCES/0001-document-new-shouldn-t-get-prefixed-to-become-libreo.patch b/SOURCES/0001-document-new-shouldn-t-get-prefixed-to-become-libreo.patch new file mode 100644 index 0000000..1579192 --- /dev/null +++ b/SOURCES/0001-document-new-shouldn-t-get-prefixed-to-become-libreo.patch @@ -0,0 +1,45 @@ +From ce37356f6bcaaef62a80814d7d54d3aa6d53167d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 12 Oct 2021 09:52:53 +0100 +Subject: [PATCH] document-new shouldn't get prefixed to become + libreoffice-document-new + +seen by rpminspect as .desktop "references icon libreoffice-document-new +but no subpackages contain libreoffice-document-new" + +introduced by: + +commit f767d5e2b017c0d0cfd23ff3318cb30901847722 +Date: Sun Sep 1 11:30:12 2019 +0200 + + Add icons to New Document desktop file actions + +in the [Desktop Action NewDocument] section + +Change-Id: I64ce5e2dbaca32083b2f76e960c33a815f8a3773 +--- + sysui/desktop/share/brand.pl | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/sysui/desktop/share/brand.pl b/sysui/desktop/share/brand.pl +index 9d73e619c495..b17a7374fd62 100644 +--- a/sysui/desktop/share/brand.pl ++++ b/sysui/desktop/share/brand.pl +@@ -81,9 +81,11 @@ while ($arg = shift) { + # remove possible Windows line-ends + chomp; + +- # patch all occurrences of openoffice in ICON line with +- # $prefix +- s/Icon=/Icon=$iconprefix/; ++ # patch all icons in ICON line with $prefix ++ if (! /Icon=document-new/ ) { # except for Icon=document-new which ++ # is a stock icon, not one of ours ++ s/Icon=/Icon=$iconprefix/; ++ } + + # patch all occurrences of openoffice in icon_filename + # line with $prefix +-- +2.32.0 + diff --git a/SOURCES/0001-fix-comparison-when-searching-cache.patch b/SOURCES/0001-fix-comparison-when-searching-cache.patch new file mode 100644 index 0000000..2928de1 --- /dev/null +++ b/SOURCES/0001-fix-comparison-when-searching-cache.patch @@ -0,0 +1,40 @@ +From a94b58277c7aeaa83ce14347cd0b8f7137969d03 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= +Date: Fri, 29 Oct 2021 14:20:57 +0200 +Subject: [PATCH] fix comparison when searching cache +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This made the cache always fail and re-cache, making CJK text layout +slower over time. A mistake from ef513fd4b049b214a03fbe6e that +converted !strcmp() to != instead of ==. + +Change-Id: Ib70579cd36d7b1df062e4d067e03f5c65e34b142 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124432 +Reviewed-by: Noel Grandin +Reviewed-by: Luboš Luňák +Tested-by: Luboš Luňák +(cherry picked from commit 5b38b5744af1e896892df708c16b83e1b551d2c7) +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124206 +Tested-by: Jenkins +--- + i18npool/source/breakiterator/xdictionary.cxx | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/i18npool/source/breakiterator/xdictionary.cxx b/i18npool/source/breakiterator/xdictionary.cxx +index 947a23c5073b..6b57433370c7 100644 +--- a/i18npool/source/breakiterator/xdictionary.cxx ++++ b/i18npool/source/breakiterator/xdictionary.cxx +@@ -152,7 +152,7 @@ void xdictionary::initDictionaryData(const char *pLang) + osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ); + for(const datacache & i : aLoadedCache) + { +- if( i.maLang != pLang ) ++ if( i.maLang == pLang ) + { + data = i.maData; + return; +-- +2.33.1 + diff --git a/SOURCES/0001-make-with-idlc-cpp-cpp-work-for-gcc-cpp-as-a-ucpp-re.patch b/SOURCES/0001-make-with-idlc-cpp-cpp-work-for-gcc-cpp-as-a-ucpp-re.patch new file mode 100644 index 0000000..9d4ed5c --- /dev/null +++ b/SOURCES/0001-make-with-idlc-cpp-cpp-work-for-gcc-cpp-as-a-ucpp-re.patch @@ -0,0 +1,111 @@ +From 748a9fd3a8e90e52a126190dbe0d97da6e0941ff Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Wed, 11 Aug 2021 20:55:14 +0100 +Subject: [PATCH] make --with-idlc-cpp=cpp work for gcc cpp as a ucpp + replacement + +e.g. the example of +https://bugs.launchpad.net/ubuntu/+source/libreoffice/+bug/1524638 +has the same output .urd using cpp with these flags as ucpp created + +Change-Id: Iadfd2deba7d365c66c3260fd6736c031987e107c +--- + config_host.mk.in | 1 + + configure.ac | 14 ++++++++++++++ + idlc/Executable_idlc.mk | 8 ++++++++ + idlc/source/idlccompile.cxx | 8 ++++++++ + 4 files changed, 31 insertions(+) + +diff --git a/config_host.mk.in b/config_host.mk.in +index 58ca1d1c14fb..6810660067b0 100644 +--- a/config_host.mk.in ++++ b/config_host.mk.in +@@ -635,6 +635,7 @@ export SYSTEM_RHINO=@SYSTEM_RHINO@ + export SYSTEM_SERF=@SYSTEM_SERF@ + export SYSTEM_STAROFFICE=@SYSTEM_STAROFFICE@ + export SYSTEM_UCPP=@SYSTEM_UCPP@ ++export SYSTEM_UCPP_IS_GCC=@SYSTEM_UCPP_IS_GCC@ + export SYSTEM_VISIO=@SYSTEM_VISIO@ + export SYSTEM_WPD=@SYSTEM_WPD@ + export SYSTEM_WPG=@SYSTEM_WPG@ +diff --git a/configure.ac b/configure.ac +index 3d2bf7e24555..ac226fd46ace 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -8807,9 +8807,22 @@ dnl =================================================================== + dnl Check for C preprocessor to use + dnl =================================================================== + AC_MSG_CHECKING([which C preprocessor to use in idlc]) ++SYSTEM_UCPP_IS_GCC= + if test -n "$with_idlc_cpp"; then + AC_MSG_RESULT([$with_idlc_cpp]) + AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp) ++ AC_MSG_CHECKING([if $with_idlc_cpp is GCC CPP]) ++ # ucpp will accept -v (to output version), warn about the others as unknown ++ # and return 1 (due to -v) ++ # gcc will accept -v (as verbose), --version (to output version) and -nostdinc ++ # and return 0 (due to --version ) if all options are supported ++ $SYSTEM_UCPP -v --version -nostdinc >/dev/null 2>/dev/null ++ if test $? -eq 0; then ++ SYSTEM_UCPP_IS_GCC=TRUE ++ AC_MSG_RESULT([yes]) ++ else ++ AC_MSG_RESULT([no]) ++ fi + else + AC_MSG_RESULT([ucpp]) + AC_MSG_CHECKING([which ucpp tp use]) +@@ -8822,6 +8835,7 @@ else + fi + fi + AC_SUBST(SYSTEM_UCPP) ++AC_SUBST(SYSTEM_UCPP_IS_GCC) + + dnl =================================================================== + dnl Check for epm (not needed for Windows) +diff --git a/idlc/Executable_idlc.mk b/idlc/Executable_idlc.mk +index e194e9049c77..f2f79dcb8911 100644 +--- a/idlc/Executable_idlc.mk ++++ b/idlc/Executable_idlc.mk +@@ -35,10 +35,18 @@ $(eval $(call gb_Executable_add_scanners,idlc,\ + )) + + ifneq (,$(SYSTEM_UCPP)) ++ + $(eval $(call gb_Executable_add_defs,idlc,\ + -DSYSTEM_UCPP \ + -DUCPP=\"file://$(SYSTEM_UCPP)\" \ + )) ++ ++ifneq ($(SYSTEM_UCPP_IS_GCC),) ++$(eval $(call gb_Executable_add_defs,idlc,\ ++ -DSYSTEM_UCPP_IS_GCC \ ++)) ++endif ++ + endif + + $(eval $(call gb_Executable_add_exception_objects,idlc,\ +diff --git a/idlc/source/idlccompile.cxx b/idlc/source/idlccompile.cxx +index bf3325d6821a..1902d63e0cad 100644 +--- a/idlc/source/idlccompile.cxx ++++ b/idlc/source/idlccompile.cxx +@@ -237,7 +237,15 @@ sal_Int32 compileFile(const OString * pathname) + ::std::vector< OUString> lCppArgs; + lCppArgs.emplace_back("-DIDL"); + lCppArgs.emplace_back("-C"); ++#ifdef SYSTEM_UCPP_IS_GCC ++ // -nostdinc Do not search the standard system directories for header files ++ lCppArgs.emplace_back("-nostdinc"); ++ // with gcc cpp, even when not explicitly including anything, /usr/include/stdc-predef.h ++ // gets inserted without -nostdinc ++#else ++ // -zI Do not use the standard (compile-time) include path. + lCppArgs.emplace_back("-zI"); ++#endif + + Options* pOptions = idlc()->getOptions(); + +-- +2.31.1 + diff --git a/SOURCES/0001-tdf-121546-sw-don-t-use-undo-array-s-m_pOutlineNodes.patch b/SOURCES/0001-tdf-121546-sw-don-t-use-undo-array-s-m_pOutlineNodes.patch new file mode 100644 index 0000000..8840208 --- /dev/null +++ b/SOURCES/0001-tdf-121546-sw-don-t-use-undo-array-s-m_pOutlineNodes.patch @@ -0,0 +1,72 @@ +From bced744fea67d50242701ed55271d40e803ac14e Mon Sep 17 00:00:00 2001 +From: Michael Stahl +Date: Mon, 15 Nov 2021 17:29:59 +0100 +Subject: [PATCH] tdf#121546 sw: don't use undo array's m_pOutlineNodes + +It's pointless. + +Change-Id: I304c123bffc16e6133d2953bc9a4f7a3afad14ef +--- + sw/source/core/docnode/ndnum.cxx | 2 ++ + sw/source/core/docnode/nodes.cxx | 18 ++++++++++++------ + 2 files changed, 14 insertions(+), 6 deletions(-) + +diff --git a/sw/source/core/docnode/ndnum.cxx b/sw/source/core/docnode/ndnum.cxx +index b3d66affa66e..a7b898ee5f0a 100644 +--- a/sw/source/core/docnode/ndnum.cxx ++++ b/sw/source/core/docnode/ndnum.cxx +@@ -38,6 +38,8 @@ bool SwOutlineNodes::Seek_Entry(SwNode* rP, size_type* pnPos) const + + void SwNodes::UpdateOutlineNode(SwNode & rNd) + { ++ assert(IsDocNodes()); // no point in m_pOutlineNodes for undo nodes ++ + SwTextNode * pTextNd = rNd.GetTextNode(); + + if (!(pTextNd && pTextNd->IsOutlineStateChanged())) +diff --git a/sw/source/core/docnode/nodes.cxx b/sw/source/core/docnode/nodes.cxx +index a7a2078b2091..ab3eb62ac9f2 100644 +--- a/sw/source/core/docnode/nodes.cxx ++++ b/sw/source/core/docnode/nodes.cxx +@@ -109,6 +109,16 @@ SwNodes::~SwNodes() + m_pEndOfContent.reset(); + } + ++static bool IsInsertOutline(SwNodes const& rNodes, sal_uLong const nIndex) ++{ ++ if (!rNodes.IsDocNodes()) ++ { ++ return false; ++ } ++ return nIndex < rNodes.GetEndOfRedlines().StartOfSectionNode()->GetIndex() ++ || rNodes.GetEndOfRedlines().GetIndex() < nIndex; ++} ++ + void SwNodes::ChgNode( SwNodeIndex const & rDelPos, sal_uLong nSz, + SwNodeIndex& rInsPos, bool bNewFrames ) + { +@@ -124,9 +134,7 @@ void SwNodes::ChgNode( SwNodeIndex const & rDelPos, sal_uLong nSz, + + // NEVER include nodes from the RedLineArea + sal_uLong nNd = rInsPos.GetIndex(); +- bool bInsOutlineIdx = ( +- rNds.GetEndOfRedlines().StartOfSectionNode()->GetIndex() >= nNd || +- nNd >= rNds.GetEndOfRedlines().GetIndex() ); ++ bool const bInsOutlineIdx = IsInsertOutline(rNds, nNd); + + if( &rNds == this ) // if in the same node array -> move + { +@@ -478,9 +486,7 @@ bool SwNodes::MoveNodes( const SwNodeRange& aRange, SwNodes & rNodes, + + // NEVER include nodes from the RedLineArea + sal_uLong nNd = aIdx.GetIndex(); +- bool bInsOutlineIdx = ( rNodes.GetEndOfRedlines(). +- StartOfSectionNode()->GetIndex() >= nNd || +- nNd >= rNodes.GetEndOfRedlines().GetIndex() ); ++ bool const bInsOutlineIdx = IsInsertOutline(rNodes, nNd); + + if( bNewFrames ) + // delete all frames +-- +2.33.1 + diff --git a/SOURCES/libreoffice-7.1.5.2.tar.xz.asc b/SOURCES/libreoffice-7.1.5.2.tar.xz.asc deleted file mode 100644 index 763522a..0000000 --- a/SOURCES/libreoffice-7.1.5.2.tar.xz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmDx/XsACgkQ9DSh76/u -rqNmoA//dMLWq+KgYcBsG24UfAsoHC3yqA1TYT0sbEMpgtFe7uavMJtphv9waPfA -9GmKZbHdDXD5BWQ6Bv8BlsCukpWEytw1NsDEhEZFURqp8fdO84Gcp7CFn3uI0ovO -yEznp3zAR60ut3tuCZyOB11h+BSldA/W73Z5xRR2ORfUDj4GuHi2+4/IKr5JtF+6 -YAj4AaHqgxp3MwxE5t/UdfVZLXP6SUvxLU7eoLhcnMLOd5oJAwfhABd5d85yzWZr -ZubXD239mYaMKJD1DGERlpqqfRSaMQOzJogIJVCiXr2fmFIsu0IKJVntb99pL/X4 -DleQsYMiFHS8XHDZpTduhI4GxAwy2YZ/HBm/iUxvbqICuII2UbVVzQJNNqogN4eD -pLybFxwdQwpuZn6M6GttmiOR6z6+USX4hzpMXPjNyDmGxlcw56uiF6Q4dmPG5/I7 -yyobJZWlpJ1WNJ9Qifv25Z8qkTdvfpSBCJxLxeN0SHkAHzYtbcCB9Uq/den0YY5v -QgaRRU5CPP0cC8X+zGkdgKI7wngj2NrvSpmG/lat1Rwqh8KlkPTc/yYXlIKoYnoU -Hc0EmHxvUxTiE0iKg2WboNG/bGufp0hBisbME10VPLmp5QVwkm4uxfGAjY3kiXol -E8G2jebIP6FCcYpC9rdNnQFGTAlRAf4dUoC2CwMLqlRdOy+7+A0= -=20Eu ------END PGP SIGNATURE----- diff --git a/SOURCES/libreoffice-7.1.7.2.tar.xz.asc b/SOURCES/libreoffice-7.1.7.2.tar.xz.asc new file mode 100644 index 0000000..4ddfa15 --- /dev/null +++ b/SOURCES/libreoffice-7.1.7.2.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmF5MyoACgkQ9DSh76/u +rqNIlxAAl22pTJr3sHrwuyp9mshPRjn8IY4iTsJilYzBPvn5HArIWXA+AHlSNFO3 +l8z/+GsR/+5LU/Fa1UeVC76gx8ZH3dAr8QqNRfdQ+d9Lb89WVj5P40bcYQgm2Mo6 +XSLyZqpieSL7/Z1CFaoQp5kz3wtk4F8XphGiKFjPbND/DPZAWMZLLvRWYUUJ8qUA +sq7LiXo+rPqOUR+svMz8EcrpBxPBYK/cEu9Fcrj/ruCznIR8DmVH+TLaOWYwBy53 +QgcHZ/TTMbTWvJLH0pL6Ha7c12Yxq64EmeNNRi8uP26Cnj3Wo28RSVOxXmvcwQ7y +WDOd/e3CyVkNLyHKccrWnhaesvmlInQpjF3u7ZmCNuWI2Tj2LDBKy60HSOn/K7l9 +hhkGUHYFP4zuyepnxE+3F3elWL2lKnYgOl5cyaiO1+5JeADb2sULXpf7wtSS95P6 +F6BvILJ3Di1XTTOV7y9OcMp7xRrxEFuLxwz3J3u5g3KagtXcNMaU4aahCX1VbtFg +tgemeADXAQZqEHdUgXzRUAy8n85jgyJpRNeFw1dnQ2d8NCbPUuy94H8iHJ77jhD8 +wplVhlY4andmwz2If+SulzLzmn/fKCtnrd1Q8z7sA6N7wbbQANO6/qQQs0k2Tr6W +N/uKfCZKfLBXONG3ybdsd/le86ZPKnvaR3r0QnQlUbFXQAn3ark= +=Za4s +-----END PGP SIGNATURE----- diff --git a/SOURCES/libreoffice-help-7.1.5.2.tar.xz.asc b/SOURCES/libreoffice-help-7.1.5.2.tar.xz.asc deleted file mode 100644 index 1e7c179..0000000 --- a/SOURCES/libreoffice-help-7.1.5.2.tar.xz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmDx/YQACgkQ9DSh76/u -rqPJ6g/9GLHnDRA48oPHKaXpZCZ0J7pzNlRFMrSuEpAyyRlkYX5/XRrWQKRUbalJ -qFCybU2nTiNRb8N3xiWb7y24+aNpPUZkx7rnU7Vm69TNe19WR9xKxkBhdWBkQLrD -tEv/mR0xOBHLdc+Q7cNCVzrQ3UWZIRChfmeNAgIl+DzVX1qMi60v8oANfuGJJxAa -l6Yj8lYm+04qfX8dPk4XZM9kTgJQMlLZMSbbPFwuoaJjuIsBi3Wu33Ppxvf37LpS -H6418wROajZ74Owa0htB2aAjQwIZjS/90noqY2SxGPBNf9gMNRmRTCX/mudAFUgZ -smkqRjoBZm+ZCDq2Oz8k4oEHsj1TUtIs5QhZI8VqToIA/y53SBn3bq42yME+0P/V -2V4pe6Qy0hv9u/YXsBAbLbXXVbr0LOaBe3BNK0dbdGBu1NWt8WLP1FBYpcKNl2Xw -0Ee/mS6JHoT1EGmKKaghml29zvqoQhqx1fUHN/l6zuxwvaTr18Ob8KRHsksXUde8 -4ULdO/O7QLTcNnI8CaPD3giIcihBEWvoMHtWUWHG1b39EUEfUs+djzyzK7jQZ3Ux -btUMDUUDth2sY8HVVdg3p4HUbehiRooEDRJCg/XxLsasA3d6siwPy2/vEciadmEi -iMTTyFxv5mQd1Bcg+lCPJRQ8ohL0GUeaFeMpSp3BF8uI3zq9NdM= -=Ej8U ------END PGP SIGNATURE----- diff --git a/SOURCES/libreoffice-help-7.1.7.2.tar.xz.asc b/SOURCES/libreoffice-help-7.1.7.2.tar.xz.asc new file mode 100644 index 0000000..ba20f80 --- /dev/null +++ b/SOURCES/libreoffice-help-7.1.7.2.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmF5MzAACgkQ9DSh76/u +rqPVvRAAtejhoQH4VXVAGvuCC9BRxBqmEhHUEdW2vxNZ42sX6OggTIgK5q58Uwa7 +2glVf0x+c/RxDFF68BfhiXoy4amIoJ6rFe2dLQzwfI0WmjFfSFaMCcthUnQa9giz +5U9p72apoYk2lUQEqarLthY1903DNB83bR1lUgB80mx13+xoRRCsEJ4cgltPE17c +0Ntb+sA6eETeKe8PvAK4SIApIJn/J26hZ6Qhoc74rcNpSiEtIKKChaLLB7rzmMQR +LZ6jDBMC7PmK+S/ppG8dWu0v4W+jirZhVKTDXFb90itVEAywlSUy+QgANFS8zEot +8yxH2n7Hv4ZnBCeP2nLK888al+e2V3i+H/2Jm+9NRvF8aWTDMjMmWas4VGhrkDXM +NYl37twVDY7Wq9jbw7YAht/LV7N8z0fnzaX/M5hUFnxS82+sf1/9UF8eKp4m4mCF +ir7nIQiwmtZHx1tMJhtooZA7/3C72T2ePY7i5i0Q5bWwWTOczSMfbeq4344h5Kyg +m7EaZJ4sDcAC/XCIokz3WzHQeHkYQHykCZGBFqF27vAIC1AqQqYcYg41hZE7ntMB +CHdscxlFAxcRFIBHozdCIMzi4hHnFWNjXPrMS9xhROne/EI4zTE0PPXumVlRH8ri +0yQ9egcSoyUMQ1Vgvkhhey+Dp6nLhwdVOIo8RbI4SdFE3245s7U= +=pb2q +-----END PGP SIGNATURE----- diff --git a/SOURCES/libreoffice-translations-7.1.5.2.tar.xz.asc b/SOURCES/libreoffice-translations-7.1.5.2.tar.xz.asc deleted file mode 100644 index 462189c..0000000 --- a/SOURCES/libreoffice-translations-7.1.5.2.tar.xz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmDx/YUACgkQ9DSh76/u -rqN76g//Z2aFAo46O/8ODbH4tIF6Cvc9JgI3Sy6DP6nlDHontrAfeENUpe2y3eRv -xJe2Ksu9P7HqGSndCDWdjZkD8ClBKG/CT9kj3+mn2ehzopZU+pBFhvhqanR48LXZ -S8wbntPHhUvi+xN0qapMx4dGAXNNCZfSMyrAkC8g1e8Bbc3PViwSjwZaBl2dPMm3 -mZpnobviWS34LYcCgvRdnoJxvNLwem2eOV7WNkKJvmhEZ9NrzYIxorIrTxQBm0Ri -/qli+4p1KTyTn8cRnCsaspmi124y62f1z4ml9Sji0hQwFVRI0pCWce7OeqR1VgH6 -LjJVhq8yea5UFVvXq1h/5txlW6+49tX/ot9vOrFfp+Z1zgf52YA0Bdz6lsxiCw1S -kzb36UWFJ2Ydj3J+JJnnLri4psuH1EazOcEmK9iAGV6FwbtmI9StrDLuYg+Ag6mr -036kGJd/Bl0bvXiZkQudPuF1CTAhSg1lPej08AC2KRn9IFvr+5yJVfrR7zWQXyF4 -4N3hWNDBuPcYLaWpwtak1IjMtNlIRr+C7BiZdPXJB2NKJcBwBqcRVRNU8LEVSpVY -YLXnGKlzXtCRrtIE2bcUa64/RHx/mCaiCJkTXdwvNxy/e2PiWy7oPWMQzH0QodZs -R6h0hcXz+hC8m59e9/ecQH+oso8ct9PCmkq50J78Dx7gsu35X3o= -=FjrM ------END PGP SIGNATURE----- diff --git a/SOURCES/libreoffice-translations-7.1.7.2.tar.xz.asc b/SOURCES/libreoffice-translations-7.1.7.2.tar.xz.asc new file mode 100644 index 0000000..f048009 --- /dev/null +++ b/SOURCES/libreoffice-translations-7.1.7.2.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmF5MzEACgkQ9DSh76/u +rqPg8A//b0GQhbJ7HvvN1tqg9arFk+sKELpwSdP3qsCHn89jNzSvGg62TL10sYhu +7CSBa7cqwdSMUDIEFjukZ+iUCClfLTilEo1i9Vtc4QXCgy1msFAdsxBAtMdHbRiN +u0AWII370BlXjsM7RAj/Qcn+z+TFLsMEM8KrKWFb0XBAxKdDUXyfhFFZxvEUNWDh +g5lK6ojyCT47WdEx1dQFBPKqld1MA6bcOf5hY+L0oo6MSVGGuB6uXQOUp7oKE1cQ +TscaeB0X6/dBlQXyHDRfIGYuys42NWPpsXo8e2r6USJnTsCSjYFI8MtS1Z5YCEjk +EOrQyrS0SnqjvoYmsTzb8bcwR5ydcqmGk07JV/1qLiYcEGuk28jEkRgOm4zi6d3N +hz/zU0XwUBrffFw3jzuzL14CcdC+8xGn5kN4mwHSO1YUVCgxgXYE/Gpv0EzX0Es8 +5RlpQcM4f+Vgo3L62ZFfZLqD1RfKNGZ2iq1N/SxEbWOJYNWO5aUWEZmEi5QZMgqH +9v0zZuZ5tIDrOW5kw9lImZmvY21sEzLBsfboc8oxmJFbzsAkaFxZs6R/IZJbdUIp +qDkUpgIiNaE9XJl2600xD2jC3f5nH4F+qmKrPFxFpkqc+FdVzNRHa2n83WG7D13F ++DDhochyKpHfq36wo93GTjHeAXEHP8G4E3kZ4MyH1VFze6o5olQ= +=tYyX +-----END PGP SIGNATURE----- diff --git a/SPECS/libreoffice.spec b/SPECS/libreoffice.spec index ecbfbe1..b7bfa67 100644 --- a/SPECS/libreoffice.spec +++ b/SPECS/libreoffice.spec @@ -1,5 +1,5 @@ # download path contains version without the last (fourth) digit -%global libo_version 7.1.5 +%global libo_version 7.1.7 # Should contain .alphaX / .betaX, if this is pre-release (actually # pre-RC) version. The pre-release string is part of tarball file names, # so we need a way to define it easily at one place. @@ -50,7 +50,7 @@ Summary: Free Software Productivity Suite Name: libreoffice Epoch: 1 Version: %{libo_version}.2 -Release: 4%{?libo_prerelease}%{?dist} +Release: 3%{?libo_prerelease}%{?dist} License: (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and Public Domain and ASL 2.0 and MPLv2.0 and CC0 URL: http://www.libreoffice.org/ @@ -116,7 +116,6 @@ BuildRequires: perl(base) BuildRequires: glibc-all-langpacks BuildRequires: libappstream-glib %endif -BuildRequires: ucpp BuildRequires: zip # libs / headers - common @@ -255,9 +254,15 @@ Patch5: 0001-Get-rid-of-apache-commons-logging.patch Patch6: 0001-gtk3-workaround-missing-gdk_threads_enter-calls-in-e.patch Patch7: 0001-Replace-inet_ntoa-with-inet_ntop.patch Patch8: 0001-Simplify-construction-of-a-hardcoded-IPv4-address.patch -Patch9: 0001-Remove-unused-DOCTYPE-from-odk-examples-xcu-file.patch -Patch10: 0001-math.desktop-include-Spreadsheet-category.patch -Patch11: 0001-rhbz-1980800-allow-convert-to-csv-to-write-each-shee.patch +Patch9: 0001-math.desktop-include-Spreadsheet-category.patch +Patch10: 0001-rhbz-1980800-allow-convert-to-csv-to-write-each-shee.patch +Patch11: 0001-make-with-idlc-cpp-cpp-work-for-gcc-cpp-as-a-ucpp-re.patch +Patch12: 0001-Revert-tdf-101630-gdrive-support-w-oAuth-and-Drive-A.patch +Patch13: 0001-document-new-shouldn-t-get-prefixed-to-become-libreo.patch +Patch14: 0001-Resolves-tdf-145567-restore-focus-to-the-usual-frame.patch +Patch15: 0001-Resolves-tdf-140250-don-t-share-adjustments-between-.patch +Patch16: 0001-fix-comparison-when-searching-cache.patch +Patch17: 0001-tdf-121546-sw-don-t-use-undo-array-s-m_pOutlineNodes.patch # not upstreamed Patch500: 0001-disable-libe-book-support.patch @@ -1111,7 +1116,7 @@ touch autogen.lastrun --with-gdrive-client-secret="GYWrDtzyZQZ0_g5YoBCC6F0I" \ --with-gdrive-client-id="457862564325.apps.googleusercontent.com" \ --enable-python=system \ - --with-system-ucpp \ + --with-idlc-cpp=cpp \ %{distrooptions} \ %{?bundling_options} \ %{?archoptions} \ @@ -1497,7 +1502,7 @@ install -m 0755 -d %{buildroot}%{_javadir}/%{name} for jar in %{buildroot}%{baseinstdir}/program/classes/*.jar; do j=`basename $jar` case ${j%.jar} in - juh|jurt|ridl|unoloader|unoil|officebean) + juh|jurt|libreoffice|ridl|unoloader|unoil|officebean) mv $jar %{buildroot}%{_javadir}/%{name} ln -sr %{buildroot}%{_javadir}/%{name}/$j $jar ;; @@ -2133,6 +2138,7 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %dir %{_javadir}/%{name} %{_javadir}/%{name}/juh.jar %{_javadir}/%{name}/jurt.jar +%{_javadir}/%{name}/libreoffice.jar %{_javadir}/%{name}/ridl.jar %{_javadir}/%{name}/unoloader.jar %license instdir/LICENSE @@ -2243,7 +2249,23 @@ gtk-update-icon-cache -q %{_datadir}/icons/hicolor &>/dev/null || : %{_includedir}/LibreOfficeKit %changelog -* Mon Aug 09 2021 Mohan Boddu +* Mon Nov 22 2021 Caolán McNamara - 1:7.1.7.2-3 +- Resolves: rhbz2023185 merge in fedora 34 changes + +* Mon Nov 08 2021 Caolán McNamara - 1:7.1.7.2-2 +- Resolves: tdf#145567 restore start center focus to the right widget + +* Fri Oct 29 2021 Caolán McNamara - 1:7.1.7.2-1 +- Resolves: rhbz#2014990 upgrade to 7.1.7 + +* Mon Oct 11 2021 Caolán McNamara - 1:7.1.6.2-2 +- Resolves: rhbz#2001452 upgrade to 7.1.6 + +* Thu Aug 12 2021 Caolán McNamara - 1:7.1.5.2-5 +- replace use of ucpp with gcc cpp +- Resolves: tdf#132739 two html style tags where there should be just one + +* Mon Aug 09 2021 Mohan Boddu - 1:7.1.5.2-4 - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags Related: rhbz#1991688