#include <cstdlib>
#include <iostream>
#include <string>
+#include <vector>
#include <cstdio>
#include <fstream>
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()))
{
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
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<std::string> 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();
pathFixed = CDMUtilities::fixPath(word);
isBinary = true;
}
- }
+ }
+#endif
readFile.close();
}
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;
}
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;
}
}
}
-std::map<wxTreeItemId, modelCDMIProjectTreeNode*>& modelCDMMain::GetModelElements()
+std::map<wxCDMTreeItemId, modelCDMIProjectTreeNode*>& modelCDMMain::GetModelElements()
{
return this->modelElements;
}