Started on command line parsing, added string parse method for default generator

This commit is contained in:
Jorgen Bodde
2005-08-08 17:14:08 -04:00
parent 52f9353c45
commit 154529bd1c
6 changed files with 304 additions and 255 deletions
+99 -59
View File
@@ -17,6 +17,17 @@
=========================================================================*/
// 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"
@@ -29,7 +40,7 @@ cmCommandLineInfo::cmCommandLineInfo()
this->m_WhereSource = "";
this->m_WhereBuild = "";
this->m_AdvancedValues = false;
this->m_GeneratorChoiceString = "";
m_GeneratorChoiceString.Empty();
this->m_LastUnknownParameter = "";
this->m_ValidArguments = "";
this->m_ExitAfterLoad = false;
@@ -43,23 +54,18 @@ cmCommandLineInfo::~cmCommandLineInfo()
///////////////////////////////////////////////////////////////
void cmCommandLineInfo::ParseCommandLine(int argc, char* argv[])
{
int cc;
for ( cc = 1; cc < argc; cc ++ )
for ( int cc = 1; cc < argc; cc ++ )
{
if ( strlen(argv[cc]) < 1 )
{
continue;
}
bool valid = true;
std::string argument = argv[cc];
if ( argument.size() > 1 &&
this->m_ValidArguments.find(argument[1]) == std::string::npos )
{
valid = false;
}
this->ParseParam(argument, valid, (cc + 1 == argc));
if ( strlen(argv[cc]) < 1 )
continue;
std::string argument = argv[cc];
bool valid = ((argument.size() > 1) && (m_ValidArguments.find(argument[1]) == std::string::npos));
ParseParam(argument, valid, (cc + 1 == argc));
}
this->m_ExecutablePath = cmSystemTools::GetFilenamePath(argv[0]);
m_ExecutablePath = cmSystemTools::GetFilenamePath(argv[0]);
}
///////////////////////////////////////////////////////////////
@@ -88,49 +94,83 @@ int cmCommandLineInfo::GetBoolValue(const std::string& v) {
void cmCommandLineInfo::ParseParam(const std::string& parameter,
bool know_about, bool /*last*/)
{
if(!know_about)
{
this->m_LastUnknownParameter = parameter;
}
else
{
std::string sParam(parameter.c_str(), 1, parameter.npos);
// Single letter valued flag like /B=value or /B:value
std::string value;
if (sParam[1] == '=' || sParam[1] == ':')
{
value = std::string(parameter.c_str()+3);
}
// this is the last parameter we know, so we assign this to be
// path to source or path to existing build
if(!know_about)
m_LastUnknownParameter = parameter;
else
{
value = std::string(parameter.c_str()+2);
}
int res;
switch (sParam[0])
{
case 'A':
res = cmCommandLineInfo::GetBoolValue(value);
if (res == 1)
{
this->m_AdvancedValues = true;
}
else if (res == -1)
{
this->m_AdvancedValues = false;
}
break;
case 'B':
this->m_WhereBuild = value;
break;
case 'G':
this->m_GeneratorChoiceString = value;
break;
case 'Q':
this->m_ExitAfterLoad = true;
break;
case 'H':
this->m_WhereSource = value;
break;
}
{
std::string sParam(parameter.c_str(), 1, parameter.npos);
// Single letter valued flag like /B=value or /B:value
std::string value;
if (sParam[1] == '=' || sParam[1] == ':')
{
value = std::string(parameter.c_str()+3);
}
else
{
value = std::string(parameter.c_str()+2);
}
int res;
switch (sParam[0])
{
case 'A':
res = cmCommandLineInfo::GetBoolValue(value);
if (res == 1)
{
m_AdvancedValues = true;
}
else if (res == -1)
{
m_AdvancedValues = false;
}
break;
case 'B':
m_WhereBuild = value;
break;
case 'G':
m_GeneratorChoiceString = GetStringParam(value.c_str());
break;
case 'Q':
m_ExitAfterLoad = true;
break;
case 'H':
m_WhereSource = value;
break;
}
}
}
// 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 char *pString)
{
wxCHECK(pString, wxEmptyString);
wxString str(pString);
str = str.Strip(wxString::both);
// if we have only one (or no chars return the current string)
if(str.Len() < 2)
return str;
// if we have quotes
if(str.GetChar(0) == '\"' && str.Last() == '\"')
{
// when we only have 2 in size, return empty string
if(str.Len() == 2)
return wxEmptyString;
// now remove the outer and inner, and return
return str.Mid(1, str.Len()-1);
}
return str;
}