diff --git a/.github/workflows/update-version.yml b/.github/workflows/update-version.yml
new file mode 100644
index 0000000..2653984
--- /dev/null
+++ b/.github/workflows/update-version.yml
@@ -0,0 +1,24 @@
+name: Update hard-coded version
+on: create
+jobs:
+ update-version:
+ if: >-
+ ${{ startsWith(github.event.ref, 'hotfix/') ||
+ startsWith(github.event.ref, 'release/') }}
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2.4.0
+ - name: Set version
+ run: >-
+ echo "${{ github.event.ref }}" |
+ awk '{gsub(/.+\/v/,"version=");print;}' >> $GITHUB_ENV
+ - name: Save version
+ run: echo "${{ env.version }}" > version
+ - name: Commit changes
+ uses: EndBug/add-and-commit@v7
+ with:
+ author_name: github-actions[bot]
+ author_email: github-actions[bot]@users.noreply.github.com
+ message: Update hard-coded version to v${{ env.version }}
+ add: version
diff --git a/build.pro b/build.pro
index a782f21..6461b3c 100644
--- a/build.pro
+++ b/build.pro
@@ -9,10 +9,10 @@ include($$PWD/common.pri)
CONFIG += ordered
core_windows {
- CONFIG += core_and_multimedia
+ desktop:CONFIG += core_and_multimedia
}
core_linux {
- CONFIG += core_and_multimedia
+ desktop:CONFIG += core_and_multimedia
}
core_mac {
CONFIG += no_desktop_apps
diff --git a/defaults b/defaults
index 6ccfc8a..ec840c3 100644
--- a/defaults
+++ b/defaults
@@ -1,2 +1,3 @@
sdkjs-plugin="photoeditor, macros, ocr, translator, thesaurus, youtube, highlightcode"
sdkjs-plugin-server="speech, zotero, mendeley"
+sdkjs-addons="sdkjs-forms"
diff --git a/make_packages.py b/make_packages.py
index f75e7c6..c72f81d 100755
--- a/make_packages.py
+++ b/make_packages.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
import sys
sys.path.append('scripts')
diff --git a/scripts/base.py b/scripts/base.py
index 80fe30c..6f1e3ed 100644
--- a/scripts/base.py
+++ b/scripts/base.py
@@ -740,7 +740,7 @@ def generate_plist(path):
content += "\tCFBundleGetInfoString\n"
content += "\tCreated by " + bundle_creator + "\n"
content += "\tCFBundleIdentifier\n"
- content += "\t" + bundle_id_url + name + "\n"
+ content += "\t" + bundle_id_url + correct_bundle_identifier(name) + "\n"
content += "\tCFBundlePackageType\n"
content += "\tFMWK\n"
content += "\tCFBundleShortVersionString\n"
@@ -764,6 +764,9 @@ def generate_plist(path):
return
+def correct_bundle_identifier(bundle_identifier):
+ return re.sub("[^a-zA-Z0-9\.\-]", "-", bundle_identifier)
+
def get_sdkjs_addons():
result = {}
if ("" == config.option("sdkjs-addons")):
@@ -1182,3 +1185,9 @@ def make_sln(directory, args, is_no_errors):
os.environ.clear()
os.environ.update(old_env)
return
+
+def get_android_sdk_home():
+ ndk_root_path = get_env("ANDROID_NDK_ROOT")
+ if (-1 != ndk_root_path.find("/ndk/")):
+ return ndk_root_path + "/../.."
+ return ndk_root_path + "/.."
diff --git a/scripts/build_js.py b/scripts/build_js.py
index 2717f9e..43ade19 100644
--- a/scripts/build_js.py
+++ b/scripts/build_js.py
@@ -47,7 +47,7 @@ def make():
# mobile
if config.check_option("module", "mobile"):
- build_sdk_native(base_dir + "/../sdkjs/build")
+ build_sdk_native(base_dir + "/../sdkjs/build", False)
base.create_dir(out_dir + "/mobile")
base.create_dir(out_dir + "/mobile/sdkjs")
vendor_dir_src = base_dir + "/../web-apps/vendor/"
@@ -124,10 +124,10 @@ def build_sdk_builder(directory):
_run_grunt(directory, get_build_param() + base.sdkjs_addons_param())
return
-def build_sdk_native(directory):
+def build_sdk_native(directory, minimize=True):
#_run_npm_cli(directory)
_run_npm(directory)
- _run_grunt(directory, get_build_param() + ["--mobile=true"] + base.sdkjs_addons_param())
+ _run_grunt(directory, get_build_param(minimize) + ["--mobile=true"] + base.sdkjs_addons_param())
return
def build_js_develop(root_dir):
diff --git a/scripts/build_js_native.py b/scripts/build_js_native.py
new file mode 100644
index 0000000..cfa078e
--- /dev/null
+++ b/scripts/build_js_native.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+
+import config
+import base
+import os
+import build_js
+
+# parse configuration
+config.parse()
+config.extend_option("jsminimize", "0")
+
+branding = config.option("branding-name")
+if ("" == branding):
+ branding = "onlyoffice"
+
+base_dir = base.get_script_dir() + "/.."
+out_dir = base_dir + "/../native-sdk/examples/win-linux-mac/build/sdkjs"
+base.create_dir(out_dir)
+
+build_js.build_sdk_native(base_dir + "/../sdkjs/build")
+vendor_dir_src = base_dir + "/../web-apps/vendor/"
+sdk_dir_src = base_dir + "/../sdkjs/deploy/sdkjs/"
+
+base.join_scripts([vendor_dir_src + "xregexp/xregexp-all-min.js",
+ vendor_dir_src + "underscore/underscore-min.js",
+ base_dir + "/../sdkjs/common/externs/jszip-utils.js",
+ base_dir + "/../sdkjs/common/Native/native.js",
+ base_dir + "/../sdkjs/common/Native/Wrappers/common.js",
+ base_dir + "/../sdkjs/common/Native/jquery_native.js"],
+ out_dir + "/banners_word.js")
+
+base.join_scripts([vendor_dir_src + "xregexp/xregexp-all-min.js",
+ vendor_dir_src + "underscore/underscore-min.js",
+ base_dir + "/../sdkjs/common/externs/jszip-utils.js",
+ base_dir + "/../sdkjs/common/Native/native.js",
+ base_dir + "/../sdkjs/cell/native/common.js",
+ base_dir + "/../sdkjs/common/Native/jquery_native.js"],
+ out_dir + "/banners_cell.js")
+
+base.join_scripts([vendor_dir_src + "xregexp/xregexp-all-min.js",
+ vendor_dir_src + "underscore/underscore-min.js",
+ base_dir + "/../sdkjs/common/externs/jszip-utils.js",
+ base_dir + "/../sdkjs/common/Native/native.js",
+ base_dir + "/../sdkjs/common/Native/Wrappers/common.js",
+ base_dir + "/../sdkjs/common/Native/jquery_native.js"],
+ out_dir + "/banners_slide.js")
+
+base.create_dir(out_dir + "/word")
+base.join_scripts([out_dir + "/banners_word.js", sdk_dir_src + "word/sdk-all-min.js", sdk_dir_src + "word/sdk-all.js"], out_dir + "/word/script.bin")
+base.create_dir(out_dir + "/cell")
+base.join_scripts([out_dir + "/banners_cell.js", sdk_dir_src + "cell/sdk-all-min.js", sdk_dir_src + "cell/sdk-all.js"], out_dir + "/cell/script.bin")
+base.create_dir(out_dir + "/slide")
+base.join_scripts([out_dir + "/banners_slide.js", sdk_dir_src + "slide/sdk-all-min.js", sdk_dir_src + "slide/sdk-all.js"], out_dir + "/slide/script.bin")
+
+base.delete_file(out_dir + "/banners_word.js")
+base.delete_file(out_dir + "/banners_cell.js")
+base.delete_file(out_dir + "/banners_slide.js")
+
\ No newline at end of file
diff --git a/scripts/config.py b/scripts/config.py
index 108b168..685ed6f 100644
--- a/scripts/config.py
+++ b/scripts/config.py
@@ -116,6 +116,12 @@ def check_compiler(platform):
compiler["compiler"] = platform
compiler["compiler_64"] = platform
+ if base.host_platform() == "mac":
+ if not base.is_dir(options["qt-dir"] + "/" + compiler["compiler_64"]):
+ if base.is_dir(options["qt-dir"] + "/macos"):
+ compiler["compiler"] = "macos"
+ compiler["compiler_64"] = "macos"
+
return compiler
def check_option(name, value):
diff --git a/scripts/core_common/make_common.py b/scripts/core_common/make_common.py
index 8e60eff..d7dd76b 100755
--- a/scripts/core_common/make_common.py
+++ b/scripts/core_common/make_common.py
@@ -6,6 +6,7 @@ sys.path.append('..')
import config
import base
+import glob
import boost
import cef
@@ -18,7 +19,19 @@ import html2
import hunspell
import glew
+def check_android_ndk_macos_arm(dir):
+ if base.is_dir(dir + "/darwin-x86_64") and not base.is_dir(dir + "/darwin-arm64"):
+ print("copy toolchain... [" + dir + "]")
+ base.copy_dir(dir + "/darwin-x86_64", dir + "/darwin-arm64")
+ return
+
+
def make():
+ if (config.check_option("platform", "android")) and (base.host_platform() == "mac") and (base.is_os_arm()):
+ for toolchain in glob.glob(base.get_env("ANDROID_NDK_ROOT") + "/toolchains/*"):
+ if base.is_dir(toolchain):
+ check_android_ndk_macos_arm(toolchain + "/prebuilt")
+
boost.make()
cef.make()
icu.make()
diff --git a/scripts/core_common/modules/ixwebsocket.py b/scripts/core_common/modules/ixwebsocket.py
index 75e5919..7d65b9e 100644
--- a/scripts/core_common/modules/ixwebsocket.py
+++ b/scripts/core_common/modules/ixwebsocket.py
@@ -94,7 +94,7 @@ def make():
global CMAKE
CMAKE_TOOLCHAIN_FILE = base.get_env("ANDROID_NDK_ROOT") + "/build/cmake/android.toolchain.cmake"
- CMAKE_DIR = base.get_env("ANDROID_NDK_ROOT") + "/../../cmake/"
+ CMAKE_DIR = base.get_android_sdk_home() + "/cmake/"
CMAKE = CMAKE_DIR + find_last_version(os.listdir(CMAKE_DIR), CMAKE_DIR) + "/bin/cmake"
def param_android(arch, api):
diff --git a/scripts/core_common/modules/openssl_mobile.py b/scripts/core_common/modules/openssl_mobile.py
index 7815041..6f1d52e 100755
--- a/scripts/core_common/modules/openssl_mobile.py
+++ b/scripts/core_common/modules/openssl_mobile.py
@@ -9,7 +9,7 @@ def make():
path = base.get_script_dir() + "/../../core/Common/3dParty/openssl"
old_cur = os.getcwd()
os.chdir(path)
- base.set_env("ANDROID_HOME", base.get_env("ANDROID_NDK_ROOT") + "/../..")
+ base.set_env("ANDROID_HOME", base.get_android_sdk_home())
if (-1 != config.option("platform").find("android") and not base.is_dir("./build/android")):
subprocess.call(["./build-android-openssl.sh"])
diff --git a/scripts/core_common/modules/socketrocket.py b/scripts/core_common/modules/socketrocket.py
index 508c149..878574a 100644
--- a/scripts/core_common/modules/socketrocket.py
+++ b/scripts/core_common/modules/socketrocket.py
@@ -23,8 +23,8 @@ def buildIOS():
base.create_dir(current_dir + "/build/ios/lib")
# Create fat lib
- base.cmd("lipo", ["build/Release-iphonesimulator/libSocketRocket.a", "build/Release-iphoneos/libSocketRocket.a", "-create", "-output",
- "build/lib/ios/libSoŃketRocket.a"])
+ base.cmd("lipo", ["./build/Release-iphonesimulator/libSocketRocket.a", "./build/Release-iphoneos/libSocketRocket.a", "-create", "-output",
+ "./build/ios/lib/libSoŃketRocket.a"])
return
@@ -44,10 +44,6 @@ def buildMacOS():
return
def make():
-
- if base.is_dir(current_dir + "/build"):
- return
-
if (-1 == config.option("platform").find("mac") and -1 == config.option("platform").find("ios")):
return
@@ -57,8 +53,10 @@ def make():
os.chdir(current_dir)
if (-1 != config.option("platform").find("mac")):
- buildMacOS()
+ if not base.is_dir(current_dir + "/build/mac_64") or not base.is_dir(current_dir + "/build/mac_arm_64"):
+ buildMacOS()
elif (-1 != config.option("platform").find("ios")):
- buildIOS()
+ if not base.is_dir(current_dir + "/build/ios"):
+ buildIOS()
os.chdir(current_dir_old)
return
diff --git a/scripts/deploy_mobile.py b/scripts/deploy_mobile.py
index 50b6501..950ee29 100644
--- a/scripts/deploy_mobile.py
+++ b/scripts/deploy_mobile.py
@@ -3,6 +3,11 @@
import config
import base
+def exclude_arch(directory, frameworks):
+ for lib in frameworks:
+ base.cmd("lipo", ["-remove", "arm64", directory + "/" + lib + ".framework/" + lib, "-o", directory + "/" + lib + ".framework/" + lib])
+ return
+
def make():
base_dir = base.get_script_dir() + "/../out"
git_dir = base.get_script_dir() + "/../.."
@@ -53,6 +58,12 @@ def make():
else:
base.copy_lib(core_build_dir + "/lib/" + platform_postfix, root_dir, "x2t")
+ if ("ios" == platform) and config.check_option("config", "bundle_dylibs") and config.check_option("config", "simulator"):
+ exclude_arch(root_dir, ["kernel", "kernel_network", "UnicodeConverter", "graphics", "PdfWriter",
+ "PdfReader", "DjVuFile", "XpsFile", "HtmlFile2", "HtmlRenderer", "doctrenderer",
+ "Fb2File", "EpubFile", "x2t"])
+
+
# icu
if (0 == platform.find("win")):
base.copy_file(core_dir + "/Common/3dParty/icu/" + platform + "/build/icudt58.dll", root_dir + "/icudt58.dll")
diff --git a/scripts/develop/config_server.py b/scripts/develop/config_server.py
index 688aea9..d3267a0 100644
--- a/scripts/develop/config_server.py
+++ b/scripts/develop/config_server.py
@@ -64,9 +64,8 @@ def make():
base.generate_doctrenderer_config("./DoctRenderer.config", "../../../sdkjs/deploy/", "server", "../../../web-apps/vendor/")
base.support_old_versions_plugins(git_dir + "/sdkjs-plugins")
- if base.is_dir(git_dir + "/fonts"):
- base.delete_dir(git_dir + "/fonts")
- base.create_dir(git_dir + "/fonts")
+ if not base.is_dir(git_dir + "/fonts"):
+ base.create_dir(git_dir + "/fonts")
if ("mac" == base.host_platform()):
base.mac_correct_rpath_x2t("./")
diff --git a/scripts/packages.py b/scripts/packages.py
index b3adafb..80735ee 100644
--- a/scripts/packages.py
+++ b/scripts/packages.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
import packages_desktop
# import packages_server
diff --git a/scripts/packages_desktop.py b/scripts/packages_desktop.py
index a6413ff..8e730d7 100644
--- a/scripts/packages_desktop.py
+++ b/scripts/packages_desktop.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
import base
import os
@@ -36,18 +36,34 @@ def make(packages):
app_version = base.run_command("/usr/libexec/PlistBuddy -c 'print :CFBundleShortVersionString' " +
macos_dir + "/build/ONLYOFFICE.app/Contents/Info.plist")['stdout']
- macos_zip = macos_dir + "/build/" + scheme + "-" + app_version + ".zip"
+ zip_filename = scheme + "-" + app_version
+ macos_zip = macos_dir + "/build/" + zip_filename + ".zip"
update_storage_dir = base.get_env("ARCHIVES_DIR") + "/" + scheme + "/_updates"
base.create_dir(update_dir)
base.copy_dir_content(update_storage_dir, update_dir, ".zip")
+ base.copy_dir_content(update_storage_dir, update_dir, ".html")
base.copy_file(macos_zip, update_dir)
- for file in os.listdir(update_dir):
- if file.endswith(".zip"):
- zip_name = os.path.splitext(file)[0]
- zip_ver = os.path.splitext(file)[0].split("-")[-1]
- base.copy_file(changes_dir + "/" + zip_ver + "/ReleaseNotes.html", update_dir + "/" + zip_name + ".html")
- base.copy_file(changes_dir + "/" + zip_ver + "/ReleaseNotesRU.html", update_dir + "/" + zip_name + ".ru.html")
+
+ notes_src = changes_dir + "/" + app_version + "/ReleaseNotes.html"
+ notes_dst = update_dir + "/" + zip_filename + ".html"
+ cur_date = base.run_command("LC_ALL=en_US.UTF-8 date -u \"+%B %e, %Y\"")['stdout']
+ if base.is_exist(notes_src):
+ base.copy_file(notes_src, notes_dst)
+ base.replaceInFileRE(notes_dst,
+ r"().+()", "\\1 - " + cur_date + "\\2")
+ else:
+ base.writeFile(notes_dst, "placeholder\n")
+
+ notes_src = changes_dir + "/" + app_version + "/ReleaseNotesRU.html"
+ notes_dst = update_dir + "/" + zip_filename + ".ru.html"
+ cur_date = base.run_command("LC_ALL=ru_RU.UTF-8 date -u \"+%e %B %Y\"")['stdout']
+ if base.is_exist(notes_src):
+ base.copy_file(notes_src, notes_dst)
+ base.replaceInFileRE(notes_dst,
+ r"().+()", "\\1 - " + cur_date + "\\2")
+ else:
+ base.writeFile(notes_dst, "placeholder\n")
print("$ ./generate_appcast " + update_dir)
base.cmd(macos_dir + "/Vendor/Sparkle/bin/generate_appcast", [update_dir])
diff --git a/version b/version
index f22d756..66ce77b 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-6.5.0
+7.0.0