From 175a81477d0476f53162766202df7be421afe3aa Mon Sep 17 00:00:00 2001 From: Daniel Gonzalez Date: Thu, 18 Apr 2013 12:14:00 +0200 Subject: [PATCH] Feature #1711 CreaDevManager application implementation Feature: Now including/excluding third party libraries in packages using Regular Expressions. --- lib/creaDevManagerLib/modelCDMPackage.cpp | 158 ++++++++++-------- .../wxCDMPackageConfigurationDialog.cpp | 8 +- .../wxCDMPackageDescriptionPanel.cpp | 2 +- 3 files changed, 93 insertions(+), 75 deletions(-) diff --git a/lib/creaDevManagerLib/modelCDMPackage.cpp b/lib/creaDevManagerLib/modelCDMPackage.cpp index c080ddd..9a296e9 100644 --- a/lib/creaDevManagerLib/modelCDMPackage.cpp +++ b/lib/creaDevManagerLib/modelCDMPackage.cpp @@ -747,87 +747,105 @@ bool modelCDMPackage::Set3rdPartyLibrary(const std::string& library_name, { std::map correspondence; - correspondence["VTK"] = "${BBTK_PACKAGE_NAME}_USE_VTK"; - correspondence["ITK"] = "${BBTK_PACKAGE_NAME}_USE_ITK"; - correspondence["GDCM"] = "${BBTK_PACKAGE_NAME}_USE_GDCM"; - correspondence["GDCM_VTK"] = "${BBTK_PACKAGE_NAME}_USE_GDCM_VTK"; - correspondence["GSMIS"] = "${BBTK_PACKAGE_NAME}_USE_GSMIS"; - correspondence["WxWidgets"] = "${BBTK_PACKAGE_NAME}_USE_WXWIDGETS"; - correspondence["KWWidgets"] = "${BBTK_PACKAGE_NAME}_USE_KWWIDGETS"; -/* - if(correspondence.find(library_name) != correspondence.end()) + correspondence["VTK"] = "_USE_VTK"; + correspondence["ITK"] = "_USE_ITK"; + correspondence["GDCM"] = "_USE_GDCM"; + correspondence["GDCM_VTK"] = "_USE_GDCM_VTK"; + correspondence["GSMIS"] = "_USE_GSMIS"; + correspondence["WxWidgets"] = "_USE_WXWIDGETS"; + correspondence["KWWidgets"] = "_USE_KWWIDGETS"; + + if (correspondence.find(library_name) != correspondence.end()) { std::string library_command = correspondence[library_name]; +// std::cout << "found correspondence " << library_command << std::endl; +// std::cout.flush(); if (this->HasCMakeLists()) { - CDMUtilities::CMLFile cmlFile = CDMUtilities::readCMLFile(this->CMakeLists->GetPath().c_str()); + std::string CMfile = CDMUtilities::readFile(this->CMakeLists->GetPath().c_str()); + std::string resCMfile = ""; bool found = false; - // look at every syntax element - for (int i = 0; i < cmlFile.size(); ++i) - { - // if the element is a command and is a SET command - if (cmlFile[i].first == "command" && cmlFile[i].second[0] == "SET") - { - // search first parameter - int pos = 1; - while (pos < cmlFile[i].second.size()) - { - if (!isspace(cmlFile[i].second[pos][0]) && cmlFile[i].second[pos][0] != '#' && cmlFile[i].second[pos][0] != '(' && cmlFile[i].second[pos][0] != ')') - { - break; - } - pos++; - } - // if the first parameter is a third party statement - if (pos < cmlFile[i].second.size() && cmlFile[i].second[pos] == library_command) - { - std::string foundLibrary = cmlFile[i].second[pos]; - // search for second parameter - pos++; - while (pos < cmlFile[i].second.size()) - { - if (!isspace(cmlFile[i].second[pos][0]) && cmlFile[i].second[pos][0] != '#' && cmlFile[i].second[pos][0] != '(' && cmlFile[i].second[pos][0] != ')') + +// std::cout << "found cmakefile: " << CMfile << std::endl; +// std::cout.flush(); + + try { +// std::cout << "first regex" << std::endl; +// std::cout.flush(); + boost::regex expression("^\\h*SET([\\s]|#[^\\n]*\\n)*\\(([\\s]|#[^\\n]*\\n)*\\$\\{BBTK_PACKAGE_NAME\\}"+library_command+"([\\s]|#[^\\n]*\\n)+ON([\\s]|#[^\\n]*\\n)*\\)"); + + std::string::const_iterator start, end; + start = CMfile.begin(); + end = CMfile.end(); + boost::match_results what; + boost::match_flag_type flags = boost::match_default; + if(boost::regex_search(start, end, what, expression, flags)) + { +// std::cout << "found " << what.str() << std::endl; +// std::cout.flush(); + found = true; + resCMfile += what.prefix().str(); + if (toInclude) + resCMfile += what.str(); + else + resCMfile += "#" + what.str(); + resCMfile += what.suffix().str(); + + return CDMUtilities::writeFile(this->CMakeLists->GetPath().c_str(), resCMfile); + } + else + { +// std::cout << "second regex" << std::endl; +// std::cout.flush(); + boost::regex expression("^\\h*#\\h*SET([\\s]|#[^\\n]*\\n)*\\(([\\s]|#[^\\n]*\\n)*\\$\\{BBTK_PACKAGE_NAME\\}"+library_command+"([\\s]|#[^\\n]*\\n)+ON([\\s]|#[^\\n]*\\n)*\\)"); + if(boost::regex_search(start, end, what, expression, flags)) + { + found = true; + resCMfile += what.prefix().str(); + if(toInclude) + { + std::string dete = what[0].str(); + for (int i = 0; i < dete.size(); ++i) { + if (dete[i] != '#') + resCMfile.push_back(dete[i]); + if (dete[i] == 'S') { + resCMfile += dete.substr(i+1); break; } - pos++; } - // if the second parameter is ON - if (pos < cmlFile[i].second.size() && cmlFile[i].second[pos] == "ON") - { - found = true; - if (toInclude) - { - std::cout << "library already included: " << library_name << std::endl; - } - else - { - cmlFile[i].first = "comment"; - cmlFile[i].second[0] = "#" + cmlFile[i].second[0]; - std::cout << "library include commented: " << library_name << std::endl; - } - } - else if (pos < cmlFile[i].second.size() && cmlFile[i].second[pos] == "OFF") - { - found = true; - if (toInclude) - { - cmlFile[i].second[pos] = "ON"; - std::cout << "library include activated: " << library_name << std::endl; - } - else - { - std::cout << "library include already disabled: " << library_name << std::endl; - } - } - } - } else if (cmlFile[i].first == "comment") { - //TODO: check if it is commented - } - } + } + else + resCMfile += what.str(); + + resCMfile += what.suffix().str(); + return CDMUtilities::writeFile(this->CMakeLists->GetPath().c_str(), resCMfile); + } + else + { +// std::cout << "third regex" << std::endl; +// std::cout.flush(); + boost::regex expression("^\\h*#\\h*UNCOMMENT EACH LIBRARY NEEDED \\(WILL BE FOUND AND USED AUTOMATICALLY\\)[^\\n]*\\n"); + if(boost::regex_search(start, end, what, expression, flags)) + { + found = true; + resCMfile += what.prefix().str(); + resCMfile += what.str(); + if(toInclude) + { + resCMfile += "SET(${BBTK_PACKAGE_NAME}"+ library_command +" ON)\n"; + } + resCMfile += what.suffix().str(); + return CDMUtilities::writeFile(this->CMakeLists->GetPath().c_str(), resCMfile); + } + } + } + } catch (boost::bad_expression& e) { + std::cout << "bad regex: " << e.what() << std::endl; + std::cout.flush(); + } } } -*/ return false; } diff --git a/lib/creaDevManagerLib/wxCDMPackageConfigurationDialog.cpp b/lib/creaDevManagerLib/wxCDMPackageConfigurationDialog.cpp index 7c9c3aa..2178769 100644 --- a/lib/creaDevManagerLib/wxCDMPackageConfigurationDialog.cpp +++ b/lib/creaDevManagerLib/wxCDMPackageConfigurationDialog.cpp @@ -207,10 +207,10 @@ void wxCDMPackageConfigurationDialog::OnFinish(wxCommandEvent& event) void wxCDMPackageConfigurationDialog::On3rdLibraryIncludeChange( wxCommandEvent& event) { - this->package->Set3rdPartyLibrary( - crea::wx2std(((wxCheckBox*)event.GetEventObject())->GetName()), - ((wxCheckBox*)event.GetEventObject())->GetValue() - ); + if(this->package->Set3rdPartyLibrary(crea::wx2std(((wxCheckBox*)event.GetEventObject())->GetName()), ((wxCheckBox*)event.GetEventObject())->GetValue())) + ((wxCheckBox*)event.GetEventObject())->SetValue(((wxCheckBox*)event.GetEventObject())->GetValue()); + else + ((wxCheckBox*)event.GetEventObject())->SetValue(!((wxCheckBox*)event.GetEventObject())->GetValue()); } void wxCDMPackageConfigurationDialog::OnCustomLibraryIncludeChange( diff --git a/lib/creaDevManagerLib/wxCDMPackageDescriptionPanel.cpp b/lib/creaDevManagerLib/wxCDMPackageDescriptionPanel.cpp index 6858c55..c736270 100644 --- a/lib/creaDevManagerLib/wxCDMPackageDescriptionPanel.cpp +++ b/lib/creaDevManagerLib/wxCDMPackageDescriptionPanel.cpp @@ -88,8 +88,8 @@ bool wxCDMPackageDescriptionPanel::Create( long style ) { - wxPanel::Create(parent, id, pos, size, style); this->package = package; + wxPanel::Create(parent, id, pos, size, style); CreateControls(); // this part makes the scrollbars show up this->FitInside(); // ask the sizer about the needed size -- 2.45.0