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