X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcreaDevManagerLib%2FmodelCDMMain.cpp;h=8d69741da2b3d46229e93248e4ae5943355ad256;hb=f10df58dfa9c4d8489fe35f57f796bcf37e5f9b4;hp=7537c467087aa819e3d804f167e574ada9dddbe0;hpb=cfa883d25e73975f73c20fefc1ec2c947d827938;p=crea.git diff --git a/lib/creaDevManagerLib/modelCDMMain.cpp b/lib/creaDevManagerLib/modelCDMMain.cpp index 7537c46..8d69741 100644 --- a/lib/creaDevManagerLib/modelCDMMain.cpp +++ b/lib/creaDevManagerLib/modelCDMMain.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include @@ -83,9 +84,8 @@ bool modelCDMMain::CreateProject( std::string command2("del "); command += "\"" + locationFixed + "\" \"" + name + "\""; - command1 += "\"" + locationFixed +CDMUtilities::SLASH+name+CDMUtilities::SLASH+"CMakeLists.txt.in\" " + "NameOfTheProject " + name + "> \"" + locationFixed + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt\""; - command2 += "\"" + locationFixed +CDMUtilities::SLASH+name+CDMUtilities::SLASH+"CMakeLists.txt.in\""; - + command1 += "\"" + locationFixed + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt.in\" " + "PROJECT_NAME " + name + "> \"" + locationFixed + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt\""; + command2 += "\"" + locationFixed + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt.in\""; if (system (command.c_str())) { @@ -93,20 +93,35 @@ bool modelCDMMain::CreateProject( return false; } - system ( command1.c_str() ); - system ( command2.c_str() ); + if (system (command1.c_str())) + { + result = new std::string("An error occurred while running '" + command1 + "'."); + return false; + } + if (system (command2.c_str())) + { + result = new std::string("An error occurred while running '" + command2 + "'."); + return false; + } - char *author = author.c_str(); std::string nomDirectory = locationFixed + CDMUtilities::SLASH + name; std::string nomPackageDirectory = nomDirectory + CDMUtilities::SLASH + "bbtk_" + name + "_PKG"; std::string bbCreatePackage("bbCreatePackage "); bbCreatePackage += "\"" + nomDirectory + "\" \"" + name + "\" \"" + author + "\" \"" + description + "\""; - system (bbCreatePackage.c_str()); + if (!system (bbCreatePackage.c_str())) + { + result = new std::string("An error occurred while running '" + bbCreatePackage + "'."); + return false; + } std::string add; add = "echo ADD_SUBDIRECTORY(bbtk_" + name + "_PKG) >> \"" + nomDirectory + CDMUtilities::SLASH + "CMakeLists.txt\""; - system(add.c_str()); + if (system (add.c_str())) + { + result = new std::string("An error occurred while running '" + add + "'."); + return false; + } - this->project = new modelCDMProject(nomDirectory, name); + this->project = new modelCDMProject(NULL, nomDirectory, name); #else // ------ LINUX / MacOS @@ -139,7 +154,7 @@ bool modelCDMMain::CreateProject( return false; } - this->project = new modelCDMProject(nomDirectory, name); + this->project = new modelCDMProject(NULL, nomDirectory, name); #endif @@ -161,20 +176,47 @@ bool modelCDMMain::OpenProject( std::string pathBuild = ""; //check if Makefile file exists +#ifdef _WIN32 + std::string pathMakefile = pathFixed + CDMUtilities::SLASH + "CMakeCache.txt"; + FILE* pFile; + errno_t errorOpen = fopen_s(&pFile, pathMakefile.c_str(), "r"); +#else std::string pathMakefile = pathFixed + CDMUtilities::SLASH + "Makefile"; - FILE* pFile = fopen(pathMakefile.c_str(), "r"); - + FILE* pFile; + pFile = fopen(pathMakefile.c_str(), "r"); + bool errorOpen = (pFile == NULL); +#endif //is the binary folder - if (pFile != NULL) + if (!errorOpen && pFile) { fclose(pFile); std::ifstream readFile; readFile.open(pathMakefile.c_str()); std::string word; + +#ifdef _WIN32 + while(!isBinary && !readFile.eof()) + { + getline(readFile, word, '\n'); + std::vector words; + CDMUtilities::splitter::split(words,word,"=",CDMUtilities::splitter::no_empties); + if(words.size() && words[0] == "CMAKE_HOME_DIRECTORY:INTERNAL") + { + pathBuild = pathFixed; + pathFixed = CDMUtilities::fixPath(words[1]); + for (int i = 0; i < (int)(pathFixed.size()); i++) + { + if (pathFixed[i]=='/') + pathFixed[i]='\\'; + } + isBinary = true; + } + } +#else while(!isBinary && readFile >> word) { - if(word == "CMAKE_SOURCE_DIR") + if(word == "CMAKE_SOURCE_DIR") { readFile >> word; readFile.ignore(); @@ -183,7 +225,8 @@ bool modelCDMMain::OpenProject( pathFixed = CDMUtilities::fixPath(word); isBinary = true; } - } + } +#endif readFile.close(); } @@ -192,10 +235,15 @@ bool modelCDMMain::OpenProject( std::string pathSource = ""; //check if CMakeLists file exists std::string pathCMakeLists = pathFixed + CDMUtilities::SLASH + "CMakeLists.txt"; +#ifdef _WIN32 + errorOpen = fopen_s(&pFile, pathCMakeLists.c_str(), "r"); +#else pFile = fopen(pathCMakeLists.c_str(), "r"); + errorOpen = (pFile == NULL); +#endif //is the source folder - if (pFile != NULL) + if (!errorOpen && pFile) { fclose(pFile); std::ifstream readFile; @@ -234,16 +282,16 @@ bool modelCDMMain::OpenProject( { std::cout << ", and built in: " << pathBuild << std::endl; - this->project = new modelCDMProject(pathSource, words[words.size()-1], pathBuild); + this->project = new modelCDMProject(NULL, pathSource, words[words.size()-1], pathBuild); } else { - this->project = new modelCDMProject(pathSource, words[words.size()-1]); + this->project = new modelCDMProject(NULL, pathSource, words[words.size()-1]); } } else { - result = new std::string("No source folder found. Please make sure to select either the project's build or source folder."); + result = new std::string("No source folder found. Please make sure to select either the project's build or source folder. " + pathBuild + pathFixed); return false; } @@ -266,7 +314,7 @@ bool modelCDMMain::RefreshProject( } } -std::map& modelCDMMain::GetModelElements() +std::map& modelCDMMain::GetModelElements() { return this->modelElements; }