summaryrefslogtreecommitdiff
path: root/app-office/libreoffice/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /app-office/libreoffice/files
reinit the tree, so we can have metadata
Diffstat (limited to 'app-office/libreoffice/files')
-rw-r--r--app-office/libreoffice/files/libreoffice-5.2-icu58.patch289
-rw-r--r--app-office/libreoffice/files/libreoffice-5.2-system-pyuno.patch44
-rw-r--r--app-office/libreoffice/files/libreoffice-5.2.5.1-glibc-2.24.patch10
-rw-r--r--app-office/libreoffice/files/libreoffice-5.3.4.2-kioclient5.patch11
-rw-r--r--app-office/libreoffice/files/libreoffice-5.4-system-pyuno.patch42
5 files changed, 396 insertions, 0 deletions
diff --git a/app-office/libreoffice/files/libreoffice-5.2-icu58.patch b/app-office/libreoffice/files/libreoffice-5.2-icu58.patch
new file mode 100644
index 000000000000..57fe6dcbd00d
--- /dev/null
+++ b/app-office/libreoffice/files/libreoffice-5.2-icu58.patch
@@ -0,0 +1,289 @@
+From 3e42714c76b1347babfdea0564009d8d82a83af4 Mon Sep 17 00:00:00 2001
+From: Eike Rathke <erack@redhat.com>
+Date: Wed, 2 Nov 2016 13:07:48 +0100
+Subject: [PATCH] upgrade to ICU 58
+
+Change-Id: I4a992447df65b337721a2a2627d974172a14cba5
+Reviewed-on: https://gerrit.libreoffice.org/30487
+Reviewed-by: Eike Rathke <erack@redhat.com>
+Tested-by: Eike Rathke <erack@redhat.com>
+---
+ configure.ac | 2 +-
+ download.lst | 2 +-
+ external/icu/icu-ubsan.patch.0 | 11 ------
+ external/icu/icu4c-warnings.patch | 12 ------
+ .../source/breakiterator/breakiterator_unicode.cxx | 12 ++++++
+ i18nutil/source/utility/unicode.cxx | 26 +++++++++++++
+ include/svx/ucsubset.hrc | 11 ++++++
+ svx/source/dialog/charmap.cxx | 35 +++++++++++++++++
+ svx/source/dialog/ucsubset.src | 44 ++++++++++++++++++++++
+ 9 files changed, 130 insertions(+), 25 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index f06ef8e..66a11a9 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -9136,7 +9136,7 @@ SYSTEM_GENBRK=
+ SYSTEM_GENCCODE=
+ SYSTEM_GENCMN=
+
+-ICU_MAJOR=57
++ICU_MAJOR=58
+ ICU_MINOR=1
+ ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
+ ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
+diff --git a/download.lst b/download.lst
+index 4571338..0770a4d 100644
+--- a/download.lst
++++ b/download.lst
+@@ -62,7 +62,7 @@ export HARFBUZZ_TARBALL := harfbuzz-1.3.2.tar.bz2
+ export HSQLDB_TARBALL := 17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
+ export HUNSPELL_TARBALL := 33d370f7fe5a030985e445a5672b2067-hunspell-1.4.1.tar.gz
+ export HYPHEN_TARBALL := 5ade6ae2a99bc1e9e57031ca88d36dad-hyphen-2.8.8.tar.gz
+-export ICU_TARBALL := 976734806026a4ef8bdd17937c8898b9-icu4c-57_1-src.tgz
++export ICU_TARBALL := 1901302aaff1c1633ef81862663d2917-icu4c-58_1-src.tgz
+ export JFREEREPORT_FLOW_ENGINE_TARBALL := ba2930200c9f019c2d93a8c88c651a0f-flow-engine-0.9.4.zip
+ export JFREEREPORT_FLUTE_TARBALL := d8bd5eed178db6e2b18eeed243f85aa8-flute-1.1.6.zip
+ export JFREEREPORT_LIBBASE_TARBALL := eeb2c7ddf0d302fba4bfc6e97eac9624-libbase-1.1.6.zip
+diff --git a/external/icu/icu-ubsan.patch.0 b/external/icu/icu-ubsan.patch.0
+index 6d1d3bc..8a47242 100644
+--- a/external/icu/icu-ubsan.patch.0
++++ b/external/icu/icu-ubsan.patch.0
+@@ -151,14 +151,3 @@
+ length(len), next(subNode) {}
+ virtual UBool operator==(const Node &other) const;
+ virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
+---- source/common/unifiedcache.h
+-+++ source/common/unifiedcache.h
+-@@ -139,7 +139,7 @@
+- : CacheKey<T>(other), fLoc(other.fLoc) { }
+- virtual ~LocaleCacheKey() { }
+- virtual int32_t hashCode() const {
+-- return 37 *CacheKey<T>::hashCode() + fLoc.hashCode();
+-+ return 37U *CacheKey<T>::hashCode() + fLoc.hashCode();
+- }
+- virtual UBool operator == (const CacheKeyBase &other) const {
+- // reflexive
+diff --git a/external/icu/icu4c-warnings.patch b/external/icu/icu4c-warnings.patch
+index d146093..96608d7 100644
+--- a/external/icu/icu4c-warnings.patch
++++ b/external/icu/icu4c-warnings.patch
+@@ -8,15 +8,3 @@
+ } \
+ }
+
+---- misc/icu/source/common/unicode/utypes.h
+-+++ misc/build/icu/source/common/unicode/utypes.h
+-@@ -399,7 +399,7 @@
+- * some Linux/Unix compilers have problems with defining global new/delete.
+- * On Windows, it is _MSC_VER>=1200 for MSVC 6.0 and higher.
+- */
+--#if defined(__cplusplus) && U_DEBUG && U_OVERRIDE_CXX_ALLOCATION && (_MSC_VER>=1200) && !defined(U_STATIC_IMPLEMENTATION) && (defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) || defined(U_LAYOUT_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION))
+-+#if defined(__cplusplus) && U_DEBUG && U_OVERRIDE_CXX_ALLOCATION && defined (_MSC_VER) && (_MSC_VER>=1200) && !defined(U_STATIC_IMPLEMENTATION) && (defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) || defined(U_LAYOUT_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION))
+-
+- #ifndef U_HIDE_INTERNAL_API
+- /**
+-
+diff --git a/i18npool/source/breakiterator/breakiterator_unicode.cxx b/i18npool/source/breakiterator/breakiterator_unicode.cxx
+index 3b0b227..76ae209 100644
+--- a/i18npool/source/breakiterator/breakiterator_unicode.cxx
++++ b/i18npool/source/breakiterator/breakiterator_unicode.cxx
+@@ -63,10 +63,13 @@ BreakIterator_Unicode::~BreakIterator_Unicode()
+ class OOoRuleBasedBreakIterator : public RuleBasedBreakIterator
+ {
+ public:
++#if (U_ICU_VERSION_MAJOR_NUM < 58)
++ // RuleBasedBreakIterator::setBreakType() is private as of ICU 58.
+ inline void publicSetBreakType(int32_t type)
+ {
+ setBreakType(type);
+ };
++#endif
+ OOoRuleBasedBreakIterator(UDataMemory* image,
+ UErrorCode &status)
+ : RuleBasedBreakIterator(image, status)
+@@ -142,12 +145,21 @@ void SAL_CALL BreakIterator_Unicode::loadICUBreakIterator(const css::lang::Local
+ }
+ }
+ if (rbi) {
++#if (U_ICU_VERSION_MAJOR_NUM < 58)
++ // ICU 58 made RuleBasedBreakIterator::setBreakType() private
++ // instead of protected, so the old workaround of
++ // https://ssl.icu-project.org/trac/ticket/5498
++ // doesn't work anymore. However, they also claim to have fixed
++ // the cause that an initial fBreakType==-1 would lead to an
++ // endless loop under some circumstances.
++ // Let's see ...
+ switch (rBreakType) {
+ case LOAD_CHARACTER_BREAKITERATOR: rbi->publicSetBreakType(UBRK_CHARACTER); break;
+ case LOAD_WORD_BREAKITERATOR: rbi->publicSetBreakType(UBRK_WORD); break;
+ case LOAD_SENTENCE_BREAKITERATOR: rbi->publicSetBreakType(UBRK_SENTENCE); break;
+ case LOAD_LINE_BREAKITERATOR: rbi->publicSetBreakType(UBRK_LINE); break;
+ }
++#endif
+ icuBI->aBreakIterator = rbi;
+ }
+ }
+diff --git a/i18nutil/source/utility/unicode.cxx b/i18nutil/source/utility/unicode.cxx
+index bb82bbf..984c5f7 100644
+--- a/i18nutil/source/utility/unicode.cxx
++++ b/i18nutil/source/utility/unicode.cxx
+@@ -957,6 +957,32 @@ OString SAL_CALL unicode::getExemplarLanguageForUScriptCode(UScriptCode eScript)
+ sRet = "sa-Sidd";
+ break;
+ #endif
++#if (U_ICU_VERSION_MAJOR_NUM >= 58)
++ case USCRIPT_ADLAM:
++ sRet = "mis"; // Adlm - Adlam for Fulani, no language code
++ break;
++ case USCRIPT_BHAIKSUKI:
++ sRet = "mis"; // Bhks - Bhaiksuki for some Buddhist texts, no language code
++ break;
++ case USCRIPT_MARCHEN:
++ sRet = "bo-Marc";
++ break;
++ case USCRIPT_NEWA:
++ sRet = "new-Newa";
++ break;
++ case USCRIPT_OSAGE:
++ sRet = "osa-Osge";
++ break;
++ case USCRIPT_HAN_WITH_BOPOMOFO:
++ sRet = "mis"; // Hanb - Han with Bopomofo, zh-Hanb ?
++ break;
++ case USCRIPT_JAMO:
++ sRet = "mis"; // Jamo - Jamo subset of Hangul, ko-Jamo ?
++ break;
++ case USCRIPT_SYMBOLS_EMOJI:
++ sRet = "mis"; // Zsye - Emoji variant
++ break;
++#endif
+ }
+ return sRet;
+ }
+diff --git a/include/svx/ucsubset.hrc b/include/svx/ucsubset.hrc
+index adf1cf6..1157a7e 100644
+--- a/include/svx/ucsubset.hrc
++++ b/include/svx/ucsubset.hrc
+@@ -291,6 +291,17 @@
+ #define RID_SUBSETSTR_OLD_HUNGARIAN (RID_SUBSET_START + 263)
+ #define RID_SUBSETSTR_SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS (RID_SUBSET_START + 264)
+ #define RID_SUBSETSTR_SUTTON_SIGNWRITING (RID_SUBSET_START + 265)
++#define RID_SUBSETSTR_ADLAM (RID_SUBSET_START + 266)
++#define RID_SUBSETSTR_BHAIKSUKI (RID_SUBSET_START + 267)
++#define RID_SUBSETSTR_CYRILLIC_EXTENDED_C (RID_SUBSET_START + 268)
++#define RID_SUBSETSTR_GLAGOLITIC_SUPPLEMENT (RID_SUBSET_START + 269)
++#define RID_SUBSETSTR_IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION (RID_SUBSET_START + 270)
++#define RID_SUBSETSTR_MARCHEN (RID_SUBSET_START + 271)
++#define RID_SUBSETSTR_MONGOLIAN_SUPPLEMENT (RID_SUBSET_START + 272)
++#define RID_SUBSETSTR_NEWA (RID_SUBSET_START + 273)
++#define RID_SUBSETSTR_OSAGE (RID_SUBSET_START + 274)
++#define RID_SUBSETSTR_TANGUT (RID_SUBSET_START + 275)
++#define RID_SUBSETSTR_TANGUT_COMPONENTS (RID_SUBSET_START + 276)
+
+ // RID_SUBSET_END (RID_SUBSET_START + 299)
+
+diff --git a/svx/source/dialog/charmap.cxx b/svx/source/dialog/charmap.cxx
+index bcc7cef..ff201a6 100644
+--- a/svx/source/dialog/charmap.cxx
++++ b/svx/source/dialog/charmap.cxx
+@@ -1594,6 +1594,41 @@ void SubsetMap::InitList()
+ aAllSubsets.push_back( Subset( 0x1D800, 0x1DAAF, RID_SUBSETSTR_SUTTON_SIGNWRITING ) );
+ break;
+ #endif
++#if (U_ICU_VERSION_MAJOR_NUM >= 58)
++ case UBLOCK_ADLAM:
++ aAllSubsets.push_back( Subset( 0x1E900, 0x1E95F, RID_SUBSETSTR_ADLAM ) );
++ break;
++ case UBLOCK_BHAIKSUKI:
++ aAllSubsets.push_back( Subset( 0x11C00, 0x11C6F, RID_SUBSETSTR_BHAIKSUKI ) );
++ break;
++ case UBLOCK_CYRILLIC_EXTENDED_C:
++ aAllSubsets.push_back( Subset( 0x1C80, 0x1C8F, RID_SUBSETSTR_CYRILLIC_EXTENDED_C ) );
++ break;
++ case UBLOCK_GLAGOLITIC_SUPPLEMENT:
++ aAllSubsets.push_back( Subset( 0x1E000, 0x1E02F, RID_SUBSETSTR_GLAGOLITIC_SUPPLEMENT ) );
++ break;
++ case UBLOCK_IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION:
++ aAllSubsets.push_back( Subset( 0x16FE0, 0x16FFF, RID_SUBSETSTR_IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION ) );
++ break;
++ case UBLOCK_MARCHEN:
++ aAllSubsets.push_back( Subset( 0x11C70, 0x11CBF, RID_SUBSETSTR_MARCHEN ) );
++ break;
++ case UBLOCK_MONGOLIAN_SUPPLEMENT:
++ aAllSubsets.push_back( Subset( 0x11660, 0x1167F, RID_SUBSETSTR_MONGOLIAN_SUPPLEMENT ) );
++ break;
++ case UBLOCK_NEWA:
++ aAllSubsets.push_back( Subset( 0x11400, 0x1147F, RID_SUBSETSTR_NEWA ) );
++ break;
++ case UBLOCK_OSAGE:
++ aAllSubsets.push_back( Subset( 0x104B0, 0x104FF, RID_SUBSETSTR_OSAGE ) );
++ break;
++ case UBLOCK_TANGUT:
++ aAllSubsets.push_back( Subset( 0x17000, 0x187FF, RID_SUBSETSTR_TANGUT ) );
++ break;
++ case UBLOCK_TANGUT_COMPONENTS:
++ aAllSubsets.push_back( Subset( 0x18800, 0x18AFF, RID_SUBSETSTR_TANGUT_COMPONENTS ) );
++ break;
++#endif
+
+ }
+
+diff --git a/svx/source/dialog/ucsubset.src b/svx/source/dialog/ucsubset.src
+index 06630cc..a7765c3 100644
+--- a/svx/source/dialog/ucsubset.src
++++ b/svx/source/dialog/ucsubset.src
+@@ -1079,6 +1079,50 @@ Resource RID_SUBSETMAP
+ {
+ Text [ en-US ] = "Sutton Signwriting";
+ };
++ String RID_SUBSETSTR_ADLAM
++ {
++ Text [ en-US ] = "Adlam";
++ };
++ String RID_SUBSETSTR_BHAIKSUKI
++ {
++ Text [ en-US ] = "Bhaiksuki";
++ };
++ String RID_SUBSETSTR_CYRILLIC_EXTENDED_C
++ {
++ Text [ en-US ] = "Cyrillic Extended-C";
++ };
++ String RID_SUBSETSTR_GLAGOLITIC_SUPPLEMENT
++ {
++ Text [ en-US ] = "Glagolitic Supplement";
++ };
++ String RID_SUBSETSTR_IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION
++ {
++ Text [ en-US ] = "Ideographic Symbols and Punctuation";
++ };
++ String RID_SUBSETSTR_MARCHEN
++ {
++ Text [ en-US ] = "Marchen";
++ };
++ String RID_SUBSETSTR_MONGOLIAN_SUPPLEMENT
++ {
++ Text [ en-US ] = "Mongolian Supplement";
++ };
++ String RID_SUBSETSTR_NEWA
++ {
++ Text [ en-US ] = "Newa";
++ };
++ String RID_SUBSETSTR_OSAGE
++ {
++ Text [ en-US ] = "Osage";
++ };
++ String RID_SUBSETSTR_TANGUT
++ {
++ Text [ en-US ] = "Tangut";
++ };
++ String RID_SUBSETSTR_TANGUT_COMPONENTS
++ {
++ Text [ en-US ] = "Tangut Components";
++ };
+ };
+
+ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+--
+2.10.2
+
diff --git a/app-office/libreoffice/files/libreoffice-5.2-system-pyuno.patch b/app-office/libreoffice/files/libreoffice-5.2-system-pyuno.patch
new file mode 100644
index 000000000000..e06f81f53dce
--- /dev/null
+++ b/app-office/libreoffice/files/libreoffice-5.2-system-pyuno.patch
@@ -0,0 +1,44 @@
+diff --git a/desktop/scripts/soffice.sh b/desktop/scripts/soffice.sh
+index a259bf6..672fa23 100755
+--- a/desktop/scripts/soffice.sh
++++ b/desktop/scripts/soffice.sh
+@@ -129,6 +129,9 @@ if echo "$checks" | grep -q "cc" ; then
+ exit 1;
+ fi
+
++PYTHONPATH=$sd_prog${PYTHONPATH+:$PYTHONPATH}
++export PYTHONPATH
++
+ case "`uname -s`" in
+ NetBSD|OpenBSD|DragonFly)
+ # this is a temporary hack until we can live with the default search paths
+diff --git a/pyuno/source/module/uno.py b/pyuno/source/module/uno.py
+index 4ff2606..6a05eed 100644
+--- a/pyuno/source/module/uno.py
++++ b/pyuno/source/module/uno.py
+@@ -16,8 +16,12 @@
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ #
++import os
+ import sys
+
++sys.path.append('%eprefix%/usr/%libdir%/libreoffice/program')
++if getattr(os.environ, 'URE_BOOTSTRAP', None) is None:
++ os.environ['URE_BOOTSTRAP'] = "vnd.sun.star.pathname:%eprefix%/usr/%libdir%/libreoffice/program/fundamentalrc"
+ import pyuno
+
+ try:
+diff --git a/pyuno/source/officehelper.py b/pyuno/source/officehelper.py
+index 99d3b03..704edab 100755
+--- a/pyuno/source/officehelper.py
++++ b/pyuno/source/officehelper.py
+@@ -44,7 +44,7 @@ def bootstrap():
+ if "UNO_PATH" in os.environ:
+ sOffice = os.environ["UNO_PATH"]
+ else:
+- sOffice = "" # lets hope for the best
++ sOffice = "%eprefix%/usr/%libdir%/libreoffice/program"
+ sOffice = os.path.join(sOffice, "soffice")
+ if platform.startswith("win"):
+ sOffice += ".exe"
diff --git a/app-office/libreoffice/files/libreoffice-5.2.5.1-glibc-2.24.patch b/app-office/libreoffice/files/libreoffice-5.2.5.1-glibc-2.24.patch
new file mode 100644
index 000000000000..d714ff2074bc
--- /dev/null
+++ b/app-office/libreoffice/files/libreoffice-5.2.5.1-glibc-2.24.patch
@@ -0,0 +1,10 @@
+--- libreoffice-5.2.5.1.orig/desktop/unx/source/pagein.c 2017-01-11 16:54:33.000000000 -0800
++++ libreoffice-5.2.5.1/desktop/unx/source/pagein.c 2017-02-03 10:22:51.697673613 -0800
+@@ -26,6 +26,7 @@
+ #include <string.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
++#include <sys/sysmacros.h>
+
+ /* do_pagein */
+ static void do_pagein (const char * filename)
diff --git a/app-office/libreoffice/files/libreoffice-5.3.4.2-kioclient5.patch b/app-office/libreoffice/files/libreoffice-5.3.4.2-kioclient5.patch
new file mode 100644
index 000000000000..a6e732f7f379
--- /dev/null
+++ b/app-office/libreoffice/files/libreoffice-5.3.4.2-kioclient5.patch
@@ -0,0 +1,11 @@
+--- a/shell/source/unix/misc/senddoc.sh 2017-06-15 15:44:22.000000000 +0200
++++ b/shell/source/unix/misc/senddoc.sh 2017-06-25 01:00:08.525435930 +0200
+@@ -389,6 +389,8 @@
+ elif [ -n "$DESKTOP_LAUNCH" ]; then
+ # http://lists.freedesktop.org/pipermail/xdg/2004-August/002873.html
+ MAILER=${DESKTOP_LAUNCH}
++ elif [ -n "$KDE_FULL_SESSION" -a -x /usr/bin/kde-open5 ] ; then
++ MAILER=/usr/bin/kde-open5
+ elif [ -n "$KDE_FULL_SESSION" -a -x /usr/bin/kde-open ] ; then
+ MAILER=/usr/bin/kde-open
+ elif [ -x /usr/bin/xdg-open ] ; then
diff --git a/app-office/libreoffice/files/libreoffice-5.4-system-pyuno.patch b/app-office/libreoffice/files/libreoffice-5.4-system-pyuno.patch
new file mode 100644
index 000000000000..83b56d1a1927
--- /dev/null
+++ b/app-office/libreoffice/files/libreoffice-5.4-system-pyuno.patch
@@ -0,0 +1,42 @@
+--- a/desktop/scripts/soffice.sh
++++ a/desktop/scripts/soffice.sh
+@@ -147,6 +147,9 @@ if echo "$checks" | grep -q "cc" ; then
+ exit 1;
+ fi
+
++PYTHONPATH=$sd_prog${PYTHONPATH+:$PYTHONPATH}
++export PYTHONPATH
++
+ case "$(uname -s)" in
+ NetBSD|OpenBSD|DragonFly)
+ # this is a temporary hack until we can live with the default search paths
+--- a/pyuno/source/module/uno.py
++++ a/pyuno/source/module/uno.py
+@@ -16,11 +16,16 @@
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ #
++import os
+ import pyuno
+ import sys
+ import traceback
+ import warnings
+
++sys.path.append('%eprefix%/usr/%libdir%/libreoffice/program')
++if getattr(os.environ, 'URE_BOOTSTRAP', None) is None:
++ os.environ['URE_BOOTSTRAP'] = "vnd.sun.star.pathname:%eprefix%/usr/%libdir%/libreoffice/program/fundamentalrc"
++
+ # since on Windows sal3.dll no longer calls WSAStartup
+ import socket
+
+--- a/pyuno/source/officehelper.py
++++ a/pyuno/source/officehelper.py
+@@ -45,7 +45,7 @@ def bootstrap():
+ if "UNO_PATH" in os.environ:
+ sOffice = os.environ["UNO_PATH"]
+ else:
+- sOffice = "" # lets hope for the best
++ sOffice = "%eprefix%/usr/%libdir%/libreoffice/program"
+ sOffice = os.path.join(sOffice, "soffice")
+ if platform.startswith("win"):
+ sOffice += ".exe"