Accepting request 687580 from LibreOffice:Factory

- Update the old-icu.patch based on the upstream feedback

- old-boost.patch: update patch to fix build with Boost from SLE-12

- Update to 6.2.2.2:
  * Few more tweaks over previous RC1

- Add patch to fix build with old icu from Leap 42:
  * old-icu.patch

- Add patch to fix build on Leap 42:
  * kde5.patch

OBS-URL: https://build.opensuse.org/request/show/687580
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libreoffice?expand=0&rev=176
This commit is contained in:
Dominique Leuenberger 2019-03-26 14:36:33 +00:00 committed by Git OBS Bridge
commit 6146dd44ce
17 changed files with 535 additions and 61 deletions

350
kde5.patch Normal file
View File

@ -0,0 +1,350 @@
From 265caa4381c048c346c907b017561ab0fe0367ff Mon Sep 17 00:00:00 2001
From: Michael Stahl <Michael.Stahl@cib.de>
Date: Fri, 22 Feb 2019 19:19:27 +0100
Subject: [PATCH] tdf#119856 vcl: Qt5/KDE5 RunInMainThread
The problem with the current approach of transferring calls to the main
thread with Q_EMIT signals is that if the code that should run in the
main thread needs SolarMutex, then the non-main-thread must use
SolarMutexReleaser - but then the main thread will run not only the call
that is needed right now, but will potentially process all pending
events, and the other thread hasn't prepared for that.
We need the inter-thread feature of Qt::BlockingQueuedConnection and the
non-queued feature of Qt::DirectConnection, but this combination doesn't
appear to exist.
So the SolarMutexReleaser needs to go - but then the main thread does
need SolarMutex for some things, and hence we need to trick it into
believing it has SolarMutex with the m_bNoYieldLock hack.
Then it becomes apparent that the main thread may be blocked on either
Qt events, which is fine, or on the SalYieldMutex's m_aMutex, which will
never be released now.
So the main thread must never block on m_aMutex; the alternative is to
use the same approach as the osx code (and, in a somewhat different
form, the svp code), and add some condition variables on which the main
thread can block if it fails to acquire the m_aMutex immediately.
It's even possible to do this in a somewhat generic way with lambdas.
This does appear to work, but it makes the Q_EMIT approach entirely
untenable, because now the main thread will be blocked on the condition
variable and the non-main-thread will be blocked until the Qt event is
processed.
Change-Id: I6480a6b909d5ec8814b2ff10dbefb0f3686a83c7
Reviewed-on: https://gerrit.libreoffice.org/68232
Tested-by: Jenkins
Reviewed-by: Katarina Behrens <Katarina.Behrens@cib.de>
---
vcl/inc/qt5/Qt5Instance.hxx | 7 +-
vcl/qt5/Qt5Instance.cxx | 175 ++++++++++++++++++++++++++++---
vcl/unx/kde5/KDE5SalInstance.cxx | 23 ++--
vcl/unx/kde5/KDE5SalInstance.hxx | 8 +-
4 files changed, 181 insertions(+), 32 deletions(-)
Index: libreoffice-6.2.2.1/vcl/inc/qt5/Qt5Instance.hxx
===================================================================
--- libreoffice-6.2.2.1.orig/vcl/inc/qt5/Qt5Instance.hxx
+++ libreoffice-6.2.2.1/vcl/inc/qt5/Qt5Instance.hxx
@@ -27,6 +27,8 @@
#include <QtCore/QObject>
+#include <functional>
+
class QApplication;
class SalYieldMutex;
class SalFrame;
@@ -50,15 +52,18 @@ public:
private Q_SLOTS:
bool ImplYield(bool bWait, bool bHandleAllCurrentEvents);
+ void ImplRunInMain();
Q_SIGNALS:
bool ImplYieldSignal(bool bWait, bool bHandleAllCurrentEvents);
- std::unique_ptr<SalMenu> createMenuSignal(bool, Menu*);
+ void ImplRunInMainSignal();
public:
explicit Qt5Instance(bool bUseCairo = false);
virtual ~Qt5Instance() override;
+ void RunInMainThread(std::function<void()> func);
+
virtual SalFrame* CreateFrame(SalFrame* pParent, SalFrameStyleFlags nStyle) override;
virtual SalFrame* CreateChildFrame(SystemParentData* pParent,
SalFrameStyleFlags nStyle) override;
Index: libreoffice-6.2.2.1/vcl/qt5/Qt5Instance.cxx
===================================================================
--- libreoffice-6.2.2.1.orig/vcl/qt5/Qt5Instance.cxx
+++ libreoffice-6.2.2.1/vcl/qt5/Qt5Instance.cxx
@@ -43,13 +43,165 @@
#include <QtWidgets/QWidget>
#include <vclpluginapi.h>
+#include <tools/debug.hxx>
+#include <comphelper/flagguard.hxx>
#include <sal/log.hxx>
#include <osl/process.h>
#include <headless/svpbmp.hxx>
+#include <mutex>
+#include <condition_variable>
+
+/// TODO: not much Qt5 specific here? could be generalised, esp. for OSX...
+/// this subclass allows for the transfer of a closure for running on the main
+/// thread, to handle all the thread affine stuff in Qt5; the SolarMutex is
+/// "loaned" to the main thread for the execution of the closure.
+/// @note it doesn't work to just use "emit" and signals/slots to move calls to
+/// the main thread, because the other thread has the SolarMutex; the other
+/// thread (typically) cannot release SolarMutex, because then the main thread
+/// will handle all sorts of events and whatnot; this design ensures that the
+/// main thread only runs the passed closure (unless the closure releases
+/// SolarMutex itself, which should probably be avoided).
+class Qt5YieldMutex : public SalYieldMutex
+{
+public:
+ /// flag only accessed on main thread:
+ /// main thread has "borrowed" SolarMutex from another thread
+ bool m_bNoYieldLock = false;
+ /// members for communication from non-main thread to main thread
+ std::mutex m_RunInMainMutex;
+ std::condition_variable m_InMainCondition;
+ bool m_isWakeUpMain = false;
+ std::function<void()> m_Closure; ///< code for main thread to run
+ /// members for communication from main thread to non-main thread
+ std::condition_variable m_ResultCondition;
+ bool m_isResultReady = false;
+
+ virtual bool IsCurrentThread() const override;
+ virtual void doAcquire(sal_uInt32 nLockCount) override;
+ virtual sal_uInt32 doRelease(bool const bUnlockAll) override;
+};
+
+bool Qt5YieldMutex::IsCurrentThread() const
+{
+ auto const* pSalInst(static_cast<Qt5Instance const*>(GetSalData()->m_pInstance));
+ assert(pSalInst);
+ if (pSalInst->IsMainThread() && m_bNoYieldLock)
+ {
+ return true; // main thread has borrowed SolarMutex
+ }
+ return SalYieldMutex::IsCurrentThread();
+}
+
+void Qt5YieldMutex::doAcquire(sal_uInt32 nLockCount)
+{
+ auto const* pSalInst(static_cast<Qt5Instance const*>(GetSalData()->m_pInstance));
+ assert(pSalInst);
+ if (!pSalInst->IsMainThread())
+ {
+ SalYieldMutex::doAcquire(nLockCount);
+ return;
+ }
+ if (m_bNoYieldLock)
+ {
+ return; // special case for main thread: borrowed from other thread
+ }
+ do // main thread acquire...
+ {
+ std::function<void()> func; // copy of closure on thread stack
+ {
+ std::unique_lock<std::mutex> g(m_RunInMainMutex);
+ if (m_aMutex.tryToAcquire())
+ {
+ // if there's a closure, the other thread holds m_aMutex
+ assert(!m_Closure);
+ m_isWakeUpMain = false;
+ --nLockCount; // have acquired once!
+ ++m_nCount;
+ break;
+ }
+ m_InMainCondition.wait(g, [this]() { return m_isWakeUpMain; });
+ m_isWakeUpMain = false;
+ std::swap(func, m_Closure);
+ }
+ if (func)
+ {
+ assert(!m_bNoYieldLock);
+ m_bNoYieldLock = true; // execute closure with borrowed SolarMutex
+ func();
+ m_bNoYieldLock = false;
+ std::unique_lock<std::mutex> g(m_RunInMainMutex);
+ assert(!m_isResultReady);
+ m_isResultReady = true;
+ m_ResultCondition.notify_all(); // unblock other thread
+ }
+ } while (true);
+ SalYieldMutex::doAcquire(nLockCount);
+}
+
+sal_uInt32 Qt5YieldMutex::doRelease(bool const bUnlockAll)
+{
+ auto const* pSalInst(static_cast<Qt5Instance const*>(GetSalData()->m_pInstance));
+ assert(pSalInst);
+ if (pSalInst->IsMainThread() && m_bNoYieldLock)
+ {
+ return 1; // dummy value
+ }
+
+ std::unique_lock<std::mutex> g(m_RunInMainMutex);
+ // read m_nCount before doRelease (it's guarded by m_aMutex)
+ bool const isReleased(bUnlockAll || m_nCount == 1);
+ sal_uInt32 nCount = SalYieldMutex::doRelease(bUnlockAll);
+ if (isReleased && !pSalInst->IsMainThread())
+ {
+ m_isWakeUpMain = true;
+ m_InMainCondition.notify_all(); // unblock main thread
+ }
+ return nCount;
+}
+
+// this could be abstracted to be independent of Qt5 by passing in the
+// event-trigger as another function parameter...
+// it could also be a template of the return type, then it could return the
+// result of func... but then how to handle the result in doAcquire?
+void Qt5Instance::RunInMainThread(std::function<void()> func)
+{
+ DBG_TESTSOLARMUTEX();
+ if (IsMainThread())
+ {
+ func();
+ return;
+ }
+
+ Qt5YieldMutex* const pMutex(static_cast<Qt5YieldMutex*>(GetYieldMutex()));
+ {
+ std::unique_lock<std::mutex> g(pMutex->m_RunInMainMutex);
+ assert(!pMutex->m_Closure);
+ pMutex->m_Closure = func;
+ // unblock main thread in case it is blocked on condition
+ pMutex->m_isWakeUpMain = true;
+ pMutex->m_InMainCondition.notify_all();
+ }
+ // wake up main thread in case it is blocked on event queue
+ // TriggerUserEventProcessing() appears to be insufficient in case the
+ // main thread does QEventLoop::WaitForMoreEvents
+ Q_EMIT ImplRunInMainSignal();
+ {
+ std::unique_lock<std::mutex> g(pMutex->m_RunInMainMutex);
+ pMutex->m_ResultCondition.wait(g, [pMutex]() { return pMutex->m_isResultReady; });
+ pMutex->m_isResultReady = false;
+ }
+}
+
+void Qt5Instance::ImplRunInMain()
+{
+ SolarMutexGuard g; // trigger the dispatch code in Qt5YieldMutex::doAcquire
+ (void)this; // suppress unhelpful [loplugin:staticmethods]; can't be static
+}
+
Qt5Instance::Qt5Instance(bool bUseCairo)
- : SalGenericInstance(o3tl::make_unique<SalYieldMutex>())
+ : SalGenericInstance(o3tl::make_unique<Qt5YieldMutex>())
, m_postUserEventId(-1)
, m_bUseCairo(bUseCairo)
{
@@ -65,8 +217,8 @@ Qt5Instance::Qt5Instance(bool bUseCairo)
// is processed before the thread emitting the signal continues
connect(this, SIGNAL(ImplYieldSignal(bool, bool)), this, SLOT(ImplYield(bool, bool)),
Qt::BlockingQueuedConnection);
- connect(this, &Qt5Instance::createMenuSignal, this, &Qt5Instance::CreateMenu,
- Qt::BlockingQueuedConnection);
+ connect(this, &Qt5Instance::ImplRunInMainSignal, this, &Qt5Instance::ImplRunInMain,
+ Qt::QueuedConnection); // no Blocking!
}
Qt5Instance::~Qt5Instance()
@@ -136,15 +288,14 @@ Qt5Instance::CreateVirtualDevice(SalGrap
std::unique_ptr<SalMenu> Qt5Instance::CreateMenu(bool bMenuBar, Menu* pVCLMenu)
{
- if (qApp->thread() != QThread::currentThread())
- {
- SolarMutexReleaser aReleaser;
- return Q_EMIT createMenuSignal(bMenuBar, pVCLMenu);
- }
-
- Qt5Menu* pSalMenu = new Qt5Menu(bMenuBar);
- pSalMenu->SetMenu(pVCLMenu);
- return std::unique_ptr<SalMenu>(pSalMenu);
+ std::unique_ptr<SalMenu> pRet;
+ RunInMainThread([&pRet, bMenuBar, pVCLMenu]() {
+ Qt5Menu* pSalMenu = new Qt5Menu(bMenuBar);
+ pRet.reset(pSalMenu);
+ pSalMenu->SetMenu(pVCLMenu);
+ });
+ assert(pRet);
+ return pRet;
}
std::unique_ptr<SalMenuItem> Qt5Instance::CreateMenuItem(const SalItemParams& rItemData)
Index: libreoffice-6.2.2.1/vcl/unx/kde5/KDE5SalInstance.cxx
===================================================================
--- libreoffice-6.2.2.1.orig/vcl/unx/kde5/KDE5SalInstance.cxx
+++ libreoffice-6.2.2.1/vcl/unx/kde5/KDE5SalInstance.cxx
@@ -46,21 +46,16 @@ KDE5SalInstance::KDE5SalInstance()
pSVData->maAppData.mxToolkitName = OUString("kde5");
KDE5SalData::initNWF();
-
- connect(this, &KDE5SalInstance::createFrameSignal, this, &KDE5SalInstance::CreateFrame,
- Qt::BlockingQueuedConnection);
- connect(this, &KDE5SalInstance::createFilePickerSignal, this,
- &KDE5SalInstance::createFilePicker, Qt::BlockingQueuedConnection);
}
SalFrame* KDE5SalInstance::CreateFrame(SalFrame* pParent, SalFrameStyleFlags nState)
{
- if (!IsMainThread())
- {
- SolarMutexReleaser aReleaser;
- return Q_EMIT createFrameSignal(pParent, nState);
- }
- return new KDE5SalFrame(static_cast<KDE5SalFrame*>(pParent), nState, true);
+ SalFrame* pRet(nullptr);
+ RunInMainThread([&pRet, pParent, nState]() {
+ pRet = new KDE5SalFrame(static_cast<KDE5SalFrame*>(pParent), nState, true);
+ });
+ assert(pRet);
+ return pRet;
}
uno::Reference<ui::dialogs::XFilePicker2>
@@ -68,7 +63,11 @@ KDE5SalInstance::createFilePicker(const
{
if (!IsMainThread())
{
- return Q_EMIT createFilePickerSignal(xMSF);
+ uno::Reference<ui::dialogs::XFilePicker2> xRet;
+ RunInMainThread(
+ [&xRet, this, xMSF]() { xRet = this->createFilePicker(xMSF); });
+ assert(xRet);
+ return xRet;
}
// In order to insert custom controls, KDE5FilePicker currently relies on KFileWidget
Index: libreoffice-6.2.2.1/vcl/unx/kde5/KDE5SalInstance.hxx
===================================================================
--- libreoffice-6.2.2.1.orig/vcl/unx/kde5/KDE5SalInstance.hxx
+++ libreoffice-6.2.2.1/vcl/unx/kde5/KDE5SalInstance.hxx
@@ -42,13 +42,7 @@ public:
virtual bool IsMainThread() const override;
-Q_SIGNALS:
- SalFrame* createFrameSignal(SalFrame* pParent, SalFrameStyleFlags nStyle);
-
- css::uno::Reference<css::ui::dialogs::XFilePicker2>
- createFilePickerSignal(const css::uno::Reference<css::uno::XComponentContext>&);
-
-private Q_SLOTS:
+private:
virtual SalFrame* CreateFrame(SalFrame* pParent, SalFrameStyleFlags nStyle) override;
virtual css::uno::Reference<css::ui::dialogs::XFilePicker2>

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f1dede48c4891019126fb7e3cf0d36a7fa422730435ff64b4127c727973371cd
size 214021928

View File

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAlx9T/EACgkQ9DSh76/u
rqN8vQ/9HbmIliP9MIgM5DmATLJdxXktJAC4T6Qlv2THWVbPMPIVqAeHavfU6joH
iH2SB1/yGeRAzphHKfoI4yCRISz23erBOkybH18B49AeVu6vJ2egyId4JeuvUMNn
5J4dmBJ231Yrm1DX9fIgD0fNrpyumr2weJIp8DTzfUZO4fN7EAn6le7hUule5iRg
MAp5OBhECcyQ5KLQsA338Iw2QUGYUOXER6g3xZm9UzRMXZOXyym8pBbRdOvh+Yhx
+7t2IVGHzH0vX9JC8ncvUQZ+z6fltba6Pvh2wFE5C79uYT6OJvjUhALV1QYa3FF+
2d5JyQNamWCAvnYn6rr1/v4o3aq72M/ByJWodNtdjhaQpZ3F16K42yLf+vFO8z0+
/BjBCpsWMkALPtOTa85JM3JnqR5SkLUaovxE5hHxpE52B8C0B14v3wDmTqPvPmj9
UXsoyvddLypmObm+ejb5uoz+4ofwJGUU68MYN6SNObQykAjhcJrqKWCN7yOmh6Iw
ieE+RmxxhherDF3TpyTvmcohUBMjQrljs9P/bRa5fCH8girOFY6Qom4RUMxeoiua
IO6GlMSfL7vFqly/9AHTFCde4jja4SF+mMB8BFYTyzWu4LSI364fPyzSWH9H3dgN
z/TQWTkn7cVrALsNyx799Hy6EJvB1fBljlEE2RHZEsDg4ghGcb0=
=VUTs
-----END PGP SIGNATURE-----

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b83ad3a8aa7bebf34db9e984d518a8f2248ed685e04be8373cfa87bb04e31f69
size 214029032

View File

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAlyMCLQACgkQ9DSh76/u
rqPa6w//fQXFAkUgOqDprN/wO07NIpDj5o3dONHdUk1o7cVZ9jV9SDxaKJ/+CDdW
+d7e5fkVZXo6JRul3sG9ovszpF7D09Af8C4RKGaarEj0oK4TurKaW58J+0jnOGRG
IRZITZwN68hSu1pwINOso6aSctCd6RYEkUZjb7ZA25c00kQpNhFr/pIDl2hG6tm6
V9KH/j1Cc/gYEWKt8cag8ByVCeUwNfFRhjvmBS6f2ms26D/mMVMypKyI2UcgMZE3
kcd5Q0C5JIf9AQhzWrPTrFoZq5CH9Axlfb9r5EFhj1vt0aw0gqQmNXfi/iZIPbyC
KrGh8GRiJmu0aOinEF1TXDuzBX9VX93yBUCcxF1vEniF+esGeq+Mqb5rPyvD047e
uK67/GEnG86j2ewDJHgHr/rteQCP09kbkICHQwKuEmc+hi8H2GBVB0YihFETBh3l
WXHnPVMGDcihrXGiggaGVXFv7Br4SFZCia9C3Hj1RNBD4HO4VXnhCJgXuC2HFga8
oetINLa2WqKl6MJEfp0lIsjSBn9byv9VlodaQRy103tm3OGKviKsrlfqqYl2vFUn
cVEWyHZx2nLOPS6kjnlf0OtxZnqhyh0VeojDOAcpv+hbV84BprGEcyrx3OWGnMfg
yXdvHTBWhSJUDOXM0vxirrZTI4JgrcPJOzWJZCYJXCyyNqMKdB8=
=uRnL
-----END PGP SIGNATURE-----

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:46a4d2d21014ee1bad72caeca0df32214fba3731713d4b64205b48cded1e280c
size 15267328

View File

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAlx9T/kACgkQ9DSh76/u
rqNaUA//aWKi8+1X51ewDsnUKE9KGloHysfZx0IePISHllW1SgzVC943kotknPRR
2a3RX6QtGO6NTmKIAS3BVq+PZwZxejahpxm+Huk/Mt5qO1dR/H/xa1eaop1npmty
c8EZnJuWF/G064vKCTpOVOvmUlMsRC7hxKNGnU45lTsyTZt5qIGmKk3XCe3XX/xG
IGiBTErVSn3hNOaq4id8apkynTzSq3Lo/qtZAJcZAZNosJ1OSX6XwXrlghssT1Uf
/uddMkZusUi2Mt7YRgdLf6yt0YxfW5vw7Mais1obp9e/iQdKPamh2soPzFv2TDb4
zwPA2cHAh7m6L9mM5U1h4Y/xGjJ5dIqpA/2MQXcg7UnHfuwmZLW3sEadjCoV2t4i
oURwC49E07dGb5dC47reW4OpKEg2habYed1rXZUZFKGy+iGsTXhqLUe17C0I8NIx
/kYhnj7IjGltW8MoV15sc9vv2OS6iOgxnuV5HLth5+2qm2r+25WGr+yDHQ2HsHUa
k6kVa2ZxEXJRCV3cZ3iLHSIjYhb6/LmhCXRFBFSR+c/lJiy/qPkIiUtabIxa4LIN
324y5MIx/CKAZaMtjrVbwjhCG7LRFt3uaG0cyvYlOYO7EiXTJzajYuRYqUsvE1v1
Eg36lggFLwz/Ka9+R2wP6rZ+2ThZf1ENNrm73WMd8yWwFK0bqRM=
=VNac
-----END PGP SIGNATURE-----

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:619f92db787dc8cb4aa81f203b3eefbd02a4affd382bf8d1b9268c846d360d92
size 15267780

View File

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAlyMCLgACgkQ9DSh76/u
rqOx1Q/9EEm+O4ly/+Sf79Hmhgi4nD3OmZOpN9s+Z0zxbEq/7P9UtBxQiD21yqwW
XQN0w77dJwFflVVF8yb2rvsdfs9LFs4XzbnSEMmlCNq3OAKYazRbK9XYz2pnazB6
mEHi3mE0z2jdvbbO9xbRjrIc90bg3T2dEFKX27FjpL19JpSQDpEILJyi9VHqyupJ
GsQnIdPK8Z9bKX6tcftu4ldh1601UNoRBNprj/0Ay+j4XPpYoWhdDaOA9sI+CP6L
irWZTCObulzrFObpkCzZm/fx9qegGLZ1f/X9B64aBDGPPOACc3smmjhAFSwpOsvT
JrvHb46Xgd3gM4fs64uZ/BOSkw5NCEM/kRZoCTrwVMezi4np/0mZEeN0wYa+jJaH
n+fWYiraAHibnIfvypWveUyXYRkeUaqJfthg7ajewbfvA4e4Fsx5TMgIz9/WQafm
NlznBHAoCWo8jXrub1RDk32zU1ubLnroZxFvdDmGZZSNIuom9wIc2pv/YAsc6ISC
EnwRMu8WEyQWu4yKNcLQaVqZnTX+6Xks7aCmEUBy4uLRiAOMPK2kzPeJsq68Jwpp
7yuZoi8GbpQo08Y8yQ6V5MdjSFwjSK9Vv1SiOONF/MFxNqYrVRQEQwgfs0Mk2aem
goVHu6jGvNV+Z3RTbCsTS/7mqrJUKlZPXzwr75BFrUcZ7894W24=
=2T6D
-----END PGP SIGNATURE-----

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:106c66c26d049c99ae4d1b266bce9866ccae6da33412729751bd056726eb0355
size 141855216

View File

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAlx9T/oACgkQ9DSh76/u
rqNvhw/6AtxBjHPtWRmbi8phmYjAD0qVPEklRD6HDNG6gEoyGDpck1u4I3MU4Qd5
tKABcVxsAITKkPik87Uwo4uItCGVbgIxAhxYWslyJQgp8Uz0TiJNOJMZthdZjrXw
P5kokF45ZW6CiGUbvru5JqDVvgfnCzB5y6lmiuwbTfasTmJt+nhzbNYJPP1fAR6z
0epeaaKx9RcaRLtGH6q7fIb3zTSR2d24mA6uxj/JrGCRBSkd03Jh6B05jNxw92s/
EY4fClrUpxCvflb+HLd9+LVD6MdeMocNQ3tCHvEZwkMg6TNM6bAurmLi25aVPRwg
uX1G6UI+7F9pgv7km/gnDfbcchBKehZpKkU9Z1J4cCf2bxpidvlDEbZYlulZZU+F
n5AJXxe8lfta2Yo5yd53pPZCoKTs6B4V60A3tqPOw5vUBFGC3kKgvtBO6r3w90jy
nwM2w0PpFxBUEBYxk1+nURZbDzvWFKD71fycrWOEl3fzcQQHe8iOUS+e0pHsHIdT
VKTGeX1dDZfURaSaEhvoJIhyeegBZVN6LzJJ2a2F1m5E1rNgNL0Co+RjSoNx238p
7wx7EXAtP380s4s4NL/bxScwxsNoVuBaenwB1um6HPa9LcPN2NNUyGfq7wEmXZuR
eiexSGA9wp7K7XppV2KQ7sdMWey8Fpg6XMmbxwQrldQ4gM4qlvk=
=EdQS
-----END PGP SIGNATURE-----

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:37e86f2675003a43379658ca5ad65e9093df5353dc0e6dc0a2d34450dbab1745
size 141946920

View File

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAlyMCLgACgkQ9DSh76/u
rqPn+g/+PpdUeW8Mx8/whNCsIt04ONGc1/e+3506krbFJmd38a4n/MoHQuljQjID
tWODxMjXp7perwaR6wGVzHEkRv8YXZq7CiSwhuxa+e+dwWunkc99/4ICHLXMdkaR
uDgDQRHaoT6bYpU1vkzXglrJl+Vs+N+LBJQq7kjNbHztzb1MJkOkn6EmJKutUaQP
ijDpRAnrJ2G8HpcPQjgSCyzBdJ54whm7FGCTasaTk/RtKIweFiopBZQ9l8gJIFyg
yivdEG1VugAIwVBZy9OtWy9vuIF47BfIa02OmnHkq3P5ZQa24OFrAf9N+JohnPwN
zV5DfHxluBi3BRsS/UtVgQPk+LCmnfCdscM+XULHcJUAXUey8C6oKPltgNRq6kcK
V10rm7npmUpDkM16RQ7JN/PbSMnDBPXp5ImE3wCgRLbZJk2uzR/+1hZ5UO9BeZnK
EQVWWLXx1Tf2d8oRyRIl5DJ4ncOATOW+R0e04qYtgI2ckiYACNnkUteRzsaKIcgn
d7U/hAlUpXmwCad4uZMfUF4xSd0iiql/YBxLkfEh2WB46cDmX96qU4FQV0htBHbi
VfQX2nNLWUxgv58Gi15VUlzMj3JDQWfr5TzgMgc9wQtg5MhhyMu0uhsPSGjxKmbV
88J95raPPqRXXL+OBVHRakoQUOSwoh+49aMpstCn7rLfcXEvTO0=
=OAxv
-----END PGP SIGNATURE-----

View File

@ -1,3 +1,31 @@
-------------------------------------------------------------------
Fri Mar 22 10:52:26 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
- Update the old-icu.patch based on the upstream feedback
-------------------------------------------------------------------
Mon Mar 19 10:44:31 UTC 2019 - Adam Majer <adam.majer@suse.de>
- old-boost.patch: update patch to fix build with Boost from SLE-12
-------------------------------------------------------------------
Mon Mar 18 12:27:36 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
- Update to 6.2.2.2:
* Few more tweaks over previous RC1
-------------------------------------------------------------------
Fri Mar 15 15:05:42 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
- Add patch to fix build with old icu from Leap 42:
* old-icu.patch
-------------------------------------------------------------------
Thu Mar 14 14:44:58 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
- Add patch to fix build on Leap 42:
* kde5.patch
-------------------------------------------------------------------
Tue Mar 12 10:07:34 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>

View File

@ -52,7 +52,7 @@
%bcond_with gtk3
%endif
Name: libreoffice
Version: 6.2.2.1
Version: 6.2.2.2
Release: 0
Summary: A Free Office Suite (Framework)
License: LGPL-3.0-or-later AND MPL-2.0+
@ -103,6 +103,8 @@ Patch5: old-boost.patch
Patch7: libreoffice-postgresql.patch
Patch8: 0001-Fix-LTO-segfault-in-libtest_sw_uwriter-test.patch
Patch9: boost_169.patch
Patch10: kde5.patch
Patch11: old-icu.patch
# try to save space by using hardlinks
Patch990: install-with-hardlinks.diff
# save time by relying on rpm check rather than doing stupid find+grep
@ -969,6 +971,8 @@ Provides %{langname} translations and additional resources (help files, etc.) fo
%patch7
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
%patch990 -p1
%patch991 -p1

View File

@ -1,7 +1,7 @@
Index: libreoffice-6.1.0.0.beta2/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
Index: libreoffice-6.2.2.1/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
===================================================================
--- libreoffice-6.1.0.0.beta2.orig/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
+++ libreoffice-6.1.0.0.beta2/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
--- libreoffice-6.2.2.1.orig/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
+++ libreoffice-6.2.2.1/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
@@ -58,7 +58,7 @@ OUString applicationDirPath()
const auto utf8Path = applicationSystemPath.toUtf8();
auto ret = boost::filesystem::path(utf8Path.getStr(), utf8Path.getStr() + utf8Path.getLength());
@ -11,3 +11,46 @@ Index: libreoffice-6.1.0.0.beta2/vcl/unx/gtk3_kde5/gtk3_kde5_filepicker_ipc.cxx
}
OUString findPickerExecutable()
Index: libreoffice-6.2.2.1/sw/source/core/crsr/findtxt.cxx
===================================================================
--- libreoffice-6.2.2.1.orig/sw/source/core/crsr/findtxt.cxx
+++ libreoffice-6.2.2.1/sw/source/core/crsr/findtxt.cxx
@@ -152,7 +152,11 @@ public:
{
if (pFrame)
{
+#if BOOST_VERSION < 105600
+ m_oMergedIter.reset(*pFrame);
+#else
m_oMergedIter.emplace(*pFrame);
+#endif
}
}
Index: libreoffice-6.2.2.1/sw/source/core/inc/txtfrm.hxx
===================================================================
--- libreoffice-6.2.2.1.orig/sw/source/core/inc/txtfrm.hxx
+++ libreoffice-6.2.2.1/sw/source/core/inc/txtfrm.hxx
@@ -24,6 +24,8 @@
#include <ndtxt.hxx>
#include "TextFrameIndex.hxx"
+#include <boost/version.hpp>
+
namespace com { namespace sun { namespace star { namespace linguistic2 { class XHyphenatedWord; } } } }
namespace sw { namespace mark { class IMark; } }
@@ -980,8 +982,13 @@ struct MergedPara
class MergedAttrIterBase
{
protected:
+#if BOOST_VERSION < 105600
+ sw::MergedPara const* m_pMerged;
+ SwTextNode const* m_pNode;
+#else
sw::MergedPara const*const m_pMerged;
SwTextNode const*const m_pNode;
+#endif
size_t m_CurrentExtent;
size_t m_CurrentHint;
MergedAttrIterBase(SwTextFrame const& rFrame);

49
old-icu.patch Normal file
View File

@ -0,0 +1,49 @@
From 8e264d64093e11fbabdd13e0f86bec8b7c989796 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= <tchvatal@suse.com>
Date: Fri, 15 Mar 2019 16:43:31 +0100
Subject: [PATCH] Use RegexMatcher.find(pos, status) call on old ICU
The RegexMatcher.find(status) is new since icu 55 and this works even
on the old releases thus revert there to the available albeit slower
call.
Change-Id: I964c10efd15515b04ac9037cda3b5b309910baf5
---
sc/source/core/tool/interpr1.cxx | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 75fd8f82b874..0281ab3f4cbf 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -9408,7 +9408,12 @@ void ScInterpreter::ScRegex()
{
// Find n-th occurrence.
sal_Int32 nCount = 0;
- while (aRegexMatcher.find( status) && U_SUCCESS(status) && ++nCount < nOccurrence)
+#if (U_ICU_VERSION_MAJOR_NUM < 55)
+ int32_t nStartPos = 0;
+ while (aRegexMatcher.find(nStartPos, status) && U_SUCCESS(status) && ++nCount < nOccurrence)
+#else
+ while (aRegexMatcher.find(status) && U_SUCCESS(status) && ++nCount < nOccurrence)
+#endif
;
if (U_FAILURE(status))
{
@@ -9448,7 +9453,12 @@ void ScInterpreter::ScRegex()
{
// Replace n-th occurrence of match with replacement.
sal_Int32 nCount = 0;
- while (aRegexMatcher.find( status) && U_SUCCESS(status))
+#if (U_ICU_VERSION_MAJOR_NUM < 55)
+ int32_t nStartPos = 0;
+ while (aRegexMatcher.find(nStartPos, status) && U_SUCCESS(status))
+#else
+ while (aRegexMatcher.find(status) && U_SUCCESS(status))
+#endif
{
// XXX NOTE: After several RegexMatcher::find() the
// RegexMatcher::appendReplacement() still starts at the
--
2.21.0