diff --git a/Source/MFCDialog/CMakeCommandLineInfo.cpp b/Source/MFCDialog/CMakeCommandLineInfo.cpp index aefb349e1..26c705b81 100644 --- a/Source/MFCDialog/CMakeCommandLineInfo.cpp +++ b/Source/MFCDialog/CMakeCommandLineInfo.cpp @@ -17,12 +17,34 @@ CMakeCommandLineInfo::CMakeCommandLineInfo() { m_WhereSource = _T(""); m_WhereBuild = _T(""); + m_AdvancedValues = FALSE; + m_GeneratorChoiceString = _T(""); } 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 @@ -35,14 +57,29 @@ void CMakeCommandLineInfo::ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast) if (sParam[1] == '=' || sParam[1] == ':') { CString value(sParam.Right(sParam.GetLength() - 2)); + int res; switch (sParam[0]) { - case 'H': - m_WhereSource = value; + case 'A': + res = CMakeCommandLineInfo::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 = value; + break; + case 'H': + m_WhereSource = value; + break; } } } diff --git a/Source/MFCDialog/CMakeCommandLineInfo.h b/Source/MFCDialog/CMakeCommandLineInfo.h index 997f25ce5..fd4d950a5 100644 --- a/Source/MFCDialog/CMakeCommandLineInfo.h +++ b/Source/MFCDialog/CMakeCommandLineInfo.h @@ -27,6 +27,8 @@ public: public: CString m_WhereSource; CString m_WhereBuild; + BOOL m_AdvancedValues; + CString m_GeneratorChoiceString; // Operations public: @@ -35,6 +37,8 @@ public: // Implementation public: virtual ~CMakeCommandLineInfo(); +protected: + static int GetBoolValue(const CString&); }; #endif // !defined(CMAKECOMMANDLINEINFO_H) diff --git a/Source/MFCDialog/CMakeSetupDialog.cpp b/Source/MFCDialog/CMakeSetupDialog.cpp index fab7aef7f..43484b42d 100644 --- a/Source/MFCDialog/CMakeSetupDialog.cpp +++ b/Source/MFCDialog/CMakeSetupDialog.cpp @@ -86,9 +86,9 @@ CMakeSetupDialog::CMakeSetupDialog(const CMakeCommandLineInfo& cmdInfo, //{{AFX_DATA_INIT(CMakeSetupDialog) m_WhereSource = cmdInfo.m_WhereSource; m_WhereBuild = cmdInfo.m_WhereBuild; - m_GeneratorChoiceString = _T(""); - m_AdvancedValues = FALSE; - //}}AFX_DATA_INIT + m_GeneratorChoiceString = cmdInfo.m_GeneratorChoiceString; + m_AdvancedValues = cmdInfo.m_AdvancedValues; + //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_BuildPathChanged = false; @@ -977,7 +977,8 @@ int CMakeSetupDialog::CreateShortcut() } // Set the arguments of the shortcut. - CString args = " /H=" + m_WhereSource + " /B=" + m_WhereBuild; + CString args = " /H=\"" + m_WhereSource + "\" /B=\"" + m_WhereBuild + "\" /G=\"" + m_GeneratorChoiceString + "\" /A=\"" + (m_AdvancedValues ? "TRUE" : "FALSE") + "\""; + hres = psl->SetArguments(args); if (! SUCCEEDED (hres))