X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=NativeLauncher%2Finstaller-plugin%2Fprefer_dotnet_aot_plugin.cc;h=161d8d6ffcd3b1c1f18712c7ccc56b5fd5d65838;hb=239658cc30680a9509ea8b00bd4a67599874ce2d;hp=a4592b463a011922782f09b9e0662f97aee11a6e;hpb=d109edcd7cfe4c685efc306d2a3bfcb7da7d23b3;p=platform%2Fcore%2Fdotnet%2Flauncher.git diff --git a/NativeLauncher/installer-plugin/prefer_dotnet_aot_plugin.cc b/NativeLauncher/installer-plugin/prefer_dotnet_aot_plugin.cc index a4592b4..161d8d6 100644 --- a/NativeLauncher/installer-plugin/prefer_dotnet_aot_plugin.cc +++ b/NativeLauncher/installer-plugin/prefer_dotnet_aot_plugin.cc @@ -18,15 +18,16 @@ #include "log.h" #include "utils.h" -#ifdef LOG_TAG -#undef LOG_TAG -#endif -#define LOG_TAG "NETCORE_INSTALLER_PLUGIN" - #include #include #include #include +#include + +#ifdef LOG_TAG +#undef LOG_TAG +#endif +#define LOG_TAG "DOTNET_INSTALLER_PLUGIN" typedef struct Metadata { const char *key; @@ -35,13 +36,21 @@ typedef struct Metadata { extern "C" int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgId, const char *appId, GList *list) { + int skipOpt = false; + if (!pkgmgr_installer_info_get_skip_optimization(&skipOpt)) { + if (skipOpt) { + _DBG("Skip dotnet AOT"); + return 0; + } + } + GList *tag = NULL; bool mdValue = false; Metadata *mdInfo = NULL; tag = g_list_first(list); while (tag) { mdInfo = (Metadata*)tag->data; - if (mdInfo->key == AOT_METADATA_KEY && mdInfo->value == AOT_METADATA_VALUE) { + if (strcmp(mdInfo->key, AOT_METADATA_KEY) == 0 && strcmp(mdInfo->value, METADATA_VALUE) == 0) { _DBG("Prefer dotnet application AOT set TRUE"); mdValue = true; } @@ -55,12 +64,56 @@ extern "C" int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgId, const char *app return -1; } - if (createNiUnderPkgRoot(pkgId, false) != 0) { + if (createNiUnderPkgRoot(pkgId, 0) != NI_ERROR_NONE) { _ERR("Failed to get root path from [%s]", pkgId); return -1; } else { _INFO("Complete make application to native image"); } + + std::string pkgRoot; + if (getRootPath(pkgId, pkgRoot) < 0) { + _ERR("Failed to get root path from [%s]", pkgId); + return 0; + } + + std::string binDir = concatPath(pkgRoot, "bin"); + std::string tacDir = concatPath(binDir, TAC_SYMLINK_SUB_DIR); + if (bf::exists(tacDir)) { + uid_t g_uid = 0; + gid_t g_gid = 0; + if (pkgmgr_installer_info_get_target_uid(&g_uid) < 0) { + _ERR("Failed to get UID"); + return 0; + } + try { + for (auto& symlinkAssembly : bf::recursive_directory_iterator(tacDir)) { + std::string symPath = symlinkAssembly.path().string(); + if (!isNativeImage(symPath)) { + std::string originPath = bf::read_symlink(symPath).string(); + std::string originNiPath = originPath.substr(0, originPath.rfind(".dll")) + ".ni.dll"; + if (!bf::exists(originNiPath)) { + if(createNiDllUnderPkgRoot(pkgId, originPath, 0) != NI_ERROR_NONE) { + _ERR("Failed to create NI file [%s]", originPath.c_str()); + return -1; + } + } + std::string setNiPath = symPath.substr(0, symPath.rfind(".dll")) + ".ni.dll"; + if (!bf::exists(setNiPath)) { + bf::create_symlink(originNiPath, setNiPath); + _INFO("%s symbolic link file generated successfully.", setNiPath.c_str()); + if (lchown(setNiPath.c_str(), g_uid, g_gid)) { + _ERR("Failed to change owner of: %s", setNiPath.c_str()); + return -1; + } + } + } + } + } catch (const bf::filesystem_error& error) { + _ERR("File system error while interating files: %s", error.what()); + return -1; + } + } } return 0; } @@ -69,3 +122,23 @@ extern "C" int PKGMGR_MDPARSER_PLUGIN_UPGRADE(const char *pkgId, const char *app { return PKGMGR_MDPARSER_PLUGIN_INSTALL(pkgId, appId, list); } + +extern "C" int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgId, const char *appId, GList *list) +{ + return 0; +} + +extern "C" int PKGMGR_MDPARSER_PLUGIN_REMOVED(const char *pkgId, const char *appId, GList *list) +{ + return PKGMGR_MDPARSER_PLUGIN_UPGRADE(pkgId, appId, list); +} + +extern "C" int PKGMGR_MDPARSER_PLUGIN_CLEAN(const char *pkgId, const char *appId, GList *list) +{ + return 0; +} + +extern "C" int PKGMGR_MDPARSER_PLUGIN_UNDO(const char *pkgId, const char *appId, GList *list) +{ + return 0; +}