| // CMakeCommandLineInfo.cpp : command line arguments |
| // |
| |
| #include "stdafx.h" |
| #include "CMakeCommandLineInfo.h" |
| #include "cmSystemTools.h" |
| |
| #ifdef _DEBUG |
| #define new DEBUG_NEW |
| #undef THIS_FILE |
| static char THIS_FILE[] = __FILE__; |
| #endif |
| |
| /////////////////////////////////////////////////////////////// |
| // CMakeCommandLineInfo |
| |
| CMakeCommandLineInfo::CMakeCommandLineInfo() |
| { |
| this->m_WhereSource = _T(""); |
| this->m_WhereBuild = _T(""); |
| this->m_AdvancedValues = FALSE; |
| this->m_GeneratorChoiceString = _T(""); |
| this->m_LastUnknownParameter = _T(""); |
| |
| // Find the path to the CMakeSetup executable. |
| char fname[4096]; |
| ::GetModuleFileName(0, fname, 4096); |
| m_Argv0 = fname; |
| m_Argv.push_back(m_Argv0.c_str()); |
| } |
| |
| CMakeCommandLineInfo::~CMakeCommandLineInfo() |
| { |
| } |
| |
| int CMakeCommandLineInfo::GetBoolValue(const CString& v) { |
| CString value = v; |
| value.MakeLower(); |
| 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 CMakeCommandLineInfo::ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast) |
| { |
| // Construct the full name of the argument. |
| cmStdString param = lpszParam; |
| cmStdString value; |
| if(bFlag) |
| { |
| // Since bFlag is set, either a - or a / was removed from the |
| // parameter value. Assume it was a - unless the second character |
| // was a / which indicates a network path argument. |
| if(param.length() > 0 && param[0] == '/') |
| { |
| value = "/"; |
| } |
| else |
| { |
| value = "-"; |
| } |
| } |
| value += param; |
| |
| // Add the argument and reset the argv table in case strings were |
| // moved. |
| m_Arguments.push_back(value); |
| m_Argv.clear(); |
| m_Argv.push_back(m_Argv0.c_str()); |
| for(unsigned int i=0; i < m_Arguments.size(); ++i) |
| { |
| m_Argv.push_back(m_Arguments[i].c_str()); |
| } |
| |
| // Look for known flags. |
| if(!bFlag) |
| { |
| this->m_LastUnknownParameter = lpszParam; |
| } |
| else |
| { |
| CString sParam(lpszParam); |
| // Single letter valued flag like /B=value or /B:value |
| CString value; |
| if (sParam[1] == '=' || sParam[1] == ':') |
| { |
| value = sParam.Right(sParam.GetLength() - 2); |
| } |
| else |
| { |
| value = sParam.Right(sParam.GetLength()-1); |
| } |
| int res; |
| switch (sParam[0]) |
| { |
| case 'A': |
| res = CMakeCommandLineInfo::GetBoolValue(value); |
| if (res == 1) |
| { |
| this->m_AdvancedValues = TRUE; |
| } |
| else if (res == -1) |
| { |
| this->m_AdvancedValues = FALSE; |
| } |
| break; |
| case 'B': |
| { |
| std::string path = cmSystemTools::CollapseFullPath((const char*)value); |
| this->m_WhereBuild = path.c_str(); |
| break; |
| } |
| case 'G': |
| this->m_GeneratorChoiceString = value; |
| break; |
| case 'H': |
| { |
| std::string path = cmSystemTools::CollapseFullPath((const char*)value); |
| this->m_WhereSource = path.c_str(); |
| break; |
| } |
| } |
| } |
| |
| // Call the base class to ensure proper command line processing |
| CCommandLineInfo::ParseParam(lpszParam, bFlag, bLast); |
| } |