From c385404aec170d7626492d5de54a8e40c1bfc903 Mon Sep 17 00:00:00 2001 From: Daniel Gonzalez Date: Thu, 18 Apr 2013 10:56:51 +0200 Subject: [PATCH] Feature #1711 CreaDevManager application implementation Change feature: Now including/excluding third party libraries in applications using Regular Expressions. --- lib/creaDevManagerLib/modelCDMApplication.cpp | 109 ++++++++++++++++++ lib/creaDevManagerLib/modelCDMLibrary.cpp | 6 +- .../wxCDMApplicationDescriptionPanel.cpp | 5 +- 3 files changed, 115 insertions(+), 5 deletions(-) diff --git a/lib/creaDevManagerLib/modelCDMApplication.cpp b/lib/creaDevManagerLib/modelCDMApplication.cpp index c0d3b46..a501236 100644 --- a/lib/creaDevManagerLib/modelCDMApplication.cpp +++ b/lib/creaDevManagerLib/modelCDMApplication.cpp @@ -612,6 +612,114 @@ bool modelCDMApplication::Set3rdPartyLibrary(const std::string& library_name, co correspondence["GDCM"] = "${GDCM_LIBRARIES}"; correspondence["Boost"] = "${BOOST_LIBRARIES}"; + std::map regexCorrespondence; + + regexCorrespondence["Crea"] = "\\$\\{crea_LIBRARIES\\}"; + regexCorrespondence["WxWidgets"] = "\\$\\{WXWIDGETS_LIBRARIES\\}"; + regexCorrespondence["KWWidgets"] = "\\$\\{KWWidgets_LIBRARIES\\}"; + regexCorrespondence["VTK"] = "\\$\\{VTK_LIBRARIES\\}"; + regexCorrespondence["ITK"] = "\\$\\{ITK_LIBRARIES\\}"; + regexCorrespondence["GDCM"] = "\\$\\{GDCM_LIBRARIES\\}"; + regexCorrespondence["Boost"] = "\\$\\{BOOST_LIBRARIES\\}"; + + if (correspondence.find(library_name) != correspondence.end()) + { + std::string library_command = correspondence[library_name]; + std::string regex_command = regexCorrespondence[library_name]; + if (this->HasCMakeLists()) + { + std::string CMfile = CDMUtilities::readFile(this->CMakeLists->GetPath().c_str()); + std::string resCMfile = ""; + + boost::regex expression("^\\h*SET([\\s]|#[^\\n]*\\n)*\\(([\\s]|#[^\\n]*\\n)*\\$\\{EXE_NAME\\}_LINK_LIBRARIES(([\\s]|#[^\\n]*\\n)+([\\$\\{\\}\\w\\d]+|\"(?:[^\"\\\\]|\\\\.)*\"))*([\\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)) + { + resCMfile += what.prefix().str(); + bool found = false; + if (toInclude) { + expression = "^\\h*#+\\h*" + regex_command; + std::string::const_iterator start1, end1; + start1 = what[0].first; + end1 = what[0].second; + boost::match_results what1, what2; + while(boost::regex_search(start1, end1, what1, expression, flags)) + { + found = true; + resCMfile += what1.prefix().str(); + std::string dete = what1[0].str(); + for (int i = 0; i < dete.size(); ++i) { + if (dete[i] != '#') + resCMfile.push_back(dete[i]); + } + what2 = what1; + start1 = what1[0].second; + } + if (found) + resCMfile += what2.suffix().str(); + else + { + expression = "^\\h*" + regex_command; + if(boost::regex_search(start1, end1, what1, expression, flags)) + found = true; + + expression = "^\\h*SET([\\s]|#[^\\n]*\\n)*\\(([\\s]|#[^\\n]*\\n)*\\$\\{EXE_NAME\\}_LINK_LIBRARIES"; + boost::regex_search(start1, end1, what1, expression, flags); + + resCMfile += what1.prefix().str() + what1.str(); + if(!found) + resCMfile += "\n" + library_command + "\n"; + resCMfile += what1.suffix().str(); + } + + }else{ + expression = "^\\h*" + regex_command; + std::string::const_iterator start1, end1; + start1 = what[0].first; + end1 = what[0].second; + boost::match_results what1, what2; + while(boost::regex_search(start1, end1, what1, expression, flags)) + { + found = true; + resCMfile += what1.prefix().str(); + resCMfile += "#" + what1.str(); + what2 = what1; + start1 = what1[0].second; + } + if (found) + resCMfile += what2.suffix().str(); + else + { + expression = "^\\h*SET([\\s]|#[^\\n]*\\n)*\\(([\\s]|#[^\\n]*\\n)*\\$\\{EXE_NAME\\}_LINK_LIBRARIES"; + boost::regex_search(start1, end1, what1, expression, flags); + + resCMfile += what1.prefix().str() + what1.str() + what1.suffix().str(); + } + } + resCMfile += what.suffix().str(); + + return CDMUtilities::writeFile(this->CMakeLists->GetPath().c_str(), resCMfile); + } + } + } + return false; + + +/* + std::map correspondence; + + correspondence["Crea"] = "${crea_LIBRARIES}"; + correspondence["WxWidgets"] = "${WXWIDGETS_LIBRARIES}"; + correspondence["KWWidgets"] = "${KWWidgets_LIBRARIES}"; + correspondence["VTK"] = "${VTK_LIBRARIES}"; + correspondence["ITK"] = "${ITK_LIBRARIES}"; + correspondence["GDCM"] = "${GDCM_LIBRARIES}"; + correspondence["Boost"] = "${BOOST_LIBRARIES}"; + if (correspondence.find(library_name) != correspondence.end()) { std::string library_command = correspondence[library_name]; @@ -701,6 +809,7 @@ bool modelCDMApplication::Set3rdPartyLibrary(const std::string& library_name, co } } return false; +*/ } std::map modelCDMApplication::GetCustomLibraries() diff --git a/lib/creaDevManagerLib/modelCDMLibrary.cpp b/lib/creaDevManagerLib/modelCDMLibrary.cpp index 8c68167..f50d792 100644 --- a/lib/creaDevManagerLib/modelCDMLibrary.cpp +++ b/lib/creaDevManagerLib/modelCDMLibrary.cpp @@ -597,11 +597,9 @@ bool modelCDMLibrary::Set3rdPartyLibrary(const std::string& library_name, const } } resCMfile += what.suffix().str(); - } - - //std::cout << resCMfile << std::endl; - return CDMUtilities::writeFile(this->CMakeLists->GetPath().c_str(), resCMfile); + return CDMUtilities::writeFile(this->CMakeLists->GetPath().c_str(), resCMfile); + } } } return false; diff --git a/lib/creaDevManagerLib/wxCDMApplicationDescriptionPanel.cpp b/lib/creaDevManagerLib/wxCDMApplicationDescriptionPanel.cpp index dd48c2a..acf54c0 100644 --- a/lib/creaDevManagerLib/wxCDMApplicationDescriptionPanel.cpp +++ b/lib/creaDevManagerLib/wxCDMApplicationDescriptionPanel.cpp @@ -361,7 +361,10 @@ void wxCDMApplicationDescriptionPanel::OnBtnSetExeName(wxCommandEvent& event) void wxCDMApplicationDescriptionPanel::On3rdLibraryChBChange(wxCommandEvent& event) { - this->application->Set3rdPartyLibrary(crea::wx2std(((wxCheckBox*)event.GetEventObject())->GetName()), ((wxCheckBox*)event.GetEventObject())->GetValue()); + if(this->application->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 wxCDMApplicationDescriptionPanel::OnLibraryChBChange(wxCommandEvent& event) -- 2.45.0