138 lines
3.4 KiB
C++
138 lines
3.4 KiB
C++
/*=========================================================================
|
|
|
|
Program: CMake - Cross-Platform Makefile Generator
|
|
Module: $RCSfile$
|
|
Language: C++
|
|
Date: $Date$
|
|
Version: $Revision$
|
|
|
|
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.
|
|
|
|
=========================================================================*/
|
|
|
|
// cmCommandLineInfo.cpp : command line arguments
|
|
//
|
|
|
|
#include "cmWXCommandLineInfo.h"
|
|
|
|
#include "cmSystemTools.h"
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
// cmCommandLineInfo
|
|
|
|
cmCommandLineInfo::cmCommandLineInfo()
|
|
{
|
|
this->m_WhereSource = "";
|
|
this->m_WhereBuild = "";
|
|
this->m_AdvancedValues = false;
|
|
this->m_GeneratorChoiceString = "";
|
|
this->m_LastUnknownParameter = "";
|
|
this->m_ValidArguments = "";
|
|
this->m_ExitAfterLoad = false;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
cmCommandLineInfo::~cmCommandLineInfo()
|
|
{
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
void cmCommandLineInfo::ParseCommandLine(int argc, char* argv[])
|
|
{
|
|
int cc;
|
|
for ( 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));
|
|
}
|
|
this->m_ExecutablePath = cmSystemTools::GetFilenamePath(argv[0]);
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
int cmCommandLineInfo::GetBoolValue(const std::string& v) {
|
|
std::string value = cmSystemTools::LowerCase(v);
|
|
if (value == "1" ||
|
|
value == "on" ||
|
|
value == "true" ||
|
|
value == "yes")
|
|
{
|
|
return 1;
|
|
}
|
|
else if (value == "0" ||
|
|
value == "off" ||
|
|
value == "false" ||
|
|
value == "no")
|
|
{
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
// Parse param
|
|
|
|
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);
|
|
}
|
|
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;
|
|
}
|
|
}
|
|
}
|