Changed the creation location of the NI file to configure smack for RPK
[platform/core/dotnet/launcher.git] / NativeLauncher / tool / ni_common.cc
index 6ab3e10..bacf923 100644 (file)
@@ -233,6 +233,7 @@ static bool createDirsAndCopyOwnerShip(std::string& target_path, const std::stri
 static std::string getNIFilePath(const std::string& absDllPath, NIOption* opt)
 {
        std::string dllPath = absDllPath;
+       std::string fileName = getFileName(absDllPath);
        if (opt->flags & NI_FLAGS_APPNI) {
                std::string niDirPath;
                std::string niTmpDirPath;
@@ -253,10 +254,13 @@ static std::string getNIFilePath(const std::string& absDllPath, NIOption* opt)
                                niTmpDirPath = prevPath;
                                _SERR("fail to create dir (%s)", niTmpDirPath.c_str());
                        }
-                       dllPath = concatPath(niTmpDirPath, getFileName(absDllPath));
+                       dllPath = concatPath(niTmpDirPath, fileName);
                } else {
-                       dllPath = concatPath(niDirPath, getFileName(absDllPath));
+                       dllPath = concatPath(niDirPath, fileName);
                }
+       } else if (opt->flags & NI_FLAGS_RESOURCE_NI) {
+               std::string rpkDir = concatPath(__pm->getAppRootPath(), APP_NI_SUB_DIR);
+               dllPath = createDir(rpkDir) ? concatPath(rpkDir, fileName) : concatPath(__pm->getAppRootPath(), fileName);
        }
 
        size_t index = dllPath.find_last_of(".");
@@ -466,6 +470,11 @@ static ni_error_e crossgen2PostAction(const std::string& dllPath, const std::str
                }
        }
 
+       if (opt->flags & NI_FLAGS_RESOURCE_NI) {
+               moveFile(niPath, changeExtension(dllPath, ".dll", ".ni.dll"));
+               removeAll(concatPath(__pm->getAppRootPath(), APP_NI_SUB_DIR));
+       }
+
        if (!(opt->flags & NI_FLAGS_INPUT_BUBBLE && opt->flags & NI_FLAGS_NO_PIPELINE)) {
                _SOUT("Native image %s generated successfully.", outFile.c_str());
        }
@@ -825,7 +834,7 @@ static ni_error_e removeAndCreateNI(const char* pkgId, NIOption* pOptions)
        }
 
        _SOUT("Complete make native image for pkg (%s)", pkgId);
-       return NI_ERROR_NONE;   
+       return NI_ERROR_NONE;
 }
 
 static bool isReadOnlyPkg(std::string pkgId)
@@ -1026,7 +1035,6 @@ ni_error_e createNIUnderTAC(const std::string& targetPath, const std::string& re
        return NI_ERROR_NONE;
 }
 
-
 ni_error_e createNIUnderDirs(const std::string& rootPaths, NIOption* opt)
 {
        ni_error_e ret = NI_ERROR_NONE;
@@ -1082,6 +1090,7 @@ ni_error_e createNIUnderPkgRoot(const std::string& pkgId, NIOption* opt)
                _SERR("Failed to get root path from [%s]", pkgId.c_str());
                return NI_ERROR_INVALID_PACKAGE;
        }
+       __pm->setAppRootPath(rootPath);
 
        char* extraDllPaths = pluginGetExtraDllPath();
        if (extraDllPaths && extraDllPaths[0] != '\0') {
@@ -1091,7 +1100,10 @@ ni_error_e createNIUnderPkgRoot(const std::string& pkgId, NIOption* opt)
 
        std::string targetDirs;
        if (isRPK(pkgId)) {
-               opt->flags &= ~NI_FLAGS_APPNI;
+               opt->flags &= ~NI_FLAGS_APPNI; // added to exclude logic of APP_NI
+               opt->flags |= NI_FLAGS_RESOURCE_NI; // added flag for RPK type
+               opt->flags |= NI_FLAGS_NO_PIPELINE; // added the flag to set the output path
+
                std::string paths = getResourcePaths(rootPath);
                if (paths.empty()) {
                        _SERR("Failed to get rpk paths from [%s]", pkgId.c_str());
@@ -1099,9 +1111,8 @@ ni_error_e createNIUnderPkgRoot(const std::string& pkgId, NIOption* opt)
                }
                targetDirs = paths;
        } else {
-               __pm->setAppRootPath(rootPath);
-
                opt->flags |= NI_FLAGS_APPNI;
+               opt->flags &= ~NI_FLAGS_RESOURCE_NI; // added to exclude logic of RESOURCE_NI
 
                if (isReadOnlyArea(rootPath)) {
                        opt->flags |= NI_FLAGS_APP_UNDER_RO_AREA;
@@ -1189,7 +1200,7 @@ ni_error_e removeNIUnderPkgRoot(const std::string& pkgId)
                        if (isDirectory(path)) {
                                removeNIUnderDirs(path);
                        }
-               }               
+               }
        } else {
                __pm->setAppRootPath(rootPath);