Revert PR #509, #510 (#513)
[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
24 #include <vconf.h>
25 #include <glib.h>
26 #include <pkgmgr_installer_info.h>
27
28 #ifdef  LOG_TAG
29 #undef  LOG_TAG
30 #endif
31 #define LOG_TAG "DOTNET_INSTALLER_PLUGIN"
32
33 bool aotPluginInstalled = false;
34 bool aotPluginFinished = false;
35
36 extern "C" int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgId, const char *appId, GList *list)
37 {
38         // Can be multiple apps in one package
39         if (aotPluginInstalled) {
40                 _INFO("AOT plugin already installed");
41                 return 0;
42         }
43         aotPluginInstalled = true;
44
45         int skipOpt = false;
46         if (!pkgmgr_installer_info_get_skip_optimization(&skipOpt)) {
47                 if (skipOpt) {
48                         _DBG("Skip dotnet AOT");
49                         return 0;
50                 }
51         }
52
53         std::string metaValue = getMetadataValue(std::string(pkgId), AOT_METADATA_KEY);
54         if (metaValue.empty()) {
55                 _ERR("Failed to get metadata from [%s]", pkgId);
56                 return -1;
57         }
58
59         if (metaValue == METADATA_VALUE_TRUE) {
60                 _DBG("Prefer dotnet application AOT set TRUE");
61
62                 if (initNICommon() != NI_ERROR_NONE) {
63                         _ERR("Fail to initialize NI Common");
64                         return -1;
65                 }
66
67                 NIOption* opt = getNIOption();
68                 if (opt == nullptr) {
69                         _ERR("Fail to create option structure.");
70                         return -1;
71                 }
72
73                 if (createNIUnderPkgRoot(pkgId, opt) != NI_ERROR_NONE) {
74                         _ERR("Failed to generate application to native image [%s]", pkgId);
75                         return -1;
76                 }
77
78                 _INFO("Complete make application to native image");
79         }
80         return 0;
81 }
82
83 extern "C" int PKGMGR_MDPARSER_PLUGIN_UPGRADE(const char *pkgId, const char *appId, GList *list)
84 {
85         return PKGMGR_MDPARSER_PLUGIN_INSTALL(pkgId, appId, list);
86 }
87
88 extern "C" int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgId, const char *appId, GList *list)
89 {
90         return 0;
91 }
92
93 extern "C" int PKGMGR_MDPARSER_PLUGIN_REMOVED(const char *pkgId, const char *appId, GList *list)
94 {
95         return PKGMGR_MDPARSER_PLUGIN_UPGRADE(pkgId, appId, list);
96 }
97
98 extern "C" int PKGMGR_MDPARSER_PLUGIN_CLEAN(const char *pkgId, const char *appId, GList *list)
99 {
100         // Can be multiple apps in one package
101         if (aotPluginFinished) {
102                 _INFO("AOT plugin already finished(CLEAN)");
103                 return 0;
104         }
105         aotPluginFinished = true;
106
107         finalizeNICommon();
108         return 0;
109 }
110
111 extern "C" int PKGMGR_MDPARSER_PLUGIN_UNDO(const char *pkgId, const char *appId, GList *list)
112 {
113         // Can be multiple apps in one package
114         if (aotPluginFinished) {
115                 _INFO("AOT plugin already finished(UNDO)");
116                 return 0;
117         }
118         aotPluginFinished = true;
119
120         finalizeNICommon();
121         return 0;
122 }