From 4ca9df8bd1991870a8a4acfeae26933e8ca7dc9a Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Fri, 8 Jan 2016 14:30:06 -0500
Subject: cmIDEOptions: Add support for case-insensitive flags

---
 Source/cmIDEFlagTable.h |  1 +
 Source/cmIDEOptions.cxx | 10 ++++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/Source/cmIDEFlagTable.h b/Source/cmIDEFlagTable.h
index d9a045d..adc7763 100644
--- a/Source/cmIDEFlagTable.h
+++ b/Source/cmIDEFlagTable.h
@@ -32,6 +32,7 @@ struct cmIDEFlagTable
                                   // /NODEFAULTLIB: =>
                                   // IgnoreDefaultLibraryNames)
     UserFollowing = (1<<5), // expect value in following argument
+    CaseInsensitive = (1<<6), // flag may be any case
 
     UserValueIgnored  = UserValue | UserIgnored,
     UserValueRequired = UserValue | UserRequired
diff --git a/Source/cmIDEOptions.cxx b/Source/cmIDEOptions.cxx
index 0eb903d..509602f 100644
--- a/Source/cmIDEOptions.cxx
+++ b/Source/cmIDEOptions.cxx
@@ -13,6 +13,8 @@
 
 #include "cmSystemTools.h"
 
+#include <cmsys/String.h>
+
 //----------------------------------------------------------------------------
 cmIDEOptions::cmIDEOptions()
 {
@@ -104,7 +106,9 @@ bool cmIDEOptions::CheckFlagTable(cmIDEFlagTable const* table,
       // the entry specifies UserRequired we must match only if a
       // non-empty value is given.
       int n = static_cast<int>(strlen(entry->commandFlag));
-      if(strncmp(flag+1, entry->commandFlag, n) == 0 &&
+      if((strncmp(flag+1, entry->commandFlag, n) == 0 ||
+          (entry->special & cmIDEFlagTable::CaseInsensitive &&
+           cmsysString_strncasecmp(flag+1, entry->commandFlag, n))) &&
          (!(entry->special & cmIDEFlagTable::UserRequired) ||
           static_cast<int>(strlen(flag+1)) > n))
         {
@@ -112,7 +116,9 @@ bool cmIDEOptions::CheckFlagTable(cmIDEFlagTable const* table,
         entry_found = true;
         }
       }
-    else if(strcmp(flag+1, entry->commandFlag) == 0)
+    else if(strcmp(flag+1, entry->commandFlag) == 0 ||
+            (entry->special & cmIDEFlagTable::CaseInsensitive &&
+             cmsysString_strcasecmp(flag+1, entry->commandFlag) == 0))
       {
       if(entry->special & cmIDEFlagTable::UserFollowing)
         {
-- 
cgit v0.12