/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file LICENSE.rst or https://cmake.org/licensing for details.  */
#pragma once

#include <string>

// This is a table mapping XML tag IDE names to command line options
struct cmIDEFlagTable
{
  std::string IDEName;     // name used in the IDE xml file
  std::string commandFlag; // command line flag
  std::string comment;     // comment
  std::string value;       // string value
  unsigned int special;    // flags for special handling requests
  enum
  {
    UserValue = (1 << 0),           // flag contains a user-specified value
    UserIgnored = (1 << 1),         // ignore any user value
    UserRequired = (1 << 2),        // match only when user value is non-empty
    Continue = (1 << 3),            // continue looking for matching entries
    SemicolonAppendable = (1 << 4), // a flag that if specified multiple times
                                    // should have its value appended to the
                                    // old value with semicolons (e.g.
                                    // /NODEFAULTLIB: =>
                                    // IgnoreDefaultLibraryNames)
    UserFollowing = (1 << 5),       // expect value in following argument
    CaseInsensitive = (1 << 6),     // flag may be any case
    SpaceAppendable = (1 << 7),     // a flag that if specified multiple times
                                    // should have its value appended to the
                                    // old value with spaces
    CommaAppendable = (1 << 8),     // a flag that if specified multiple times
                                    // should have its value appended to the
                                    // old value with commas (e.g. C# /nowarn

    UserValueIgnored = UserValue | UserIgnored,
    UserValueRequired = UserValue | UserRequired
  };
};
