#if !(defined ANDROID || defined EMSCRIPTEN)
OUString get_this_libpath() { static OUString s_uri = []() {
OUString uri;
sal_Int32 i = -1; if (osl::Module::getUrlFromAddress(reinterpret_cast<oslGenericFunction>(get_this_libpath), uri))
i = uri.lastIndexOf('/'); if (i == -1) throw css::uno::DeploymentException("URI " + uri + " is expected to contain a slash"); return uri.copy(0, i);
}();
return s_uri;
} #endif
}
OUString cppu::getUnoIniUri() { #ifdefined ANDROID // Wouldn't it be lovely to avoid this ugly hard-coding. // The problem is that the 'create_bootstrap_macro_expander_factory()' // required for bootstrapping services, calls cppu::get_unorc directly // instead of re-using the BootstrapHandle from: // defaultBootstrap_InitialComponentContext // and since rtlBootstrapHandle is not ref-counted doing anything // clean here is hardish.
OUString uri("file:///assets/program"); #elifdefined(EMSCRIPTEN)
OUString uri("file:///instdir/program"); #else
OUString uri(get_this_libpath()); #ifdef MACOSX // We keep the URE dylibs directly in "Frameworks" (that is, LIBO_LIB_FOLDER) and unorc in // "Resources/ure/etc" (LIBO_URE_ETC_FOLDER). if (uri.endsWith( "/" LIBO_LIB_FOLDER ) )
{
uri = OUString::Concat(uri.subView( 0, uri.getLength() - (sizeof(LIBO_LIB_FOLDER)-1) )) + LIBO_URE_ETC_FOLDER;
} #endif #endif return uri + "/" SAL_CONFIGFILE("uno");
}