CMake/Source/WXDialog/CommandLineInfo.cpp

166 lines
4.1 KiB
C++

/*=========================================================================
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;
}