dd35e478c1d511bd5f70bdf95e7a1d822f44284f
[platform/core/dotnet/launcher.git] / NativeLauncher / installer-plugin / prefer_dotnet_aot_plugin.cc
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include "ni_common.h"
18 #include "log.h"
19 #include "utils.h"
20
21 #include <cstring>
22 #include <vector>
23 #include <glib.h>
24 #include <pkgmgr_installer_info.h>
25
26 #ifdef  LOG_TAG
27 #undef  LOG_TAG
28 #endif
29 #define LOG_TAG "DOTNET_INSTALLER_PLUGIN"
30
31 bool aotPluginInstalled = false;
32 bool aotPluginFinished = false;
33
34 extern "C" int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgId, const char *appId, GList *list)
35 {
36         // Can be multiple apps in one package
37         if (aotPluginInstalled) {
38                 _INFO("AOT plugin already installed");
39                 return 0;
40         }
41         aotPluginInstalled = true;
42
43         int skipOpt = false;
44         if (!pkgmgr_installer_info_get_skip_optimization(&skipOpt)) {
45                 if (skipOpt) {
46                         _DBG("Skip dotnet AOT");
47                         return 0;
48                 }
49         }
50
51         std::string metaValue = getMetadataValue(std::string(pkgId), AOT_METADATA_KEY);
52         if (metaValue.empty()) {
53                 _ERR("Failed to get metadata from [%s]", pkgId);
54                 return -1;
55         }
56
57         if (metaValue == METADATA_VALUE) {
58                 _DBG("Prefer dotnet application AOT set TRUE");
59
60                 if (initNICommon() != NI_ERROR_NONE) {
61                         _ERR("Fail to initialize NI Common");
62                         return -1;
63                 }
64
65                 if (createNIUnderPkgRoot(pkgId, 0) != NI_ERROR_NONE) {
66                         _ERR("Failed to get root path from [%s]", pkgId);
67                         return -1;
68                 }
69
70                 _INFO("Complete make application to native image");
71         }
72         return 0;
73 }
74
75 extern "C" int PKGMGR_MDPARSER_PLUGIN_UPGRADE(const char *pkgId, const char *appId, GList *list)
76 {
77         return PKGMGR_MDPARSER_PLUGIN_INSTALL(pkgId, appId, list);
78 }
79
80 extern "C" int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgId, const char *appId, GList *list)
81 {
82         return 0;
83 }
84
85 extern "C" int PKGMGR_MDPARSER_PLUGIN_REMOVED(const char *pkgId, const char *appId, GList *list)
86 {
87         return PKGMGR_MDPARSER_PLUGIN_UPGRADE(pkgId, appId, list);
88 }
89
90 extern "C" int PKGMGR_MDPARSER_PLUGIN_CLEAN(const char *pkgId, const char *appId, GList *list)
91 {
92         // Can be multiple apps in one package
93         if (aotPluginFinished) {
94                 _INFO("AOT plugin already finished(CLEAN)");
95                 return 0;
96         }
97         aotPluginFinished = true;
98
99         finalizeNICommon();
100         return 0;
101 }
102
103 extern "C" int PKGMGR_MDPARSER_PLUGIN_UNDO(const char *pkgId, const char *appId, GList *list)
104 {
105         // Can be multiple apps in one package
106         if (aotPluginFinished) {
107                 _INFO("AOT plugin already finished(UNDO)");
108                 return 0;
109         }
110         aotPluginFinished = true;
111
112         finalizeNICommon();
113         return 0;
114 }