ソースを参照

Add /A and /G command-line param to carry the value of "Show Advanced" and generator name in desktop shortcuts

Sebastien Barre 24 年 前
コミット
906f0a3339

+ 39 - 2
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;
         }
       }
     }

+ 4 - 0
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)

+ 5 - 4
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))