You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
4.8 KiB
192 lines
4.8 KiB
16 years ago
|
/*=========================================================================
|
||
|
|
||
|
Program: WXDialog - wxWidgets X-platform GUI Front-End for CMake
|
||
|
Module: $RCSfile: CommandLineInfo.cpp,v $
|
||
|
Language: C++
|
||
|
Date: $Date: 2005-08-10 20:18:54 $
|
||
|
Version: $Revision: 1.4 $
|
||
|
|
||
|
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;
|
||
|
|
||
|
// parse all commands
|
||
|
int cc = 1;
|
||
|
if(argc < cc)
|
||
|
return true; // no command line options
|
||
|
|
||
|
while(cc < argc)
|
||
|
{
|
||
|
wxString arg = argv[cc];
|
||
|
|
||
|
// if we have a switch
|
||
|
if(arg.Len() > 1 && arg.GetChar(0) == '-')
|
||
|
{
|
||
|
int next_argc = ParseSwitch(argv, cc, argc);
|
||
|
if(next_argc > 0)
|
||
|
cc += next_argc;
|
||
|
else
|
||
|
return false; // sorry error while parsing
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// gather all what is left
|
||
|
for(int leftcc = cc; leftcc < argc; leftcc++)
|
||
|
{
|
||
|
if(cc != leftcc)
|
||
|
m_WhereBuild << _(" ");
|
||
|
m_WhereBuild << argv[leftcc];
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
m_ExecutablePath = cmSystemTools::GetFilenamePath(argv[0]).c_str();
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////////////
|
||
|
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
|
||
|
|
||
|
size_t cmCommandLineInfo::ParseSwitch(char **argv, int arg_index, int argc)
|
||
|
{
|
||
|
wxString param = argv[arg_index];
|
||
|
|
||
|
// we need this for a switch, at least 2
|
||
|
if(param.Len() > 1)
|
||
|
{
|
||
|
// determine switch type
|
||
|
switch (param.GetChar(1))
|
||
|
{
|
||
|
case 'G':
|
||
|
// when it's G<.....> we split else we take the
|
||
|
// other argc
|
||
|
if(param.Len() > 2)
|
||
|
{
|
||
|
m_GeneratorChoiceString = GetStringParam(param.Mid(2));
|
||
|
return 1; // one arg is passed
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if((arg_index+1) < argc)
|
||
|
{
|
||
|
m_GeneratorChoiceString = GetStringParam(wxString(argv[arg_index+1]));
|
||
|
return 2; // two args are passed
|
||
|
}
|
||
|
}
|
||
|
// no luck
|
||
|
return 0;
|
||
|
|
||
|
case 'Q':
|
||
|
m_ExitAfterLoad = true;
|
||
|
return 1;
|
||
|
|
||
|
// unknown param
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// error, unrecognised or too small arg
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// 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;
|
||
|
}
|