From de3b4b02008d708a66f8d6a8a365974eac7de3b3 Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Wed, 28 Dec 2022 13:47:26 +0200 Subject: [PATCH] Introduce lo_get_app_data_dir() for Emscripten, too And not just Android. Hardcoded to return "/instdir" to match what is in the emscripten_fs_image. Change-Id: I26d4ec5e02ec9900e35ca47f1565a13ad2b723b6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144849 Tested-by: Jenkins Reviewed-by: Tor Lillqvist --- Repository.mk | 6 +++++ desktop/source/lib/init.cxx | 8 +++--- .../source/languagetag/languagetag.cxx | 6 ++++- include/osl/detail/emscripten-bootstrap.h | 26 +++++++++++++++++++ sal/Library_lo-bootstrap.mk | 9 +++++++ sal/Library_sal.mk | 2 +- sal/Module_sal.mk | 2 +- sal/emscripten/lo-bootstrap.c | 19 ++++++++++++++ sal/rtl/bootstrap.cxx | 6 ++++- solenv/clang-format/excludelist | 2 ++ unotools/source/i18n/resmgr.cxx | 10 ++++--- 11 files changed, 86 insertions(+), 10 deletions(-) create mode 100644 include/osl/detail/emscripten-bootstrap.h create mode 100644 sal/emscripten/lo-bootstrap.c diff --git a/Repository.mk b/Repository.mk index 56d8b2d28b84..d6db83c47873 100644 --- a/Repository.mk +++ b/Repository.mk @@ -335,6 +335,12 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ogltrans, \ OGLTrans \ )) +ifeq ($(OS),EMSCRIPTEN) +$(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \ + lo-bootstrap \ +)) +endif + ifneq ($(ENABLE_WASM_STRIP_CANVAS),TRUE) $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \ canvastools \ diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index cdf6049d193d..f805f4a73322 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -29,6 +29,10 @@ #include #endif +#ifdef EMSCRIPTEN +#include +#endif + #include #include #include @@ -7106,10 +7110,8 @@ static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath, const char } else { -#ifdef ANDROID +#if defined ANDROID || defined EMSCRIPTEN aAppPath = OUString::fromUtf8(lo_get_app_data_dir()) + "/program"; -#elif defined __EMSCRIPTEN__ - aAppPath = OUString::fromUtf8("instdir/program"); #else // Fun conversion dance back and forth between URLs and system paths... OUString aAppURL; diff --git a/i18nlangtag/source/languagetag/languagetag.cxx b/i18nlangtag/source/languagetag/languagetag.cxx index 92b9b5807e99..b54c2614e7f2 100644 --- a/i18nlangtag/source/languagetag/languagetag.cxx +++ b/i18nlangtag/source/languagetag/languagetag.cxx @@ -36,6 +36,10 @@ #include #endif +#ifdef EMSCRIPTEN +#include +#endif + using namespace com::sun::star; namespace { @@ -215,7 +219,7 @@ void LiblangtagDataRef::teardown() void LiblangtagDataRef::setupDataPath() { -#if defined(ANDROID) +#if defined(ANDROID) || defined(EMSCRIPTEN) maDataPath = OString(lo_get_app_data_dir()) + "/share/liblangtag"; #else // maDataPath is assumed to be empty here. diff --git a/include/osl/detail/emscripten-bootstrap.h b/include/osl/detail/emscripten-bootstrap.h new file mode 100644 index 000000000000..580964253377 --- /dev/null +++ b/include/osl/detail/emscripten-bootstrap.h @@ -0,0 +1,26 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#if defined(EMSCRIPTEN) + +#ifdef __cplusplus +extern "C" { +#endif + +const char *lo_get_app_data_dir(void); + +#ifdef __cplusplus +} +#endif + +#endif // EMSCRIPTEN + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/Library_lo-bootstrap.mk b/sal/Library_lo-bootstrap.mk index 3dc4bf9dfeaa..1e727cdee427 100644 --- a/sal/Library_lo-bootstrap.mk +++ b/sal/Library_lo-bootstrap.mk @@ -10,6 +10,8 @@ $(eval $(call gb_Library_Library,lo-bootstrap)) +ifeq (ANDROID,$(OS)) + # We explicitly *don't* want gb_STDLIBS to be linked here $(eval $(call gb_Library_disable_standard_system_libs,lo-bootstrap)) @@ -22,6 +24,13 @@ $(eval $(call gb_Library_add_cobjects,lo-bootstrap,\ sal/android/libreofficekit-jni \ sal/android/lo-bootstrap \ )) +endif + +ifeq (EMSCRIPTEN,$(OS)) +$(eval $(call gb_Library_add_cobjects,lo-bootstrap,\ + sal/emscripten/lo-bootstrap \ +)) +endif $(eval $(call gb_Library_set_include,lo-bootstrap,\ $$(INCLUDE) \ diff --git a/sal/Library_sal.mk b/sal/Library_sal.mk index aae7c97f0310..decfa39ce304 100644 --- a/sal/Library_sal.mk +++ b/sal/Library_sal.mk @@ -37,7 +37,7 @@ $(eval $(call gb_Library_add_defs,sal,\ )) $(eval $(call gb_Library_use_libraries,sal,\ - $(if $(filter ANDROID,$(OS)), \ + $(if $(filter ANDROID EMSCRIPTEN,$(OS)), \ lo-bootstrap \ ) \ )) diff --git a/sal/Module_sal.mk b/sal/Module_sal.mk index 34c3f1450613..854d46a8e6d4 100644 --- a/sal/Module_sal.mk +++ b/sal/Module_sal.mk @@ -11,7 +11,7 @@ $(eval $(call gb_Module_Module,sal)) $(eval $(call gb_Module_add_targets,sal,\ $(if $(CROSS_COMPILING),,$(if $(filter TRUE,$(DISABLE_DYNLOADING)),,Executable_cppunittester)) \ - $(if $(filter $(OS),ANDROID), \ + $(if $(filter $(OS),ANDROID EMSCRIPTEN), \ Library_lo-bootstrap) \ Library_sal \ $(call gb_CondLibSalTextenc,Library_sal_textenc) \ diff --git a/sal/emscripten/lo-bootstrap.c b/sal/emscripten/lo-bootstrap.c new file mode 100644 index 000000000000..cfcf3df1fdf2 --- /dev/null +++ b/sal/emscripten/lo-bootstrap.c @@ -0,0 +1,19 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +__attribute__ ((visibility("default"))) +const char * +lo_get_app_data_dir(void) +{ + return "/instdir"; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/bootstrap.cxx b/sal/rtl/bootstrap.cxx index 422411190ea4..04e0a4d0ed14 100644 --- a/sal/rtl/bootstrap.cxx +++ b/sal/rtl/bootstrap.cxx @@ -50,6 +50,10 @@ #include #endif +#ifdef EMSCRIPTEN +#include +#endif + #ifdef IOS #include #import @@ -456,7 +460,7 @@ bool Bootstrap_Impl::getValue( return true; } -#ifdef ANDROID +#if defined ANDROID || defined EMSCRIPTEN if (key == "APP_DATA_DIR") { const char *app_data_dir = lo_get_app_data_dir(); diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist index 0fa8c8402159..b4e26cccaa7e 100644 --- a/solenv/clang-format/excludelist +++ b/solenv/clang-format/excludelist @@ -5463,6 +5463,7 @@ include/osl/conditn.hxx include/osl/detail/android-bootstrap.h include/osl/detail/component-defines.h include/osl/detail/component-mapping.h +include/osl/detail/emscripten-bootstrap.h include/osl/diagnose.h include/osl/diagnose.hxx include/osl/endian.h @@ -7574,6 +7575,7 @@ sal/android/libreofficekit-jni.c sal/android/lo-bootstrap.c sal/android/uthash.h sal/cppunittester/cppunittester.cxx +sal/emscripten/lo-bootstrap.c sal/inc/signalshared.hxx sal/osl/all/compat.cxx sal/osl/all/debugbase.cxx diff --git a/unotools/source/i18n/resmgr.cxx b/unotools/source/i18n/resmgr.cxx index 3a7116350062..04f27b916db3 100644 --- a/unotools/source/i18n/resmgr.cxx +++ b/unotools/source/i18n/resmgr.cxx @@ -36,7 +36,7 @@ #include #include -#if defined UNX && !defined MACOSX && !defined IOS && !defined ANDROID +#if defined UNX && !defined MACOSX && !defined IOS && !defined ANDROID && !defined EMSCRIPTEN # include #endif @@ -57,6 +57,10 @@ #include #endif +#ifdef EMSCRIPTEN +#include +#endif + #if defined(_WIN32) && defined(DBG_UTIL) #include #include @@ -134,7 +138,7 @@ namespace Translate gen.characters(boost::locale::char_facet_t::char_f); gen.categories(boost::locale::category_t::message | boost::locale::category_t::information); #endif -#if defined(ANDROID) +#if defined(ANDROID) || defined(EMSCRIPTEN) OString sPath(OString(lo_get_app_data_dir()) + "/program/resource"); #else OUString uri("$BRAND_BASE_DIR/$BRAND_SHARE_RESOURCE_SUBDIR/"); @@ -151,7 +155,7 @@ namespace Translate OString sPath(OUStringToOString(path, eEncoding)); #endif gen.add_messages_path(sPath.getStr()); -#if defined UNX && !defined MACOSX && !defined IOS && !defined ANDROID +#if defined UNX && !defined MACOSX && !defined IOS && !defined ANDROID && !defined EMSCRIPTEN // allow gettext to find these .mo files e.g. so gtk dialogs can use them bindtextdomain(aPrefixName.data(), sPath.getStr()); // tdf#131069 gtk, and anything sane, always wants utf-8 strings as output