/*========================================================================= Program: WXDialog - wxWidgets X-platform GUI Front-End for CMake Module: $RCSfile$ Language: C++ Date: $Date$ Version: $Revision$ Author: Jorgen Bodde Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include "wx/wx.h" #endif #include "CommandLineInfo.h" #include "cmSystemTools.h" /////////////////////////////////////////////////////////////// // cmCommandLineInfo cmCommandLineInfo::cmCommandLineInfo() { m_WhereSource = ""; m_WhereBuild = ""; m_AdvancedValues = false; m_GeneratorChoiceString.Empty(); m_LastUnknownParameter = ""; m_ValidArguments = ""; m_ExitAfterLoad = false; } /////////////////////////////////////////////////////////////// cmCommandLineInfo::~cmCommandLineInfo() { } /////////////////////////////////////////////////////////////// bool cmCommandLineInfo::ParseCommandLine(int argc, char* argv[]) { bool result = true; wxString cachePath; for ( int cc = 1; cc < argc && result; cc ++ ) { // skip (empty ???) params if ( strlen(argv[cc]) < 1 ) continue; // judge argument and parse wxString argument(argv[cc]); if((argument.Len() > 1) && argument.GetChar(0) == '-') result = ParseArgument(argument.Mid(1)); else { // ok this is the last of the arguments, the rest of the string(s) // we concatenate to the cache path or something else if(cc > 1) cachePath << " "; cachePath << argument; } } m_ExecutablePath = cmSystemTools::GetFilenamePath(argv[0]).c_str(); return result; } /////////////////////////////////////////////////////////////// int cmCommandLineInfo::GetBoolValue(const wxString& v) { wxString value = v.Lower(); if (!value.Cmp("1") || !value.Cmp("on") || !value.Cmp("true") || !value.Cmp("yes")) { // true return 1; } else if (!value.Cmp("0") || !value.Cmp("off") || !value.Cmp("false") || !value.Cmp("no")) { // false return -1; } // not recognised return 0; } /////////////////////////////////////////////////////////////// // Parse param bool cmCommandLineInfo::ParseArgument(const wxString& sParam) { bool result = false; if(sParam.Len() > 1) { wxString value = sParam.Mid(1); switch (sParam[0]) { case 'G': m_GeneratorChoiceString = GetStringParam(value); result = true; break; case 'Q': m_ExitAfterLoad = true; result = true; break; // unknown param default: break; } } return result; } // When the string param given has string quotes around it // we remove them and we pass back the string. If not, we // simply pass back the string as-is wxString cmCommandLineInfo::GetStringParam(const wxString &str) { wxString mystr = str.Strip(wxString::both); // if we have only one (or no chars return the current string) if(mystr.Len() < 2) return str; // if we have quotes if(mystr.GetChar(0) == '\"' && mystr.Last() == '\"') { // when we only have 2 in size, return empty string if(mystr.Len() == 2) return wxEmptyString; // now remove the outer and inner, and return return mystr.Mid(1, mystr.Len()-1); } return str; }