2 # ---------------------------------------------------------------------
4 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
6 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
10 # This software is governed by the CeCILL-B license under French law and
11 # abiding by the rules of distribution of free software. You can use,
12 # modify and/ or redistribute the software under the terms of the CeCILL-B
13 # license as circulated by CEA, CNRS and INRIA at the following URL
14 # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
15 # or in the file LICENSE.txt.
17 # As a counterpart to the access to the source code and rights to copy,
18 # modify and redistribute granted by the license, users are provided only
19 # with a limited warranty and the software's author, the holder of the
20 # economic rights, and the successive licensors have only limited
23 # The fact that you are presently reading this means that you have had
24 # knowledge of the CeCILL-B license and that you accept its terms.
25 # ------------------------------------------------------------------------
31 * Created on: Nov 23, 2012
32 * Author: Daniel Felipe Gonzalez Obando
35 #include "modelCDMPackage.h"
40 #include <boost/regex.hpp>
44 #include "CDMUtilities.h"
46 modelCDMPackage::modelCDMPackage()
51 modelCDMPackage::modelCDMPackage(modelCDMIProjectTreeNode* parent, const std::string& path, const std::string& name, const int& level)
53 std::cout << "creating package: " + path + "\n";
54 this->parent = parent;
55 this->type = wxDIR_DIRS;
59 std::string pathMakeLists = path + CDMUtilities::SLASH + "CMakeLists.txt";
61 std::ifstream confFile;
62 confFile.open((pathMakeLists).c_str());
65 while(confFile.is_open() && !confFile.eof())
68 std::getline(confFile,word,'(');
69 std::vector<std::string> wordBits;
70 CDMUtilities::splitter::split(wordBits,word," (\n",CDMUtilities::splitter::no_empties);
72 if(wordBits[wordBits.size()-1] == "SET")
75 std::getline(confFile,word,')');
76 CDMUtilities::splitter::split(wordBits, word, " ", CDMUtilities::splitter::no_empties);
77 if(wordBits[0] == "BBTK_PACKAGE_NAME")
80 for (int i = 2; i < (int)(wordBits.size()); i++)
82 word += " " + wordBits[i];
85 CDMUtilities::splitter::split(wordBits, word, "\"", CDMUtilities::splitter::no_empties);
87 this->namePackage = wordBits[0];
89 else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_AUTHOR")
92 for (int i = 2; i < (int)(wordBits.size()); i++)
94 word += " " + wordBits[i];
97 CDMUtilities::splitter::split(wordBits, word, "\"", CDMUtilities::splitter::no_empties);
99 this->authors = wordBits[0];
101 else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_DESCRIPTION")
104 for (int i = 2; i < (int)(wordBits.size()); i++)
106 word += " " + wordBits[i];
109 CDMUtilities::splitter::split(wordBits, word, "\"", CDMUtilities::splitter::no_empties);
111 this->description = wordBits[0];
113 else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_MAJOR_VERSION")
115 this->version = wordBits[1];
117 else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_MINOR_VERSION")
119 this->version += "." + wordBits[1];
121 else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_BUILD_VERSION")
123 this->version += "." + wordBits[1];
131 //check all folders and files
132 wxDir dir(crea::std2wx((path).c_str()));
138 bool cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_DIRS);
141 std::string stdfileName = crea::wx2std(fileName);
142 //if src, check for black boxes
143 if(stdfileName == "src")
145 this->src = new modelCDMPackageSrc(this, path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1);
146 this->children.push_back(this->src);
150 this->children.push_back(new modelCDMFolder(this, path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1));
153 cont = dir.GetNext(&fileName);
157 cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_FILES);
160 std::string stdfileName = crea::wx2std(fileName);
162 //if CMakeLists, create CMakeLists
163 if(stdfileName == "CMakeLists.txt")
165 this->CMakeLists = new modelCDMCMakeListsFile(this, path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1);
166 this->children.push_back(this->CMakeLists);
170 this->children.push_back(new modelCDMFile(this, path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1));
172 //if is an unknown file, create file
173 cont = dir.GetNext(&fileName);
176 this->SortChildren();
179 modelCDMPackage::~modelCDMPackage()
183 const std::string& modelCDMPackage::GetNamePackage() const
185 return this->namePackage;
188 const std::string& modelCDMPackage::GetAuthors() const
190 return this->authors;
193 const std::string& modelCDMPackage::GetAuthorsEmail() const
195 return this->authorsEmail;
198 const std::string& modelCDMPackage::GetVersion() const
200 return this->version;
203 const std::string& modelCDMPackage::GetDescription() const
205 return this->description;
208 modelCDMPackageSrc* modelCDMPackage::GetSrc() const
213 bool modelCDMPackage::SetAuthors(const std::string& authors, std::string*& result)
215 std::vector<std::string> words;
216 CDMUtilities::splitter::split(words, authors, ",\n", CDMUtilities::splitter::no_empties);
217 std::string authorsReal = words[0];
218 for (int i = 1; i < (int)(words.size()); i++)
220 authorsReal += "/" + words[i];
224 //opening original cmakelists
225 std::ifstream in((this->path + CDMUtilities::SLASH + "CMakeLists.txt").c_str());
228 result = new std::string("CMakeLists.txt file failed to open.");
231 //opening temporal cmakelists
232 std::ofstream out((this->path + CDMUtilities::SLASH + "CMakeLists.txt.tmp").c_str());
235 result = new std::string("CMakeLists.txt.tmp file failed to open.");
238 //copying contents from original to temporal and making changes
239 while (getline(in, line))
241 if(line.find("SET(${BBTK_PACKAGE_NAME}_AUTHOR") != std::string::npos)
242 line = "SET(${BBTK_PACKAGE_NAME}_AUTHOR \"" + authorsReal + "\")";
243 out << line << std::endl;
247 //delete old file and rename new file
249 std::string renameCommand = "move /Y \"" + this->path + CDMUtilities::SLASH + "CMakeLists.txt.tmp\" \"" + this->path + CDMUtilities::SLASH + "CMakeLists.txt\"";
251 std::string renameCommand = "mv \"" + this->path + CDMUtilities::SLASH + "CMakeLists.txt.tmp\" \"" + this->path + CDMUtilities::SLASH + "CMakeLists.txt\"";
254 if(system(renameCommand.c_str()))
256 result = new std::string("An error occurred while running '" + renameCommand + "'.");
260 this->authors = authorsReal;
264 bool modelCDMPackage::SetAuthorsEmail(const std::string& email, std::string*& result)
266 //TODO: implement method
270 bool modelCDMPackage::SetVersion(const std::string& version, std::string*& result)
272 std::vector<std::string> vers;
273 CDMUtilities::splitter::split(vers, version, " .", CDMUtilities::splitter::no_empties);
277 //opening original cmakelists
278 std::ifstream in((this->path + CDMUtilities::SLASH + "CMakeLists.txt").c_str());
281 result = new std::string("CMakeLists.txt file failed to open.");
284 //opening temporal cmakelists
285 std::ofstream out((this->path + CDMUtilities::SLASH + "CMakeLists.txt.tmp").c_str());
288 result = new std::string("CMakeLists.txt.tmp file failed to open.");
291 //copying contents from original to temporal and making changes
292 while (getline(in, line))
294 if(line.find("SET(${BBTK_PACKAGE_NAME}_MAJOR_VERSION") != std::string::npos)
295 line = "SET(${BBTK_PACKAGE_NAME}_MAJOR_VERSION " + vers[0] + ")";
296 else if(line.find("SET(${BBTK_PACKAGE_NAME}_VERSION") != std::string::npos)
297 line = "SET(${BBTK_PACKAGE_NAME}_MINOR_VERSION " + vers[1] + ")";
298 else if(line.find("SET(${BBTK_PACKAGE_NAME}_BUILD_VERSION") != std::string::npos)
299 line = "SET(${BBTK_PACKAGE_NAME}_BUILD_VERSION " + vers[2] + ")";
300 out << line << std::endl;
304 //delete old file and rename new file
306 std::string renameCommand = "move /Y \"" + this->path + CDMUtilities::SLASH + "CMakeLists.txt.tmp\" \"" + this->path + CDMUtilities::SLASH + "CMakeLists.txt\"";
308 std::string renameCommand = "mv \"" + this->path + CDMUtilities::SLASH + "CMakeLists.txt.tmp\" \"" + this->path + CDMUtilities::SLASH + "CMakeLists.txt\"";
311 if(system(renameCommand.c_str()))
313 result = new std::string("An error occurred while running '" + renameCommand + "'.");
317 this->version = vers[0] + "." + vers[1] + "." + vers[2];
321 bool modelCDMPackage::SetDescription(const std::string& description, std::string*& result)
323 std::vector<std::string> words;
324 CDMUtilities::splitter::split(words, description, " \n", CDMUtilities::splitter::no_empties);
325 std::string descriptionReal = words[0];
326 for (int i = 1; i < (int)(words.size()); i++)
328 descriptionReal += " " + words[i];
332 //opening original cmakelists
333 std::ifstream in((this->path + CDMUtilities::SLASH + "CMakeLists.txt").c_str());
336 result = new std::string("CMakeLists.txt file failed to open.");
339 //opening temporal cmakelists
340 std::ofstream out((this->path + CDMUtilities::SLASH + "CMakeLists.txt.tmp").c_str());
343 result = new std::string("CMakeLists.txt.tmp file failed to open.");
346 //copying contents from original to temporal and making changes
347 while (getline(in, line))
349 if(line.find("SET(${BBTK_PACKAGE_NAME}_DESCRIPTION") != std::string::npos)
350 line = "SET(${BBTK_PACKAGE_NAME}_DESCRIPTION \"" + descriptionReal + "\")";
351 out << line << std::endl;
355 //delete old file and rename new file
357 std::string renameCommand = "move /Y \"" + this->path + CDMUtilities::SLASH + "CMakeLists.txt.tmp\" \"" + this->path + CDMUtilities::SLASH + "CMakeLists.txt\"";
359 std::string renameCommand = "mv \"" + this->path + CDMUtilities::SLASH + "CMakeLists.txt.tmp\" \"" + this->path + CDMUtilities::SLASH + "CMakeLists.txt\"";
362 if(system(renameCommand.c_str()))
364 result = new std::string("An error occurred while running '" + renameCommand + "'.");
368 this->description = descriptionReal;
372 modelCDMBlackBox* modelCDMPackage::CreateBlackBox(
373 std::string*& result,
374 const std::string& name,
375 const std::string& type,
376 const std::string& format,
377 const std::string& categories,
378 const std::string& authors,
379 const std::string& authorsEmail,
380 const std::string& description
383 return this->src->CreateBlackBox(result,name, this->namePackage, type,format,categories,authors,authorsEmail,description);
386 const bool modelCDMPackage::Refresh(std::string*& result)
388 std::cout << "refreshing package " << this->namePackage << std::endl;
389 this->type = wxDIR_DIRS;
393 std::string pathMakeLists = path + CDMUtilities::SLASH + "CMakeLists.txt";
395 std::ifstream confFile;
396 confFile.open((pathMakeLists).c_str());
399 while(confFile.is_open() && !confFile.eof())
402 std::getline(confFile,word,'(');
403 std::vector<std::string> wordBits;
404 CDMUtilities::splitter::split(wordBits,word," (\n",CDMUtilities::splitter::no_empties);
406 if(wordBits[wordBits.size()-1] == "SET")
409 std::getline(confFile,word,')');
410 CDMUtilities::splitter::split(wordBits, word, " ", CDMUtilities::splitter::no_empties);
411 if(wordBits[0] == "BBTK_PACKAGE_NAME")
414 for (int i = 2; i < (int)(wordBits.size()); i++)
416 word += " " + wordBits[i];
419 CDMUtilities::splitter::split(wordBits, word, "\"", CDMUtilities::splitter::no_empties);
421 this->namePackage = wordBits[0];
423 else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_AUTHOR")
426 for (int i = 2; i < (int)(wordBits.size()); i++)
428 word += " " + wordBits[i];
431 CDMUtilities::splitter::split(wordBits, word, "\"", CDMUtilities::splitter::no_empties);
433 this->authors = wordBits[0];
435 else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_DESCRIPTION")
438 for (int i = 2; i < (int)(wordBits.size()); i++)
440 word += " " + wordBits[i];
443 CDMUtilities::splitter::split(wordBits, word, "\"", CDMUtilities::splitter::no_empties);
445 this->description = wordBits[0];
447 else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_MAJOR_VERSION")
449 this->version = wordBits[1];
451 else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_MINOR_VERSION")
453 this->version += "." + wordBits[1];
455 else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_BUILD_VERSION")
457 this->version += "." + wordBits[1];
464 std::vector<bool> checked(this->children.size(), false);
465 bool checkedSrc = false;
468 wxDir dir(crea::std2wx((this->path).c_str()));
472 bool cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_DIRS);
476 std::string stdfileName = crea::wx2std(fileName);
478 //detect black boxes in src
479 if(stdfileName == "src")
481 //check if box already exist
483 if (this->src != NULL)
486 int pos = std::find(this->children.begin(), this->children.end(), this->src) - this->children.begin();
489 if(!this->src->Refresh(result))
494 this->src = new modelCDMPackageSrc(this, path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level +1);
495 this->children.push_back(this->src);
501 //check if folder already exist
503 for (int i = 0; !found && i < (int)(this->children.size()); i++)
505 if (this->children[i]->GetName() == stdfileName)
509 if(!this->children[i]->Refresh(result))
515 modelCDMFolder* folder = new modelCDMFolder(this, this->path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1);
516 this->children.push_back(folder);
519 cont = dir.GetNext(&fileName);
523 cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_FILES);
526 std::string stdfileName = crea::wx2std(fileName);
528 //if CMakeLists, create CMakeLists
529 if(stdfileName == "CMakeLists.txt")
531 if (this->CMakeLists == NULL)
533 this->CMakeLists = new modelCDMCMakeListsFile(this, this->path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1);
534 this->children.push_back(this->CMakeLists);
538 int pos = std::find(this->children.begin(), this->children.end(), this->CMakeLists) - this->children.begin();
540 if(!this->CMakeLists->Refresh(result))
544 //if is an unknown file, create file
548 for (int i = 0; !found && i < (int)(this->children.size()); i++)
550 if (this->children[i]->GetName() == stdfileName)
554 if(!this->children[i]->Refresh(result))
561 modelCDMFile* file = new modelCDMFile(this, this->path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1);
562 this->children.push_back(file);
566 cont = dir.GetNext(&fileName);
575 for (int i = 0; i < (int)(checked.size()); i++)
579 delete this->children[i];
580 this->children.erase(this->children.begin()+i);
581 checked.erase(checked.begin()+i);
585 this->SortChildren();
589 void modelCDMPackage::CheckStructure(std::map<std::string, bool>& properties)
592 if(this->CMakeLists != NULL)
595 std::ifstream confFile;
596 confFile.open((this->CMakeLists->GetPath()).c_str());
598 //take everything that is not commented
599 std::string fileContent;
602 std::vector<std::string> words;
603 while(confFile.is_open() && !confFile.eof())
605 std::getline(confFile,word, '\n');
608 CDMUtilities::splitter::split(words, word, "#", CDMUtilities::splitter::empties_ok);
609 if (words.size() > 0)
612 CDMUtilities::splitter::split(words, word, " ", CDMUtilities::splitter::empties_ok);
613 for (int i = 0; i < (int)(words.size()); i++)
615 if(words[i].substr(0,2) == "//")
617 fileContent += words[i] + " ";
623 //check every instruction
624 std::stringstream ss(fileContent);
627 std::getline(ss,word, '(');
629 //check instruction name
630 CDMUtilities::splitter::split(words, word, " ", CDMUtilities::splitter::no_empties);
633 if (words.size() > 0 && words[words.size()-1] == "SET")
635 std::getline(ss,word, ')');
637 CDMUtilities::splitter::split(words, word, " \t", CDMUtilities::splitter::no_empties);
638 if (words.size() > 1)
640 if (words[0] == "${BBTK_PACKAGE_NAME}_USE_VTK" && words[1] == "ON")
642 properties["package " + this->name + " set USE_VTK"] = true;
644 else if (words[0] == "${BBTK_PACKAGE_NAME}_USE_ITK" && words[1] == "ON")
646 properties["package " + this->name + " set USE_ITK"] = true;
648 else if (words[0] == "${BBTK_PACKAGE_NAME}_USE_GDCM" && words[1] == "ON")
650 properties["package " + this->name + " set USE_GDCM"] = true;
652 else if (words[0] == "${BBTK_PACKAGE_NAME}_USE_GDCM_VTK" && words[1] == "ON")
654 properties["package " + this->name + " set USE_GDCM_VTK"] = true;
656 else if (words[0] == "${BBTK_PACKAGE_NAME}_USE_GSMIS" && words[1] == "ON")
658 properties["package " + this->name + " set USE_GSMIS"] = true;
660 else if (words[0] == "${BBTK_PACKAGE_NAME}_USE_WXWIDGETS" && words[1] == "ON")
662 properties["package " + this->name + " set USE_WXWIDGETS"] = true;
664 else if (words[0] == "${BBTK_PACKAGE_NAME}_USE_KWWIDGETS" && words[1] == "ON")
666 properties["package " + this->name + " set USE_KWWIDGETS"] = true;
668 else if (words[0] == "USE_BOOST" && words[1] == "ON")
670 properties["package " + this->name + " set USE_BOOST"] = true;
672 else if (words[0] == "${BBTK_PACKAGE_NAME}_INCLUDE_DIRS")
674 for (int i = 1; i < (int)(words.size()); i++)
676 if(words[i].substr(0,2) == "${" || words[i].substr(0,2) == "..")
677 properties["package " + this->name + " dir " + words[i]] = true;
680 else if (words[0] == "${BBTK_PACKAGE_NAME}_LIBS")
682 for (int i = 1; i < (int)(words.size()); i++)
684 properties["package " + this->name + " lib " + words[i]] = true;
694 std::map<std::string, bool> modelCDMPackage::Get3rdPartyLibraries()
696 std::map<std::string, std::string> correspondence;
697 correspondence["${BBTK_PACKAGE_NAME}_USE_VTK"] = "VTK";
698 correspondence["${BBTK_PACKAGE_NAME}_USE_ITK"] = "ITK";
699 correspondence["${BBTK_PACKAGE_NAME}_USE_GDCM"] = "GDCM";
700 correspondence["${BBTK_PACKAGE_NAME}_USE_GDCM_VTK"] = "GDCM_VTK";
701 correspondence["${BBTK_PACKAGE_NAME}_USE_GSMIS"] = "GSMIS";
702 correspondence["${BBTK_PACKAGE_NAME}_USE_WXWIDGETS"] = "WxWidgets";
703 correspondence["${BBTK_PACKAGE_NAME}_USE_KWWIDGETS"] = "KWWidgets";
704 std::map<std::string, bool> res;
708 res["GDCM_VTK"] = false;
709 res["GSMIS"] = false;
710 res["WxWidgets"] = false;
711 res["KWWidgets"] = false;
713 if (this->HasCMakeLists())
715 std::string CMfile = CDMUtilities::readFile(this->CMakeLists->GetPath().c_str());
717 boost::regex expression("^\\h*SET([\\s]|#[^\\n]*\\n)*\\(([\\s]|#[^\\n]*\\n)*\\$\\{BBTK_PACKAGE_NAME\\}_USE_\\w+\\s+ON");
718 std::string::const_iterator start, end;
719 start = CMfile.begin();
721 boost::match_results<std::string::const_iterator> what;
722 boost::match_flag_type flags = boost::match_default;
723 while(boost::regex_search(start, end, what, expression, flags))
725 std::cout << what[0].str() << std::endl;
726 boost::regex expression1 = boost::regex("\\$\\{BBTK_PACKAGE_NAME\\}_USE_\\w+");
727 std::string::const_iterator start1, end1;
728 start1 = what[0].first;
729 end1 = what[0].second;
730 boost::match_results<std::string::const_iterator> what1;
731 if(boost::regex_search(start1, end1, what1, expression1, flags))
733 std::string dete = what1.str();
734 CDMUtilities::normalizeStr(dete);
735 std::cout << dete << std::endl;
736 if(correspondence.find(dete) != correspondence.end())
737 res[correspondence[dete]] = true;
739 start = what[0].second;
745 bool modelCDMPackage::Set3rdPartyLibrary(const std::string& library_name,
746 const bool& toInclude)
748 std::map<std::string, std::string> correspondence;
750 correspondence["VTK"] = "${BBTK_PACKAGE_NAME}_USE_VTK";
751 correspondence["ITK"] = "${BBTK_PACKAGE_NAME}_USE_ITK";
752 correspondence["GDCM"] = "${BBTK_PACKAGE_NAME}_USE_GDCM";
753 correspondence["GDCM_VTK"] = "${BBTK_PACKAGE_NAME}_USE_GDCM_VTK";
754 correspondence["GSMIS"] = "${BBTK_PACKAGE_NAME}_USE_GSMIS";
755 correspondence["WxWidgets"] = "${BBTK_PACKAGE_NAME}_USE_WXWIDGETS";
756 correspondence["KWWidgets"] = "${BBTK_PACKAGE_NAME}_USE_KWWIDGETS";
758 if(correspondence.find(library_name) != correspondence.end())
760 std::string library_command = correspondence[library_name];
761 if (this->HasCMakeLists())
763 CDMUtilities::CMLFile cmlFile = CDMUtilities::readCMLFile(this->CMakeLists->GetPath().c_str());
765 // look at every syntax element
766 for (int i = 0; i < cmlFile.size(); ++i)
768 // if the element is a command and is a SET command
769 if (cmlFile[i].first == "command" && cmlFile[i].second[0] == "SET")
771 // search first parameter
773 while (pos < cmlFile[i].second.size())
775 if (!isspace(cmlFile[i].second[pos][0]) && cmlFile[i].second[pos][0] != '#' && cmlFile[i].second[pos][0] != '(' && cmlFile[i].second[pos][0] != ')')
781 // if the first parameter is a third party statement
782 if (pos < cmlFile[i].second.size() && cmlFile[i].second[pos] == library_command)
784 std::string foundLibrary = cmlFile[i].second[pos];
785 // search for second parameter
787 while (pos < cmlFile[i].second.size())
789 if (!isspace(cmlFile[i].second[pos][0]) && cmlFile[i].second[pos][0] != '#' && cmlFile[i].second[pos][0] != '(' && cmlFile[i].second[pos][0] != ')')
795 // if the second parameter is ON
796 if (pos < cmlFile[i].second.size() && cmlFile[i].second[pos] == "ON")
801 std::cout << "library already included: " << library_name << std::endl;
805 cmlFile[i].first = "comment";
806 cmlFile[i].second[0] = "#" + cmlFile[i].second[0];
807 std::cout << "library include commented: " << library_name << std::endl;
810 else if (pos < cmlFile[i].second.size() && cmlFile[i].second[pos] == "OFF")
815 cmlFile[i].second[pos] = "ON";
816 std::cout << "library include activated: " << library_name << std::endl;
820 std::cout << "library include already disabled: " << library_name << std::endl;
824 } else if (cmlFile[i].first == "comment") {
825 //TODO: check if it is commented
834 std::map<std::string, bool> modelCDMPackage::GetCustomLibraries()
836 std::map<std::string, bool> res;
841 bool modelCDMPackage::SetCustomLibrary(const std::string& library_name,
842 const bool& toInclude)