Merge topic 'fileapi'

b9c6f08276 Help: Add release note for fileapi feature
4b6b2a571c fileapi: extend codemodel v2 with directory details
eb8c7676a4 fileapi: extend codemodel v2 with a project model
42f0125ceb fileapi: Add test for cmakeFiles v1
6615408193 fileapi: add cmakeFiles v1
3f6ee75a66 fileapi: Add test for cache v2
7489e95b8e fileapi: add cache v2
ea0a060168 fileapi: Add test for codemodel v2
...

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2706
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2213850..75a0b52 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -137,10 +137,6 @@
   # Options have dependencies.
   include(CMakeDependentOption)
 
-  # Optionally use system xmlrpc.  We no longer build or use it by default.
-  option(CTEST_USE_XMLRPC "Enable xmlrpc submission method in CTest." OFF)
-  mark_as_advanced(CTEST_USE_XMLRPC)
-
   # Allow the user to enable/disable all system utility library options by
   # defining CMAKE_USE_SYSTEM_LIBRARIES or CMAKE_USE_SYSTEM_LIBRARY_${util}.
   set(UTILITIES BZIP2 CURL EXPAT FORM JSONCPP LIBARCHIVE LIBLZMA LIBRHASH LIBUV ZLIB)
@@ -171,10 +167,8 @@
 
   # Optionally use system utility libraries.
   option(CMAKE_USE_SYSTEM_LIBARCHIVE "Use system-installed libarchive" "${CMAKE_USE_SYSTEM_LIBRARY_LIBARCHIVE}")
-  CMAKE_DEPENDENT_OPTION(CMAKE_USE_SYSTEM_CURL "Use system-installed curl"
-    "${CMAKE_USE_SYSTEM_LIBRARY_CURL}" "NOT CTEST_USE_XMLRPC" ON)
-  CMAKE_DEPENDENT_OPTION(CMAKE_USE_SYSTEM_EXPAT "Use system-installed expat"
-    "${CMAKE_USE_SYSTEM_LIBRARY_EXPAT}" "NOT CTEST_USE_XMLRPC" ON)
+  option(CMAKE_USE_SYSTEM_CURL "Use system-installed curl" "${CMAKE_USE_SYSTEM_LIBRARY_CURL}")
+  option(CMAKE_USE_SYSTEM_EXPAT "Use system-installed expat" "${CMAKE_USE_SYSTEM_LIBRARY_EXPAT}")
   CMAKE_DEPENDENT_OPTION(CMAKE_USE_SYSTEM_ZLIB "Use system-installed zlib"
     "${CMAKE_USE_SYSTEM_LIBRARY_ZLIB}" "NOT CMAKE_USE_SYSTEM_LIBARCHIVE;NOT CMAKE_USE_SYSTEM_CURL" ON)
   CMAKE_DEPENDENT_OPTION(CMAKE_USE_SYSTEM_BZIP2 "Use system-installed bzip2"
@@ -212,7 +206,7 @@
 macro(CMAKE_SETUP_TESTING)
   if(BUILD_TESTING)
     set(CMAKE_TEST_SYSTEM_LIBRARIES 0)
-    foreach(util CURL EXPAT XMLRPC ZLIB)
+    foreach(util CURL EXPAT ZLIB)
       if(CMAKE_USE_SYSTEM_${util})
         set(CMAKE_TEST_SYSTEM_LIBRARIES 1)
       endif()
@@ -572,18 +566,6 @@
   endif()
 
   #---------------------------------------------------------------------
-  # Build XMLRPC library for CMake and CTest.
-  if(CTEST_USE_XMLRPC)
-    find_package(XMLRPC QUIET REQUIRED libwww-client)
-    if(NOT XMLRPC_FOUND)
-      message(FATAL_ERROR
-        "CTEST_USE_XMLRPC is ON but xmlrpc is not found!")
-    endif()
-    set(CMAKE_XMLRPC_INCLUDES ${XMLRPC_INCLUDE_DIRS})
-    set(CMAKE_XMLRPC_LIBRARIES ${XMLRPC_LIBRARIES})
-  endif()
-
-  #---------------------------------------------------------------------
   # Use curses?
   if (UNIX)
     if(NOT DEFINED BUILD_CursesDialog)
@@ -736,7 +718,7 @@
   # the build tree, which is both the build and the install RPATH.
   if (UNIX)
     if(   CMAKE_USE_SYSTEM_CURL   OR  CMAKE_USE_SYSTEM_ZLIB
-          OR  CMAKE_USE_SYSTEM_EXPAT  OR  CTEST_USE_XMLRPC  OR  CURSES_NEED_RPATH  OR  QT_NEED_RPATH)
+          OR  CMAKE_USE_SYSTEM_EXPAT  OR  CURSES_NEED_RPATH  OR  QT_NEED_RPATH)
       set(CMAKE_SKIP_RPATH OFF CACHE INTERNAL "CMake built with RPATH.")
       set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
       set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
diff --git a/Copyright.txt b/Copyright.txt
index c7a81b1..dc6deb9 100644
--- a/Copyright.txt
+++ b/Copyright.txt
@@ -63,6 +63,7 @@
 * Ilya Lavrenov <ilya.lavrenov@itseez.com>
 * Insight Software Consortium <insightsoftwareconsortium.org>
 * Jan Woetzel
+* Julien Schueller
 * Kelly Thompson <kgt@lanl.gov>
 * Laurent Montel <montel@kde.org>
 * Konstantin Podsvirov <konstantin@podsvirov.pro>
@@ -72,6 +73,7 @@
 * Matthaeus G. Chajdas
 * Matthias Kretz <kretz@kde.org>
 * Matthias Maennich <matthias@maennich.net>
+* Michael Hirsch, Ph.D. <www.scivision.co>
 * Michael Stürmer
 * Miguel A. Figueroa-Villanueva
 * Mike Jackson
diff --git a/Help/command/file.rst b/Help/command/file.rst
index 26a9ae2..6e2a6dd 100644
--- a/Help/command/file.rst
+++ b/Help/command/file.rst
@@ -26,6 +26,7 @@
     file(`MAKE_DIRECTORY`_ [<dir>...])
     file({`COPY`_ | `INSTALL`_} <file>... DESTINATION <dir> [...])
     file(`SIZE`_ <filename> <out-var>)
+    file(`READ_SYMLINK`_ <filename> <out-var>)
 
   `Path Conversion`_
     file(`RELATIVE_PATH`_ <out-var> <directory> <file>)
@@ -344,6 +345,29 @@
 ``<variable>`` variable. Requires that ``<filename>`` is a valid path
 pointing to a file and is readable.
 
+.. _READ_SYMLINK:
+
+.. code-block:: cmake
+
+  file(READ_SYMLINK <filename> <variable>)
+
+Read the symlink at ``<filename>`` and put the result in ``<variable>``.
+Requires that ``<filename>`` is a valid path pointing to a symlink. If
+``<filename>`` does not exist, or is not a symlink, an error is thrown.
+
+Note that this command returns the raw symlink path and does not resolve
+relative symlinks. If you want to resolve the relative symlink yourself, you
+could do something like this:
+
+.. code-block:: cmake
+
+  set(filename "/path/to/foo.sym")
+  file(READ_SYMLINK "${filename}" result)
+  if(NOT IS_ABSOLUTE "${result}")
+    get_filename_component(dir "${filename}" DIRECTORY)
+    set(result "${dir}/${result}")
+  endif()
+
 Path Conversion
 ^^^^^^^^^^^^^^^
 
diff --git a/Help/command/macro.rst b/Help/command/macro.rst
index 464940f..05e5d79 100644
--- a/Help/command/macro.rst
+++ b/Help/command/macro.rst
@@ -83,7 +83,7 @@
 the :ref:`Argument Caveats` section below.
 
 Another difference between macros and functions is the control flow.
-A function is executed by transfering control from the calling
+A function is executed by transferring control from the calling
 statement to the function body.  A macro is executed as if the macro
 body were pasted in place of the calling statement.  This has the
 consequence that a :command:`return()` in a macro body does not
diff --git a/Help/command/try_compile.rst b/Help/command/try_compile.rst
index 310ad11..f50fcb6 100644
--- a/Help/command/try_compile.rst
+++ b/Help/command/try_compile.rst
@@ -33,6 +33,7 @@
   try_compile(RESULT_VAR <bindir> <srcfile|SOURCES srcfile...>
               [CMAKE_FLAGS <flags>...]
               [COMPILE_DEFINITIONS <defs>...]
+              [LINK_OPTIONS <options>...]
               [LINK_LIBRARIES <libs>...]
               [OUTPUT_VARIABLE <var>]
               [COPY_FILE <fileName> [COPY_FILE_ERROR <var>]]
@@ -55,6 +56,7 @@
   include_directories(${INCLUDE_DIRECTORIES})
   link_directories(${LINK_DIRECTORIES})
   add_executable(cmTryCompileExec <srcfile>...)
+  target_link_options(cmTryCompileExec PRIVATE <LINK_OPTIONS from caller>)
   target_link_libraries(cmTryCompileExec ${LINK_LIBRARIES})
 
 The options are:
@@ -67,7 +69,7 @@
   are used.
 
 ``COMPILE_DEFINITIONS <defs>...``
-  Specify ``-Ddefinition`` arguments to pass to ``add_definitions``
+  Specify ``-Ddefinition`` arguments to pass to :command:`add_definitions`
   in the generated test project.
 
 ``COPY_FILE <fileName>``
@@ -85,6 +87,11 @@
   If this option is specified, any ``-DLINK_LIBRARIES=...`` value
   given to the ``CMAKE_FLAGS`` option will be ignored.
 
+``LINK_OPTIONS <options>...``
+  Specify link step options to pass to :command:`target_link_options` or
+  to :prop_tgt:`STATIC_LIBRARY_OPTIONS` target property in the generated
+  project, depending of the :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable.
+
 ``OUTPUT_VARIABLE <var>``
   Store the output from the build process the given variable.
 
diff --git a/Help/command/try_run.rst b/Help/command/try_run.rst
index dfa0bf9..137402f 100644
--- a/Help/command/try_run.rst
+++ b/Help/command/try_run.rst
@@ -15,6 +15,7 @@
   try_run(RUN_RESULT_VAR COMPILE_RESULT_VAR
           bindir srcfile [CMAKE_FLAGS <flags>...]
           [COMPILE_DEFINITIONS <defs>...]
+          [LINK_OPTIONS <options>...]
           [LINK_LIBRARIES <libs>...]
           [COMPILE_OUTPUT_VARIABLE <var>]
           [RUN_OUTPUT_VARIABLE <var>]
@@ -38,7 +39,7 @@
   are used.
 
 ``COMPILE_DEFINITIONS <defs>...``
-  Specify ``-Ddefinition`` arguments to pass to ``add_definitions``
+  Specify ``-Ddefinition`` arguments to pass to :command:`add_definitions`
   in the generated test project.
 
 ``COMPILE_OUTPUT_VARIABLE <var>``
@@ -52,6 +53,10 @@
   If this option is specified, any ``-DLINK_LIBRARIES=...`` value
   given to the ``CMAKE_FLAGS`` option will be ignored.
 
+``LINK_OPTIONS <options>...``
+  Specify link step options to pass to :command:`target_link_options` in the
+  generated project.
+
 ``OUTPUT_VARIABLE <var>``
   Report the compile build output and the output from running the executable
   in the given variable.  This option exists for legacy reasons.  Prefer
diff --git a/Help/cpack_gen/deb.rst b/Help/cpack_gen/deb.rst
index fdde654..23f0515 100644
--- a/Help/cpack_gen/deb.rst
+++ b/Help/cpack_gen/deb.rst
@@ -15,9 +15,9 @@
 the build system.
 
 The CPack DEB generator has specific features which are controlled by the
-specifics :code:`CPACK_DEBIAN_XXX` variables.
+specifics ``CPACK_DEBIAN_XXX`` variables.
 
-:code:`CPACK_DEBIAN_<COMPONENT>_XXXX` variables may be used in order to have
+``CPACK_DEBIAN_<COMPONENT>_XXXX`` variables may be used in order to have
 **component** specific values.  Note however that ``<COMPONENT>`` refers to
 the **grouping name** written in upper case. It may be either a component name
 or a component GROUP name.
@@ -133,8 +133,8 @@
  The Debian package architecture
 
  * Mandatory : YES
- * Default   : Output of :code:`dpkg --print-architecture` (or :code:`i386`
-   if :code:`dpkg` is not found)
+ * Default   : Output of ``dpkg --print-architecture`` (or ``i386``
+   if ``dpkg`` is not found)
 
 .. variable:: CPACK_DEBIAN_PACKAGE_DEPENDS
               CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS
@@ -176,7 +176,7 @@
  The Debian package maintainer
 
  * Mandatory : YES
- * Default   : :code:`CPACK_PACKAGE_CONTACT`
+ * Default   : ``CPACK_PACKAGE_CONTACT``
 
 .. variable:: CPACK_DEBIAN_PACKAGE_DESCRIPTION
               CPACK_COMPONENT_<COMPONENT>_DESCRIPTION
@@ -205,18 +205,18 @@
  The archive format used for creating the Debian package.
 
  * Mandatory : YES
- * Default   : "paxr"
+ * Default   : "gnutar"
 
- Possible values are:
+ Possible value is:
 
- - paxr
  - gnutar
 
  .. note::
 
-   Default pax archive format is the most portable format and generates
-   packages that do not treat sparse files specially.
-   GNU tar format on the other hand supports longer filenames.
+   This variable previously defaulted to the ``paxr`` value, but ``dpkg``
+   has never supported that tar format. For backwards compatibility the
+   ``paxr`` value will be mapped to ``gnutar`` and a deprecation message
+   will be emitted.
 
 .. variable:: CPACK_DEBIAN_COMPRESSION_TYPE
 
@@ -260,7 +260,7 @@
 .. variable:: CPACK_DEBIAN_PACKAGE_SHLIBDEPS
               CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS
 
- May be set to ON in order to use :code:`dpkg-shlibdeps` to generate
+ May be set to ON in order to use ``dpkg-shlibdeps`` to generate
  better package dependency list.
 
  * Mandatory : NO
@@ -272,7 +272,7 @@
  .. note::
 
    You may need set :variable:`CMAKE_INSTALL_RPATH` to an appropriate value
-   if you use this feature, because if you don't :code:`dpkg-shlibdeps`
+   if you use this feature, because if you don't ``dpkg-shlibdeps``
    may fail to find your own shared libs.
    See https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/RPATH-handling
 
@@ -289,7 +289,7 @@
 
  Sets the `Pre-Depends` field of the Debian package.
  Like :variable:`Depends <CPACK_DEBIAN_PACKAGE_DEPENDS>`, except that it
- also forces :code:`dpkg` to complete installation of the packages named
+ also forces ``dpkg`` to complete installation of the packages named
  before even starting the installation of the package which declares the
  pre-dependency.
 
@@ -324,7 +324,7 @@
 
  Sets the `Breaks` field of the Debian package.
  When a binary package (P) declares that it breaks other packages (B),
- :code:`dpkg` will not allow the package (P) which declares `Breaks` be
+ ``dpkg`` will not allow the package (P) which declares `Breaks` be
  **unpacked** unless the packages that will be broken (B) are deconfigured
  first.
  As long as the package (P) is configured, the previously deconfigured
@@ -344,7 +344,7 @@
 
  Sets the `Conflicts` field of the Debian package.
  When one binary package declares a conflict with another using a `Conflicts`
- field, :code:`dpkg` will not allow them to be unpacked on the system at
+ field, ``dpkg`` will not allow them to be unpacked on the system at
  the same time.
 
  * Mandatory : NO
diff --git a/Help/cpack_gen/freebsd.rst b/Help/cpack_gen/freebsd.rst
index b22ea9a..a8dd320 100644
--- a/Help/cpack_gen/freebsd.rst
+++ b/Help/cpack_gen/freebsd.rst
@@ -20,7 +20,7 @@
 packages it produces are specific to the host architecture and ABI.
 
 The CPack FreeBSD generator sets package-metadata through
-:code:`CPACK_FREEBSD_XXX` variables. The CPack FreeBSD generator, unlike the
+``CPACK_FREEBSD_XXX`` variables. The CPack FreeBSD generator, unlike the
 CPack Deb generator, does not specially support componentized packages; a
 single package is created from all the software artifacts created through
 CMake.
diff --git a/Help/cpack_gen/nuget.rst b/Help/cpack_gen/nuget.rst
index c8c481f..f8aa626 100644
--- a/Help/cpack_gen/nuget.rst
+++ b/Help/cpack_gen/nuget.rst
@@ -18,7 +18,7 @@
 it uses the ``CPACK_XXX`` variables used by :module:`CPack`.
 
 The CPack NuGet generator has specific features which are controlled by the
-specifics :code:`CPACK_NUGET_XXX` variables. In the "one per group" mode
+specifics ``CPACK_NUGET_XXX`` variables. In the "one per group" mode
 (see :variable:`CPACK_COMPONENTS_GROUPING`), ``<compName>`` placeholder
 in the variables below would contain a group name (uppercased and turned into
 a "C" identifier).
diff --git a/Help/cpack_gen/rpm.rst b/Help/cpack_gen/rpm.rst
index 5c543ff..65009db 100644
--- a/Help/cpack_gen/rpm.rst
+++ b/Help/cpack_gen/rpm.rst
@@ -11,9 +11,9 @@
 ``CPACK_XXX`` variables used by :module:`CPack`.
 
 The CPack RPM generator has specific features which are controlled by the specifics
-:code:`CPACK_RPM_XXX` variables.
+``CPACK_RPM_XXX`` variables.
 
-:code:`CPACK_RPM_<COMPONENT>_XXXX` variables may be used in order to have
+``CPACK_RPM_<COMPONENT>_XXXX`` variables may be used in order to have
 **component** specific values.  Note however that ``<COMPONENT>`` refers to the
 **grouping name** written in upper case. It may be either a component name or
 a component GROUP name. Usually those variables correspond to RPM spec file
diff --git a/Help/manual/cmake-modules.7.rst b/Help/manual/cmake-modules.7.rst
index cd5d1a5..2f08a04 100644
--- a/Help/manual/cmake-modules.7.rst
+++ b/Help/manual/cmake-modules.7.rst
@@ -176,6 +176,7 @@
    /module/FindMPEG2
    /module/FindMPEG
    /module/FindMPI
+   /module/FindOctave
    /module/FindODBC
    /module/FindOpenACC
    /module/FindOpenAL
diff --git a/Help/manual/cmake-policies.7.rst b/Help/manual/cmake-policies.7.rst
index 044a06e..ed61ae0 100644
--- a/Help/manual/cmake-policies.7.rst
+++ b/Help/manual/cmake-policies.7.rst
@@ -57,6 +57,7 @@
 .. toctree::
    :maxdepth: 1
 
+   CMP0086: UseSWIG honors SWIG_MODULE_NAME via -module flag. </policy/CMP0086>
    CMP0085: IN_LIST generator expression handles empty list items. </policy/CMP0085>
    CMP0084: The FindQt module does not exist for find_package(). </policy/CMP0084>
    CMP0083: Add PIE options when linking executable. </policy/CMP0083>
diff --git a/Help/manual/ctest.1.rst b/Help/manual/ctest.1.rst
index 9e0ce27..1ef20ab 100644
--- a/Help/manual/ctest.1.rst
+++ b/Help/manual/ctest.1.rst
@@ -313,10 +313,11 @@
  Do not use.
 
 ``--timeout <seconds>``
- Set a global timeout on all tests.
+ Set the default test timeout.
 
- This option will set a global timeout on all tests that do not
- already have a timeout set on them.
+ This option effectively sets a timeout on all tests that do not
+ already have a timeout set on them via the :prop_test:`TIMEOUT`
+ property.
 
 ``--stop-time <time>``
  Set a time at which all tests should stop running.
@@ -1069,7 +1070,7 @@
   * :module:`CTest` module variable: ``BUILDNAME``
 
 ``CDashVersion``
-  Specify the version of `CDash`_ on the server.
+  Legacy option.  Not used.
 
   * `CTest Script`_ variable: none, detected from server
   * :module:`CTest` module variable: ``CTEST_CDASH_VERSION``
@@ -1106,17 +1107,14 @@
 
 ``DropMethod``
   Specify the method by which results should be submitted to the
-  dashboard server.  The value may be ``cp``, ``ftp``, ``http``,
-  ``https``, ``scp``, or ``xmlrpc`` (if CMake was built with
-  support for it).
+  dashboard server.  The value may be ``http`` or ``https``.
 
   * `CTest Script`_ variable: :variable:`CTEST_DROP_METHOD`
   * :module:`CTest` module variable: ``DROP_METHOD`` if set,
     else ``CTEST_DROP_METHOD``
 
 ``DropSite``
-  The dashboard server name
-  (for ``ftp``, ``http``, and ``https``, ``scp``, and ``xmlrpc``).
+  The dashboard server name.
 
   * `CTest Script`_ variable: :variable:`CTEST_DROP_SITE`
   * :module:`CTest` module variable: ``DROP_SITE`` if set,
@@ -1139,14 +1137,13 @@
     else ``CTEST_DROP_SITE_USER``
 
 ``IsCDash``
-  Specify whether the dashboard server is `CDash`_ or an older
-  dashboard server implementation requiring ``TriggerSite``.
+  Legacy option.  Not used.
 
   * `CTest Script`_ variable: :variable:`CTEST_DROP_SITE_CDASH`
   * :module:`CTest` module variable: ``CTEST_DROP_SITE_CDASH``
 
 ``ScpCommand``
-  ``scp`` command-line tool to use when ``DropMethod`` is ``scp``.
+  Legacy option.  Not used.
 
   * `CTest Script`_ variable: :variable:`CTEST_SCP_COMMAND`
   * :module:`CTest` module variable: ``SCPCOMMAND``
@@ -1160,8 +1157,7 @@
     initialized by the :command:`site_name` command
 
 ``TriggerSite``
-  Legacy option to support older dashboard server implementations.
-  Not used when ``IsCDash`` is true.
+  Legacy option.  Not used.
 
   * `CTest Script`_ variable: :variable:`CTEST_TRIGGER_SITE`
   * :module:`CTest` module variable: ``TRIGGER_SITE`` if set,
diff --git a/Help/module/FindOctave.rst b/Help/module/FindOctave.rst
new file mode 100644
index 0000000..2dbcec4
--- /dev/null
+++ b/Help/module/FindOctave.rst
@@ -0,0 +1 @@
+.. cmake-module:: ../../Modules/FindOctave.cmake
diff --git a/Help/policy/CMP0078.rst b/Help/policy/CMP0078.rst
index 54cdc9c..2e97934 100644
--- a/Help/policy/CMP0078.rst
+++ b/Help/policy/CMP0078.rst
@@ -1,6 +1,8 @@
 CMP0078
 -------
 
+:module:`UseSWIG` generates standard target names.
+
 Starting with CMake 3.13, :module:`UseSWIG` generates now standard target
 names. This policy provides compatibility with projects that expect the legacy
 behavior.
diff --git a/Help/policy/CMP0086.rst b/Help/policy/CMP0086.rst
new file mode 100644
index 0000000..4a9e8b8
--- /dev/null
+++ b/Help/policy/CMP0086.rst
@@ -0,0 +1,20 @@
+CMP0086
+-------
+
+:module:`UseSWIG` honors ``SWIG_MODULE_NAME`` via ``-module`` flag.
+
+Starting with CMake 3.14, :module:`UseSWIG` passes option
+``-module <module_name>`` to ``SWIG`` compiler if the file property
+``SWIG_MODULE_NAME`` is specified. This policy provides compatibility with
+projects that expect the legacy behavior.
+
+The ``OLD`` behavior for this policy is to never pass ``-module`` option.
+The ``NEW`` behavior is to pass ``-module`` option to ``SWIG`` compiler if
+``SWIG_MODULE_NAME`` is specified.
+
+This policy was introduced in CMake version 3.14.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/Help/release/3.13.rst b/Help/release/3.13.rst
index 9f7e61f..68e05c3 100644
--- a/Help/release/3.13.rst
+++ b/Help/release/3.13.rst
@@ -239,3 +239,16 @@
   These internal implementation modules are also no longer available
   to scripts that may have been incorrectly including them, because
   they should never have been available in the first place.
+
+Updates
+=======
+
+Changes made since CMake 3.13.0 include the following.
+
+3.13.2
+------
+
+* CMake 3.13.0 included a change to pass compiler implicit include
+  directories to the ``moc`` tool for :prop_tgt:`AUTOMOC`.  This has
+  been reverted due to regressing existing builds and will need
+  further investigation before being re-introduced in a later release.
diff --git a/Help/release/dev/FindCURL-components.rst b/Help/release/dev/FindCURL-components.rst
new file mode 100644
index 0000000..9c50ede
--- /dev/null
+++ b/Help/release/dev/FindCURL-components.rst
@@ -0,0 +1,5 @@
+FindCURL-components
+-------------------
+
+* The :module:`FindCURL` module gained support for requesting
+  protocols as package components.
diff --git a/Help/release/dev/FindOctave.rst b/Help/release/dev/FindOctave.rst
new file mode 100644
index 0000000..fe3b242
--- /dev/null
+++ b/Help/release/dev/FindOctave.rst
@@ -0,0 +1,4 @@
+FindOctave
+----------
+
+* A :module:`FindOctave` module was added to find GNU octave.
diff --git a/Help/release/dev/UseSWIG-CMP0086.rst b/Help/release/dev/UseSWIG-CMP0086.rst
new file mode 100644
index 0000000..d6fd0d1
--- /dev/null
+++ b/Help/release/dev/UseSWIG-CMP0086.rst
@@ -0,0 +1,6 @@
+UseSWIG-CMP0086
+---------------
+
+* The :module:`UseSWIG` module passes option ``-module <module_name>`` to
+  ``SWIG`` compiler if the file property ``SWIG_MODULE_NAME`` is defined.
+  See policy :policy:`CMP0086`.
diff --git a/Help/release/dev/check-functions-LINK_OPTIONS.rst b/Help/release/dev/check-functions-LINK_OPTIONS.rst
new file mode 100644
index 0000000..a6bfed2
--- /dev/null
+++ b/Help/release/dev/check-functions-LINK_OPTIONS.rst
@@ -0,0 +1,5 @@
+check-functions-LINK_OPTIONS
+----------------------------
+
+* The family of modules to check capabilities (like
+  :module:`CheckCSourceCompiles`) gain capability to manage ``LINK_OPTIONS``.
diff --git a/Help/release/dev/cpack-deb-tar-format.rst b/Help/release/dev/cpack-deb-tar-format.rst
new file mode 100644
index 0000000..9296ec6
--- /dev/null
+++ b/Help/release/dev/cpack-deb-tar-format.rst
@@ -0,0 +1,7 @@
+cpack-deb-tar-format
+--------------------
+
+* The :module:`CPack` module no longer defaults to the ``paxr`` value in the
+  :variable:`CPACK_DEBIAN_ARCHIVE_TYPE` variable, because ``dpkg`` has
+  never supported the PAX tar format. The ``paxr`` value will be mapped
+  to ``gnutar`` and a deprecation message emitted.
diff --git a/Help/release/dev/file-read_symlink.rst b/Help/release/dev/file-read_symlink.rst
new file mode 100644
index 0000000..718802e
--- /dev/null
+++ b/Help/release/dev/file-read_symlink.rst
@@ -0,0 +1,5 @@
+file-read_symlink
+-----------------
+
+* The :command:`file` command learned a new sub-command, ``READ_SYMLINK``,
+  which can be used to determine the path that a symlink points to.
diff --git a/Help/release/dev/object-library-link.rst b/Help/release/dev/object-library-link.rst
new file mode 100644
index 0000000..990d915
--- /dev/null
+++ b/Help/release/dev/object-library-link.rst
@@ -0,0 +1,5 @@
+object-library-link
+-------------------
+
+* Object library linking has been fixed to propagate transitive link
+  dependencies of object libraries to consuming targets.
diff --git a/Help/release/dev/submit-method.rst b/Help/release/dev/submit-method.rst
new file mode 100644
index 0000000..38f0b92
--- /dev/null
+++ b/Help/release/dev/submit-method.rst
@@ -0,0 +1,6 @@
+submit-method
+-------------
+
+* CTest no longer supports submissions via ``ftp``, ``scp``, ``cp``, and
+  ``xmlrpc``.  CDash is the only maintained testing dashboard for CTest,
+  and it only supports submissions over ``http`` and ``https``.
diff --git a/Help/release/dev/try_compile-LINK_OPTIONS.rst b/Help/release/dev/try_compile-LINK_OPTIONS.rst
new file mode 100644
index 0000000..1db485b
--- /dev/null
+++ b/Help/release/dev/try_compile-LINK_OPTIONS.rst
@@ -0,0 +1,5 @@
+try_compile-LINK_OPTIONS
+------------------------
+
+* The commands :command:`try_compile` and :command:`try_run` gain new
+  option ``LINK_OPTIONS``.
diff --git a/Help/variable/CTEST_SCP_COMMAND.rst b/Help/variable/CTEST_SCP_COMMAND.rst
index 0f128b1..19ea8b3 100644
--- a/Help/variable/CTEST_SCP_COMMAND.rst
+++ b/Help/variable/CTEST_SCP_COMMAND.rst
@@ -1,5 +1,4 @@
 CTEST_SCP_COMMAND
 -----------------
 
-Specify the CTest ``SCPCommand`` setting
-in a :manual:`ctest(1)` dashboard client script.
+Legacy option.  Not used.
diff --git a/Help/variable/CTEST_TRIGGER_SITE.rst b/Help/variable/CTEST_TRIGGER_SITE.rst
index de92428..a50e405 100644
--- a/Help/variable/CTEST_TRIGGER_SITE.rst
+++ b/Help/variable/CTEST_TRIGGER_SITE.rst
@@ -1,5 +1,4 @@
 CTEST_TRIGGER_SITE
 ------------------
 
-Specify the CTest ``TriggerSite`` setting
-in a :manual:`ctest(1)` dashboard client script.
+Legacy option.  Not used.
diff --git a/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in b/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in
index bc78016..afffc04 100644
--- a/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in
+++ b/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in
@@ -18,6 +18,12 @@
   endif()
 endif()
 
+
+# if the installed project requested no architecture check, don't perform the check
+if("@CVF_ARCH_INDEPENDENT@")
+  return()
+endif()
+
 # if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
 if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
    return()
diff --git a/Modules/BasicConfigVersion-ExactVersion.cmake.in b/Modules/BasicConfigVersion-ExactVersion.cmake.in
index de4a23a..fe5c2e5 100644
--- a/Modules/BasicConfigVersion-ExactVersion.cmake.in
+++ b/Modules/BasicConfigVersion-ExactVersion.cmake.in
@@ -34,6 +34,11 @@
 endif()
 
 
+# if the installed project requested no architecture check, don't perform the check
+if("@CVF_ARCH_INDEPENDENT@")
+  return()
+endif()
+
 # if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
 if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
    return()
diff --git a/Modules/BasicConfigVersion-SameMajorVersion.cmake.in b/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
index a32245d..d885c0f 100644
--- a/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
+++ b/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
@@ -33,6 +33,11 @@
 endif()
 
 
+# if the installed project requested no architecture check, don't perform the check
+if("@CVF_ARCH_INDEPENDENT@")
+  return()
+endif()
+
 # if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
 if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
    return()
diff --git a/Modules/BasicConfigVersion-SameMinorVersion.cmake.in b/Modules/BasicConfigVersion-SameMinorVersion.cmake.in
index 59ca253..bf055e8 100644
--- a/Modules/BasicConfigVersion-SameMinorVersion.cmake.in
+++ b/Modules/BasicConfigVersion-SameMinorVersion.cmake.in
@@ -37,6 +37,11 @@
 endif()
 
 
+# if the installed project requested no architecture check, don't perform the check
+if("@CVF_ARCH_INDEPENDENT@")
+  return()
+endif()
+
 # if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
 if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
    return()
diff --git a/Modules/CMakeBackwardCompatibilityC.cmake b/Modules/CMakeBackwardCompatibilityC.cmake
index 5d86d73..775a513 100644
--- a/Modules/CMakeBackwardCompatibilityC.cmake
+++ b/Modules/CMakeBackwardCompatibilityC.cmake
@@ -59,9 +59,6 @@
   set (CMAKE_HP_PTHREADS        ${CMAKE_HP_PTHREADS_INIT} CACHE BOOL
      "Use HP pthreads.")
 
-  set (CMAKE_USE_SPROC          ${CMAKE_USE_SPROC_INIT} CACHE BOOL
-     "Use sproc libs.")
-
   if(__ERASE_CMAKE_TRY_COMPILE_OSX_ARCHITECTURES)
     set(CMAKE_TRY_COMPILE_OSX_ARCHITECTURES)
     set(__ERASE_CMAKE_TRY_COMPILE_OSX_ARCHITECTURES)
@@ -72,7 +69,6 @@
 CMAKE_HP_PTHREADS
 CMAKE_THREAD_LIBS
 CMAKE_USE_PTHREADS
-CMAKE_USE_SPROC
 CMAKE_USE_WIN32_THREADS
 CMAKE_X_CFLAGS
 CMAKE_X_LIBS
diff --git a/Modules/CMakeDetermineCCompiler.cmake b/Modules/CMakeDetermineCCompiler.cmake
index 17706ea..1a0d8a6 100644
--- a/Modules/CMakeDetermineCCompiler.cmake
+++ b/Modules/CMakeDetermineCCompiler.cmake
@@ -136,7 +136,7 @@
 # "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
 if (CMAKE_CROSSCOMPILING  AND NOT _CMAKE_TOOLCHAIN_PREFIX)
 
-  if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
+  if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang|QCC")
     get_filename_component(COMPILER_BASENAME "${CMAKE_C_COMPILER}" NAME)
     if (COMPILER_BASENAME MATCHES "^(.+-)(clang|g?cc)(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$")
       set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
@@ -145,7 +145,7 @@
         set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_C_COMPILER_TARGET}-)
       endif()
     elseif(COMPILER_BASENAME MATCHES "qcc(\\.exe)?$")
-      if(CMAKE_C_COMPILER_TARGET MATCHES "gcc_nto([^_le]+)(le)?")
+      if(CMAKE_C_COMPILER_TARGET MATCHES "gcc_nto([a-z0-9]+_[0-9]+|[^_le]+)(le)?")
         set(_CMAKE_TOOLCHAIN_PREFIX nto${CMAKE_MATCH_1}-)
       endif()
     endif ()
diff --git a/Modules/CMakeDetermineCXXCompiler.cmake b/Modules/CMakeDetermineCXXCompiler.cmake
index 70d17a1..0a0c37b 100644
--- a/Modules/CMakeDetermineCXXCompiler.cmake
+++ b/Modules/CMakeDetermineCXXCompiler.cmake
@@ -133,7 +133,7 @@
 
 if (CMAKE_CROSSCOMPILING  AND NOT  _CMAKE_TOOLCHAIN_PREFIX)
 
-  if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU" OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
+  if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU|Clang|QCC")
     get_filename_component(COMPILER_BASENAME "${CMAKE_CXX_COMPILER}" NAME)
     if (COMPILER_BASENAME MATCHES "^(.+-)(clan)?[gc]\\+\\+(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$")
       set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
@@ -142,7 +142,7 @@
         set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_CXX_COMPILER_TARGET}-)
       endif()
     elseif(COMPILER_BASENAME MATCHES "QCC(\\.exe)?$")
-      if(CMAKE_CXX_COMPILER_TARGET MATCHES "gcc_nto([^_le]+)(le)?")
+      if(CMAKE_CXX_COMPILER_TARGET MATCHES "gcc_nto([a-z0-9]+_[0-9]+|[^_le]+)(le)")
         set(_CMAKE_TOOLCHAIN_PREFIX nto${CMAKE_MATCH_1}-)
       endif()
     endif ()
diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake
index 5e2df26a..050d3e7 100644
--- a/Modules/CMakeDetermineCompilerId.cmake
+++ b/Modules/CMakeDetermineCompilerId.cmake
@@ -659,13 +659,10 @@
 #      set(CMAKE_EXECUTABLE_FORMAT "COFF" CACHE STRING "Executable file format")
 #    endif()
 #
-#    # Mach-O files start with CAFEBABE or FEEDFACE, according to http://radio.weblogs.com/0100490/2003/01/28.html
-#    if("${CMAKE_EXECUTABLE_MAGIC}" MATCHES "cafebabe")
-#      set(CMAKE_EXECUTABLE_FORMAT "MACHO" CACHE STRING "Executable file format")
-#    endif()
-#    if("${CMAKE_EXECUTABLE_MAGIC}" MATCHES "feedface")
-#      set(CMAKE_EXECUTABLE_FORMAT "MACHO" CACHE STRING "Executable file format")
-#    endif()
+    # Mach-O files start with MH_MAGIC or MH_CIGAM
+    if("${CMAKE_EXECUTABLE_MAGIC}" MATCHES "feedface|cefaedfe|feedfacf|cffaedfe")
+      set(CMAKE_EXECUTABLE_FORMAT "MACHO" CACHE STRING "Executable file format")
+    endif()
 
   endif()
   if(NOT DEFINED CMAKE_EXECUTABLE_FORMAT)
diff --git a/Modules/CMakePackageConfigHelpers.cmake b/Modules/CMakePackageConfigHelpers.cmake
index bcc9bf8..22fc953 100644
--- a/Modules/CMakePackageConfigHelpers.cmake
+++ b/Modules/CMakePackageConfigHelpers.cmake
@@ -124,7 +124,8 @@
 
    write_basic_package_version_file(<filename>
      [VERSION <major.minor.patch>]
-     COMPATIBILITY <AnyNewerVersion|SameMajorVersion|SameMinorVersion|ExactVersion> )
+     COMPATIBILITY <AnyNewerVersion|SameMajorVersion|SameMinorVersion|ExactVersion>
+     [ARCH_INDEPENDENT] )
 
 
 Writes a file for use as ``<PackageName>ConfigVersion.cmake`` file to
@@ -158,6 +159,18 @@
 write your own custom ``ConfigVersion.cmake`` file instead of using this
 macro.
 
+If ``ARCH_INDEPENDENT`` is given, the installed package version will be
+considered compatible even if it was built for a different architecture than
+the requested architecture.  Otherwise, an architecture check will be performed,
+and the package will be considered compatible only if the architecture matches
+exactly.  For example, if the package is built for a 32-bit architecture, the
+package is only considered compatible if it is used on a 32-bit architecture,
+unless ``ARCH_INDEPENDENT`` is given, in which case the package is considered
+compatible on any architecture.
+
+.. note:: ``ARCH_INDEPENDENT`` is intended for header-only libraries or similar
+   packages with no binaries.
+
 Internally, this macro executes :command:`configure_file()` to create the
 resulting version file.  Depending on the ``COMPATIBILITY``, the corresponding
 ``BasicConfigVersion-<COMPATIBILITY>.cmake.in`` file is used.
diff --git a/Modules/CMakePushCheckState.cmake b/Modules/CMakePushCheckState.cmake
index 7628d1a..f6bfc12 100644
--- a/Modules/CMakePushCheckState.cmake
+++ b/Modules/CMakePushCheckState.cmake
@@ -7,26 +7,27 @@
 
 
 
-This module defines three macros: CMAKE_PUSH_CHECK_STATE()
-CMAKE_POP_CHECK_STATE() and CMAKE_RESET_CHECK_STATE() These macros can
+This module defines three macros: ``CMAKE_PUSH_CHECK_STATE()``
+``CMAKE_POP_CHECK_STATE()`` and ``CMAKE_RESET_CHECK_STATE()`` These macros can
 be used to save, restore and reset (i.e., clear contents) the state of
-the variables CMAKE_REQUIRED_FLAGS, CMAKE_REQUIRED_DEFINITIONS,
-CMAKE_REQUIRED_LIBRARIES, CMAKE_REQUIRED_INCLUDES and CMAKE_EXTRA_INCLUDE_FILES
-used by the various Check-files coming with CMake, like e.g.
-check_function_exists() etc.  The variable contents are pushed on a
-stack, pushing multiple times is supported.  This is useful e.g.  when
-executing such tests in a Find-module, where they have to be set, but
-after the Find-module has been executed they should have the same
-value as they had before.
+the variables ``CMAKE_REQUIRED_FLAGS``, ``CMAKE_REQUIRED_DEFINITIONS``,
+``CMAKE_REQUIRED_LINK_OPTIONS``, ``CMAKE_REQUIRED_LIBRARIES``,
+``CMAKE_REQUIRED_INCLUDES`` and ``CMAKE_EXTRA_INCLUDE_FILES`` used by the
+various Check-files coming with CMake, like e.g. ``check_function_exists()``
+etc.
+The variable contents are pushed on a stack, pushing multiple times is
+supported.  This is useful e.g.  when executing such tests in a Find-module,
+where they have to be set, but after the Find-module has been executed they
+should have the same value as they had before.
 
-CMAKE_PUSH_CHECK_STATE() macro receives optional argument RESET.
-Whether it's specified, CMAKE_PUSH_CHECK_STATE() will set all
-CMAKE_REQUIRED_* variables to empty values, same as
-CMAKE_RESET_CHECK_STATE() call will do.
+``CMAKE_PUSH_CHECK_STATE()`` macro receives optional argument ``RESET``.
+Whether it's specified, ``CMAKE_PUSH_CHECK_STATE()`` will set all
+``CMAKE_REQUIRED_*`` variables to empty values, same as
+``CMAKE_RESET_CHECK_STATE()`` call will do.
 
 Usage:
 
-::
+.. code-block:: cmake
 
    cmake_push_check_state(RESET)
    set(CMAKE_REQUIRED_DEFINITIONS -DSOME_MORE_DEF)
@@ -42,6 +43,7 @@
    set(CMAKE_EXTRA_INCLUDE_FILES)
    set(CMAKE_REQUIRED_INCLUDES)
    set(CMAKE_REQUIRED_DEFINITIONS)
+   set(CMAKE_REQUIRED_LINK_OPTIONS)
    set(CMAKE_REQUIRED_LIBRARIES)
    set(CMAKE_REQUIRED_FLAGS)
    set(CMAKE_REQUIRED_QUIET)
@@ -56,12 +58,13 @@
 
    math(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}+1")
 
-   set(_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}  ${CMAKE_EXTRA_INCLUDE_FILES})
-   set(_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}    ${CMAKE_REQUIRED_INCLUDES})
-   set(_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_DEFINITIONS})
-   set(_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}   ${CMAKE_REQUIRED_LIBRARIES})
-   set(_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}       ${CMAKE_REQUIRED_FLAGS})
-   set(_CMAKE_REQUIRED_QUIET_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}       ${CMAKE_REQUIRED_QUIET})
+   set(_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}    ${CMAKE_EXTRA_INCLUDE_FILES})
+   set(_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}      ${CMAKE_REQUIRED_INCLUDES})
+   set(_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}   ${CMAKE_REQUIRED_DEFINITIONS})
+   set(_CMAKE_REQUIRED_LINK_OPTIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}  ${CMAKE_REQUIRED_LINK_OPTIONS})
+   set(_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}     ${CMAKE_REQUIRED_LIBRARIES})
+   set(_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}         ${CMAKE_REQUIRED_FLAGS})
+   set(_CMAKE_REQUIRED_QUIET_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}         ${CMAKE_REQUIRED_QUIET})
 
    if (${ARGC} GREATER 0 AND "${ARGV0}" STREQUAL "RESET")
       cmake_reset_check_state()
@@ -74,12 +77,13 @@
 # don't pop more than we pushed
    if("${_CMAKE_PUSH_CHECK_STATE_COUNTER}" GREATER "0")
 
-      set(CMAKE_EXTRA_INCLUDE_FILES  ${_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
-      set(CMAKE_REQUIRED_INCLUDES    ${_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
-      set(CMAKE_REQUIRED_DEFINITIONS ${_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
-      set(CMAKE_REQUIRED_LIBRARIES   ${_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
-      set(CMAKE_REQUIRED_FLAGS       ${_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
-      set(CMAKE_REQUIRED_QUIET       ${_CMAKE_REQUIRED_QUIET_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
+      set(CMAKE_EXTRA_INCLUDE_FILES    ${_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
+      set(CMAKE_REQUIRED_INCLUDES      ${_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
+      set(CMAKE_REQUIRED_DEFINITIONS   ${_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
+      set(CMAKE_REQUIRED_LINK_OPTIONS  ${_CMAKE_REQUIRED_LINK_OPTIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
+      set(CMAKE_REQUIRED_LIBRARIES     ${_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
+      set(CMAKE_REQUIRED_FLAGS         ${_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
+      set(CMAKE_REQUIRED_QUIET         ${_CMAKE_REQUIRED_QUIET_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
 
       math(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}-1")
    endif()
diff --git a/Modules/CTest.cmake b/Modules/CTest.cmake
index 18bb452..8848bdd 100644
--- a/Modules/CTest.cmake
+++ b/Modules/CTest.cmake
@@ -177,9 +177,6 @@
     )
   set(MEMORYCHECK_SUPPRESSIONS_FILE "" CACHE FILEPATH
     "File that contains suppressions for the memory checker")
-  find_program(SCPCOMMAND scp DOC
-    "Path to scp command, used by CTest for submitting results to a Dart server"
-    )
   find_program(COVERAGE_COMMAND gcov DOC
     "Path to the coverage program that CTest uses for performing coverage inspection"
     )
diff --git a/Modules/CheckCSourceCompiles.cmake b/Modules/CheckCSourceCompiles.cmake
index 5b0b70e..77ba0cc 100644
--- a/Modules/CheckCSourceCompiles.cmake
+++ b/Modules/CheckCSourceCompiles.cmake
@@ -43,6 +43,10 @@
     ``try_compile()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
     directory property will be ignored.
 
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_compile` for further details).
+
   ``CMAKE_REQUIRED_LIBRARIES``
     A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
     command. These can be the name of system libraries or they can be
@@ -78,6 +82,12 @@
     endforeach()
     set(MACRO_CHECK_FUNCTION_DEFINITIONS
       "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_C_SOURCE_COMPILES_ADD_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_C_SOURCE_COMPILES_ADD_LINK_OPTIONS)
+    endif()
     if(CMAKE_REQUIRED_LIBRARIES)
       set(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES
         LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
@@ -100,6 +110,7 @@
       ${CMAKE_BINARY_DIR}
       ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_C_SOURCE_COMPILES_ADD_LINK_OPTIONS}
       ${CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
       "${CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}"
diff --git a/Modules/CheckCSourceRuns.cmake b/Modules/CheckCSourceRuns.cmake
index e682b29..eba70f2 100644
--- a/Modules/CheckCSourceRuns.cmake
+++ b/Modules/CheckCSourceRuns.cmake
@@ -42,6 +42,10 @@
     ``try_run()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
     directory property will be ignored.
 
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_run` for further details).
+
   ``CMAKE_REQUIRED_LIBRARIES``
     A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
     command. These can be the name of system libraries or they can be
@@ -66,6 +70,12 @@
   if(NOT DEFINED "${VAR}")
     set(MACRO_CHECK_FUNCTION_DEFINITIONS
       "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_C_SOURCE_COMPILES_ADD_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_C_SOURCE_COMPILES_ADD_LINK_OPTIONS)
+    endif()
     if(CMAKE_REQUIRED_LIBRARIES)
       set(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES
         LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
@@ -88,6 +98,7 @@
       ${CMAKE_BINARY_DIR}
       ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_C_SOURCE_COMPILES_ADD_LINK_OPTIONS}
       ${CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
       -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
diff --git a/Modules/CheckCXXSourceCompiles.cmake b/Modules/CheckCXXSourceCompiles.cmake
index f7ec8eb..cc457a5 100644
--- a/Modules/CheckCXXSourceCompiles.cmake
+++ b/Modules/CheckCXXSourceCompiles.cmake
@@ -43,6 +43,10 @@
     ``try_compile()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
     directory property will be ignored.
 
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_compile` for further details).
+
   ``CMAKE_REQUIRED_LIBRARIES``
     A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
     command. These can be the name of system libraries or they can be
@@ -79,6 +83,12 @@
 
     set(MACRO_CHECK_FUNCTION_DEFINITIONS
       "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_CXX_SOURCE_COMPILES_ADD_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_CXX_SOURCE_COMPILES_ADD_LINK_OPTIONS)
+    endif()
     if(CMAKE_REQUIRED_LIBRARIES)
       set(CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES
         LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
@@ -101,6 +111,7 @@
       ${CMAKE_BINARY_DIR}
       ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_CXX_SOURCE_COMPILES_ADD_LINK_OPTIONS}
       ${CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
       "${CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES}"
diff --git a/Modules/CheckCXXSourceRuns.cmake b/Modules/CheckCXXSourceRuns.cmake
index bdc2291..7db976b 100644
--- a/Modules/CheckCXXSourceRuns.cmake
+++ b/Modules/CheckCXXSourceRuns.cmake
@@ -42,6 +42,10 @@
     ``try_run()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
     directory property will be ignored.
 
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_run` for further details).
+
   ``CMAKE_REQUIRED_LIBRARIES``
     A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
     command. These can be the name of system libraries or they can be
@@ -66,6 +70,12 @@
   if(NOT DEFINED "${VAR}")
     set(MACRO_CHECK_FUNCTION_DEFINITIONS
       "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_CXX_SOURCE_COMPILES_ADD_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_CXX_SOURCE_COMPILES_ADD_LINK_OPTIONS)
+    endif()
     if(CMAKE_REQUIRED_LIBRARIES)
       set(CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES
         LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
@@ -88,6 +98,7 @@
       ${CMAKE_BINARY_DIR}
       ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_CXX_SOURCE_COMPILES_ADD_LINK_OPTIONS}
       ${CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
       -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
diff --git a/Modules/CheckCXXSymbolExists.cmake b/Modules/CheckCXXSymbolExists.cmake
index d067001..970e301 100644
--- a/Modules/CheckCXXSymbolExists.cmake
+++ b/Modules/CheckCXXSymbolExists.cmake
@@ -7,35 +7,42 @@
 
 Check if a symbol exists as a function, variable, or macro in C++
 
-.. code-block:: cmake
+.. command:: CHECK_CXX_SYMBOL_EXISTS
 
-  CHECK_CXX_SYMBOL_EXISTS(<symbol> <files> <variable>)
+  .. code-block:: cmake
 
-Check that the ``<symbol>`` is available after including given header
-``<files>`` and store the result in a ``<variable>``.  Specify the list of
-files in one argument as a semicolon-separated list.
-CHECK_CXX_SYMBOL_EXISTS() can be used to check in C++ files, as
-opposed to CHECK_SYMBOL_EXISTS(), which works only for C.
+    CHECK_CXX_SYMBOL_EXISTS(<symbol> <files> <variable>)
 
-If the header files define the symbol as a macro it is considered
-available and assumed to work.  If the header files declare the symbol
-as a function or variable then the symbol must also be available for
-linking.  If the symbol is a type or enum value it will not be
-recognized (consider using CheckTypeSize or CheckCSourceCompiles).
+  Check that the ``<symbol>`` is available after including given header
+  ``<files>`` and store the result in a ``<variable>``.  Specify the list of
+  files in one argument as a semicolon-separated list.
+  ``CHECK_CXX_SYMBOL_EXISTS()`` can be used to check in C++ files, as
+  opposed to ``CHECK_SYMBOL_EXISTS()``, which works only for ``C``.
+
+  If the header files define the symbol as a macro it is considered
+  available and assumed to work.  If the header files declare the symbol
+  as a function or variable then the symbol must also be available for
+  linking.  If the symbol is a type or enum value it will not be
+  recognized (consider using :module:`CheckTypeSize`
+  or :module:`CheckCSourceCompiles`).
 
 The following variables may be set before calling this macro to modify
 the way the check is run:
 
 ``CMAKE_REQUIRED_FLAGS``
-   string of compile command line flags
+  string of compile command line flags.
 ``CMAKE_REQUIRED_DEFINITIONS``
-   list of macros to define (-DFOO=bar)
+  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
 ``CMAKE_REQUIRED_INCLUDES``
-   list of include directories
+  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+  the compiler.
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
 ``CMAKE_REQUIRED_LIBRARIES``
-   list of libraries to link
+  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+  command. See policy :policy:`CMP0075`.
 ``CMAKE_REQUIRED_QUIET``
-   execute quietly without messages
+  execute quietly without messages.
 #]=======================================================================]
 
 include_guard(GLOBAL)
diff --git a/Modules/CheckFortranFunctionExists.cmake b/Modules/CheckFortranFunctionExists.cmake
index dc371aa..7ca205a 100644
--- a/Modules/CheckFortranFunctionExists.cmake
+++ b/Modules/CheckFortranFunctionExists.cmake
@@ -5,24 +5,33 @@
 CheckFortranFunctionExists
 --------------------------
 
-:command:`Macro <macro>` which checks if a Fortran function exists.
+Check if a Fortran function exists.
 
-.. code-block:: cmake
+.. command:: CHECK_FORTRAN_FUNCTION_EXISTS
 
-  CHECK_FORTRAN_FUNCTION_EXISTS(<function> <result>)
+  .. code-block:: cmake
 
-where
+    CHECK_FORTRAN_FUNCTION_EXISTS(<function> <result>)
 
-``<function>``
-  the name of the Fortran function
-``<result>``
-  variable to store the result; will be created as an internal cache variable.
+  where
+
+  ``<function>``
+    the name of the Fortran function
+  ``<result>``
+    variable to store the result; will be created as an internal cache variable.
 
 The following variables may be set before calling this macro to modify
 the way the check is run:
 
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  A :ref:`;-list <CMake Language Lists>` of options to add to the link
+  command (see :command:`try_compile` for further details).
+
 ``CMAKE_REQUIRED_LIBRARIES``
-  list of libraries to link
+  A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+  command. These can be the name of system libraries or they can be
+  :ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for
+  further details).
 #]=======================================================================]
 
 include_guard(GLOBAL)
@@ -30,6 +39,12 @@
 macro(CHECK_FORTRAN_FUNCTION_EXISTS FUNCTION VARIABLE)
   if(NOT DEFINED ${VARIABLE})
     message(STATUS "Looking for Fortran ${FUNCTION}")
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS)
+    endif()
     if(CMAKE_REQUIRED_LIBRARIES)
       set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES
         LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
@@ -48,6 +63,7 @@
     try_compile(${VARIABLE}
     ${CMAKE_BINARY_DIR}
     ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f
+    ${CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS}
     ${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}
     OUTPUT_VARIABLE OUTPUT
     )
diff --git a/Modules/CheckFortranSourceCompiles.cmake b/Modules/CheckFortranSourceCompiles.cmake
index 977b7b4..b3e83dd 100644
--- a/Modules/CheckFortranSourceCompiles.cmake
+++ b/Modules/CheckFortranSourceCompiles.cmake
@@ -49,6 +49,10 @@
     ``try_compile()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
     directory property will be ignored.
 
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_compile` for further details).
+
   ``CMAKE_REQUIRED_LIBRARIES``
     A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
     command. These can be the name of system libraries or they can be
@@ -88,6 +92,12 @@
     endif()
     set(MACRO_CHECK_FUNCTION_DEFINITIONS
       "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS)
+    endif()
     if(CMAKE_REQUIRED_LIBRARIES)
       set(CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES
         LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
@@ -110,6 +120,7 @@
       ${CMAKE_BINARY_DIR}
       ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.${_SRC_EXT}
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS}
       ${CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
       "${CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES}"
diff --git a/Modules/CheckFunctionExists.cmake b/Modules/CheckFunctionExists.cmake
index cbec739..c39144f 100644
--- a/Modules/CheckFunctionExists.cmake
+++ b/Modules/CheckFunctionExists.cmake
@@ -7,27 +7,33 @@
 
 Check if a C function can be linked
 
-.. code-block:: cmake
+.. command:: check_function_exists
 
-  check_function_exists(<function> <variable>)
+  .. code-block:: cmake
 
-Checks that the ``<function>`` is provided by libraries on the system and store
-the result in a ``<variable>``, which will be created as an internal
-cache variable.
+    check_function_exists(<function> <variable>)
+
+  Checks that the ``<function>`` is provided by libraries on the system and store
+  the result in a ``<variable>``, which will be created as an internal
+  cache variable.
 
 The following variables may be set before calling this macro to modify the
 way the check is run:
 
 ``CMAKE_REQUIRED_FLAGS``
-  string of compile command line flags
+  string of compile command line flags.
 ``CMAKE_REQUIRED_DEFINITIONS``
-  list of macros to define (-DFOO=bar)
+  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
 ``CMAKE_REQUIRED_INCLUDES``
-  list of include directories
+  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+  the compiler.
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
 ``CMAKE_REQUIRED_LIBRARIES``
-  list of libraries to link
+  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+  command. See policy :policy:`CMP0075`.
 ``CMAKE_REQUIRED_QUIET``
-  execute quietly without messages
+  execute quietly without messages.
 
 .. note::
 
@@ -53,6 +59,12 @@
     if(NOT CMAKE_REQUIRED_QUIET)
       message(STATUS "Looking for ${FUNCTION}")
     endif()
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS)
+    endif()
     if(CMAKE_REQUIRED_LIBRARIES)
       set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES
         LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
@@ -79,6 +91,7 @@
       ${CMAKE_BINARY_DIR}
       ${_cfe_source}
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS}
       ${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
       "${CHECK_FUNCTION_EXISTS_ADD_INCLUDES}"
diff --git a/Modules/CheckIncludeFile.cmake b/Modules/CheckIncludeFile.cmake
index 87dac4f..d7b9481 100644
--- a/Modules/CheckIncludeFile.cmake
+++ b/Modules/CheckIncludeFile.cmake
@@ -9,7 +9,7 @@
 
 .. command:: CHECK_INCLUDE_FILE
 
-  ::
+  .. code-block:: cmake
 
     CHECK_INCLUDE_FILE(<include> <variable> [<flags>])
 
@@ -22,15 +22,19 @@
 the way the check is run:
 
 ``CMAKE_REQUIRED_FLAGS``
-  string of compile command line flags
+  string of compile command line flags.
 ``CMAKE_REQUIRED_DEFINITIONS``
-  list of macros to define (-DFOO=bar)
+  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
 ``CMAKE_REQUIRED_INCLUDES``
-  list of include directories
+  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+  the compiler.
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
 ``CMAKE_REQUIRED_LIBRARIES``
-  A list of libraries to link.  See policy :policy:`CMP0075`.
+  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+  command. See policy :policy:`CMP0075`.
 ``CMAKE_REQUIRED_QUIET``
-  execute quietly without messages
+  execute quietly without messages.
 
 See the :module:`CheckIncludeFiles` module to check for multiple headers
 at once.  See the :module:`CheckIncludeFileCXX` module to check for headers
@@ -58,6 +62,11 @@
       string(APPEND CMAKE_C_FLAGS " ${ARGV2}")
     endif()
 
+    set(_CIF_LINK_OPTIONS)
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(_CIF_LINK_OPTIONS LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    endif()
+
     set(_CIF_LINK_LIBRARIES "")
     if(CMAKE_REQUIRED_LIBRARIES)
       cmake_policy(GET CMP0075 _CIF_CMP0075
@@ -85,11 +94,13 @@
       ${CMAKE_BINARY_DIR}
       ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.c
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${_CIF_LINK_OPTIONS}
       ${_CIF_LINK_LIBRARIES}
       CMAKE_FLAGS
       -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS}
       "${CHECK_INCLUDE_FILE_C_INCLUDE_DIRS}"
       OUTPUT_VARIABLE OUTPUT)
+    unset(_CIF_LINK_OPTIONS)
     unset(_CIF_LINK_LIBRARIES)
 
     if(${ARGC} EQUAL 3)
diff --git a/Modules/CheckIncludeFileCXX.cmake b/Modules/CheckIncludeFileCXX.cmake
index 42b5eaf..de5a83b 100644
--- a/Modules/CheckIncludeFileCXX.cmake
+++ b/Modules/CheckIncludeFileCXX.cmake
@@ -9,7 +9,7 @@
 
 .. command:: CHECK_INCLUDE_FILE_CXX
 
-  ::
+  .. code-block:: cmake
 
     CHECK_INCLUDE_FILE_CXX(<include> <variable> [<flags>])
 
@@ -22,15 +22,19 @@
 the way the check is run:
 
 ``CMAKE_REQUIRED_FLAGS``
-  string of compile command line flags
+  string of compile command line flags.
 ``CMAKE_REQUIRED_DEFINITIONS``
-  list of macros to define (-DFOO=bar)
+  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
 ``CMAKE_REQUIRED_INCLUDES``
-  list of include directories
+  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+  the compiler.
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
 ``CMAKE_REQUIRED_LIBRARIES``
-  A list of libraries to link.  See policy :policy:`CMP0075`.
+  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+  command. See policy :policy:`CMP0075`.
 ``CMAKE_REQUIRED_QUIET``
-  execute quietly without messages
+  execute quietly without messages.
 
 See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFiles`
 to check for one or more ``C`` headers.
@@ -57,6 +61,11 @@
       string(APPEND CMAKE_CXX_FLAGS " ${ARGV2}")
     endif()
 
+    set(_CIF_LINK_OPTIONS)
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(_CIF_LINK_OPTIONS LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    endif()
+
     set(_CIF_LINK_LIBRARIES "")
     if(CMAKE_REQUIRED_LIBRARIES)
       cmake_policy(GET CMP0075 _CIF_CMP0075
@@ -84,11 +93,13 @@
       ${CMAKE_BINARY_DIR}
       ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.cxx
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${_CIF_LINK_OPTIONS}
       ${_CIF_LINK_LIBRARIES}
       CMAKE_FLAGS
       -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS}
       "${CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS}"
       OUTPUT_VARIABLE OUTPUT)
+    unset(_CIF_LINK_OPTIONS)
     unset(_CIF_LINK_LIBRARIES)
 
     if(${ARGC} EQUAL 3)
diff --git a/Modules/CheckIncludeFiles.cmake b/Modules/CheckIncludeFiles.cmake
index b303260..f52ab55 100644
--- a/Modules/CheckIncludeFiles.cmake
+++ b/Modules/CheckIncludeFiles.cmake
@@ -10,7 +10,7 @@
 
 .. command:: CHECK_INCLUDE_FILES
 
-  ::
+  .. code-block:: cmake
 
     CHECK_INCLUDE_FILES("<includes>" <variable> [LANGUAGE <language>])
 
@@ -19,24 +19,28 @@
   entry named ``<variable>``.  Specify the ``<includes>`` argument
   as a :ref:`;-list <CMake Language Lists>` of header file names.
 
-If LANGUAGE is set, the specified compiler will be used to perform the
-check. Acceptable values are ``C`` and ``CXX``. If not set, the C compiler
-will be used if enabled. If the C compiler is not enabled, the C++
-compiler will be used if enabled.
+  If ``LANGUAGE`` is set, the specified compiler will be used to perform the
+  check. Acceptable values are ``C`` and ``CXX``. If not set, the C compiler
+  will be used if enabled. If the C compiler is not enabled, the C++
+  compiler will be used if enabled.
 
 The following variables may be set before calling this macro to modify
 the way the check is run:
 
 ``CMAKE_REQUIRED_FLAGS``
-  string of compile command line flags
+  string of compile command line flags.
 ``CMAKE_REQUIRED_DEFINITIONS``
-  list of macros to define (-DFOO=bar)
+  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
 ``CMAKE_REQUIRED_INCLUDES``
-  list of include directories
+  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+  the compiler.
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
 ``CMAKE_REQUIRED_LIBRARIES``
-  A list of libraries to link.  See policy :policy:`CMP0075`.
+  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+  command. See policy :policy:`CMP0075`.
 ``CMAKE_REQUIRED_QUIET``
-  execute quietly without messages
+  execute quietly without messages.
 
 See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFileCXX`
 to check for a single header file in ``C`` or ``CXX`` languages.
@@ -98,6 +102,11 @@
       set(_description "include file ${_INCLUDE}")
     endif()
 
+    set(_CIF_LINK_OPTIONS)
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(_CIF_LINK_OPTIONS LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    endif()
+
     set(_CIF_LINK_LIBRARIES "")
     if(CMAKE_REQUIRED_LIBRARIES)
       cmake_policy(GET CMP0075 _CIF_CMP0075
@@ -128,11 +137,13 @@
       ${CMAKE_BINARY_DIR}
       ${src}
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${_CIF_LINK_OPTIONS}
       ${_CIF_LINK_LIBRARIES}
       CMAKE_FLAGS
       -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILES_FLAGS}
       "${CHECK_INCLUDE_FILES_INCLUDE_DIRS}"
       OUTPUT_VARIABLE OUTPUT)
+    unset(_CIF_LINK_OPTIONS)
     unset(_CIF_LINK_LIBRARIES)
     if(${VARIABLE})
       if(NOT CMAKE_REQUIRED_QUIET)
diff --git a/Modules/CheckLibraryExists.cmake b/Modules/CheckLibraryExists.cmake
index 428a6b0..6504df5 100644
--- a/Modules/CheckLibraryExists.cmake
+++ b/Modules/CheckLibraryExists.cmake
@@ -7,15 +7,19 @@
 
 Check if the function exists.
 
-CHECK_LIBRARY_EXISTS (LIBRARY FUNCTION LOCATION VARIABLE)
+.. command:: CHECK_LIBRARY_EXISTS
 
-::
+  .. code-block:: cmake
 
-  LIBRARY  - the name of the library you are looking for
-  FUNCTION - the name of the function
-  LOCATION - location where the library should be found
-  VARIABLE - variable to store the result
-             Will be created as an internal cache variable.
+    CHECK_LIBRARY_EXISTS(LIBRARY FUNCTION LOCATION VARIABLE)
+
+  ::
+
+    LIBRARY  - the name of the library you are looking for
+    FUNCTION - the name of the function
+    LOCATION - location where the library should be found
+    VARIABLE - variable to store the result
+               Will be created as an internal cache variable.
 
 
 
@@ -26,6 +30,7 @@
 
   CMAKE_REQUIRED_FLAGS = string of compile command line flags
   CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
+  CMAKE_REQUIRED_LINK_OPTIONS = list of options to pass to link command
   CMAKE_REQUIRED_LIBRARIES = list of libraries to link
   CMAKE_REQUIRED_QUIET = execute quietly without messages
 #]=======================================================================]
@@ -39,6 +44,11 @@
     if(NOT CMAKE_REQUIRED_QUIET)
       message(STATUS "Looking for ${FUNCTION} in ${LIBRARY}")
     endif()
+    set(CHECK_LIBRARY_EXISTS_LINK_OPTIONS)
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_LIBRARY_EXISTS_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    endif()
     set(CHECK_LIBRARY_EXISTS_LIBRARIES ${LIBRARY})
     if(CMAKE_REQUIRED_LIBRARIES)
       set(CHECK_LIBRARY_EXISTS_LIBRARIES
@@ -58,6 +68,7 @@
       ${CMAKE_BINARY_DIR}
       ${_cle_source}
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_LIBRARY_EXISTS_LINK_OPTIONS}
       LINK_LIBRARIES ${CHECK_LIBRARY_EXISTS_LIBRARIES}
       CMAKE_FLAGS
       -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_LIBRARY_EXISTS_DEFINITION}
diff --git a/Modules/CheckPrototypeDefinition.cmake b/Modules/CheckPrototypeDefinition.cmake
index c90b766..a7b020c 100644
--- a/Modules/CheckPrototypeDefinition.cmake
+++ b/Modules/CheckPrototypeDefinition.cmake
@@ -7,26 +7,30 @@
 
 Check if the prototype we expect is correct.
 
-check_prototype_definition(FUNCTION PROTOTYPE RETURN HEADER VARIABLE)
+.. command:: check_prototype_definition
 
-::
+  .. code-block:: cmake
 
-  FUNCTION - The name of the function (used to check if prototype exists)
-  PROTOTYPE- The prototype to check.
-  RETURN - The return value of the function.
-  HEADER - The header files required.
-  VARIABLE - The variable to store the result.
-             Will be created as an internal cache variable.
+    check_prototype_definition(FUNCTION PROTOTYPE RETURN HEADER VARIABLE)
 
-Example:
+  ::
 
-::
+    FUNCTION - The name of the function (used to check if prototype exists)
+    PROTOTYPE- The prototype to check.
+    RETURN - The return value of the function.
+    HEADER - The header files required.
+    VARIABLE - The variable to store the result.
+               Will be created as an internal cache variable.
 
-  check_prototype_definition(getpwent_r
-   "struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)"
-   "NULL"
-   "unistd.h;pwd.h"
-   SOLARIS_GETPWENT_R)
+  Example:
+
+  .. code-block:: cmake
+
+    check_prototype_definition(getpwent_r
+     "struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)"
+     "NULL"
+     "unistd.h;pwd.h"
+     SOLARIS_GETPWENT_R)
 
 The following variables may be set before calling this function to modify
 the way the check is run:
@@ -36,6 +40,7 @@
   CMAKE_REQUIRED_FLAGS = string of compile command line flags
   CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
   CMAKE_REQUIRED_INCLUDES = list of include directories
+  CMAKE_REQUIRED_LINK_OPTIONS = list of options to pass to link command
   CMAKE_REQUIRED_LIBRARIES = list of libraries to link
   CMAKE_REQUIRED_QUIET = execute quietly without messages
 #]=======================================================================]
@@ -52,6 +57,12 @@
     set(CHECK_PROTOTYPE_DEFINITION_CONTENT "/* */\n")
 
     set(CHECK_PROTOTYPE_DEFINITION_FLAGS ${CMAKE_REQUIRED_FLAGS})
+    if (CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_PROTOTYPE_DEFINITION_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_PROTOTYPE_DEFINITION_LINK_OPTIONS)
+    endif()
     if (CMAKE_REQUIRED_LIBRARIES)
       set(CHECK_PROTOTYPE_DEFINITION_LIBS
         LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
@@ -83,6 +94,7 @@
       ${CMAKE_BINARY_DIR}
       ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_PROTOTYPE_DEFINITION_LINK_OPTIONS}
       ${CHECK_PROTOTYPE_DEFINITION_LIBS}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CHECK_PROTOTYPE_DEFINITION_FLAGS}
       "${CMAKE_SYMBOL_EXISTS_INCLUDES}"
diff --git a/Modules/CheckStructHasMember.cmake b/Modules/CheckStructHasMember.cmake
index e7c337c..7fef857 100644
--- a/Modules/CheckStructHasMember.cmake
+++ b/Modules/CheckStructHasMember.cmake
@@ -7,18 +7,20 @@
 
 Check if the given struct or class has the specified member variable
 
-::
+.. command:: CHECK_STRUCT_HAS_MEMBER
 
- CHECK_STRUCT_HAS_MEMBER(<struct> <member> <header> <variable>
-                         [LANGUAGE <language>])
+  .. code-block:: cmake
 
-::
+    CHECK_STRUCT_HAS_MEMBER(<struct> <member> <header> <variable>
+                            [LANGUAGE <language>])
 
-  <struct> - the name of the struct or class you are interested in
-  <member> - the member which existence you want to check
-  <header> - the header(s) where the prototype should be declared
-  <variable> - variable to store the result
-  <language> - the compiler to use (C or CXX)
+  ::
+
+    <struct> - the name of the struct or class you are interested in
+    <member> - the member which existence you want to check
+    <header> - the header(s) where the prototype should be declared
+    <variable> - variable to store the result
+    <language> - the compiler to use (C or CXX)
 
 
 
@@ -30,13 +32,17 @@
   CMAKE_REQUIRED_FLAGS = string of compile command line flags
   CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
   CMAKE_REQUIRED_INCLUDES = list of include directories
+  CMAKE_REQUIRED_LINK_OPTIONS = list of options to pass to link command
   CMAKE_REQUIRED_LIBRARIES = list of libraries to link
   CMAKE_REQUIRED_QUIET = execute quietly without messages
 
 
+Example:
 
-Example: CHECK_STRUCT_HAS_MEMBER("struct timeval" tv_sec sys/select.h
-HAVE_TIMEVAL_TV_SEC LANGUAGE C)
+.. code-block:: cmake
+
+  CHECK_STRUCT_HAS_MEMBER("struct timeval" tv_sec sys/select.h
+                          HAVE_TIMEVAL_TV_SEC LANGUAGE C)
 #]=======================================================================]
 
 include_guard(GLOBAL)
diff --git a/Modules/CheckSymbolExists.cmake b/Modules/CheckSymbolExists.cmake
index 3483121..b9ef808 100644
--- a/Modules/CheckSymbolExists.cmake
+++ b/Modules/CheckSymbolExists.cmake
@@ -10,7 +10,7 @@
 
 .. command:: check_symbol_exists
 
-  ::
+  .. code-block:: cmake
 
     check_symbol_exists(<symbol> <files> <variable>)
 
@@ -32,15 +32,19 @@
 the way the check is run:
 
 ``CMAKE_REQUIRED_FLAGS``
-  string of compile command line flags
+  string of compile command line flags.
 ``CMAKE_REQUIRED_DEFINITIONS``
-  list of macros to define (-DFOO=bar)
+  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
 ``CMAKE_REQUIRED_INCLUDES``
-  list of include directories
+  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+  the compiler.
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
 ``CMAKE_REQUIRED_LIBRARIES``
-  list of libraries to link
+  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+  command. See policy :policy:`CMP0075`.
 ``CMAKE_REQUIRED_QUIET``
-  execute quietly without messages
+  execute quietly without messages.
 #]=======================================================================]
 
 include_guard(GLOBAL)
@@ -62,6 +66,12 @@
   if(NOT DEFINED "${VARIABLE}" OR "x${${VARIABLE}}" STREQUAL "x${VARIABLE}")
     set(CMAKE_CONFIGURABLE_FILE_CONTENT "/* */\n")
     set(MACRO_CHECK_SYMBOL_EXISTS_FLAGS ${CMAKE_REQUIRED_FLAGS})
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_SYMBOL_EXISTS_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_SYMBOL_EXISTS_LINK_OPTIONS)
+    endif()
     if(CMAKE_REQUIRED_LIBRARIES)
       set(CHECK_SYMBOL_EXISTS_LIBS
         LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
@@ -91,6 +101,7 @@
       ${CMAKE_BINARY_DIR}
       "${SOURCEFILE}"
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_SYMBOL_EXISTS_LINK_OPTIONS}
       ${CHECK_SYMBOL_EXISTS_LIBS}
       CMAKE_FLAGS
       -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_SYMBOL_EXISTS_FLAGS}
diff --git a/Modules/CheckTypeSize.cmake b/Modules/CheckTypeSize.cmake
index 2c53df9..3727373 100644
--- a/Modules/CheckTypeSize.cmake
+++ b/Modules/CheckTypeSize.cmake
@@ -7,50 +7,52 @@
 
 Check sizeof a type
 
-::
+.. command:: CHECK_TYPE_SIZE
 
-  CHECK_TYPE_SIZE(TYPE VARIABLE [BUILTIN_TYPES_ONLY]
-                                [LANGUAGE <language>])
+  .. code-block:: cmake
 
-Check if the type exists and determine its size.  On return,
-"HAVE_${VARIABLE}" holds the existence of the type, and "${VARIABLE}"
-holds one of the following:
+    CHECK_TYPE_SIZE(TYPE VARIABLE [BUILTIN_TYPES_ONLY]
+                                  [LANGUAGE <language>])
 
-::
+  Check if the type exists and determine its size.  On return,
+  ``HAVE_${VARIABLE}`` holds the existence of the type, and ``${VARIABLE}``
+  holds one of the following:
 
-   <size> = type has non-zero size <size>
-   "0"    = type has arch-dependent size (see below)
-   ""     = type does not exist
+  ::
 
-Both ``HAVE_${VARIABLE}`` and ``${VARIABLE}`` will be created as internal
-cache variables.
+     <size> = type has non-zero size <size>
+     "0"    = type has arch-dependent size (see below)
+     ""     = type does not exist
 
-Furthermore, the variable "${VARIABLE}_CODE" holds C preprocessor code
-to define the macro "${VARIABLE}" to the size of the type, or leave
-the macro undefined if the type does not exist.
+  Both ``HAVE_${VARIABLE}`` and ``${VARIABLE}`` will be created as internal
+  cache variables.
 
-The variable "${VARIABLE}" may be "0" when CMAKE_OSX_ARCHITECTURES has
-multiple architectures for building OS X universal binaries.  This
-indicates that the type size varies across architectures.  In this
-case "${VARIABLE}_CODE" contains C preprocessor tests mapping from
-each architecture macro to the corresponding type size.  The list of
-architecture macros is stored in "${VARIABLE}_KEYS", and the value for
-each key is stored in "${VARIABLE}-${KEY}".
+  Furthermore, the variable ``${VARIABLE}_CODE`` holds C preprocessor code
+  to define the macro ``${VARIABLE}`` to the size of the type, or leave
+  the macro undefined if the type does not exist.
 
-If the BUILTIN_TYPES_ONLY option is not given, the macro checks for
-headers <sys/types.h>, <stdint.h>, and <stddef.h>, and saves results
-in HAVE_SYS_TYPES_H, HAVE_STDINT_H, and HAVE_STDDEF_H.  The type size
-check automatically includes the available headers, thus supporting
-checks of types defined in the headers.
+  The variable ``${VARIABLE}`` may be ``0`` when
+  :variable:`CMAKE_OSX_ARCHITECTURES` has multiple architectures for building
+  OS X universal binaries.  This indicates that the type size varies across
+  architectures.  In this case ``${VARIABLE}_CODE`` contains C preprocessor
+  tests mapping from each architecture macro to the corresponding type size.
+  The list of architecture macros is stored in ``${VARIABLE}_KEYS``, and the
+  value for each key is stored in ``${VARIABLE}-${KEY}``.
 
-If LANGUAGE is set, the specified compiler will be used to perform the
-check. Acceptable values are C and CXX
+  If the ``BUILTIN_TYPES_ONLY`` option is not given, the macro checks for
+  headers ``<sys/types.h>``, ``<stdint.h>``, and ``<stddef.h>``, and saves
+  results in ``HAVE_SYS_TYPES_H``, ``HAVE_STDINT_H``, and ``HAVE_STDDEF_H``.
+  The type size check automatically includes the available headers, thus
+  supporting checks of types defined in the headers.
+
+  If ``LANGUAGE`` is set, the specified compiler will be used to perform the
+  check. Acceptable values are ``C`` and ``CXX``.
 
 Despite the name of the macro you may use it to check the size of more
 complex expressions, too.  To check e.g.  for the size of a struct
 member you can do something like this:
 
-::
+.. code-block:: cmake
 
   check_type_size("((struct something*)0)->member" SIZEOF_MEMBER)
 
@@ -64,6 +66,7 @@
   CMAKE_REQUIRED_FLAGS = string of compile command line flags
   CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
   CMAKE_REQUIRED_INCLUDES = list of include directories
+  CMAKE_REQUIRED_LINK_OPTIONS  = list of options to pass to link command
   CMAKE_REQUIRED_LIBRARIES = list of libraries to link
   CMAKE_REQUIRED_QUIET = execute quietly without messages
   CMAKE_EXTRA_INCLUDE_FILES = list of extra headers to include
@@ -116,6 +119,7 @@
   configure_file(${__check_type_size_dir}/CheckTypeSize.c.in ${src} @ONLY)
   try_compile(HAVE_${var} ${CMAKE_BINARY_DIR} ${src}
     COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+    LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS}
     LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}
     CMAKE_FLAGS
       "-DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}"
diff --git a/Modules/CheckVariableExists.cmake b/Modules/CheckVariableExists.cmake
index f30165e..f4953a3 100644
--- a/Modules/CheckVariableExists.cmake
+++ b/Modules/CheckVariableExists.cmake
@@ -7,20 +7,21 @@
 
 Check if the variable exists.
 
-::
+.. command:: CHECK_VARIABLE_EXISTS
 
-  CHECK_VARIABLE_EXISTS(VAR VARIABLE)
+  .. code-block:: cmake
+
+    CHECK_VARIABLE_EXISTS(VAR VARIABLE)
 
 
+  ::
 
-::
-
-  VAR      - the name of the variable
-  VARIABLE - variable to store the result
-             Will be created as an internal cache variable.
+    VAR      - the name of the variable
+    VARIABLE - variable to store the result
+               Will be created as an internal cache variable.
 
 
-This macro is only for C variables.
+  This macro is only for ``C`` variables.
 
 The following variables may be set before calling this macro to modify
 the way the check is run:
@@ -29,6 +30,7 @@
 
   CMAKE_REQUIRED_FLAGS = string of compile command line flags
   CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
+  CMAKE_REQUIRED_LINK_OPTIONS = list of options to pass to link command
   CMAKE_REQUIRED_LIBRARIES = list of libraries to link
   CMAKE_REQUIRED_QUIET = execute quietly without messages
 #]=======================================================================]
@@ -42,6 +44,12 @@
     if(NOT CMAKE_REQUIRED_QUIET)
       message(STATUS "Looking for ${VAR}")
     endif()
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_VARIABLE_EXISTS_ADD_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_VARIABLE_EXISTS_ADD_LINK_OPTIONS)
+    endif()
     if(CMAKE_REQUIRED_LIBRARIES)
       set(CHECK_VARIABLE_EXISTS_ADD_LIBRARIES
         LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
@@ -52,6 +60,7 @@
       ${CMAKE_BINARY_DIR}
       ${CMAKE_ROOT}/Modules/CheckVariableExists.c
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_VARIABLE_EXISTS_ADD_LINK_OPTIONS}
       ${CHECK_VARIABLE_EXISTS_ADD_LIBRARIES}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_VARIABLE_DEFINITIONS}
       OUTPUT_VARIABLE OUTPUT)
diff --git a/Modules/Compiler/QCC-C-FeatureTests.cmake b/Modules/Compiler/QCC-C-FeatureTests.cmake
new file mode 100644
index 0000000..68f4197
--- /dev/null
+++ b/Modules/Compiler/QCC-C-FeatureTests.cmake
@@ -0,0 +1 @@
+include(Compiler/GNU-C-FeatureTests)
diff --git a/Modules/Compiler/QCC-C.cmake b/Modules/Compiler/QCC-C.cmake
index ae4a2f4..6db619e 100644
--- a/Modules/Compiler/QCC-C.cmake
+++ b/Modules/Compiler/QCC-C.cmake
@@ -1,2 +1,5 @@
+# To include compiler feature detection
+include(Compiler/GNU-C)
+
 include(Compiler/QCC)
 __compiler_qcc(C)
diff --git a/Modules/Compiler/QCC-CXX-FeatureTests.cmake b/Modules/Compiler/QCC-CXX-FeatureTests.cmake
new file mode 100644
index 0000000..c836b94
--- /dev/null
+++ b/Modules/Compiler/QCC-CXX-FeatureTests.cmake
@@ -0,0 +1 @@
+include(Compiler/GNU-CXX-FeatureTests)
diff --git a/Modules/Compiler/QCC-CXX.cmake b/Modules/Compiler/QCC-CXX.cmake
index e86d1fa..0e7314a 100644
--- a/Modules/Compiler/QCC-CXX.cmake
+++ b/Modules/Compiler/QCC-CXX.cmake
@@ -1,3 +1,6 @@
+# To include compiler feature detection
+include(Compiler/GNU-CXX)
+
 include(Compiler/QCC)
 __compiler_qcc(CXX)
 
diff --git a/Modules/DartConfiguration.tcl.in b/Modules/DartConfiguration.tcl.in
index b86a5a9..24e7b55 100644
--- a/Modules/DartConfiguration.tcl.in
+++ b/Modules/DartConfiguration.tcl.in
@@ -20,17 +20,12 @@
 LabelsForSubprojects: @CTEST_LABELS_FOR_SUBPROJECTS@
 
 # Submission information
-IsCDash: @CTEST_DROP_SITE_CDASH@
-CDashVersion: @CTEST_CDASH_VERSION@
-QueryCDashVersion: @CTEST_CDASH_QUERY_VERSION@
 DropSite: @DROP_SITE@
 DropLocation: @DROP_LOCATION@
 DropSiteUser: @DROP_SITE_USER@
 DropSitePassword: @DROP_SITE_PASSWORD@
 DropSiteMode: @DROP_SITE_MODE@
 DropMethod: @DROP_METHOD@
-TriggerSite: @TRIGGER_SITE@
-ScpCommand: @SCPCOMMAND@
 
 # Dashboard start time
 NightlyStartTime: @NIGHTLY_START_TIME@
diff --git a/Modules/FindCUDA.cmake b/Modules/FindCUDA.cmake
index 0f5cab4..228eed4 100644
--- a/Modules/FindCUDA.cmake
+++ b/Modules/FindCUDA.cmake
@@ -875,11 +875,7 @@
 
 if(CUDA_USE_STATIC_CUDA_RUNTIME)
   if(UNIX)
-    # Check for the dependent libraries.  Here we look for pthreads.
-    if (DEFINED CMAKE_THREAD_PREFER_PTHREAD)
-      set(_cuda_cmake_thread_prefer_pthread ${CMAKE_THREAD_PREFER_PTHREAD})
-    endif()
-    set(CMAKE_THREAD_PREFER_PTHREAD 1)
+    # Check for the dependent libraries.
 
     # Many of the FindXYZ CMake comes with makes use of try_compile with int main(){return 0;}
     # as the source file.  Unfortunately this causes a warning with -Wstrict-prototypes and
@@ -890,13 +886,6 @@
     find_package(Threads REQUIRED)
     set(CMAKE_C_FLAGS ${_cuda_cmake_c_flags})
 
-    if (DEFINED _cuda_cmake_thread_prefer_pthread)
-      set(CMAKE_THREAD_PREFER_PTHREAD ${_cuda_cmake_thread_prefer_pthread})
-      unset(_cuda_cmake_thread_prefer_pthread)
-    else()
-      unset(CMAKE_THREAD_PREFER_PTHREAD)
-    endif()
-
     if(NOT APPLE)
       #On Linux, you must link against librt when using the static cuda runtime.
       find_library(CUDA_rt_LIBRARY rt)
diff --git a/Modules/FindCUDA/select_compute_arch.cmake b/Modules/FindCUDA/select_compute_arch.cmake
index 1baf051..7ddb709 100644
--- a/Modules/FindCUDA/select_compute_arch.cmake
+++ b/Modules/FindCUDA/select_compute_arch.cmake
@@ -5,9 +5,9 @@
 #       - "Auto" detects local machine GPU compute arch at runtime.
 #       - "Common" and "All" cover common and entire subsets of architectures
 #      ARCH_AND_PTX : NAME | NUM.NUM | NUM.NUM(NUM.NUM) | NUM.NUM+PTX
-#      NAME: Fermi Kepler Maxwell Kepler+Tegra Kepler+Tesla Maxwell+Tegra Pascal
+#      NAME: Fermi Kepler Maxwell Kepler+Tegra Kepler+Tesla Maxwell+Tegra Pascal Volta Turing
 #      NUM: Any number. Only those pairs are currently accepted by NVCC though:
-#            2.0 2.1 3.0 3.2 3.5 3.7 5.0 5.2 5.3 6.0 6.2
+#            2.0 2.1 3.0 3.2 3.5 3.7 5.0 5.2 5.3 6.0 6.2 7.0 7.2 7.5
 #      Returns LIST of flags to be added to CUDA_NVCC_FLAGS in ${out_variable}
 #      Additionally, sets ${out_variable}_readable to the resulting numeric list
 #      Example:
@@ -63,12 +63,23 @@
 if(CUDA_VERSION VERSION_GREATER_EQUAL "9.0")
   list(APPEND CUDA_KNOWN_GPU_ARCHITECTURES "Volta")
   list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "7.0" "7.0+PTX")
+  list(APPEND CUDA_ALL_GPU_ARCHITECTURES "7.0" "7.0+PTX" "7.2" "7.2+PTX")
 
   if(CUDA_VERSION VERSION_LESS "10.0")
     set(CUDA_LIMIT_GPU_ARCHITECTURE "8.0")
   endif()
 endif()
 
+if(CUDA_VERSION VERSION_GREATER_EQUAL "10.0")
+  list(APPEND CUDA_KNOWN_GPU_ARCHITECTURES "Turing")
+  list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "7.5" "7.5+PTX")
+  list(APPEND CUDA_ALL_GPU_ARCHITECTURES "7.5" "7.5+PTX")
+
+  if(CUDA_VERSION VERSION_LESS "11.0")
+    set(CUDA_LIMIT_GPU_ARCHITECTURE "9.0")
+  endif()
+endif()
+
 ################################################################################################
 # A function for automatic detection of GPUs installed  (if autodetection is enabled)
 # Usage:
@@ -200,6 +211,9 @@
       elseif(${arch_name} STREQUAL "Volta")
         set(arch_bin 7.0 7.0)
         set(arch_ptx 7.0)
+      elseif(${arch_name} STREQUAL "Turing")
+        set(arch_bin 7.5)
+        set(arch_ptx 7.5)
       else()
         message(SEND_ERROR "Unknown CUDA Architecture Name ${arch_name} in CUDA_SELECT_NVCC_ARCH_FLAGS")
       endif()
diff --git a/Modules/FindCURL.cmake b/Modules/FindCURL.cmake
index a4b238d..d28dfea 100644
--- a/Modules/FindCURL.cmake
+++ b/Modules/FindCURL.cmake
@@ -7,6 +7,14 @@
 
 Find the native CURL headers and libraries.
 
+This module accept optional COMPONENTS to check supported features and
+protocols::
+
+  PROTOCOLS: ICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS LDAP LDAPS POP3
+             POP3S RTMP RTSP SCP SFTP SMB SMBS SMTP SMTPS TELNET TFTP
+  FEATURES:  SSL IPv6 UnixSockets libz AsynchDNS IDN GSS-API PSL SPNEGO
+             Kerberos NTLM NTLM_WB TLS-SRP HTTP2 HTTPS-proxy
+
 IMPORTED Targets
 ^^^^^^^^^^^^^^^^
 
@@ -31,8 +39,20 @@
   The version of curl found.
 #]=======================================================================]
 
+find_package(PkgConfig QUIET)
+if(PKG_CONFIG_FOUND)
+  pkg_check_modules(PC_CURL QUIET libcurl)
+  if(PC_CURL_FOUND)
+    set(CURL_VERSION_STRING ${PC_CURL_VERSION})
+    pkg_get_variable(CURL_SUPPORTED_PROTOCOLS libcurl supported_protocols)
+    pkg_get_variable(CURL_SUPPORTED_FEATURES libcurl supported_features)
+  endif()
+endif()
+
 # Look for the header file.
-find_path(CURL_INCLUDE_DIR NAMES curl/curl.h)
+find_path(CURL_INCLUDE_DIR
+          NAMES curl/curl.h
+          HINTS ${PC_CURL_INCLUDE_DIRS})
 mark_as_advanced(CURL_INCLUDE_DIR)
 
 if(NOT CURL_LIBRARY)
@@ -45,6 +65,7 @@
       curllib_static
     # Windows older "Win32 - MSVC" prebuilts (libcurl.lib, e.g. libcurl-7.15.5-win32-msvc.zip):
       libcurl
+      HINTS ${PC_CURL_LIBRARY_DIRS}
   )
   mark_as_advanced(CURL_LIBRARY_RELEASE)
 
@@ -52,6 +73,7 @@
     # Windows MSVC CMake builds in debug configuration on vcpkg:
       libcurl-d_imp
       libcurl-d
+      HINTS ${PC_CURL_LIBRARY_DIRS}
   )
   mark_as_advanced(CURL_LIBRARY_DEBUG)
 
@@ -59,7 +81,7 @@
   select_library_configurations(CURL)
 endif()
 
-if(CURL_INCLUDE_DIR)
+if(CURL_INCLUDE_DIR AND NOT CURL_VERSION_STRING)
   foreach(_curl_version_header curlver.h curl.h)
     if(EXISTS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}")
       file(STRINGS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}" curl_version_str REGEX "^#define[\t ]+LIBCURL_VERSION[\t ]+\".*\"")
@@ -71,10 +93,57 @@
   endforeach()
 endif()
 
+if(CURL_FIND_COMPONENTS)
+  set(CURL_KNOWN_PROTOCOLS ICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS LDAP LDAPS POP3 POP3S RTMP RTSP SCP SFTP SMB SMBS SMTP SMTPS TELNET TFTP)
+  set(CURL_KNOWN_FEATURES  SSL IPv6 UnixSockets libz AsynchDNS IDN GSS-API PSL SPNEGO Kerberos NTLM NTLM_WB TLS-SRP HTTP2 HTTPS-proxy)
+  foreach(component IN LISTS CURL_KNOWN_PROTOCOLS CURL_KNOWN_FEATURES)
+    set(CURL_${component}_FOUND FALSE)
+  endforeach()
+  if(NOT PC_CURL_FOUND)
+    find_program(CURL_CONFIG_EXECUTABLE NAMES curl-config)
+    if(CURL_CONFIG_EXECUTABLE)
+      execute_process(COMMAND ${CURL_CONFIG_EXECUTABLE} --version
+                      OUTPUT_VARIABLE CURL_CONFIG_VERSION_STRING
+                      ERROR_QUIET
+                      OUTPUT_STRIP_TRAILING_WHITESPACE)
+      execute_process(COMMAND ${CURL_CONFIG_EXECUTABLE} --feature
+                      OUTPUT_VARIABLE CURL_CONFIG_FEATURES_STRING
+                      ERROR_QUIET
+                      OUTPUT_STRIP_TRAILING_WHITESPACE)
+      string(REPLACE "\n" ";" CURL_CONFIG_FEATURES "${CURL_CONFIG_FEATURES_STRING}")
+      execute_process(COMMAND ${CURL_CONFIG_EXECUTABLE} --protocols
+                      OUTPUT_VARIABLE CURL_CONFIG_PROTOCOLS_STRING
+                      ERROR_QUIET
+                      OUTPUT_STRIP_TRAILING_WHITESPACE)
+      string(REPLACE "\n" ";" CURL_CONFIG_PROTOCOLS "${CURL_CONFIG_PROTOCOLS_STRING}")
+    endif()
+
+  endif()
+  foreach(component IN LISTS CURL_FIND_COMPONENTS)
+    list(FIND CURL_KNOWN_PROTOCOLS ${component} _found)
+    if(_found)
+      list(FIND CURL_SUPPORTED_PROTOCOLS ${component} _found)
+      if(_found)
+        set(CURL_${component}_FOUND TRUE)
+      elseif(CURL_FIND_REQUIRED)
+        message(FATAL_ERROR "CURL: Required protocol ${component} is not found")
+      endif()
+    else()
+      list(FIND CURL_SUPPORTED_FEATURES ${component} _found)
+      if(_found)
+        set(CURL_${component}_FOUND TRUE)
+      elseif(CURL_FIND_REQUIRED)
+        message(FATAL_ERROR "CURL: Required feature ${component} is not found")
+      endif()
+    endif()
+  endforeach()
+endif()
+
 include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(CURL
+find_package_handle_standard_args(CURL
                                   REQUIRED_VARS CURL_LIBRARY CURL_INCLUDE_DIR
-                                  VERSION_VAR CURL_VERSION_STRING)
+                                  VERSION_VAR CURL_VERSION_STRING
+                                  HANDLE_COMPONENTS)
 
 if(CURL_FOUND)
   set(CURL_LIBRARIES ${CURL_LIBRARY})
diff --git a/Modules/FindDCMTK.cmake b/Modules/FindDCMTK.cmake
index 302c089..111e0ff 100644
--- a/Modules/FindDCMTK.cmake
+++ b/Modules/FindDCMTK.cmake
@@ -200,7 +200,6 @@
   # Hack - Not having a DCMTKConfig.cmake file to read the settings from, we will attempt to
   # find the library in all cases.
   # Ideally, pthread library should be discovered only if DCMTK_WITH_THREADS is enabled.
-  set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
   find_package(Threads)
 endif()
 
diff --git a/Modules/FindHDF5.cmake b/Modules/FindHDF5.cmake
index e36767a..2772b7d 100644
--- a/Modules/FindHDF5.cmake
+++ b/Modules/FindHDF5.cmake
@@ -818,7 +818,7 @@
                     set( THIS_LIBRARY_SEARCH_DEBUG
                         lib${LIB}d.a lib${LIB}_debug.a lib${LIB}d lib${LIB}_D lib${LIB}_debug
                         lib${LIB}d-static.a lib${LIB}_debug-static.a lib${LIB}d-static lib${LIB}_D-static lib${LIB}_debug-static )
-                    set( THIS_LIBRARY_SEARCH_RELEASE lib${LIB}.a ${LIB} lib${LIB}-static.a lib${LIB}-static)
+                    set( THIS_LIBRARY_SEARCH_RELEASE lib${LIB}.a lib${LIB} lib${LIB}-static.a lib${LIB}-static)
                 else()
                     set( THIS_LIBRARY_SEARCH_DEBUG ${LIB}d ${LIB}_D ${LIB}_debug ${LIB}d-shared ${LIB}_D-shared ${LIB}_debug-shared)
                     set( THIS_LIBRARY_SEARCH_RELEASE ${LIB} ${LIB}-shared)
diff --git a/Modules/FindOctave.cmake b/Modules/FindOctave.cmake
new file mode 100644
index 0000000..8ae6a47
--- /dev/null
+++ b/Modules/FindOctave.cmake
@@ -0,0 +1,167 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindOctave
+----------
+
+Finds GNU Octave interpreter, libraries and compilers.
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+This module defines the following :prop_tgt:`IMPORTED` targets:
+
+``Octave::Interpreter``
+  Octave interpreter (the main program)
+``Octave::Octave``
+  include directories and libraries
+
+If no ``COMPONENTS`` are specified, ``Interpreter`` is assumed.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+``Octave_FOUND``
+  Octave interpreter and/or libraries were found
+``Octave_<component>_FOUND``
+  Octave <component> specified was found
+
+``Octave_EXECUTABLE``
+  Octave interpreter
+``Octave_INCLUDE_DIRS``
+  include path for mex.h
+``Octave_LIBRARIES``
+  octinterp, octave libraries
+
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``Octave_INTERP_LIBRARY``
+  path to the library octinterp
+``Octave_OCTAVE_LIBRARY``
+  path to the liboctave library
+
+#]=======================================================================]
+
+cmake_policy(VERSION 3.3)
+
+unset(Octave_REQUIRED_VARS)
+unset(Octave_Development_FOUND)
+unset(Octave_Interpreter_FOUND)
+set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME Interpreter)
+
+if(Development IN_LIST Octave_FIND_COMPONENTS)
+  find_program(Octave_CONFIG_EXECUTABLE
+               NAMES octave-config)
+
+  if(Octave_CONFIG_EXECUTABLE)
+
+    execute_process(COMMAND ${Octave_CONFIG_EXECUTABLE} -p BINDIR
+                    OUTPUT_VARIABLE Octave_BINARY_DIR
+                    ERROR_QUIET
+                    OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+    execute_process(COMMAND ${Octave_CONFIG_EXECUTABLE} -p OCTINCLUDEDIR
+                    OUTPUT_VARIABLE Octave_INCLUDE_DIR
+                    ERROR_QUIET
+                    OUTPUT_STRIP_TRAILING_WHITESPACE)
+    list(APPEND Octave_REQUIRED_VARS ${Octave_INCLUDE_DIR})
+
+    execute_process(COMMAND ${Octave_CONFIG_EXECUTABLE} -p OCTLIBDIR
+                    OUTPUT_VARIABLE Octave_LIB1
+                    ERROR_QUIET
+                    OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+    execute_process(COMMAND ${Octave_CONFIG_EXECUTABLE} -p LIBDIR
+                    OUTPUT_VARIABLE Octave_LIB2
+                    ERROR_QUIET
+                    OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+    find_library(Octave_INTERP_LIBRARY
+               NAMES octinterp
+               PATHS ${Octave_LIB1} ${Octave_LIB2}
+               NO_DEFAULT_PATH
+              )
+    find_library(Octave_OCTAVE_LIBRARY
+                 NAMES octave
+                 PATHS ${Octave_LIB1} ${Octave_LIB2}
+                 NO_DEFAULT_PATH
+                )
+    list(APPEND Octave_REQUIRED_VARS ${Octave_OCTAVE_LIBRARY} ${Octave_INTERP_LIBRARY})
+
+    if(Octave_REQUIRED_VARS)
+      set(Octave_Development_FOUND true)
+    endif()
+  endif(Octave_CONFIG_EXECUTABLE)
+endif()
+
+if(Interpreter IN_LIST Octave_FIND_COMPONENTS)
+
+  find_program(Octave_EXECUTABLE
+               NAMES octave)
+
+  list(APPEND Octave_REQUIRED_VARS ${Octave_EXECUTABLE})
+
+endif()
+
+if(Octave_EXECUTABLE)
+  execute_process(COMMAND ${Octave_EXECUTABLE} -v
+                  OUTPUT_VARIABLE Octave_VERSION
+                  ERROR_QUIET
+                  OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+
+  string(REGEX REPLACE "GNU Octave, version ([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" Octave_VERSION_MAJOR ${Octave_VERSION})
+  string(REGEX REPLACE "GNU Octave, version [0-9]+\\.([0-9]+)\\.[0-9]+.*" "\\1" Octave_VERSION_MINOR ${Octave_VERSION})
+  string(REGEX REPLACE "GNU Octave, version [0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" Octave_VERSION_PATCH ${Octave_VERSION})
+
+  set(Octave_VERSION ${Octave_VERSION_MAJOR}.${Octave_VERSION_MINOR}.${Octave_VERSION_PATCH})
+
+  set(Octave_Interpreter_FOUND true)
+
+endif(Octave_EXECUTABLE)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Octave
+  REQUIRED_VARS Octave_REQUIRED_VARS
+  VERSION_VAR Octave_VERSION
+  HANDLE_COMPONENTS)
+
+
+if(Octave_Development_FOUND)
+  set(Octave_LIBRARIES ${Octave_INTERP_LIBRARY} ${Octave_OCTAVE_LIBRARY})
+  set(Octave_INCLUDE_DIRS ${Octave_INCLUDE_DIR})
+
+  if(NOT TARGET Octave::Octave)
+    add_library(Octave::Octave UNKNOWN IMPORTED)
+    set_target_properties(Octave::Octave PROPERTIES
+                          IMPORTED_LOCATION ${Octave_OCTAVE_LIBRARY}
+                          INTERFACE_INCLUDE_DIRECTORIES ${Octave_INCLUDE_DIR}
+                         )
+  endif()
+
+endif()
+
+
+if(Octave_Interpreter_FOUND)
+  if(NOT TARGET Octave::Interpreter)
+    add_executable(Octave::Interpreter IMPORTED)
+    set_target_properties(Octave::Interpreter PROPERTIES
+                          IMPORTED_LOCATION ${Octave_EXECUTABLE}
+                          VERSION ${Octave_VERSION})
+  endif()
+endif()
+
+mark_as_advanced(
+  Octave_CONFIG_EXECUTABLE
+  Octave_INTERP_LIBRARY
+  Octave_OCTAVE_LIBRARY
+  Octave_INCLUDE_DIR
+  Octave_VERSION_MAJOR
+  Octave_VERSION_MINOR
+  Octave_VERSION_PATCH
+)
diff --git a/Modules/FindThreads.cmake b/Modules/FindThreads.cmake
index dfb683f..9c96a1b 100644
--- a/Modules/FindThreads.cmake
+++ b/Modules/FindThreads.cmake
@@ -12,7 +12,6 @@
 ::
 
   CMAKE_THREAD_LIBS_INIT     - the thread library
-  CMAKE_USE_SPROC_INIT       - are we using sproc?
   CMAKE_USE_WIN32_THREADS_INIT - using WIN32 threads?
   CMAKE_USE_PTHREADS_INIT    - are we using pthreads
   CMAKE_HP_PTHREADS_INIT     - are we using hp pthreads
@@ -23,12 +22,6 @@
 
   Threads::Threads
 
-For systems with multiple thread libraries, caller can set
-
-::
-
-  CMAKE_THREAD_PREFER_PTHREAD
-
 If the use of the -pthread compiler and linker flag is preferred then the
 caller can set
 
@@ -55,12 +48,6 @@
   message(FATAL_ERROR "FindThreads only works if either C or CXX language is enabled")
 endif()
 
-# Do we have sproc?
-if(CMAKE_SYSTEM_NAME MATCHES IRIX AND NOT CMAKE_THREAD_PREFER_PTHREAD)
-  include (CheckIncludeFiles)
-  CHECK_INCLUDE_FILES("sys/types.h;sys/prctl.h"  CMAKE_HAVE_SPROC_H)
-endif()
-
 # Internal helper macro.
 # Do NOT even think about using it outside of this file!
 macro(_check_threads_lib LIBNAME FUNCNAME VARNAME)
@@ -113,53 +100,56 @@
   endif()
 endmacro()
 
-if(CMAKE_HAVE_SPROC_H AND NOT CMAKE_THREAD_PREFER_PTHREAD)
-  # We have sproc
-  set(CMAKE_USE_SPROC_INIT 1)
+# Do we have pthreads?
+if(CMAKE_C_COMPILER_LOADED)
+  CHECK_INCLUDE_FILE("pthread.h" CMAKE_HAVE_PTHREAD_H)
 else()
-  # Do we have pthreads?
-  if(CMAKE_C_COMPILER_LOADED)
-    CHECK_INCLUDE_FILE("pthread.h" CMAKE_HAVE_PTHREAD_H)
-  else()
-    CHECK_INCLUDE_FILE_CXX("pthread.h" CMAKE_HAVE_PTHREAD_H)
-  endif()
-  if(CMAKE_HAVE_PTHREAD_H)
+  CHECK_INCLUDE_FILE_CXX("pthread.h" CMAKE_HAVE_PTHREAD_H)
+endif()
+if(CMAKE_HAVE_PTHREAD_H)
 
-    #
-    # We have pthread.h
-    # Let's check for the library now.
-    #
-    set(CMAKE_HAVE_THREADS_LIBRARY)
-    if(NOT THREADS_HAVE_PTHREAD_ARG)
-      # Check if pthread functions are in normal C library
-      CHECK_SYMBOL_EXISTS(pthread_create pthread.h CMAKE_HAVE_LIBC_CREATE)
-      if(CMAKE_HAVE_LIBC_CREATE)
-        set(CMAKE_THREAD_LIBS_INIT "")
-        set(CMAKE_HAVE_THREADS_LIBRARY 1)
-        set(Threads_FOUND TRUE)
-      else()
+  #
+  # We have pthread.h
+  # Let's check for the library now.
+  #
+  set(CMAKE_HAVE_THREADS_LIBRARY)
+  if(NOT THREADS_HAVE_PTHREAD_ARG)
+    # Check if pthread functions are in normal C library.
+    # If the pthread functions already exist in C library, we could just use
+    # them instead of linking to the additional pthread library. We could
+    # try to check any pthread symbol name, but here is an exception. If we
+    # use clang asan build, we will find the pthread_create() symbol in the
+    # libc(libasan). However, it doesn't have the full pthread implementation.
+    # So, we can't assume that we have the pthread implementation in libc
+    # using the pthread_create() checking here. Then, we turn to check the
+    # pthread_kill() symbol instead.
+    CHECK_SYMBOL_EXISTS(pthread_kill pthread.h CMAKE_HAVE_LIBC_PTHREAD_KILL)
+    if(CMAKE_HAVE_LIBC_PTHREAD_KILL)
+      set(CMAKE_THREAD_LIBS_INIT "")
+      set(CMAKE_HAVE_THREADS_LIBRARY 1)
+      set(Threads_FOUND TRUE)
+    else()
 
-        # Check for -pthread first if enabled. This is the recommended
-        # way, but not backwards compatible as one must also pass -pthread
-        # as compiler flag then.
-        if (THREADS_PREFER_PTHREAD_FLAG)
-           _check_pthreads_flag()
-        endif ()
+      # Check for -pthread first if enabled. This is the recommended
+      # way, but not backwards compatible as one must also pass -pthread
+      # as compiler flag then.
+      if (THREADS_PREFER_PTHREAD_FLAG)
+         _check_pthreads_flag()
+      endif ()
 
-        _check_threads_lib(pthreads pthread_create CMAKE_HAVE_PTHREADS_CREATE)
-        _check_threads_lib(pthread  pthread_create CMAKE_HAVE_PTHREAD_CREATE)
-        if(CMAKE_SYSTEM_NAME MATCHES "SunOS")
-            # On sun also check for -lthread
-            _check_threads_lib(thread thr_create CMAKE_HAVE_THR_CREATE)
-        endif()
+      _check_threads_lib(pthreads pthread_create CMAKE_HAVE_PTHREADS_CREATE)
+      _check_threads_lib(pthread  pthread_create CMAKE_HAVE_PTHREAD_CREATE)
+      if(CMAKE_SYSTEM_NAME MATCHES "SunOS")
+          # On sun also check for -lthread
+          _check_threads_lib(thread thr_create CMAKE_HAVE_THR_CREATE)
       endif()
     endif()
-
-    _check_pthreads_flag()
   endif()
+
+  _check_pthreads_flag()
 endif()
 
-if(CMAKE_THREAD_LIBS_INIT OR CMAKE_HAVE_LIBC_CREATE)
+if(CMAKE_THREAD_LIBS_INIT OR CMAKE_HAVE_LIBC_PTHREAD_KILL)
   set(CMAKE_USE_PTHREADS_INIT 1)
   set(Threads_FOUND TRUE)
 endif()
diff --git a/Modules/Internal/CPack/CPackDeb.cmake b/Modules/Internal/CPack/CPackDeb.cmake
index 3042a16..89dc6f0 100644
--- a/Modules/Internal/CPack/CPackDeb.cmake
+++ b/Modules/Internal/CPack/CPackDeb.cmake
@@ -482,13 +482,16 @@
   endif()
 
   if(CPACK_DEBIAN_ARCHIVE_TYPE)
-    set(archive_types_ "paxr;gnutar")
-    if(NOT CPACK_DEBIAN_ARCHIVE_TYPE IN_LIST archive_types_)
+    if(CPACK_DEBIAN_ARCHIVE_TYPE STREQUAL "paxr")
+      message(DEPRECATION "CPACK_DEBIAN_ARCHIVE_TYPE set to old and invalid "
+        "type 'paxr', mapping to 'gnutar'")
+      set(CPACK_DEBIAN_ARCHIVE_TYPE "gnutar")
+    elseif(NOT CPACK_DEBIAN_ARCHIVE_TYPE STREQUAL "gnutar")
       message(FATAL_ERROR "CPACK_DEBIAN_ARCHIVE_TYPE set to unsupported"
         "type ${CPACK_DEBIAN_ARCHIVE_TYPE}")
     endif()
   else()
-    set(CPACK_DEBIAN_ARCHIVE_TYPE "paxr")
+    set(CPACK_DEBIAN_ARCHIVE_TYPE "gnutar")
   endif()
 
   # Compression: (recommended)
diff --git a/Modules/Qt4ConfigDependentSettings.cmake b/Modules/Qt4ConfigDependentSettings.cmake
index 684ec21..4699ecd 100644
--- a/Modules/Qt4ConfigDependentSettings.cmake
+++ b/Modules/Qt4ConfigDependentSettings.cmake
@@ -256,7 +256,6 @@
   # X11 libraries Qt always depends on
   set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_Xext_LIB} ${X11_X11_LIB})
 
-  set(CMAKE_THREAD_PREFER_PTHREAD 1)
   find_package(Threads)
   if(CMAKE_USE_PTHREADS_INIT)
     set(QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES} ${CMAKE_THREAD_LIBS_INIT})
diff --git a/Modules/UseEcos.cmake b/Modules/UseEcos.cmake
index 6d13d42..9f84847 100644
--- a/Modules/UseEcos.cmake
+++ b/Modules/UseEcos.cmake
@@ -191,8 +191,8 @@
    set(CMAKE_CXX_LINK_EXECUTABLE  "<CMAKE_CXX_COMPILER> <CMAKE_CXX_LINK_FLAGS> <OBJECTS>  -o <TARGET> ${_ecos_EXTRA_LIBS} -nostdlib  -nostartfiles -L${CMAKE_CURRENT_BINARY_DIR}/ecos/install/lib -Ttarget.ld ${ECOS_LD_MCPU}")
    set(CMAKE_C_LINK_EXECUTABLE    "<CMAKE_C_COMPILER>   <CMAKE_C_LINK_FLAGS>   <OBJECTS>  -o <TARGET> ${_ecos_EXTRA_LIBS} -nostdlib  -nostartfiles -L${CMAKE_CURRENT_BINARY_DIR}/ecos/install/lib -Ttarget.ld ${ECOS_LD_MCPU}")
 # some strict compiler flags
-   set (CMAKE_C_FLAGS "-Wstrict-prototypes")
-   set (CMAKE_CXX_FLAGS "-Woverloaded-virtual -fno-rtti -Wctor-dtor-privacy -fno-strict-aliasing -fno-exceptions")
+   set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wstrict-prototypes")
+   set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual -fno-rtti -Wctor-dtor-privacy -fno-strict-aliasing -fno-exceptions")
 
    add_executable(${_exe_NAME} ${ARGN})
    set_target_properties(${_exe_NAME} PROPERTIES SUFFIX ".elf")
diff --git a/Modules/UseSWIG.cmake b/Modules/UseSWIG.cmake
index d9a0389..a3d6d9e 100644
--- a/Modules/UseSWIG.cmake
+++ b/Modules/UseSWIG.cmake
@@ -142,6 +142,11 @@
 
     set_property(SOURCE mymod.i PROPERTY SWIG_MODULE_NAME mymod_realname)
 
+  .. note::
+
+    If policy :policy:`CMP0086` is set to ``NEW``, ``-module <module_name>``
+    is passed to ``SWIG`` compiler.
+
 Target library properties can be set to apply same configuration to all SWIG
 input files.
 
@@ -220,12 +225,19 @@
 #]=======================================================================]
 
 cmake_policy(GET CMP0078 target_name_policy)
+cmake_policy(GET CMP0086 module_name_policy)
+
 cmake_policy (VERSION 3.12)
 if (target_name_policy)
   # respect user choice regarding CMP0078 policy
   cmake_policy(SET CMP0078 ${target_name_policy})
 endif()
+if (module_name_policy)
+  # respect user choice regarding CMP0086 policy
+  cmake_policy(SET CMP0086 ${module_name_policy})
+endif()
 unset(target_name_policy)
+unset(module_name_policy)
 
 set(SWIG_CXX_EXTENSION "cxx")
 set(SWIG_EXTRA_LIBRARIES "")
@@ -426,6 +438,19 @@
     list (APPEND swig_special_flags "-c++")
   endif()
 
+  cmake_policy(GET CMP0086 module_name_policy)
+  if (module_name_policy STREQUAL "NEW")
+    get_source_file_property(module_name "${infile}" SWIG_MODULE_NAME)
+    if (module_name)
+      list (APPEND swig_special_flags "-module" "${module_name}")
+    endif()
+  else()
+    if (NOT module_name_policy)
+      cmake_policy(GET_WARNING CMP0086 _cmp0086_warning)
+      message(AUTHOR_WARNING "${_cmp0086_warning}\n")
+    endif()
+  endif()
+
   set (swig_extra_flags)
   if(SWIG_MODULE_${name}_LANGUAGE STREQUAL "CSHARP")
     if(NOT ("-dllimport" IN_LIST swig_source_file_flags OR "-dllimport" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS))
diff --git a/Modules/WriteBasicConfigVersionFile.cmake b/Modules/WriteBasicConfigVersionFile.cmake
index 1f13096..45f9e58 100644
--- a/Modules/WriteBasicConfigVersionFile.cmake
+++ b/Modules/WriteBasicConfigVersionFile.cmake
@@ -15,6 +15,7 @@
   WRITE_BASIC_CONFIG_VERSION_FILE( filename
     [VERSION major.minor.patch]
     COMPATIBILITY (AnyNewerVersion|SameMajorVersion|SameMinorVersion|ExactVersion)
+    [ARCH_INDEPENDENT]
     )
 
 
@@ -22,7 +23,7 @@
 
 function(WRITE_BASIC_CONFIG_VERSION_FILE _filename)
 
-  set(options )
+  set(options ARCH_INDEPENDENT )
   set(oneValueArgs VERSION COMPATIBILITY )
   set(multiValueArgs )
 
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
index 035b7a0..e86cc2f 100644
--- a/Source/CMakeLists.txt
+++ b/Source/CMakeLists.txt
@@ -821,7 +821,6 @@
 #
 include_directories(
   "${CMake_SOURCE_DIR}/Source/CTest"
-  ${CMAKE_XMLRPC_INCLUDES}
   ${CMAKE_CURL_INCLUDES}
   )
 #
@@ -887,7 +886,7 @@
 
 # Build CTestLib
 add_library(CTestLib ${CTEST_SRCS})
-target_link_libraries(CTestLib CMakeLib ${CMAKE_CURL_LIBRARIES} ${CMAKE_XMLRPC_LIBRARIES})
+target_link_libraries(CTestLib CMakeLib ${CMAKE_CURL_LIBRARIES})
 
 #
 # CPack
diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake
index e4f11ed..b43f9fd 100644
--- a/Source/CMakeVersion.cmake
+++ b/Source/CMakeVersion.cmake
@@ -1,5 +1,5 @@
 # CMake version number components.
 set(CMake_VERSION_MAJOR 3)
 set(CMake_VERSION_MINOR 13)
-set(CMake_VERSION_PATCH 20181206)
+set(CMake_VERSION_PATCH 20181213)
 #set(CMake_VERSION_RC 1)
diff --git a/Source/CPack/cmCPackDebGenerator.cxx b/Source/CPack/cmCPackDebGenerator.cxx
index ea0ee58..29968af 100644
--- a/Source/CPack/cmCPackDebGenerator.cxx
+++ b/Source/CPack/cmCPackDebGenerator.cxx
@@ -80,7 +80,7 @@
   , WorkDir(workDir)
   , TopLevelDir(topLevelDir)
   , TemporaryDir(temporaryDir)
-  , DebianArchiveType(debianArchiveType ? debianArchiveType : "paxr")
+  , DebianArchiveType(debianArchiveType ? debianArchiveType : "gnutar")
   , ControlValues(controlValues)
   , GenShLibs(genShLibs)
   , ShLibsFilename(shLibsFilename)
diff --git a/Source/CPack/cmCPackFreeBSDGenerator.cxx b/Source/CPack/cmCPackFreeBSDGenerator.cxx
index 1433414..2fcd1a8 100644
--- a/Source/CPack/cmCPackFreeBSDGenerator.cxx
+++ b/Source/CPack/cmCPackFreeBSDGenerator.cxx
@@ -55,8 +55,7 @@
                                   const EscapeQuotes& v)
 {
   s << '"';
-  for (std::string::size_type i = 0; i < v.value.length(); ++i) {
-    char c = v.value[i];
+  for (char c : v.value) {
     switch (c) {
       case '\n':
         s << "\\n";
@@ -148,8 +147,8 @@
 
   ManifestKeyListValue& operator<<(const std::vector<std::string>& v)
   {
-    for (VList::const_iterator it = v.begin(); it != v.end(); ++it) {
-      (*this) << (*it);
+    for (std::string const& e : v) {
+      (*this) << e;
     }
     return *this;
   }
@@ -159,9 +158,9 @@
     bool with_comma = false;
 
     s << '[';
-    for (VList::const_iterator it = value.begin(); it != value.end(); ++it) {
+    for (std::string const& elem : value) {
       s << (with_comma ? ',' : ' ');
-      s << EscapeQuotes(*it);
+      s << EscapeQuotes(elem);
       with_comma = true;
     }
     s << " ]";
@@ -182,8 +181,8 @@
   void write_value(cmGeneratedFileStream& s) const override
   {
     s << "{\n";
-    for (VList::const_iterator it = value.begin(); it != value.end(); ++it) {
-      s << "  \"" << *it << "\": {\"origin\": \"" << *it << "\"},\n";
+    for (std::string const& elem : value) {
+      s << "  \"" << elem << "\": {\"origin\": \"" << elem << "\"},\n";
     }
     s << '}';
   }
@@ -206,9 +205,8 @@
   const char* pv = this->GetOption(var_name);
   if (!pv) {
     return std::string();
-  } else {
-    return pv;
   }
+  return pv;
 }
 
 // Produce UCL in the given @p manifest file for the common
@@ -234,7 +232,7 @@
   cmSystemTools::ExpandListArgument(
     var_lookup("CPACK_FREEBSD_PACKAGE_LICENSE"), licenses);
   std::string licenselogic("single");
-  if (licenses.size() < 1) {
+  if (licenses.empty()) {
     cmSystemTools::SetFatalErrorOccured();
   } else if (licenses.size() > 1) {
     licenselogic = var_lookup("CPACK_FREEBSD_PACKAGE_LICENSE_LOGIC");
@@ -249,7 +247,7 @@
   std::vector<std::string> deps;
   cmSystemTools::ExpandListArgument(var_lookup("CPACK_FREEBSD_PACKAGE_DEPS"),
                                     deps);
-  if (deps.size() > 0) {
+  if (!deps.empty()) {
     manifest << (ManifestKeyDepsValue("deps") << deps);
   }
 }
@@ -277,13 +275,9 @@
                           const std::string& toplevel,
                           const std::vector<std::string>& files)
 {
-  const char* c_toplevel = toplevel.c_str();
-  std::vector<std::string>::const_iterator it;
-
   s << "\"files\": {\n";
-  for (it = files.begin(); it != files.end(); ++it) {
-    s << "  \"/" << cmSystemTools::RelativePath(c_toplevel, it->c_str())
-      << "\": \""
+  for (std::string const& file : files) {
+    s << "  \"/" << cmSystemTools::RelativePath(toplevel, file) << "\": \""
       << "<sha256>"
       << "\",\n";
   }
@@ -313,7 +307,7 @@
 
   std::string manifestname = toplevel + "/+MANIFEST";
   {
-    cmGeneratedFileStream manifest(manifestname.c_str());
+    cmGeneratedFileStream manifest(manifestname);
     manifest << "{\n";
     write_manifest_fields(manifest);
     write_manifest_files(manifest, toplevel, files);
@@ -340,16 +334,15 @@
   std::string output_dir =
     cmSystemTools::CollapseCombinedPath(toplevel, "../");
   pkg_create_from_manifest(output_dir.c_str(), ::TXZ, toplevel.c_str(),
-                           manifestname.c_str(), NULL);
+                           manifestname.c_str(), nullptr);
 
   std::string broken_suffix = std::string("-") +
     var_lookup("CPACK_TOPLEVEL_TAG") + std::string(GetOutputExtension());
-  for (std::vector<std::string>::iterator it = packageFileNames.begin();
-       it != packageFileNames.end(); ++it) {
-    cmCPackLogger(cmCPackLog::LOG_DEBUG, "Packagefile " << *it << std::endl);
-    if (has_suffix(*it, broken_suffix)) {
-      it->replace(it->size() - broken_suffix.size(), std::string::npos,
-                  GetOutputExtension());
+  for (std::string& name : packageFileNames) {
+    cmCPackLogger(cmCPackLog::LOG_DEBUG, "Packagefile " << name << std::endl);
+    if (has_suffix(name, broken_suffix)) {
+      name.replace(name.size() - broken_suffix.size(), std::string::npos,
+                   GetOutputExtension());
       break;
     }
   }
diff --git a/Source/CPack/cmCPackPKGGenerator.cxx b/Source/CPack/cmCPackPKGGenerator.cxx
index bdda386..9401bca 100644
--- a/Source/CPack/cmCPackPKGGenerator.cxx
+++ b/Source/CPack/cmCPackPKGGenerator.cxx
@@ -225,7 +225,8 @@
     xout.Content(this->GetPackageName(component));
   } else {
     xout.Content("file:./");
-    xout.Content(relativePackageLocation);
+    xout.Content(cmSystemTools::EncodeURL(relativePackageLocation,
+                                          /*escapeSlashes=*/false));
   }
   xout.EndElement(); // pkg-ref
 }
diff --git a/Source/CPack/cpack.cxx b/Source/CPack/cpack.cxx
index 7cf69fc..4e49727 100644
--- a/Source/CPack/cpack.cxx
+++ b/Source/CPack/cpack.cxx
@@ -89,6 +89,15 @@
   return 1;
 }
 
+static void cpackProgressCallback(const char* message, float progress,
+                                  void* clientdata)
+{
+  (void)progress;
+  (void)clientdata;
+
+  std::cout << "-- " << message << std::endl;
+}
+
 // this is CPack.
 int main(int argc, char const* const* argv)
 {
@@ -202,6 +211,7 @@
   cmake cminst(cmake::RoleScript);
   cminst.SetHomeDirectory("");
   cminst.SetHomeOutputDirectory("");
+  cminst.SetProgressCallback(cpackProgressCallback, nullptr);
   cminst.GetCurrentSnapshot().SetDefaultDefinitions();
   cmGlobalGenerator cmgg(&cminst);
   cmMakefile globalMF(&cmgg, cminst.GetCurrentSnapshot());
diff --git a/Source/CTest/cmCTestHandlerCommand.cxx b/Source/CTest/cmCTestHandlerCommand.cxx
index 667a8ba..c63694d 100644
--- a/Source/CTest/cmCTestHandlerCommand.cxx
+++ b/Source/CTest/cmCTestHandlerCommand.cxx
@@ -206,18 +206,7 @@
 
   handler->PopulateCustomVectors(this->Makefile);
   if (this->Values[ct_SUBMIT_INDEX]) {
-    if (!this->CTest->GetDropSiteCDash() &&
-        this->CTest->GetDartVersion() <= 1) {
-      cmCTestLog(
-        this->CTest, ERROR_MESSAGE,
-        "Dart before version 2.0 does not support collecting submissions."
-          << std::endl
-          << "Please upgrade the server to Dart 2 or higher, or do not use "
-             "SUBMIT_INDEX."
-          << std::endl);
-    } else {
-      handler->SetSubmitIndex(atoi(this->Values[ct_SUBMIT_INDEX]));
-    }
+    handler->SetSubmitIndex(atoi(this->Values[ct_SUBMIT_INDEX]));
   }
   cmWorkingDirectory workdir(
     this->CTest->GetCTestConfiguration("BuildDirectory"));
diff --git a/Source/CTest/cmCTestSubmitCommand.cxx b/Source/CTest/cmCTestSubmitCommand.cxx
index 60029ab..43bd636 100644
--- a/Source/CTest/cmCTestSubmitCommand.cxx
+++ b/Source/CTest/cmCTestSubmitCommand.cxx
@@ -20,9 +20,6 @@
   const char* ctestDropSite = this->Makefile->GetDefinition("CTEST_DROP_SITE");
   const char* ctestDropLocation =
     this->Makefile->GetDefinition("CTEST_DROP_LOCATION");
-  const char* ctestTriggerSite =
-    this->Makefile->GetDefinition("CTEST_TRIGGER_SITE");
-  bool ctestDropSiteCDash = this->Makefile->IsOn("CTEST_DROP_SITE_CDASH");
   if (!ctestDropMethod) {
     ctestDropMethod = "http";
   }
@@ -41,16 +38,6 @@
   this->CTest->SetCTestConfiguration("DropLocation", ctestDropLocation,
                                      this->Quiet);
 
-  this->CTest->SetCTestConfiguration(
-    "IsCDash", ctestDropSiteCDash ? "TRUE" : "FALSE", this->Quiet);
-
-  // Only propagate TriggerSite for non-CDash projects:
-  //
-  if (!ctestDropSiteCDash) {
-    this->CTest->SetCTestConfiguration("TriggerSite", ctestTriggerSite,
-                                       this->Quiet);
-  }
-
   this->CTest->SetCTestConfigurationFromCMakeVariable(
     this->Makefile, "CurlOptions", "CTEST_CURL_OPTIONS", this->Quiet);
   this->CTest->SetCTestConfigurationFromCMakeVariable(
@@ -58,8 +45,6 @@
   this->CTest->SetCTestConfigurationFromCMakeVariable(
     this->Makefile, "DropSitePassword", "CTEST_DROP_SITE_PASSWORD",
     this->Quiet);
-  this->CTest->SetCTestConfigurationFromCMakeVariable(
-    this->Makefile, "ScpCommand", "CTEST_SCP_COMMAND", this->Quiet);
 
   const char* notesFilesVariable =
     this->Makefile->GetDefinition("CTEST_NOTES_FILES");
diff --git a/Source/CTest/cmCTestSubmitHandler.cxx b/Source/CTest/cmCTestSubmitHandler.cxx
index 061c8ef..67c669c 100644
--- a/Source/CTest/cmCTestSubmitHandler.cxx
+++ b/Source/CTest/cmCTestSubmitHandler.cxx
@@ -5,9 +5,7 @@
 #include "cm_curl.h"
 #include "cm_jsoncpp_reader.h"
 #include "cm_jsoncpp_value.h"
-#include "cmsys/Process.h"
 #include <chrono>
-#include <cstring>
 #include <sstream>
 #include <stdio.h>
 #include <stdlib.h>
@@ -20,20 +18,11 @@
 #include "cmCurl.h"
 #include "cmDuration.h"
 #include "cmGeneratedFileStream.h"
-#include "cmProcessOutput.h"
 #include "cmState.h"
 #include "cmSystemTools.h"
-#include "cmThirdParty.h"
-#include "cmWorkingDirectory.h"
 #include "cmXMLParser.h"
 #include "cmake.h"
 
-#if defined(CTEST_USE_XMLRPC)
-#  include "cmVersion.h"
-#  include "cm_sys_stat.h"
-#  include "cm_xmlrpc.h"
-#endif
-
 #define SUBMIT_TIMEOUT_IN_SECONDS_DEFAULT 120
 
 typedef std::vector<char> cmCTestSubmitHandlerVectorOfChar;
@@ -131,7 +120,6 @@
 
 cmCTestSubmitHandler::cmCTestSubmitHandler()
   : HTTPProxy()
-  , FTPProxy()
 {
   this->Initialize();
 }
@@ -143,165 +131,16 @@
        p = cmCTest::Part(p + 1)) {
     this->SubmitPart[p] = true;
   }
-  this->CDash = false;
   this->HasWarnings = false;
   this->HasErrors = false;
   this->Superclass::Initialize();
   this->HTTPProxy.clear();
   this->HTTPProxyType = 0;
   this->HTTPProxyAuth.clear();
-  this->FTPProxy.clear();
-  this->FTPProxyType = 0;
   this->LogFile = nullptr;
   this->Files.clear();
 }
 
-bool cmCTestSubmitHandler::SubmitUsingFTP(
-  const std::string& localprefix, const std::vector<std::string>& files,
-  const std::string& remoteprefix, const std::string& url)
-{
-  CURL* curl;
-  CURLcode res;
-  FILE* ftpfile;
-  char error_buffer[1024];
-
-  /* In windows, this will init the winsock stuff */
-  ::curl_global_init(CURL_GLOBAL_ALL);
-
-  for (std::string const& file : files) {
-    /* get a curl handle */
-    curl = curl_easy_init();
-    if (curl) {
-      // Using proxy
-      if (this->FTPProxyType > 0) {
-        curl_easy_setopt(curl, CURLOPT_PROXY, this->FTPProxy.c_str());
-        switch (this->FTPProxyType) {
-          case 2:
-            curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
-            break;
-          case 3:
-            curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
-            break;
-          default:
-            curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
-        }
-      }
-
-      // enable uploading
-      ::curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
-
-      // if there is little to no activity for too long stop submitting
-      ::curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 1);
-      ::curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME,
-                         SUBMIT_TIMEOUT_IN_SECONDS_DEFAULT);
-
-      ::curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
-
-      std::string local_file = file;
-      if (!cmSystemTools::FileExists(local_file)) {
-        local_file = localprefix + "/" + file;
-      }
-      std::string upload_as =
-        url + "/" + remoteprefix + cmSystemTools::GetFilenameName(file);
-
-      if (!cmSystemTools::FileExists(local_file)) {
-        cmCTestLog(this->CTest, ERROR_MESSAGE,
-                   "   Cannot find file: " << local_file << std::endl);
-        ::curl_easy_cleanup(curl);
-        ::curl_global_cleanup();
-        return false;
-      }
-      unsigned long filelen = cmSystemTools::FileLength(local_file);
-
-      ftpfile = cmsys::SystemTools::Fopen(local_file, "rb");
-      *this->LogFile << "\tUpload file: " << local_file << " to " << upload_as
-                     << std::endl;
-      cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
-                         "   Upload file: " << local_file << " to "
-                                            << upload_as << std::endl,
-                         this->Quiet);
-
-      ::curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
-
-      // specify target
-      ::curl_easy_setopt(curl, CURLOPT_URL, upload_as.c_str());
-
-      // now specify which file to upload
-      ::curl_easy_setopt(curl, CURLOPT_INFILE, ftpfile);
-
-      // and give the size of the upload (optional)
-      ::curl_easy_setopt(curl, CURLOPT_INFILESIZE, static_cast<long>(filelen));
-
-      // and give curl the buffer for errors
-      ::curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, &error_buffer);
-
-      // specify handler for output
-      ::curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,
-                         cmCTestSubmitHandlerWriteMemoryCallback);
-      ::curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION,
-                         cmCTestSubmitHandlerCurlDebugCallback);
-
-      /* we pass our 'chunk' struct to the callback function */
-      cmCTestSubmitHandlerVectorOfChar chunk;
-      cmCTestSubmitHandlerVectorOfChar chunkDebug;
-      ::curl_easy_setopt(curl, CURLOPT_FILE, &chunk);
-      ::curl_easy_setopt(curl, CURLOPT_DEBUGDATA, &chunkDebug);
-
-      // Now run off and do what you've been told!
-      res = ::curl_easy_perform(curl);
-
-      if (!chunk.empty()) {
-        cmCTestOptionalLog(this->CTest, DEBUG,
-                           "CURL output: ["
-                             << cmCTestLogWrite(&*chunk.begin(), chunk.size())
-                             << "]" << std::endl,
-                           this->Quiet);
-      }
-      if (!chunkDebug.empty()) {
-        cmCTestOptionalLog(
-          this->CTest, DEBUG,
-          "CURL debug output: ["
-            << cmCTestLogWrite(&*chunkDebug.begin(), chunkDebug.size()) << "]"
-            << std::endl,
-          this->Quiet);
-      }
-
-      fclose(ftpfile);
-      if (res) {
-        cmCTestLog(this->CTest, ERROR_MESSAGE,
-                   "   Error when uploading file: " << local_file
-                                                    << std::endl);
-        cmCTestLog(this->CTest, ERROR_MESSAGE,
-                   "   Error message was: " << error_buffer << std::endl);
-        *this->LogFile << "   Error when uploading file: " << local_file
-                       << std::endl
-                       << "   Error message was: " << error_buffer << std::endl
-                       << "   Curl output was: ";
-        // avoid dereference of empty vector
-        if (!chunk.empty()) {
-          *this->LogFile << cmCTestLogWrite(&*chunk.begin(), chunk.size());
-          cmCTestLog(this->CTest, ERROR_MESSAGE,
-                     "CURL output: ["
-                       << cmCTestLogWrite(&*chunk.begin(), chunk.size()) << "]"
-                       << std::endl);
-        }
-        *this->LogFile << std::endl;
-        ::curl_easy_cleanup(curl);
-        ::curl_global_cleanup();
-        return false;
-      }
-      // always cleanup
-      ::curl_easy_cleanup(curl);
-      cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
-                         "   Uploaded: " + local_file << std::endl,
-                         this->Quiet);
-    }
-  }
-  ::curl_global_cleanup();
-  return true;
-}
-
-// Uploading files is simpler
 bool cmCTestSubmitHandler::SubmitUsingHTTP(
   const std::string& localprefix, const std::vector<std::string>& files,
   const std::string& remoteprefix, const std::string& url)
@@ -407,26 +246,7 @@
       *this->LogFile << "\tUpload file: " << local_file << " to "
                      << remote_file << std::endl;
 
-      std::string ofile;
-      for (char c : remote_file) {
-        char hexCh[4] = { 0, 0, 0, 0 };
-        hexCh[0] = c;
-        switch (c) {
-          case '+':
-          case '?':
-          case '/':
-          case '\\':
-          case '&':
-          case ' ':
-          case '=':
-          case '%':
-            sprintf(hexCh, "%%%02X", static_cast<int>(c));
-            ofile.append(hexCh);
-            break;
-          default:
-            ofile.append(hexCh);
-        }
-      }
+      std::string ofile = cmSystemTools::EncodeURL(remote_file);
       std::string upload_as = url +
         ((url.find('?') == std::string::npos) ? '?' : '&') +
         "FileName=" + ofile;
@@ -676,370 +496,6 @@
   }
 }
 
-bool cmCTestSubmitHandler::TriggerUsingHTTP(
-  const std::vector<std::string>& files, const std::string& remoteprefix,
-  const std::string& url)
-{
-  CURL* curl;
-  char error_buffer[1024];
-
-  /* In windows, this will init the winsock stuff */
-  ::curl_global_init(CURL_GLOBAL_ALL);
-
-  for (std::string const& file : files) {
-    /* get a curl handle */
-    curl = curl_easy_init();
-    if (curl) {
-      // Using proxy
-      if (this->HTTPProxyType > 0) {
-        curl_easy_setopt(curl, CURLOPT_PROXY, this->HTTPProxy.c_str());
-        switch (this->HTTPProxyType) {
-          case 2:
-            curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
-            break;
-          case 3:
-            curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
-            break;
-          default:
-            curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
-            if (!this->HTTPProxyAuth.empty()) {
-              curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD,
-                               this->HTTPProxyAuth.c_str());
-            }
-        }
-      }
-
-      ::curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
-
-      // and give curl the buffer for errors
-      ::curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, &error_buffer);
-
-      // specify handler for output
-      ::curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,
-                         cmCTestSubmitHandlerWriteMemoryCallback);
-      ::curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION,
-                         cmCTestSubmitHandlerCurlDebugCallback);
-
-      /* we pass our 'chunk' struct to the callback function */
-      cmCTestSubmitHandlerVectorOfChar chunk;
-      cmCTestSubmitHandlerVectorOfChar chunkDebug;
-      ::curl_easy_setopt(curl, CURLOPT_FILE, &chunk);
-      ::curl_easy_setopt(curl, CURLOPT_DEBUGDATA, &chunkDebug);
-
-      std::string rfile = remoteprefix + cmSystemTools::GetFilenameName(file);
-      std::string ofile;
-      for (char c : rfile) {
-        char hexCh[4] = { 0, 0, 0, 0 };
-        hexCh[0] = c;
-        switch (c) {
-          case '+':
-          case '?':
-          case '/':
-          case '\\':
-          case '&':
-          case ' ':
-          case '=':
-          case '%':
-            sprintf(hexCh, "%%%02X", static_cast<int>(c));
-            ofile.append(hexCh);
-            break;
-          default:
-            ofile.append(hexCh);
-        }
-      }
-      std::string turl = url +
-        ((url.find('?') == std::string::npos) ? '?' : '&') +
-        "xmlfile=" + ofile;
-      *this->LogFile << "Trigger url: " << turl << std::endl;
-      cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
-                         "   Trigger url: " << turl << std::endl, this->Quiet);
-      curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
-      curl_easy_setopt(curl, CURLOPT_URL, turl.c_str());
-      if (curl_easy_perform(curl)) {
-        cmCTestLog(this->CTest, ERROR_MESSAGE,
-                   "   Error when triggering: " << turl << std::endl);
-        cmCTestLog(this->CTest, ERROR_MESSAGE,
-                   "   Error message was: " << error_buffer << std::endl);
-        *this->LogFile << "\tTriggering failed with error: " << error_buffer
-                       << std::endl
-                       << "   Error message was: " << error_buffer
-                       << std::endl;
-        if (!chunk.empty()) {
-          *this->LogFile << "   Curl output was: "
-                         << cmCTestLogWrite(&*chunk.begin(), chunk.size())
-                         << std::endl;
-          cmCTestLog(this->CTest, ERROR_MESSAGE,
-                     "CURL output: ["
-                       << cmCTestLogWrite(&*chunk.begin(), chunk.size()) << "]"
-                       << std::endl);
-        }
-        ::curl_easy_cleanup(curl);
-        ::curl_global_cleanup();
-        return false;
-      }
-
-      if (!chunk.empty()) {
-        cmCTestOptionalLog(this->CTest, DEBUG,
-                           "CURL output: ["
-                             << cmCTestLogWrite(&*chunk.begin(), chunk.size())
-                             << "]" << std::endl,
-                           this->Quiet);
-      }
-      if (!chunkDebug.empty()) {
-        cmCTestOptionalLog(
-          this->CTest, DEBUG,
-          "CURL debug output: ["
-            << cmCTestLogWrite(&*chunkDebug.begin(), chunkDebug.size()) << "]"
-            << std::endl,
-          this->Quiet);
-      }
-
-      // always cleanup
-      ::curl_easy_cleanup(curl);
-      cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT, std::endl,
-                         this->Quiet);
-    }
-  }
-  ::curl_global_cleanup();
-  cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
-                     "   Dart server triggered..." << std::endl, this->Quiet);
-  return true;
-}
-
-bool cmCTestSubmitHandler::SubmitUsingSCP(
-  const std::string& scp_command, const std::string& localprefix,
-  const std::vector<std::string>& files, const std::string& remoteprefix,
-  const std::string& url)
-{
-  if (scp_command.empty() || localprefix.empty() || files.empty() ||
-      remoteprefix.empty() || url.empty()) {
-    return false;
-  }
-
-  std::vector<const char*> argv;
-  argv.push_back(scp_command.c_str()); // Scp command
-  argv.push_back(scp_command.c_str()); // Dummy string for file
-  argv.push_back(scp_command.c_str()); // Dummy string for remote url
-  argv.push_back(nullptr);
-
-  cmsysProcess* cp = cmsysProcess_New();
-  cmsysProcess_SetOption(cp, cmsysProcess_Option_HideWindow, 1);
-  // cmsysProcess_SetTimeout(cp, timeout);
-
-  int problems = 0;
-
-  for (std::string const& file : files) {
-    int retVal;
-
-    std::string lfname = localprefix;
-    cmSystemTools::ConvertToUnixSlashes(lfname);
-    lfname += "/" + file;
-    lfname = cmSystemTools::ConvertToOutputPath(lfname);
-    argv[1] = lfname.c_str();
-    std::string rfname = url + "/" + remoteprefix + file;
-    argv[2] = rfname.c_str();
-    cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
-                       "Execute \"" << argv[0] << "\" \"" << argv[1] << "\" \""
-                                    << argv[2] << "\"" << std::endl,
-                       this->Quiet);
-    *this->LogFile << "Execute \"" << argv[0] << "\" \"" << argv[1] << "\" \""
-                   << argv[2] << "\"" << std::endl;
-
-    cmsysProcess_SetCommand(cp, &*argv.begin());
-    cmsysProcess_Execute(cp);
-    char* data;
-    int length;
-    cmProcessOutput processOutput;
-    std::string strdata;
-
-    while (cmsysProcess_WaitForData(cp, &data, &length, nullptr)) {
-      processOutput.DecodeText(data, length, strdata);
-      cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
-                         cmCTestLogWrite(strdata.c_str(), strdata.size()),
-                         this->Quiet);
-    }
-    processOutput.DecodeText(std::string(), strdata);
-    if (!strdata.empty()) {
-      cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
-                         cmCTestLogWrite(strdata.c_str(), strdata.size()),
-                         this->Quiet);
-    }
-
-    cmsysProcess_WaitForExit(cp, nullptr);
-
-    int result = cmsysProcess_GetState(cp);
-
-    if (result == cmsysProcess_State_Exited) {
-      retVal = cmsysProcess_GetExitValue(cp);
-      if (retVal != 0) {
-        cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
-                           "\tSCP returned: " << retVal << std::endl,
-                           this->Quiet);
-        *this->LogFile << "\tSCP returned: " << retVal << std::endl;
-        problems++;
-      }
-    } else if (result == cmsysProcess_State_Exception) {
-      retVal = cmsysProcess_GetExitException(cp);
-      cmCTestLog(this->CTest, ERROR_MESSAGE,
-                 "\tThere was an exception: " << retVal << std::endl);
-      *this->LogFile << "\tThere was an exception: " << retVal << std::endl;
-      problems++;
-    } else if (result == cmsysProcess_State_Expired) {
-      cmCTestLog(this->CTest, ERROR_MESSAGE,
-                 "\tThere was a timeout" << std::endl);
-      *this->LogFile << "\tThere was a timeout" << std::endl;
-      problems++;
-    } else if (result == cmsysProcess_State_Error) {
-      cmCTestLog(this->CTest, ERROR_MESSAGE,
-                 "\tError executing SCP: " << cmsysProcess_GetErrorString(cp)
-                                           << std::endl);
-      *this->LogFile << "\tError executing SCP: "
-                     << cmsysProcess_GetErrorString(cp) << std::endl;
-      problems++;
-    }
-  }
-  cmsysProcess_Delete(cp);
-  return problems == 0;
-}
-
-bool cmCTestSubmitHandler::SubmitUsingCP(const std::string& localprefix,
-                                         const std::vector<std::string>& files,
-                                         const std::string& remoteprefix,
-                                         const std::string& destination)
-{
-  if (localprefix.empty() || files.empty() || remoteprefix.empty() ||
-      destination.empty()) {
-    /* clang-format off */
-    cmCTestLog(this->CTest, ERROR_MESSAGE,
-               "Missing arguments for submit via cp:\n"
-               << "\tlocalprefix: " << localprefix << "\n"
-               << "\tNumber of files: " << files.size() << "\n"
-               << "\tremoteprefix: " << remoteprefix << "\n"
-               << "\tdestination: " << destination << std::endl);
-    /* clang-format on */
-    return false;
-  }
-
-  for (std::string const& file : files) {
-    std::string lfname = localprefix;
-    cmSystemTools::ConvertToUnixSlashes(lfname);
-    lfname += "/" + file;
-    std::string rfname = destination + "/" + remoteprefix + file;
-    cmSystemTools::CopyFileAlways(lfname, rfname);
-    cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
-                       "   Copy file: " << lfname << " to " << rfname
-                                        << std::endl,
-                       this->Quiet);
-  }
-  std::string tagDoneFile = destination + "/" + remoteprefix + "DONE";
-  cmSystemTools::Touch(tagDoneFile, true);
-  return true;
-}
-
-#if defined(CTEST_USE_XMLRPC)
-bool cmCTestSubmitHandler::SubmitUsingXMLRPC(
-  const std::string& localprefix, const std::vector<std::string>& files,
-  const std::string& remoteprefix, const std::string& url)
-{
-  xmlrpc_env env;
-  char ctestString[] = "CTest";
-  std::string ctestVersionString = cmVersion::GetCMakeVersion();
-  char* ctestVersion = const_cast<char*>(ctestVersionString.c_str());
-
-  std::string realURL = url + "/" + remoteprefix + "/Command/";
-
-  /* Start up our XML-RPC client library. */
-  xmlrpc_client_init(XMLRPC_CLIENT_NO_FLAGS, ctestString, ctestVersion);
-
-  /* Initialize our error-handling environment. */
-  xmlrpc_env_init(&env);
-
-  /* Call the famous server at UserLand. */
-  cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
-                     "   Submitting to: " << realURL << " (" << remoteprefix
-                                          << ")" << std::endl,
-                     this->Quiet);
-  for (std::string const& file : files) {
-    xmlrpc_value* result;
-
-    std::string local_file = file;
-    if (!cmSystemTools::FileExists(local_file)) {
-      local_file = localprefix + "/" + file;
-    }
-    cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
-                       "   Submit file: " << local_file << std::endl,
-                       this->Quiet);
-    struct stat st;
-    if (::stat(local_file.c_str(), &st)) {
-      cmCTestLog(this->CTest, ERROR_MESSAGE,
-                 "  Cannot find file: " << local_file << std::endl);
-      return false;
-    }
-
-    // off_t can be bigger than size_t.  fread takes size_t.
-    // make sure the file is not too big.
-    if (static_cast<off_t>(static_cast<size_t>(st.st_size)) !=
-        static_cast<off_t>(st.st_size)) {
-      cmCTestLog(this->CTest, ERROR_MESSAGE,
-                 "  File too big: " << local_file << std::endl);
-      return false;
-    }
-    size_t fileSize = static_cast<size_t>(st.st_size);
-    FILE* fp = cmsys::SystemTools::Fopen(local_file, "rb");
-    if (!fp) {
-      cmCTestLog(this->CTest, ERROR_MESSAGE,
-                 "  Cannot open file: " << local_file << std::endl);
-      return false;
-    }
-
-    unsigned char* fileBuffer = new unsigned char[fileSize];
-    if (fread(fileBuffer, 1, fileSize, fp) != fileSize) {
-      delete[] fileBuffer;
-      fclose(fp);
-      cmCTestLog(this->CTest, ERROR_MESSAGE,
-                 "  Cannot read file: " << local_file << std::endl);
-      return false;
-    }
-    fclose(fp);
-
-    char remoteCommand[] = "Submit.put";
-    char* pRealURL = const_cast<char*>(realURL.c_str());
-    result =
-      xmlrpc_client_call(&env, pRealURL, remoteCommand, "(6)", fileBuffer,
-                         static_cast<xmlrpc_int32>(fileSize));
-
-    delete[] fileBuffer;
-
-    if (env.fault_occurred) {
-      cmCTestLog(this->CTest, ERROR_MESSAGE,
-                 " Submission problem: " << env.fault_string << " ("
-                                         << env.fault_code << ")"
-                                         << std::endl);
-      xmlrpc_env_clean(&env);
-      xmlrpc_client_cleanup();
-      return false;
-    }
-
-    /* Dispose of our result value. */
-    xmlrpc_DECREF(result);
-  }
-
-  /* Clean up our error-handling environment. */
-  xmlrpc_env_clean(&env);
-
-  /* Shutdown our XML-RPC client library. */
-  xmlrpc_client_cleanup();
-  return true;
-}
-#else
-bool cmCTestSubmitHandler::SubmitUsingXMLRPC(
-  std::string const& /*unused*/, std::vector<std::string> const& /*unused*/,
-  std::string const& /*unused*/, std::string const& /*unused*/)
-{
-  return false;
-}
-#endif
-
 void cmCTestSubmitHandler::ConstructCDashURL(std::string& dropMethod,
                                              std::string& url)
 {
@@ -1294,11 +750,6 @@
   if (cdashUploadFile && cdashUploadType) {
     return this->HandleCDashUploadFile(cdashUploadFile, cdashUploadType);
   }
-  std::string iscdash = this->CTest->GetCTestConfiguration("IsCDash");
-  // cdash does not need to trigger so just return true
-  if (!iscdash.empty()) {
-    this->CDash = true;
-  }
 
   const std::string& buildDirectory =
     this->CTest->GetCTestConfiguration("BuildDirectory");
@@ -1336,36 +787,11 @@
     }
   }
 
-  if (getenv("FTP_PROXY")) {
-    this->FTPProxyType = 1;
-    this->FTPProxy = getenv("FTP_PROXY");
-    if (getenv("FTP_PROXY_PORT")) {
-      this->FTPProxy += ":";
-      this->FTPProxy += getenv("FTP_PROXY_PORT");
-    }
-    if (getenv("FTP_PROXY_TYPE")) {
-      std::string type = getenv("FTP_PROXY_TYPE");
-      // HTTP/SOCKS4/SOCKS5
-      if (type == "HTTP") {
-        this->FTPProxyType = 1;
-      } else if (type == "SOCKS4") {
-        this->FTPProxyType = 2;
-      } else if (type == "SOCKS5") {
-        this->FTPProxyType = 3;
-      }
-    }
-  }
-
   if (!this->HTTPProxy.empty()) {
     cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
                        "   Use HTTP Proxy: " << this->HTTPProxy << std::endl,
                        this->Quiet);
   }
-  if (!this->FTPProxy.empty()) {
-    cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
-                       "   Use FTP Proxy: " << this->FTPProxy << std::endl,
-                       this->Quiet);
-  }
   cmGeneratedFileStream ofs;
   this->StartLogFile("Submit", ofs);
 
@@ -1462,66 +888,11 @@
 
   std::string dropMethod(this->CTest->GetCTestConfiguration("DropMethod"));
 
-  if (dropMethod.empty() || dropMethod == "ftp") {
-    ofs << "Using drop method: FTP" << std::endl;
-    cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
-                       "   Using FTP submit method" << std::endl
-                                                    << "   Drop site: ftp://",
-                       this->Quiet);
-    std::string url = "ftp://";
-    url += cmCTest::MakeURLSafe(
-             this->CTest->GetCTestConfiguration("DropSiteUser")) +
-      ":" +
-      cmCTest::MakeURLSafe(
-             this->CTest->GetCTestConfiguration("DropSitePassword")) +
-      "@" + this->CTest->GetCTestConfiguration("DropSite") +
-      cmCTest::MakeURLSafe(this->CTest->GetCTestConfiguration("DropLocation"));
-    if (!this->CTest->GetCTestConfiguration("DropSiteUser").empty()) {
-      cmCTestOptionalLog(
-        this->CTest, HANDLER_OUTPUT,
-        this->CTest->GetCTestConfiguration("DropSiteUser").c_str(),
-        this->Quiet);
-      if (!this->CTest->GetCTestConfiguration("DropSitePassword").empty()) {
-        cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, ":******",
-                           this->Quiet);
-      }
-      cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "@", this->Quiet);
-    }
-    cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
-                       this->CTest->GetCTestConfiguration("DropSite")
-                         << this->CTest->GetCTestConfiguration("DropLocation")
-                         << std::endl,
-                       this->Quiet);
-    if (!this->SubmitUsingFTP(buildDirectory + "/Testing/" +
-                                this->CTest->GetCurrentTag(),
-                              files, prefix, url)) {
-      cmCTestLog(this->CTest, ERROR_MESSAGE,
-                 "   Problems when submitting via FTP" << std::endl);
-      ofs << "   Problems when submitting via FTP" << std::endl;
-      return -1;
-    }
-    if (!this->CDash) {
-      cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
-                         "   Using HTTP trigger method"
-                           << std::endl
-                           << "   Trigger site: "
-                           << this->CTest->GetCTestConfiguration("TriggerSite")
-                           << std::endl,
-                         this->Quiet);
-      if (!this->TriggerUsingHTTP(
-            files, prefix,
-            this->CTest->GetCTestConfiguration("TriggerSite"))) {
-        cmCTestLog(this->CTest, ERROR_MESSAGE,
-                   "   Problems when triggering via HTTP" << std::endl);
-        ofs << "   Problems when triggering via HTTP" << std::endl;
-        return -1;
-      }
-      cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
-                         "   Submission successful" << std::endl, this->Quiet);
-      ofs << "   Submission successful" << std::endl;
-      return 0;
-    }
-  } else if (dropMethod == "http" || dropMethod == "https") {
+  if (dropMethod.empty()) {
+    dropMethod = "http";
+  }
+
+  if (dropMethod == "http" || dropMethod == "https") {
     std::string url = dropMethod;
     url += "://";
     ofs << "Using drop method: " << dropMethod << std::endl;
@@ -1558,23 +929,6 @@
       ofs << "   Problems when submitting via HTTP" << std::endl;
       return -1;
     }
-    if (!this->CDash) {
-      cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
-                         "   Using HTTP trigger method"
-                           << std::endl
-                           << "   Trigger site: "
-                           << this->CTest->GetCTestConfiguration("TriggerSite")
-                           << std::endl,
-                         this->Quiet);
-      if (!this->TriggerUsingHTTP(
-            files, prefix,
-            this->CTest->GetCTestConfiguration("TriggerSite"))) {
-        cmCTestLog(this->CTest, ERROR_MESSAGE,
-                   "   Problems when triggering via HTTP" << std::endl);
-        ofs << "   Problems when triggering via HTTP" << std::endl;
-        return -1;
-      }
-    }
     if (this->HasErrors) {
       cmCTestLog(this->CTest, HANDLER_OUTPUT,
                  "   Errors occurred during "
@@ -1592,95 +946,6 @@
     }
 
     return 0;
-  } else if (dropMethod == "xmlrpc") {
-#if defined(CTEST_USE_XMLRPC)
-    ofs << "Using drop method: XML-RPC" << std::endl;
-    cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
-                       "   Using XML-RPC submit method" << std::endl,
-                       this->Quiet);
-    std::string url = this->CTest->GetCTestConfiguration("DropSite");
-    prefix = this->CTest->GetCTestConfiguration("DropLocation");
-    if (!this->SubmitUsingXMLRPC(buildDirectory + "/Testing/" +
-                                   this->CTest->GetCurrentTag(),
-                                 files, prefix, url)) {
-      cmCTestLog(this->CTest, ERROR_MESSAGE,
-                 "   Problems when submitting via XML-RPC" << std::endl);
-      ofs << "   Problems when submitting via XML-RPC" << std::endl;
-      return -1;
-    }
-    cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
-                       "   Submission successful" << std::endl, this->Quiet);
-    ofs << "   Submission successful" << std::endl;
-    return 0;
-#else
-    cmCTestLog(this->CTest, ERROR_MESSAGE,
-               "   Submission method \"xmlrpc\" not compiled into CTest!"
-                 << std::endl);
-    return -1;
-#endif
-  } else if (dropMethod == "scp") {
-    std::string url;
-    if (!this->CTest->GetCTestConfiguration("DropSiteUser").empty()) {
-      url += this->CTest->GetCTestConfiguration("DropSiteUser") + "@";
-    }
-    url += this->CTest->GetCTestConfiguration("DropSite") + ":" +
-      this->CTest->GetCTestConfiguration("DropLocation");
-
-    // change to the build directory so that we can uses a relative path
-    // on windows since scp doesn't support "c:" a drive in the path
-    cmWorkingDirectory workdir(buildDirectory);
-    if (workdir.Failed()) {
-      cmCTestLog(this->CTest, ERROR_MESSAGE,
-                 "   Failed to change directory to "
-                   << buildDirectory << " : "
-                   << std::strerror(workdir.GetLastResult()) << std::endl);
-      ofs << "   Failed to change directory to " << buildDirectory << " : "
-          << std::strerror(workdir.GetLastResult()) << std::endl;
-      return -1;
-    }
-
-    if (!this->SubmitUsingSCP(this->CTest->GetCTestConfiguration("ScpCommand"),
-                              "Testing/" + this->CTest->GetCurrentTag(), files,
-                              prefix, url)) {
-      cmCTestLog(this->CTest, ERROR_MESSAGE,
-                 "   Problems when submitting via SCP" << std::endl);
-      ofs << "   Problems when submitting via SCP" << std::endl;
-      return -1;
-    }
-    cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
-                       "   Submission successful" << std::endl, this->Quiet);
-    ofs << "   Submission successful" << std::endl;
-    return 0;
-  } else if (dropMethod == "cp") {
-    std::string location = this->CTest->GetCTestConfiguration("DropLocation");
-
-    // change to the build directory so that we can uses a relative path
-    // on windows since scp doesn't support "c:" a drive in the path
-    cmWorkingDirectory workdir(buildDirectory);
-    if (workdir.Failed()) {
-      cmCTestLog(this->CTest, ERROR_MESSAGE,
-                 "   Failed to change directory to "
-                   << buildDirectory << " : "
-                   << std::strerror(workdir.GetLastResult()) << std::endl);
-      ofs << "   Failed to change directory to " << buildDirectory << " : "
-          << std::strerror(workdir.GetLastResult()) << std::endl;
-      return -1;
-    }
-    cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
-                       "   Change directory: " << buildDirectory << std::endl,
-                       this->Quiet);
-
-    if (!this->SubmitUsingCP("Testing/" + this->CTest->GetCurrentTag(), files,
-                             prefix, location)) {
-      cmCTestLog(this->CTest, ERROR_MESSAGE,
-                 "   Problems when submitting via CP" << std::endl);
-      ofs << "   Problems when submitting via cp" << std::endl;
-      return -1;
-    }
-    cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
-                       "   Submission successful" << std::endl, this->Quiet);
-    ofs << "   Submission successful" << std::endl;
-    return 0;
   }
 
   cmCTestLog(this->CTest, ERROR_MESSAGE,
diff --git a/Source/CTest/cmCTestSubmitHandler.h b/Source/CTest/cmCTestSubmitHandler.h
index 66f2173..393e826 100644
--- a/Source/CTest/cmCTestSubmitHandler.h
+++ b/Source/CTest/cmCTestSubmitHandler.h
@@ -56,30 +56,10 @@
   /**
    * Submit file using various ways
    */
-  bool SubmitUsingFTP(const std::string& localprefix,
-                      const std::vector<std::string>& files,
-                      const std::string& remoteprefix, const std::string& url);
   bool SubmitUsingHTTP(const std::string& localprefix,
                        const std::vector<std::string>& files,
                        const std::string& remoteprefix,
                        const std::string& url);
-  bool SubmitUsingSCP(const std::string& scp_command,
-                      const std::string& localprefix,
-                      const std::vector<std::string>& files,
-                      const std::string& remoteprefix, const std::string& url);
-
-  bool SubmitUsingCP(const std::string& localprefix,
-                     const std::vector<std::string>& files,
-                     const std::string& remoteprefix, const std::string& url);
-
-  bool TriggerUsingHTTP(const std::vector<std::string>& files,
-                        const std::string& remoteprefix,
-                        const std::string& url);
-
-  bool SubmitUsingXMLRPC(const std::string& localprefix,
-                         const std::vector<std::string>& files,
-                         const std::string& remoteprefix,
-                         const std::string& url);
 
   typedef std::vector<char> cmCTestSubmitHandlerVectorOfChar;
 
@@ -92,11 +72,8 @@
   std::string HTTPProxy;
   int HTTPProxyType;
   std::string HTTPProxyAuth;
-  std::string FTPProxy;
-  int FTPProxyType;
   std::ostream* LogFile;
   bool SubmitPart[cmCTest::PartCount];
-  bool CDash;
   bool HasWarnings;
   bool HasErrors;
   cmCTest::SetOfStrings Files;
diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx
index d35d41e..7c19864 100644
--- a/Source/cmCTest.cxx
+++ b/Source/cmCTest.cxx
@@ -292,8 +292,6 @@
   this->OutputLogFile = nullptr;
   this->OutputLogFileLastTag = -1;
   this->SuppressUpdatingCTestConfiguration = false;
-  this->DartVersion = 1;
-  this->DropSiteCDash = false;
   this->BuildID = "";
   this->OutputTestOutputOnTestFailure = false;
   this->OutputColorCode = cmCTest::ColoredOutputSupportedByConsole();
@@ -613,8 +611,6 @@
 {
   std::string src_dir = this->GetCTestConfiguration("SourceDirectory");
   std::string bld_dir = this->GetCTestConfiguration("BuildDirectory");
-  this->DartVersion = 1;
-  this->DropSiteCDash = false;
   this->BuildID = "";
   for (Part p = PartStart; p != PartCount; p = Part(p + 1)) {
     this->Parts[p].SubmitFiles.clear();
@@ -658,18 +654,6 @@
                                                command->ShouldBeQuiet());
   this->SetCTestConfigurationFromCMakeVariable(
     mf, "BuildName", "CTEST_BUILD_NAME", command->ShouldBeQuiet());
-  const char* dartVersion = mf->GetDefinition("CTEST_DART_SERVER_VERSION");
-  if (dartVersion) {
-    this->DartVersion = atoi(dartVersion);
-    if (this->DartVersion < 0) {
-      cmCTestLog(this, ERROR_MESSAGE,
-                 "Invalid Dart server version: "
-                   << dartVersion << ". Please specify the version number."
-                   << std::endl);
-      return false;
-    }
-  }
-  this->DropSiteCDash = mf->IsOn("CTEST_DROP_SITE_CDASH");
 
   if (!this->Initialize(bld_dir.c_str(), command)) {
     return false;
diff --git a/Source/cmCTest.h b/Source/cmCTest.h
index 9139e42..7da0e1d 100644
--- a/Source/cmCTest.h
+++ b/Source/cmCTest.h
@@ -418,10 +418,6 @@
   /** Get color code characters for a specific color */
   std::string GetColorCode(Color color) const;
 
-  /** Get the version of dart server */
-  int GetDartVersion() { return this->DartVersion; }
-  int GetDropSiteCDash() { return this->DropSiteCDash; }
-
   /** The Build ID is assigned by CDash */
   void SetBuildID(const std::string& id) { this->BuildID = id; }
   std::string GetBuildID() { return this->BuildID; }
@@ -633,9 +629,6 @@
   bool ShowLineNumbers;
   bool Quiet;
 
-  int DartVersion;
-  bool DropSiteCDash;
-
   std::string BuildID;
 
   std::vector<std::string> InitialCommandLineArguments;
diff --git a/Source/cmConvertMSBuildXMLToJSON.py b/Source/cmConvertMSBuildXMLToJSON.py
index 92569e7..02074ba 100644
--- a/Source/cmConvertMSBuildXMLToJSON.py
+++ b/Source/cmConvertMSBuildXMLToJSON.py
@@ -96,7 +96,6 @@
 
     return values
 
-
 def main():
     """Script entrypoint."""
     # Parse the arguments
@@ -213,6 +212,14 @@
     return found
 
 
+def __normalize_switch(switch, separator):
+    new = switch
+    if switch.startswith("/") or switch.startswith("-"):
+      new = switch[1:]
+    if new and separator:
+      new = new + separator
+    return new
+
 ###########################################################################################
 # private xml functions
 def __convert(root, tag, values, func):
@@ -257,6 +264,8 @@
     reverse_switch = __get_attribute(node, 'ReverseSwitch')
 
     if reverse_switch:
+        __with_argument(node, converted)
+
         converted_reverse = copy.deepcopy(converted)
 
         converted_reverse['switch'] = reverse_switch
@@ -303,7 +312,11 @@
 
     converted = {}
     converted['name'] = name
-    converted['switch'] = __get_attribute(node, 'Switch')
+
+    switch = __get_attribute(node, 'Switch')
+    separator = __get_attribute(node, 'Separator')
+    converted['switch'] = __normalize_switch(switch, separator)
+
     converted['comment'] = __get_attribute(node, 'DisplayName')
     converted['value'] = default_value
 
@@ -435,7 +448,7 @@
 
     with open(path, 'w') as f:
         json.dump(sorted_values, f, indent=2, separators=(',', ': '))
-
+        f.write("\n")
 
 ###########################################################################################
 # private list helpers
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx
index f6ec606..541ae76 100644
--- a/Source/cmCoreTryCompile.cxx
+++ b/Source/cmCoreTryCompile.cxx
@@ -121,6 +121,7 @@
   std::string cxxExtensions;
   std::string cudaExtensions;
   std::vector<std::string> targets;
+  std::vector<std::string> linkOptions;
   std::string libsToLink = " ";
   bool useOldLinkLibs = true;
   char targetNameBuf[64];
@@ -144,6 +145,7 @@
     DoingNone,
     DoingCMakeFlags,
     DoingCompileDefinitions,
+    DoingLinkOptions,
     DoingLinkLibraries,
     DoingOutputVariable,
     DoingCopyFile,
@@ -165,6 +167,8 @@
       doing = DoingCMakeFlags;
     } else if (argv[i] == "COMPILE_DEFINITIONS") {
       doing = DoingCompileDefinitions;
+    } else if (argv[i] == "LINK_OPTIONS") {
+      doing = DoingLinkOptions;
     } else if (argv[i] == "LINK_LIBRARIES") {
       doing = DoingLinkLibraries;
       useOldLinkLibs = false;
@@ -208,6 +212,8 @@
       cmakeFlags.push_back(argv[i]);
     } else if (doing == DoingCompileDefinitions) {
       compileDefs.push_back(argv[i]);
+    } else if (doing == DoingLinkOptions) {
+      linkOptions.push_back(argv[i]);
     } else if (doing == DoingLinkLibraries) {
       libsToLink += "\"" + cmSystemTools::TrimWhitespace(argv[i]) + "\" ";
       if (cmTarget* tgt = this->Makefile->FindTargetToUse(argv[i])) {
@@ -814,6 +820,23 @@
       }
     }
 
+    if (!linkOptions.empty()) {
+      std::vector<std::string> options;
+      options.reserve(linkOptions.size());
+      for (const auto& option : linkOptions) {
+        options.emplace_back(cmOutputConverter::EscapeForCMake(option));
+      }
+
+      if (targetType == cmStateEnums::STATIC_LIBRARY) {
+        fprintf(fout,
+                "set_property(TARGET %s PROPERTY STATIC_LIBRARY_OPTIONS %s)\n",
+                targetName.c_str(), cmJoin(options, " ").c_str());
+      } else {
+        fprintf(fout, "target_link_options(%s PRIVATE %s)\n",
+                targetName.c_str(), cmJoin(options, " ").c_str());
+      }
+    }
+
     if (useOldLinkLibs) {
       fprintf(fout, "target_link_libraries(%s ${LINK_LIBRARIES})\n",
               targetName.c_str());
diff --git a/Source/cmCurl.cxx b/Source/cmCurl.cxx
index 3360323..0482898 100644
--- a/Source/cmCurl.cxx
+++ b/Source/cmCurl.cxx
@@ -2,8 +2,6 @@
    file Copyright.txt or https://cmake.org/licensing for details.  */
 #include "cmCurl.h"
 
-#include "cmThirdParty.h"
-
 #if !defined(CMAKE_USE_SYSTEM_CURL) && !defined(_WIN32) &&                    \
   !defined(__APPLE__) && !defined(CURL_CA_BUNDLE) && !defined(CURL_CA_PATH)
 #  define CMAKE_FIND_CAFILE
diff --git a/Source/cmDependsFortran.cxx b/Source/cmDependsFortran.cxx
index a04cee7..310af2d 100644
--- a/Source/cmDependsFortran.cxx
+++ b/Source/cmDependsFortran.cxx
@@ -697,9 +697,9 @@
 std::string cmDependsFortran::MaybeConvertToRelativePath(
   std::string const& base, std::string const& path)
 {
-  if (!cmOutputConverter::ContainedInDirectory(
-        base, path, this->LocalGenerator->GetStateSnapshot().GetDirectory())) {
+  if (!this->LocalGenerator->GetStateSnapshot().GetDirectory().ContainsBoth(
+        base, path)) {
     return path;
   }
-  return cmOutputConverter::ForceToRelativePath(base, path);
+  return cmSystemTools::ForceToRelativePath(base, path);
 }
diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx
index 8e25e9c..adb14ec 100644
--- a/Source/cmExtraEclipseCDT4Generator.cxx
+++ b/Source/cmExtraEclipseCDT4Generator.cxx
@@ -714,7 +714,7 @@
     xml.Attribute("path", p);
     xml.EndElement();
 
-    // exlude source directory from output search path
+    // exclude source directory from output search path
     // - only if not named the same as an output directory
     if (!cmSystemTools::FileIsDirectory(
           std::string(this->HomeOutputDirectory + "/" + p))) {
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index 73ff5a1..fb8e8d3 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -180,6 +180,9 @@
   if (subCommand == "SIZE") {
     return this->HandleSizeCommand(args);
   }
+  if (subCommand == "READ_SYMLINK") {
+    return this->HandleReadSymlinkCommand(args);
+  }
 
   std::string e = "does not recognize sub-command " + subCommand;
   this->SetError(e);
@@ -3627,7 +3630,7 @@
 
   if (!cmSystemTools::FileExists(filename, true)) {
     std::ostringstream e;
-    e << "SIZE requested of path that is not readable " << filename;
+    e << "SIZE requested of path that is not readable:\n  " << filename;
     this->SetError(e.str());
     return false;
   }
@@ -3638,3 +3641,30 @@
 
   return true;
 }
+
+bool cmFileCommand::HandleReadSymlinkCommand(
+  std::vector<std::string> const& args)
+{
+  if (args.size() != 3) {
+    std::ostringstream e;
+    e << args[0] << " requires a file name and output variable";
+    this->SetError(e.str());
+    return false;
+  }
+
+  const std::string& filename = args[1];
+  const std::string& outputVariable = args[2];
+
+  std::string result;
+  if (!cmSystemTools::ReadSymlink(filename, result)) {
+    std::ostringstream e;
+    e << "READ_SYMLINK requested of path that is not a symlink:\n  "
+      << filename;
+    this->SetError(e.str());
+    return false;
+  }
+
+  this->Makefile->AddDefinition(outputVariable, result.c_str());
+
+  return true;
+}
diff --git a/Source/cmFileCommand.h b/Source/cmFileCommand.h
index 01e007d..fe05c98 100644
--- a/Source/cmFileCommand.h
+++ b/Source/cmFileCommand.h
@@ -60,6 +60,7 @@
   bool HandleGenerateCommand(std::vector<std::string> const& args);
   bool HandleLockCommand(std::vector<std::string> const& args);
   bool HandleSizeCommand(std::vector<std::string> const& args);
+  bool HandleReadSymlinkCommand(std::vector<std::string> const& args);
 
 private:
   void AddEvaluationFile(const std::string& inputName,
diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx
index 82fcaad..c9c6938 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -8,19 +8,11 @@
 #include "cmLocalVisualStudio10Generator.h"
 #include "cmMakefile.h"
 #include "cmSourceFile.h"
-#include "cmVS10CLFlagTable.h"
-#include "cmVS10CSharpFlagTable.h"
-#include "cmVS10CudaFlagTable.h"
-#include "cmVS10CudaHostFlagTable.h"
-#include "cmVS10LibFlagTable.h"
-#include "cmVS10LinkFlagTable.h"
-#include "cmVS10MASMFlagTable.h"
-#include "cmVS10NASMFlagTable.h"
-#include "cmVS10RCFlagTable.h"
 #include "cmVersion.h"
 #include "cmVisualStudioSlnData.h"
 #include "cmVisualStudioSlnParser.h"
 #include "cmXMLWriter.h"
+#include "cm_jsoncpp_reader.h"
 #include "cmake.h"
 
 #include "cmsys/FStream.hxx"
@@ -30,6 +22,7 @@
 #include <algorithm>
 
 static const char vs10generatorName[] = "Visual Studio 10 2010";
+static std::map<std::string, std::vector<cmIDEFlagTable>> loadedFlagJsonFiles;
 
 // Map generator name without year to name with year.
 static const char* cmVS10GenName(const std::string& name, std::string& genName)
@@ -120,15 +113,16 @@
       this->DefaultPlatformToolset = "v100";
     }
   }
-  this->DefaultClFlagTable = cmVS10CLFlagTable;
-  this->DefaultCSharpFlagTable = cmVS10CSharpFlagTable;
-  this->DefaultLibFlagTable = cmVS10LibFlagTable;
-  this->DefaultLinkFlagTable = cmVS10LinkFlagTable;
-  this->DefaultCudaFlagTable = cmVS10CudaFlagTable;
-  this->DefaultCudaHostFlagTable = cmVS10CudaHostFlagTable;
-  this->DefaultMasmFlagTable = cmVS10MASMFlagTable;
-  this->DefaultNasmFlagTable = cmVS10NASMFlagTable;
-  this->DefaultRcFlagTable = cmVS10RCFlagTable;
+  this->DefaultCLFlagTableName = "v10";
+  this->DefaultCSharpFlagTableName = "v10";
+  this->DefaultLibFlagTableName = "v10";
+  this->DefaultLinkFlagTableName = "v10";
+  this->DefaultCudaFlagTableName = "v10";
+  this->DefaultCudaHostFlagTableName = "v10";
+  this->DefaultMasmFlagTableName = "v10";
+  this->DefaultNasmFlagTableName = "v10";
+  this->DefaultRCFlagTableName = "v10";
+
   this->Version = VS10;
   this->PlatformToolsetNeedsDebugEnum = false;
 }
@@ -1050,67 +1044,174 @@
   return version;
 }
 
+static std::string cmLoadFlagTableString(Json::Value entry, const char* field)
+{
+  if (entry.isMember(field)) {
+    auto string = entry[field];
+    if (string.isConvertibleTo(Json::ValueType::stringValue)) {
+      return string.asString();
+    }
+  }
+  return "";
+}
+
+static unsigned int cmLoadFlagTableSpecial(Json::Value entry,
+                                           const char* field)
+{
+  unsigned int value = 0;
+  if (entry.isMember(field)) {
+    auto specials = entry[field];
+    if (specials.isArray()) {
+      for (auto const& special : specials) {
+        std::string s = special.asString();
+        if (s == "UserValue") {
+          value |= cmIDEFlagTable::UserValue;
+        } else if (s == "UserIgnored") {
+          value |= cmIDEFlagTable::UserIgnored;
+        } else if (s == "UserRequired") {
+          value |= cmIDEFlagTable::UserRequired;
+        } else if (s == "Continue") {
+          value |= cmIDEFlagTable::Continue;
+        } else if (s == "SemicolonAppendable") {
+          value |= cmIDEFlagTable::SemicolonAppendable;
+        } else if (s == "UserFollowing") {
+          value |= cmIDEFlagTable::UserFollowing;
+        } else if (s == "CaseInsensitive") {
+          value |= cmIDEFlagTable::CaseInsensitive;
+        } else if (s == "SpaceAppendable") {
+          value |= cmIDEFlagTable::SpaceAppendable;
+        }
+      }
+    }
+  }
+  return value;
+}
+
+static cmIDEFlagTable const* cmLoadFlagTableJson(
+  std::string const& flagJsonPath)
+{
+  cmIDEFlagTable* ret = nullptr;
+  auto savedFlagIterator = loadedFlagJsonFiles.find(flagJsonPath);
+  if (savedFlagIterator != loadedFlagJsonFiles.end()) {
+    ret = savedFlagIterator->second.data();
+  } else {
+    Json::Reader reader;
+    cmsys::ifstream stream;
+
+    stream.open(flagJsonPath.c_str(), std::ios_base::in);
+    if (stream) {
+      Json::Value flags;
+      if (reader.parse(stream, flags, false) && flags.isArray()) {
+        std::vector<cmIDEFlagTable> flagTable;
+        for (auto const& flag : flags) {
+          cmIDEFlagTable flagEntry;
+          flagEntry.IDEName = cmLoadFlagTableString(flag, "name");
+          flagEntry.commandFlag = cmLoadFlagTableString(flag, "switch");
+          flagEntry.comment = cmLoadFlagTableString(flag, "comment");
+          flagEntry.value = cmLoadFlagTableString(flag, "value");
+          flagEntry.special = cmLoadFlagTableSpecial(flag, "flags");
+          flagTable.push_back(flagEntry);
+        }
+        cmIDEFlagTable endFlag{ "", "", "", "", 0 };
+        flagTable.push_back(endFlag);
+
+        loadedFlagJsonFiles[flagJsonPath] = flagTable;
+        ret = loadedFlagJsonFiles[flagJsonPath].data();
+      }
+    }
+  }
+  return ret;
+}
+
+cmIDEFlagTable const* cmGlobalVisualStudio10Generator::LoadFlagTable(
+  std::string const& flagTableName, std::string const& table) const
+{
+  cmIDEFlagTable const* ret = nullptr;
+
+  std::string filename = cmSystemTools::GetCMakeRoot() +
+    "/Templates/MSBuild/FlagTables/" + flagTableName + "_" + table + ".json";
+  ret = cmLoadFlagTableJson(filename);
+
+  if (!ret) {
+    cmMakefile* mf = this->GetCurrentMakefile();
+
+    std::ostringstream e;
+    /* clang-format off */
+    e << "JSON flag table \"" << filename <<
+      "\" could not be loaded.\n";
+    /* clang-format on */
+    mf->IssueMessage(cmake::FATAL_ERROR, e.str().c_str());
+  }
+  return ret;
+}
+
 cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetClFlagTable() const
 {
-  cmIDEFlagTable const* table = this->ToolsetOptions.GetClFlagTable(
-    this->GetPlatformName(), this->GetPlatformToolsetString());
+  std::string flagTableName = this->ToolsetOptions.GetClFlagTableName(
+    this->GetPlatformName(), this->GetPlatformToolsetString(),
+    this->DefaultCLFlagTableName);
 
-  return (table != nullptr) ? table : this->DefaultClFlagTable;
+  return LoadFlagTable(flagTableName, "CL");
 }
 
 cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetCSharpFlagTable()
   const
 {
-  cmIDEFlagTable const* table = this->ToolsetOptions.GetCSharpFlagTable(
-    this->GetPlatformName(), this->GetPlatformToolsetString());
+  std::string flagTableName = this->ToolsetOptions.GetCSharpFlagTableName(
+    this->GetPlatformName(), this->GetPlatformToolsetString(),
+    this->DefaultCSharpFlagTableName);
 
-  return (table != nullptr) ? table : this->DefaultCSharpFlagTable;
+  return LoadFlagTable(flagTableName, "CSharp");
 }
 
 cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetRcFlagTable() const
 {
-  cmIDEFlagTable const* table = this->ToolsetOptions.GetRcFlagTable(
-    this->GetPlatformName(), this->GetPlatformToolsetString());
+  std::string flagTableName = this->ToolsetOptions.GetRcFlagTableName(
+    this->GetPlatformName(), this->GetPlatformToolsetString(),
+    this->DefaultRCFlagTableName);
 
-  return (table != nullptr) ? table : this->DefaultRcFlagTable;
+  return LoadFlagTable(flagTableName, "RC");
 }
 
 cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetLibFlagTable() const
 {
-  cmIDEFlagTable const* table = this->ToolsetOptions.GetLibFlagTable(
-    this->GetPlatformName(), this->GetPlatformToolsetString());
+  std::string flagTableName = this->ToolsetOptions.GetLibFlagTableName(
+    this->GetPlatformName(), this->GetPlatformToolsetString(),
+    this->DefaultLibFlagTableName);
 
-  return (table != nullptr) ? table : this->DefaultLibFlagTable;
+  return LoadFlagTable(flagTableName, "LIB");
 }
 
 cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetLinkFlagTable() const
 {
-  cmIDEFlagTable const* table = this->ToolsetOptions.GetLinkFlagTable(
-    this->GetPlatformName(), this->GetPlatformToolsetString());
+  std::string flagTableName = this->ToolsetOptions.GetLinkFlagTableName(
+    this->GetPlatformName(), this->GetPlatformToolsetString(),
+    this->DefaultLinkFlagTableName);
 
-  return (table != nullptr) ? table : this->DefaultLinkFlagTable;
+  return LoadFlagTable(flagTableName, "Link");
 }
 
 cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetCudaFlagTable() const
 {
-  return this->DefaultCudaFlagTable;
+  return LoadFlagTable(this->DefaultCudaFlagTableName, "Cuda");
 }
 
 cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetCudaHostFlagTable()
   const
 {
-  return this->DefaultCudaHostFlagTable;
+  return LoadFlagTable(this->DefaultCudaHostFlagTableName, "CudaHost");
 }
 
 cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetMasmFlagTable() const
 {
-  cmIDEFlagTable const* table = this->ToolsetOptions.GetMasmFlagTable(
-    this->GetPlatformName(), this->GetPlatformToolsetString());
+  std::string flagTableName = this->ToolsetOptions.GetMasmFlagTableName(
+    this->GetPlatformName(), this->GetPlatformToolsetString(),
+    this->DefaultMasmFlagTableName);
 
-  return (table != nullptr) ? table : this->DefaultMasmFlagTable;
+  return LoadFlagTable(flagTableName, "MASM");
 }
 
 cmIDEFlagTable const* cmGlobalVisualStudio10Generator::GetNasmFlagTable() const
 {
-  return this->DefaultNasmFlagTable;
+  return LoadFlagTable(this->DefaultNasmFlagTableName, "NASM");
 }
diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h
index 63e6903..6c4a9e6 100644
--- a/Source/cmGlobalVisualStudio10Generator.h
+++ b/Source/cmGlobalVisualStudio10Generator.h
@@ -144,6 +144,9 @@
 
   std::string const& GetMSBuildCommand();
 
+  cmIDEFlagTable const* LoadFlagTable(std::string const& flagTableName,
+                                      std::string const& table) const;
+
   std::string GeneratorToolset;
   std::string GeneratorToolsetVersion;
   std::string GeneratorToolsetHostArchitecture;
@@ -153,15 +156,15 @@
   std::string SystemName;
   std::string SystemVersion;
   std::string NsightTegraVersion;
-  cmIDEFlagTable const* DefaultClFlagTable;
-  cmIDEFlagTable const* DefaultCSharpFlagTable;
-  cmIDEFlagTable const* DefaultLibFlagTable;
-  cmIDEFlagTable const* DefaultLinkFlagTable;
-  cmIDEFlagTable const* DefaultCudaFlagTable;
-  cmIDEFlagTable const* DefaultCudaHostFlagTable;
-  cmIDEFlagTable const* DefaultMasmFlagTable;
-  cmIDEFlagTable const* DefaultNasmFlagTable;
-  cmIDEFlagTable const* DefaultRcFlagTable;
+  std::string DefaultCLFlagTableName;
+  std::string DefaultCSharpFlagTableName;
+  std::string DefaultLibFlagTableName;
+  std::string DefaultLinkFlagTableName;
+  std::string DefaultCudaFlagTableName;
+  std::string DefaultCudaHostFlagTableName;
+  std::string DefaultMasmFlagTableName;
+  std::string DefaultNasmFlagTableName;
+  std::string DefaultRCFlagTableName;
   bool SystemIsWindowsCE;
   bool SystemIsWindowsPhone;
   bool SystemIsWindowsStore;
diff --git a/Source/cmGlobalVisualStudio11Generator.cxx b/Source/cmGlobalVisualStudio11Generator.cxx
index f1d5a8c..e40023d 100644
--- a/Source/cmGlobalVisualStudio11Generator.cxx
+++ b/Source/cmGlobalVisualStudio11Generator.cxx
@@ -6,12 +6,6 @@
 #include "cmDocumentationEntry.h"
 #include "cmLocalVisualStudio10Generator.h"
 #include "cmMakefile.h"
-#include "cmVS11CLFlagTable.h"
-#include "cmVS11CSharpFlagTable.h"
-#include "cmVS11LibFlagTable.h"
-#include "cmVS11LinkFlagTable.h"
-#include "cmVS11MASMFlagTable.h"
-#include "cmVS11RCFlagTable.h"
 
 static const char vs11generatorName[] = "Visual Studio 11 2012";
 
@@ -107,12 +101,12 @@
     "ProductDir",
     vc11Express, cmSystemTools::KeyWOW64_32);
   this->DefaultPlatformToolset = "v110";
-  this->DefaultClFlagTable = cmVS11CLFlagTable;
-  this->DefaultCSharpFlagTable = cmVS11CSharpFlagTable;
-  this->DefaultLibFlagTable = cmVS11LibFlagTable;
-  this->DefaultLinkFlagTable = cmVS11LinkFlagTable;
-  this->DefaultMasmFlagTable = cmVS11MASMFlagTable;
-  this->DefaultRcFlagTable = cmVS11RCFlagTable;
+  this->DefaultCLFlagTableName = "v11";
+  this->DefaultCSharpFlagTableName = "v11";
+  this->DefaultLibFlagTableName = "v11";
+  this->DefaultLinkFlagTableName = "v11";
+  this->DefaultMasmFlagTableName = "v11";
+  this->DefaultRCFlagTableName = "v11";
   this->Version = VS11;
 }
 
diff --git a/Source/cmGlobalVisualStudio12Generator.cxx b/Source/cmGlobalVisualStudio12Generator.cxx
index e05ae70..3be7d24 100644
--- a/Source/cmGlobalVisualStudio12Generator.cxx
+++ b/Source/cmGlobalVisualStudio12Generator.cxx
@@ -6,12 +6,6 @@
 #include "cmDocumentationEntry.h"
 #include "cmLocalVisualStudio10Generator.h"
 #include "cmMakefile.h"
-#include "cmVS12CLFlagTable.h"
-#include "cmVS12CSharpFlagTable.h"
-#include "cmVS12LibFlagTable.h"
-#include "cmVS12LinkFlagTable.h"
-#include "cmVS12MASMFlagTable.h"
-#include "cmVS12RCFlagTable.h"
 
 static const char vs12generatorName[] = "Visual Studio 12 2013";
 
@@ -90,12 +84,12 @@
     "ProductDir",
     vc12Express, cmSystemTools::KeyWOW64_32);
   this->DefaultPlatformToolset = "v120";
-  this->DefaultClFlagTable = cmVS12CLFlagTable;
-  this->DefaultCSharpFlagTable = cmVS12CSharpFlagTable;
-  this->DefaultLibFlagTable = cmVS12LibFlagTable;
-  this->DefaultLinkFlagTable = cmVS12LinkFlagTable;
-  this->DefaultMasmFlagTable = cmVS12MASMFlagTable;
-  this->DefaultRcFlagTable = cmVS12RCFlagTable;
+  this->DefaultCLFlagTableName = "v12";
+  this->DefaultCSharpFlagTableName = "v12";
+  this->DefaultLibFlagTableName = "v12";
+  this->DefaultLinkFlagTableName = "v12";
+  this->DefaultMasmFlagTableName = "v12";
+  this->DefaultRCFlagTableName = "v12";
   this->Version = VS12;
 }
 
diff --git a/Source/cmGlobalVisualStudio14Generator.cxx b/Source/cmGlobalVisualStudio14Generator.cxx
index 92ee2e0..ac969e8 100644
--- a/Source/cmGlobalVisualStudio14Generator.cxx
+++ b/Source/cmGlobalVisualStudio14Generator.cxx
@@ -6,12 +6,6 @@
 #include "cmDocumentationEntry.h"
 #include "cmLocalVisualStudio10Generator.h"
 #include "cmMakefile.h"
-#include "cmVS140CLFlagTable.h"
-#include "cmVS140CSharpFlagTable.h"
-#include "cmVS140LinkFlagTable.h"
-#include "cmVS14LibFlagTable.h"
-#include "cmVS14MASMFlagTable.h"
-#include "cmVS14RCFlagTable.h"
 
 static const char vs14generatorName[] = "Visual Studio 14 2015";
 
@@ -90,12 +84,12 @@
     "ProductDir",
     vc14Express, cmSystemTools::KeyWOW64_32);
   this->DefaultPlatformToolset = "v140";
-  this->DefaultClFlagTable = cmVS140CLFlagTable;
-  this->DefaultCSharpFlagTable = cmVS140CSharpFlagTable;
-  this->DefaultLibFlagTable = cmVS14LibFlagTable;
-  this->DefaultLinkFlagTable = cmVS140LinkFlagTable;
-  this->DefaultMasmFlagTable = cmVS14MASMFlagTable;
-  this->DefaultRcFlagTable = cmVS14RCFlagTable;
+  this->DefaultCLFlagTableName = "v140";
+  this->DefaultCSharpFlagTableName = "v140";
+  this->DefaultLibFlagTableName = "v14";
+  this->DefaultLinkFlagTableName = "v140";
+  this->DefaultMasmFlagTableName = "v14";
+  this->DefaultRCFlagTableName = "v14";
   this->Version = VS14;
 }
 
diff --git a/Source/cmGlobalVisualStudio15Generator.cxx b/Source/cmGlobalVisualStudio15Generator.cxx
index 23fd2d5..2853283 100644
--- a/Source/cmGlobalVisualStudio15Generator.cxx
+++ b/Source/cmGlobalVisualStudio15Generator.cxx
@@ -6,9 +6,6 @@
 #include "cmDocumentationEntry.h"
 #include "cmLocalVisualStudio10Generator.h"
 #include "cmMakefile.h"
-#include "cmVS141CLFlagTable.h"
-#include "cmVS141CSharpFlagTable.h"
-#include "cmVS141LinkFlagTable.h"
 #include "cmVSSetupHelper.h"
 
 static const char vs15generatorName[] = "Visual Studio 15 2017";
@@ -84,9 +81,9 @@
 {
   this->ExpressEdition = false;
   this->DefaultPlatformToolset = "v141";
-  this->DefaultClFlagTable = cmVS141CLFlagTable;
-  this->DefaultCSharpFlagTable = cmVS141CSharpFlagTable;
-  this->DefaultLinkFlagTable = cmVS141LinkFlagTable;
+  this->DefaultCLFlagTableName = "v141";
+  this->DefaultCSharpFlagTableName = "v141";
+  this->DefaultLinkFlagTableName = "v141";
   this->Version = VS15;
 }
 
diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx
index 1be80ac..3648086 100644
--- a/Source/cmGlobalVisualStudio7Generator.cxx
+++ b/Source/cmGlobalVisualStudio7Generator.cxx
@@ -37,7 +37,7 @@
   // and have EHa passed on the command line by leaving out the table
   // entry.
 
-  { 0, 0, 0, 0, 0 }
+  { "", "", "", "", 0 }
 };
 
 cmGlobalVisualStudio7Generator::cmGlobalVisualStudio7Generator(
diff --git a/Source/cmGlobalVisualStudio8Generator.cxx b/Source/cmGlobalVisualStudio8Generator.cxx
index b155d9c..097d7e2 100644
--- a/Source/cmGlobalVisualStudio8Generator.cxx
+++ b/Source/cmGlobalVisualStudio8Generator.cxx
@@ -362,7 +362,7 @@
   { "TreatWChar_tAsBuiltInType", "Zc:wchar_t-",
     "wchar_t is not a built-in type", "false", 0 },
 
-  { 0, 0, 0, 0, 0 }
+  { "", "", "", "", 0 }
 };
 cmIDEFlagTable const* cmGlobalVisualStudio8Generator::GetExtraFlagTableVS8()
 {
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index ac4f0be..d6ab769 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -3563,7 +3563,7 @@
 {
   // We force conversion because Xcode breakpoints do not work unless
   // they are in a file named relative to the source tree.
-  return cmOutputConverter::ForceToRelativePath(
+  return cmSystemTools::ForceToRelativePath(
     cmSystemTools::JoinPath(this->ProjectSourceDirectoryComponents), p);
 }
 
diff --git a/Source/cmIDEFlagTable.h b/Source/cmIDEFlagTable.h
index 152e293..28d5d53 100644
--- a/Source/cmIDEFlagTable.h
+++ b/Source/cmIDEFlagTable.h
@@ -3,13 +3,15 @@
 #ifndef cmIDEFlagTable_h
 #define cmIDEFlagTable_h
 
+#include <string>
+
 // This is a table mapping XML tag IDE names to command line options
 struct cmIDEFlagTable
 {
-  const char* IDEName;     // name used in the IDE xml file
-  const char* commandFlag; // command line flag
-  const char* comment;     // comment
-  const char* value;       // string value
+  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
   {
diff --git a/Source/cmIDEOptions.cxx b/Source/cmIDEOptions.cxx
index f996788..ee0c782 100644
--- a/Source/cmIDEOptions.cxx
+++ b/Source/cmIDEOptions.cxx
@@ -97,24 +97,24 @@
 {
   const char* pf = flag.c_str() + 1;
   // Look for an entry in the flag table matching this flag.
-  for (cmIDEFlagTable const* entry = table; entry->IDEName; ++entry) {
+  for (cmIDEFlagTable const* entry = table; !entry->IDEName.empty(); ++entry) {
     bool entry_found = false;
     if (entry->special & cmIDEFlagTable::UserValue) {
       // This flag table entry accepts a user-specified value.  If
       // 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(pf, entry->commandFlag, n) == 0 ||
+      int n = static_cast<int>(entry->commandFlag.length());
+      if ((strncmp(pf, entry->commandFlag.c_str(), n) == 0 ||
            (entry->special & cmIDEFlagTable::CaseInsensitive &&
-            cmsysString_strncasecmp(pf, entry->commandFlag, n))) &&
+            cmsysString_strncasecmp(pf, entry->commandFlag.c_str(), n))) &&
           (!(entry->special & cmIDEFlagTable::UserRequired) ||
            static_cast<int>(strlen(pf)) > n)) {
         this->FlagMapUpdate(entry, std::string(pf + n));
         entry_found = true;
       }
-    } else if (strcmp(pf, entry->commandFlag) == 0 ||
+    } else if (strcmp(pf, entry->commandFlag.c_str()) == 0 ||
                (entry->special & cmIDEFlagTable::CaseInsensitive &&
-                cmsysString_strcasecmp(pf, entry->commandFlag) == 0)) {
+                cmsysString_strcasecmp(pf, entry->commandFlag.c_str()) == 0)) {
       if (entry->special & cmIDEFlagTable::UserFollowing) {
         // This flag expects a value in the following argument.
         this->DoingFollowing = entry;
diff --git a/Source/cmLinkLineComputer.cxx b/Source/cmLinkLineComputer.cxx
index 7511fd2..6643990 100644
--- a/Source/cmLinkLineComputer.cxx
+++ b/Source/cmLinkLineComputer.cxx
@@ -11,6 +11,7 @@
 #include "cmOutputConverter.h"
 #include "cmStateDirectory.h"
 #include "cmStateTypes.h"
+#include "cmSystemTools.h"
 
 cmLinkLineComputer::cmLinkLineComputer(cmOutputConverter* outputConverter,
                                        cmStateDirectory const& stateDir)
@@ -46,9 +47,8 @@
 {
   std::string relLib = lib;
 
-  if (cmOutputConverter::ContainedInDirectory(
-        this->StateDir.GetCurrentBinary(), lib, this->StateDir)) {
-    relLib = cmOutputConverter::ForceToRelativePath(
+  if (this->StateDir.ContainsBoth(this->StateDir.GetCurrentBinary(), lib)) {
+    relLib = cmSystemTools::ForceToRelativePath(
       this->StateDir.GetCurrentBinary(), lib);
   }
   return relLib;
diff --git a/Source/cmLocalNinjaGenerator.cxx b/Source/cmLocalNinjaGenerator.cxx
index 8a07516..a8647b1 100644
--- a/Source/cmLocalNinjaGenerator.cxx
+++ b/Source/cmLocalNinjaGenerator.cxx
@@ -318,7 +318,10 @@
 
   cmsys::ofstream script(scriptPath.c_str());
 
-#ifndef _WIN32
+#ifdef _WIN32
+  script << "@echo off\n";
+  int line = 1;
+#else
   script << "set -e\n\n";
 #endif
 
@@ -329,12 +332,22 @@
     // for the raw shell script.
     cmSystemTools::ReplaceString(cmd, "$$", "$");
 #ifdef _WIN32
-    script << cmd << " || exit /b" << '\n';
+    script << cmd << " || (set FAIL_LINE=" << ++line << "& goto :ABORT)"
+           << '\n';
 #else
     script << cmd << '\n';
 #endif
   }
 
+#ifdef _WIN32
+  script << "goto :EOF\n\n"
+            ":ABORT\n"
+            "set ERROR_CODE=%ERRORLEVEL%\n"
+            "echo Batch file failed at line %FAIL_LINE% "
+            "with errorcode %ERRORLEVEL%\n"
+            "exit /b %ERROR_CODE%";
+#endif
+
   return scriptPath;
 }
 
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index 11d3608..707a1b5 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -2093,9 +2093,8 @@
 std::string cmLocalUnixMakefileGenerator3::MaybeConvertToRelativePath(
   std::string const& base, std::string const& path)
 {
-  if (!cmOutputConverter::ContainedInDirectory(
-        base, path, this->GetStateSnapshot().GetDirectory())) {
+  if (!this->GetStateSnapshot().GetDirectory().ContainsBoth(base, path)) {
     return path;
   }
-  return cmOutputConverter::ForceToRelativePath(base, path);
+  return cmSystemTools::ForceToRelativePath(base, path);
 }
diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx
index 7630691..fee9dd6 100644
--- a/Source/cmLocalVisualStudio7Generator.cxx
+++ b/Source/cmLocalVisualStudio7Generator.cxx
@@ -362,7 +362,7 @@
   { "EnableRecursion", "recursive", "", "true", 0 },
   { "ReentrantCode", "reentrancy", "", "true", 0 },
   // done up to Language
-  { 0, 0, 0, 0, 0 }
+  { "", "", "", "", 0 }
 };
 // fill the table here currently the comment field is not used for
 // anything other than documentation NOTE: Make sure the longer
@@ -472,7 +472,7 @@
   { "WarnAsError", "WX", "Treat warnings as errors", "true", 0 },
   { "BrowseInformation", "FR", "Generate browse information", "1", 0 },
   { "StringPooling", "GF", "Enable StringPooling", "true", 0 },
-  { 0, 0, 0, 0, 0 }
+  { "", "", "", "", 0 }
 };
 
 cmVS7FlagTable cmLocalVisualStudio7GeneratorLinkFlagTable[] = {
@@ -537,7 +537,7 @@
   { "ModuleDefinitionFile", "DEF:", "add an export def file", "",
     cmVS7FlagTable::UserValue },
   { "GenerateMapFile", "MAP", "enable generation of map file", "true", 0 },
-  { 0, 0, 0, 0, 0 }
+  { "", "", "", "", 0 }
 };
 
 cmVS7FlagTable cmLocalVisualStudio7GeneratorFortranLinkFlagTable[] = {
@@ -545,7 +545,7 @@
     "linkIncrementalNo", 0 },
   { "LinkIncremental", "INCREMENTAL:YES", "link incremental",
     "linkIncrementalYes", 0 },
-  { 0, 0, 0, 0, 0 }
+  { "", "", "", "", 0 }
 };
 
 // Helper class to write build event <Tool .../> elements.
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 5ad8ef6..5cd6ba5 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -2727,6 +2727,7 @@
 
   cmState* state = this->GetCMakeInstance()->GetState();
 
+  static const std::string lineVar = "CMAKE_CURRENT_LIST_LINE";
   do {
     char inc = *in;
     switch (inc) {
@@ -2739,7 +2740,6 @@
           const char* value = nullptr;
           std::string varresult;
           std::string svalue;
-          static const std::string lineVar = "CMAKE_CURRENT_LIST_LINE";
           switch (var.domain) {
             case NORMAL:
               if (filename && lookup == lineVar) {
@@ -2889,7 +2889,14 @@
                          "abcdefghijklmnopqrstuvwxyz"
                          "0123456789/_.+-")) {
             std::string variable(in + 1, nextAt - in - 1);
-            std::string varresult = this->GetSafeDefinition(variable);
+
+            std::string varresult;
+            if (filename && variable == lineVar) {
+              varresult = std::to_string(line);
+            } else {
+              varresult = this->GetSafeDefinition(variable);
+            }
+
             if (escapeQuotes) {
               varresult = cmSystemTools::EscapeQuotes(varresult);
             }
@@ -3648,8 +3655,15 @@
   }
 
   // Perform variable replacements.
-  this->ExpandVariablesInString(output, escapeQuotes, true, atOnly, nullptr,
-                                -1, true, true);
+  const char* filename = nullptr;
+  long lineNumber = -1;
+  if (!this->Backtrace.Empty()) {
+    const auto& currentTrace = this->Backtrace.Top();
+    filename = currentTrace.FilePath.c_str();
+    lineNumber = currentTrace.Line;
+  }
+  this->ExpandVariablesInString(output, escapeQuotes, true, atOnly, filename,
+                                lineNumber, true, true);
 }
 
 int cmMakefile::ConfigureFile(const char* infile, const char* outfile,
diff --git a/Source/cmMakefileExecutableTargetGenerator.cxx b/Source/cmMakefileExecutableTargetGenerator.cxx
index 08bb2ce..846b12c 100644
--- a/Source/cmMakefileExecutableTargetGenerator.cxx
+++ b/Source/cmMakefileExecutableTargetGenerator.cxx
@@ -84,6 +84,10 @@
   bool relink)
 {
 #ifdef CMAKE_BUILD_WITH_CMAKE
+  if (!this->GlobalGenerator->GetLanguageEnabled("CUDA")) {
+    return;
+  }
+
   const std::string cuda_lang("CUDA");
   cmGeneratorTarget::LinkClosure const* closure =
     this->GeneratorTarget->GetLinkClosure(this->ConfigName);
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx
index a79425e..cb41c28 100644
--- a/Source/cmMakefileTargetGenerator.cxx
+++ b/Source/cmMakefileTargetGenerator.cxx
@@ -1308,11 +1308,10 @@
 private:
   std::string MaybeConvertToRelativePath(std::string const& obj)
   {
-    if (!cmOutputConverter::ContainedInDirectory(
-          this->StateDir.GetCurrentBinary(), obj, this->StateDir)) {
+    if (!this->StateDir.ContainsBoth(this->StateDir.GetCurrentBinary(), obj)) {
       return obj;
     }
-    return cmOutputConverter::ForceToRelativePath(
+    return cmSystemTools::ForceToRelativePath(
       this->StateDir.GetCurrentBinary(), obj);
   }
 
diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx
index 1386706..c953d20 100644
--- a/Source/cmNinjaNormalTargetGenerator.cxx
+++ b/Source/cmNinjaNormalTargetGenerator.cxx
@@ -557,6 +557,10 @@
 
 void cmNinjaNormalTargetGenerator::WriteDeviceLinkStatement()
 {
+  if (!this->GetGlobalGenerator()->GetLanguageEnabled("CUDA")) {
+    return;
+  }
+
   cmGeneratorTarget& genTarget = *this->GetGeneratorTarget();
 
   // determine if we need to do any device linking for this target
diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx
index 80e6e97..011c7d8 100644
--- a/Source/cmOutputConverter.cxx
+++ b/Source/cmOutputConverter.cxx
@@ -9,7 +9,6 @@
 #include <string.h>
 #include <vector>
 
-#include "cmAlgorithms.h"
 #include "cmState.h"
 #include "cmStateDirectory.h"
 #include "cmSystemTools.h"
@@ -73,119 +72,15 @@
   return result;
 }
 
-static bool cmOutputConverterNotAbove(const char* a, const char* b)
-{
-  return (cmSystemTools::ComparePath(a, b) ||
-          cmSystemTools::IsSubDirectory(a, b));
-}
-
-bool cmOutputConverter::ContainedInDirectory(std::string const& local_path,
-                                             std::string const& remote_path,
-                                             cmStateDirectory const& directory)
-{
-  const std::string& relativePathTopBinary =
-    directory.GetRelativePathTopBinary();
-  const std::string& relativePathTopSource =
-    directory.GetRelativePathTopSource();
-
-  const bool bothInBinary =
-    cmOutputConverterNotAbove(local_path.c_str(),
-                              relativePathTopBinary.c_str()) &&
-    cmOutputConverterNotAbove(remote_path.c_str(),
-                              relativePathTopBinary.c_str());
-
-  const bool bothInSource =
-    cmOutputConverterNotAbove(local_path.c_str(),
-                              relativePathTopSource.c_str()) &&
-    cmOutputConverterNotAbove(remote_path.c_str(),
-                              relativePathTopSource.c_str());
-
-  return bothInSource || bothInBinary;
-}
-
 std::string cmOutputConverter::ConvertToRelativePath(
   std::string const& local_path, std::string const& remote_path) const
 {
-  if (!ContainedInDirectory(local_path, remote_path,
-                            this->StateSnapshot.GetDirectory())) {
+  if (!this->StateSnapshot.GetDirectory().ContainsBoth(local_path,
+                                                       remote_path)) {
     return remote_path;
   }
 
-  return cmOutputConverter::ForceToRelativePath(local_path, remote_path);
-}
-
-std::string cmOutputConverter::ForceToRelativePath(
-  std::string const& local_path, std::string const& remote_path)
-{
-  // The paths should never be quoted.
-  assert(local_path.front() != '\"');
-  assert(remote_path.front() != '\"');
-
-  // The local path should never have a trailing slash.
-  assert(local_path.empty() || local_path.back() != '/');
-
-  // If the path is already relative then just return the path.
-  if (!cmSystemTools::FileIsFullPath(remote_path)) {
-    return remote_path;
-  }
-
-  // Identify the longest shared path component between the remote
-  // path and the local path.
-  std::vector<std::string> local;
-  cmSystemTools::SplitPath(local_path, local);
-  std::vector<std::string> remote;
-  cmSystemTools::SplitPath(remote_path, remote);
-  unsigned int common = 0;
-  while (common < remote.size() && common < local.size() &&
-         cmSystemTools::ComparePath(remote[common], local[common])) {
-    ++common;
-  }
-
-  // If no part of the path is in common then return the full path.
-  if (common == 0) {
-    return remote_path;
-  }
-
-  // If the entire path is in common then just return a ".".
-  if (common == remote.size() && common == local.size()) {
-    return ".";
-  }
-
-  // If the entire path is in common except for a trailing slash then
-  // just return a "./".
-  if (common + 1 == remote.size() && remote[common].empty() &&
-      common == local.size()) {
-    return "./";
-  }
-
-  // Construct the relative path.
-  std::string relative;
-
-  // First add enough ../ to get up to the level of the shared portion
-  // of the path.  Leave off the trailing slash.  Note that the last
-  // component of local will never be empty because local should never
-  // have a trailing slash.
-  for (unsigned int i = common; i < local.size(); ++i) {
-    relative += "..";
-    if (i < local.size() - 1) {
-      relative += "/";
-    }
-  }
-
-  // Now add the portion of the destination path that is not included
-  // in the shared portion of the path.  Add a slash the first time
-  // only if there was already something in the path.  If there was a
-  // trailing slash in the input then the last iteration of the loop
-  // will add a slash followed by an empty string which will preserve
-  // the trailing slash in the output.
-
-  if (!relative.empty() && !remote.empty()) {
-    relative += "/";
-  }
-  relative += cmJoin(cmMakeRange(remote).advance(common), "/");
-
-  // Finally return the path.
-  return relative;
+  return cmSystemTools::ForceToRelativePath(local_path, remote_path);
 }
 
 static bool cmOutputConverterIsShellOperator(const std::string& str)
diff --git a/Source/cmOutputConverter.h b/Source/cmOutputConverter.h
index ed7143c..5a4f879 100644
--- a/Source/cmOutputConverter.h
+++ b/Source/cmOutputConverter.h
@@ -10,7 +10,6 @@
 #include "cmStateSnapshot.h"
 
 class cmState;
-class cmStateDirectory;
 
 class cmOutputConverter
 {
@@ -92,10 +91,6 @@
   };
   static FortranFormat GetFortranFormat(const char* value);
 
-  static bool ContainedInDirectory(std::string const& local_path,
-                                   std::string const& remote_path,
-                                   cmStateDirectory const& directory);
-
   /**
    * Convert the given remote path to a relative path with respect to
    * the given local path.  Both paths must use forward slashes and not
@@ -106,14 +101,6 @@
   std::string ConvertToRelativePath(std::string const& local_path,
                                     std::string const& remote_path) const;
 
-  /**
-   * Convert the given remote path to a relative path with respect to
-   * the given local path.  Both paths must use forward slashes and not
-   * already be escaped or quoted.
-   */
-  static std::string ForceToRelativePath(std::string const& local_path,
-                                         std::string const& remote_path);
-
 private:
   cmState* GetState() const;
 
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index 9985d63..7674877 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -251,7 +251,10 @@
          "The FindQt module does not exist for find_package().", 3, 14, 0,    \
          cmPolicies::WARN)                                                    \
   SELECT(POLICY, CMP0085, "$<IN_LIST:...> handles empty list items.", 3, 14,  \
-         0, cmPolicies::WARN)
+         0, cmPolicies::WARN)                                                 \
+  SELECT(POLICY, CMP0086,                                                     \
+         "UseSWIG honors SWIG_MODULE_NAME via -module flag.", 3, 14, 0,       \
+         cmPolicies::WARN)
 
 #define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1)
 #define CM_FOR_EACH_POLICY_ID(POLICY)                                         \
diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx
index 49236ed..6a2a951 100644
--- a/Source/cmQtAutoGenInitializer.cxx
+++ b/Source/cmQtAutoGenInitializer.cxx
@@ -35,9 +35,22 @@
 #include <set>
 #include <sstream>
 #include <string>
+#include <type_traits>
 #include <utility>
 #include <vector>
 
+std::string GetQtExecutableTargetName(
+  const cmQtAutoGen::IntegerVersion& qtVersion, std::string const& executable)
+{
+  if (qtVersion.Major == 5) {
+    return ("Qt5::" + executable);
+  }
+  if (qtVersion.Major == 4) {
+    return ("Qt4::" + executable);
+  }
+  return ("");
+}
+
 static std::size_t GetParallelCPUCount()
 {
   static std::size_t count = 0;
@@ -489,10 +502,13 @@
 
   // Moc includes
   {
-    bool const appendImplicit = (this->QtVersion.Major == 5);
+    // We need to disable this until we have all implicit includes available.
+    // See issue #18669.
+    // bool const appendImplicit = (this->QtVersion.Major == 5);
+
     auto GetIncludeDirs =
-      [this, localGen,
-       appendImplicit](std::string const& cfg) -> std::vector<std::string> {
+      [this, localGen](std::string const& cfg) -> std::vector<std::string> {
+      bool const appendImplicit = false;
       // Get the include dirs for this target, without stripping the implicit
       // include dirs off, see
       // https://gitlab.kitware.com/cmake/cmake/issues/13667
@@ -521,6 +537,12 @@
       [this, localGen](std::string const& cfg) -> std::set<std::string> {
       std::set<std::string> defines;
       localGen->GetTargetDefines(this->Target, cfg, "CXX", defines);
+#ifdef _WIN32
+      if (this->Moc.PredefsCmd.empty()) {
+        // Add WIN32 definition if we don't have a moc_predefs.h
+        defines.insert("WIN32");
+      }
+#endif
       return defines;
     };
 
@@ -538,11 +560,7 @@
   }
 
   // Moc executable
-  if (!GetMocExecutable()) {
-    return false;
-  }
-
-  return true;
+  return GetMocExecutable();
 }
 
 bool cmQtAutoGenInitializer::InitUic()
@@ -619,19 +637,12 @@
   }
 
   // Uic executable
-  if (!GetUicExecutable()) {
-    return false;
-  }
-
-  return true;
+  return GetUicExecutable();
 }
 
 bool cmQtAutoGenInitializer::InitRcc()
 {
-  if (!GetRccExecutable()) {
-    return false;
-  }
-  return true;
+  return GetRccExecutable();
 }
 
 bool cmQtAutoGenInitializer::InitScanFiles()
@@ -1342,251 +1353,170 @@
   this->Target->AddSource(filename);
 }
 
+static unsigned int CharPtrToInt(const char* const input)
+{
+  unsigned long tmp = 0;
+  if (input != nullptr && cmSystemTools::StringToULong(input, &tmp)) {
+    return static_cast<unsigned int>(tmp);
+  }
+  return 0;
+}
+
+static unsigned int StringToInt(const std::string& input)
+{
+  return input.empty() ? 0 : CharPtrToInt(input.c_str());
+}
+
+static std::vector<cmQtAutoGenInitializer::IntegerVersion> GetKnownQtVersions(
+  cmGeneratorTarget const* target)
+{
+  cmMakefile* makefile = target->Target->GetMakefile();
+
+  std::vector<cmQtAutoGenInitializer::IntegerVersion> result;
+  for (const std::string& prefix :
+       std::vector<std::string>({ "Qt5Core", "QT" })) {
+    auto tmp = cmQtAutoGenInitializer::IntegerVersion(
+      StringToInt(makefile->GetSafeDefinition(prefix + "_VERSION_MAJOR")),
+      StringToInt(makefile->GetSafeDefinition(prefix + "_VERSION_MINOR")));
+    if (tmp.Major != 0) {
+      result.push_back(tmp);
+    }
+  }
+
+  return result;
+}
+
 cmQtAutoGenInitializer::IntegerVersion cmQtAutoGenInitializer::GetQtVersion(
   cmGeneratorTarget const* target)
 {
-  cmQtAutoGenInitializer::IntegerVersion res;
-  cmMakefile* makefile = target->Target->GetMakefile();
-
-  // -- Major version
-  std::string qtMajor = makefile->GetSafeDefinition("QT_VERSION_MAJOR");
-  if (qtMajor.empty()) {
-    qtMajor = makefile->GetSafeDefinition("Qt5Core_VERSION_MAJOR");
+  auto knownQtVersions = GetKnownQtVersions(target);
+  if (knownQtVersions.empty()) {
+    return cmQtAutoGenInitializer::IntegerVersion(); // No Qt
   }
+
+  // Pick a version from the known versions:
+  auto targetVersion = CharPtrToInt(
+    target->GetLinkInterfaceDependentStringProperty("QT_MAJOR_VERSION", ""));
+
+  if (targetVersion == 0) {
+    // No specific version was requested by the target:
+    // Use highest known Qt version.
+    return knownQtVersions.at(0);
+  }
+
+  for (auto it : knownQtVersions) {
+    if (it.Major == targetVersion) {
+      return it;
+    }
+  }
+
+  // Requested version was not found
+  return cmQtAutoGenInitializer::IntegerVersion();
+}
+
+std::pair<bool, std::string> GetQtExecutable(
+  const cmQtAutoGen::IntegerVersion& qtVersion, cmGeneratorTarget* target,
+  const std::string& executable, bool ignoreMissingTarget, std::string* output)
+{
+  std::string err;
+  std::string result;
+
+  // Find executable
   {
-    const char* targetQtVersion =
-      target->GetLinkInterfaceDependentStringProperty("QT_MAJOR_VERSION", "");
-    if (targetQtVersion != nullptr) {
-      qtMajor = targetQtVersion;
-    }
-  }
+    const std::string targetName =
+      GetQtExecutableTargetName(qtVersion, executable);
+    if (targetName.empty()) {
+      err = "The AUTOMOC, AUTOUIC and AUTORCC feature ";
+      err += "supports only Qt 4 and Qt 5";
+    } else {
+      cmLocalGenerator* localGen = target->GetLocalGenerator();
+      cmGeneratorTarget* tgt = localGen->FindGeneratorTargetToUse(targetName);
+      if (tgt != nullptr) {
+        result = tgt->ImportedGetLocation("");
+      } else {
+        if (ignoreMissingTarget) {
+          return std::make_pair(true, "");
+        }
 
-  // -- Minor version
-  std::string qtMinor;
-  if (!qtMajor.empty()) {
-    if (qtMajor == "5") {
-      qtMinor = makefile->GetSafeDefinition("Qt5Core_VERSION_MINOR");
-    }
-    if (qtMinor.empty()) {
-      qtMinor = makefile->GetSafeDefinition("QT_VERSION_MINOR");
-    }
-    {
-      const char* targetQtVersion =
-        target->GetLinkInterfaceDependentStringProperty("QT_MINOR_VERSION",
-                                                        "");
-      if (targetQtVersion != nullptr) {
-        qtMinor = targetQtVersion;
+        err = "Could not find target " + targetName;
       }
     }
   }
 
-  // -- Convert to integer
-  if (!qtMajor.empty() && !qtMinor.empty()) {
-    unsigned long majorUL(0);
-    unsigned long minorUL(0);
-    if (cmSystemTools::StringToULong(qtMajor.c_str(), &majorUL) &&
-        cmSystemTools::StringToULong(qtMinor.c_str(), &minorUL)) {
-      res.Major = static_cast<unsigned int>(majorUL);
-      res.Minor = static_cast<unsigned int>(minorUL);
+  // Test executable
+  if (err.empty()) {
+    if (cmSystemTools::FileExists(result, true)) {
+      std::vector<std::string> command;
+      command.push_back(result);
+      command.push_back("-h");
+      std::string stdOut;
+      std::string stdErr;
+      int retVal = 0;
+      const bool runResult = cmSystemTools::RunSingleCommand(
+        command, &stdOut, &stdErr, &retVal, nullptr,
+        cmSystemTools::OUTPUT_NONE, cmDuration::zero(), cmProcessOutput::Auto);
+      if (!runResult) {
+        err = "Test of \"" + executable + "\" binary ";
+        err += cmQtAutoGen::Quoted(result) + " failed: ";
+        err += cmQtAutoGen::QuotedCommand(command);
+      } else {
+        if (output != nullptr) {
+          *output = stdOut;
+        }
+      }
+    } else {
+      err = "The \"" + executable + "\" binary ";
+      err += cmQtAutoGen::Quoted(result);
+      err += " does not exist";
     }
   }
 
-  return res;
+  // Print error
+  if (!err.empty()) {
+    std::string msg = "AutoGen (";
+    msg += target->GetName();
+    msg += "): ";
+    msg += err;
+    cmSystemTools::Error(msg.c_str());
+    return std::make_pair(false, "");
+  }
+
+  return std::make_pair(true, result);
 }
 
 bool cmQtAutoGenInitializer::GetMocExecutable()
 {
-  std::string err;
-
-  // Find moc executable
-  {
-    std::string targetName;
-    if (this->QtVersion.Major == 5) {
-      targetName = "Qt5::moc";
-    } else if (this->QtVersion.Major == 4) {
-      targetName = "Qt4::moc";
-    } else {
-      err = "The AUTOMOC feature supports only Qt 4 and Qt 5";
-    }
-    if (!targetName.empty()) {
-      cmLocalGenerator* localGen = this->Target->GetLocalGenerator();
-      cmGeneratorTarget* tgt = localGen->FindGeneratorTargetToUse(targetName);
-      if (tgt != nullptr) {
-        this->Moc.Executable = tgt->ImportedGetLocation("");
-      } else {
-        err = "Could not find target " + targetName;
-      }
-    }
-  }
-
-  // Test moc command
-  if (err.empty()) {
-    if (cmSystemTools::FileExists(this->Moc.Executable, true)) {
-      std::vector<std::string> command;
-      command.push_back(this->Moc.Executable);
-      command.push_back("-h");
-      std::string stdOut;
-      std::string stdErr;
-      int retVal = 0;
-      bool result = cmSystemTools::RunSingleCommand(
-        command, &stdOut, &stdErr, &retVal, nullptr,
-        cmSystemTools::OUTPUT_NONE, cmDuration::zero(), cmProcessOutput::Auto);
-      if (!result) {
-        err = "The moc test command failed: ";
-        err += QuotedCommand(command);
-      }
-    } else {
-      err = "The moc executable ";
-      err += Quoted(this->Moc.Executable);
-      err += " does not exist";
-    }
-  }
-
-  // Print error
-  if (!err.empty()) {
-    std::string msg = "AutoMoc (";
-    msg += this->Target->GetName();
-    msg += "): ";
-    msg += err;
-    cmSystemTools::Error(msg.c_str());
-    return false;
-  }
-
-  return true;
+  const auto result =
+    GetQtExecutable(this->QtVersion, this->Target, "moc", false, nullptr);
+  this->Moc.Executable = result.second;
+  return result.first;
 }
 
 bool cmQtAutoGenInitializer::GetUicExecutable()
 {
-  std::string err;
-
-  // Find uic executable
-  {
-    std::string targetName;
-    if (this->QtVersion.Major == 5) {
-      targetName = "Qt5::uic";
-    } else if (this->QtVersion.Major == 4) {
-      targetName = "Qt4::uic";
-    } else {
-      err = "The AUTOUIC feature supports only Qt 4 and Qt 5";
-    }
-    if (!targetName.empty()) {
-      cmLocalGenerator* localGen = this->Target->GetLocalGenerator();
-      cmGeneratorTarget* tgt = localGen->FindGeneratorTargetToUse(targetName);
-      if (tgt != nullptr) {
-        this->Uic.Executable = tgt->ImportedGetLocation("");
-      } else {
-        if (this->QtVersion.Major == 5) {
-          // Project does not use Qt5Widgets, but has AUTOUIC ON anyway
-        } else {
-          err = "Could not find target " + targetName;
-        }
-      }
-    }
-  }
-
-  // Test uic command
-  if (err.empty() && !this->Uic.Executable.empty()) {
-    if (cmSystemTools::FileExists(this->Uic.Executable, true)) {
-      std::vector<std::string> command;
-      command.push_back(this->Uic.Executable);
-      command.push_back("-h");
-      std::string stdOut;
-      std::string stdErr;
-      int retVal = 0;
-      bool result = cmSystemTools::RunSingleCommand(
-        command, &stdOut, &stdErr, &retVal, nullptr,
-        cmSystemTools::OUTPUT_NONE, cmDuration::zero(), cmProcessOutput::Auto);
-      if (!result) {
-        err = "The uic test command failed: ";
-        err += QuotedCommand(command);
-      }
-    } else {
-      err = "The uic executable ";
-      err += Quoted(this->Uic.Executable);
-      err += " does not exist";
-    }
-  }
-
-  // Print error
-  if (!err.empty()) {
-    std::string msg = "AutoUic (";
-    msg += this->Target->GetName();
-    msg += "): ";
-    msg += err;
-    cmSystemTools::Error(msg.c_str());
-    return false;
-  }
-
-  return true;
+  const auto result =
+    GetQtExecutable(this->QtVersion, this->Target, "uic", true, nullptr);
+  this->Uic.Executable = result.second;
+  return result.first;
 }
 
 bool cmQtAutoGenInitializer::GetRccExecutable()
 {
-  std::string err;
-
-  // Find rcc executable
-  {
-    std::string targetName;
-    if (this->QtVersion.Major == 5) {
-      targetName = "Qt5::rcc";
-    } else if (this->QtVersion.Major == 4) {
-      targetName = "Qt4::rcc";
-    } else {
-      err = "The AUTORCC feature supports only Qt 4 and Qt 5";
-    }
-    if (!targetName.empty()) {
-      cmLocalGenerator* localGen = this->Target->GetLocalGenerator();
-      cmGeneratorTarget* tgt = localGen->FindGeneratorTargetToUse(targetName);
-      if (tgt != nullptr) {
-        this->Rcc.Executable = tgt->ImportedGetLocation("");
-      } else {
-        err = "Could not find target " + targetName;
-      }
-    }
-  }
-
-  // Test rcc command
-  if (err.empty()) {
-    if (cmSystemTools::FileExists(this->Rcc.Executable, true)) {
-      std::vector<std::string> command;
-      command.push_back(this->Rcc.Executable);
-      command.push_back("-h");
-      std::string stdOut;
-      std::string stdErr;
-      int retVal = 0;
-      bool result = cmSystemTools::RunSingleCommand(
-        command, &stdOut, &stdErr, &retVal, nullptr,
-        cmSystemTools::OUTPUT_NONE, cmDuration::zero(), cmProcessOutput::Auto);
-      if (result) {
-        // Detect if rcc supports (-)-list
-        if (this->QtVersion.Major == 5) {
-          if (stdOut.find("--list") != std::string::npos) {
-            this->Rcc.ListOptions.push_back("--list");
-          } else {
-            this->Rcc.ListOptions.push_back("-list");
-          }
-        }
-      } else {
-        err = "The rcc test command failed: ";
-        err += QuotedCommand(command);
-      }
-    } else {
-      err = "The rcc executable ";
-      err += Quoted(this->Rcc.Executable);
-      err += " does not exist";
-    }
-  }
-
-  // Print error
-  if (!err.empty()) {
-    std::string msg = "AutoRcc (";
-    msg += this->Target->GetName();
-    msg += "): ";
-    msg += err;
-    cmSystemTools::Error(msg.c_str());
+  std::string stdOut;
+  const auto result =
+    GetQtExecutable(this->QtVersion, this->Target, "rcc", false, &stdOut);
+  this->Rcc.Executable = result.second;
+  if (!result.first) {
     return false;
   }
 
+  if (this->QtVersion.Major == 5) {
+    if (stdOut.find("--list") != std::string::npos) {
+      this->Rcc.ListOptions.push_back("--list");
+    } else {
+      this->Rcc.ListOptions.push_back("-list");
+    }
+  }
   return true;
 }
 
diff --git a/Source/cmQtAutoGeneratorMocUic.cxx b/Source/cmQtAutoGeneratorMocUic.cxx
index 2e6f90f..446ef9a 100644
--- a/Source/cmQtAutoGeneratorMocUic.cxx
+++ b/Source/cmQtAutoGeneratorMocUic.cxx
@@ -1279,16 +1279,6 @@
       Moc_.SkipList.insert(lst.begin(), lst.end());
     }
     Moc_.Definitions = InfoGetConfigList("AM_MOC_DEFINITIONS");
-#ifdef _WIN32
-    {
-      std::string win32("WIN32");
-      auto itB = Moc().Definitions.cbegin();
-      auto itE = Moc().Definitions.cend();
-      if (std::find(itB, itE, win32) == itE) {
-        Moc_.Definitions.emplace_back(std::move(win32));
-      }
-    }
-#endif
     Moc_.IncludePaths = InfoGetConfigList("AM_MOC_INCLUDES");
     Moc_.Options = InfoGetList("AM_MOC_OPTIONS");
     Moc_.RelaxedMode = InfoGetBool("AM_MOC_RELAXED_MODE");
diff --git a/Source/cmStateDirectory.cxx b/Source/cmStateDirectory.cxx
index f94e714..40f694c 100644
--- a/Source/cmStateDirectory.cxx
+++ b/Source/cmStateDirectory.cxx
@@ -138,6 +138,23 @@
   this->DirectoryState->RelativePathTopBinary = dir;
 }
 
+bool cmStateDirectory::ContainsBoth(std::string const& local_path,
+                                    std::string const& remote_path) const
+{
+  auto PathEqOrSubDir = [](std::string const& a, std::string const& b) {
+    return (cmSystemTools::ComparePath(a, b) ||
+            cmSystemTools::IsSubDirectory(a, b));
+  };
+
+  bool bothInBinary = PathEqOrSubDir(local_path, GetRelativePathTopBinary()) &&
+    PathEqOrSubDir(remote_path, GetRelativePathTopBinary());
+
+  bool bothInSource = PathEqOrSubDir(local_path, GetRelativePathTopSource()) &&
+    PathEqOrSubDir(remote_path, GetRelativePathTopSource());
+
+  return bothInBinary || bothInSource;
+}
+
 cmStateDirectory::cmStateDirectory(
   cmLinkedTree<cmStateDetail::BuildsystemDirectoryStateType>::iterator iter,
   const cmStateSnapshot& snapshot)
diff --git a/Source/cmStateDirectory.h b/Source/cmStateDirectory.h
index e5f4d05..c4b18ad 100644
--- a/Source/cmStateDirectory.h
+++ b/Source/cmStateDirectory.h
@@ -32,6 +32,9 @@
   void SetRelativePathTopSource(const char* dir);
   void SetRelativePathTopBinary(const char* dir);
 
+  bool ContainsBoth(std::string const& local_path,
+                    std::string const& remote_path) const;
+
   cmStringRange GetIncludeDirectoriesEntries() const;
   cmBacktraceRange GetIncludeDirectoriesEntryBacktraces() const;
   void AppendIncludeDirectoriesEntry(std::string const& vec,
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index 28aa57c..be65853 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -49,6 +49,7 @@
 #include <string.h>
 #include <time.h>
 #include <utility>
+#include <vector>
 
 #if defined(_WIN32)
 #  include <windows.h>
@@ -1463,6 +1464,80 @@
   return cmsys::SystemTools::RelativePath(local, remote);
 }
 
+std::string cmSystemTools::ForceToRelativePath(std::string const& local_path,
+                                               std::string const& remote_path)
+{
+  // The paths should never be quoted.
+  assert(local_path.front() != '\"');
+  assert(remote_path.front() != '\"');
+
+  // The local path should never have a trailing slash.
+  assert(local_path.empty() || local_path.back() != '/');
+
+  // If the path is already relative then just return the path.
+  if (!cmSystemTools::FileIsFullPath(remote_path)) {
+    return remote_path;
+  }
+
+  // Identify the longest shared path component between the remote
+  // path and the local path.
+  std::vector<std::string> local;
+  cmSystemTools::SplitPath(local_path, local);
+  std::vector<std::string> remote;
+  cmSystemTools::SplitPath(remote_path, remote);
+  unsigned int common = 0;
+  while (common < remote.size() && common < local.size() &&
+         cmSystemTools::ComparePath(remote[common], local[common])) {
+    ++common;
+  }
+
+  // If no part of the path is in common then return the full path.
+  if (common == 0) {
+    return remote_path;
+  }
+
+  // If the entire path is in common then just return a ".".
+  if (common == remote.size() && common == local.size()) {
+    return ".";
+  }
+
+  // If the entire path is in common except for a trailing slash then
+  // just return a "./".
+  if (common + 1 == remote.size() && remote[common].empty() &&
+      common == local.size()) {
+    return "./";
+  }
+
+  // Construct the relative path.
+  std::string relative;
+
+  // First add enough ../ to get up to the level of the shared portion
+  // of the path.  Leave off the trailing slash.  Note that the last
+  // component of local will never be empty because local should never
+  // have a trailing slash.
+  for (unsigned int i = common; i < local.size(); ++i) {
+    relative += "..";
+    if (i < local.size() - 1) {
+      relative += "/";
+    }
+  }
+
+  // Now add the portion of the destination path that is not included
+  // in the shared portion of the path.  Add a slash the first time
+  // only if there was already something in the path.  If there was a
+  // trailing slash in the input then the last iteration of the loop
+  // will add a slash followed by an empty string which will preserve
+  // the trailing slash in the output.
+
+  if (!relative.empty() && !remote.empty()) {
+    relative += "/";
+  }
+  relative += cmJoin(cmMakeRange(remote).advance(common), "/");
+
+  // Finally return the path.
+  return relative;
+}
+
 std::string cmSystemTools::CollapseCombinedPath(std::string const& dir,
                                                 std::string const& file)
 {
@@ -3009,6 +3084,35 @@
   return (*endp == '\0') && (endp != str) && (errno == 0);
 }
 
+std::string cmSystemTools::EncodeURL(std::string const& in, bool escapeSlashes)
+{
+  std::string out;
+  for (char c : in) {
+    char hexCh[4] = { 0, 0, 0, 0 };
+    hexCh[0] = c;
+    switch (c) {
+      case '+':
+      case '?':
+      case '\\':
+      case '&':
+      case ' ':
+      case '=':
+      case '%':
+        sprintf(hexCh, "%%%02X", static_cast<int>(c));
+        break;
+      case '/':
+        if (escapeSlashes) {
+          strcpy(hexCh, "%2F");
+        }
+        break;
+      default:
+        break;
+    }
+    out.append(hexCh);
+  }
+  return out;
+}
+
 bool cmSystemTools::CreateSymlink(const std::string& origName,
                                   const std::string& newName)
 {
diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h
index 98300eb..c0999e7 100644
--- a/Source/cmSystemTools.h
+++ b/Source/cmSystemTools.h
@@ -375,6 +375,14 @@
   static std::string RelativePath(std::string const& local,
                                   std::string const& remote);
 
+  /**
+   * Convert the given remote path to a relative path with respect to
+   * the given local path.  Both paths must use forward slashes and not
+   * already be escaped or quoted.
+   */
+  static std::string ForceToRelativePath(std::string const& local_path,
+                                         std::string const& remote_path);
+
   /** Joins two paths while collapsing x/../ parts
    * For example CollapseCombinedPath("a/b/c", "../../d") results in "a/d"
    */
@@ -495,6 +503,10 @@
   static bool StringToLong(const char* str, long* value);
   static bool StringToULong(const char* str, unsigned long* value);
 
+  /** Encode a string as a URL.  */
+  static std::string EncodeURL(std::string const& in,
+                               bool escapeSlashes = true);
+
 #ifdef _WIN32
   struct WindowsFileRetry
   {
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 92d5505..688f73b 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -6,7 +6,6 @@
 #include <algorithm>
 #include <assert.h>
 #include <iterator>
-#include <map>
 #include <set>
 #include <sstream>
 #include <string.h>
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index aa2859d..655cefd 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -6,7 +6,6 @@
 #include "cmConfigure.h" // IWYU pragma: keep
 
 #include <iosfwd>
-#include <map>
 #include <set>
 #include <string>
 #include <unordered_map>
@@ -344,11 +343,4 @@
 
 typedef std::unordered_map<std::string, cmTarget> cmTargets;
 
-class cmTargetSet : public std::set<std::string>
-{
-};
-class cmTargetManifest : public std::map<std::string, cmTargetSet>
-{
-};
-
 #endif
diff --git a/Source/cmTargetLinkLibrariesCommand.cxx b/Source/cmTargetLinkLibrariesCommand.cxx
index 66cc6ee..eebf7a0 100644
--- a/Source/cmTargetLinkLibrariesCommand.cxx
+++ b/Source/cmTargetLinkLibrariesCommand.cxx
@@ -451,7 +451,8 @@
   // STATIC library.)
   if (this->CurrentProcessingState == ProcessingKeywordPrivateInterface ||
       this->CurrentProcessingState == ProcessingPlainPrivateInterface) {
-    if (this->Target->GetType() == cmStateEnums::STATIC_LIBRARY) {
+    if (this->Target->GetType() == cmStateEnums::STATIC_LIBRARY ||
+        this->Target->GetType() == cmStateEnums::OBJECT_LIBRARY) {
       std::string configLib =
         this->Target->GetDebugGeneratorExpressions(libRef, llt);
       if (cmGeneratorExpression::IsValidTargetName(libRef) ||
diff --git a/Source/cmTryRunCommand.cxx b/Source/cmTryRunCommand.cxx
index 9396138..fafbd24 100644
--- a/Source/cmTryRunCommand.cxx
+++ b/Source/cmTryRunCommand.cxx
@@ -45,7 +45,8 @@
     if (argv[i] == "ARGS") {
       ++i;
       while (i < argv.size() && argv[i] != "COMPILE_DEFINITIONS" &&
-             argv[i] != "CMAKE_FLAGS" && argv[i] != "LINK_LIBRARIES") {
+             argv[i] != "CMAKE_FLAGS" && argv[i] != "LINK_OPTIONS" &&
+             argv[i] != "LINK_LIBRARIES") {
         runArgs += " ";
         runArgs += argv[i];
         ++i;
diff --git a/Source/cmVS10CLFlagTable.h b/Source/cmVS10CLFlagTable.h
deleted file mode 100644
index df4d58c..0000000
--- a/Source/cmVS10CLFlagTable.h
+++ /dev/null
@@ -1,205 +0,0 @@
-static cmVS7FlagTable cmVS10CLFlagTable[] = {
-
-  // Enum Properties
-  { "DebugInformationFormat", "Z7", "C7 compatible", "OldStyle", 0 },
-  { "DebugInformationFormat", "Zi", "Program Database", "ProgramDatabase", 0 },
-  { "DebugInformationFormat", "ZI", "Program Database for Edit And Continue",
-    "EditAndContinue", 0 },
-
-  { "WarningLevel", "W0", "Turn Off All Warnings", "TurnOffAllWarnings", 0 },
-  { "WarningLevel", "W1", "Level1", "Level1", 0 },
-  { "WarningLevel", "W2", "Level2", "Level2", 0 },
-  { "WarningLevel", "W3", "Level3", "Level3", 0 },
-  { "WarningLevel", "W4", "Level4", "Level4", 0 },
-  { "WarningLevel", "Wall", "EnableAllWarnings", "EnableAllWarnings", 0 },
-
-  { "Optimization", "Od", "Disabled", "Disabled", 0 },
-  { "Optimization", "O1", "Minimize Size", "MinSpace", 0 },
-  { "Optimization", "O2", "Maximize Speed", "MaxSpeed", 0 },
-  { "Optimization", "Ox", "Full Optimization", "Full", 0 },
-
-  { "InlineFunctionExpansion", "", "Default", "Default", 0 },
-  { "InlineFunctionExpansion", "Ob0", "Disabled", "Disabled", 0 },
-  { "InlineFunctionExpansion", "Ob1", "Only __inline", "OnlyExplicitInline",
-    0 },
-  { "InlineFunctionExpansion", "Ob2", "Any Suitable", "AnySuitable", 0 },
-
-  { "FavorSizeOrSpeed", "Os", "Favor small code", "Size", 0 },
-  { "FavorSizeOrSpeed", "Ot", "Favor fast code", "Speed", 0 },
-  { "FavorSizeOrSpeed", "", "Neither", "Neither", 0 },
-
-  { "ExceptionHandling", "EHa", "Yes with SEH Exceptions", "Async", 0 },
-  { "ExceptionHandling", "EHsc", "Yes", "Sync", 0 },
-  { "ExceptionHandling", "EHs", "Yes with Extern C functions", "SyncCThrow",
-    0 },
-  { "ExceptionHandling", "", "No", "false", 0 },
-
-  { "BasicRuntimeChecks", "RTCs", "Stack Frames", "StackFrameRuntimeCheck",
-    0 },
-  { "BasicRuntimeChecks", "RTCu", "Uninitialized variables",
-    "UninitializedLocalUsageCheck", 0 },
-  { "BasicRuntimeChecks", "RTC1", "Both (/RTC1, equiv. to /RTCsu)",
-    "EnableFastChecks", 0 },
-  { "BasicRuntimeChecks", "", "Default", "Default", 0 },
-
-  { "RuntimeLibrary", "MT", "Multi-threaded", "MultiThreaded", 0 },
-  { "RuntimeLibrary", "MTd", "Multi-threaded Debug", "MultiThreadedDebug", 0 },
-  { "RuntimeLibrary", "MD", "Multi-threaded DLL", "MultiThreadedDLL", 0 },
-  { "RuntimeLibrary", "MDd", "Multi-threaded Debug DLL",
-    "MultiThreadedDebugDLL", 0 },
-
-  { "StructMemberAlignment", "Zp1", "1 Byte", "1Byte", 0 },
-  { "StructMemberAlignment", "Zp2", "2 Bytes", "2Bytes", 0 },
-  { "StructMemberAlignment", "Zp4", "4 Byte", "4Bytes", 0 },
-  { "StructMemberAlignment", "Zp8", "8 Bytes", "8Bytes", 0 },
-  { "StructMemberAlignment", "Zp16", "16 Bytes", "16Bytes", 0 },
-  { "StructMemberAlignment", "", "Default", "Default", 0 },
-
-  { "EnableEnhancedInstructionSet", "arch:SSE",
-    "Streaming SIMD Extensions (/arch:SSE)", "StreamingSIMDExtensions", 0 },
-  { "EnableEnhancedInstructionSet", "arch:SSE2",
-    "Streaming SIMD Extensions 2 (/arch:SSE2)", "StreamingSIMDExtensions2",
-    0 },
-  { "EnableEnhancedInstructionSet", "", "Not Set", "NotSet", 0 },
-
-  { "FloatingPointModel", "fp:precise", "Precise", "Precise", 0 },
-  { "FloatingPointModel", "fp:strict", "Strict", "Strict", 0 },
-  { "FloatingPointModel", "fp:fast", "Fast", "Fast", 0 },
-
-  { "PrecompiledHeader", "Yc", "Create", "Create",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "PrecompiledHeader", "Yu", "Use", "Use",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "PrecompiledHeader", "Y-", "Not Using Precompiled Headers", "NotUsing",
-    0 },
-
-  { "AssemblerOutput", "", "No Listing", "NoListing", 0 },
-  { "AssemblerOutput", "FA", "Assembly-Only Listing", "AssemblyCode", 0 },
-  { "AssemblerOutput", "FAc", "Assembly With Machine Code",
-    "AssemblyAndMachineCode", 0 },
-  { "AssemblerOutput", "FAs", "Assembly With Source Code",
-    "AssemblyAndSourceCode", 0 },
-  { "AssemblerOutput", "FAcs", "Assembly, Machine Code and Source", "All", 0 },
-
-  { "CallingConvention", "Gd", "__cdecl", "Cdecl", 0 },
-  { "CallingConvention", "Gr", "__fastcall", "FastCall", 0 },
-  { "CallingConvention", "Gz", "__stdcall", "StdCall", 0 },
-
-  { "CompileAs", "", "Default", "Default", 0 },
-  { "CompileAs", "TC", "Compile as C Code", "CompileAsC", 0 },
-  { "CompileAs", "TP", "Compile as C++ Code", "CompileAsCpp", 0 },
-
-  { "ErrorReporting", "errorReport:none", "Do Not Send Report", "None", 0 },
-  { "ErrorReporting", "errorReport:prompt", "Prompt Immediately", "Prompt",
-    0 },
-  { "ErrorReporting", "errorReport:queue", "Queue For Next Login", "Queue",
-    0 },
-  { "ErrorReporting", "errorReport:send", "Send Automatically", "Send", 0 },
-
-  { "CompileAsManaged", "", "No Common Language RunTime Support", "false", 0 },
-  { "CompileAsManaged", "clr", "Common Language RunTime Support", "true", 0 },
-  { "CompileAsManaged", "clr:pure",
-    "Pure MSIL Common Language RunTime Support", "Pure", 0 },
-  { "CompileAsManaged", "clr:safe",
-    "Safe MSIL Common Language RunTime Support", "Safe", 0 },
-  { "CompileAsManaged", "clr:oldSyntax",
-    "Common Language RunTime Support, Old Syntax", "OldSyntax", 0 },
-
-  // Bool Properties
-  { "SuppressStartupBanner", "nologo-", "", "false", 0 },
-  { "SuppressStartupBanner", "nologo", "", "true", 0 },
-  { "TreatWarningAsError", "WX-", "", "false", 0 },
-  { "TreatWarningAsError", "WX", "", "true", 0 },
-  { "IntrinsicFunctions", "Oi", "", "true", 0 },
-  { "OmitFramePointers", "Oy-", "", "false", 0 },
-  { "OmitFramePointers", "Oy", "", "true", 0 },
-  { "EnableFiberSafeOptimizations", "GT", "", "true", 0 },
-  { "WholeProgramOptimization", "GL", "", "true", 0 },
-  { "UndefineAllPreprocessorDefinitions", "u", "", "true", 0 },
-  { "IgnoreStandardIncludePath", "X", "", "true", 0 },
-  { "PreprocessToFile", "P", "", "true", 0 },
-  { "PreprocessSuppressLineNumbers", "EP", "", "true", 0 },
-  { "PreprocessKeepComments", "C", "", "true", 0 },
-  { "StringPooling", "GF-", "", "false", 0 },
-  { "StringPooling", "GF", "", "true", 0 },
-  { "MinimalRebuild", "Gm-", "", "false", 0 },
-  { "MinimalRebuild", "Gm", "", "true", 0 },
-  { "SmallerTypeCheck", "RTCc", "", "true", 0 },
-  { "BufferSecurityCheck", "GS-", "", "false", 0 },
-  { "BufferSecurityCheck", "GS", "", "true", 0 },
-  { "FunctionLevelLinking", "Gy-", "", "false", 0 },
-  { "FunctionLevelLinking", "Gy", "", "true", 0 },
-  { "FloatingPointExceptions", "fp:except-", "", "false", 0 },
-  { "FloatingPointExceptions", "fp:except", "", "true", 0 },
-  { "CreateHotpatchableImage", "hotpatch", "", "true", 0 },
-  { "DisableLanguageExtensions", "Za", "", "true", 0 },
-  { "TreatWChar_tAsBuiltInType", "Zc:wchar_t-", "", "false", 0 },
-  { "TreatWChar_tAsBuiltInType", "Zc:wchar_t", "", "true", 0 },
-  { "ForceConformanceInForLoopScope", "Zc:forScope-", "", "false", 0 },
-  { "ForceConformanceInForLoopScope", "Zc:forScope", "", "true", 0 },
-  { "RuntimeTypeInfo", "GR-", "", "false", 0 },
-  { "RuntimeTypeInfo", "GR", "", "true", 0 },
-  { "OpenMPSupport", "openmp-", "", "false", 0 },
-  { "OpenMPSupport", "openmp", "", "true", 0 },
-  { "ExpandAttributedSource", "Fx", "", "true", 0 },
-  { "ShowIncludes", "showIncludes", "", "true", 0 },
-  { "EnablePREfast", "analyze-", "", "false", 0 },
-  { "EnablePREfast", "analyze", "", "true", 0 },
-  { "UseFullPaths", "FC", "", "true", 0 },
-  { "OmitDefaultLibName", "Zl", "", "true", 0 },
-  { "UseUnicodeForAssemblerListing", "FAu", "", "true", 0 },
-
-  // Bool Properties With Argument
-  { "MultiProcessorCompilation", "MP", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "ProcessorNumber", "MP", "Multi-processor Compilation", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "GenerateXMLDocumentationFiles", "doc", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "XMLDocumentationFileName", "doc", "Generate XML Documentation Files", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "BrowseInformation", "FR", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "BrowseInformationFile", "FR", "Enable Browse Information", "",
-    cmVS7FlagTable::UserValueRequired },
-
-  // String List Properties
-  { "AdditionalIncludeDirectories", "I", "Additional Include Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AdditionalUsingDirectories", "AI", "Resolve #using References", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "PreprocessorDefinitions", "D ", "Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "UndefinePreprocessorDefinitions", "U",
-    "Undefine Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "DisableSpecificWarnings", "wd", "Disable Specific Warnings", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ForcedIncludeFiles", "FI", "Forced Include File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ForcedUsingFiles", "FU", "Forced #using File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "TreatSpecificWarningsAsErrors", "we", "Treat Specific Warnings As Errors",
-    "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-
-  // String Properties
-  // Skip [TrackerLogDirectory] - no command line Switch.
-  { "PreprocessOutputPath", "Fi", "Preprocess Output Path", "",
-    cmVS7FlagTable::UserValue },
-  { "PrecompiledHeaderFile", "Yc", "Precompiled Header Name", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "PrecompiledHeaderFile", "Yu", "Precompiled Header Name", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "PrecompiledHeaderOutputFile", "Fp", "Precompiled Header Output File", "",
-    cmVS7FlagTable::UserValue },
-  { "AssemblerListingLocation", "Fa", "ASM List Location", "",
-    cmVS7FlagTable::UserValue },
-  { "ObjectFileName", "Fo", "Object File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "ProgramDataBaseFileName", "Fd", "Program Database File Name", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [XMLDocumentationFileName] - no command line Switch.
-  // Skip [BrowseInformationFile] - no command line Switch.
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS10CSharpFlagTable.h b/Source/cmVS10CSharpFlagTable.h
deleted file mode 100644
index 6ac7a76..0000000
--- a/Source/cmVS10CSharpFlagTable.h
+++ /dev/null
@@ -1,121 +0,0 @@
-static cmVS7FlagTable cmVS10CSharpFlagTable[] = {
-  { "ProjectName", "out:", "", "", cmIDEFlagTable::UserValueRequired },
-
-  { "OutputType", "target:exe", "", "Exe", 0 },
-  { "OutputType", "target:winexe", "", "Winexe", 0 },
-  { "OutputType", "target:library", "", "Library", 0 },
-  { "OutputType", "target:module", "", "Module", 0 },
-
-  { "DocumentationFile", "doc", "", "", cmIDEFlagTable::UserValueRequired },
-
-  { "Platform", "platform:x86", "", "x86", 0 },
-  { "Platform", "platform:Itanium", "", "Itanium", 0 },
-  { "Platform", "platform:x64", "", "x64", 0 },
-  { "Platform", "platform:arm", "", "arm", 0 },
-  { "Platform", "platform:anycpu32bitpreferred", "", "anycpu32bitpreferred",
-    0 },
-  { "Platform", "platform:anycpu", "", "anycpu", 0 },
-
-  { "References", "reference:", "mit alias", "", 0 },
-  { "References", "reference:", "dateiliste", "", 0 },
-  { "AddModules", "addmodule:", "", "", cmIDEFlagTable::SemicolonAppendable },
-  { "", "link", "", "", 0 },
-
-  { "Win32Resource", "win32res:", "", "", cmIDEFlagTable::UserValueRequired },
-  { "ApplicationIcon", "win32icon:", "", "",
-    cmIDEFlagTable::UserValueRequired },
-
-  { "ApplicationManifest", "win32manifest:", "", "",
-    cmIDEFlagTable::UserValueRequired },
-
-  { "NoWin32Manifest", "nowin32manifest", "", "true", 0 },
-
-  { "DefineDebug", "debug", "", "true", cmIDEFlagTable::Continue },
-
-  { "DebugSymbols", "debug", "", "true", 0 },
-  { "DebugSymbols", "debug-", "", "false", 0 },
-  { "DebugSymbols", "debug+", "", "true", 0 },
-
-  { "DebugType", "debug:none", "", "none", 0 },
-  { "DebugType", "debug:full", "", "full", 0 },
-  { "DebugType", "debug:pdbonly", "", "pdbonly", 0 },
-
-  { "Optimize", "optimize", "", "true", 0 },
-  { "Optimize", "optimize-", "", "false", 0 },
-  { "Optimize", "optimize+", "", "true", 0 },
-
-  { "TreatWarningsAsErrors", "warnaserror", "", "true", 0 },
-  { "TreatWarningsAsErrors", "warnaserror-", "", "false", 0 },
-  { "TreatWarningsAsErrors", "warnaserror+", "", "true", 0 },
-
-  { "WarningsAsErrors", "warnaserror", "", "", 0 },
-  { "WarningsAsErrors", "warnaserror-", "", "", 0 },
-  { "WarningsAsErrors", "warnaserror+", "", "", 0 },
-
-  { "WarningLevel", "warn:0", "", "0", 0 },
-  { "WarningLevel", "warn:1", "", "1", 0 },
-  { "WarningLevel", "warn:2", "", "2", 0 },
-  { "WarningLevel", "warn:3", "", "3", 0 },
-  { "WarningLevel", "warn:4", "", "4", 0 },
-  { "DisabledWarnings", "nowarn", "", "", 0 },
-
-  { "CheckForOverflowUnderflow", "checked", "", "true", 0 },
-  { "CheckForOverflowUnderflow", "checked-", "", "false", 0 },
-  { "CheckForOverflowUnderflow", "checked+", "", "true", 0 },
-
-  { "AllowUnsafeBlocks", "unsafe", "", "true", 0 },
-  { "AllowUnsafeBlocks", "unsafe-", "", "false", 0 },
-  { "AllowUnsafeBlocks", "unsafe+", "", "true", 0 },
-
-  { "DefineConstants", "define:", "", "",
-    cmIDEFlagTable::SemicolonAppendable | cmIDEFlagTable::UserValue },
-
-  { "LangVersion", "langversion:ISO-1", "", "ISO-1", 0 },
-  { "LangVersion", "langversion:ISO-2", "", "ISO-2", 0 },
-  { "LangVersion", "langversion:3", "", "3", 0 },
-  { "LangVersion", "langversion:4", "", "4", 0 },
-  { "LangVersion", "langversion:5", "", "5", 0 },
-  { "LangVersion", "langversion:6", "", "6", 0 },
-  { "LangVersion", "langversion:default", "", "default", 0 },
-
-  { "DelaySign", "delaysign", "", "true", 0 },
-  { "DelaySign", "delaysign-", "", "false", 0 },
-  { "DelaySign", "delaysign+", "", "true", 0 },
-
-  { "AssemblyOriginatorKeyFile", "keyfile", "", "", 0 },
-
-  { "KeyContainerName", "keycontainer", "", "", 0 },
-
-  { "NoLogo", "nologo", "", "", 0 },
-
-  { "NoConfig", "noconfig", "", "true", 0 },
-
-  { "BaseAddress", "baseaddress:", "", "", 0 },
-
-  { "CodePage", "codepage", "", "", 0 },
-
-  { "Utf8Output", "utf8output", "", "", 0 },
-
-  { "MainEntryPoint", "main:", "", "", 0 },
-
-  { "GenerateFullPaths", "fullpaths", "", "true", 0 },
-
-  { "FileAlignment", "filealign", "", "", 0 },
-
-  { "PdbFile", "pdb:", "", "", 0 },
-
-  { "NoStandardLib", "nostdlib", "", "true", 0 },
-  { "NoStandardLib", "nostdlib-", "", "false", 0 },
-  { "NoStandardLib", "nostdlib+", "", "true", 0 },
-
-  { "SubsystemVersion", "subsystemversion", "", "", 0 },
-
-  { "AdditionalLibPaths", "lib:", "", "", 0 },
-
-  { "ErrorReport", "errorreport:none", "Do Not Send Report", "none", 0 },
-  { "ErrorReport", "errorreport:prompt", "Prompt Immediately", "prompt", 0 },
-  { "ErrorReport", "errorreport:queue", "Queue For Next Login", "queue", 0 },
-  { "ErrorReport", "errorreport:send", "Send Automatically", "send", 0 },
-
-  { 0, 0, 0, 0, 0 },
-};
diff --git a/Source/cmVS10CudaFlagTable.h b/Source/cmVS10CudaFlagTable.h
deleted file mode 100644
index 2b57e08..0000000
--- a/Source/cmVS10CudaFlagTable.h
+++ /dev/null
@@ -1,54 +0,0 @@
-static cmVS7FlagTable cmVS10CudaFlagTable[] = {
-  // Collect options meant for the host compiler.
-  { "AdditionalCompilerOptions", "Xcompiler=", "Host compiler options", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SpaceAppendable },
-  { "AdditionalCompilerOptions", "Xcompiler", "Host compiler options", "",
-    cmVS7FlagTable::UserFollowing | cmVS7FlagTable::SpaceAppendable },
-
-  // Select the CUDA runtime library.
-  { "CudaRuntime", "cudart=none", "No CUDA runtime library", "None", 0 },
-  { "CudaRuntime", "cudart=shared", "Shared/dynamic CUDA runtime library",
-    "Shared", 0 },
-  { "CudaRuntime", "cudart=static", "Static CUDA runtime library", "Static",
-    0 },
-  { "CudaRuntime", "cudart", "CUDA runtime library", "",
-    cmVS7FlagTable::UserFollowing },
-
-  // Capture arch/code arguments into temporaries for post-processing.
-  { "cmake-temp-gencode", "gencode=", "", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "cmake-temp-gencode", "gencode", "", "",
-    cmVS7FlagTable::UserFollowing | cmVS7FlagTable::SemicolonAppendable },
-  { "cmake-temp-gencode", "-generate-code=", "", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "cmake-temp-gencode", "-generate-code", "", "",
-    cmVS7FlagTable::UserFollowing | cmVS7FlagTable::SemicolonAppendable },
-
-  { "cmake-temp-code", "code=", "", "", cmVS7FlagTable::UserValue },
-  { "cmake-temp-code", "code", "", "", cmVS7FlagTable::UserFollowing },
-  { "cmake-temp-code", "-gpu-code=", "", "", cmVS7FlagTable::UserValue },
-  { "cmake-temp-code", "-gpu-code", "", "", cmVS7FlagTable::UserFollowing },
-
-  { "cmake-temp-arch", "arch=", "", "", cmVS7FlagTable::UserValue },
-  { "cmake-temp-arch", "arch", "", "", cmVS7FlagTable::UserFollowing },
-  { "cmake-temp-arch", "-gpu-architecture=", "", "",
-    cmVS7FlagTable::UserValue },
-  { "cmake-temp-arch", "-gpu-architecture", "", "",
-    cmVS7FlagTable::UserFollowing },
-
-  // Other flags.
-
-  { "FastMath", "use_fast_math", "", "true", 0 },
-  { "FastMath", "-use_fast_math", "", "true", 0 },
-
-  { "GPUDebugInfo", "G", "", "true", 0 },
-  { "GPUDebugInfo", "-device-debug", "", "true", 0 },
-
-  { "HostDebugInfo", "g", "", "true", 0 },
-  { "HostDebugInfo", "-debug", "", "true", 0 },
-
-  { "MaxRegCount", "maxrregcount=", "", "", cmVS7FlagTable::UserValue },
-  { "MaxRegCount", "maxrregcount", "", "", cmVS7FlagTable::UserFollowing },
-
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS10CudaHostFlagTable.h b/Source/cmVS10CudaHostFlagTable.h
deleted file mode 100644
index 5b61066..0000000
--- a/Source/cmVS10CudaHostFlagTable.h
+++ /dev/null
@@ -1,35 +0,0 @@
-static cmVS7FlagTable cmVS10CudaHostFlagTable[] = {
-  //{"Optimization", "", "<inherit from host>", "InheritFromHost", 0},
-  { "Optimization", "Od", "Disabled", "Od", 0 },
-  { "Optimization", "O1", "Minimize Size", "O1", 0 },
-  { "Optimization", "O2", "Maximize Speed", "O2", 0 },
-  { "Optimization", "Ox", "Full Optimization", "O3", 0 },
-
-  //{"Runtime", "", "<inherit from host>", "InheritFromHost", 0},
-  { "Runtime", "MT", "Multi-Threaded", "MT", 0 },
-  { "Runtime", "MTd", "Multi-Threaded Debug", "MTd", 0 },
-  { "Runtime", "MD", "Multi-Threaded DLL", "MD", 0 },
-  { "Runtime", "MDd", "Multi-threaded Debug DLL", "MDd", 0 },
-  { "Runtime", "ML", "Single-Threaded", "ML", 0 },
-  { "Runtime", "MLd", "Single-Threaded Debug", "MLd", 0 },
-
-  //{"RuntimeChecks", "", "<inherit from host>", "InheritFromHost", 0},
-  //{"RuntimeChecks", "", "Default", "Default", 0},
-  { "RuntimeChecks", "RTCs", "Stack Frames", "RTCs", 0 },
-  { "RuntimeChecks", "RTCu", "Uninitialized Variables", "RTCu", 0 },
-  { "RuntimeChecks", "RTC1", "Both", "RTC1", 0 },
-
-  //{"TypeInfo", "", "<inherit from host>", "InheritFromHost", 0},
-  { "TypeInfo", "GR", "Yes", "true", 0 },
-  { "TypeInfo", "GR-", "No", "false", 0 },
-
-  //{"Warning", "", "<inherit from host>", "InheritFromHost", 0},
-  { "Warning", "W0", "Off: Turn Off All Warnings", "W0", 0 },
-  { "Warning", "W1", "Level 1", "W1", 0 },
-  { "Warning", "W2", "Level 2", "W2", 0 },
-  { "Warning", "W3", "Level 3", "W3", 0 },
-  { "Warning", "W4", "Level 4", "W4", 0 },
-  { "Warning", "Wall", "Enable All Warnings", "Wall", 0 },
-
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS10LibFlagTable.h b/Source/cmVS10LibFlagTable.h
deleted file mode 100644
index be4f475..0000000
--- a/Source/cmVS10LibFlagTable.h
+++ /dev/null
@@ -1,76 +0,0 @@
-static cmVS7FlagTable cmVS10LibFlagTable[] = {
-
-  // Enum Properties
-  { "ErrorReporting", "ERRORREPORT:PROMPT", "PromptImmediately",
-    "PromptImmediately", 0 },
-  { "ErrorReporting", "ERRORREPORT:QUEUE", "Queue For Next Login",
-    "QueueForNextLogin", 0 },
-  { "ErrorReporting", "ERRORREPORT:SEND", "Send Error Report",
-    "SendErrorReport", 0 },
-  { "ErrorReporting", "ERRORREPORT:NONE", "No Error Report", "NoErrorReport",
-    0 },
-
-  { "TargetMachine", "MACHINE:ARM", "MachineARM", "MachineARM", 0 },
-  { "TargetMachine", "MACHINE:EBC", "MachineEBC", "MachineEBC", 0 },
-  { "TargetMachine", "MACHINE:IA64", "MachineIA64", "MachineIA64", 0 },
-  { "TargetMachine", "MACHINE:MIPS", "MachineMIPS", "MachineMIPS", 0 },
-  { "TargetMachine", "MACHINE:MIPS16", "MachineMIPS16", "MachineMIPS16", 0 },
-  { "TargetMachine", "MACHINE:MIPSFPU", "MachineMIPSFPU", "MachineMIPSFPU",
-    0 },
-  { "TargetMachine", "MACHINE:MIPSFPU16", "MachineMIPSFPU16",
-    "MachineMIPSFPU16", 0 },
-  { "TargetMachine", "MACHINE:SH4", "MachineSH4", "MachineSH4", 0 },
-  { "TargetMachine", "MACHINE:THUMB", "MachineTHUMB", "MachineTHUMB", 0 },
-  { "TargetMachine", "MACHINE:X64", "MachineX64", "MachineX64", 0 },
-  { "TargetMachine", "MACHINE:X86", "MachineX86", "MachineX86", 0 },
-
-  { "SubSystem", "SUBSYSTEM:CONSOLE", "Console", "Console", 0 },
-  { "SubSystem", "SUBSYSTEM:WINDOWS", "Windows", "Windows", 0 },
-  { "SubSystem", "SUBSYSTEM:NATIVE", "Native", "Native", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_APPLICATION", "EFI Application",
-    "EFI Application", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "EFI Boot Service Driver", "EFI Boot Service Driver", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_ROM", "EFI ROM", "EFI ROM", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_RUNTIME_DRIVER", "EFI Runtime", "EFI Runtime",
-    0 },
-  { "SubSystem", "SUBSYSTEM:WINDOWSCE", "WindowsCE", "WindowsCE", 0 },
-  { "SubSystem", "SUBSYSTEM:POSIX", "POSIX", "POSIX", 0 },
-
-  // Bool Properties
-  { "SuppressStartupBanner", "NOLOGO", "", "true", 0 },
-  { "IgnoreAllDefaultLibraries", "NODEFAULTLIB", "", "true", 0 },
-  { "TreatLibWarningAsErrors", "WX:NO", "", "false", 0 },
-  { "TreatLibWarningAsErrors", "WX", "", "true", 0 },
-  { "Verbose", "VERBOSE", "", "true", 0 },
-  { "LinkTimeCodeGeneration", "LTCG", "", "true", 0 },
-
-  // Bool Properties With Argument
-
-  // String List Properties
-  // Skip [AdditionalDependencies] - no command line Switch.
-  { "AdditionalLibraryDirectories",
-    "LIBPATH:", "Additional Library Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "IgnoreSpecificDefaultLibraries",
-    "NODEFAULTLIB:", "Ignore Specific Default Libraries", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ExportNamedFunctions", "EXPORT:", "Export Named Functions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "RemoveObjects", "REMOVE:", "Remove Objects", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-
-  // String Properties
-  { "OutputFile", "OUT:", "Output File", "", cmVS7FlagTable::UserValue },
-  { "ModuleDefinitionFile", "DEF:", "Module Definition File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "ForceSymbolReferences", "INCLUDE:", "Force Symbol References", "",
-    cmVS7FlagTable::UserValue },
-  { "DisplayLibrary", "LIST:", "Display Library to standard output", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [MinimumRequiredVersion] - no command line Switch.
-  { "Name", "NAME:", "Name", "", cmVS7FlagTable::UserValue },
-  // Skip [TrackerLogDirectory] - no command line Switch.
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS10LinkFlagTable.h b/Source/cmVS10LinkFlagTable.h
deleted file mode 100644
index 8f5b59b..0000000
--- a/Source/cmVS10LinkFlagTable.h
+++ /dev/null
@@ -1,247 +0,0 @@
-static cmVS7FlagTable cmVS10LinkFlagTable[] = {
-
-  // Enum Properties
-  { "ShowProgress", "", "Not Set", "NotSet", 0 },
-  { "ShowProgress", "VERBOSE", "Display all progress messages", "LinkVerbose",
-    0 },
-  { "ShowProgress", "VERBOSE:Lib", "For Libraries Searched", "LinkVerboseLib",
-    0 },
-  { "ShowProgress", "VERBOSE:ICF",
-    "About COMDAT folding during optimized linking", "LinkVerboseICF", 0 },
-  { "ShowProgress", "VERBOSE:REF",
-    "About data removed during optimized linking", "LinkVerboseREF", 0 },
-  { "ShowProgress", "VERBOSE:SAFESEH", "About Modules incompatible with SEH",
-    "LinkVerboseSAFESEH", 0 },
-  { "ShowProgress", "VERBOSE:CLR",
-    "About linker activity related to managed code", "LinkVerboseCLR", 0 },
-
-  { "ForceFileOutput", "FORCE", "Enabled", "Enabled", 0 },
-  { "ForceFileOutput", "FORCE:MULTIPLE", "Multiply Defined Symbol Only",
-    "MultiplyDefinedSymbolOnly", 0 },
-  { "ForceFileOutput", "FORCE:UNRESOLVED", "Undefined Symbol Only",
-    "UndefinedSymbolOnly", 0 },
-
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN", "Enabled", "Enabled", 0 },
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN:5", "X86 Image Only",
-    "X86Image", 0 },
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN:6", "X64 Image Only",
-    "X64Image", 0 },
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN:16", "Itanium Image Only",
-    "ItaniumImage", 0 },
-
-  // correct flags for uac should be /MANIFESTUAC, but some projects already
-  // use this bug to access uac field, so keep these for compatibility
-  { "UACExecutionLevel", "level='asInvoker'", "asInvoker", "AsInvoker", 0 },
-  { "UACExecutionLevel", "level='highestAvailable'", "highestAvailable",
-    "HighestAvailable", 0 },
-  { "UACExecutionLevel", "level='requireAdministrator'",
-    "requireAdministrator", "RequireAdministrator", 0 },
-
-  { "SubSystem", "", "Not Set", "NotSet", 0 },
-  { "SubSystem", "SUBSYSTEM:CONSOLE", "Console", "Console", 0 },
-  { "SubSystem", "SUBSYSTEM:WINDOWS", "Windows", "Windows", 0 },
-  { "SubSystem", "SUBSYSTEM:NATIVE", "Native", "Native", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_APPLICATION", "EFI Application",
-    "EFI Application", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "EFI Boot Service Driver", "EFI Boot Service Driver", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_ROM", "EFI ROM", "EFI ROM", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_RUNTIME_DRIVER", "EFI Runtime", "EFI Runtime",
-    0 },
-  { "SubSystem", "SUBSYSTEM:WINDOWSCE", "WindowsCE", "WindowsCE", 0 },
-  { "SubSystem", "SUBSYSTEM:POSIX", "POSIX", "POSIX", 0 },
-
-  { "Driver", "", "Not Set", "NotSet", 0 },
-  { "Driver", "Driver", "Driver", "Driver", 0 },
-  { "Driver", "DRIVER:UPONLY", "UP Only", "UpOnly", 0 },
-  { "Driver", "DRIVER:WDM", "WDM", "WDM", 0 },
-
-  { "LinkTimeCodeGeneration", "", "Default", "Default", 0 },
-  { "LinkTimeCodeGeneration", "LTCG", "Use Link Time Code Generation",
-    "UseLinkTimeCodeGeneration", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:PGInstrument",
-    "Profile Guided Optimization - Instrument", "PGInstrument", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:PGOptimize",
-    "Profile Guided Optimization - Optimization", "PGOptimization", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:PGUpdate",
-    "Profile Guided Optimization - Update", "PGUpdate", 0 },
-
-  { "TargetMachine", "", "Not Set", "NotSet", 0 },
-  { "TargetMachine", "MACHINE:ARM", "MachineARM", "MachineARM", 0 },
-  { "TargetMachine", "MACHINE:EBC", "MachineEBC", "MachineEBC", 0 },
-  { "TargetMachine", "MACHINE:IA64", "MachineIA64", "MachineIA64", 0 },
-  { "TargetMachine", "MACHINE:MIPS", "MachineMIPS", "MachineMIPS", 0 },
-  { "TargetMachine", "MACHINE:MIPS16", "MachineMIPS16", "MachineMIPS16", 0 },
-  { "TargetMachine", "MACHINE:MIPSFPU", "MachineMIPSFPU", "MachineMIPSFPU",
-    0 },
-  { "TargetMachine", "MACHINE:MIPSFPU16", "MachineMIPSFPU16",
-    "MachineMIPSFPU16", 0 },
-  { "TargetMachine", "MACHINE:SH4", "MachineSH4", "MachineSH4", 0 },
-  { "TargetMachine", "MACHINE:THUMB", "MachineTHUMB", "MachineTHUMB", 0 },
-  { "TargetMachine", "MACHINE:X64", "MachineX64", "MachineX64", 0 },
-  { "TargetMachine", "MACHINE:X86", "MachineX86", "MachineX86", 0 },
-
-  { "CLRThreadAttribute", "CLRTHREADATTRIBUTE:MTA", "MTA threading attribute",
-    "MTAThreadingAttribute", 0 },
-  { "CLRThreadAttribute", "CLRTHREADATTRIBUTE:STA", "STA threading attribute",
-    "STAThreadingAttribute", 0 },
-  { "CLRThreadAttribute", "CLRTHREADATTRIBUTE:NONE",
-    "Default threading attribute", "DefaultThreadingAttribute", 0 },
-
-  { "CLRImageType", "CLRIMAGETYPE:IJW", "Force IJW image", "ForceIJWImage",
-    0 },
-  { "CLRImageType", "CLRIMAGETYPE:PURE", "Force Pure IL Image",
-    "ForcePureILImage", 0 },
-  { "CLRImageType", "CLRIMAGETYPE:SAFE", "Force Safe IL Image",
-    "ForceSafeILImage", 0 },
-  { "CLRImageType", "", "Default image type", "Default", 0 },
-
-  { "LinkErrorReporting", "ERRORREPORT:PROMPT", "PromptImmediately",
-    "PromptImmediately", 0 },
-  { "LinkErrorReporting", "ERRORREPORT:QUEUE", "Queue For Next Login",
-    "QueueForNextLogin", 0 },
-  { "LinkErrorReporting", "ERRORREPORT:SEND", "Send Error Report",
-    "SendErrorReport", 0 },
-  { "LinkErrorReporting", "ERRORREPORT:NONE", "No Error Report",
-    "NoErrorReport", 0 },
-
-  { "CLRSupportLastError", "CLRSupportLastError", "Enabled", "Enabled", 0 },
-  { "CLRSupportLastError", "CLRSupportLastError:NO", "Disabled", "Disabled",
-    0 },
-  { "CLRSupportLastError", "CLRSupportLastError:SYSTEMDLL", "System Dlls Only",
-    "SystemDlls", 0 },
-
-  // Bool Properties
-  { "LinkIncremental", "INCREMENTAL:NO", "", "false", 0 },
-  { "LinkIncremental", "INCREMENTAL", "", "true", 0 },
-  { "SuppressStartupBanner", "NOLOGO", "", "true", 0 },
-  { "LinkStatus", "LTCG:NOSTATUS", "", "false", 0 },
-  { "LinkStatus", "LTCG:STATUS", "", "true", 0 },
-  { "PreventDllBinding", "ALLOWBIND:NO", "", "false", 0 },
-  { "PreventDllBinding", "ALLOWBIND", "", "true", 0 },
-  { "TreatLinkerWarningAsErrors", "WX:NO", "", "false", 0 },
-  { "TreatLinkerWarningAsErrors", "WX", "", "true", 0 },
-  { "IgnoreAllDefaultLibraries", "NODEFAULTLIB", "", "true", 0 },
-  { "GenerateManifest", "MANIFEST:NO", "", "false", 0 },
-  { "GenerateManifest", "MANIFEST", "", "true", 0 },
-  { "AllowIsolation", "ALLOWISOLATION:NO", "", "false", 0 },
-
-  // correct flags for uac should be /MANIFESTUAC, but some projects already
-  // use this bug to access uac field, so keep these for compatibility
-  { "UACUIAccess", "uiAccess='false'", "", "false", 0 },
-  { "UACUIAccess", "uiAccess='true'", "", "true", 0 },
-
-  { "GenerateDebugInformation", "DEBUG", "", "true",
-    cmVS7FlagTable::CaseInsensitive },
-  { "MapExports", "MAPINFO:EXPORTS", "", "true", 0 },
-  { "AssemblyDebug", "ASSEMBLYDEBUG:DISABLE", "", "false", 0 },
-  { "AssemblyDebug", "ASSEMBLYDEBUG", "", "true", 0 },
-  { "LargeAddressAware", "LARGEADDRESSAWARE:NO", "", "false", 0 },
-  { "LargeAddressAware", "LARGEADDRESSAWARE", "", "true", 0 },
-  { "TerminalServerAware", "TSAWARE:NO", "", "false", 0 },
-  { "TerminalServerAware", "TSAWARE", "", "true", 0 },
-  { "SwapRunFromCD", "SWAPRUN:CD", "", "true", 0 },
-  { "SwapRunFromNET", "SWAPRUN:NET", "", "true", 0 },
-  { "OptimizeReferences", "OPT:NOREF", "", "false", 0 },
-  { "OptimizeReferences", "OPT:REF", "", "true", 0 },
-  { "EnableCOMDATFolding", "OPT:NOICF", "", "false", 0 },
-  { "EnableCOMDATFolding", "OPT:ICF", "", "true", 0 },
-  { "IgnoreEmbeddedIDL", "IGNOREIDL", "", "true", 0 },
-  { "NoEntryPoint", "NOENTRY", "", "true", 0 },
-  { "SetChecksum", "RELEASE", "", "true", 0 },
-  { "RandomizedBaseAddress", "DYNAMICBASE:NO", "", "false", 0 },
-  { "RandomizedBaseAddress", "DYNAMICBASE", "", "true", 0 },
-  { "FixedBaseAddress", "FIXED:NO", "", "false", 0 },
-  { "FixedBaseAddress", "FIXED", "", "true", 0 },
-  { "DataExecutionPrevention", "NXCOMPAT:NO", "", "false", 0 },
-  { "DataExecutionPrevention", "NXCOMPAT", "", "true", 0 },
-  { "TurnOffAssemblyGeneration", "NOASSEMBLY", "", "true", 0 },
-  { "SupportUnloadOfDelayLoadedDLL", "DELAY:UNLOAD", "", "true", 0 },
-  { "SupportNobindOfDelayLoadedDLL", "DELAY:NOBIND", "", "true", 0 },
-  { "Profile", "PROFILE", "", "true", 0 },
-  { "LinkDelaySign", "DELAYSIGN:NO", "", "false", 0 },
-  { "LinkDelaySign", "DELAYSIGN", "", "true", 0 },
-  { "CLRUnmanagedCodeCheck", "CLRUNMANAGEDCODECHECK:NO", "", "false", 0 },
-  { "CLRUnmanagedCodeCheck", "CLRUNMANAGEDCODECHECK", "", "true", 0 },
-  { "ImageHasSafeExceptionHandlers", "SAFESEH:NO", "", "false", 0 },
-  { "ImageHasSafeExceptionHandlers", "SAFESEH", "", "true", 0 },
-  { "LinkDLL", "DLL", "", "true", 0 },
-
-  // Bool Properties With Argument
-  { "EnableUAC", "MANIFESTUAC:", "", "",
-    cmVS7FlagTable::UserValueRequired | cmVS7FlagTable::SpaceAppendable },
-  { "GenerateMapFile", "MAP", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "MapFileName", "MAP:", "Generate Map File", "",
-    cmVS7FlagTable::UserValueRequired },
-
-  // String List Properties
-  { "AdditionalLibraryDirectories",
-    "LIBPATH:", "Additional Library Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  // Skip [AdditionalDependencies] - no command line Switch.
-  { "IgnoreSpecificDefaultLibraries",
-    "NODEFAULTLIB:", "Ignore Specific Default Libraries", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AddModuleNamesToAssembly", "ASSEMBLYMODULE:", "Add Module to Assembly",
-    "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "EmbedManagedResourceFile",
-    "ASSEMBLYRESOURCE:", "Embed Managed Resource File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ForceSymbolReferences", "INCLUDE:", "Force Symbol References", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "DelayLoadDLLs", "DELAYLOAD:", "Delay Loaded Dlls", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AssemblyLinkResource", "ASSEMBLYLINKRESOURCE:", "Assembly Link Resource",
-    "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AdditionalManifestDependencies",
-    "MANIFESTDEPENDENCY:", "Additional Manifest Dependencies", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-
-  // String Properties
-  { "OutputFile", "OUT:", "Output File", "", cmVS7FlagTable::UserValue },
-  { "Version", "VERSION:", "Version", "", cmVS7FlagTable::UserValue },
-  { "SpecifySectionAttributes", "SECTION:", "Specify Section Attributes", "",
-    cmVS7FlagTable::UserValue },
-  { "MSDOSStubFileName", "STUB:", "MS-DOS Stub File Name", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [TrackerLogDirectory] - no command line Switch.
-  { "ModuleDefinitionFile", "DEF:", "Module Definition File", "",
-    cmVS7FlagTable::UserValue },
-  { "ManifestFile", "ManifestFile:", "Manifest File", "",
-    cmVS7FlagTable::UserValue },
-  { "ProgramDatabaseFile", "PDB:", "Generate Program Database File", "",
-    cmVS7FlagTable::UserValue },
-  { "StripPrivateSymbols", "PDBSTRIPPED:", "Strip Private Symbols", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [MapFileName] - no command line Switch.
-  // Skip [MinimumRequiredVersion] - no command line Switch.
-  { "HeapReserveSize", "HEAP:", "Heap Reserve Size", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [HeapCommitSize] - no command line Switch.
-  { "StackReserveSize", "STACK:", "Stack Reserve Size", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [StackCommitSize] - no command line Switch.
-  { "FunctionOrder", "ORDER:@", "Function Order", "",
-    cmVS7FlagTable::UserValue },
-  { "ProfileGuidedDatabase", "PGD:", "Profile Guided Database", "",
-    cmVS7FlagTable::UserValue },
-  { "MidlCommandFile", "MIDL:@", "MIDL Commands", "",
-    cmVS7FlagTable::UserValue },
-  { "MergedIDLBaseFileName", "IDLOUT:", "Merged IDL Base File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "TypeLibraryFile", "TLBOUT:", "Type Library", "",
-    cmVS7FlagTable::UserValue },
-  { "EntryPointSymbol", "ENTRY:", "Entry Point", "",
-    cmVS7FlagTable::UserValue },
-  { "BaseAddress", "BASE:", "Base Address", "", cmVS7FlagTable::UserValue },
-  { "ImportLibrary", "IMPLIB:", "Import Library", "",
-    cmVS7FlagTable::UserValue },
-  { "MergeSections", "MERGE:", "Merge Sections", "",
-    cmVS7FlagTable::UserValue },
-  { "LinkKeyFile", "KEYFILE:", "Key File", "", cmVS7FlagTable::UserValue },
-  { "KeyContainer", "KEYCONTAINER:", "Key Container", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS10MASMFlagTable.h b/Source/cmVS10MASMFlagTable.h
deleted file mode 100644
index 0a45245..0000000
--- a/Source/cmVS10MASMFlagTable.h
+++ /dev/null
@@ -1,76 +0,0 @@
-static cmVS7FlagTable cmVS10MASMFlagTable[] = {
-
-  // Enum Properties
-  { "PreserveIdentifierCase", "", "Default", "0", 0 },
-  { "PreserveIdentifierCase", "Cp", "Preserves Identifier Case (/Cp)", "1",
-    0 },
-  { "PreserveIdentifierCase", "Cu",
-    "Maps all identifiers to upper case. (/Cu)", "2", 0 },
-  { "PreserveIdentifierCase", "Cx",
-    "Preserves case in public and extern symbols. (/Cx)", "3", 0 },
-
-  { "WarningLevel", "W0", "Warning Level 0 (/W0)", "0", 0 },
-  { "WarningLevel", "W1", "Warning Level 1 (/W1)", "1", 0 },
-  { "WarningLevel", "W2", "Warning Level 2 (/W2)", "2", 0 },
-  { "WarningLevel", "W3", "Warning Level 3 (/W3)", "3", 0 },
-
-  { "PackAlignmentBoundary", "", "Default", "0", 0 },
-  { "PackAlignmentBoundary", "Zp1", "One Byte Boundary (/Zp1)", "1", 0 },
-  { "PackAlignmentBoundary", "Zp2", "Two Byte Boundary (/Zp2)", "2", 0 },
-  { "PackAlignmentBoundary", "Zp4", "Four Byte Boundary (/Zp4)", "3", 0 },
-  { "PackAlignmentBoundary", "Zp8", "Eight Byte Boundary (/Zp8)", "4", 0 },
-  { "PackAlignmentBoundary", "Zp16", "Sixteen Byte Boundary (/Zp16)", "5", 0 },
-
-  { "CallingConvention", "", "Default", "0", 0 },
-  { "CallingConvention", "Gd", "Use C-style Calling Convention (/Gd)", "1",
-    0 },
-  { "CallingConvention", "Gz", "Use stdcall Calling Convention (/Gz)", "2",
-    0 },
-  { "CallingConvention", "Gc", "Use Pascal Calling Convention (/Gc)", "3", 0 },
-
-  { "ErrorReporting", "errorReport:prompt",
-    "Prompt to send report immediately (/errorReport:prompt)", "0", 0 },
-  { "ErrorReporting", "errorReport:queue",
-    "Prompt to send report at the next logon (/errorReport:queue)", "1", 0 },
-  { "ErrorReporting", "errorReport:send",
-    "Automatically send report (/errorReport:send)", "2", 0 },
-  { "ErrorReporting", "errorReport:none",
-    "Do not send report (/errorReport:none)", "3", 0 },
-
-  // Bool Properties
-  { "NoLogo", "nologo", "", "true", 0 },
-  { "GeneratePreprocessedSourceListing", "EP", "", "true", 0 },
-  { "ListAllAvailableInformation", "Sa", "", "true", 0 },
-  { "UseSafeExceptionHandlers", "safeseh", "", "true", 0 },
-  { "AddFirstPassListing", "Sf", "", "true", 0 },
-  { "EnableAssemblyGeneratedCodeListing", "Sg", "", "true", 0 },
-  { "DisableSymbolTable", "Sn", "", "true", 0 },
-  { "EnableFalseConditionalsInListing", "Sx", "", "true", 0 },
-  { "TreatWarningsAsErrors", "WX", "", "true", 0 },
-  { "MakeAllSymbolsPublic", "Zf", "", "true", 0 },
-  { "GenerateDebugInformation", "Zi", "", "true", 0 },
-  { "EnableMASM51Compatibility", "Zm", "", "true", 0 },
-  { "PerformSyntaxCheckOnly", "Zs", "", "true", 0 },
-
-  // Bool Properties With Argument
-
-  // String List Properties
-  { "PreprocessorDefinitions", "D", "Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "IncludePaths", "I", "Include Paths", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "BrowseFile", "FR", "Generate Browse Information File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  // Skip [AdditionalDependencies] - no command line Switch.
-
-  // String Properties
-  // Skip [Inputs] - no command line Switch.
-  { "ObjectFileName", "Fo", "Object File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "AssembledCodeListingFile", "Fl", "Assembled Code Listing File", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [CommandLineTemplate] - no command line Switch.
-  // Skip [ExecutionDescription] - no command line Switch.
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS10NASMFlagTable.h b/Source/cmVS10NASMFlagTable.h
deleted file mode 100644
index b91af92..0000000
--- a/Source/cmVS10NASMFlagTable.h
+++ /dev/null
@@ -1,50 +0,0 @@
-static cmVS7FlagTable cmVS10NASMFlagTable[] = {
-
-  // Enum Properties
-  { "Outputswitch", "fwin32", "", "0", 0 },
-  { "Outputswitch", "fwin", "", "0", 0 },
-  { "Outputswitch", "fwin64", "", "1", 0 },
-  { "Outputswitch", "felf", "", "2", 0 },
-  { "Outputswitch", "felf32", "", "2", 0 },
-  { "Outputswitch", "felf64", "", "3", 0 },
-
-  { "ErrorReportingFormat", "Xgnu", "", "-Xgnu	GNU format: Default format",
-    0 },
-  { "ErrorReportingFormat", "Xvc", "",
-    "-Xvc	Style used by Microsoft Visual C++", 0 },
-
-  // Bool Properties
-  { "TreatWarningsAsErrors", "Werror", "", "true", 0 },
-  { "GenerateDebugInformation", "g", "", "true", 0 },
-  { "floatunderflow", "w+float-underflow", "", "true", 0 },
-  { "macrodefaults", "w-macro-defaults", "", "true", 0 },
-  { "user", "w-user", "%warning directives (default on)", "true", 0 },
-  { "floatoverflow", "w-float-overflow", "", "true", 0 },
-  { "floatdenorm", "w+float-denorm", "", "true", 0 },
-  { "numberoverflow", "w-number-overflow", "", "true", 0 },
-  { "macroselfref", "w+macro-selfref", "", "true", 0 },
-  { "floattoolong", "w-float-toolong", "", "true", 0 },
-  { "orphanlabels", "w-orphan-labels", "", "true", 0 },
-  { "tasmmode", "t", "", "true", 0 },
-
-  // Bool Properties With Argument
-
-  // String List Properties
-  { "PreprocessorDefinitions", "D", "Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "UndefinePreprocessorDefinitions", "U",
-    "Undefine Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "IncludePaths", "I", "Include Paths", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AssembledCodeListingFile", "l",
-    "Generates an assembled code listing file.", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-
-  // String Properties
-  // Skip [Inputs] - no command line Switch.
-  // Skip [CommandLineTemplate] - no command line Switch.
-  // Skip [ExecutionDescription] - no command line Switch.
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS10RCFlagTable.h b/Source/cmVS10RCFlagTable.h
deleted file mode 100644
index 6e2b834..0000000
--- a/Source/cmVS10RCFlagTable.h
+++ /dev/null
@@ -1,7 +0,0 @@
-static cmVS7FlagTable cmVS10RCFlagTable[] = {
-  // Bool Properties
-  { "NullTerminateStrings", "n", "", "true", 0 },
-  { "SuppressStartupBanner", "nologo", "", "true", 0 },
-
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS11CLFlagTable.h b/Source/cmVS11CLFlagTable.h
deleted file mode 100644
index d156938..0000000
--- a/Source/cmVS11CLFlagTable.h
+++ /dev/null
@@ -1,220 +0,0 @@
-static cmVS7FlagTable cmVS11CLFlagTable[] = {
-
-  // Enum Properties
-  { "DebugInformationFormat", "", "None", "None", 0 },
-  { "DebugInformationFormat", "Z7", "C7 compatible", "OldStyle", 0 },
-  { "DebugInformationFormat", "Zi", "Program Database", "ProgramDatabase", 0 },
-  { "DebugInformationFormat", "ZI", "Program Database for Edit And Continue",
-    "EditAndContinue", 0 },
-
-  { "WarningLevel", "W0", "Turn Off All Warnings", "TurnOffAllWarnings", 0 },
-  { "WarningLevel", "W1", "Level1", "Level1", 0 },
-  { "WarningLevel", "W2", "Level2", "Level2", 0 },
-  { "WarningLevel", "W3", "Level3", "Level3", 0 },
-  { "WarningLevel", "W4", "Level4", "Level4", 0 },
-  { "WarningLevel", "Wall", "EnableAllWarnings", "EnableAllWarnings", 0 },
-
-  { "Optimization", "Od", "Disabled", "Disabled", 0 },
-  { "Optimization", "O1", "Minimize Size", "MinSpace", 0 },
-  { "Optimization", "O2", "Maximize Speed", "MaxSpeed", 0 },
-  { "Optimization", "Ox", "Full Optimization", "Full", 0 },
-
-  { "InlineFunctionExpansion", "", "Default", "Default", 0 },
-  { "InlineFunctionExpansion", "Ob0", "Disabled", "Disabled", 0 },
-  { "InlineFunctionExpansion", "Ob1", "Only __inline", "OnlyExplicitInline",
-    0 },
-  { "InlineFunctionExpansion", "Ob2", "Any Suitable", "AnySuitable", 0 },
-
-  { "FavorSizeOrSpeed", "Os", "Favor small code", "Size", 0 },
-  { "FavorSizeOrSpeed", "Ot", "Favor fast code", "Speed", 0 },
-  { "FavorSizeOrSpeed", "", "Neither", "Neither", 0 },
-
-  { "ExceptionHandling", "EHa", "Yes with SEH Exceptions", "Async", 0 },
-  { "ExceptionHandling", "EHsc", "Yes", "Sync", 0 },
-  { "ExceptionHandling", "EHs", "Yes with Extern C functions", "SyncCThrow",
-    0 },
-  { "ExceptionHandling", "", "No", "false", 0 },
-
-  { "BasicRuntimeChecks", "RTCs", "Stack Frames", "StackFrameRuntimeCheck",
-    0 },
-  { "BasicRuntimeChecks", "RTCu", "Uninitialized variables",
-    "UninitializedLocalUsageCheck", 0 },
-  { "BasicRuntimeChecks", "RTC1", "Both (/RTC1, equiv. to /RTCsu)",
-    "EnableFastChecks", 0 },
-  { "BasicRuntimeChecks", "", "Default", "Default", 0 },
-
-  { "RuntimeLibrary", "MT", "Multi-threaded", "MultiThreaded", 0 },
-  { "RuntimeLibrary", "MTd", "Multi-threaded Debug", "MultiThreadedDebug", 0 },
-  { "RuntimeLibrary", "MD", "Multi-threaded DLL", "MultiThreadedDLL", 0 },
-  { "RuntimeLibrary", "MDd", "Multi-threaded Debug DLL",
-    "MultiThreadedDebugDLL", 0 },
-
-  { "StructMemberAlignment", "Zp1", "1 Byte", "1Byte", 0 },
-  { "StructMemberAlignment", "Zp2", "2 Bytes", "2Bytes", 0 },
-  { "StructMemberAlignment", "Zp4", "4 Byte", "4Bytes", 0 },
-  { "StructMemberAlignment", "Zp8", "8 Bytes", "8Bytes", 0 },
-  { "StructMemberAlignment", "Zp16", "16 Bytes", "16Bytes", 0 },
-  { "StructMemberAlignment", "", "Default", "Default", 0 },
-
-  { "EnableEnhancedInstructionSet", "arch:SSE", "Streaming SIMD Extensions",
-    "StreamingSIMDExtensions", 0 },
-  { "EnableEnhancedInstructionSet", "arch:SSE2", "Streaming SIMD Extensions 2",
-    "StreamingSIMDExtensions2", 0 },
-  { "EnableEnhancedInstructionSet", "arch:AVX", "Advanced Vector Extensions",
-    "AdvancedVectorExtensions", 0 },
-  { "EnableEnhancedInstructionSet", "arch:IA32", "No Enhanced Instructions",
-    "NoExtensions", 0 },
-  { "EnableEnhancedInstructionSet", "", "Not Set", "NotSet", 0 },
-
-  { "FloatingPointModel", "fp:precise", "Precise", "Precise", 0 },
-  { "FloatingPointModel", "fp:strict", "Strict", "Strict", 0 },
-  { "FloatingPointModel", "fp:fast", "Fast", "Fast", 0 },
-
-  { "PrecompiledHeader", "Yc", "Create", "Create",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "PrecompiledHeader", "Yu", "Use", "Use",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "PrecompiledHeader", "Y-", "Not Using Precompiled Headers", "NotUsing",
-    0 },
-
-  { "AssemblerOutput", "", "No Listing", "NoListing", 0 },
-  { "AssemblerOutput", "FA", "Assembly-Only Listing", "AssemblyCode", 0 },
-  { "AssemblerOutput", "FAc", "Assembly With Machine Code",
-    "AssemblyAndMachineCode", 0 },
-  { "AssemblerOutput", "FAs", "Assembly With Source Code",
-    "AssemblyAndSourceCode", 0 },
-  { "AssemblerOutput", "FAcs", "Assembly, Machine Code and Source", "All", 0 },
-
-  { "CallingConvention", "Gd", "__cdecl", "Cdecl", 0 },
-  { "CallingConvention", "Gr", "__fastcall", "FastCall", 0 },
-  { "CallingConvention", "Gz", "__stdcall", "StdCall", 0 },
-
-  { "CompileAs", "", "Default", "Default", 0 },
-  { "CompileAs", "TC", "Compile as C Code", "CompileAsC", 0 },
-  { "CompileAs", "TP", "Compile as C++ Code", "CompileAsCpp", 0 },
-
-  { "ErrorReporting", "errorReport:none", "Do Not Send Report", "None", 0 },
-  { "ErrorReporting", "errorReport:prompt", "Prompt Immediately", "Prompt",
-    0 },
-  { "ErrorReporting", "errorReport:queue", "Queue For Next Login", "Queue",
-    0 },
-  { "ErrorReporting", "errorReport:send", "Send Automatically", "Send", 0 },
-
-  { "CompileAsManaged", "", "No Common Language RunTime Support", "false", 0 },
-  { "CompileAsManaged", "clr", "Common Language RunTime Support", "true", 0 },
-  { "CompileAsManaged", "clr:pure",
-    "Pure MSIL Common Language RunTime Support", "Pure", 0 },
-  { "CompileAsManaged", "clr:safe",
-    "Safe MSIL Common Language RunTime Support", "Safe", 0 },
-  { "CompileAsManaged", "clr:oldSyntax",
-    "Common Language RunTime Support, Old Syntax", "OldSyntax", 0 },
-
-  // Bool Properties
-  { "CompileAsWinRT", "ZW", "", "true", 0 },
-  { "WinRTNoStdLib", "ZW:nostdlib", "", "true", 0 },
-  { "SuppressStartupBanner", "nologo-", "", "false", 0 },
-  { "SuppressStartupBanner", "nologo", "", "true", 0 },
-  { "TreatWarningAsError", "WX-", "", "false", 0 },
-  { "TreatWarningAsError", "WX", "", "true", 0 },
-  { "SDLCheck", "sdl-", "", "false", 0 },
-  { "SDLCheck", "sdl", "", "true", 0 },
-  { "IntrinsicFunctions", "Oi", "", "true", 0 },
-  { "OmitFramePointers", "Oy-", "", "false", 0 },
-  { "OmitFramePointers", "Oy", "", "true", 0 },
-  { "EnableFiberSafeOptimizations", "GT", "", "true", 0 },
-  { "WholeProgramOptimization", "GL", "", "true", 0 },
-  { "UndefineAllPreprocessorDefinitions", "u", "", "true", 0 },
-  { "IgnoreStandardIncludePath", "X", "", "true", 0 },
-  { "PreprocessToFile", "P", "", "true", 0 },
-  { "PreprocessSuppressLineNumbers", "EP", "", "true", 0 },
-  { "PreprocessKeepComments", "C", "", "true", 0 },
-  { "StringPooling", "GF-", "", "false", 0 },
-  { "StringPooling", "GF", "", "true", 0 },
-  { "MinimalRebuild", "Gm-", "", "false", 0 },
-  { "MinimalRebuild", "Gm", "", "true", 0 },
-  { "SmallerTypeCheck", "RTCc", "", "true", 0 },
-  { "BufferSecurityCheck", "GS-", "", "false", 0 },
-  { "BufferSecurityCheck", "GS", "", "true", 0 },
-  { "FunctionLevelLinking", "Gy-", "", "false", 0 },
-  { "FunctionLevelLinking", "Gy", "", "true", 0 },
-  { "EnableParallelCodeGeneration", "Qpar-", "", "false", 0 },
-  { "EnableParallelCodeGeneration", "Qpar", "", "true", 0 },
-  { "FloatingPointExceptions", "fp:except-", "", "false", 0 },
-  { "FloatingPointExceptions", "fp:except", "", "true", 0 },
-  { "CreateHotpatchableImage", "hotpatch", "", "true", 0 },
-  { "DisableLanguageExtensions", "Za", "", "true", 0 },
-  { "TreatWChar_tAsBuiltInType", "Zc:wchar_t-", "", "false", 0 },
-  { "TreatWChar_tAsBuiltInType", "Zc:wchar_t", "", "true", 0 },
-  { "ForceConformanceInForLoopScope", "Zc:forScope-", "", "false", 0 },
-  { "ForceConformanceInForLoopScope", "Zc:forScope", "", "true", 0 },
-  { "RuntimeTypeInfo", "GR-", "", "false", 0 },
-  { "RuntimeTypeInfo", "GR", "", "true", 0 },
-  { "OpenMPSupport", "openmp-", "", "false", 0 },
-  { "OpenMPSupport", "openmp", "", "true", 0 },
-  { "ExpandAttributedSource", "Fx", "", "true", 0 },
-  { "UseUnicodeForAssemblerListing", "FAu", "", "true", 0 },
-  { "ShowIncludes", "showIncludes", "", "true", 0 },
-  { "EnablePREfast", "analyze-", "", "false", 0 },
-  { "EnablePREfast", "analyze", "", "true", 0 },
-  { "UseFullPaths", "FC", "", "true", 0 },
-  { "OmitDefaultLibName", "Zl", "", "true", 0 },
-
-  // Bool Properties With Argument
-  { "MultiProcessorCompilation", "MP", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "ProcessorNumber", "MP", "Multi-processor Compilation", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "GenerateXMLDocumentationFiles", "doc", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "XMLDocumentationFileName", "doc", "Generate XML Documentation Files", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "BrowseInformation", "FR", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "BrowseInformationFile", "FR", "Enable Browse Information", "",
-    cmVS7FlagTable::UserValueRequired },
-
-  // String List Properties
-  { "AdditionalIncludeDirectories", "I", "Additional Include Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AdditionalUsingDirectories", "AI", "Additional #using Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "PreprocessorDefinitions", "D ", "Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "UndefinePreprocessorDefinitions", "U",
-    "Undefine Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "DisableSpecificWarnings", "wd", "Disable Specific Warnings", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ForcedIncludeFiles", "FI", "Forced Include File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ForcedUsingFiles", "FU", "Forced #using File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "PREfastLog", "analyze:log", "Code Analysis Log", "",
-    cmVS7FlagTable::UserFollowing },
-  { "PREfastAdditionalPlugins", "analyze:plugin",
-    "Additional Code Analysis Native plugins", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "TreatSpecificWarningsAsErrors", "we", "Treat Specific Warnings As Errors",
-    "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-
-  // String Properties
-  // Skip [TrackerLogDirectory] - no command line Switch.
-  { "PreprocessOutputPath", "Fi", "Preprocess Output Path", "",
-    cmVS7FlagTable::UserValue },
-  { "PrecompiledHeaderFile", "Yc", "Precompiled Header Name", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "PrecompiledHeaderFile", "Yu", "Precompiled Header Name", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "PrecompiledHeaderOutputFile", "Fp", "Precompiled Header Output File", "",
-    cmVS7FlagTable::UserValue },
-  { "AssemblerListingLocation", "Fa", "ASM List Location", "",
-    cmVS7FlagTable::UserValue },
-  { "ObjectFileName", "Fo", "Object File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "ProgramDataBaseFileName", "Fd", "Program Database File Name", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [XMLDocumentationFileName] - no command line Switch.
-  // Skip [BrowseInformationFile] - no command line Switch.
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS11CSharpFlagTable.h b/Source/cmVS11CSharpFlagTable.h
deleted file mode 100644
index 18b804a..0000000
--- a/Source/cmVS11CSharpFlagTable.h
+++ /dev/null
@@ -1,121 +0,0 @@
-static cmVS7FlagTable cmVS11CSharpFlagTable[] = {
-  { "ProjectName", "out:", "", "", cmIDEFlagTable::UserValueRequired },
-
-  { "OutputType", "target:exe", "", "Exe", 0 },
-  { "OutputType", "target:winexe", "", "Winexe", 0 },
-  { "OutputType", "target:library", "", "Library", 0 },
-  { "OutputType", "target:module", "", "Module", 0 },
-
-  { "DocumentationFile", "doc", "", "", cmIDEFlagTable::UserValueRequired },
-
-  { "Platform", "platform:x86", "", "x86", 0 },
-  { "Platform", "platform:Itanium", "", "Itanium", 0 },
-  { "Platform", "platform:x64", "", "x64", 0 },
-  { "Platform", "platform:arm", "", "arm", 0 },
-  { "Platform", "platform:anycpu32bitpreferred", "", "anycpu32bitpreferred",
-    0 },
-  { "Platform", "platform:anycpu", "", "anycpu", 0 },
-
-  { "References", "reference:", "mit alias", "", 0 },
-  { "References", "reference:", "dateiliste", "", 0 },
-  { "AddModules", "addmodule:", "", "", cmIDEFlagTable::SemicolonAppendable },
-  { "", "link", "", "", 0 },
-
-  { "Win32Resource", "win32res:", "", "", cmIDEFlagTable::UserValueRequired },
-  { "ApplicationIcon", "win32icon:", "", "",
-    cmIDEFlagTable::UserValueRequired },
-
-  { "ApplicationManifest", "win32manifest:", "", "",
-    cmIDEFlagTable::UserValueRequired },
-
-  { "NoWin32Manifest", "nowin32manifest", "", "true", 0 },
-
-  { "DefineDebug", "debug", "", "true", cmIDEFlagTable::Continue },
-
-  { "DebugSymbols", "debug", "", "true", 0 },
-  { "DebugSymbols", "debug-", "", "false", 0 },
-  { "DebugSymbols", "debug+", "", "true", 0 },
-
-  { "DebugType", "debug:none", "", "none", 0 },
-  { "DebugType", "debug:full", "", "full", 0 },
-  { "DebugType", "debug:pdbonly", "", "pdbonly", 0 },
-
-  { "Optimize", "optimize", "", "true", 0 },
-  { "Optimize", "optimize-", "", "false", 0 },
-  { "Optimize", "optimize+", "", "true", 0 },
-
-  { "TreatWarningsAsErrors", "warnaserror", "", "true", 0 },
-  { "TreatWarningsAsErrors", "warnaserror-", "", "false", 0 },
-  { "TreatWarningsAsErrors", "warnaserror+", "", "true", 0 },
-
-  { "WarningsAsErrors", "warnaserror", "", "", 0 },
-  { "WarningsAsErrors", "warnaserror-", "", "", 0 },
-  { "WarningsAsErrors", "warnaserror+", "", "", 0 },
-
-  { "WarningLevel", "warn:0", "", "0", 0 },
-  { "WarningLevel", "warn:1", "", "1", 0 },
-  { "WarningLevel", "warn:2", "", "2", 0 },
-  { "WarningLevel", "warn:3", "", "3", 0 },
-  { "WarningLevel", "warn:4", "", "4", 0 },
-  { "DisabledWarnings", "nowarn", "", "", 0 },
-
-  { "CheckForOverflowUnderflow", "checked", "", "true", 0 },
-  { "CheckForOverflowUnderflow", "checked-", "", "false", 0 },
-  { "CheckForOverflowUnderflow", "checked+", "", "true", 0 },
-
-  { "AllowUnsafeBlocks", "unsafe", "", "true", 0 },
-  { "AllowUnsafeBlocks", "unsafe-", "", "false", 0 },
-  { "AllowUnsafeBlocks", "unsafe+", "", "true", 0 },
-
-  { "DefineConstants", "define:", "", "",
-    cmIDEFlagTable::SemicolonAppendable | cmIDEFlagTable::UserValue },
-
-  { "LangVersion", "langversion:ISO-1", "", "ISO-1", 0 },
-  { "LangVersion", "langversion:ISO-2", "", "ISO-2", 0 },
-  { "LangVersion", "langversion:3", "", "3", 0 },
-  { "LangVersion", "langversion:4", "", "4", 0 },
-  { "LangVersion", "langversion:5", "", "5", 0 },
-  { "LangVersion", "langversion:6", "", "6", 0 },
-  { "LangVersion", "langversion:default", "", "default", 0 },
-
-  { "DelaySign", "delaysign", "", "true", 0 },
-  { "DelaySign", "delaysign-", "", "false", 0 },
-  { "DelaySign", "delaysign+", "", "true", 0 },
-
-  { "AssemblyOriginatorKeyFile", "keyfile", "", "", 0 },
-
-  { "KeyContainerName", "keycontainer", "", "", 0 },
-
-  { "NoLogo", "nologo", "", "", 0 },
-
-  { "NoConfig", "noconfig", "", "true", 0 },
-
-  { "BaseAddress", "baseaddress:", "", "", 0 },
-
-  { "CodePage", "codepage", "", "", 0 },
-
-  { "Utf8Output", "utf8output", "", "", 0 },
-
-  { "MainEntryPoint", "main:", "", "", 0 },
-
-  { "GenerateFullPaths", "fullpaths", "", "true", 0 },
-
-  { "FileAlignment", "filealign", "", "", 0 },
-
-  { "PdbFile", "pdb:", "", "", 0 },
-
-  { "NoStandardLib", "nostdlib", "", "true", 0 },
-  { "NoStandardLib", "nostdlib-", "", "false", 0 },
-  { "NoStandardLib", "nostdlib+", "", "true", 0 },
-
-  { "SubsystemVersion", "subsystemversion", "", "", 0 },
-
-  { "AdditionalLibPaths", "lib:", "", "", 0 },
-
-  { "ErrorReport", "errorreport:none", "Do Not Send Report", "none", 0 },
-  { "ErrorReport", "errorreport:prompt", "Prompt Immediately", "prompt", 0 },
-  { "ErrorReport", "errorreport:queue", "Queue For Next Login", "queue", 0 },
-  { "ErrorReport", "errorreport:send", "Send Automatically", "send", 0 },
-
-  { 0, 0, 0, 0, 0 },
-};
diff --git a/Source/cmVS11LibFlagTable.h b/Source/cmVS11LibFlagTable.h
deleted file mode 100644
index 15c8ddd..0000000
--- a/Source/cmVS11LibFlagTable.h
+++ /dev/null
@@ -1,76 +0,0 @@
-static cmVS7FlagTable cmVS11LibFlagTable[] = {
-
-  // Enum Properties
-  { "ErrorReporting", "ERRORREPORT:PROMPT", "PromptImmediately",
-    "PromptImmediately", 0 },
-  { "ErrorReporting", "ERRORREPORT:QUEUE", "Queue For Next Login",
-    "QueueForNextLogin", 0 },
-  { "ErrorReporting", "ERRORREPORT:SEND", "Send Error Report",
-    "SendErrorReport", 0 },
-  { "ErrorReporting", "ERRORREPORT:NONE", "No Error Report", "NoErrorReport",
-    0 },
-
-  { "TargetMachine", "MACHINE:ARM", "MachineARM", "MachineARM", 0 },
-  { "TargetMachine", "MACHINE:EBC", "MachineEBC", "MachineEBC", 0 },
-  { "TargetMachine", "MACHINE:IA64", "MachineIA64", "MachineIA64", 0 },
-  { "TargetMachine", "MACHINE:MIPS", "MachineMIPS", "MachineMIPS", 0 },
-  { "TargetMachine", "MACHINE:MIPS16", "MachineMIPS16", "MachineMIPS16", 0 },
-  { "TargetMachine", "MACHINE:MIPSFPU", "MachineMIPSFPU", "MachineMIPSFPU",
-    0 },
-  { "TargetMachine", "MACHINE:MIPSFPU16", "MachineMIPSFPU16",
-    "MachineMIPSFPU16", 0 },
-  { "TargetMachine", "MACHINE:SH4", "MachineSH4", "MachineSH4", 0 },
-  { "TargetMachine", "MACHINE:THUMB", "MachineTHUMB", "MachineTHUMB", 0 },
-  { "TargetMachine", "MACHINE:X64", "MachineX64", "MachineX64", 0 },
-  { "TargetMachine", "MACHINE:X86", "MachineX86", "MachineX86", 0 },
-
-  { "SubSystem", "SUBSYSTEM:CONSOLE", "Console", "Console", 0 },
-  { "SubSystem", "SUBSYSTEM:WINDOWS", "Windows", "Windows", 0 },
-  { "SubSystem", "SUBSYSTEM:NATIVE", "Native", "Native", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_APPLICATION", "EFI Application",
-    "EFI Application", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "EFI Boot Service Driver", "EFI Boot Service Driver", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_ROM", "EFI ROM", "EFI ROM", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_RUNTIME_DRIVER", "EFI Runtime", "EFI Runtime",
-    0 },
-  { "SubSystem", "SUBSYSTEM:WINDOWSCE", "WindowsCE", "WindowsCE", 0 },
-  { "SubSystem", "SUBSYSTEM:POSIX", "POSIX", "POSIX", 0 },
-
-  // Bool Properties
-  { "SuppressStartupBanner", "NOLOGO", "", "true", 0 },
-  { "IgnoreAllDefaultLibraries", "NODEFAULTLIB", "", "true", 0 },
-  { "TreatLibWarningAsErrors", "WX:NO", "", "false", 0 },
-  { "TreatLibWarningAsErrors", "WX", "", "true", 0 },
-  { "Verbose", "VERBOSE", "", "true", 0 },
-  { "LinkTimeCodeGeneration", "LTCG", "", "true", 0 },
-
-  // Bool Properties With Argument
-
-  // String List Properties
-  // Skip [AdditionalDependencies] - no command line Switch.
-  { "AdditionalLibraryDirectories",
-    "LIBPATH:", "Additional Library Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "IgnoreSpecificDefaultLibraries",
-    "NODEFAULTLIB:", "Ignore Specific Default Libraries", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ExportNamedFunctions", "EXPORT:", "Export Named Functions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "RemoveObjects", "REMOVE:", "Remove Objects", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-
-  // String Properties
-  { "OutputFile", "OUT:", "Output File", "", cmVS7FlagTable::UserValue },
-  { "ModuleDefinitionFile", "DEF:", "Module Definition File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "ForceSymbolReferences", "INCLUDE:", "Force Symbol References", "",
-    cmVS7FlagTable::UserValue },
-  { "DisplayLibrary", "LIST:", "Display Library to standard output", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [MinimumRequiredVersion] - no command line Switch.
-  { "Name", "NAME:", "Name", "", cmVS7FlagTable::UserValue },
-  // Skip [AdditionalOptions] - no command line Switch.
-  // Skip [TrackerLogDirectory] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS11LinkFlagTable.h b/Source/cmVS11LinkFlagTable.h
deleted file mode 100644
index 53f1139..0000000
--- a/Source/cmVS11LinkFlagTable.h
+++ /dev/null
@@ -1,272 +0,0 @@
-static cmVS7FlagTable cmVS11LinkFlagTable[] = {
-
-  // Enum Properties
-  { "ShowProgress", "", "Not Set", "NotSet", 0 },
-  { "ShowProgress", "VERBOSE", "Display all progress messages", "LinkVerbose",
-    0 },
-  { "ShowProgress", "VERBOSE:Lib", "For Libraries Searched", "LinkVerboseLib",
-    0 },
-  { "ShowProgress", "VERBOSE:ICF",
-    "About COMDAT folding during optimized linking", "LinkVerboseICF", 0 },
-  { "ShowProgress", "VERBOSE:REF",
-    "About data removed during optimized linking", "LinkVerboseREF", 0 },
-  { "ShowProgress", "VERBOSE:SAFESEH", "About Modules incompatible with SEH",
-    "LinkVerboseSAFESEH", 0 },
-  { "ShowProgress", "VERBOSE:CLR",
-    "About linker activity related to managed code", "LinkVerboseCLR", 0 },
-
-  { "ForceFileOutput", "FORCE", "Enabled", "Enabled", 0 },
-  { "ForceFileOutput", "FORCE:MULTIPLE", "Multiply Defined Symbol Only",
-    "MultiplyDefinedSymbolOnly", 0 },
-  { "ForceFileOutput", "FORCE:UNRESOLVED", "Undefined Symbol Only",
-    "UndefinedSymbolOnly", 0 },
-
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN", "Enabled", "Enabled", 0 },
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN:5", "X86 Image Only",
-    "X86Image", 0 },
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN:6", "X64 Image Only",
-    "X64Image", 0 },
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN:16", "Itanium Image Only",
-    "ItaniumImage", 0 },
-
-  // correct flags for uac should be /MANIFESTUAC, but some projects already
-  // use this bug to access uac field, so keep these for compatibility
-  { "UACExecutionLevel", "level='asInvoker'", "asInvoker", "AsInvoker", 0 },
-  { "UACExecutionLevel", "level='highestAvailable'", "highestAvailable",
-    "HighestAvailable", 0 },
-  { "UACExecutionLevel", "level='requireAdministrator'",
-    "requireAdministrator", "RequireAdministrator", 0 },
-
-  { "SubSystem", "", "Not Set", "NotSet", 0 },
-  { "SubSystem", "SUBSYSTEM:CONSOLE", "Console", "Console", 0 },
-  { "SubSystem", "SUBSYSTEM:WINDOWS", "Windows", "Windows", 0 },
-  { "SubSystem", "SUBSYSTEM:NATIVE", "Native", "Native", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_APPLICATION", "EFI Application",
-    "EFI Application", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "EFI Boot Service Driver", "EFI Boot Service Driver", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_ROM", "EFI ROM", "EFI ROM", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_RUNTIME_DRIVER", "EFI Runtime", "EFI Runtime",
-    0 },
-  { "SubSystem", "SUBSYSTEM:POSIX", "POSIX", "POSIX", 0 },
-
-  { "Driver", "", "Not Set", "NotSet", 0 },
-  { "Driver", "Driver", "Driver", "Driver", 0 },
-  { "Driver", "DRIVER:UPONLY", "UP Only", "UpOnly", 0 },
-  { "Driver", "DRIVER:WDM", "WDM", "WDM", 0 },
-
-  { "LinkTimeCodeGeneration", "", "Default", "Default", 0 },
-  { "LinkTimeCodeGeneration", "LTCG", "Use Link Time Code Generation",
-    "UseLinkTimeCodeGeneration", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:PGInstrument",
-    "Profile Guided Optimization - Instrument", "PGInstrument", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:PGOptimize",
-    "Profile Guided Optimization - Optimization", "PGOptimization", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:PGUpdate",
-    "Profile Guided Optimization - Update", "PGUpdate", 0 },
-
-  { "GenerateWindowsMetadata", "WINMD", "Yes", "true", 0 },
-  { "GenerateWindowsMetadata", "WINMD:NO", "No", "false", 0 },
-
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA1", "SHA1", "SHA1", 0 },
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA256", "SHA256", "SHA256", 0 },
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA384", "SHA384", "SHA384", 0 },
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA512", "SHA512", "SHA512", 0 },
-
-  { "TargetMachine", "", "Not Set", "NotSet", 0 },
-  { "TargetMachine", "MACHINE:ARM", "MachineARM", "MachineARM", 0 },
-  { "TargetMachine", "MACHINE:EBC", "MachineEBC", "MachineEBC", 0 },
-  { "TargetMachine", "MACHINE:IA64", "MachineIA64", "MachineIA64", 0 },
-  { "TargetMachine", "MACHINE:MIPS", "MachineMIPS", "MachineMIPS", 0 },
-  { "TargetMachine", "MACHINE:MIPS16", "MachineMIPS16", "MachineMIPS16", 0 },
-  { "TargetMachine", "MACHINE:MIPSFPU", "MachineMIPSFPU", "MachineMIPSFPU",
-    0 },
-  { "TargetMachine", "MACHINE:MIPSFPU16", "MachineMIPSFPU16",
-    "MachineMIPSFPU16", 0 },
-  { "TargetMachine", "MACHINE:SH4", "MachineSH4", "MachineSH4", 0 },
-  { "TargetMachine", "MACHINE:THUMB", "MachineTHUMB", "MachineTHUMB", 0 },
-  { "TargetMachine", "MACHINE:X64", "MachineX64", "MachineX64", 0 },
-  { "TargetMachine", "MACHINE:X86", "MachineX86", "MachineX86", 0 },
-
-  { "CLRThreadAttribute", "CLRTHREADATTRIBUTE:MTA", "MTA threading attribute",
-    "MTAThreadingAttribute", 0 },
-  { "CLRThreadAttribute", "CLRTHREADATTRIBUTE:STA", "STA threading attribute",
-    "STAThreadingAttribute", 0 },
-  { "CLRThreadAttribute", "CLRTHREADATTRIBUTE:NONE",
-    "Default threading attribute", "DefaultThreadingAttribute", 0 },
-
-  { "CLRImageType", "CLRIMAGETYPE:IJW", "Force IJW image", "ForceIJWImage",
-    0 },
-  { "CLRImageType", "CLRIMAGETYPE:PURE", "Force Pure IL Image",
-    "ForcePureILImage", 0 },
-  { "CLRImageType", "CLRIMAGETYPE:SAFE", "Force Safe IL Image",
-    "ForceSafeILImage", 0 },
-  { "CLRImageType", "", "Default image type", "Default", 0 },
-
-  { "SignHash", "CLRSIGNHASH:SHA1", "SHA1", "SHA1", 0 },
-  { "SignHash", "CLRSIGNHASH:SHA256", "SHA256", "SHA256", 0 },
-  { "SignHash", "CLRSIGNHASH:SHA384", "SHA384", "SHA384", 0 },
-  { "SignHash", "CLRSIGNHASH:SHA512", "SHA512", "SHA512", 0 },
-
-  { "LinkErrorReporting", "ERRORREPORT:PROMPT", "PromptImmediately",
-    "PromptImmediately", 0 },
-  { "LinkErrorReporting", "ERRORREPORT:QUEUE", "Queue For Next Login",
-    "QueueForNextLogin", 0 },
-  { "LinkErrorReporting", "ERRORREPORT:SEND", "Send Error Report",
-    "SendErrorReport", 0 },
-  { "LinkErrorReporting", "ERRORREPORT:NONE", "No Error Report",
-    "NoErrorReport", 0 },
-
-  { "CLRSupportLastError", "CLRSupportLastError", "Enabled", "Enabled", 0 },
-  { "CLRSupportLastError", "CLRSupportLastError:NO", "Disabled", "Disabled",
-    0 },
-  { "CLRSupportLastError", "CLRSupportLastError:SYSTEMDLL", "System Dlls Only",
-    "SystemDlls", 0 },
-
-  // Bool Properties
-  { "LinkIncremental", "INCREMENTAL:NO", "", "false", 0 },
-  { "LinkIncremental", "INCREMENTAL", "", "true", 0 },
-  { "SuppressStartupBanner", "NOLOGO", "", "true", 0 },
-  { "LinkStatus", "LTCG:NOSTATUS", "", "false", 0 },
-  { "LinkStatus", "LTCG:STATUS", "", "true", 0 },
-  { "PreventDllBinding", "ALLOWBIND:NO", "", "false", 0 },
-  { "PreventDllBinding", "ALLOWBIND", "", "true", 0 },
-  { "TreatLinkerWarningAsErrors", "WX:NO", "", "false", 0 },
-  { "TreatLinkerWarningAsErrors", "WX", "", "true", 0 },
-  { "IgnoreAllDefaultLibraries", "NODEFAULTLIB", "", "true", 0 },
-  { "GenerateManifest", "MANIFEST:NO", "", "false", 0 },
-  { "GenerateManifest", "MANIFEST", "", "true", 0 },
-  { "AllowIsolation", "ALLOWISOLATION:NO", "", "false", 0 },
-
-  // correct flags for uac should be /MANIFESTUAC, but some projects already
-  // use this bug to access uac field, so keep these for compatibility
-  { "UACUIAccess", "uiAccess='false'", "", "false", 0 },
-  { "UACUIAccess", "uiAccess='true'", "", "true", 0 },
-
-  { "ManifestEmbed", "manifest:embed", "", "true", 0 },
-  { "GenerateDebugInformation", "DEBUG", "", "true",
-    cmVS7FlagTable::CaseInsensitive },
-  { "MapExports", "MAPINFO:EXPORTS", "", "true", 0 },
-  { "AssemblyDebug", "ASSEMBLYDEBUG:DISABLE", "", "false", 0 },
-  { "AssemblyDebug", "ASSEMBLYDEBUG", "", "true", 0 },
-  { "LargeAddressAware", "LARGEADDRESSAWARE:NO", "", "false", 0 },
-  { "LargeAddressAware", "LARGEADDRESSAWARE", "", "true", 0 },
-  { "TerminalServerAware", "TSAWARE:NO", "", "false", 0 },
-  { "TerminalServerAware", "TSAWARE", "", "true", 0 },
-  { "SwapRunFromCD", "SWAPRUN:CD", "", "true", 0 },
-  { "SwapRunFromNET", "SWAPRUN:NET", "", "true", 0 },
-  { "OptimizeReferences", "OPT:NOREF", "", "false", 0 },
-  { "OptimizeReferences", "OPT:REF", "", "true", 0 },
-  { "EnableCOMDATFolding", "OPT:NOICF", "", "false", 0 },
-  { "EnableCOMDATFolding", "OPT:ICF", "", "true", 0 },
-  { "IgnoreEmbeddedIDL", "IGNOREIDL", "", "true", 0 },
-  { "AppContainer", "APPCONTAINER", "", "true", 0 },
-  { "WindowsMetadataLinkDelaySign", "WINMDDELAYSIGN:NO", "", "false", 0 },
-  { "WindowsMetadataLinkDelaySign", "WINMDDELAYSIGN", "", "true", 0 },
-  { "NoEntryPoint", "NOENTRY", "", "true", 0 },
-  { "SetChecksum", "RELEASE", "", "true", 0 },
-  { "RandomizedBaseAddress", "DYNAMICBASE:NO", "", "false", 0 },
-  { "RandomizedBaseAddress", "DYNAMICBASE", "", "true", 0 },
-  { "FixedBaseAddress", "FIXED:NO", "", "false", 0 },
-  { "FixedBaseAddress", "FIXED", "", "true", 0 },
-  { "DataExecutionPrevention", "NXCOMPAT:NO", "", "false", 0 },
-  { "DataExecutionPrevention", "NXCOMPAT", "", "true", 0 },
-  { "TurnOffAssemblyGeneration", "NOASSEMBLY", "", "true", 0 },
-  { "SupportUnloadOfDelayLoadedDLL", "DELAY:UNLOAD", "", "true", 0 },
-  { "SupportNobindOfDelayLoadedDLL", "DELAY:NOBIND", "", "true", 0 },
-  { "Profile", "PROFILE", "", "true", 0 },
-  { "LinkDelaySign", "DELAYSIGN:NO", "", "false", 0 },
-  { "LinkDelaySign", "DELAYSIGN", "", "true", 0 },
-  { "CLRUnmanagedCodeCheck", "CLRUNMANAGEDCODECHECK:NO", "", "false", 0 },
-  { "CLRUnmanagedCodeCheck", "CLRUNMANAGEDCODECHECK", "", "true", 0 },
-  { "DetectOneDefinitionRule", "ODR", "", "true", 0 },
-  { "ImageHasSafeExceptionHandlers", "SAFESEH:NO", "", "false", 0 },
-  { "ImageHasSafeExceptionHandlers", "SAFESEH", "", "true", 0 },
-  { "LinkDLL", "DLL", "", "true", 0 },
-
-  // Bool Properties With Argument
-  { "EnableUAC", "MANIFESTUAC:", "", "",
-    cmVS7FlagTable::UserValueRequired | cmVS7FlagTable::SpaceAppendable },
-  { "GenerateMapFile", "MAP", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "MapFileName", "MAP:", "Generate Map File", "",
-    cmVS7FlagTable::UserValueRequired },
-
-  // String List Properties
-  { "AdditionalLibraryDirectories",
-    "LIBPATH:", "Additional Library Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  // Skip [AdditionalDependencies] - no command line Switch.
-  { "IgnoreSpecificDefaultLibraries",
-    "NODEFAULTLIB:", "Ignore Specific Default Libraries", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AddModuleNamesToAssembly", "ASSEMBLYMODULE:", "Add Module to Assembly",
-    "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "EmbedManagedResourceFile",
-    "ASSEMBLYRESOURCE:", "Embed Managed Resource File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ForceSymbolReferences", "INCLUDE:", "Force Symbol References", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "DelayLoadDLLs", "DELAYLOAD:", "Delay Loaded Dlls", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AssemblyLinkResource", "ASSEMBLYLINKRESOURCE:", "Assembly Link Resource",
-    "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AdditionalManifestDependencies",
-    "MANIFESTDEPENDENCY:", "Additional Manifest Dependencies", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ManifestInput", "manifestinput:", "Manifest Input", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-
-  // String Properties
-  { "OutputFile", "OUT:", "Output File", "", cmVS7FlagTable::UserValue },
-  { "Version", "VERSION:", "Version", "", cmVS7FlagTable::UserValue },
-  { "SpecifySectionAttributes", "SECTION:", "Specify Section Attributes", "",
-    cmVS7FlagTable::UserValue },
-  { "MSDOSStubFileName", "STUB:", "MS-DOS Stub File Name", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [TrackerLogDirectory] - no command line Switch.
-  { "ModuleDefinitionFile", "DEF:", "Module Definition File", "",
-    cmVS7FlagTable::UserValue },
-  { "ManifestFile", "ManifestFile:", "Manifest File", "",
-    cmVS7FlagTable::UserValue },
-  { "ProgramDatabaseFile", "PDB:", "Generate Program Database File", "",
-    cmVS7FlagTable::UserValue },
-  { "StripPrivateSymbols", "PDBSTRIPPED:", "Strip Private Symbols", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [MapFileName] - no command line Switch.
-  // Skip [MinimumRequiredVersion] - no command line Switch.
-  { "HeapReserveSize", "HEAP:", "Heap Reserve Size", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [HeapCommitSize] - no command line Switch.
-  { "StackReserveSize", "STACK:", "Stack Reserve Size", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [StackCommitSize] - no command line Switch.
-  { "FunctionOrder", "ORDER:@", "Function Order", "",
-    cmVS7FlagTable::UserValue },
-  { "ProfileGuidedDatabase", "PGD:", "Profile Guided Database", "",
-    cmVS7FlagTable::UserValue },
-  { "MidlCommandFile", "MIDL:@", "MIDL Commands", "",
-    cmVS7FlagTable::UserValue },
-  { "MergedIDLBaseFileName", "IDLOUT:", "Merged IDL Base File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "TypeLibraryFile", "TLBOUT:", "Type Library", "",
-    cmVS7FlagTable::UserValue },
-  { "WindowsMetadataFile", "WINMDFILE:", "Windows Metadata File", "",
-    cmVS7FlagTable::UserValue },
-  { "WindowsMetadataLinkKeyFile", "WINMDKEYFILE:", "Windows Metadata Key File",
-    "", cmVS7FlagTable::UserValue },
-  { "WindowsMetadataKeyContainer", "WINMDKEYCONTAINER:",
-    "Windows Metadata Key Container", "", cmVS7FlagTable::UserValue },
-  { "EntryPointSymbol", "ENTRY:", "Entry Point", "",
-    cmVS7FlagTable::UserValue },
-  { "BaseAddress", "BASE:", "Base Address", "", cmVS7FlagTable::UserValue },
-  { "ImportLibrary", "IMPLIB:", "Import Library", "",
-    cmVS7FlagTable::UserValue },
-  { "MergeSections", "MERGE:", "Merge Sections", "",
-    cmVS7FlagTable::UserValue },
-  { "LinkKeyFile", "KEYFILE:", "Key File", "", cmVS7FlagTable::UserValue },
-  { "KeyContainer", "KEYCONTAINER:", "Key Container", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS11MASMFlagTable.h b/Source/cmVS11MASMFlagTable.h
deleted file mode 100644
index fdf8239..0000000
--- a/Source/cmVS11MASMFlagTable.h
+++ /dev/null
@@ -1,76 +0,0 @@
-static cmVS7FlagTable cmVS11MASMFlagTable[] = {
-
-  // Enum Properties
-  { "PreserveIdentifierCase", "", "Default", "0", 0 },
-  { "PreserveIdentifierCase", "Cp", "Preserves Identifier Case (/Cp)", "1",
-    0 },
-  { "PreserveIdentifierCase", "Cu",
-    "Maps all identifiers to upper case. (/Cu)", "2", 0 },
-  { "PreserveIdentifierCase", "Cx",
-    "Preserves case in public and extern symbols. (/Cx)", "3", 0 },
-
-  { "WarningLevel", "W0", "Warning Level 0 (/W0)", "0", 0 },
-  { "WarningLevel", "W1", "Warning Level 1 (/W1)", "1", 0 },
-  { "WarningLevel", "W2", "Warning Level 2 (/W2)", "2", 0 },
-  { "WarningLevel", "W3", "Warning Level 3 (/W3)", "3", 0 },
-
-  { "PackAlignmentBoundary", "", "Default", "0", 0 },
-  { "PackAlignmentBoundary", "Zp1", "One Byte Boundary (/Zp1)", "1", 0 },
-  { "PackAlignmentBoundary", "Zp2", "Two Byte Boundary (/Zp2)", "2", 0 },
-  { "PackAlignmentBoundary", "Zp4", "Four Byte Boundary (/Zp4)", "3", 0 },
-  { "PackAlignmentBoundary", "Zp8", "Eight Byte Boundary (/Zp8)", "4", 0 },
-  { "PackAlignmentBoundary", "Zp16", "Sixteen Byte Boundary (/Zp16)", "5", 0 },
-
-  { "CallingConvention", "", "Default", "0", 0 },
-  { "CallingConvention", "Gd", "Use C-style Calling Convention (/Gd)", "1",
-    0 },
-  { "CallingConvention", "Gz", "Use stdcall Calling Convention (/Gz)", "2",
-    0 },
-  { "CallingConvention", "Gc", "Use Pascal Calling Convention (/Gc)", "3", 0 },
-
-  { "ErrorReporting", "errorReport:prompt",
-    "Prompt to send report immediately (/errorReport:prompt)", "0", 0 },
-  { "ErrorReporting", "errorReport:queue",
-    "Prompt to send report at the next logon (/errorReport:queue)", "1", 0 },
-  { "ErrorReporting", "errorReport:send",
-    "Automatically send report (/errorReport:send)", "2", 0 },
-  { "ErrorReporting", "errorReport:none",
-    "Do not send report (/errorReport:none)", "3", 0 },
-
-  // Bool Properties
-  { "NoLogo", "nologo", "", "true", 0 },
-  { "GeneratePreprocessedSourceListing", "EP", "", "true", 0 },
-  { "ListAllAvailableInformation", "Sa", "", "true", 0 },
-  { "UseSafeExceptionHandlers", "safeseh", "", "true", 0 },
-  { "AddFirstPassListing", "Sf", "", "true", 0 },
-  { "EnableAssemblyGeneratedCodeListing", "Sg", "", "true", 0 },
-  { "DisableSymbolTable", "Sn", "", "true", 0 },
-  { "EnableFalseConditionalsInListing", "Sx", "", "true", 0 },
-  { "TreatWarningsAsErrors", "WX", "", "true", 0 },
-  { "MakeAllSymbolsPublic", "Zf", "", "true", 0 },
-  { "GenerateDebugInformation", "Zi", "", "true", 0 },
-  { "EnableMASM51Compatibility", "Zm", "", "true", 0 },
-  { "PerformSyntaxCheckOnly", "Zs", "", "true", 0 },
-
-  // Bool Properties With Argument
-
-  // String List Properties
-  { "PreprocessorDefinitions", "D", "Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "IncludePaths", "I", "Include Paths", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "BrowseFile", "FR", "Generate Browse Information File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  // Skip [AdditionalDependencies] - no command line Switch.
-
-  // String Properties
-  // Skip [Inputs] - no command line Switch.
-  { "ObjectFileName", "Fo", "Object File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "AssembledCodeListingFile", "Fl", "Assembled Code Listing File", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [CommandLineTemplate] - no command line Switch.
-  // Skip [ExecutionDescription] - no command line Switch.
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS11RCFlagTable.h b/Source/cmVS11RCFlagTable.h
deleted file mode 100644
index 4997fe1..0000000
--- a/Source/cmVS11RCFlagTable.h
+++ /dev/null
@@ -1,7 +0,0 @@
-static cmVS7FlagTable cmVS11RCFlagTable[] = {
-  // Bool Properties
-  { "NullTerminateStrings", "n", "", "true", 0 },
-  { "SuppressStartupBanner", "nologo", "", "true", 0 },
-
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS12CLFlagTable.h b/Source/cmVS12CLFlagTable.h
deleted file mode 100644
index a4f2518..0000000
--- a/Source/cmVS12CLFlagTable.h
+++ /dev/null
@@ -1,222 +0,0 @@
-static cmVS7FlagTable cmVS12CLFlagTable[] = {
-
-  // Enum Properties
-  { "DebugInformationFormat", "", "None", "None", 0 },
-  { "DebugInformationFormat", "Z7", "C7 compatible", "OldStyle", 0 },
-  { "DebugInformationFormat", "Zi", "Program Database", "ProgramDatabase", 0 },
-  { "DebugInformationFormat", "ZI", "Program Database for Edit And Continue",
-    "EditAndContinue", 0 },
-
-  { "WarningLevel", "W0", "Turn Off All Warnings", "TurnOffAllWarnings", 0 },
-  { "WarningLevel", "W1", "Level1", "Level1", 0 },
-  { "WarningLevel", "W2", "Level2", "Level2", 0 },
-  { "WarningLevel", "W3", "Level3", "Level3", 0 },
-  { "WarningLevel", "W4", "Level4", "Level4", 0 },
-  { "WarningLevel", "Wall", "EnableAllWarnings", "EnableAllWarnings", 0 },
-
-  { "Optimization", "", "Custom", "Custom", 0 },
-  { "Optimization", "Od", "Disabled", "Disabled", 0 },
-  { "Optimization", "O1", "Minimize Size", "MinSpace", 0 },
-  { "Optimization", "O2", "Maximize Speed", "MaxSpeed", 0 },
-  { "Optimization", "Ox", "Full Optimization", "Full", 0 },
-
-  { "InlineFunctionExpansion", "", "Default", "Default", 0 },
-  { "InlineFunctionExpansion", "Ob0", "Disabled", "Disabled", 0 },
-  { "InlineFunctionExpansion", "Ob1", "Only __inline", "OnlyExplicitInline",
-    0 },
-  { "InlineFunctionExpansion", "Ob2", "Any Suitable", "AnySuitable", 0 },
-
-  { "FavorSizeOrSpeed", "Os", "Favor small code", "Size", 0 },
-  { "FavorSizeOrSpeed", "Ot", "Favor fast code", "Speed", 0 },
-  { "FavorSizeOrSpeed", "", "Neither", "Neither", 0 },
-
-  { "ExceptionHandling", "EHa", "Yes with SEH Exceptions", "Async", 0 },
-  { "ExceptionHandling", "EHsc", "Yes", "Sync", 0 },
-  { "ExceptionHandling", "EHs", "Yes with Extern C functions", "SyncCThrow",
-    0 },
-  { "ExceptionHandling", "", "No", "false", 0 },
-
-  { "BasicRuntimeChecks", "RTCs", "Stack Frames", "StackFrameRuntimeCheck",
-    0 },
-  { "BasicRuntimeChecks", "RTCu", "Uninitialized variables",
-    "UninitializedLocalUsageCheck", 0 },
-  { "BasicRuntimeChecks", "RTC1", "Both (/RTC1, equiv. to /RTCsu)",
-    "EnableFastChecks", 0 },
-  { "BasicRuntimeChecks", "", "Default", "Default", 0 },
-
-  { "RuntimeLibrary", "MT", "Multi-threaded", "MultiThreaded", 0 },
-  { "RuntimeLibrary", "MTd", "Multi-threaded Debug", "MultiThreadedDebug", 0 },
-  { "RuntimeLibrary", "MD", "Multi-threaded DLL", "MultiThreadedDLL", 0 },
-  { "RuntimeLibrary", "MDd", "Multi-threaded Debug DLL",
-    "MultiThreadedDebugDLL", 0 },
-
-  { "StructMemberAlignment", "Zp1", "1 Byte", "1Byte", 0 },
-  { "StructMemberAlignment", "Zp2", "2 Bytes", "2Bytes", 0 },
-  { "StructMemberAlignment", "Zp4", "4 Byte", "4Bytes", 0 },
-  { "StructMemberAlignment", "Zp8", "8 Bytes", "8Bytes", 0 },
-  { "StructMemberAlignment", "Zp16", "16 Bytes", "16Bytes", 0 },
-  { "StructMemberAlignment", "", "Default", "Default", 0 },
-
-  { "BufferSecurityCheck", "GS-", "Disable Security Check", "false", 0 },
-  { "BufferSecurityCheck", "GS", "Enable Security Check", "true", 0 },
-
-  { "EnableEnhancedInstructionSet", "arch:SSE", "Streaming SIMD Extensions",
-    "StreamingSIMDExtensions", 0 },
-  { "EnableEnhancedInstructionSet", "arch:SSE2", "Streaming SIMD Extensions 2",
-    "StreamingSIMDExtensions2", 0 },
-  { "EnableEnhancedInstructionSet", "arch:AVX", "Advanced Vector Extensions",
-    "AdvancedVectorExtensions", 0 },
-  { "EnableEnhancedInstructionSet", "arch:IA32", "No Enhanced Instructions",
-    "NoExtensions", 0 },
-  { "EnableEnhancedInstructionSet", "", "Not Set", "NotSet", 0 },
-
-  { "FloatingPointModel", "fp:precise", "Precise", "Precise", 0 },
-  { "FloatingPointModel", "fp:strict", "Strict", "Strict", 0 },
-  { "FloatingPointModel", "fp:fast", "Fast", "Fast", 0 },
-
-  { "PrecompiledHeader", "Yc", "Create", "Create",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "PrecompiledHeader", "Yu", "Use", "Use",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "PrecompiledHeader", "Y-", "Not Using Precompiled Headers", "NotUsing",
-    0 },
-
-  { "AssemblerOutput", "", "No Listing", "NoListing", 0 },
-  { "AssemblerOutput", "FA", "Assembly-Only Listing", "AssemblyCode", 0 },
-  { "AssemblerOutput", "FAc", "Assembly With Machine Code",
-    "AssemblyAndMachineCode", 0 },
-  { "AssemblerOutput", "FAs", "Assembly With Source Code",
-    "AssemblyAndSourceCode", 0 },
-  { "AssemblerOutput", "FAcs", "Assembly, Machine Code and Source", "All", 0 },
-
-  { "CallingConvention", "Gd", "__cdecl", "Cdecl", 0 },
-  { "CallingConvention", "Gr", "__fastcall", "FastCall", 0 },
-  { "CallingConvention", "Gz", "__stdcall", "StdCall", 0 },
-  { "CallingConvention", "Gv", "__vectorcall", "VectorCall", 0 },
-
-  { "CompileAs", "", "Default", "Default", 0 },
-  { "CompileAs", "TC", "Compile as C Code", "CompileAsC", 0 },
-  { "CompileAs", "TP", "Compile as C++ Code", "CompileAsCpp", 0 },
-
-  { "ErrorReporting", "errorReport:none", "Do Not Send Report", "None", 0 },
-  { "ErrorReporting", "errorReport:prompt", "Prompt Immediately", "Prompt",
-    0 },
-  { "ErrorReporting", "errorReport:queue", "Queue For Next Login", "Queue",
-    0 },
-  { "ErrorReporting", "errorReport:send", "Send Automatically", "Send", 0 },
-
-  { "CompileAsManaged", "", "No Common Language RunTime Support", "false", 0 },
-  { "CompileAsManaged", "clr", "Common Language RunTime Support", "true", 0 },
-  { "CompileAsManaged", "clr:pure",
-    "Pure MSIL Common Language RunTime Support", "Pure", 0 },
-  { "CompileAsManaged", "clr:safe",
-    "Safe MSIL Common Language RunTime Support", "Safe", 0 },
-  { "CompileAsManaged", "clr:oldSyntax",
-    "Common Language RunTime Support, Old Syntax", "OldSyntax", 0 },
-
-  // Bool Properties
-  { "CompileAsWinRT", "ZW", "", "true", 0 },
-  { "WinRTNoStdLib", "ZW:nostdlib", "", "true", 0 },
-  { "SuppressStartupBanner", "nologo", "", "true", 0 },
-  { "TreatWarningAsError", "WX-", "", "false", 0 },
-  { "TreatWarningAsError", "WX", "", "true", 0 },
-  { "SDLCheck", "sdl-", "", "false", 0 },
-  { "SDLCheck", "sdl", "", "true", 0 },
-  { "IntrinsicFunctions", "Oi", "", "true", 0 },
-  { "OmitFramePointers", "Oy-", "", "false", 0 },
-  { "OmitFramePointers", "Oy", "", "true", 0 },
-  { "EnableFiberSafeOptimizations", "GT", "", "true", 0 },
-  { "WholeProgramOptimization", "GL", "", "true", 0 },
-  { "UndefineAllPreprocessorDefinitions", "u", "", "true", 0 },
-  { "IgnoreStandardIncludePath", "X", "", "true", 0 },
-  { "PreprocessToFile", "P", "", "true", 0 },
-  { "PreprocessSuppressLineNumbers", "EP", "", "true", 0 },
-  { "PreprocessKeepComments", "C", "", "true", 0 },
-  { "StringPooling", "GF-", "", "false", 0 },
-  { "StringPooling", "GF", "", "true", 0 },
-  { "MinimalRebuild", "Gm-", "", "false", 0 },
-  { "MinimalRebuild", "Gm", "", "true", 0 },
-  { "SmallerTypeCheck", "RTCc", "", "true", 0 },
-  { "FunctionLevelLinking", "Gy-", "", "false", 0 },
-  { "FunctionLevelLinking", "Gy", "", "true", 0 },
-  { "EnableParallelCodeGeneration", "Qpar-", "", "false", 0 },
-  { "EnableParallelCodeGeneration", "Qpar", "", "true", 0 },
-  { "FloatingPointExceptions", "fp:except-", "", "false", 0 },
-  { "FloatingPointExceptions", "fp:except", "", "true", 0 },
-  { "CreateHotpatchableImage", "hotpatch", "", "true", 0 },
-  { "DisableLanguageExtensions", "Za", "", "true", 0 },
-  { "TreatWChar_tAsBuiltInType", "Zc:wchar_t-", "", "false", 0 },
-  { "TreatWChar_tAsBuiltInType", "Zc:wchar_t", "", "true", 0 },
-  { "ForceConformanceInForLoopScope", "Zc:forScope-", "", "false", 0 },
-  { "ForceConformanceInForLoopScope", "Zc:forScope", "", "true", 0 },
-  { "RuntimeTypeInfo", "GR-", "", "false", 0 },
-  { "RuntimeTypeInfo", "GR", "", "true", 0 },
-  { "OpenMPSupport", "openmp-", "", "false", 0 },
-  { "OpenMPSupport", "openmp", "", "true", 0 },
-  { "ExpandAttributedSource", "Fx", "", "true", 0 },
-  { "UseUnicodeForAssemblerListing", "FAu", "", "true", 0 },
-  { "ShowIncludes", "showIncludes", "", "true", 0 },
-  { "EnablePREfast", "analyze-", "", "false", 0 },
-  { "EnablePREfast", "analyze", "", "true", 0 },
-  { "UseFullPaths", "FC", "", "true", 0 },
-  { "OmitDefaultLibName", "Zl", "", "true", 0 },
-
-  // Bool Properties With Argument
-  { "MultiProcessorCompilation", "MP", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "ProcessorNumber", "MP", "Multi-processor Compilation", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "GenerateXMLDocumentationFiles", "doc", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "XMLDocumentationFileName", "doc", "Generate XML Documentation Files", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "BrowseInformation", "FR", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "BrowseInformationFile", "FR", "Enable Browse Information", "",
-    cmVS7FlagTable::UserValueRequired },
-
-  // String List Properties
-  { "AdditionalIncludeDirectories", "I", "Additional Include Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AdditionalUsingDirectories", "AI", "Additional #using Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "PreprocessorDefinitions", "D ", "Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "UndefinePreprocessorDefinitions", "U",
-    "Undefine Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "DisableSpecificWarnings", "wd", "Disable Specific Warnings", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ForcedIncludeFiles", "FI", "Forced Include File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ForcedUsingFiles", "FU", "Forced #using File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "PREfastLog", "analyze:log", "Code Analysis Log", "",
-    cmVS7FlagTable::UserFollowing },
-  { "PREfastAdditionalPlugins", "analyze:plugin",
-    "Additional Code Analysis Native plugins", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "TreatSpecificWarningsAsErrors", "we", "Treat Specific Warnings As Errors",
-    "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-
-  // String Properties
-  // Skip [TrackerLogDirectory] - no command line Switch.
-  { "PreprocessOutputPath", "Fi", "Preprocess Output Path", "",
-    cmVS7FlagTable::UserValue },
-  { "PrecompiledHeaderFile", "Yc", "Precompiled Header Name", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "PrecompiledHeaderFile", "Yu", "Precompiled Header Name", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "PrecompiledHeaderOutputFile", "Fp", "Precompiled Header Output File", "",
-    cmVS7FlagTable::UserValue },
-  { "AssemblerListingLocation", "Fa", "ASM List Location", "",
-    cmVS7FlagTable::UserValue },
-  { "ObjectFileName", "Fo", "Object File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "ProgramDataBaseFileName", "Fd", "Program Database File Name", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [XMLDocumentationFileName] - no command line Switch.
-  // Skip [BrowseInformationFile] - no command line Switch.
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS12CSharpFlagTable.h b/Source/cmVS12CSharpFlagTable.h
deleted file mode 100644
index 0370499..0000000
--- a/Source/cmVS12CSharpFlagTable.h
+++ /dev/null
@@ -1,121 +0,0 @@
-static cmVS7FlagTable cmVS12CSharpFlagTable[] = {
-  { "ProjectName", "out:", "", "", cmIDEFlagTable::UserValueRequired },
-
-  { "OutputType", "target:exe", "", "Exe", 0 },
-  { "OutputType", "target:winexe", "", "Winexe", 0 },
-  { "OutputType", "target:library", "", "Library", 0 },
-  { "OutputType", "target:module", "", "Module", 0 },
-
-  { "DocumentationFile", "doc", "", "", cmIDEFlagTable::UserValueRequired },
-
-  { "Platform", "platform:x86", "", "x86", 0 },
-  { "Platform", "platform:Itanium", "", "Itanium", 0 },
-  { "Platform", "platform:x64", "", "x64", 0 },
-  { "Platform", "platform:arm", "", "arm", 0 },
-  { "Platform", "platform:anycpu32bitpreferred", "", "anycpu32bitpreferred",
-    0 },
-  { "Platform", "platform:anycpu", "", "anycpu", 0 },
-
-  { "References", "reference:", "mit alias", "", 0 },
-  { "References", "reference:", "dateiliste", "", 0 },
-  { "AddModules", "addmodule:", "", "", cmIDEFlagTable::SemicolonAppendable },
-  { "", "link", "", "", 0 },
-
-  { "Win32Resource", "win32res:", "", "", cmIDEFlagTable::UserValueRequired },
-  { "ApplicationIcon", "win32icon:", "", "",
-    cmIDEFlagTable::UserValueRequired },
-
-  { "ApplicationManifest", "win32manifest:", "", "",
-    cmIDEFlagTable::UserValueRequired },
-
-  { "NoWin32Manifest", "nowin32manifest", "", "true", 0 },
-
-  { "DefineDebug", "debug", "", "true", cmIDEFlagTable::Continue },
-
-  { "DebugSymbols", "debug", "", "true", 0 },
-  { "DebugSymbols", "debug-", "", "false", 0 },
-  { "DebugSymbols", "debug+", "", "true", 0 },
-
-  { "DebugType", "debug:none", "", "none", 0 },
-  { "DebugType", "debug:full", "", "full", 0 },
-  { "DebugType", "debug:pdbonly", "", "pdbonly", 0 },
-
-  { "Optimize", "optimize", "", "true", 0 },
-  { "Optimize", "optimize-", "", "false", 0 },
-  { "Optimize", "optimize+", "", "true", 0 },
-
-  { "TreatWarningsAsErrors", "warnaserror", "", "true", 0 },
-  { "TreatWarningsAsErrors", "warnaserror-", "", "false", 0 },
-  { "TreatWarningsAsErrors", "warnaserror+", "", "true", 0 },
-
-  { "WarningsAsErrors", "warnaserror", "", "", 0 },
-  { "WarningsAsErrors", "warnaserror-", "", "", 0 },
-  { "WarningsAsErrors", "warnaserror+", "", "", 0 },
-
-  { "WarningLevel", "warn:0", "", "0", 0 },
-  { "WarningLevel", "warn:1", "", "1", 0 },
-  { "WarningLevel", "warn:2", "", "2", 0 },
-  { "WarningLevel", "warn:3", "", "3", 0 },
-  { "WarningLevel", "warn:4", "", "4", 0 },
-  { "DisabledWarnings", "nowarn", "", "", 0 },
-
-  { "CheckForOverflowUnderflow", "checked", "", "true", 0 },
-  { "CheckForOverflowUnderflow", "checked-", "", "false", 0 },
-  { "CheckForOverflowUnderflow", "checked+", "", "true", 0 },
-
-  { "AllowUnsafeBlocks", "unsafe", "", "true", 0 },
-  { "AllowUnsafeBlocks", "unsafe-", "", "false", 0 },
-  { "AllowUnsafeBlocks", "unsafe+", "", "true", 0 },
-
-  { "DefineConstants", "define:", "", "",
-    cmIDEFlagTable::SemicolonAppendable | cmIDEFlagTable::UserValue },
-
-  { "LangVersion", "langversion:ISO-1", "", "ISO-1", 0 },
-  { "LangVersion", "langversion:ISO-2", "", "ISO-2", 0 },
-  { "LangVersion", "langversion:3", "", "3", 0 },
-  { "LangVersion", "langversion:4", "", "4", 0 },
-  { "LangVersion", "langversion:5", "", "5", 0 },
-  { "LangVersion", "langversion:6", "", "6", 0 },
-  { "LangVersion", "langversion:default", "", "default", 0 },
-
-  { "DelaySign", "delaysign", "", "true", 0 },
-  { "DelaySign", "delaysign-", "", "false", 0 },
-  { "DelaySign", "delaysign+", "", "true", 0 },
-
-  { "AssemblyOriginatorKeyFile", "keyfile", "", "", 0 },
-
-  { "KeyContainerName", "keycontainer", "", "", 0 },
-
-  { "NoLogo", "nologo", "", "", 0 },
-
-  { "NoConfig", "noconfig", "", "true", 0 },
-
-  { "BaseAddress", "baseaddress:", "", "", 0 },
-
-  { "CodePage", "codepage", "", "", 0 },
-
-  { "Utf8Output", "utf8output", "", "", 0 },
-
-  { "MainEntryPoint", "main:", "", "", 0 },
-
-  { "GenerateFullPaths", "fullpaths", "", "true", 0 },
-
-  { "FileAlignment", "filealign", "", "", 0 },
-
-  { "PdbFile", "pdb:", "", "", 0 },
-
-  { "NoStandardLib", "nostdlib", "", "true", 0 },
-  { "NoStandardLib", "nostdlib-", "", "false", 0 },
-  { "NoStandardLib", "nostdlib+", "", "true", 0 },
-
-  { "SubsystemVersion", "subsystemversion", "", "", 0 },
-
-  { "AdditionalLibPaths", "lib:", "", "", 0 },
-
-  { "ErrorReport", "errorreport:none", "Do Not Send Report", "none", 0 },
-  { "ErrorReport", "errorreport:prompt", "Prompt Immediately", "prompt", 0 },
-  { "ErrorReport", "errorreport:queue", "Queue For Next Login", "queue", 0 },
-  { "ErrorReport", "errorreport:send", "Send Automatically", "send", 0 },
-
-  { 0, 0, 0, 0, 0 },
-};
diff --git a/Source/cmVS12LibFlagTable.h b/Source/cmVS12LibFlagTable.h
deleted file mode 100644
index 2229b97..0000000
--- a/Source/cmVS12LibFlagTable.h
+++ /dev/null
@@ -1,76 +0,0 @@
-static cmVS7FlagTable cmVS12LibFlagTable[] = {
-
-  // Enum Properties
-  { "ErrorReporting", "ERRORREPORT:PROMPT", "PromptImmediately",
-    "PromptImmediately", 0 },
-  { "ErrorReporting", "ERRORREPORT:QUEUE", "Queue For Next Login",
-    "QueueForNextLogin", 0 },
-  { "ErrorReporting", "ERRORREPORT:SEND", "Send Error Report",
-    "SendErrorReport", 0 },
-  { "ErrorReporting", "ERRORREPORT:NONE", "No Error Report", "NoErrorReport",
-    0 },
-
-  { "TargetMachine", "MACHINE:ARM", "MachineARM", "MachineARM", 0 },
-  { "TargetMachine", "MACHINE:EBC", "MachineEBC", "MachineEBC", 0 },
-  { "TargetMachine", "MACHINE:IA64", "MachineIA64", "MachineIA64", 0 },
-  { "TargetMachine", "MACHINE:MIPS", "MachineMIPS", "MachineMIPS", 0 },
-  { "TargetMachine", "MACHINE:MIPS16", "MachineMIPS16", "MachineMIPS16", 0 },
-  { "TargetMachine", "MACHINE:MIPSFPU", "MachineMIPSFPU", "MachineMIPSFPU",
-    0 },
-  { "TargetMachine", "MACHINE:MIPSFPU16", "MachineMIPSFPU16",
-    "MachineMIPSFPU16", 0 },
-  { "TargetMachine", "MACHINE:SH4", "MachineSH4", "MachineSH4", 0 },
-  { "TargetMachine", "MACHINE:THUMB", "MachineTHUMB", "MachineTHUMB", 0 },
-  { "TargetMachine", "MACHINE:X64", "MachineX64", "MachineX64", 0 },
-  { "TargetMachine", "MACHINE:X86", "MachineX86", "MachineX86", 0 },
-
-  { "SubSystem", "SUBSYSTEM:CONSOLE", "Console", "Console", 0 },
-  { "SubSystem", "SUBSYSTEM:WINDOWS", "Windows", "Windows", 0 },
-  { "SubSystem", "SUBSYSTEM:NATIVE", "Native", "Native", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_APPLICATION", "EFI Application",
-    "EFI Application", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "EFI Boot Service Driver", "EFI Boot Service Driver", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_ROM", "EFI ROM", "EFI ROM", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_RUNTIME_DRIVER", "EFI Runtime", "EFI Runtime",
-    0 },
-  { "SubSystem", "SUBSYSTEM:WINDOWSCE", "WindowsCE", "WindowsCE", 0 },
-  { "SubSystem", "SUBSYSTEM:POSIX", "POSIX", "POSIX", 0 },
-
-  // Bool Properties
-  { "SuppressStartupBanner", "NOLOGO", "", "true", 0 },
-  { "IgnoreAllDefaultLibraries", "NODEFAULTLIB", "", "true", 0 },
-  { "TreatLibWarningAsErrors", "WX:NO", "", "false", 0 },
-  { "TreatLibWarningAsErrors", "WX", "", "true", 0 },
-  { "Verbose", "VERBOSE", "", "true", 0 },
-  { "LinkTimeCodeGeneration", "LTCG", "", "true", 0 },
-
-  // Bool Properties With Argument
-
-  // String List Properties
-  // Skip [AdditionalDependencies] - no command line Switch.
-  { "AdditionalLibraryDirectories",
-    "LIBPATH:", "Additional Library Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "IgnoreSpecificDefaultLibraries",
-    "NODEFAULTLIB:", "Ignore Specific Default Libraries", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ExportNamedFunctions", "EXPORT:", "Export Named Functions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "RemoveObjects", "REMOVE:", "Remove Objects", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-
-  // String Properties
-  { "OutputFile", "OUT:", "Output File", "", cmVS7FlagTable::UserValue },
-  { "ModuleDefinitionFile", "DEF:", "Module Definition File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "ForceSymbolReferences", "INCLUDE:", "Force Symbol References", "",
-    cmVS7FlagTable::UserValue },
-  { "DisplayLibrary", "LIST:", "Display Library to standard output", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [MinimumRequiredVersion] - no command line Switch.
-  { "Name", "NAME:", "Name", "", cmVS7FlagTable::UserValue },
-  // Skip [AdditionalOptions] - no command line Switch.
-  // Skip [TrackerLogDirectory] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS12LinkFlagTable.h b/Source/cmVS12LinkFlagTable.h
deleted file mode 100644
index ddc3ea1..0000000
--- a/Source/cmVS12LinkFlagTable.h
+++ /dev/null
@@ -1,272 +0,0 @@
-static cmVS7FlagTable cmVS12LinkFlagTable[] = {
-
-  // Enum Properties
-  { "ShowProgress", "", "Not Set", "NotSet", 0 },
-  { "ShowProgress", "VERBOSE", "Display all progress messages", "LinkVerbose",
-    0 },
-  { "ShowProgress", "VERBOSE:Lib", "For Libraries Searched", "LinkVerboseLib",
-    0 },
-  { "ShowProgress", "VERBOSE:ICF",
-    "About COMDAT folding during optimized linking", "LinkVerboseICF", 0 },
-  { "ShowProgress", "VERBOSE:REF",
-    "About data removed during optimized linking", "LinkVerboseREF", 0 },
-  { "ShowProgress", "VERBOSE:SAFESEH", "About Modules incompatible with SEH",
-    "LinkVerboseSAFESEH", 0 },
-  { "ShowProgress", "VERBOSE:CLR",
-    "About linker activity related to managed code", "LinkVerboseCLR", 0 },
-
-  { "ForceFileOutput", "FORCE", "Enabled", "Enabled", 0 },
-  { "ForceFileOutput", "FORCE:MULTIPLE", "Multiply Defined Symbol Only",
-    "MultiplyDefinedSymbolOnly", 0 },
-  { "ForceFileOutput", "FORCE:UNRESOLVED", "Undefined Symbol Only",
-    "UndefinedSymbolOnly", 0 },
-
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN", "Enabled", "Enabled", 0 },
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN:5", "X86 Image Only",
-    "X86Image", 0 },
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN:6", "X64 Image Only",
-    "X64Image", 0 },
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN:16", "Itanium Image Only",
-    "ItaniumImage", 0 },
-
-  // correct flags for uac should be /MANIFESTUAC, but some projects already
-  // use this bug to access uac field, so keep these for compatibility
-  { "UACExecutionLevel", "level='asInvoker'", "asInvoker", "AsInvoker", 0 },
-  { "UACExecutionLevel", "level='highestAvailable'", "highestAvailable",
-    "HighestAvailable", 0 },
-  { "UACExecutionLevel", "level='requireAdministrator'",
-    "requireAdministrator", "RequireAdministrator", 0 },
-
-  { "SubSystem", "", "Not Set", "NotSet", 0 },
-  { "SubSystem", "SUBSYSTEM:CONSOLE", "Console", "Console", 0 },
-  { "SubSystem", "SUBSYSTEM:WINDOWS", "Windows", "Windows", 0 },
-  { "SubSystem", "SUBSYSTEM:NATIVE", "Native", "Native", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_APPLICATION", "EFI Application",
-    "EFI Application", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "EFI Boot Service Driver", "EFI Boot Service Driver", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_ROM", "EFI ROM", "EFI ROM", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_RUNTIME_DRIVER", "EFI Runtime", "EFI Runtime",
-    0 },
-  { "SubSystem", "SUBSYSTEM:POSIX", "POSIX", "POSIX", 0 },
-
-  { "Driver", "", "Not Set", "NotSet", 0 },
-  { "Driver", "Driver", "Driver", "Driver", 0 },
-  { "Driver", "DRIVER:UPONLY", "UP Only", "UpOnly", 0 },
-  { "Driver", "DRIVER:WDM", "WDM", "WDM", 0 },
-
-  { "LinkTimeCodeGeneration", "", "Default", "Default", 0 },
-  { "LinkTimeCodeGeneration", "LTCG", "Use Link Time Code Generation",
-    "UseLinkTimeCodeGeneration", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:PGInstrument",
-    "Profile Guided Optimization - Instrument", "PGInstrument", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:PGOptimize",
-    "Profile Guided Optimization - Optimization", "PGOptimization", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:PGUpdate",
-    "Profile Guided Optimization - Update", "PGUpdate", 0 },
-
-  { "GenerateWindowsMetadata", "WINMD", "Yes", "true", 0 },
-  { "GenerateWindowsMetadata", "WINMD:NO", "No", "false", 0 },
-
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA1", "SHA1", "SHA1", 0 },
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA256", "SHA256", "SHA256", 0 },
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA384", "SHA384", "SHA384", 0 },
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA512", "SHA512", "SHA512", 0 },
-
-  { "TargetMachine", "", "Not Set", "NotSet", 0 },
-  { "TargetMachine", "MACHINE:ARM", "MachineARM", "MachineARM", 0 },
-  { "TargetMachine", "MACHINE:EBC", "MachineEBC", "MachineEBC", 0 },
-  { "TargetMachine", "MACHINE:IA64", "MachineIA64", "MachineIA64", 0 },
-  { "TargetMachine", "MACHINE:MIPS", "MachineMIPS", "MachineMIPS", 0 },
-  { "TargetMachine", "MACHINE:MIPS16", "MachineMIPS16", "MachineMIPS16", 0 },
-  { "TargetMachine", "MACHINE:MIPSFPU", "MachineMIPSFPU", "MachineMIPSFPU",
-    0 },
-  { "TargetMachine", "MACHINE:MIPSFPU16", "MachineMIPSFPU16",
-    "MachineMIPSFPU16", 0 },
-  { "TargetMachine", "MACHINE:SH4", "MachineSH4", "MachineSH4", 0 },
-  { "TargetMachine", "MACHINE:THUMB", "MachineTHUMB", "MachineTHUMB", 0 },
-  { "TargetMachine", "MACHINE:X64", "MachineX64", "MachineX64", 0 },
-  { "TargetMachine", "MACHINE:X86", "MachineX86", "MachineX86", 0 },
-
-  { "CLRThreadAttribute", "CLRTHREADATTRIBUTE:MTA", "MTA threading attribute",
-    "MTAThreadingAttribute", 0 },
-  { "CLRThreadAttribute", "CLRTHREADATTRIBUTE:STA", "STA threading attribute",
-    "STAThreadingAttribute", 0 },
-  { "CLRThreadAttribute", "CLRTHREADATTRIBUTE:NONE",
-    "Default threading attribute", "DefaultThreadingAttribute", 0 },
-
-  { "CLRImageType", "CLRIMAGETYPE:IJW", "Force IJW image", "ForceIJWImage",
-    0 },
-  { "CLRImageType", "CLRIMAGETYPE:PURE", "Force Pure IL Image",
-    "ForcePureILImage", 0 },
-  { "CLRImageType", "CLRIMAGETYPE:SAFE", "Force Safe IL Image",
-    "ForceSafeILImage", 0 },
-  { "CLRImageType", "", "Default image type", "Default", 0 },
-
-  { "SignHash", "CLRSIGNHASH:SHA1", "SHA1", "SHA1", 0 },
-  { "SignHash", "CLRSIGNHASH:SHA256", "SHA256", "SHA256", 0 },
-  { "SignHash", "CLRSIGNHASH:SHA384", "SHA384", "SHA384", 0 },
-  { "SignHash", "CLRSIGNHASH:SHA512", "SHA512", "SHA512", 0 },
-
-  { "LinkErrorReporting", "ERRORREPORT:PROMPT", "PromptImmediately",
-    "PromptImmediately", 0 },
-  { "LinkErrorReporting", "ERRORREPORT:QUEUE", "Queue For Next Login",
-    "QueueForNextLogin", 0 },
-  { "LinkErrorReporting", "ERRORREPORT:SEND", "Send Error Report",
-    "SendErrorReport", 0 },
-  { "LinkErrorReporting", "ERRORREPORT:NONE", "No Error Report",
-    "NoErrorReport", 0 },
-
-  { "CLRSupportLastError", "CLRSupportLastError", "Enabled", "Enabled", 0 },
-  { "CLRSupportLastError", "CLRSupportLastError:NO", "Disabled", "Disabled",
-    0 },
-  { "CLRSupportLastError", "CLRSupportLastError:SYSTEMDLL", "System Dlls Only",
-    "SystemDlls", 0 },
-
-  // Bool Properties
-  { "LinkIncremental", "INCREMENTAL:NO", "", "false", 0 },
-  { "LinkIncremental", "INCREMENTAL", "", "true", 0 },
-  { "SuppressStartupBanner", "NOLOGO", "", "true", 0 },
-  { "LinkStatus", "LTCG:NOSTATUS", "", "false", 0 },
-  { "LinkStatus", "LTCG:STATUS", "", "true", 0 },
-  { "PreventDllBinding", "ALLOWBIND:NO", "", "false", 0 },
-  { "PreventDllBinding", "ALLOWBIND", "", "true", 0 },
-  { "TreatLinkerWarningAsErrors", "WX:NO", "", "false", 0 },
-  { "TreatLinkerWarningAsErrors", "WX", "", "true", 0 },
-  { "IgnoreAllDefaultLibraries", "NODEFAULTLIB", "", "true", 0 },
-  { "GenerateManifest", "MANIFEST:NO", "", "false", 0 },
-  { "GenerateManifest", "MANIFEST", "", "true", 0 },
-  { "AllowIsolation", "ALLOWISOLATION:NO", "", "false", 0 },
-
-  // correct flags for uac should be /MANIFESTUAC, but some projects already
-  // use this bug to access uac field, so keep these for compatibility
-  { "UACUIAccess", "uiAccess='false'", "", "false", 0 },
-  { "UACUIAccess", "uiAccess='true'", "", "true", 0 },
-
-  { "ManifestEmbed", "manifest:embed", "", "true", 0 },
-  { "GenerateDebugInformation", "DEBUG", "", "true",
-    cmVS7FlagTable::CaseInsensitive },
-  { "MapExports", "MAPINFO:EXPORTS", "", "true", 0 },
-  { "AssemblyDebug", "ASSEMBLYDEBUG:DISABLE", "", "false", 0 },
-  { "AssemblyDebug", "ASSEMBLYDEBUG", "", "true", 0 },
-  { "LargeAddressAware", "LARGEADDRESSAWARE:NO", "", "false", 0 },
-  { "LargeAddressAware", "LARGEADDRESSAWARE", "", "true", 0 },
-  { "TerminalServerAware", "TSAWARE:NO", "", "false", 0 },
-  { "TerminalServerAware", "TSAWARE", "", "true", 0 },
-  { "SwapRunFromCD", "SWAPRUN:CD", "", "true", 0 },
-  { "SwapRunFromNET", "SWAPRUN:NET", "", "true", 0 },
-  { "OptimizeReferences", "OPT:NOREF", "", "false", 0 },
-  { "OptimizeReferences", "OPT:REF", "", "true", 0 },
-  { "EnableCOMDATFolding", "OPT:NOICF", "", "false", 0 },
-  { "EnableCOMDATFolding", "OPT:ICF", "", "true", 0 },
-  { "IgnoreEmbeddedIDL", "IGNOREIDL", "", "true", 0 },
-  { "AppContainer", "APPCONTAINER", "", "true", 0 },
-  { "WindowsMetadataLinkDelaySign", "WINMDDELAYSIGN:NO", "", "false", 0 },
-  { "WindowsMetadataLinkDelaySign", "WINMDDELAYSIGN", "", "true", 0 },
-  { "NoEntryPoint", "NOENTRY", "", "true", 0 },
-  { "SetChecksum", "RELEASE", "", "true", 0 },
-  { "RandomizedBaseAddress", "DYNAMICBASE:NO", "", "false", 0 },
-  { "RandomizedBaseAddress", "DYNAMICBASE", "", "true", 0 },
-  { "FixedBaseAddress", "FIXED:NO", "", "false", 0 },
-  { "FixedBaseAddress", "FIXED", "", "true", 0 },
-  { "DataExecutionPrevention", "NXCOMPAT:NO", "", "false", 0 },
-  { "DataExecutionPrevention", "NXCOMPAT", "", "true", 0 },
-  { "TurnOffAssemblyGeneration", "NOASSEMBLY", "", "true", 0 },
-  { "SupportUnloadOfDelayLoadedDLL", "DELAY:UNLOAD", "", "true", 0 },
-  { "SupportNobindOfDelayLoadedDLL", "DELAY:NOBIND", "", "true", 0 },
-  { "Profile", "PROFILE", "", "true", 0 },
-  { "LinkDelaySign", "DELAYSIGN:NO", "", "false", 0 },
-  { "LinkDelaySign", "DELAYSIGN", "", "true", 0 },
-  { "CLRUnmanagedCodeCheck", "CLRUNMANAGEDCODECHECK:NO", "", "false", 0 },
-  { "CLRUnmanagedCodeCheck", "CLRUNMANAGEDCODECHECK", "", "true", 0 },
-  { "DetectOneDefinitionRule", "ODR", "", "true", 0 },
-  { "ImageHasSafeExceptionHandlers", "SAFESEH:NO", "", "false", 0 },
-  { "ImageHasSafeExceptionHandlers", "SAFESEH", "", "true", 0 },
-  { "LinkDLL", "DLL", "", "true", 0 },
-
-  // Bool Properties With Argument
-  { "EnableUAC", "MANIFESTUAC:", "", "",
-    cmVS7FlagTable::UserValueRequired | cmVS7FlagTable::SpaceAppendable },
-  { "GenerateMapFile", "MAP", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "MapFileName", "MAP:", "Generate Map File", "",
-    cmVS7FlagTable::UserValueRequired },
-
-  // String List Properties
-  { "AdditionalLibraryDirectories",
-    "LIBPATH:", "Additional Library Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  // Skip [AdditionalDependencies] - no command line Switch.
-  { "IgnoreSpecificDefaultLibraries",
-    "NODEFAULTLIB:", "Ignore Specific Default Libraries", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AddModuleNamesToAssembly", "ASSEMBLYMODULE:", "Add Module to Assembly",
-    "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "EmbedManagedResourceFile",
-    "ASSEMBLYRESOURCE:", "Embed Managed Resource File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ForceSymbolReferences", "INCLUDE:", "Force Symbol References", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "DelayLoadDLLs", "DELAYLOAD:", "Delay Loaded Dlls", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AssemblyLinkResource", "ASSEMBLYLINKRESOURCE:", "Assembly Link Resource",
-    "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AdditionalManifestDependencies",
-    "MANIFESTDEPENDENCY:", "Additional Manifest Dependencies", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ManifestInput", "manifestinput:", "Manifest Input", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-
-  // String Properties
-  { "OutputFile", "OUT:", "Output File", "", cmVS7FlagTable::UserValue },
-  { "Version", "VERSION:", "Version", "", cmVS7FlagTable::UserValue },
-  { "SpecifySectionAttributes", "SECTION:", "Specify Section Attributes", "",
-    cmVS7FlagTable::UserValue },
-  { "MSDOSStubFileName", "STUB:", "MS-DOS Stub File Name", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [TrackerLogDirectory] - no command line Switch.
-  { "ModuleDefinitionFile", "DEF:", "Module Definition File", "",
-    cmVS7FlagTable::UserValue },
-  { "ManifestFile", "ManifestFile:", "Manifest File", "",
-    cmVS7FlagTable::UserValue },
-  { "ProgramDatabaseFile", "PDB:", "Generate Program Database File", "",
-    cmVS7FlagTable::UserValue },
-  { "StripPrivateSymbols", "PDBSTRIPPED:", "Strip Private Symbols", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [MapFileName] - no command line Switch.
-  // Skip [MinimumRequiredVersion] - no command line Switch.
-  { "HeapReserveSize", "HEAP:", "Heap Reserve Size", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [HeapCommitSize] - no command line Switch.
-  { "StackReserveSize", "STACK:", "Stack Reserve Size", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [StackCommitSize] - no command line Switch.
-  { "FunctionOrder", "ORDER:@", "Function Order", "",
-    cmVS7FlagTable::UserValue },
-  { "ProfileGuidedDatabase", "PGD:", "Profile Guided Database", "",
-    cmVS7FlagTable::UserValue },
-  { "MidlCommandFile", "MIDL:@", "MIDL Commands", "",
-    cmVS7FlagTable::UserValue },
-  { "MergedIDLBaseFileName", "IDLOUT:", "Merged IDL Base File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "TypeLibraryFile", "TLBOUT:", "Type Library", "",
-    cmVS7FlagTable::UserValue },
-  { "WindowsMetadataFile", "WINMDFILE:", "Windows Metadata File", "",
-    cmVS7FlagTable::UserValue },
-  { "WindowsMetadataLinkKeyFile", "WINMDKEYFILE:", "Windows Metadata Key File",
-    "", cmVS7FlagTable::UserValue },
-  { "WindowsMetadataKeyContainer", "WINMDKEYCONTAINER:",
-    "Windows Metadata Key Container", "", cmVS7FlagTable::UserValue },
-  { "EntryPointSymbol", "ENTRY:", "Entry Point", "",
-    cmVS7FlagTable::UserValue },
-  { "BaseAddress", "BASE:", "Base Address", "", cmVS7FlagTable::UserValue },
-  { "ImportLibrary", "IMPLIB:", "Import Library", "",
-    cmVS7FlagTable::UserValue },
-  { "MergeSections", "MERGE:", "Merge Sections", "",
-    cmVS7FlagTable::UserValue },
-  { "LinkKeyFile", "KEYFILE:", "Key File", "", cmVS7FlagTable::UserValue },
-  { "KeyContainer", "KEYCONTAINER:", "Key Container", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS12MASMFlagTable.h b/Source/cmVS12MASMFlagTable.h
deleted file mode 100644
index acc0d48..0000000
--- a/Source/cmVS12MASMFlagTable.h
+++ /dev/null
@@ -1,76 +0,0 @@
-static cmVS7FlagTable cmVS12MASMFlagTable[] = {
-
-  // Enum Properties
-  { "PreserveIdentifierCase", "", "Default", "0", 0 },
-  { "PreserveIdentifierCase", "Cp", "Preserves Identifier Case (/Cp)", "1",
-    0 },
-  { "PreserveIdentifierCase", "Cu",
-    "Maps all identifiers to upper case. (/Cu)", "2", 0 },
-  { "PreserveIdentifierCase", "Cx",
-    "Preserves case in public and extern symbols. (/Cx)", "3", 0 },
-
-  { "WarningLevel", "W0", "Warning Level 0 (/W0)", "0", 0 },
-  { "WarningLevel", "W1", "Warning Level 1 (/W1)", "1", 0 },
-  { "WarningLevel", "W2", "Warning Level 2 (/W2)", "2", 0 },
-  { "WarningLevel", "W3", "Warning Level 3 (/W3)", "3", 0 },
-
-  { "PackAlignmentBoundary", "", "Default", "0", 0 },
-  { "PackAlignmentBoundary", "Zp1", "One Byte Boundary (/Zp1)", "1", 0 },
-  { "PackAlignmentBoundary", "Zp2", "Two Byte Boundary (/Zp2)", "2", 0 },
-  { "PackAlignmentBoundary", "Zp4", "Four Byte Boundary (/Zp4)", "3", 0 },
-  { "PackAlignmentBoundary", "Zp8", "Eight Byte Boundary (/Zp8)", "4", 0 },
-  { "PackAlignmentBoundary", "Zp16", "Sixteen Byte Boundary (/Zp16)", "5", 0 },
-
-  { "CallingConvention", "", "Default", "0", 0 },
-  { "CallingConvention", "Gd", "Use C-style Calling Convention (/Gd)", "1",
-    0 },
-  { "CallingConvention", "Gz", "Use stdcall Calling Convention (/Gz)", "2",
-    0 },
-  { "CallingConvention", "Gc", "Use Pascal Calling Convention (/Gc)", "3", 0 },
-
-  { "ErrorReporting", "errorReport:prompt",
-    "Prompt to send report immediately (/errorReport:prompt)", "0", 0 },
-  { "ErrorReporting", "errorReport:queue",
-    "Prompt to send report at the next logon (/errorReport:queue)", "1", 0 },
-  { "ErrorReporting", "errorReport:send",
-    "Automatically send report (/errorReport:send)", "2", 0 },
-  { "ErrorReporting", "errorReport:none",
-    "Do not send report (/errorReport:none)", "3", 0 },
-
-  // Bool Properties
-  { "NoLogo", "nologo", "", "true", 0 },
-  { "GeneratePreprocessedSourceListing", "EP", "", "true", 0 },
-  { "ListAllAvailableInformation", "Sa", "", "true", 0 },
-  { "UseSafeExceptionHandlers", "safeseh", "", "true", 0 },
-  { "AddFirstPassListing", "Sf", "", "true", 0 },
-  { "EnableAssemblyGeneratedCodeListing", "Sg", "", "true", 0 },
-  { "DisableSymbolTable", "Sn", "", "true", 0 },
-  { "EnableFalseConditionalsInListing", "Sx", "", "true", 0 },
-  { "TreatWarningsAsErrors", "WX", "", "true", 0 },
-  { "MakeAllSymbolsPublic", "Zf", "", "true", 0 },
-  { "GenerateDebugInformation", "Zi", "", "true", 0 },
-  { "EnableMASM51Compatibility", "Zm", "", "true", 0 },
-  { "PerformSyntaxCheckOnly", "Zs", "", "true", 0 },
-
-  // Bool Properties With Argument
-
-  // String List Properties
-  { "PreprocessorDefinitions", "D", "Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "IncludePaths", "I", "Include Paths", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "BrowseFile", "FR", "Generate Browse Information File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  // Skip [AdditionalDependencies] - no command line Switch.
-
-  // String Properties
-  // Skip [Inputs] - no command line Switch.
-  { "ObjectFileName", "Fo", "Object File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "AssembledCodeListingFile", "Fl", "Assembled Code Listing File", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [CommandLineTemplate] - no command line Switch.
-  // Skip [ExecutionDescription] - no command line Switch.
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS12RCFlagTable.h b/Source/cmVS12RCFlagTable.h
deleted file mode 100644
index a650f85..0000000
--- a/Source/cmVS12RCFlagTable.h
+++ /dev/null
@@ -1,7 +0,0 @@
-static cmVS7FlagTable cmVS12RCFlagTable[] = {
-  // Bool Properties
-  { "NullTerminateStrings", "n", "", "true", 0 },
-  { "SuppressStartupBanner", "nologo", "", "true", 0 },
-
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS140CLFlagTable.h b/Source/cmVS140CLFlagTable.h
deleted file mode 100644
index 2b89042..0000000
--- a/Source/cmVS140CLFlagTable.h
+++ /dev/null
@@ -1,240 +0,0 @@
-static cmVS7FlagTable cmVS140CLFlagTable[] = {
-
-  // Enum Properties
-  { "DebugInformationFormat", "", "None", "None", 0 },
-  { "DebugInformationFormat", "Z7", "C7 compatible", "OldStyle", 0 },
-  { "DebugInformationFormat", "Zi", "Program Database", "ProgramDatabase", 0 },
-  { "DebugInformationFormat", "ZI", "Program Database for Edit And Continue",
-    "EditAndContinue", 0 },
-
-  { "WarningLevel", "W0", "Turn Off All Warnings", "TurnOffAllWarnings", 0 },
-  { "WarningLevel", "W1", "Level1", "Level1", 0 },
-  { "WarningLevel", "W2", "Level2", "Level2", 0 },
-  { "WarningLevel", "W3", "Level3", "Level3", 0 },
-  { "WarningLevel", "W4", "Level4", "Level4", 0 },
-  { "WarningLevel", "Wall", "EnableAllWarnings", "EnableAllWarnings", 0 },
-
-  { "Optimization", "", "Custom", "Custom", 0 },
-  { "Optimization", "Od", "Disabled", "Disabled", 0 },
-  { "Optimization", "O1", "Minimize Size", "MinSpace", 0 },
-  { "Optimization", "O2", "Maximize Speed", "MaxSpeed", 0 },
-  { "Optimization", "Ox", "Full Optimization", "Full", 0 },
-
-  { "InlineFunctionExpansion", "", "Default", "Default", 0 },
-  { "InlineFunctionExpansion", "Ob0", "Disabled", "Disabled", 0 },
-  { "InlineFunctionExpansion", "Ob1", "Only __inline", "OnlyExplicitInline",
-    0 },
-  { "InlineFunctionExpansion", "Ob2", "Any Suitable", "AnySuitable", 0 },
-
-  { "FavorSizeOrSpeed", "Os", "Favor small code", "Size", 0 },
-  { "FavorSizeOrSpeed", "Ot", "Favor fast code", "Speed", 0 },
-  { "FavorSizeOrSpeed", "", "Neither", "Neither", 0 },
-
-  { "ExceptionHandling", "EHa", "Yes with SEH Exceptions", "Async", 0 },
-  { "ExceptionHandling", "EHsc", "Yes", "Sync", 0 },
-  { "ExceptionHandling", "EHs", "Yes with Extern C functions", "SyncCThrow",
-    0 },
-  { "ExceptionHandling", "", "No", "false", 0 },
-
-  { "BasicRuntimeChecks", "RTCs", "Stack Frames", "StackFrameRuntimeCheck",
-    0 },
-  { "BasicRuntimeChecks", "RTCu", "Uninitialized variables",
-    "UninitializedLocalUsageCheck", 0 },
-  { "BasicRuntimeChecks", "RTC1", "Both (/RTC1, equiv. to /RTCsu)",
-    "EnableFastChecks", 0 },
-  { "BasicRuntimeChecks", "", "Default", "Default", 0 },
-
-  { "RuntimeLibrary", "MT", "Multi-threaded", "MultiThreaded", 0 },
-  { "RuntimeLibrary", "MTd", "Multi-threaded Debug", "MultiThreadedDebug", 0 },
-  { "RuntimeLibrary", "MD", "Multi-threaded DLL", "MultiThreadedDLL", 0 },
-  { "RuntimeLibrary", "MDd", "Multi-threaded Debug DLL",
-    "MultiThreadedDebugDLL", 0 },
-
-  { "StructMemberAlignment", "Zp1", "1 Byte", "1Byte", 0 },
-  { "StructMemberAlignment", "Zp2", "2 Bytes", "2Bytes", 0 },
-  { "StructMemberAlignment", "Zp4", "4 Byte", "4Bytes", 0 },
-  { "StructMemberAlignment", "Zp8", "8 Bytes", "8Bytes", 0 },
-  { "StructMemberAlignment", "Zp16", "16 Bytes", "16Bytes", 0 },
-  { "StructMemberAlignment", "", "Default", "Default", 0 },
-
-  { "BufferSecurityCheck", "GS-", "Disable Security Check", "false", 0 },
-  { "BufferSecurityCheck", "GS", "Enable Security Check", "true", 0 },
-
-  { "EnableEnhancedInstructionSet", "arch:SSE", "Streaming SIMD Extensions",
-    "StreamingSIMDExtensions", 0 },
-  { "EnableEnhancedInstructionSet", "arch:SSE2", "Streaming SIMD Extensions 2",
-    "StreamingSIMDExtensions2", 0 },
-  { "EnableEnhancedInstructionSet", "arch:AVX", "Advanced Vector Extensions",
-    "AdvancedVectorExtensions", 0 },
-  { "EnableEnhancedInstructionSet", "arch:AVX2",
-    "Advanced Vector Extensions 2", "AdvancedVectorExtensions2", 0 },
-  { "EnableEnhancedInstructionSet", "arch:IA32", "No Enhanced Instructions",
-    "NoExtensions", 0 },
-  { "EnableEnhancedInstructionSet", "", "Not Set", "NotSet", 0 },
-
-  { "FloatingPointModel", "fp:precise", "Precise", "Precise", 0 },
-  { "FloatingPointModel", "fp:strict", "Strict", "Strict", 0 },
-  { "FloatingPointModel", "fp:fast", "Fast", "Fast", 0 },
-
-  { "PrecompiledHeader", "Yc", "Create", "Create",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "PrecompiledHeader", "Yu", "Use", "Use",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "PrecompiledHeader", "Y-", "Not Using Precompiled Headers", "NotUsing",
-    0 },
-
-  { "AssemblerOutput", "", "No Listing", "NoListing", 0 },
-  { "AssemblerOutput", "FA", "Assembly-Only Listing", "AssemblyCode", 0 },
-  { "AssemblerOutput", "FAc", "Assembly With Machine Code",
-    "AssemblyAndMachineCode", 0 },
-  { "AssemblerOutput", "FAs", "Assembly With Source Code",
-    "AssemblyAndSourceCode", 0 },
-  { "AssemblerOutput", "FAcs", "Assembly, Machine Code and Source", "All", 0 },
-
-  { "CallingConvention", "Gd", "__cdecl", "Cdecl", 0 },
-  { "CallingConvention", "Gr", "__fastcall", "FastCall", 0 },
-  { "CallingConvention", "Gz", "__stdcall", "StdCall", 0 },
-  { "CallingConvention", "Gv", "__vectorcall", "VectorCall", 0 },
-
-  { "CompileAs", "", "Default", "Default", 0 },
-  { "CompileAs", "TC", "Compile as C Code", "CompileAsC", 0 },
-  { "CompileAs", "TP", "Compile as C++ Code", "CompileAsCpp", 0 },
-
-  { "ErrorReporting", "errorReport:none", "Do Not Send Report", "None", 0 },
-  { "ErrorReporting", "errorReport:prompt", "Prompt Immediately", "Prompt",
-    0 },
-  { "ErrorReporting", "errorReport:queue", "Queue For Next Login", "Queue",
-    0 },
-  { "ErrorReporting", "errorReport:send", "Send Automatically", "Send", 0 },
-
-  { "CompileAsManaged", "", "No Common Language RunTime Support", "false", 0 },
-  { "CompileAsManaged", "clr", "Common Language RunTime Support", "true", 0 },
-  { "CompileAsManaged", "clr:pure",
-    "Pure MSIL Common Language RunTime Support", "Pure", 0 },
-  { "CompileAsManaged", "clr:safe",
-    "Safe MSIL Common Language RunTime Support", "Safe", 0 },
-  { "CompileAsManaged", "clr:oldSyntax",
-    "Common Language RunTime Support, Old Syntax", "OldSyntax", 0 },
-
-  { "CppLanguageStandard", "", "Default", "Default", 0 },
-  { "CppLanguageStandard", "std=c++98", "C++03", "c++98", 0 },
-  { "CppLanguageStandard", "std=c++11", "C++11", "c++11", 0 },
-  { "CppLanguageStandard", "std=c++1y", "C++14", "c++1y", 0 },
-  { "CppLanguageStandard", "std=c++14", "C++14", "c++1y", 0 },
-  { "CppLanguageStandard", "std=gnu++98", "C++03 (GNU Dialect)", "gnu++98",
-    0 },
-  { "CppLanguageStandard", "std=gnu++11", "C++11 (GNU Dialect)", "gnu++11",
-    0 },
-  { "CppLanguageStandard", "std=gnu++1y", "C++14 (GNU Dialect)", "gnu++1y",
-    0 },
-  { "CppLanguageStandard", "std=gnu++14", "C++14 (GNU Dialect)", "gnu++1y",
-    0 },
-
-  // Bool Properties
-  { "CompileAsWinRT", "ZW", "", "true", 0 },
-  { "WinRTNoStdLib", "ZW:nostdlib", "", "true", 0 },
-  { "SuppressStartupBanner", "nologo", "", "true", 0 },
-  { "TreatWarningAsError", "WX-", "", "false", 0 },
-  { "TreatWarningAsError", "WX", "", "true", 0 },
-  { "SDLCheck", "sdl-", "", "false", 0 },
-  { "SDLCheck", "sdl", "", "true", 0 },
-  { "IntrinsicFunctions", "Oi", "", "true", 0 },
-  { "OmitFramePointers", "Oy-", "", "false", 0 },
-  { "OmitFramePointers", "Oy", "", "true", 0 },
-  { "EnableFiberSafeOptimizations", "GT", "", "true", 0 },
-  { "WholeProgramOptimization", "GL", "", "true", 0 },
-  { "UndefineAllPreprocessorDefinitions", "u", "", "true", 0 },
-  { "IgnoreStandardIncludePath", "X", "", "true", 0 },
-  { "PreprocessToFile", "P", "", "true", 0 },
-  { "PreprocessSuppressLineNumbers", "EP", "", "true", 0 },
-  { "PreprocessKeepComments", "C", "", "true", 0 },
-  { "StringPooling", "GF-", "", "false", 0 },
-  { "StringPooling", "GF", "", "true", 0 },
-  { "MinimalRebuild", "Gm-", "", "false", 0 },
-  { "MinimalRebuild", "Gm", "", "true", 0 },
-  { "SmallerTypeCheck", "RTCc", "", "true", 0 },
-  { "FunctionLevelLinking", "Gy-", "", "false", 0 },
-  { "FunctionLevelLinking", "Gy", "", "true", 0 },
-  { "EnableParallelCodeGeneration", "Qpar-", "", "false", 0 },
-  { "EnableParallelCodeGeneration", "Qpar", "", "true", 0 },
-  { "FloatingPointExceptions", "fp:except-", "", "false", 0 },
-  { "FloatingPointExceptions", "fp:except", "", "true", 0 },
-  { "CreateHotpatchableImage", "hotpatch", "", "true", 0 },
-  { "DisableLanguageExtensions", "Za", "", "true", 0 },
-  { "TreatWChar_tAsBuiltInType", "Zc:wchar_t-", "", "false", 0 },
-  { "TreatWChar_tAsBuiltInType", "Zc:wchar_t", "", "true", 0 },
-  { "ForceConformanceInForLoopScope", "Zc:forScope-", "", "false", 0 },
-  { "ForceConformanceInForLoopScope", "Zc:forScope", "", "true", 0 },
-  { "RemoveUnreferencedCodeData", "Zc:inline-", "", "false", 0 },
-  { "RemoveUnreferencedCodeData", "Zc:inline", "", "true", 0 },
-  { "RuntimeTypeInfo", "GR-", "", "false", 0 },
-  { "RuntimeTypeInfo", "GR", "", "true", 0 },
-  { "OpenMPSupport", "openmp-", "", "false", 0 },
-  { "OpenMPSupport", "openmp", "", "true", 0 },
-  { "ExpandAttributedSource", "Fx", "", "true", 0 },
-  { "UseUnicodeForAssemblerListing", "FAu", "", "true", 0 },
-  { "ShowIncludes", "showIncludes", "", "true", 0 },
-  { "EnablePREfast", "analyze-", "", "false", 0 },
-  { "EnablePREfast", "analyze", "", "true", 0 },
-  { "UseFullPaths", "FC", "", "true", 0 },
-  { "OmitDefaultLibName", "Zl", "", "true", 0 },
-
-  // Bool Properties With Argument
-  { "MultiProcessorCompilation", "MP", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "ProcessorNumber", "MP", "Multi-processor Compilation", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "GenerateXMLDocumentationFiles", "doc", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "XMLDocumentationFileName", "doc", "Generate XML Documentation Files", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "BrowseInformation", "FR", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "BrowseInformationFile", "FR", "Enable Browse Information", "",
-    cmVS7FlagTable::UserValueRequired },
-
-  // String List Properties
-  { "AdditionalIncludeDirectories", "I", "Additional Include Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AdditionalUsingDirectories", "AI", "Additional #using Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "PreprocessorDefinitions", "D ", "Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "UndefinePreprocessorDefinitions", "U",
-    "Undefine Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "DisableSpecificWarnings", "wd", "Disable Specific Warnings", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ForcedIncludeFiles", "FI", "Forced Include File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ForcedUsingFiles", "FU", "Forced #using File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "PREfastLog", "analyze:log", "Code Analysis Log", "",
-    cmVS7FlagTable::UserFollowing },
-  { "PREfastAdditionalPlugins", "analyze:plugin",
-    "Additional Code Analysis Native plugins", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "TreatSpecificWarningsAsErrors", "we", "Treat Specific Warnings As Errors",
-    "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-
-  // String Properties
-  // Skip [TrackerLogDirectory] - no command line Switch.
-  { "PreprocessOutputPath", "Fi", "Preprocess Output Path", "",
-    cmVS7FlagTable::UserValue },
-  { "PrecompiledHeaderFile", "Yc", "Precompiled Header Name", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "PrecompiledHeaderFile", "Yu", "Precompiled Header Name", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "PrecompiledHeaderOutputFile", "Fp", "Precompiled Header Output File", "",
-    cmVS7FlagTable::UserValue },
-  { "AssemblerListingLocation", "Fa", "ASM List Location", "",
-    cmVS7FlagTable::UserValue },
-  { "ObjectFileName", "Fo", "Object File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "ProgramDataBaseFileName", "Fd", "Program Database File Name", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [XMLDocumentationFileName] - no command line Switch.
-  // Skip [BrowseInformationFile] - no command line Switch.
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS140CSharpFlagTable.h b/Source/cmVS140CSharpFlagTable.h
deleted file mode 100644
index f695f45..0000000
--- a/Source/cmVS140CSharpFlagTable.h
+++ /dev/null
@@ -1,121 +0,0 @@
-static cmVS7FlagTable cmVS140CSharpFlagTable[] = {
-  { "ProjectName", "out:", "", "", cmIDEFlagTable::UserValueRequired },
-
-  { "OutputType", "target:exe", "", "Exe", 0 },
-  { "OutputType", "target:winexe", "", "Winexe", 0 },
-  { "OutputType", "target:library", "", "Library", 0 },
-  { "OutputType", "target:module", "", "Module", 0 },
-
-  { "DocumentationFile", "doc", "", "", cmIDEFlagTable::UserValueRequired },
-
-  { "Platform", "platform:x86", "", "x86", 0 },
-  { "Platform", "platform:Itanium", "", "Itanium", 0 },
-  { "Platform", "platform:x64", "", "x64", 0 },
-  { "Platform", "platform:arm", "", "arm", 0 },
-  { "Platform", "platform:anycpu32bitpreferred", "", "anycpu32bitpreferred",
-    0 },
-  { "Platform", "platform:anycpu", "", "anycpu", 0 },
-
-  { "References", "reference:", "mit alias", "", 0 },
-  { "References", "reference:", "dateiliste", "", 0 },
-  { "AddModules", "addmodule:", "", "", cmIDEFlagTable::SemicolonAppendable },
-  { "", "link", "", "", 0 },
-
-  { "Win32Resource", "win32res:", "", "", cmIDEFlagTable::UserValueRequired },
-  { "ApplicationIcon", "win32icon:", "", "",
-    cmIDEFlagTable::UserValueRequired },
-
-  { "ApplicationManifest", "win32manifest:", "", "",
-    cmIDEFlagTable::UserValueRequired },
-
-  { "NoWin32Manifest", "nowin32manifest", "", "true", 0 },
-
-  { "DefineDebug", "debug", "", "true", cmIDEFlagTable::Continue },
-
-  { "DebugSymbols", "debug", "", "true", 0 },
-  { "DebugSymbols", "debug-", "", "false", 0 },
-  { "DebugSymbols", "debug+", "", "true", 0 },
-
-  { "DebugType", "debug:none", "", "none", 0 },
-  { "DebugType", "debug:full", "", "full", 0 },
-  { "DebugType", "debug:pdbonly", "", "pdbonly", 0 },
-
-  { "Optimize", "optimize", "", "true", 0 },
-  { "Optimize", "optimize-", "", "false", 0 },
-  { "Optimize", "optimize+", "", "true", 0 },
-
-  { "TreatWarningsAsErrors", "warnaserror", "", "true", 0 },
-  { "TreatWarningsAsErrors", "warnaserror-", "", "false", 0 },
-  { "TreatWarningsAsErrors", "warnaserror+", "", "true", 0 },
-
-  { "WarningsAsErrors", "warnaserror", "", "", 0 },
-  { "WarningsAsErrors", "warnaserror-", "", "", 0 },
-  { "WarningsAsErrors", "warnaserror+", "", "", 0 },
-
-  { "WarningLevel", "warn:0", "", "0", 0 },
-  { "WarningLevel", "warn:1", "", "1", 0 },
-  { "WarningLevel", "warn:2", "", "2", 0 },
-  { "WarningLevel", "warn:3", "", "3", 0 },
-  { "WarningLevel", "warn:4", "", "4", 0 },
-  { "DisabledWarnings", "nowarn", "", "", 0 },
-
-  { "CheckForOverflowUnderflow", "checked", "", "true", 0 },
-  { "CheckForOverflowUnderflow", "checked-", "", "false", 0 },
-  { "CheckForOverflowUnderflow", "checked+", "", "true", 0 },
-
-  { "AllowUnsafeBlocks", "unsafe", "", "true", 0 },
-  { "AllowUnsafeBlocks", "unsafe-", "", "false", 0 },
-  { "AllowUnsafeBlocks", "unsafe+", "", "true", 0 },
-
-  { "DefineConstants", "define:", "", "",
-    cmIDEFlagTable::SemicolonAppendable | cmIDEFlagTable::UserValue },
-
-  { "LangVersion", "langversion:ISO-1", "", "ISO-1", 0 },
-  { "LangVersion", "langversion:ISO-2", "", "ISO-2", 0 },
-  { "LangVersion", "langversion:3", "", "3", 0 },
-  { "LangVersion", "langversion:4", "", "4", 0 },
-  { "LangVersion", "langversion:5", "", "5", 0 },
-  { "LangVersion", "langversion:6", "", "6", 0 },
-  { "LangVersion", "langversion:default", "", "default", 0 },
-
-  { "DelaySign", "delaysign", "", "true", 0 },
-  { "DelaySign", "delaysign-", "", "false", 0 },
-  { "DelaySign", "delaysign+", "", "true", 0 },
-
-  { "AssemblyOriginatorKeyFile", "keyfile", "", "", 0 },
-
-  { "KeyContainerName", "keycontainer", "", "", 0 },
-
-  { "NoLogo", "nologo", "", "", 0 },
-
-  { "NoConfig", "noconfig", "", "true", 0 },
-
-  { "BaseAddress", "baseaddress:", "", "", 0 },
-
-  { "CodePage", "codepage", "", "", 0 },
-
-  { "Utf8Output", "utf8output", "", "", 0 },
-
-  { "MainEntryPoint", "main:", "", "", 0 },
-
-  { "GenerateFullPaths", "fullpaths", "", "true", 0 },
-
-  { "FileAlignment", "filealign", "", "", 0 },
-
-  { "PdbFile", "pdb:", "", "", 0 },
-
-  { "NoStandardLib", "nostdlib", "", "true", 0 },
-  { "NoStandardLib", "nostdlib-", "", "false", 0 },
-  { "NoStandardLib", "nostdlib+", "", "true", 0 },
-
-  { "SubsystemVersion", "subsystemversion", "", "", 0 },
-
-  { "AdditionalLibPaths", "lib:", "", "", 0 },
-
-  { "ErrorReport", "errorreport:none", "Do Not Send Report", "none", 0 },
-  { "ErrorReport", "errorreport:prompt", "Prompt Immediately", "prompt", 0 },
-  { "ErrorReport", "errorreport:queue", "Queue For Next Login", "queue", 0 },
-  { "ErrorReport", "errorreport:send", "Send Automatically", "send", 0 },
-
-  { 0, 0, 0, 0, 0 },
-};
diff --git a/Source/cmVS140LinkFlagTable.h b/Source/cmVS140LinkFlagTable.h
deleted file mode 100644
index fe03153..0000000
--- a/Source/cmVS140LinkFlagTable.h
+++ /dev/null
@@ -1,285 +0,0 @@
-static cmVS7FlagTable cmVS140LinkFlagTable[] = {
-
-  // Enum Properties
-  { "ShowProgress", "", "Not Set", "NotSet", 0 },
-  { "ShowProgress", "VERBOSE", "Display all progress messages", "LinkVerbose",
-    0 },
-  { "ShowProgress", "VERBOSE:Lib", "For Libraries Searched", "LinkVerboseLib",
-    0 },
-  { "ShowProgress", "VERBOSE:ICF",
-    "About COMDAT folding during optimized linking", "LinkVerboseICF", 0 },
-  { "ShowProgress", "VERBOSE:REF",
-    "About data removed during optimized linking", "LinkVerboseREF", 0 },
-  { "ShowProgress", "VERBOSE:SAFESEH", "About Modules incompatible with SEH",
-    "LinkVerboseSAFESEH", 0 },
-  { "ShowProgress", "VERBOSE:CLR",
-    "About linker activity related to managed code", "LinkVerboseCLR", 0 },
-
-  { "ForceFileOutput", "FORCE", "Enabled", "Enabled", 0 },
-  { "ForceFileOutput", "FORCE:MULTIPLE", "Multiply Defined Symbol Only",
-    "MultiplyDefinedSymbolOnly", 0 },
-  { "ForceFileOutput", "FORCE:UNRESOLVED", "Undefined Symbol Only",
-    "UndefinedSymbolOnly", 0 },
-
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN", "Enabled", "Enabled", 0 },
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN:5", "X86 Image Only",
-    "X86Image", 0 },
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN:6", "X64 Image Only",
-    "X64Image", 0 },
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN:16", "Itanium Image Only",
-    "ItaniumImage", 0 },
-
-  // correct flags for uac should be /MANIFESTUAC, but some projects already
-  // use this bug to access uac field, so keep these for compatibility
-  { "UACExecutionLevel", "level='asInvoker'", "asInvoker", "AsInvoker", 0 },
-  { "UACExecutionLevel", "level='highestAvailable'", "highestAvailable",
-    "HighestAvailable", 0 },
-  { "UACExecutionLevel", "level='requireAdministrator'",
-    "requireAdministrator", "RequireAdministrator", 0 },
-
-  { "GenerateDebugInformation", "DEBUG:FASTLINK",
-    "Optimize for faster linking", "DebugFastLink",
-    cmVS7FlagTable::CaseInsensitive },
-  { "GenerateDebugInformation", "DEBUG:FULL", "Optimize for debugging", "true",
-    cmVS7FlagTable::CaseInsensitive },
-  { "GenerateDebugInformation", "DEBUG:NONE",
-    "Produces no debugging information", "false",
-    cmVS7FlagTable::CaseInsensitive },
-  { "GenerateDebugInformation", "DEBUG", "Optimize for debugging", "true",
-    cmVS7FlagTable::CaseInsensitive },
-
-  { "SubSystem", "", "Not Set", "NotSet", 0 },
-  { "SubSystem", "SUBSYSTEM:CONSOLE", "Console", "Console", 0 },
-  { "SubSystem", "SUBSYSTEM:WINDOWS", "Windows", "Windows", 0 },
-  { "SubSystem", "SUBSYSTEM:NATIVE", "Native", "Native", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_APPLICATION", "EFI Application",
-    "EFI Application", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "EFI Boot Service Driver", "EFI Boot Service Driver", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_ROM", "EFI ROM", "EFI ROM", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_RUNTIME_DRIVER", "EFI Runtime", "EFI Runtime",
-    0 },
-  { "SubSystem", "SUBSYSTEM:POSIX", "POSIX", "POSIX", 0 },
-
-  { "Driver", "", "Not Set", "NotSet", 0 },
-  { "Driver", "Driver", "Driver", "Driver", 0 },
-  { "Driver", "DRIVER:UPONLY", "UP Only", "UpOnly", 0 },
-  { "Driver", "DRIVER:WDM", "WDM", "WDM", 0 },
-
-  { "LinkTimeCodeGeneration", "", "Default", "Default", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:incremental",
-    "Use Fast Link Time Code Generation", "UseFastLinkTimeCodeGeneration", 0 },
-  { "LinkTimeCodeGeneration", "LTCG", "Use Link Time Code Generation",
-    "UseLinkTimeCodeGeneration", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:PGInstrument",
-    "Profile Guided Optimization - Instrument", "PGInstrument", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:PGOptimize",
-    "Profile Guided Optimization - Optimization", "PGOptimization", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:PGUpdate",
-    "Profile Guided Optimization - Update", "PGUpdate", 0 },
-
-  { "GenerateWindowsMetadata", "WINMD", "Yes", "true", 0 },
-  { "GenerateWindowsMetadata", "WINMD:NO", "No", "false", 0 },
-
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA1", "SHA1", "SHA1", 0 },
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA256", "SHA256", "SHA256", 0 },
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA384", "SHA384", "SHA384", 0 },
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA512", "SHA512", "SHA512", 0 },
-
-  { "TargetMachine", "", "Not Set", "NotSet", 0 },
-  { "TargetMachine", "MACHINE:ARM", "MachineARM", "MachineARM", 0 },
-  { "TargetMachine", "MACHINE:EBC", "MachineEBC", "MachineEBC", 0 },
-  { "TargetMachine", "MACHINE:IA64", "MachineIA64", "MachineIA64", 0 },
-  { "TargetMachine", "MACHINE:MIPS", "MachineMIPS", "MachineMIPS", 0 },
-  { "TargetMachine", "MACHINE:MIPS16", "MachineMIPS16", "MachineMIPS16", 0 },
-  { "TargetMachine", "MACHINE:MIPSFPU", "MachineMIPSFPU", "MachineMIPSFPU",
-    0 },
-  { "TargetMachine", "MACHINE:MIPSFPU16", "MachineMIPSFPU16",
-    "MachineMIPSFPU16", 0 },
-  { "TargetMachine", "MACHINE:SH4", "MachineSH4", "MachineSH4", 0 },
-  { "TargetMachine", "MACHINE:THUMB", "MachineTHUMB", "MachineTHUMB", 0 },
-  { "TargetMachine", "MACHINE:X64", "MachineX64", "MachineX64", 0 },
-  { "TargetMachine", "MACHINE:X86", "MachineX86", "MachineX86", 0 },
-
-  { "CLRThreadAttribute", "CLRTHREADATTRIBUTE:MTA", "MTA threading attribute",
-    "MTAThreadingAttribute", 0 },
-  { "CLRThreadAttribute", "CLRTHREADATTRIBUTE:STA", "STA threading attribute",
-    "STAThreadingAttribute", 0 },
-  { "CLRThreadAttribute", "CLRTHREADATTRIBUTE:NONE",
-    "Default threading attribute", "DefaultThreadingAttribute", 0 },
-
-  { "CLRImageType", "CLRIMAGETYPE:IJW", "Force IJW image", "ForceIJWImage",
-    0 },
-  { "CLRImageType", "CLRIMAGETYPE:PURE", "Force Pure IL Image",
-    "ForcePureILImage", 0 },
-  { "CLRImageType", "CLRIMAGETYPE:SAFE", "Force Safe IL Image",
-    "ForceSafeILImage", 0 },
-  { "CLRImageType", "", "Default image type", "Default", 0 },
-
-  { "SignHash", "CLRSIGNHASH:SHA1", "SHA1", "SHA1", 0 },
-  { "SignHash", "CLRSIGNHASH:SHA256", "SHA256", "SHA256", 0 },
-  { "SignHash", "CLRSIGNHASH:SHA384", "SHA384", "SHA384", 0 },
-  { "SignHash", "CLRSIGNHASH:SHA512", "SHA512", "SHA512", 0 },
-
-  { "LinkErrorReporting", "ERRORREPORT:PROMPT", "PromptImmediately",
-    "PromptImmediately", 0 },
-  { "LinkErrorReporting", "ERRORREPORT:QUEUE", "Queue For Next Login",
-    "QueueForNextLogin", 0 },
-  { "LinkErrorReporting", "ERRORREPORT:SEND", "Send Error Report",
-    "SendErrorReport", 0 },
-  { "LinkErrorReporting", "ERRORREPORT:NONE", "No Error Report",
-    "NoErrorReport", 0 },
-
-  { "CLRSupportLastError", "CLRSupportLastError", "Enabled", "Enabled", 0 },
-  { "CLRSupportLastError", "CLRSupportLastError:NO", "Disabled", "Disabled",
-    0 },
-  { "CLRSupportLastError", "CLRSupportLastError:SYSTEMDLL", "System Dlls Only",
-    "SystemDlls", 0 },
-
-  // Bool Properties
-  { "LinkIncremental", "INCREMENTAL:NO", "", "false", 0 },
-  { "LinkIncremental", "INCREMENTAL", "", "true", 0 },
-  { "SuppressStartupBanner", "NOLOGO", "", "true", 0 },
-  { "LinkStatus", "LTCG:NOSTATUS", "", "false", 0 },
-  { "LinkStatus", "LTCG:STATUS", "", "true", 0 },
-  { "PreventDllBinding", "ALLOWBIND:NO", "", "false", 0 },
-  { "PreventDllBinding", "ALLOWBIND", "", "true", 0 },
-  { "TreatLinkerWarningAsErrors", "WX:NO", "", "false", 0 },
-  { "TreatLinkerWarningAsErrors", "WX", "", "true", 0 },
-  { "IgnoreAllDefaultLibraries", "NODEFAULTLIB", "", "true", 0 },
-  { "GenerateManifest", "MANIFEST:NO", "", "false", 0 },
-  { "GenerateManifest", "MANIFEST", "", "true", 0 },
-  { "AllowIsolation", "ALLOWISOLATION:NO", "", "false", 0 },
-
-  // correct flags for uac should be /MANIFESTUAC, but some projects already
-  // use this bug to access uac field, so keep these for compatibility
-  { "UACUIAccess", "uiAccess='false'", "", "false", 0 },
-  { "UACUIAccess", "uiAccess='true'", "", "true", 0 },
-
-  { "ManifestEmbed", "manifest:embed", "", "true", 0 },
-  { "MapExports", "MAPINFO:EXPORTS", "", "true", 0 },
-  { "AssemblyDebug", "ASSEMBLYDEBUG:DISABLE", "", "false", 0 },
-  { "AssemblyDebug", "ASSEMBLYDEBUG", "", "true", 0 },
-  { "LargeAddressAware", "LARGEADDRESSAWARE:NO", "", "false", 0 },
-  { "LargeAddressAware", "LARGEADDRESSAWARE", "", "true", 0 },
-  { "TerminalServerAware", "TSAWARE:NO", "", "false", 0 },
-  { "TerminalServerAware", "TSAWARE", "", "true", 0 },
-  { "SwapRunFromCD", "SWAPRUN:CD", "", "true", 0 },
-  { "SwapRunFromNET", "SWAPRUN:NET", "", "true", 0 },
-  { "OptimizeReferences", "OPT:NOREF", "", "false", 0 },
-  { "OptimizeReferences", "OPT:REF", "", "true", 0 },
-  { "EnableCOMDATFolding", "OPT:NOICF", "", "false", 0 },
-  { "EnableCOMDATFolding", "OPT:ICF", "", "true", 0 },
-  { "IgnoreEmbeddedIDL", "IGNOREIDL", "", "true", 0 },
-  { "AppContainer", "APPCONTAINER", "", "true", 0 },
-  { "WindowsMetadataLinkDelaySign", "WINMDDELAYSIGN:NO", "", "false", 0 },
-  { "WindowsMetadataLinkDelaySign", "WINMDDELAYSIGN", "", "true", 0 },
-  { "NoEntryPoint", "NOENTRY", "", "true", 0 },
-  { "SetChecksum", "RELEASE", "", "true", 0 },
-  { "RandomizedBaseAddress", "DYNAMICBASE:NO", "", "false", 0 },
-  { "RandomizedBaseAddress", "DYNAMICBASE", "", "true", 0 },
-  { "FixedBaseAddress", "FIXED:NO", "", "false", 0 },
-  { "FixedBaseAddress", "FIXED", "", "true", 0 },
-  { "DataExecutionPrevention", "NXCOMPAT:NO", "", "false", 0 },
-  { "DataExecutionPrevention", "NXCOMPAT", "", "true", 0 },
-  { "TurnOffAssemblyGeneration", "NOASSEMBLY", "", "true", 0 },
-  { "SupportUnloadOfDelayLoadedDLL", "DELAY:UNLOAD", "", "true", 0 },
-  { "SupportNobindOfDelayLoadedDLL", "DELAY:NOBIND", "", "true", 0 },
-  { "Profile", "PROFILE", "", "true", 0 },
-  { "LinkDelaySign", "DELAYSIGN:NO", "", "false", 0 },
-  { "LinkDelaySign", "DELAYSIGN", "", "true", 0 },
-  { "CLRUnmanagedCodeCheck", "CLRUNMANAGEDCODECHECK:NO", "", "false", 0 },
-  { "CLRUnmanagedCodeCheck", "CLRUNMANAGEDCODECHECK", "", "true", 0 },
-  { "DetectOneDefinitionRule", "ODR", "", "true", 0 },
-  { "ImageHasSafeExceptionHandlers", "SAFESEH:NO", "", "false", 0 },
-  { "ImageHasSafeExceptionHandlers", "SAFESEH", "", "true", 0 },
-  { "LinkDLL", "DLL", "", "true", 0 },
-
-  // Bool Properties With Argument
-  { "EnableUAC", "MANIFESTUAC:", "", "",
-    cmVS7FlagTable::UserValueRequired | cmVS7FlagTable::SpaceAppendable },
-  { "GenerateMapFile", "MAP", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "MapFileName", "MAP:", "Generate Map File", "",
-    cmVS7FlagTable::UserValueRequired },
-
-  // String List Properties
-  { "AdditionalLibraryDirectories",
-    "LIBPATH:", "Additional Library Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "Natvis", "NATVIS:", "Natvis files", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  // Skip [AdditionalDependencies] - no command line Switch.
-  { "IgnoreSpecificDefaultLibraries",
-    "NODEFAULTLIB:", "Ignore Specific Default Libraries", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AddModuleNamesToAssembly", "ASSEMBLYMODULE:", "Add Module to Assembly",
-    "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "EmbedManagedResourceFile",
-    "ASSEMBLYRESOURCE:", "Embed Managed Resource File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ForceSymbolReferences", "INCLUDE:", "Force Symbol References", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "DelayLoadDLLs", "DELAYLOAD:", "Delay Loaded Dlls", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AssemblyLinkResource", "ASSEMBLYLINKRESOURCE:", "Assembly Link Resource",
-    "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AdditionalManifestDependencies",
-    "MANIFESTDEPENDENCY:", "Additional Manifest Dependencies", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ManifestInput", "manifestinput:", "Manifest Input", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-
-  // String Properties
-  { "OutputFile", "OUT:", "Output File", "", cmVS7FlagTable::UserValue },
-  { "Version", "VERSION:", "Version", "", cmVS7FlagTable::UserValue },
-  { "SpecifySectionAttributes", "SECTION:", "Specify Section Attributes", "",
-    cmVS7FlagTable::UserValue },
-  { "MSDOSStubFileName", "STUB:", "MS-DOS Stub File Name", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [TrackerLogDirectory] - no command line Switch.
-  { "ModuleDefinitionFile", "DEF:", "Module Definition File", "",
-    cmVS7FlagTable::UserValue },
-  { "ManifestFile", "ManifestFile:", "Manifest File", "",
-    cmVS7FlagTable::UserValue },
-  { "ProgramDatabaseFile", "PDB:", "Generate Program Database File", "",
-    cmVS7FlagTable::UserValue },
-  { "StripPrivateSymbols", "PDBSTRIPPED:", "Strip Private Symbols", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [MapFileName] - no command line Switch.
-  // Skip [MinimumRequiredVersion] - no command line Switch.
-  { "HeapReserveSize", "HEAP:", "Heap Reserve Size", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [HeapCommitSize] - no command line Switch.
-  { "StackReserveSize", "STACK:", "Stack Reserve Size", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [StackCommitSize] - no command line Switch.
-  { "FunctionOrder", "ORDER:@", "Function Order", "",
-    cmVS7FlagTable::UserValue },
-  { "ProfileGuidedDatabase", "PGD:", "Profile Guided Database", "",
-    cmVS7FlagTable::UserValue },
-  { "MidlCommandFile", "MIDL:@", "MIDL Commands", "",
-    cmVS7FlagTable::UserValue },
-  { "MergedIDLBaseFileName", "IDLOUT:", "Merged IDL Base File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "TypeLibraryFile", "TLBOUT:", "Type Library", "",
-    cmVS7FlagTable::UserValue },
-  { "WindowsMetadataFile", "WINMDFILE:", "Windows Metadata File", "",
-    cmVS7FlagTable::UserValue },
-  { "WindowsMetadataLinkKeyFile", "WINMDKEYFILE:", "Windows Metadata Key File",
-    "", cmVS7FlagTable::UserValue },
-  { "WindowsMetadataKeyContainer", "WINMDKEYCONTAINER:",
-    "Windows Metadata Key Container", "", cmVS7FlagTable::UserValue },
-  { "EntryPointSymbol", "ENTRY:", "Entry Point", "",
-    cmVS7FlagTable::UserValue },
-  { "BaseAddress", "BASE:", "Base Address", "", cmVS7FlagTable::UserValue },
-  { "ImportLibrary", "IMPLIB:", "Import Library", "",
-    cmVS7FlagTable::UserValue },
-  { "MergeSections", "MERGE:", "Merge Sections", "",
-    cmVS7FlagTable::UserValue },
-  { "LinkKeyFile", "KEYFILE:", "Key File", "", cmVS7FlagTable::UserValue },
-  { "KeyContainer", "KEYCONTAINER:", "Key Container", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS141CLFlagTable.h b/Source/cmVS141CLFlagTable.h
deleted file mode 100644
index 7d219be..0000000
--- a/Source/cmVS141CLFlagTable.h
+++ /dev/null
@@ -1,260 +0,0 @@
-static cmVS7FlagTable cmVS141CLFlagTable[] = {
-
-  // Enum Properties
-  { "DiagnosticsFormat", "diagnostics:classic", "Classic", "Classic", 0 },
-  { "DiagnosticsFormat", "diagnostics:column", "Column", "Column", 0 },
-  { "DiagnosticsFormat", "diagnostics:caret", "Caret", "Caret", 0 },
-
-  { "DebugInformationFormat", "", "None", "None", 0 },
-  { "DebugInformationFormat", "Z7", "C7 compatible", "OldStyle", 0 },
-  { "DebugInformationFormat", "Zi", "Program Database", "ProgramDatabase", 0 },
-  { "DebugInformationFormat", "ZI", "Program Database for Edit And Continue",
-    "EditAndContinue", 0 },
-
-  { "WarningLevel", "W0", "Turn Off All Warnings", "TurnOffAllWarnings", 0 },
-  { "WarningLevel", "W1", "Level1", "Level1", 0 },
-  { "WarningLevel", "W2", "Level2", "Level2", 0 },
-  { "WarningLevel", "W3", "Level3", "Level3", 0 },
-  { "WarningLevel", "W4", "Level4", "Level4", 0 },
-  { "WarningLevel", "Wall", "EnableAllWarnings", "EnableAllWarnings", 0 },
-
-  { "Optimization", "", "Custom", "Custom", 0 },
-  { "Optimization", "Od", "Disabled", "Disabled", 0 },
-  { "Optimization", "O1", "Minimize Size", "MinSpace", 0 },
-  { "Optimization", "O2", "Maximize Speed", "MaxSpeed", 0 },
-  { "Optimization", "Ox", "Full Optimization", "Full", 0 },
-
-  { "InlineFunctionExpansion", "", "Default", "Default", 0 },
-  { "InlineFunctionExpansion", "Ob0", "Disabled", "Disabled", 0 },
-  { "InlineFunctionExpansion", "Ob1", "Only __inline", "OnlyExplicitInline",
-    0 },
-  { "InlineFunctionExpansion", "Ob2", "Any Suitable", "AnySuitable", 0 },
-
-  { "FavorSizeOrSpeed", "Os", "Favor small code", "Size", 0 },
-  { "FavorSizeOrSpeed", "Ot", "Favor fast code", "Speed", 0 },
-  { "FavorSizeOrSpeed", "", "Neither", "Neither", 0 },
-
-  { "ExceptionHandling", "EHa", "Yes with SEH Exceptions", "Async", 0 },
-  { "ExceptionHandling", "EHsc", "Yes", "Sync", 0 },
-  { "ExceptionHandling", "EHs", "Yes with Extern C functions", "SyncCThrow",
-    0 },
-  { "ExceptionHandling", "", "No", "false", 0 },
-
-  { "BasicRuntimeChecks", "RTCs", "Stack Frames", "StackFrameRuntimeCheck",
-    0 },
-  { "BasicRuntimeChecks", "RTCu", "Uninitialized variables",
-    "UninitializedLocalUsageCheck", 0 },
-  { "BasicRuntimeChecks", "RTC1", "Both (/RTC1, equiv. to /RTCsu)",
-    "EnableFastChecks", 0 },
-  { "BasicRuntimeChecks", "", "Default", "Default", 0 },
-
-  { "RuntimeLibrary", "MT", "Multi-threaded", "MultiThreaded", 0 },
-  { "RuntimeLibrary", "MTd", "Multi-threaded Debug", "MultiThreadedDebug", 0 },
-  { "RuntimeLibrary", "MD", "Multi-threaded DLL", "MultiThreadedDLL", 0 },
-  { "RuntimeLibrary", "MDd", "Multi-threaded Debug DLL",
-    "MultiThreadedDebugDLL", 0 },
-
-  { "StructMemberAlignment", "Zp1", "1 Byte", "1Byte", 0 },
-  { "StructMemberAlignment", "Zp2", "2 Bytes", "2Bytes", 0 },
-  { "StructMemberAlignment", "Zp4", "4 Byte", "4Bytes", 0 },
-  { "StructMemberAlignment", "Zp8", "8 Bytes", "8Bytes", 0 },
-  { "StructMemberAlignment", "Zp16", "16 Bytes", "16Bytes", 0 },
-  { "StructMemberAlignment", "", "Default", "Default", 0 },
-
-  { "BufferSecurityCheck", "GS-", "Disable Security Check", "false", 0 },
-  { "BufferSecurityCheck", "GS", "Enable Security Check", "true", 0 },
-
-  { "ControlFlowGuard", "guard:cf", "Yes", "Guard", 0 },
-  { "ControlFlowGuard", "", "No", "false", 0 },
-
-  { "EnableEnhancedInstructionSet", "arch:SSE", "Streaming SIMD Extensions",
-    "StreamingSIMDExtensions", 0 },
-  { "EnableEnhancedInstructionSet", "arch:SSE2", "Streaming SIMD Extensions 2",
-    "StreamingSIMDExtensions2", 0 },
-  { "EnableEnhancedInstructionSet", "arch:AVX", "Advanced Vector Extensions",
-    "AdvancedVectorExtensions", 0 },
-  { "EnableEnhancedInstructionSet", "arch:AVX2",
-    "Advanced Vector Extensions 2", "AdvancedVectorExtensions2", 0 },
-  { "EnableEnhancedInstructionSet", "arch:IA32", "No Enhanced Instructions",
-    "NoExtensions", 0 },
-  { "EnableEnhancedInstructionSet", "", "Not Set", "NotSet", 0 },
-
-  { "FloatingPointModel", "fp:precise", "Precise", "Precise", 0 },
-  { "FloatingPointModel", "fp:strict", "Strict", "Strict", 0 },
-  { "FloatingPointModel", "fp:fast", "Fast", "Fast", 0 },
-
-  { "SpectreMitigation", "Qspectre", "Spectre mitigations", "Spectre", 0 },
-
-  { "LanguageStandard", "std:c++17", "ISO C++17 Standard", "stdcpp17", 0 },
-  { "LanguageStandard", "std:c++14", "ISO C++14 Standard", "stdcpp14", 0 },
-  { "LanguageStandard", "std:c++latest", "ISO C++ Latest Draft Standard",
-    "stdcpplatest", 0 },
-
-  { "PrecompiledHeader", "Yc", "Create", "Create",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "PrecompiledHeader", "Yu", "Use", "Use",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "PrecompiledHeader", "Y-", "Not Using Precompiled Headers", "NotUsing",
-    0 },
-
-  { "AssemblerOutput", "", "No Listing", "NoListing", 0 },
-  { "AssemblerOutput", "FA", "Assembly-Only Listing", "AssemblyCode", 0 },
-  { "AssemblerOutput", "FAc", "Assembly With Machine Code",
-    "AssemblyAndMachineCode", 0 },
-  { "AssemblerOutput", "FAs", "Assembly With Source Code",
-    "AssemblyAndSourceCode", 0 },
-  { "AssemblerOutput", "FAcs", "Assembly, Machine Code and Source", "All", 0 },
-
-  { "CallingConvention", "Gd", "__cdecl", "Cdecl", 0 },
-  { "CallingConvention", "Gr", "__fastcall", "FastCall", 0 },
-  { "CallingConvention", "Gz", "__stdcall", "StdCall", 0 },
-  { "CallingConvention", "Gv", "__vectorcall", "VectorCall", 0 },
-
-  { "CompileAs", "", "Default", "Default", 0 },
-  { "CompileAs", "TC", "Compile as C Code", "CompileAsC", 0 },
-  { "CompileAs", "TP", "Compile as C++ Code", "CompileAsCpp", 0 },
-
-  { "ErrorReporting", "errorReport:none", "Do Not Send Report", "None", 0 },
-  { "ErrorReporting", "errorReport:prompt", "Prompt Immediately", "Prompt",
-    0 },
-  { "ErrorReporting", "errorReport:queue", "Queue For Next Login", "Queue",
-    0 },
-  { "ErrorReporting", "errorReport:send", "Send Automatically", "Send", 0 },
-
-  { "CompileAsManaged", "", "No Common Language RunTime Support", "false", 0 },
-  { "CompileAsManaged", "clr", "Common Language RunTime Support", "true", 0 },
-  { "CompileAsManaged", "clr:pure",
-    "Pure MSIL Common Language RunTime Support", "Pure", 0 },
-  { "CompileAsManaged", "clr:safe",
-    "Safe MSIL Common Language RunTime Support", "Safe", 0 },
-  { "CompileAsManaged", "clr:oldSyntax",
-    "Common Language RunTime Support, Old Syntax", "OldSyntax", 0 },
-
-  { "CppLanguageStandard", "", "Default", "Default", 0 },
-  { "CppLanguageStandard", "std=c++98", "C++03", "c++98", 0 },
-  { "CppLanguageStandard", "std=c++11", "C++11", "c++11", 0 },
-  { "CppLanguageStandard", "std=c++1y", "C++14", "c++1y", 0 },
-  { "CppLanguageStandard", "std=c++14", "C++14", "c++1y", 0 },
-  { "CppLanguageStandard", "std=gnu++98", "C++03 (GNU Dialect)", "gnu++98",
-    0 },
-  { "CppLanguageStandard", "std=gnu++11", "C++11 (GNU Dialect)", "gnu++11",
-    0 },
-  { "CppLanguageStandard", "std=gnu++1y", "C++14 (GNU Dialect)", "gnu++1y",
-    0 },
-  { "CppLanguageStandard", "std=gnu++14", "C++14 (GNU Dialect)", "gnu++1y",
-    0 },
-
-  // Bool Properties
-  { "CompileAsWinRT", "ZW", "", "true", 0 },
-  { "WinRTNoStdLib", "ZW:nostdlib", "", "true", 0 },
-  { "SuppressStartupBanner", "nologo", "", "true", 0 },
-  { "TreatWarningAsError", "WX-", "", "false", 0 },
-  { "TreatWarningAsError", "WX", "", "true", 0 },
-  { "SDLCheck", "sdl-", "", "false", 0 },
-  { "SDLCheck", "sdl", "", "true", 0 },
-  { "IntrinsicFunctions", "Oi", "", "true", 0 },
-  { "OmitFramePointers", "Oy-", "", "false", 0 },
-  { "OmitFramePointers", "Oy", "", "true", 0 },
-  { "EnableFiberSafeOptimizations", "GT", "", "true", 0 },
-  { "WholeProgramOptimization", "GL", "", "true", 0 },
-  { "UndefineAllPreprocessorDefinitions", "u", "", "true", 0 },
-  { "IgnoreStandardIncludePath", "X", "", "true", 0 },
-  { "PreprocessToFile", "P", "", "true", 0 },
-  { "PreprocessSuppressLineNumbers", "EP", "", "true", 0 },
-  { "PreprocessKeepComments", "C", "", "true", 0 },
-  { "StringPooling", "GF-", "", "false", 0 },
-  { "StringPooling", "GF", "", "true", 0 },
-  { "MinimalRebuild", "Gm-", "", "false", 0 },
-  { "MinimalRebuild", "Gm", "", "true", 0 },
-  { "SmallerTypeCheck", "RTCc", "", "true", 0 },
-  { "FunctionLevelLinking", "Gy-", "", "false", 0 },
-  { "FunctionLevelLinking", "Gy", "", "true", 0 },
-  { "EnableParallelCodeGeneration", "Qpar-", "", "false", 0 },
-  { "EnableParallelCodeGeneration", "Qpar", "", "true", 0 },
-  { "FloatingPointExceptions", "fp:except-", "", "false", 0 },
-  { "FloatingPointExceptions", "fp:except", "", "true", 0 },
-  { "CreateHotpatchableImage", "hotpatch", "", "true", 0 },
-  { "DisableLanguageExtensions", "Za", "", "true", 0 },
-  { "TreatWChar_tAsBuiltInType", "Zc:wchar_t-", "", "false", 0 },
-  { "TreatWChar_tAsBuiltInType", "Zc:wchar_t", "", "true", 0 },
-  { "ForceConformanceInForLoopScope", "Zc:forScope-", "", "false", 0 },
-  { "ForceConformanceInForLoopScope", "Zc:forScope", "", "true", 0 },
-  { "RemoveUnreferencedCodeData", "Zc:inline-", "", "false", 0 },
-  { "RemoveUnreferencedCodeData", "Zc:inline", "", "true", 0 },
-  { "EnforceTypeConversionRules", "Zc:rvalueCast-", "", "false", 0 },
-  { "EnforceTypeConversionRules", "Zc:rvalueCast", "", "true", 0 },
-  { "RuntimeTypeInfo", "GR-", "", "false", 0 },
-  { "RuntimeTypeInfo", "GR", "", "true", 0 },
-  { "OpenMPSupport", "openmp-", "", "false", 0 },
-  { "OpenMPSupport", "openmp", "", "true", 0 },
-  { "ExpandAttributedSource", "Fx", "", "true", 0 },
-  { "UseUnicodeForAssemblerListing", "FAu", "", "true", 0 },
-  { "ShowIncludes", "showIncludes", "", "true", 0 },
-  { "EnablePREfast", "analyze-", "", "false", 0 },
-  { "EnablePREfast", "analyze", "", "true", 0 },
-  { "UseFullPaths", "FC", "", "true", 0 },
-  { "OmitDefaultLibName", "Zl", "", "true", 0 },
-  { "SupportJustMyCode", "JMC-", "", "false", 0 },
-  { "SupportJustMyCode", "JMC", "", "true", 0 },
-
-  // Bool Properties With Argument
-  { "MultiProcessorCompilation", "MP", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "ProcessorNumber", "MP", "Multi-processor Compilation", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "GenerateXMLDocumentationFiles", "doc", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "XMLDocumentationFileName", "doc", "Generate XML Documentation Files", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "BrowseInformation", "FR", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "BrowseInformationFile", "FR", "Enable Browse Information", "",
-    cmVS7FlagTable::UserValueRequired },
-
-  // String List Properties
-  { "AdditionalIncludeDirectories", "I", "Additional Include Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AdditionalUsingDirectories", "AI", "Additional #using Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "PreprocessorDefinitions", "D ", "Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "UndefinePreprocessorDefinitions", "U",
-    "Undefine Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "DisableSpecificWarnings", "wd", "Disable Specific Warnings", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ForcedIncludeFiles", "FI", "Forced Include File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ForcedUsingFiles", "FU", "Forced #using File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "PREfastLog", "analyze:log", "Code Analysis Log", "",
-    cmVS7FlagTable::UserFollowing },
-  { "PREfastAdditionalPlugins", "analyze:plugin",
-    "Additional Code Analysis Native plugins", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "TreatSpecificWarningsAsErrors", "we", "Treat Specific Warnings As Errors",
-    "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-
-  // String Properties
-  { "WarningVersion", "Wv:", "Warning Version", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [TrackerLogDirectory] - no command line Switch.
-  { "PreprocessOutputPath", "Fi", "Preprocess Output Path", "",
-    cmVS7FlagTable::UserValue },
-  { "PrecompiledHeaderFile", "Yc", "Precompiled Header Name", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "PrecompiledHeaderFile", "Yu", "Precompiled Header Name", "",
-    cmVS7FlagTable::UserValueRequired },
-  { "PrecompiledHeaderOutputFile", "Fp", "Precompiled Header Output File", "",
-    cmVS7FlagTable::UserValue },
-  { "AssemblerListingLocation", "Fa", "ASM List Location", "",
-    cmVS7FlagTable::UserValue },
-  { "ObjectFileName", "Fo", "Object File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "ProgramDataBaseFileName", "Fd", "Program Database File Name", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [XMLDocumentationFileName] - no command line Switch.
-  // Skip [BrowseInformationFile] - no command line Switch.
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS141CSharpFlagTable.h b/Source/cmVS141CSharpFlagTable.h
deleted file mode 100644
index 1f84097..0000000
--- a/Source/cmVS141CSharpFlagTable.h
+++ /dev/null
@@ -1,126 +0,0 @@
-static cmVS7FlagTable cmVS141CSharpFlagTable[] = {
-  { "ProjectName", "out:", "", "", cmIDEFlagTable::UserValueRequired },
-
-  { "OutputType", "target:exe", "", "Exe", 0 },
-  { "OutputType", "target:winexe", "", "Winexe", 0 },
-  { "OutputType", "target:library", "", "Library", 0 },
-  { "OutputType", "target:module", "", "Module", 0 },
-
-  { "DocumentationFile", "doc", "", "", cmIDEFlagTable::UserValueRequired },
-
-  { "Platform", "platform:x86", "", "x86", 0 },
-  { "Platform", "platform:Itanium", "", "Itanium", 0 },
-  { "Platform", "platform:x64", "", "x64", 0 },
-  { "Platform", "platform:arm", "", "arm", 0 },
-  { "Platform", "platform:anycpu32bitpreferred", "", "anycpu32bitpreferred",
-    0 },
-  { "Platform", "platform:anycpu", "", "anycpu", 0 },
-
-  { "References", "reference:", "mit alias", "", 0 },
-  { "References", "reference:", "dateiliste", "", 0 },
-  { "AddModules", "addmodule:", "", "", cmIDEFlagTable::SemicolonAppendable },
-  { "", "link", "", "", 0 },
-
-  { "Win32Resource", "win32res:", "", "", cmIDEFlagTable::UserValueRequired },
-  { "ApplicationIcon", "win32icon:", "", "",
-    cmIDEFlagTable::UserValueRequired },
-
-  { "ApplicationManifest", "win32manifest:", "", "",
-    cmIDEFlagTable::UserValueRequired },
-
-  { "NoWin32Manifest", "nowin32manifest", "", "true", 0 },
-
-  { "DefineDebug", "debug", "", "true", cmIDEFlagTable::Continue },
-
-  { "DebugSymbols", "debug", "", "true", 0 },
-  { "DebugSymbols", "debug-", "", "false", 0 },
-  { "DebugSymbols", "debug+", "", "true", 0 },
-
-  { "DebugType", "debug:none", "", "none", 0 },
-  { "DebugType", "debug:full", "", "full", 0 },
-  { "DebugType", "debug:pdbonly", "", "pdbonly", 0 },
-
-  { "Optimize", "optimize", "", "true", 0 },
-  { "Optimize", "optimize-", "", "false", 0 },
-  { "Optimize", "optimize+", "", "true", 0 },
-
-  { "TreatWarningsAsErrors", "warnaserror", "", "true", 0 },
-  { "TreatWarningsAsErrors", "warnaserror-", "", "false", 0 },
-  { "TreatWarningsAsErrors", "warnaserror+", "", "true", 0 },
-
-  { "WarningsAsErrors", "warnaserror", "", "", 0 },
-  { "WarningsAsErrors", "warnaserror-", "", "", 0 },
-  { "WarningsAsErrors", "warnaserror+", "", "", 0 },
-
-  { "WarningLevel", "warn:0", "", "0", 0 },
-  { "WarningLevel", "warn:1", "", "1", 0 },
-  { "WarningLevel", "warn:2", "", "2", 0 },
-  { "WarningLevel", "warn:3", "", "3", 0 },
-  { "WarningLevel", "warn:4", "", "4", 0 },
-  { "DisabledWarnings", "nowarn", "", "", 0 },
-
-  { "CheckForOverflowUnderflow", "checked", "", "true", 0 },
-  { "CheckForOverflowUnderflow", "checked-", "", "false", 0 },
-  { "CheckForOverflowUnderflow", "checked+", "", "true", 0 },
-
-  { "AllowUnsafeBlocks", "unsafe", "", "true", 0 },
-  { "AllowUnsafeBlocks", "unsafe-", "", "false", 0 },
-  { "AllowUnsafeBlocks", "unsafe+", "", "true", 0 },
-
-  { "DefineConstants", "define:", "", "",
-    cmIDEFlagTable::SemicolonAppendable | cmIDEFlagTable::UserValue },
-
-  { "LangVersion", "langversion:ISO-1", "", "ISO-1", 0 },
-  { "LangVersion", "langversion:ISO-2", "", "ISO-2", 0 },
-  { "LangVersion", "langversion:3", "", "3", 0 },
-  { "LangVersion", "langversion:4", "", "4", 0 },
-  { "LangVersion", "langversion:5", "", "5", 0 },
-  { "LangVersion", "langversion:6", "", "6", 0 },
-  { "LangVersion", "langversion:7.0", "", "7.0", 0 },
-  { "LangVersion", "langversion:7.1", "", "7.1", 0 },
-  { "LangVersion", "langversion:7.2", "", "7.2", 0 },
-  { "LangVersion", "langversion:7.3", "", "7.3", 0 },
-  { "LangVersion", "langversion:default", "", "default", 0 },
-  { "LangVersion", "langversion:latest", "", "latest", 0 },
-
-  { "DelaySign", "delaysign", "", "true", 0 },
-  { "DelaySign", "delaysign-", "", "false", 0 },
-  { "DelaySign", "delaysign+", "", "true", 0 },
-
-  { "AssemblyOriginatorKeyFile", "keyfile", "", "", 0 },
-
-  { "KeyContainerName", "keycontainer", "", "", 0 },
-
-  { "NoLogo", "nologo", "", "", 0 },
-
-  { "NoConfig", "noconfig", "", "true", 0 },
-
-  { "BaseAddress", "baseaddress:", "", "", 0 },
-
-  { "CodePage", "codepage", "", "", 0 },
-
-  { "Utf8Output", "utf8output", "", "", 0 },
-
-  { "MainEntryPoint", "main:", "", "", 0 },
-
-  { "GenerateFullPaths", "fullpaths", "", "true", 0 },
-
-  { "FileAlignment", "filealign", "", "", 0 },
-
-  { "PdbFile", "pdb:", "", "", 0 },
-
-  { "NoStandardLib", "nostdlib", "", "true", 0 },
-  { "NoStandardLib", "nostdlib-", "", "false", 0 },
-  { "NoStandardLib", "nostdlib+", "", "true", 0 },
-
-  { "SubsystemVersion", "subsystemversion", "", "", 0 },
-
-  { "AdditionalLibPaths", "lib:", "", "", 0 },
-
-  { "ErrorReport", "errorreport:none", "Do Not Send Report", "none", 0 },
-  { "ErrorReport", "errorreport:prompt", "Prompt Immediately", "prompt", 0 },
-  { "ErrorReport", "errorreport:queue", "Queue For Next Login", "queue", 0 },
-  { "ErrorReport", "errorreport:send", "Send Automatically", "send", 0 },
-
-  { 0, 0, 0, 0, 0 },
-};
diff --git a/Source/cmVS141LinkFlagTable.h b/Source/cmVS141LinkFlagTable.h
deleted file mode 100644
index 7e56c8e..0000000
--- a/Source/cmVS141LinkFlagTable.h
+++ /dev/null
@@ -1,287 +0,0 @@
-static cmVS7FlagTable cmVS141LinkFlagTable[] = {
-
-  // Enum Properties
-  { "ShowProgress", "", "Not Set", "NotSet", 0 },
-  { "ShowProgress", "VERBOSE", "Display all progress messages", "LinkVerbose",
-    0 },
-  { "ShowProgress", "VERBOSE:Lib", "For Libraries Searched", "LinkVerboseLib",
-    0 },
-  { "ShowProgress", "VERBOSE:ICF",
-    "About COMDAT folding during optimized linking", "LinkVerboseICF", 0 },
-  { "ShowProgress", "VERBOSE:REF",
-    "About data removed during optimized linking", "LinkVerboseREF", 0 },
-  { "ShowProgress", "VERBOSE:SAFESEH", "About Modules incompatible with SEH",
-    "LinkVerboseSAFESEH", 0 },
-  { "ShowProgress", "VERBOSE:CLR",
-    "About linker activity related to managed code", "LinkVerboseCLR", 0 },
-
-  { "ForceFileOutput", "FORCE", "Enabled", "Enabled", 0 },
-  { "ForceFileOutput", "FORCE:MULTIPLE", "Multiply Defined Symbol Only",
-    "MultiplyDefinedSymbolOnly", 0 },
-  { "ForceFileOutput", "FORCE:UNRESOLVED", "Undefined Symbol Only",
-    "UndefinedSymbolOnly", 0 },
-
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN", "Enabled", "Enabled", 0 },
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN:5", "X86 Image Only",
-    "X86Image", 0 },
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN:6", "X64 Image Only",
-    "X64Image", 0 },
-  { "CreateHotPatchableImage", "FUNCTIONPADMIN:16", "Itanium Image Only",
-    "ItaniumImage", 0 },
-
-  // correct flags for uac should be /MANIFESTUAC, but some projects already
-  // use this bug to access uac field, so keep these for compatibility
-  { "UACExecutionLevel", "level='asInvoker'", "asInvoker", "AsInvoker", 0 },
-  { "UACExecutionLevel", "level='highestAvailable'", "highestAvailable",
-    "HighestAvailable", 0 },
-  { "UACExecutionLevel", "level='requireAdministrator'",
-    "requireAdministrator", "RequireAdministrator", 0 },
-
-  { "GenerateDebugInformation", "DEBUG:FASTLINK",
-    "Generate Debug Information optimized for faster links", "DebugFastLink",
-    cmVS7FlagTable::CaseInsensitive },
-  { "GenerateDebugInformation", "DEBUG:FULL",
-    "Generate Debug Information optimized for sharing and publishing",
-    "DebugFull", cmVS7FlagTable::CaseInsensitive },
-  { "GenerateDebugInformation", "DEBUG:NONE",
-    "Produces no debugging information", "false",
-    cmVS7FlagTable::CaseInsensitive },
-  { "GenerateDebugInformation", "DEBUG", "Generate Debug Information", "true",
-    cmVS7FlagTable::CaseInsensitive },
-
-  { "SubSystem", "", "Not Set", "NotSet", 0 },
-  { "SubSystem", "SUBSYSTEM:CONSOLE", "Console", "Console", 0 },
-  { "SubSystem", "SUBSYSTEM:WINDOWS", "Windows", "Windows", 0 },
-  { "SubSystem", "SUBSYSTEM:NATIVE", "Native", "Native", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_APPLICATION", "EFI Application",
-    "EFI Application", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "EFI Boot Service Driver", "EFI Boot Service Driver", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_ROM", "EFI ROM", "EFI ROM", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_RUNTIME_DRIVER", "EFI Runtime", "EFI Runtime",
-    0 },
-  { "SubSystem", "SUBSYSTEM:POSIX", "POSIX", "POSIX", 0 },
-
-  { "Driver", "", "Not Set", "NotSet", 0 },
-  { "Driver", "Driver", "Driver", "Driver", 0 },
-  { "Driver", "DRIVER:UPONLY", "UP Only", "UpOnly", 0 },
-  { "Driver", "DRIVER:WDM", "WDM", "WDM", 0 },
-
-  { "LinkTimeCodeGeneration", "", "Default", "Default", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:incremental",
-    "Use Fast Link Time Code Generation", "UseFastLinkTimeCodeGeneration", 0 },
-  { "LinkTimeCodeGeneration", "LTCG", "Use Link Time Code Generation",
-    "UseLinkTimeCodeGeneration", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:PGInstrument",
-    "Profile Guided Optimization - Instrument", "PGInstrument", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:PGOptimize",
-    "Profile Guided Optimization - Optimization", "PGOptimization", 0 },
-  { "LinkTimeCodeGeneration", "LTCG:PGUpdate",
-    "Profile Guided Optimization - Update", "PGUpdate", 0 },
-
-  { "GenerateWindowsMetadata", "WINMD", "Yes", "true", 0 },
-  { "GenerateWindowsMetadata", "WINMD:NO", "No", "false", 0 },
-
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA1", "SHA1", "SHA1", 0 },
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA256", "SHA256", "SHA256", 0 },
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA384", "SHA384", "SHA384", 0 },
-  { "WindowsMetadataSignHash", "WINMDSIGNHASH:SHA512", "SHA512", "SHA512", 0 },
-
-  { "TargetMachine", "", "Not Set", "NotSet", 0 },
-  { "TargetMachine", "MACHINE:ARM", "MachineARM", "MachineARM", 0 },
-  { "TargetMachine", "MACHINE:ARM64", "MachineARM64", "MachineARM64", 0 },
-  { "TargetMachine", "MACHINE:EBC", "MachineEBC", "MachineEBC", 0 },
-  { "TargetMachine", "MACHINE:IA64", "MachineIA64", "MachineIA64", 0 },
-  { "TargetMachine", "MACHINE:MIPS", "MachineMIPS", "MachineMIPS", 0 },
-  { "TargetMachine", "MACHINE:MIPS16", "MachineMIPS16", "MachineMIPS16", 0 },
-  { "TargetMachine", "MACHINE:MIPSFPU", "MachineMIPSFPU", "MachineMIPSFPU",
-    0 },
-  { "TargetMachine", "MACHINE:MIPSFPU16", "MachineMIPSFPU16",
-    "MachineMIPSFPU16", 0 },
-  { "TargetMachine", "MACHINE:SH4", "MachineSH4", "MachineSH4", 0 },
-  { "TargetMachine", "MACHINE:THUMB", "MachineTHUMB", "MachineTHUMB", 0 },
-  { "TargetMachine", "MACHINE:X64", "MachineX64", "MachineX64", 0 },
-  { "TargetMachine", "MACHINE:X86", "MachineX86", "MachineX86", 0 },
-
-  { "CLRThreadAttribute", "CLRTHREADATTRIBUTE:MTA", "MTA threading attribute",
-    "MTAThreadingAttribute", 0 },
-  { "CLRThreadAttribute", "CLRTHREADATTRIBUTE:STA", "STA threading attribute",
-    "STAThreadingAttribute", 0 },
-  { "CLRThreadAttribute", "CLRTHREADATTRIBUTE:NONE",
-    "Default threading attribute", "DefaultThreadingAttribute", 0 },
-
-  { "CLRImageType", "CLRIMAGETYPE:IJW", "Force IJW image", "ForceIJWImage",
-    0 },
-  { "CLRImageType", "CLRIMAGETYPE:PURE", "Force Pure IL Image",
-    "ForcePureILImage", 0 },
-  { "CLRImageType", "CLRIMAGETYPE:SAFE", "Force Safe IL Image",
-    "ForceSafeILImage", 0 },
-  { "CLRImageType", "", "Default image type", "Default", 0 },
-
-  { "SignHash", "CLRSIGNHASH:SHA1", "SHA1", "SHA1", 0 },
-  { "SignHash", "CLRSIGNHASH:SHA256", "SHA256", "SHA256", 0 },
-  { "SignHash", "CLRSIGNHASH:SHA384", "SHA384", "SHA384", 0 },
-  { "SignHash", "CLRSIGNHASH:SHA512", "SHA512", "SHA512", 0 },
-
-  { "LinkErrorReporting", "ERRORREPORT:PROMPT", "PromptImmediately",
-    "PromptImmediately", 0 },
-  { "LinkErrorReporting", "ERRORREPORT:QUEUE", "Queue For Next Login",
-    "QueueForNextLogin", 0 },
-  { "LinkErrorReporting", "ERRORREPORT:SEND", "Send Error Report",
-    "SendErrorReport", 0 },
-  { "LinkErrorReporting", "ERRORREPORT:NONE", "No Error Report",
-    "NoErrorReport", 0 },
-
-  { "CLRSupportLastError", "CLRSupportLastError", "Enabled", "Enabled", 0 },
-  { "CLRSupportLastError", "CLRSupportLastError:NO", "Disabled", "Disabled",
-    0 },
-  { "CLRSupportLastError", "CLRSupportLastError:SYSTEMDLL", "System Dlls Only",
-    "SystemDlls", 0 },
-
-  // Bool Properties
-  { "LinkIncremental", "INCREMENTAL:NO", "", "false", 0 },
-  { "LinkIncremental", "INCREMENTAL", "", "true", 0 },
-  { "SuppressStartupBanner", "NOLOGO", "", "true", 0 },
-  { "LinkStatus", "LTCG:NOSTATUS", "", "false", 0 },
-  { "LinkStatus", "LTCG:STATUS", "", "true", 0 },
-  { "PreventDllBinding", "ALLOWBIND:NO", "", "false", 0 },
-  { "PreventDllBinding", "ALLOWBIND", "", "true", 0 },
-  { "TreatLinkerWarningAsErrors", "WX:NO", "", "false", 0 },
-  { "TreatLinkerWarningAsErrors", "WX", "", "true", 0 },
-  { "IgnoreAllDefaultLibraries", "NODEFAULTLIB", "", "true", 0 },
-  { "GenerateManifest", "MANIFEST:NO", "", "false", 0 },
-  { "GenerateManifest", "MANIFEST", "", "true", 0 },
-  { "AllowIsolation", "ALLOWISOLATION:NO", "", "false", 0 },
-
-  // correct flags for uac should be /MANIFESTUAC, but some projects already
-  // use this bug to access uac field, so keep these for compatibility
-  { "UACUIAccess", "uiAccess='false'", "", "false", 0 },
-  { "UACUIAccess", "uiAccess='true'", "", "true", 0 },
-
-  { "ManifestEmbed", "manifest:embed", "", "true", 0 },
-  { "MapExports", "MAPINFO:EXPORTS", "", "true", 0 },
-  { "AssemblyDebug", "ASSEMBLYDEBUG:DISABLE", "", "false", 0 },
-  { "AssemblyDebug", "ASSEMBLYDEBUG", "", "true", 0 },
-  { "LargeAddressAware", "LARGEADDRESSAWARE:NO", "", "false", 0 },
-  { "LargeAddressAware", "LARGEADDRESSAWARE", "", "true", 0 },
-  { "TerminalServerAware", "TSAWARE:NO", "", "false", 0 },
-  { "TerminalServerAware", "TSAWARE", "", "true", 0 },
-  { "SwapRunFromCD", "SWAPRUN:CD", "", "true", 0 },
-  { "SwapRunFromNET", "SWAPRUN:NET", "", "true", 0 },
-  { "OptimizeReferences", "OPT:NOREF", "", "false", 0 },
-  { "OptimizeReferences", "OPT:REF", "", "true", 0 },
-  { "EnableCOMDATFolding", "OPT:NOICF", "", "false", 0 },
-  { "EnableCOMDATFolding", "OPT:ICF", "", "true", 0 },
-  { "IgnoreEmbeddedIDL", "IGNOREIDL", "", "true", 0 },
-  { "AppContainer", "APPCONTAINER", "", "true", 0 },
-  { "WindowsMetadataLinkDelaySign", "WINMDDELAYSIGN:NO", "", "false", 0 },
-  { "WindowsMetadataLinkDelaySign", "WINMDDELAYSIGN", "", "true", 0 },
-  { "NoEntryPoint", "NOENTRY", "", "true", 0 },
-  { "SetChecksum", "RELEASE", "", "true", 0 },
-  { "RandomizedBaseAddress", "DYNAMICBASE:NO", "", "false", 0 },
-  { "RandomizedBaseAddress", "DYNAMICBASE", "", "true", 0 },
-  { "FixedBaseAddress", "FIXED:NO", "", "false", 0 },
-  { "FixedBaseAddress", "FIXED", "", "true", 0 },
-  { "DataExecutionPrevention", "NXCOMPAT:NO", "", "false", 0 },
-  { "DataExecutionPrevention", "NXCOMPAT", "", "true", 0 },
-  { "TurnOffAssemblyGeneration", "NOASSEMBLY", "", "true", 0 },
-  { "SupportUnloadOfDelayLoadedDLL", "DELAY:UNLOAD", "", "true", 0 },
-  { "SupportNobindOfDelayLoadedDLL", "DELAY:NOBIND", "", "true", 0 },
-  { "Profile", "PROFILE", "", "true", 0 },
-  { "LinkDelaySign", "DELAYSIGN:NO", "", "false", 0 },
-  { "LinkDelaySign", "DELAYSIGN", "", "true", 0 },
-  { "CLRUnmanagedCodeCheck", "CLRUNMANAGEDCODECHECK:NO", "", "false", 0 },
-  { "CLRUnmanagedCodeCheck", "CLRUNMANAGEDCODECHECK", "", "true", 0 },
-  { "DetectOneDefinitionRule", "ODR", "", "true", 0 },
-  { "ImageHasSafeExceptionHandlers", "SAFESEH:NO", "", "false", 0 },
-  { "ImageHasSafeExceptionHandlers", "SAFESEH", "", "true", 0 },
-  { "LinkDLL", "DLL", "", "true", 0 },
-
-  // Bool Properties With Argument
-  { "EnableUAC", "MANIFESTUAC:", "", "",
-    cmVS7FlagTable::UserValueRequired | cmVS7FlagTable::SpaceAppendable },
-  { "GenerateMapFile", "MAP", "", "true",
-    cmVS7FlagTable::UserValueIgnored | cmVS7FlagTable::Continue },
-  { "MapFileName", "MAP:", "Generate Map File", "",
-    cmVS7FlagTable::UserValueRequired },
-
-  // String List Properties
-  { "AdditionalLibraryDirectories",
-    "LIBPATH:", "Additional Library Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "Natvis", "NATVIS:", "Natvis files", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  // Skip [AdditionalDependencies] - no command line Switch.
-  { "IgnoreSpecificDefaultLibraries",
-    "NODEFAULTLIB:", "Ignore Specific Default Libraries", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AddModuleNamesToAssembly", "ASSEMBLYMODULE:", "Add Module to Assembly",
-    "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "EmbedManagedResourceFile",
-    "ASSEMBLYRESOURCE:", "Embed Managed Resource File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ForceSymbolReferences", "INCLUDE:", "Force Symbol References", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "DelayLoadDLLs", "DELAYLOAD:", "Delay Loaded Dlls", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AssemblyLinkResource", "ASSEMBLYLINKRESOURCE:", "Assembly Link Resource",
-    "", cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "AdditionalManifestDependencies",
-    "MANIFESTDEPENDENCY:", "Additional Manifest Dependencies", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ManifestInput", "manifestinput:", "Manifest Input", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-
-  // String Properties
-  { "OutputFile", "OUT:", "Output File", "", cmVS7FlagTable::UserValue },
-  { "Version", "VERSION:", "Version", "", cmVS7FlagTable::UserValue },
-  { "SpecifySectionAttributes", "SECTION:", "Specify Section Attributes", "",
-    cmVS7FlagTable::UserValue },
-  { "MSDOSStubFileName", "STUB:", "MS-DOS Stub File Name", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [TrackerLogDirectory] - no command line Switch.
-  { "ModuleDefinitionFile", "DEF:", "Module Definition File", "",
-    cmVS7FlagTable::UserValue },
-  { "ManifestFile", "ManifestFile:", "Manifest File", "",
-    cmVS7FlagTable::UserValue },
-  { "ProgramDatabaseFile", "PDB:", "Generate Program Database File", "",
-    cmVS7FlagTable::UserValue },
-  { "StripPrivateSymbols", "PDBSTRIPPED:", "Strip Private Symbols", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [MapFileName] - no command line Switch.
-  // Skip [MinimumRequiredVersion] - no command line Switch.
-  { "HeapReserveSize", "HEAP:", "Heap Reserve Size", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [HeapCommitSize] - no command line Switch.
-  { "StackReserveSize", "STACK:", "Stack Reserve Size", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [StackCommitSize] - no command line Switch.
-  { "FunctionOrder", "ORDER:@", "Function Order", "",
-    cmVS7FlagTable::UserValue },
-  { "ProfileGuidedDatabase", "PGD:", "Profile Guided Database", "",
-    cmVS7FlagTable::UserValue },
-  { "MidlCommandFile", "MIDL:@", "MIDL Commands", "",
-    cmVS7FlagTable::UserValue },
-  { "MergedIDLBaseFileName", "IDLOUT:", "Merged IDL Base File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "TypeLibraryFile", "TLBOUT:", "Type Library", "",
-    cmVS7FlagTable::UserValue },
-  { "WindowsMetadataFile", "WINMDFILE:", "Windows Metadata File", "",
-    cmVS7FlagTable::UserValue },
-  { "WindowsMetadataLinkKeyFile", "WINMDKEYFILE:", "Windows Metadata Key File",
-    "", cmVS7FlagTable::UserValue },
-  { "WindowsMetadataKeyContainer", "WINMDKEYCONTAINER:",
-    "Windows Metadata Key Container", "", cmVS7FlagTable::UserValue },
-  { "EntryPointSymbol", "ENTRY:", "Entry Point", "",
-    cmVS7FlagTable::UserValue },
-  { "BaseAddress", "BASE:", "Base Address", "", cmVS7FlagTable::UserValue },
-  { "ImportLibrary", "IMPLIB:", "Import Library", "",
-    cmVS7FlagTable::UserValue },
-  { "MergeSections", "MERGE:", "Merge Sections", "",
-    cmVS7FlagTable::UserValue },
-  { "LinkKeyFile", "KEYFILE:", "Key File", "", cmVS7FlagTable::UserValue },
-  { "KeyContainer", "KEYCONTAINER:", "Key Container", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS14LibFlagTable.h b/Source/cmVS14LibFlagTable.h
deleted file mode 100644
index adce075..0000000
--- a/Source/cmVS14LibFlagTable.h
+++ /dev/null
@@ -1,77 +0,0 @@
-static cmVS7FlagTable cmVS14LibFlagTable[] = {
-
-  // Enum Properties
-  { "ErrorReporting", "ERRORREPORT:PROMPT", "PromptImmediately",
-    "PromptImmediately", 0 },
-  { "ErrorReporting", "ERRORREPORT:QUEUE", "Queue For Next Login",
-    "QueueForNextLogin", 0 },
-  { "ErrorReporting", "ERRORREPORT:SEND", "Send Error Report",
-    "SendErrorReport", 0 },
-  { "ErrorReporting", "ERRORREPORT:NONE", "No Error Report", "NoErrorReport",
-    0 },
-
-  { "TargetMachine", "MACHINE:ARM", "MachineARM", "MachineARM", 0 },
-  { "TargetMachine", "MACHINE:ARM64", "MachineARM64", "MachineARM64", 0 },
-  { "TargetMachine", "MACHINE:EBC", "MachineEBC", "MachineEBC", 0 },
-  { "TargetMachine", "MACHINE:IA64", "MachineIA64", "MachineIA64", 0 },
-  { "TargetMachine", "MACHINE:MIPS", "MachineMIPS", "MachineMIPS", 0 },
-  { "TargetMachine", "MACHINE:MIPS16", "MachineMIPS16", "MachineMIPS16", 0 },
-  { "TargetMachine", "MACHINE:MIPSFPU", "MachineMIPSFPU", "MachineMIPSFPU",
-    0 },
-  { "TargetMachine", "MACHINE:MIPSFPU16", "MachineMIPSFPU16",
-    "MachineMIPSFPU16", 0 },
-  { "TargetMachine", "MACHINE:SH4", "MachineSH4", "MachineSH4", 0 },
-  { "TargetMachine", "MACHINE:THUMB", "MachineTHUMB", "MachineTHUMB", 0 },
-  { "TargetMachine", "MACHINE:X64", "MachineX64", "MachineX64", 0 },
-  { "TargetMachine", "MACHINE:X86", "MachineX86", "MachineX86", 0 },
-
-  { "SubSystem", "SUBSYSTEM:CONSOLE", "Console", "Console", 0 },
-  { "SubSystem", "SUBSYSTEM:WINDOWS", "Windows", "Windows", 0 },
-  { "SubSystem", "SUBSYSTEM:NATIVE", "Native", "Native", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_APPLICATION", "EFI Application",
-    "EFI Application", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "EFI Boot Service Driver", "EFI Boot Service Driver", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_ROM", "EFI ROM", "EFI ROM", 0 },
-  { "SubSystem", "SUBSYSTEM:EFI_RUNTIME_DRIVER", "EFI Runtime", "EFI Runtime",
-    0 },
-  { "SubSystem", "SUBSYSTEM:WINDOWSCE", "WindowsCE", "WindowsCE", 0 },
-  { "SubSystem", "SUBSYSTEM:POSIX", "POSIX", "POSIX", 0 },
-
-  // Bool Properties
-  { "SuppressStartupBanner", "NOLOGO", "", "true", 0 },
-  { "IgnoreAllDefaultLibraries", "NODEFAULTLIB", "", "true", 0 },
-  { "TreatLibWarningAsErrors", "WX:NO", "", "false", 0 },
-  { "TreatLibWarningAsErrors", "WX", "", "true", 0 },
-  { "Verbose", "VERBOSE", "", "true", 0 },
-  { "LinkTimeCodeGeneration", "LTCG", "", "true", 0 },
-
-  // Bool Properties With Argument
-
-  // String List Properties
-  // Skip [AdditionalDependencies] - no command line Switch.
-  { "AdditionalLibraryDirectories",
-    "LIBPATH:", "Additional Library Directories", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "IgnoreSpecificDefaultLibraries",
-    "NODEFAULTLIB:", "Ignore Specific Default Libraries", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "ExportNamedFunctions", "EXPORT:", "Export Named Functions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "RemoveObjects", "REMOVE:", "Remove Objects", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-
-  // String Properties
-  { "OutputFile", "OUT:", "Output File", "", cmVS7FlagTable::UserValue },
-  { "ModuleDefinitionFile", "DEF:", "Module Definition File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "ForceSymbolReferences", "INCLUDE:", "Force Symbol References", "",
-    cmVS7FlagTable::UserValue },
-  { "DisplayLibrary", "LIST:", "Display Library to standard output", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [MinimumRequiredVersion] - no command line Switch.
-  { "Name", "NAME:", "Name", "", cmVS7FlagTable::UserValue },
-  // Skip [AdditionalOptions] - no command line Switch.
-  // Skip [TrackerLogDirectory] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS14MASMFlagTable.h b/Source/cmVS14MASMFlagTable.h
deleted file mode 100644
index 82ec9f1..0000000
--- a/Source/cmVS14MASMFlagTable.h
+++ /dev/null
@@ -1,76 +0,0 @@
-static cmVS7FlagTable cmVS14MASMFlagTable[] = {
-
-  // Enum Properties
-  { "PreserveIdentifierCase", "", "Default", "0", 0 },
-  { "PreserveIdentifierCase", "Cp", "Preserves Identifier Case (/Cp)", "1",
-    0 },
-  { "PreserveIdentifierCase", "Cu",
-    "Maps all identifiers to upper case. (/Cu)", "2", 0 },
-  { "PreserveIdentifierCase", "Cx",
-    "Preserves case in public and extern symbols. (/Cx)", "3", 0 },
-
-  { "WarningLevel", "W0", "Warning Level 0 (/W0)", "0", 0 },
-  { "WarningLevel", "W1", "Warning Level 1 (/W1)", "1", 0 },
-  { "WarningLevel", "W2", "Warning Level 2 (/W2)", "2", 0 },
-  { "WarningLevel", "W3", "Warning Level 3 (/W3)", "3", 0 },
-
-  { "PackAlignmentBoundary", "", "Default", "0", 0 },
-  { "PackAlignmentBoundary", "Zp1", "One Byte Boundary (/Zp1)", "1", 0 },
-  { "PackAlignmentBoundary", "Zp2", "Two Byte Boundary (/Zp2)", "2", 0 },
-  { "PackAlignmentBoundary", "Zp4", "Four Byte Boundary (/Zp4)", "3", 0 },
-  { "PackAlignmentBoundary", "Zp8", "Eight Byte Boundary (/Zp8)", "4", 0 },
-  { "PackAlignmentBoundary", "Zp16", "Sixteen Byte Boundary (/Zp16)", "5", 0 },
-
-  { "CallingConvention", "", "Default", "0", 0 },
-  { "CallingConvention", "Gd", "Use C-style Calling Convention (/Gd)", "1",
-    0 },
-  { "CallingConvention", "Gz", "Use stdcall Calling Convention (/Gz)", "2",
-    0 },
-  { "CallingConvention", "Gc", "Use Pascal Calling Convention (/Gc)", "3", 0 },
-
-  { "ErrorReporting", "errorReport:prompt",
-    "Prompt to send report immediately (/errorReport:prompt)", "0", 0 },
-  { "ErrorReporting", "errorReport:queue",
-    "Prompt to send report at the next logon (/errorReport:queue)", "1", 0 },
-  { "ErrorReporting", "errorReport:send",
-    "Automatically send report (/errorReport:send)", "2", 0 },
-  { "ErrorReporting", "errorReport:none",
-    "Do not send report (/errorReport:none)", "3", 0 },
-
-  // Bool Properties
-  { "NoLogo", "nologo", "", "true", 0 },
-  { "GeneratePreprocessedSourceListing", "EP", "", "true", 0 },
-  { "ListAllAvailableInformation", "Sa", "", "true", 0 },
-  { "UseSafeExceptionHandlers", "safeseh", "", "true", 0 },
-  { "AddFirstPassListing", "Sf", "", "true", 0 },
-  { "EnableAssemblyGeneratedCodeListing", "Sg", "", "true", 0 },
-  { "DisableSymbolTable", "Sn", "", "true", 0 },
-  { "EnableFalseConditionalsInListing", "Sx", "", "true", 0 },
-  { "TreatWarningsAsErrors", "WX", "", "true", 0 },
-  { "MakeAllSymbolsPublic", "Zf", "", "true", 0 },
-  { "GenerateDebugInformation", "Zi", "", "true", 0 },
-  { "EnableMASM51Compatibility", "Zm", "", "true", 0 },
-  { "PerformSyntaxCheckOnly", "Zs", "", "true", 0 },
-
-  // Bool Properties With Argument
-
-  // String List Properties
-  { "PreprocessorDefinitions", "D", "Preprocessor Definitions", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "IncludePaths", "I", "Include Paths", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  { "BrowseFile", "FR", "Generate Browse Information File", "",
-    cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable },
-  // Skip [AdditionalDependencies] - no command line Switch.
-
-  // String Properties
-  // Skip [Inputs] - no command line Switch.
-  { "ObjectFileName", "Fo", "Object File Name", "",
-    cmVS7FlagTable::UserValue },
-  { "AssembledCodeListingFile", "Fl", "Assembled Code Listing File", "",
-    cmVS7FlagTable::UserValue },
-  // Skip [CommandLineTemplate] - no command line Switch.
-  // Skip [ExecutionDescription] - no command line Switch.
-  // Skip [AdditionalOptions] - no command line Switch.
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVS14RCFlagTable.h b/Source/cmVS14RCFlagTable.h
deleted file mode 100644
index 5dc8d5a..0000000
--- a/Source/cmVS14RCFlagTable.h
+++ /dev/null
@@ -1,7 +0,0 @@
-static cmVS7FlagTable cmVS14RCFlagTable[] = {
-  // Bool Properties
-  { "NullTerminateStrings", "n", "", "true", 0 },
-  { "SuppressStartupBanner", "nologo", "", "true", 0 },
-
-  { 0, 0, 0, 0, 0 }
-};
diff --git a/Source/cmVSSetupHelper.cxx b/Source/cmVSSetupHelper.cxx
index 22fe007..7a54e12 100644
--- a/Source/cmVSSetupHelper.cxx
+++ b/Source/cmVSSetupHelper.cxx
@@ -267,6 +267,19 @@
   return isInstalled && !vsToolsetVersion.empty();
 }
 
+bool cmVSSetupAPIHelper::IsEWDKEnabled()
+{
+  std::string envEnterpriseWDK, envDisableRegistryUse;
+  cmSystemTools::GetEnv("EnterpriseWDK", envEnterpriseWDK);
+  cmSystemTools::GetEnv("DisableRegistryUse", envDisableRegistryUse);
+  if (!cmSystemTools::Strucmp(envEnterpriseWDK.c_str(), "True") &&
+      !cmSystemTools::Strucmp(envDisableRegistryUse.c_str(), "True")) {
+    return true;
+  }
+
+  return false;
+}
+
 bool cmVSSetupAPIHelper::EnumerateAndChooseVSInstance()
 {
   bool isVSInstanceExists = false;
@@ -274,6 +287,26 @@
     return true;
   }
 
+  if (this->IsEWDKEnabled()) {
+    std::string envWindowsSdkDir81, envVSVersion, envVsInstallDir;
+
+    cmSystemTools::GetEnv("WindowsSdkDir_81", envWindowsSdkDir81);
+    cmSystemTools::GetEnv("VisualStudioVersion", envVSVersion);
+    cmSystemTools::GetEnv("VSINSTALLDIR", envVsInstallDir);
+    if (envVSVersion.empty() || envVsInstallDir.empty())
+      return false;
+
+    chosenInstanceInfo.VSInstallLocation =
+      std::wstring(envVsInstallDir.begin(), envVsInstallDir.end());
+    chosenInstanceInfo.Version =
+      std::wstring(envVSVersion.begin(), envVSVersion.end());
+    chosenInstanceInfo.VCToolsetVersion = envVSVersion;
+    chosenInstanceInfo.ullVersion = std::stoi(envVSVersion);
+    chosenInstanceInfo.IsWin10SDKInstalled = true;
+    chosenInstanceInfo.IsWin81SDKInstalled = !envWindowsSdkDir81.empty();
+    return true;
+  }
+
   if (initializationFailure || setupConfig == NULL || setupConfig2 == NULL ||
       setupHelper == NULL)
     return false;
diff --git a/Source/cmVSSetupHelper.h b/Source/cmVSSetupHelper.h
index 4144c15..b9cca45 100644
--- a/Source/cmVSSetupHelper.h
+++ b/Source/cmVSSetupHelper.h
@@ -150,6 +150,7 @@
   HRESULT comInitialized;
   // current best instance of VS selected
   VSInstanceInfo chosenInstanceInfo;
+  bool IsEWDKEnabled();
 
   std::string SpecifiedVSInstallLocation;
 };
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index e9a1a67..7d7defc 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -3319,7 +3319,8 @@
   std::vector<std::string> vsTargetVec;
   this->AddLibraries(cli, libVec, vsTargetVec, config);
   if (std::find(linkClosure->Languages.begin(), linkClosure->Languages.end(),
-                "CUDA") != linkClosure->Languages.end()) {
+                "CUDA") != linkClosure->Languages.end() &&
+      this->CudaOptions[config] != nullptr) {
     switch (this->CudaOptions[config]->GetCudaRuntime()) {
       case cmVisualStudioGeneratorOptions::CudaRuntimeStatic:
         libVec.push_back("cudadevrt.lib");
diff --git a/Source/cmVisualStudio10ToolsetOptions.cxx b/Source/cmVisualStudio10ToolsetOptions.cxx
index 9a1d950..f71b8b7 100644
--- a/Source/cmVisualStudio10ToolsetOptions.cxx
+++ b/Source/cmVisualStudio10ToolsetOptions.cxx
@@ -6,145 +6,123 @@
 #include "cmIDEFlagTable.h"
 #include "cmVisualStudioGeneratorOptions.h"
 
-#include "cmVS10CLFlagTable.h"
-#include "cmVS10CSharpFlagTable.h"
-#include "cmVS10LibFlagTable.h"
-#include "cmVS10LinkFlagTable.h"
-#include "cmVS10MASMFlagTable.h"
-#include "cmVS10RCFlagTable.h"
-#include "cmVS11CLFlagTable.h"
-#include "cmVS11CSharpFlagTable.h"
-#include "cmVS11LibFlagTable.h"
-#include "cmVS11LinkFlagTable.h"
-#include "cmVS11MASMFlagTable.h"
-#include "cmVS11RCFlagTable.h"
-#include "cmVS12CLFlagTable.h"
-#include "cmVS12CSharpFlagTable.h"
-#include "cmVS12LibFlagTable.h"
-#include "cmVS12LinkFlagTable.h"
-#include "cmVS12MASMFlagTable.h"
-#include "cmVS12RCFlagTable.h"
-#include "cmVS140CLFlagTable.h"
-#include "cmVS140CSharpFlagTable.h"
-#include "cmVS140LinkFlagTable.h"
-#include "cmVS141CLFlagTable.h"
-#include "cmVS141CSharpFlagTable.h"
-#include "cmVS141LinkFlagTable.h"
-#include "cmVS14LibFlagTable.h"
-#include "cmVS14MASMFlagTable.h"
-#include "cmVS14RCFlagTable.h"
-
-cmIDEFlagTable const* cmVisualStudio10ToolsetOptions::GetClFlagTable(
-  std::string const& name, std::string const& toolset) const
+std::string cmVisualStudio10ToolsetOptions::GetClFlagTableName(
+  std::string const& name, std::string const& toolset,
+  std::string const& defaultToolset) const
 {
   std::string const useToolset = this->GetToolsetName(name, toolset);
 
   if (toolset == "v141") {
-    return cmVS141CLFlagTable;
+    return "v141";
   } else if (useToolset == "v140") {
-    return cmVS140CLFlagTable;
+    return "v140";
   } else if (useToolset == "v120") {
-    return cmVS12CLFlagTable;
+    return "v12";
   } else if (useToolset == "v110") {
-    return cmVS11CLFlagTable;
+    return "v11";
   } else if (useToolset == "v100") {
-    return cmVS10CLFlagTable;
+    return "v10";
   } else {
-    return 0;
+    return this->GetToolsetName(name, defaultToolset);
   }
 }
 
-cmIDEFlagTable const* cmVisualStudio10ToolsetOptions::GetCSharpFlagTable(
-  std::string const& name, std::string const& toolset) const
+std::string cmVisualStudio10ToolsetOptions::GetCSharpFlagTableName(
+  std::string const& name, std::string const& toolset,
+  std::string const& defaultToolset) const
 {
   std::string const useToolset = this->GetToolsetName(name, toolset);
 
   if ((useToolset == "v141")) {
-    return cmVS141CSharpFlagTable;
+    return "v141";
   } else if (useToolset == "v140") {
-    return cmVS140CSharpFlagTable;
+    return "v140";
   } else if (useToolset == "v120") {
-    return cmVS12CSharpFlagTable;
+    return "v12";
   } else if (useToolset == "v110") {
-    return cmVS11CSharpFlagTable;
+    return "v11";
   } else if (useToolset == "v100") {
-    return cmVS10CSharpFlagTable;
+    return "v10";
   } else {
-    return 0;
+    return this->GetToolsetName(name, defaultToolset);
   }
 }
 
-cmIDEFlagTable const* cmVisualStudio10ToolsetOptions::GetRcFlagTable(
-  std::string const& name, std::string const& toolset) const
+std::string cmVisualStudio10ToolsetOptions::GetRcFlagTableName(
+  std::string const& name, std::string const& toolset,
+  std::string const& defaultToolset) const
 {
   std::string const useToolset = this->GetToolsetName(name, toolset);
 
   if ((useToolset == "v140") || (useToolset == "v141")) {
-    return cmVS14RCFlagTable;
+    return "v14";
   } else if (useToolset == "v120") {
-    return cmVS12RCFlagTable;
+    return "v12";
   } else if (useToolset == "v110") {
-    return cmVS11RCFlagTable;
+    return "v11";
   } else if (useToolset == "v100") {
-    return cmVS10RCFlagTable;
+    return "v10";
   } else {
-    return 0;
+    return this->GetToolsetName(name, defaultToolset);
   }
 }
 
-cmIDEFlagTable const* cmVisualStudio10ToolsetOptions::GetLibFlagTable(
-  std::string const& name, std::string const& toolset) const
+std::string cmVisualStudio10ToolsetOptions::GetLibFlagTableName(
+  std::string const& name, std::string const& toolset,
+  std::string const& defaultToolset) const
 {
   std::string const useToolset = this->GetToolsetName(name, toolset);
 
   if ((useToolset == "v140") || (useToolset == "v141")) {
-    return cmVS14LibFlagTable;
+    return "v14";
   } else if (useToolset == "v120") {
-    return cmVS12LibFlagTable;
+    return "v12";
   } else if (useToolset == "v110") {
-    return cmVS11LibFlagTable;
+    return "v11";
   } else if (useToolset == "v100") {
-    return cmVS10LibFlagTable;
+    return "v10";
   } else {
-    return 0;
+    return this->GetToolsetName(name, defaultToolset);
   }
 }
 
-cmIDEFlagTable const* cmVisualStudio10ToolsetOptions::GetLinkFlagTable(
-  std::string const& name, std::string const& toolset) const
+std::string cmVisualStudio10ToolsetOptions::GetLinkFlagTableName(
+  std::string const& name, std::string const& toolset,
+  std::string const& defaultToolset) const
 {
   std::string const useToolset = this->GetToolsetName(name, toolset);
 
   if (useToolset == "v141") {
-    return cmVS141LinkFlagTable;
+    return "v141";
   } else if (useToolset == "v140") {
-    return cmVS140LinkFlagTable;
+    return "v140";
   } else if (useToolset == "v120") {
-    return cmVS12LinkFlagTable;
+    return "v12";
   } else if (useToolset == "v110") {
-    return cmVS11LinkFlagTable;
+    return "v11";
   } else if (useToolset == "v100") {
-    return cmVS10LinkFlagTable;
+    return "v10";
   } else {
-    return 0;
+    return this->GetToolsetName(name, defaultToolset);
   }
 }
 
-cmIDEFlagTable const* cmVisualStudio10ToolsetOptions::GetMasmFlagTable(
-  std::string const& name, std::string const& toolset) const
+std::string cmVisualStudio10ToolsetOptions::GetMasmFlagTableName(
+  std::string const& name, std::string const& toolset,
+  std::string const& defaultToolset) const
 {
   std::string const useToolset = this->GetToolsetName(name, toolset);
 
   if ((useToolset == "v140") || (useToolset == "v141")) {
-    return cmVS14MASMFlagTable;
+    return "v14";
   } else if (useToolset == "v120") {
-    return cmVS12MASMFlagTable;
+    return "v12";
   } else if (useToolset == "v110") {
-    return cmVS11MASMFlagTable;
+    return "v11";
   } else if (useToolset == "v100") {
-    return cmVS10MASMFlagTable;
+    return "v10";
   } else {
-    return 0;
+    return this->GetToolsetName(name, defaultToolset);
   }
 }
 
diff --git a/Source/cmVisualStudio10ToolsetOptions.h b/Source/cmVisualStudio10ToolsetOptions.h
index c736a49..43946f0 100644
--- a/Source/cmVisualStudio10ToolsetOptions.h
+++ b/Source/cmVisualStudio10ToolsetOptions.h
@@ -7,8 +7,6 @@
 
 #include <string>
 
-struct cmIDEFlagTable;
-
 /** \class cmVisualStudio10ToolsetOptions
  * \brief Retrieves toolset options for MSBuild.
  *
@@ -17,18 +15,24 @@
 class cmVisualStudio10ToolsetOptions
 {
 public:
-  cmIDEFlagTable const* GetClFlagTable(std::string const& name,
-                                       std::string const& toolset) const;
-  cmIDEFlagTable const* GetCSharpFlagTable(std::string const& name,
-                                           std::string const& toolset) const;
-  cmIDEFlagTable const* GetRcFlagTable(std::string const& name,
-                                       std::string const& toolset) const;
-  cmIDEFlagTable const* GetLibFlagTable(std::string const& name,
-                                        std::string const& toolset) const;
-  cmIDEFlagTable const* GetLinkFlagTable(std::string const& name,
-                                         std::string const& toolset) const;
-  cmIDEFlagTable const* GetMasmFlagTable(std::string const& name,
-                                         std::string const& toolset) const;
+  std::string GetClFlagTableName(std::string const& name,
+                                 std::string const& toolset,
+                                 std::string const& defaultToolset) const;
+  std::string GetCSharpFlagTableName(std::string const& name,
+                                     std::string const& toolset,
+                                     std::string const& defaultToolset) const;
+  std::string GetRcFlagTableName(std::string const& name,
+                                 std::string const& toolset,
+                                 std::string const& defaultToolset) const;
+  std::string GetLibFlagTableName(std::string const& name,
+                                  std::string const& toolset,
+                                  std::string const& defaultToolset) const;
+  std::string GetLinkFlagTableName(std::string const& name,
+                                   std::string const& toolset,
+                                   std::string const& defaultToolset) const;
+  std::string GetMasmFlagTableName(std::string const& name,
+                                   std::string const& toolset,
+                                   std::string const& defaultToolset) const;
 
 private:
   std::string GetToolsetName(std::string const& name,
diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx
index 45881aa..930ced9 100644
--- a/Source/cmcmd.cxx
+++ b/Source/cmcmd.cxx
@@ -691,6 +691,8 @@
     if (args[1] == "touch" && args.size() > 2) {
       for (std::string::size_type cc = 2; cc < args.size(); cc++) {
         if (!cmSystemTools::Touch(args[cc], true)) {
+          std::cerr << "cmake -E touch: failed to update \"";
+          std::cerr << args[cc] << "\".\n";
           return 1;
         }
       }
@@ -701,6 +703,8 @@
     if (args[1] == "touch_nocreate" && args.size() > 2) {
       for (std::string::size_type cc = 2; cc < args.size(); cc++) {
         if (!cmSystemTools::Touch(args[cc], false)) {
+          std::cerr << "cmake -E touch_nocreate: failed to update \"";
+          std::cerr << args[cc] << "\".\n";
           return 1;
         }
       }
diff --git a/Source/ctest.cxx b/Source/ctest.cxx
index ca8a776..ca412ae 100644
--- a/Source/ctest.cxx
+++ b/Source/ctest.cxx
@@ -128,7 +128,7 @@
   { "--schedule-random", "Use a random order for scheduling tests" },
   { "--submit-index",
     "Submit individual dashboard tests with specific index" },
-  { "--timeout <seconds>", "Set a global timeout on all tests." },
+  { "--timeout <seconds>", "Set the default test timeout." },
   { "--stop-time <time>",
     "Set a time at which all tests should stop running." },
   { "--http1.0", "Submit using HTTP 1.0." },
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx
index 0a4ad7a..331f16e 100644
--- a/Source/kwsys/SystemTools.cxx
+++ b/Source/kwsys/SystemTools.cxx
@@ -1355,39 +1355,15 @@
   }
   CloseHandle(h);
 #elif KWSYS_CXX_HAS_UTIMENSAT
-  struct timespec times[2] = { { 0, UTIME_OMIT }, { 0, UTIME_NOW } };
-  if (utimensat(AT_FDCWD, filename.c_str(), times, 0) < 0) {
+  // utimensat is only available on newer Unixes and macOS 10.13+
+  if (utimensat(AT_FDCWD, filename.c_str(), NULL, 0) < 0) {
     return false;
   }
 #else
-  struct stat st;
-  if (stat(filename.c_str(), &st) < 0) {
+  // fall back to utimes
+  if (utimes(filename.c_str(), NULL) < 0) {
     return false;
   }
-  struct timeval mtime;
-  gettimeofday(&mtime, 0);
-#  if KWSYS_CXX_HAS_UTIMES
-  struct timeval atime;
-#    if KWSYS_CXX_STAT_HAS_ST_MTIM
-  atime.tv_sec = st.st_atim.tv_sec;
-  atime.tv_usec = st.st_atim.tv_nsec / 1000;
-#    elif KWSYS_CXX_STAT_HAS_ST_MTIMESPEC
-  atime.tv_sec = st.st_atimespec.tv_sec;
-  atime.tv_usec = st.st_atimespec.tv_nsec / 1000;
-#    else
-  atime.tv_sec = st.st_atime;
-  atime.tv_usec = 0;
-#    endif
-  struct timeval times[2] = { atime, mtime };
-  if (utimes(filename.c_str(), times) < 0) {
-    return false;
-  }
-#  else
-  struct utimbuf times = { st.st_atime, mtime.tv_sec };
-  if (utime(filename.c_str(), &times) < 0) {
-    return false;
-  }
-#  endif
 #endif
   return true;
 }
diff --git a/Templates/MSBuild/FlagTables/v10_CL.json b/Templates/MSBuild/FlagTables/v10_CL.json
new file mode 100644
index 0000000..06158be
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v10_CL.json
@@ -0,0 +1,981 @@
+[
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Z7",
+    "comment": "C7 compatible",
+    "value": "OldStyle",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Zi",
+    "comment": "Program Database",
+    "value": "ProgramDatabase",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "ZI",
+    "comment": "Program Database for Edit And Continue",
+    "value": "EditAndContinue",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "",
+    "comment": "No Common Language RunTime Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr",
+    "comment": "Common Language RunTime Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:pure",
+    "comment": "Pure MSIL Common Language RunTime Support",
+    "value": "Pure",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:safe",
+    "comment": "Safe MSIL Common Language RunTime Support",
+    "value": "Safe",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:oldSyntax",
+    "comment": "Common Language RunTime Support, Old Syntax",
+    "value": "OldSyntax",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W0",
+    "comment": "Turn Off All Warnings",
+    "value": "TurnOffAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W1",
+    "comment": "Level1",
+    "value": "Level1",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W2",
+    "comment": "Level2",
+    "value": "Level2",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W3",
+    "comment": "Level3",
+    "value": "Level3",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W4",
+    "comment": "Level4",
+    "value": "Level4",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "Wall",
+    "comment": "EnableAllWarnings",
+    "value": "EnableAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Od",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O1",
+    "comment": "Minimize Size",
+    "value": "MinSpace",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O2",
+    "comment": "Maximize Speed",
+    "value": "MaxSpeed",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Ox",
+    "comment": "Full Optimization",
+    "value": "Full",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob0",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob1",
+    "comment": "Only __inline",
+    "value": "OnlyExplicitInline",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob2",
+    "comment": "Any Suitable",
+    "value": "AnySuitable",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Os",
+    "comment": "Favor small code",
+    "value": "Size",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Ot",
+    "comment": "Favor fast code",
+    "value": "Speed",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "",
+    "comment": "Neither",
+    "value": "Neither",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHa",
+    "comment": "Yes with SEH Exceptions",
+    "value": "Async",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHsc",
+    "comment": "Yes",
+    "value": "Sync",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHs",
+    "comment": "Yes with Extern C functions",
+    "value": "SyncCThrow",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCs",
+    "comment": "Stack Frames",
+    "value": "StackFrameRuntimeCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCu",
+    "comment": "Uninitialized variables",
+    "value": "UninitializedLocalUsageCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTC1",
+    "comment": "Both (/RTC1, equiv. to /RTCsu)",
+    "value": "EnableFastChecks",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MT",
+    "comment": "Multi-threaded",
+    "value": "MultiThreaded",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MTd",
+    "comment": "Multi-threaded Debug",
+    "value": "MultiThreadedDebug",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MD",
+    "comment": "Multi-threaded DLL",
+    "value": "MultiThreadedDLL",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MDd",
+    "comment": "Multi-threaded Debug DLL",
+    "value": "MultiThreadedDebugDLL",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp1",
+    "comment": "1 Byte",
+    "value": "1Byte",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp2",
+    "comment": "2 Bytes",
+    "value": "2Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp4",
+    "comment": "4 Byte",
+    "value": "4Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp8",
+    "comment": "8 Bytes",
+    "value": "8Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp16",
+    "comment": "16 Bytes",
+    "value": "16Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE",
+    "comment": "Streaming SIMD Extensions (/arch:SSE)",
+    "value": "StreamingSIMDExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE2",
+    "comment": "Streaming SIMD Extensions 2 (/arch:SSE2)",
+    "value": "StreamingSIMDExtensions2",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:precise",
+    "comment": "Precise",
+    "value": "Precise",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:strict",
+    "comment": "Strict",
+    "value": "Strict",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:fast",
+    "comment": "Fast",
+    "value": "Fast",
+    "flags": []
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yc",
+    "comment": "Create",
+    "value": "Create",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yu",
+    "comment": "Use",
+    "value": "Use",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Y-",
+    "comment": "Not Using Precompiled Headers",
+    "value": "NotUsing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "",
+    "comment": "No Listing",
+    "value": "NoListing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FA",
+    "comment": "Assembly-Only Listing",
+    "value": "AssemblyCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAc",
+    "comment": "Assembly With Machine Code",
+    "value": "AssemblyAndMachineCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAs",
+    "comment": "Assembly With Source Code",
+    "value": "AssemblyAndSourceCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAcs",
+    "comment": "Assembly, Machine Code and Source",
+    "value": "All",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gd",
+    "comment": "__cdecl",
+    "value": "Cdecl",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gr",
+    "comment": "__fastcall",
+    "value": "FastCall",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gz",
+    "comment": "__stdcall",
+    "value": "StdCall",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TC",
+    "comment": "Compile as C Code",
+    "value": "CompileAsC",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TP",
+    "comment": "Compile as C++ Code",
+    "value": "CompileAsCpp",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:none",
+    "comment": "Do Not Send Report",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "Prompt",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:queue",
+    "comment": "Queue For Next Login",
+    "value": "Queue",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:send",
+    "comment": "Send Automatically",
+    "value": "Send",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "nologo-",
+    "comment": "Suppress Startup Banner",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX-",
+    "comment": "Treat Warnings As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX",
+    "comment": "Treat Warnings As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MultiProcessorCompilation",
+    "switch": "MP",
+    "comment": "Multi-processor Compilation",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "IntrinsicFunctions",
+    "switch": "Oi",
+    "comment": "Enable Intrinsic Functions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy-",
+    "comment": "Omit Frame Pointers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy",
+    "comment": "Omit Frame Pointers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableFiberSafeOptimizations",
+    "switch": "GT",
+    "comment": "Enable Fiber-Safe Optimizations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WholeProgramOptimization",
+    "switch": "GL",
+    "comment": "Whole Program Optimization",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UndefineAllPreprocessorDefinitions",
+    "switch": "u",
+    "comment": "Undefine All Preprocessor Definitions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreStandardIncludePath",
+    "switch": "X",
+    "comment": "Ignore Standard Include Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessToFile",
+    "switch": "P",
+    "comment": "Preprocess to a File",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessSuppressLineNumbers",
+    "switch": "EP",
+    "comment": "Preprocess Suppress Line Numbers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessKeepComments",
+    "switch": "C",
+    "comment": "Keep Comments",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF-",
+    "comment": "Enable String Pooling",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF",
+    "comment": "Enable String Pooling",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm-",
+    "comment": "Enable Minimal Rebuild",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm",
+    "comment": "Enable Minimal Rebuild",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SmallerTypeCheck",
+    "switch": "RTCc",
+    "comment": "Smaller Type Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS-",
+    "comment": "Buffer Security Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS",
+    "comment": "Buffer Security Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy-",
+    "comment": "Enable Function-Level Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy",
+    "comment": "Enable Function-Level Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except-",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CreateHotpatchableImage",
+    "switch": "hotpatch",
+    "comment": "Create Hotpatchable Image",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DisableLanguageExtensions",
+    "switch": "Za",
+    "comment": "Disable Language Extensions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t-",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope-",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR-",
+    "comment": "Enable Run-Time Type Information",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR",
+    "comment": "Enable Run-Time Type Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp-",
+    "comment": "Open MP Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp",
+    "comment": "Open MP Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ExpandAttributedSource",
+    "switch": "Fx",
+    "comment": "Expand Attributed Source",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateXMLDocumentationFiles",
+    "switch": "doc",
+    "comment": "Generate XML Documentation Files",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "BrowseInformation",
+    "switch": "FR",
+    "comment": "Enable Browse Information",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "ShowIncludes",
+    "switch": "showIncludes",
+    "comment": "Show Includes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze-",
+    "comment": "Enable Code Analysis",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze",
+    "comment": "Enable Code Analysis",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseFullPaths",
+    "switch": "FC",
+    "comment": "Use Full Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitDefaultLibName",
+    "switch": "Zl",
+    "comment": "Omit Default Library Name",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseUnicodeForAssemblerListing",
+    "switch": "FAu",
+    "comment": "Use Unicode For Assembler Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalIncludeDirectories",
+    "switch": "I",
+    "comment": "Additional Include Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalUsingDirectories",
+    "switch": "AI",
+    "comment": "Resolve #using References",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "UndefinePreprocessorDefinitions",
+    "switch": "U",
+    "comment": "Undefine Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DisableSpecificWarnings",
+    "switch": "wd",
+    "comment": "Disable Specific Warnings",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedIncludeFiles",
+    "switch": "FI",
+    "comment": "Forced Include File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedUsingFiles",
+    "switch": "FU",
+    "comment": "Forced #using File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "TreatSpecificWarningsAsErrors",
+    "switch": "we",
+    "comment": "Treat Specific Warnings As Errors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PreprocessOutputPath",
+    "switch": "Fi",
+    "comment": "Preprocess Output Path",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yu",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yc",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderOutputFile",
+    "switch": "Fp",
+    "comment": "Precompiled Header Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "AssemblerListingLocation",
+    "switch": "Fa",
+    "comment": "ASM List Location",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ObjectFileName",
+    "switch": "Fo",
+    "comment": "Object File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDataBaseFileName",
+    "switch": "Fd",
+    "comment": "Program Database File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "XMLDocumentationFileName",
+    "switch": "doc",
+    "comment": "XML Documentation File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "BrowseInformationFile",
+    "switch": "FR",
+    "comment": "Browse Information File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "ProcessorNumber",
+    "switch": "MP",
+    "comment": "Number of processors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v10_CSharp.json b/Templates/MSBuild/FlagTables/v10_CSharp.json
new file mode 100644
index 0000000..a0780a4
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v10_CSharp.json
@@ -0,0 +1,570 @@
+[
+  {
+    "name":  "ProjectName",
+    "switch": "out:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:exe",
+    "comment": "",
+    "value": "Exe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:winexe",
+    "comment": "",
+    "value": "Winexe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:library",
+    "comment": "",
+    "value": "Library",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:module",
+    "comment": "",
+    "value": "Module",
+    "flags": []
+  },
+  {
+    "name":  "DocumentationFile",
+    "switch": "doc",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x86",
+    "comment": "",
+    "value": "x86",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:Itanium",
+    "comment": "",
+    "value": "Itanium",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x64",
+    "comment": "",
+    "value": "x64",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:arm",
+    "comment": "",
+    "value": "arm",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu32bitpreferred",
+    "comment": "",
+    "value": "anycpu32bitpreferred",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu",
+    "comment": "",
+    "value": "anycpu",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "mit alias",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "dateiliste",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AddModules",
+    "switch": "addmodule:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "Win32Resource",
+    "switch": "win32res:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationIcon",
+    "switch": "win32icon:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationManifest",
+    "switch": "win32manifest:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "NoWin32Manifest",
+    "switch": "nowin32manifest",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineDebug",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:none",
+    "comment": "",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:full",
+    "comment": "",
+    "value": "full",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:pdbonly",
+    "comment": "",
+    "value": "pdbonly",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:0",
+    "comment": "",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:1",
+    "comment": "",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:2",
+    "comment": "",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "DisabledWarnings",
+    "switch": "nowarn",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineConstants",
+    "switch": "define:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable",
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:ISO-1",
+    "comment": "",
+    "value": "ISO-1",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:ISO-2",
+    "comment": "",
+    "value": "ISO-2",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:5",
+    "comment": "",
+    "value": "5",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:6",
+    "comment": "",
+    "value": "6",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:default",
+    "comment": "",
+    "value": "default",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AssemblyOriginatorKeyFile",
+    "switch": "keyfile",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "KeyContainerName",
+    "switch": "keycontainer",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoLogo",
+    "switch": "nologo",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoConfig",
+    "switch": "noconfig",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "BaseAddress",
+    "switch": "baseaddress:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CodePage",
+    "switch": "codepage",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "Utf8Output",
+    "switch": "utf8output",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "MainEntryPoint",
+    "switch": "main:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "GenerateFullPaths",
+    "switch": "fullpaths",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "FileAlignment",
+    "switch": "filealign",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "PdbFile",
+    "switch": "pdb:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "SubsystemVersion",
+    "switch": "subsystemversion",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AdditionalLibPaths",
+    "switch": "lib:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:none",
+    "comment": "Do Not Send Report",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "prompt",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:queue",
+    "comment": "Queue For Next Login",
+    "value": "queue",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:send",
+    "comment": "Send Automatically",
+    "value": "send",
+    "flags": []
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v10_Cuda.json b/Templates/MSBuild/FlagTables/v10_Cuda.json
new file mode 100644
index 0000000..1831b8a
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v10_Cuda.json
@@ -0,0 +1,224 @@
+[
+  {
+    "name":  "AdditionalCompilerOptions",
+    "switch": "Xcompiler=",
+    "comment": "Host compiler options",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SpaceAppendable"
+    ]
+  },
+  {
+    "name":  "AdditionalCompilerOptions",
+    "switch": "Xcompiler",
+    "comment": "Host compiler options",
+    "value": "",
+    "flags": [
+      "UserFollowing",
+      "SpaceAppendable"
+    ]
+  },
+  {
+    "name":  "CudaRuntime",
+    "switch": "cudart=none",
+    "comment": "No CUDA runtime library",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name":  "CudaRuntime",
+    "switch": "cudart=shared",
+    "comment": "Shared/dynamic CUDA runtime library",
+    "value": "Shared",
+    "flags": []
+  },
+  {
+    "name":  "CudaRuntime",
+    "switch": "cudart=static",
+    "comment": "Static CUDA runtime library",
+    "value": "Static",
+    "flags": []
+  },
+  {
+    "name":  "CudaRuntime",
+    "switch": "cudart",
+    "comment": "CUDA runtime library",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name":  "cmake-temp-gencode",
+    "switch": "gencode=",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "cmake-temp-gencode",
+    "switch": "gencode",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserFollowing",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "cmake-temp-gencode",
+    "switch": "-generate-code=",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "cmake-temp-gencode",
+    "switch": "-generate-code",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserFollowing",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "cmake-temp-code",
+    "switch": "code=",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "cmake-temp-code",
+    "switch": "code",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name":  "cmake-temp-code",
+    "switch": "-gpu-code=",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "cmake-temp-code",
+    "switch": "-gpu-code",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name":  "cmake-temp-arch",
+    "switch": "arch=",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "cmake-temp-arch",
+    "switch": "arch",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name":  "cmake-temp-arch",
+    "switch": "-gpu-architecture=",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "cmake-temp-arch",
+    "switch": "-gpu-architecture",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name":  "FastMath",
+    "switch": "use_fast_math",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "FastMath",
+    "switch": "-use_fast_math",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "GPUDebugInfo",
+    "switch": "G",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "GPUDebugInfo",
+    "switch": "-device-debug",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "HostDebugInfo",
+    "switch": "g",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "HostDebugInfo",
+    "switch": "-debug",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "MaxRegCount",
+    "switch": "maxrregcount=",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "MaxRegCount",
+    "switch": "maxrregcount",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v10_CudaHost.json b/Templates/MSBuild/FlagTables/v10_CudaHost.json
new file mode 100644
index 0000000..2593ff1
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v10_CudaHost.json
@@ -0,0 +1,149 @@
+[
+  {
+    "name":  "Optimization",
+    "switch": "Od",
+    "comment": "Disabled",
+    "value": "Od",
+    "flags": []
+  },
+  {
+    "name":  "Optimization",
+    "switch": "O1",
+    "comment": "Minimize Size",
+    "value": "O1",
+    "flags": []
+  },
+  {
+    "name":  "Optimization",
+    "switch": "O2",
+    "comment": "Maximize Speed",
+    "value": "O2",
+    "flags": []
+  },
+  {
+    "name":  "Optimization",
+    "switch": "Ox",
+    "comment": "Full Optimization",
+    "value": "O3",
+    "flags": []
+  },
+  {
+    "name":  "Runtime",
+    "switch": "MT",
+    "comment": "Multi-Threaded",
+    "value": "MT",
+    "flags": []
+  },
+  {
+    "name":  "Runtime",
+    "switch": "MTd",
+    "comment": "Multi-Threaded Debug",
+    "value": "MTd",
+    "flags": []
+  },
+  {
+    "name":  "Runtime",
+    "switch": "MD",
+    "comment": "Multi-Threaded DLL",
+    "value": "MD",
+    "flags": []
+  },
+  {
+    "name":  "Runtime",
+    "switch": "MDd",
+    "comment": "Multi-threaded Debug DLL",
+    "value": "MDd",
+    "flags": []
+  },
+  {
+    "name":  "Runtime",
+    "switch": "ML",
+    "comment": "Single-Threaded",
+    "value": "ML",
+    "flags": []
+  },
+  {
+    "name":  "Runtime",
+    "switch": "MLd",
+    "comment": "Single-Threaded Debug",
+    "value": "MLd",
+    "flags": []
+  },
+  {
+    "name":  "RuntimeChecks",
+    "switch": "RTCs",
+    "comment": "Stack Frames",
+    "value": "RTCs",
+    "flags": []
+  },
+  {
+    "name":  "RuntimeChecks",
+    "switch": "RTCu",
+    "comment": "Uninitialized Variables",
+    "value": "RTCu",
+    "flags": []
+  },
+  {
+    "name":  "RuntimeChecks",
+    "switch": "RTC1",
+    "comment": "Both",
+    "value": "RTC1",
+    "flags": []
+  },
+  {
+    "name":  "TypeInfo",
+    "switch": "GR",
+    "comment": "Yes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TypeInfo",
+    "switch": "GR-",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "Warning",
+    "switch": "W0",
+    "comment": "Off: Turn Off All Warnings",
+    "value": "W0",
+    "flags": []
+  },
+  {
+    "name":  "Warning",
+    "switch": "W1",
+    "comment": "Level 1",
+    "value": "W1",
+    "flags": []
+  },
+  {
+    "name":  "Warning",
+    "switch": "W2",
+    "comment": "Level 2",
+    "value": "W2",
+    "flags": []
+  },
+  {
+    "name":  "Warning",
+    "switch": "W3",
+    "comment": "Level 3",
+    "value": "W3",
+    "flags": []
+  },
+  {
+    "name":  "Warning",
+    "switch": "W4",
+    "comment": "Level 4",
+    "value": "W4",
+    "flags": []
+  },
+  {
+    "name":  "Warning",
+    "switch": "Wall",
+    "comment": "Enable All Warnings",
+    "value": "Wall",
+    "flags": []
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v10_LIB.json b/Templates/MSBuild/FlagTables/v10_LIB.json
new file mode 100644
index 0000000..58a238c
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v10_LIB.json
@@ -0,0 +1,297 @@
+[
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWSCE",
+    "comment": "WindowsCE",
+    "value": "WindowsCE",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLibWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Lib Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLibWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Lib Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Verbose",
+    "switch": "VERBOSE",
+    "comment": "Verbose",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Link Time Code Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ExportNamedFunctions",
+    "switch": "EXPORT:",
+    "comment": "Export Named Functions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "RemoveObjects",
+    "switch": "REMOVE:",
+    "comment": "Remove Objects",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "DisplayLibrary",
+    "switch": "LIST:",
+    "comment": "Display Library to standard output",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Name",
+    "switch": "NAME:",
+    "comment": "Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v10_Link.json b/Templates/MSBuild/FlagTables/v10_Link.json
new file mode 100644
index 0000000..ac5b8b1
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v10_Link.json
@@ -0,0 +1,1137 @@
+[
+  {
+    "name": "ShowProgress",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE",
+    "comment": "Display all progress messages",
+    "value": "LinkVerbose",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:Lib",
+    "comment": "For Libraries Searched",
+    "value": "LinkVerboseLib",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:ICF",
+    "comment": "About COMDAT folding during optimized linking",
+    "value": "LinkVerboseICF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:REF",
+    "comment": "About data removed during optimized linking",
+    "value": "LinkVerboseREF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:SAFESEH",
+    "comment": "About Modules incompatible with SEH",
+    "value": "LinkVerboseSAFESEH",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:CLR",
+    "comment": "About linker activity related to managed code",
+    "value": "LinkVerboseCLR",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:MULTIPLE",
+    "comment": "Multiply Defined Symbol Only",
+    "value": "MultiplyDefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:UNRESOLVED",
+    "comment": "Undefined Symbol Only",
+    "value": "UndefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:5",
+    "comment": "X86 Image Only",
+    "value": "X86Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:6",
+    "comment": "X64 Image Only",
+    "value": "X64Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:16",
+    "comment": "Itanium Image Only",
+    "value": "ItaniumImage",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='asInvoker'",
+    "comment": "asInvoker",
+    "value": "AsInvoker",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='highestAvailable'",
+    "comment": "highestAvailable",
+    "value": "HighestAvailable",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='requireAdministrator'",
+    "comment": "requireAdministrator",
+    "value": "RequireAdministrator",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWSCE",
+    "comment": "WindowsCE",
+    "value": "WindowsCE",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "Driver",
+    "comment": "Driver",
+    "value": "Driver",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:UPONLY",
+    "comment": "UP Only",
+    "value": "UpOnly",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:WDM",
+    "comment": "WDM",
+    "value": "WDM",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Use Link Time Code Generation",
+    "value": "UseLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGInstrument",
+    "comment": "Profile Guided Optimization - Instrument",
+    "value": "PGInstrument",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGOptimize",
+    "comment": "Profile Guided Optimization - Optimization",
+    "value": "PGOptimization",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGUpdate",
+    "comment": "Profile Guided Optimization - Update",
+    "value": "PGUpdate",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:MTA",
+    "comment": "MTA threading attribute",
+    "value": "MTAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:STA",
+    "comment": "STA threading attribute",
+    "value": "STAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:NONE",
+    "comment": "Default threading attribute",
+    "value": "DefaultThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:IJW",
+    "comment": "Force IJW image",
+    "value": "ForceIJWImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:PURE",
+    "comment": "Force Pure IL Image",
+    "value": "ForcePureILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:SAFE",
+    "comment": "Force Safe IL Image",
+    "value": "ForceSafeILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "",
+    "comment": "Default image type",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:NO",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:SYSTEMDLL",
+    "comment": "System Dlls Only",
+    "value": "SystemDlls",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL:NO",
+    "comment": "Enable Incremental Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL",
+    "comment": "Enable Incremental Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:NOSTATUS",
+    "comment": "Link Status",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:STATUS",
+    "comment": "Link Status",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND:NO",
+    "comment": "Prevent Dll Binding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND",
+    "comment": "Prevent Dll Binding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST:NO",
+    "comment": "Generate Manifest",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST",
+    "comment": "Generate Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "ALLOWISOLATION:NO",
+    "comment": "Allow Isolation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "ALLOWISOLATION",
+    "comment": "Allow Isolation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableUAC",
+    "switch": "MANIFESTUAC:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "SpaceAppendable"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='true'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG",
+    "comment": "Generate Debug Info",
+    "value": "true",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateMapFile",
+    "switch": "MAP",
+    "comment": "Generate Map File",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "MapExports",
+    "switch": "MAPINFO:EXPORTS",
+    "comment": "Map Exports",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG:DISABLE",
+    "comment": "Debuggable Assembly",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG",
+    "comment": "Debuggable Assembly",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE:NO",
+    "comment": "Enable Large Addresses",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE",
+    "comment": "Enable Large Addresses",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE:NO",
+    "comment": "Terminal Server",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE",
+    "comment": "Terminal Server",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromCD",
+    "switch": "SWAPRUN:CD",
+    "comment": "Swap Run From CD",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromNET",
+    "switch": "SWAPRUN:NET",
+    "comment": "Swap Run From Network",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:NOREF",
+    "comment": "References",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:REF",
+    "comment": "References",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:NOICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:ICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreEmbeddedIDL",
+    "switch": "IGNOREIDL",
+    "comment": "Ignore Embedded IDL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NoEntryPoint",
+    "switch": "NOENTRY",
+    "comment": "No Entry Point",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SetChecksum",
+    "switch": "RELEASE",
+    "comment": "Set Checksum",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE:NO",
+    "comment": "Randomized Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE",
+    "comment": "Randomized Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED:NO",
+    "comment": "Fixed Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED",
+    "comment": "Fixed Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT:NO",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TurnOffAssemblyGeneration",
+    "switch": "NOASSEMBLY",
+    "comment": "Turn Off Assembly Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportUnloadOfDelayLoadedDLL",
+    "switch": "DELAY:UNLOAD",
+    "comment": "Unload delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportNobindOfDelayLoadedDLL",
+    "switch": "DELAY:NOBIND",
+    "comment": "Nobind delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Profile",
+    "switch": "PROFILE",
+    "comment": "Profile",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN:NO",
+    "comment": "Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN",
+    "comment": "Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK:NO",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH:NO",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDLL",
+    "switch": "DLL",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AddModuleNamesToAssembly",
+    "switch": "ASSEMBLYMODULE:",
+    "comment": "Add Module to Assembly",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "EmbedManagedResourceFile",
+    "switch": "ASSEMBLYRESOURCE:",
+    "comment": "Embed Managed Resource File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DelayLoadDLLs",
+    "switch": "DELAYLOAD:",
+    "comment": "Delay Loaded Dlls",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AssemblyLinkResource",
+    "switch": "ASSEMBLYLINKRESOURCE:",
+    "comment": "Assembly Link Resource",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalManifestDependencies",
+    "switch": "MANIFESTDEPENDENCY:",
+    "comment": "Additional Manifest Dependencies",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Version",
+    "switch": "VERSION:",
+    "comment": "Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SpecifySectionAttributes",
+    "switch": "SECTION:",
+    "comment": "Specify Section Attributes",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MSDOSStubFileName",
+    "switch": "STUB:",
+    "comment": "MS-DOS Stub File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ManifestFile",
+    "switch": "ManifestFile:",
+    "comment": "Manifest File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDatabaseFile",
+    "switch": "PDB:",
+    "comment": "Generate Program Database File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StripPrivateSymbols",
+    "switch": "PDBSTRIPPED:",
+    "comment": "Strip Private Symbols",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MapFileName",
+    "switch": "MAP:",
+    "comment": "Map File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "HeapReserveSize",
+    "switch": "HEAP:",
+    "comment": "Heap Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "HeapCommitSize",
+    "switch": "HEAP",
+    "comment": "Heap Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "StackReserveSize",
+    "switch": "STACK:",
+    "comment": "Stack Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StackCommitSize",
+    "switch": "STACK",
+    "comment": "Stack Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "FunctionOrder",
+    "switch": "ORDER:@",
+    "comment": "Function Order",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProfileGuidedDatabase",
+    "switch": "PGD:",
+    "comment": "Profile Guided Database",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MidlCommandFile",
+    "switch": "MIDL:@",
+    "comment": "MIDL Commands",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergedIDLBaseFileName",
+    "switch": "IDLOUT:",
+    "comment": "Merged IDL Base File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryFile",
+    "switch": "TLBOUT:",
+    "comment": "Type Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "EntryPointSymbol",
+    "switch": "ENTRY:",
+    "comment": "Entry Point",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "BaseAddress",
+    "switch": "BASE:",
+    "comment": "Base Address",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ImportLibrary",
+    "switch": "IMPLIB:",
+    "comment": "Import Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergeSections",
+    "switch": "MERGE:",
+    "comment": "Merge Sections",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "LinkKeyFile",
+    "switch": "KEYFILE:",
+    "comment": "Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "KeyContainer",
+    "switch": "KEYCONTAINER:",
+    "comment": "Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryResourceID",
+    "switch": "TLBID:",
+    "comment": "TypeLib Resource ID",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SectionAlignment",
+    "switch": "ALIGN:",
+    "comment": "SectionAlignment",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v10_MASM.json b/Templates/MSBuild/FlagTables/v10_MASM.json
new file mode 100644
index 0000000..4634306
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v10_MASM.json
@@ -0,0 +1,295 @@
+[
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "",
+    "comment": "Default",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "Cp",
+    "comment": "Preserves Identifier Case (/Cp)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "Cu",
+    "comment": "Maps all identifiers to upper case. (/Cu)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "Cx",
+    "comment": "Preserves case in public and extern symbols. (/Cx)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W0",
+    "comment": "Warning Level 0 (/W0)",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W1",
+    "comment": "Warning Level 1 (/W1)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W2",
+    "comment": "Warning Level 2 (/W2)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W3",
+    "comment": "Warning Level 3 (/W3)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "",
+    "comment": "Default",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp1",
+    "comment": "One Byte Boundary (/Zp1)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp2",
+    "comment": "Two Byte Boundary (/Zp2)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp4",
+    "comment": "Four Byte Boundary (/Zp4)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp8",
+    "comment": "Eight Byte Boundary (/Zp8)",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp16",
+    "comment": "Sixteen Byte Boundary (/Zp16)",
+    "value": "5",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "",
+    "comment": "Default",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gd",
+    "comment": "Use C-style Calling Convention (/Gd)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gz",
+    "comment": "Use stdcall Calling Convention (/Gz)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gc",
+    "comment": "Use Pascal Calling Convention (/Gc)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:prompt",
+    "comment": "Prompt to send report immediately (/errorReport:prompt)",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:queue",
+    "comment": "Prompt to send report at the next logon (/errorReport:queue)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:send",
+    "comment": "Automatically send report (/errorReport:send)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:none",
+    "comment": "Do not send report (/errorReport:none)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "NoLogo",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GeneratePreprocessedSourceListing",
+    "switch": "EP",
+    "comment": "Generate Preprocessed Source Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ListAllAvailableInformation",
+    "switch": "Sa",
+    "comment": "List All Available Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseSafeExceptionHandlers",
+    "switch": "safeseh",
+    "comment": "Use Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AddFirstPassListing",
+    "switch": "Sf",
+    "comment": "Add First Pass Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableAssemblyGeneratedCodeListing",
+    "switch": "Sg",
+    "comment": "Enable Assembly Generated Code Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DisableSymbolTable",
+    "switch": "Sn",
+    "comment": "Disable Symbol Table",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableFalseConditionalsInListing",
+    "switch": "Sx",
+    "comment": "Enable False Conditionals In Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningsAsErrors",
+    "switch": "WX",
+    "comment": "Treat Warnings As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MakeAllSymbolsPublic",
+    "switch": "Zf",
+    "comment": "Make All Symbols Public",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "Zi",
+    "comment": "Generate Debug Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableMASM51Compatibility",
+    "switch": "Zm",
+    "comment": "Enable MASM 5.1 Compatibility",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PerformSyntaxCheckOnly",
+    "switch": "Zs",
+    "comment": "Perform Syntax Check Only",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IncludePaths",
+    "switch": "I",
+    "comment": "Include Paths",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "BrowseFile",
+    "switch": "FR",
+    "comment": "Generate Browse Information File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ObjectFileName",
+    "switch": "Fo",
+    "comment": "Object File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "AssembledCodeListingFile",
+    "switch": "Fl",
+    "comment": "Assembled Code Listing File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v10_NASM.json b/Templates/MSBuild/FlagTables/v10_NASM.json
new file mode 100644
index 0000000..434cd63
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v10_NASM.json
@@ -0,0 +1,201 @@
+[
+  {
+    "name": "Outputswitch",
+    "switch": "fwin",
+    "comment": "Object File win32",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "Outputswitch",
+    "switch": "fwin32",
+    "comment": "Object File win32",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "Outputswitch",
+    "switch": "fwin64",
+    "comment": "Object File win64",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "Outputswitch",
+    "switch": "felf",
+    "comment": "ELF32 (i386) object files (e.g. Linux)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "Outputswitch",
+    "switch": "felf32",
+    "comment": "ELF32 (i386) object files (e.g. Linux)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "Outputswitch",
+    "switch": "felf64",
+    "comment": "ELF64 (x86_64) object files (e.g. Linux)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "ErrorReportingFormat",
+    "switch": "Xgnu",
+    "comment": "-Xgnu GNU format: Default format",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "ErrorReportingFormat",
+    "switch": "Xvc",
+    "comment": "-Xvc Style used by Microsoft Visual C++",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "tasmmode",
+    "switch": "t",
+    "comment": "SciTech TASM compatible mode",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "g",
+    "comment": "Generate Debug Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningsAsErrors",
+    "switch": "Werror",
+    "comment": "Treat Warnings As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "floatunderflow",
+    "switch": "w+float-underflow",
+    "comment": "float-underflow",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "macrodefaults",
+    "switch": "w-macro-defaults",
+    "comment": "Disable macro-defaults",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "user",
+    "switch": "w-user",
+    "comment": "Disable user",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "floatoverflow",
+    "switch": "w-float-overflow",
+    "comment": "Disable float-overflow",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "floatdenorm",
+    "switch": "w+float-denorm",
+    "comment": "float-denorm",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "numberoverflow",
+    "switch": "w-number-overflow",
+    "comment": "Disable number-overflow",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "macroselfref",
+    "switch": "w+macro-selfref",
+    "comment": "macro-selfref",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "floattoolong",
+    "switch": "w-float-toolong",
+    "comment": "Disable float-toolong",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "orphanlabels",
+    "switch": "w-orphan-labels",
+    "comment": "Disable orphan-labels",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AssembledCodeListingFile",
+    "switch": "l",
+    "comment": "Assembled Code Listing File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "Z",
+    "comment": "Redirect Error Messages to File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IncludePaths",
+    "switch": "I",
+    "comment": "Include Paths",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "UndefinePreprocessorDefinitions",
+    "switch": "U",
+    "comment": "Undefine Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFormat",
+    "switch": "o",
+    "comment": "Output File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v10_RC.json b/Templates/MSBuild/FlagTables/v10_RC.json
new file mode 100644
index 0000000..b8c0127
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v10_RC.json
@@ -0,0 +1,69 @@
+[
+  {
+    "name": "IgnoreStandardIncludePath",
+    "switch": "X",
+    "comment": "Ignore Standard Include Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "v",
+    "comment": "Show Progress",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NullTerminateStrings",
+    "switch": "n",
+    "comment": "Null Terminate Strings",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "UndefinePreprocessorDefinitions",
+    "switch": "u",
+    "comment": "Undefine Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalIncludeDirectories",
+    "switch": "I",
+    "comment": "Additional Include Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ResourceOutputFileName",
+    "switch": "fo",
+    "comment": "Resource File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v11_CL.json b/Templates/MSBuild/FlagTables/v11_CL.json
new file mode 100644
index 0000000..b47ab2e
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v11_CL.json
@@ -0,0 +1,1063 @@
+[
+  {
+    "name": "DebugInformationFormat",
+    "switch": "",
+    "comment": "None",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Z7",
+    "comment": "C7 compatible",
+    "value": "OldStyle",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Zi",
+    "comment": "Program Database",
+    "value": "ProgramDatabase",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "ZI",
+    "comment": "Program Database for Edit And Continue",
+    "value": "EditAndContinue",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "",
+    "comment": "No Common Language RunTime Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr",
+    "comment": "Common Language RunTime Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:pure",
+    "comment": "Pure MSIL Common Language RunTime Support",
+    "value": "Pure",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:safe",
+    "comment": "Safe MSIL Common Language RunTime Support",
+    "value": "Safe",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:oldSyntax",
+    "comment": "Common Language RunTime Support, Old Syntax",
+    "value": "OldSyntax",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W0",
+    "comment": "Turn Off All Warnings",
+    "value": "TurnOffAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W1",
+    "comment": "Level1",
+    "value": "Level1",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W2",
+    "comment": "Level2",
+    "value": "Level2",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W3",
+    "comment": "Level3",
+    "value": "Level3",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W4",
+    "comment": "Level4",
+    "value": "Level4",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "Wall",
+    "comment": "EnableAllWarnings",
+    "value": "EnableAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Od",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O1",
+    "comment": "Minimize Size",
+    "value": "MinSpace",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O2",
+    "comment": "Maximize Speed",
+    "value": "MaxSpeed",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Ox",
+    "comment": "Full Optimization",
+    "value": "Full",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob0",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob1",
+    "comment": "Only __inline",
+    "value": "OnlyExplicitInline",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob2",
+    "comment": "Any Suitable",
+    "value": "AnySuitable",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Os",
+    "comment": "Favor small code",
+    "value": "Size",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Ot",
+    "comment": "Favor fast code",
+    "value": "Speed",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "",
+    "comment": "Neither",
+    "value": "Neither",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHa",
+    "comment": "Yes with SEH Exceptions",
+    "value": "Async",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHsc",
+    "comment": "Yes",
+    "value": "Sync",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHs",
+    "comment": "Yes with Extern C functions",
+    "value": "SyncCThrow",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCs",
+    "comment": "Stack Frames",
+    "value": "StackFrameRuntimeCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCu",
+    "comment": "Uninitialized variables",
+    "value": "UninitializedLocalUsageCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTC1",
+    "comment": "Both (/RTC1, equiv. to /RTCsu)",
+    "value": "EnableFastChecks",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MT",
+    "comment": "Multi-threaded",
+    "value": "MultiThreaded",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MTd",
+    "comment": "Multi-threaded Debug",
+    "value": "MultiThreadedDebug",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MD",
+    "comment": "Multi-threaded DLL",
+    "value": "MultiThreadedDLL",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MDd",
+    "comment": "Multi-threaded Debug DLL",
+    "value": "MultiThreadedDebugDLL",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp1",
+    "comment": "1 Byte",
+    "value": "1Byte",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp2",
+    "comment": "2 Bytes",
+    "value": "2Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp4",
+    "comment": "4 Byte",
+    "value": "4Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp8",
+    "comment": "8 Bytes",
+    "value": "8Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp16",
+    "comment": "16 Bytes",
+    "value": "16Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE",
+    "comment": "Streaming SIMD Extensions",
+    "value": "StreamingSIMDExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE2",
+    "comment": "Streaming SIMD Extensions 2",
+    "value": "StreamingSIMDExtensions2",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:AVX",
+    "comment": "Advanced Vector Extensions",
+    "value": "AdvancedVectorExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:IA32",
+    "comment": "No Enhanced Instructions",
+    "value": "NoExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:precise",
+    "comment": "Precise",
+    "value": "Precise",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:strict",
+    "comment": "Strict",
+    "value": "Strict",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:fast",
+    "comment": "Fast",
+    "value": "Fast",
+    "flags": []
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yc",
+    "comment": "Create",
+    "value": "Create",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yu",
+    "comment": "Use",
+    "value": "Use",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Y-",
+    "comment": "Not Using Precompiled Headers",
+    "value": "NotUsing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "",
+    "comment": "No Listing",
+    "value": "NoListing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FA",
+    "comment": "Assembly-Only Listing",
+    "value": "AssemblyCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAc",
+    "comment": "Assembly With Machine Code",
+    "value": "AssemblyAndMachineCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAs",
+    "comment": "Assembly With Source Code",
+    "value": "AssemblyAndSourceCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAcs",
+    "comment": "Assembly, Machine Code and Source",
+    "value": "All",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gd",
+    "comment": "__cdecl",
+    "value": "Cdecl",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gr",
+    "comment": "__fastcall",
+    "value": "FastCall",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gz",
+    "comment": "__stdcall",
+    "value": "StdCall",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TC",
+    "comment": "Compile as C Code",
+    "value": "CompileAsC",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TP",
+    "comment": "Compile as C++ Code",
+    "value": "CompileAsCpp",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:none",
+    "comment": "Do Not Send Report",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "Prompt",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:queue",
+    "comment": "Queue For Next Login",
+    "value": "Queue",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:send",
+    "comment": "Send Automatically",
+    "value": "Send",
+    "flags": []
+  },
+  {
+    "name": "CompileAsWinRT",
+    "switch": "ZW",
+    "comment": "Consume Windows Runtime Extension",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WinRTNoStdLib",
+    "switch": "ZW:nostdlib",
+    "comment": "No Standard WinRT Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "nologo-",
+    "comment": "Suppress Startup Banner",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX-",
+    "comment": "Treat Warnings As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX",
+    "comment": "Treat Warnings As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SDLCheck",
+    "switch": "sdl-",
+    "comment": "SDL checks",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SDLCheck",
+    "switch": "sdl",
+    "comment": "SDL checks",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MultiProcessorCompilation",
+    "switch": "MP",
+    "comment": "Multi-processor Compilation",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "IntrinsicFunctions",
+    "switch": "Oi",
+    "comment": "Enable Intrinsic Functions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy-",
+    "comment": "Omit Frame Pointers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy",
+    "comment": "Omit Frame Pointers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableFiberSafeOptimizations",
+    "switch": "GT",
+    "comment": "Enable Fiber-Safe Optimizations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WholeProgramOptimization",
+    "switch": "GL",
+    "comment": "Whole Program Optimization",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UndefineAllPreprocessorDefinitions",
+    "switch": "u",
+    "comment": "Undefine All Preprocessor Definitions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreStandardIncludePath",
+    "switch": "X",
+    "comment": "Ignore Standard Include Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessToFile",
+    "switch": "P",
+    "comment": "Preprocess to a File",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessSuppressLineNumbers",
+    "switch": "EP",
+    "comment": "Preprocess Suppress Line Numbers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessKeepComments",
+    "switch": "C",
+    "comment": "Keep Comments",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF-",
+    "comment": "Enable String Pooling",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF",
+    "comment": "Enable String Pooling",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm-",
+    "comment": "Enable Minimal Rebuild",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm",
+    "comment": "Enable Minimal Rebuild",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SmallerTypeCheck",
+    "switch": "RTCc",
+    "comment": "Smaller Type Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS-",
+    "comment": "Security Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS",
+    "comment": "Security Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy-",
+    "comment": "Enable Function-Level Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy",
+    "comment": "Enable Function-Level Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableParallelCodeGeneration",
+    "switch": "Qpar-",
+    "comment": "Enable Parallel Code Generation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableParallelCodeGeneration",
+    "switch": "Qpar",
+    "comment": "Enable Parallel Code Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except-",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CreateHotpatchableImage",
+    "switch": "hotpatch",
+    "comment": "Create Hotpatchable Image",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DisableLanguageExtensions",
+    "switch": "Za",
+    "comment": "Disable Language Extensions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t-",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope-",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR-",
+    "comment": "Enable Run-Time Type Information",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR",
+    "comment": "Enable Run-Time Type Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp-",
+    "comment": "Open MP Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp",
+    "comment": "Open MP Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ExpandAttributedSource",
+    "switch": "Fx",
+    "comment": "Expand Attributed Source",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseUnicodeForAssemblerListing",
+    "switch": "FAu",
+    "comment": "Use Unicode For Assembler Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateXMLDocumentationFiles",
+    "switch": "doc",
+    "comment": "Generate XML Documentation Files",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "BrowseInformation",
+    "switch": "FR",
+    "comment": "Enable Browse Information",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "ShowIncludes",
+    "switch": "showIncludes",
+    "comment": "Show Includes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze-",
+    "comment": "Enable Code Analysis",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze",
+    "comment": "Enable Code Analysis",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseFullPaths",
+    "switch": "FC",
+    "comment": "Use Full Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitDefaultLibName",
+    "switch": "Zl",
+    "comment": "Omit Default Library Name",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalIncludeDirectories",
+    "switch": "I",
+    "comment": "Additional Include Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalUsingDirectories",
+    "switch": "AI",
+    "comment": "Additional #using Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "UndefinePreprocessorDefinitions",
+    "switch": "U",
+    "comment": "Undefine Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DisableSpecificWarnings",
+    "switch": "wd",
+    "comment": "Disable Specific Warnings",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedIncludeFiles",
+    "switch": "FI",
+    "comment": "Forced Include File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedUsingFiles",
+    "switch": "FU",
+    "comment": "Forced #using File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PREfastLog",
+    "switch": "analyze:log",
+    "comment": "Code Analysis Log",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name": "PREfastAdditionalPlugins",
+    "switch": "analyze:plugin",
+    "comment": "Additional Code Analysis Native plugins",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "TreatSpecificWarningsAsErrors",
+    "switch": "we",
+    "comment": "Treat Specific Warnings As Errors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PreprocessOutputPath",
+    "switch": "Fi",
+    "comment": "Preprocess Output Path",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yu",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yc",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderOutputFile",
+    "switch": "Fp",
+    "comment": "Precompiled Header Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "AssemblerListingLocation",
+    "switch": "Fa",
+    "comment": "ASM List Location",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ObjectFileName",
+    "switch": "Fo",
+    "comment": "Object File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDataBaseFileName",
+    "switch": "Fd",
+    "comment": "Program Database File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "XMLDocumentationFileName",
+    "switch": "doc",
+    "comment": "XML Documentation File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "BrowseInformationFile",
+    "switch": "FR",
+    "comment": "Browse Information File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "ProcessorNumber",
+    "switch": "MP",
+    "comment": "Number of processors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v11_CSharp.json b/Templates/MSBuild/FlagTables/v11_CSharp.json
new file mode 100644
index 0000000..a0780a4
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v11_CSharp.json
@@ -0,0 +1,570 @@
+[
+  {
+    "name":  "ProjectName",
+    "switch": "out:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:exe",
+    "comment": "",
+    "value": "Exe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:winexe",
+    "comment": "",
+    "value": "Winexe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:library",
+    "comment": "",
+    "value": "Library",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:module",
+    "comment": "",
+    "value": "Module",
+    "flags": []
+  },
+  {
+    "name":  "DocumentationFile",
+    "switch": "doc",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x86",
+    "comment": "",
+    "value": "x86",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:Itanium",
+    "comment": "",
+    "value": "Itanium",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x64",
+    "comment": "",
+    "value": "x64",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:arm",
+    "comment": "",
+    "value": "arm",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu32bitpreferred",
+    "comment": "",
+    "value": "anycpu32bitpreferred",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu",
+    "comment": "",
+    "value": "anycpu",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "mit alias",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "dateiliste",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AddModules",
+    "switch": "addmodule:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "Win32Resource",
+    "switch": "win32res:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationIcon",
+    "switch": "win32icon:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationManifest",
+    "switch": "win32manifest:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "NoWin32Manifest",
+    "switch": "nowin32manifest",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineDebug",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:none",
+    "comment": "",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:full",
+    "comment": "",
+    "value": "full",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:pdbonly",
+    "comment": "",
+    "value": "pdbonly",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:0",
+    "comment": "",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:1",
+    "comment": "",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:2",
+    "comment": "",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "DisabledWarnings",
+    "switch": "nowarn",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineConstants",
+    "switch": "define:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable",
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:ISO-1",
+    "comment": "",
+    "value": "ISO-1",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:ISO-2",
+    "comment": "",
+    "value": "ISO-2",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:5",
+    "comment": "",
+    "value": "5",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:6",
+    "comment": "",
+    "value": "6",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:default",
+    "comment": "",
+    "value": "default",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AssemblyOriginatorKeyFile",
+    "switch": "keyfile",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "KeyContainerName",
+    "switch": "keycontainer",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoLogo",
+    "switch": "nologo",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoConfig",
+    "switch": "noconfig",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "BaseAddress",
+    "switch": "baseaddress:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CodePage",
+    "switch": "codepage",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "Utf8Output",
+    "switch": "utf8output",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "MainEntryPoint",
+    "switch": "main:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "GenerateFullPaths",
+    "switch": "fullpaths",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "FileAlignment",
+    "switch": "filealign",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "PdbFile",
+    "switch": "pdb:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "SubsystemVersion",
+    "switch": "subsystemversion",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AdditionalLibPaths",
+    "switch": "lib:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:none",
+    "comment": "Do Not Send Report",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "prompt",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:queue",
+    "comment": "Queue For Next Login",
+    "value": "queue",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:send",
+    "comment": "Send Automatically",
+    "value": "send",
+    "flags": []
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v11_LIB.json b/Templates/MSBuild/FlagTables/v11_LIB.json
new file mode 100644
index 0000000..58a238c
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v11_LIB.json
@@ -0,0 +1,297 @@
+[
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWSCE",
+    "comment": "WindowsCE",
+    "value": "WindowsCE",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLibWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Lib Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLibWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Lib Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Verbose",
+    "switch": "VERBOSE",
+    "comment": "Verbose",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Link Time Code Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ExportNamedFunctions",
+    "switch": "EXPORT:",
+    "comment": "Export Named Functions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "RemoveObjects",
+    "switch": "REMOVE:",
+    "comment": "Remove Objects",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "DisplayLibrary",
+    "switch": "LIST:",
+    "comment": "Display Library to standard output",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Name",
+    "switch": "NAME:",
+    "comment": "Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v11_Link.json b/Templates/MSBuild/FlagTables/v11_Link.json
new file mode 100644
index 0000000..5d5c13f
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v11_Link.json
@@ -0,0 +1,1272 @@
+[
+  {
+    "name": "ShowProgress",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE",
+    "comment": "Display all progress messages",
+    "value": "LinkVerbose",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:Lib",
+    "comment": "For Libraries Searched",
+    "value": "LinkVerboseLib",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:ICF",
+    "comment": "About COMDAT folding during optimized linking",
+    "value": "LinkVerboseICF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:REF",
+    "comment": "About data removed during optimized linking",
+    "value": "LinkVerboseREF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:SAFESEH",
+    "comment": "About Modules incompatible with SEH",
+    "value": "LinkVerboseSAFESEH",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:CLR",
+    "comment": "About linker activity related to managed code",
+    "value": "LinkVerboseCLR",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:MULTIPLE",
+    "comment": "Multiply Defined Symbol Only",
+    "value": "MultiplyDefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:UNRESOLVED",
+    "comment": "Undefined Symbol Only",
+    "value": "UndefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:5",
+    "comment": "X86 Image Only",
+    "value": "X86Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:6",
+    "comment": "X64 Image Only",
+    "value": "X64Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:16",
+    "comment": "Itanium Image Only",
+    "value": "ItaniumImage",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='asInvoker'",
+    "comment": "asInvoker",
+    "value": "AsInvoker",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='highestAvailable'",
+    "comment": "highestAvailable",
+    "value": "HighestAvailable",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='requireAdministrator'",
+    "comment": "requireAdministrator",
+    "value": "RequireAdministrator",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "Driver",
+    "comment": "Driver",
+    "value": "Driver",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:UPONLY",
+    "comment": "UP Only",
+    "value": "UpOnly",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:WDM",
+    "comment": "WDM",
+    "value": "WDM",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Use Link Time Code Generation",
+    "value": "UseLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGInstrument",
+    "comment": "Profile Guided Optimization - Instrument",
+    "value": "PGInstrument",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGOptimize",
+    "comment": "Profile Guided Optimization - Optimization",
+    "value": "PGOptimization",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGUpdate",
+    "comment": "Profile Guided Optimization - Update",
+    "value": "PGUpdate",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD",
+    "comment": "Yes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD:NO",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:MTA",
+    "comment": "MTA threading attribute",
+    "value": "MTAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:STA",
+    "comment": "STA threading attribute",
+    "value": "STAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:NONE",
+    "comment": "Default threading attribute",
+    "value": "DefaultThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:IJW",
+    "comment": "Force IJW image",
+    "value": "ForceIJWImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:PURE",
+    "comment": "Force Pure IL Image",
+    "value": "ForcePureILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:SAFE",
+    "comment": "Force Safe IL Image",
+    "value": "ForceSafeILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "",
+    "comment": "Default image type",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:NO",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:SYSTEMDLL",
+    "comment": "System Dlls Only",
+    "value": "SystemDlls",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL:NO",
+    "comment": "Enable Incremental Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL",
+    "comment": "Enable Incremental Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:NOSTATUS",
+    "comment": "Link Status",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:STATUS",
+    "comment": "Link Status",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND:NO",
+    "comment": "Prevent Dll Binding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND",
+    "comment": "Prevent Dll Binding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST:NO",
+    "comment": "Generate Manifest",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST",
+    "comment": "Generate Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "ALLOWISOLATION:NO",
+    "comment": "Allow Isolation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "",
+    "comment": "Allow Isolation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableUAC",
+    "switch": "MANIFESTUAC:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "SpaceAppendable"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='true'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ManifestEmbed",
+    "switch": "manifest:embed",
+    "comment": "Embed Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG",
+    "comment": "Generate Debug Info",
+    "value": "true",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateMapFile",
+    "switch": "MAP",
+    "comment": "Generate Map File",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "MapExports",
+    "switch": "MAPINFO:EXPORTS",
+    "comment": "Map Exports",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG:DISABLE",
+    "comment": "Debuggable Assembly",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG",
+    "comment": "Debuggable Assembly",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE:NO",
+    "comment": "Enable Large Addresses",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE",
+    "comment": "Enable Large Addresses",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE:NO",
+    "comment": "Terminal Server",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE",
+    "comment": "Terminal Server",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromCD",
+    "switch": "SWAPRUN:CD",
+    "comment": "Swap Run From CD",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromNET",
+    "switch": "SWAPRUN:NET",
+    "comment": "Swap Run From Network",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:NOREF",
+    "comment": "References",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:REF",
+    "comment": "References",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:NOICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:ICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreEmbeddedIDL",
+    "switch": "IGNOREIDL",
+    "comment": "Ignore Embedded IDL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AppContainer",
+    "switch": "APPCONTAINER",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN:NO",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NoEntryPoint",
+    "switch": "NOENTRY",
+    "comment": "No Entry Point",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SetChecksum",
+    "switch": "RELEASE",
+    "comment": "Set Checksum",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE:NO",
+    "comment": "Randomized Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE",
+    "comment": "Randomized Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED:NO",
+    "comment": "Fixed Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED",
+    "comment": "Fixed Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT:NO",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TurnOffAssemblyGeneration",
+    "switch": "NOASSEMBLY",
+    "comment": "Turn Off Assembly Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportUnloadOfDelayLoadedDLL",
+    "switch": "DELAY:UNLOAD",
+    "comment": "Unload delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportNobindOfDelayLoadedDLL",
+    "switch": "DELAY:NOBIND",
+    "comment": "Nobind delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Profile",
+    "switch": "PROFILE",
+    "comment": "Profile",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN:NO",
+    "comment": "Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN",
+    "comment": "Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK:NO",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DetectOneDefinitionRule",
+    "switch": "ODR",
+    "comment": "Detect One Definition Rule violations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH:NO",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDLL",
+    "switch": "DLL",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AddModuleNamesToAssembly",
+    "switch": "ASSEMBLYMODULE:",
+    "comment": "Add Module to Assembly",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "EmbedManagedResourceFile",
+    "switch": "ASSEMBLYRESOURCE:",
+    "comment": "Embed Managed Resource File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DelayLoadDLLs",
+    "switch": "DELAYLOAD:",
+    "comment": "Delay Loaded Dlls",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AssemblyLinkResource",
+    "switch": "ASSEMBLYLINKRESOURCE:",
+    "comment": "Assembly Link Resource",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalManifestDependencies",
+    "switch": "MANIFESTDEPENDENCY:",
+    "comment": "Additional Manifest Dependencies",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ManifestInput",
+    "switch": "manifestinput:",
+    "comment": "Manifest Input",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Version",
+    "switch": "VERSION:",
+    "comment": "Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SpecifySectionAttributes",
+    "switch": "SECTION:",
+    "comment": "Specify Section Attributes",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MSDOSStubFileName",
+    "switch": "STUB:",
+    "comment": "MS-DOS Stub File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ManifestFile",
+    "switch": "ManifestFile:",
+    "comment": "Manifest File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDatabaseFile",
+    "switch": "PDB:",
+    "comment": "Generate Program Database File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StripPrivateSymbols",
+    "switch": "PDBSTRIPPED:",
+    "comment": "Strip Private Symbols",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MapFileName",
+    "switch": "MAP:",
+    "comment": "Map File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "HeapReserveSize",
+    "switch": "HEAP:",
+    "comment": "Heap Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "HeapCommitSize",
+    "switch": "HEAP",
+    "comment": "Heap Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "StackReserveSize",
+    "switch": "STACK:",
+    "comment": "Stack Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StackCommitSize",
+    "switch": "STACK",
+    "comment": "Stack Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "FunctionOrder",
+    "switch": "ORDER:@",
+    "comment": "Function Order",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProfileGuidedDatabase",
+    "switch": "PGD:",
+    "comment": "Profile Guided Database",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MidlCommandFile",
+    "switch": "MIDL:@",
+    "comment": "MIDL Commands",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergedIDLBaseFileName",
+    "switch": "IDLOUT:",
+    "comment": "Merged IDL Base File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryFile",
+    "switch": "TLBOUT:",
+    "comment": "Type Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataFile",
+    "switch": "WINMDFILE:",
+    "comment": "Windows Metadata File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataLinkKeyFile",
+    "switch": "WINMDKEYFILE:",
+    "comment": "Windows Metadata Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataKeyContainer",
+    "switch": "WINMDKEYCONTAINER:",
+    "comment": "Windows Metadata Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "EntryPointSymbol",
+    "switch": "ENTRY:",
+    "comment": "Entry Point",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "BaseAddress",
+    "switch": "BASE:",
+    "comment": "Base Address",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ImportLibrary",
+    "switch": "IMPLIB:",
+    "comment": "Import Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergeSections",
+    "switch": "MERGE:",
+    "comment": "Merge Sections",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "LinkKeyFile",
+    "switch": "KEYFILE:",
+    "comment": "Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "KeyContainer",
+    "switch": "KEYCONTAINER:",
+    "comment": "Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryResourceID",
+    "switch": "TLBID:",
+    "comment": "TypeLib Resource ID",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SectionAlignment",
+    "switch": "ALIGN:",
+    "comment": "SectionAlignment",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v11_MASM.json b/Templates/MSBuild/FlagTables/v11_MASM.json
new file mode 100644
index 0000000..4634306
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v11_MASM.json
@@ -0,0 +1,295 @@
+[
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "",
+    "comment": "Default",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "Cp",
+    "comment": "Preserves Identifier Case (/Cp)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "Cu",
+    "comment": "Maps all identifiers to upper case. (/Cu)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "Cx",
+    "comment": "Preserves case in public and extern symbols. (/Cx)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W0",
+    "comment": "Warning Level 0 (/W0)",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W1",
+    "comment": "Warning Level 1 (/W1)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W2",
+    "comment": "Warning Level 2 (/W2)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W3",
+    "comment": "Warning Level 3 (/W3)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "",
+    "comment": "Default",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp1",
+    "comment": "One Byte Boundary (/Zp1)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp2",
+    "comment": "Two Byte Boundary (/Zp2)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp4",
+    "comment": "Four Byte Boundary (/Zp4)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp8",
+    "comment": "Eight Byte Boundary (/Zp8)",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp16",
+    "comment": "Sixteen Byte Boundary (/Zp16)",
+    "value": "5",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "",
+    "comment": "Default",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gd",
+    "comment": "Use C-style Calling Convention (/Gd)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gz",
+    "comment": "Use stdcall Calling Convention (/Gz)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gc",
+    "comment": "Use Pascal Calling Convention (/Gc)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:prompt",
+    "comment": "Prompt to send report immediately (/errorReport:prompt)",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:queue",
+    "comment": "Prompt to send report at the next logon (/errorReport:queue)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:send",
+    "comment": "Automatically send report (/errorReport:send)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:none",
+    "comment": "Do not send report (/errorReport:none)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "NoLogo",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GeneratePreprocessedSourceListing",
+    "switch": "EP",
+    "comment": "Generate Preprocessed Source Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ListAllAvailableInformation",
+    "switch": "Sa",
+    "comment": "List All Available Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseSafeExceptionHandlers",
+    "switch": "safeseh",
+    "comment": "Use Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AddFirstPassListing",
+    "switch": "Sf",
+    "comment": "Add First Pass Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableAssemblyGeneratedCodeListing",
+    "switch": "Sg",
+    "comment": "Enable Assembly Generated Code Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DisableSymbolTable",
+    "switch": "Sn",
+    "comment": "Disable Symbol Table",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableFalseConditionalsInListing",
+    "switch": "Sx",
+    "comment": "Enable False Conditionals In Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningsAsErrors",
+    "switch": "WX",
+    "comment": "Treat Warnings As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MakeAllSymbolsPublic",
+    "switch": "Zf",
+    "comment": "Make All Symbols Public",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "Zi",
+    "comment": "Generate Debug Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableMASM51Compatibility",
+    "switch": "Zm",
+    "comment": "Enable MASM 5.1 Compatibility",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PerformSyntaxCheckOnly",
+    "switch": "Zs",
+    "comment": "Perform Syntax Check Only",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IncludePaths",
+    "switch": "I",
+    "comment": "Include Paths",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "BrowseFile",
+    "switch": "FR",
+    "comment": "Generate Browse Information File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ObjectFileName",
+    "switch": "Fo",
+    "comment": "Object File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "AssembledCodeListingFile",
+    "switch": "Fl",
+    "comment": "Assembled Code Listing File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v11_RC.json b/Templates/MSBuild/FlagTables/v11_RC.json
new file mode 100644
index 0000000..b8c0127
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v11_RC.json
@@ -0,0 +1,69 @@
+[
+  {
+    "name": "IgnoreStandardIncludePath",
+    "switch": "X",
+    "comment": "Ignore Standard Include Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "v",
+    "comment": "Show Progress",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NullTerminateStrings",
+    "switch": "n",
+    "comment": "Null Terminate Strings",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "UndefinePreprocessorDefinitions",
+    "switch": "u",
+    "comment": "Undefine Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalIncludeDirectories",
+    "switch": "I",
+    "comment": "Additional Include Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ResourceOutputFileName",
+    "switch": "fo",
+    "comment": "Resource File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v12_CL.json b/Templates/MSBuild/FlagTables/v12_CL.json
new file mode 100644
index 0000000..771a555
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v12_CL.json
@@ -0,0 +1,1077 @@
+[
+  {
+    "name": "DebugInformationFormat",
+    "switch": "",
+    "comment": "None",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Z7",
+    "comment": "C7 compatible",
+    "value": "OldStyle",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Zi",
+    "comment": "Program Database",
+    "value": "ProgramDatabase",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "ZI",
+    "comment": "Program Database for Edit And Continue",
+    "value": "EditAndContinue",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "",
+    "comment": "No Common Language RunTime Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr",
+    "comment": "Common Language RunTime Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:pure",
+    "comment": "Pure MSIL Common Language RunTime Support",
+    "value": "Pure",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:safe",
+    "comment": "Safe MSIL Common Language RunTime Support",
+    "value": "Safe",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:oldSyntax",
+    "comment": "Common Language RunTime Support, Old Syntax",
+    "value": "OldSyntax",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W0",
+    "comment": "Turn Off All Warnings",
+    "value": "TurnOffAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W1",
+    "comment": "Level1",
+    "value": "Level1",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W2",
+    "comment": "Level2",
+    "value": "Level2",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W3",
+    "comment": "Level3",
+    "value": "Level3",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W4",
+    "comment": "Level4",
+    "value": "Level4",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "Wall",
+    "comment": "EnableAllWarnings",
+    "value": "EnableAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "",
+    "comment": "Custom",
+    "value": "Custom",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Od",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O1",
+    "comment": "Minimize Size",
+    "value": "MinSpace",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O2",
+    "comment": "Maximize Speed",
+    "value": "MaxSpeed",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Ox",
+    "comment": "Full Optimization",
+    "value": "Full",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob0",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob1",
+    "comment": "Only __inline",
+    "value": "OnlyExplicitInline",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob2",
+    "comment": "Any Suitable",
+    "value": "AnySuitable",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Os",
+    "comment": "Favor small code",
+    "value": "Size",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Ot",
+    "comment": "Favor fast code",
+    "value": "Speed",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "",
+    "comment": "Neither",
+    "value": "Neither",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHa",
+    "comment": "Yes with SEH Exceptions",
+    "value": "Async",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHsc",
+    "comment": "Yes",
+    "value": "Sync",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHs",
+    "comment": "Yes with Extern C functions",
+    "value": "SyncCThrow",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCs",
+    "comment": "Stack Frames",
+    "value": "StackFrameRuntimeCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCu",
+    "comment": "Uninitialized variables",
+    "value": "UninitializedLocalUsageCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTC1",
+    "comment": "Both (/RTC1, equiv. to /RTCsu)",
+    "value": "EnableFastChecks",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MT",
+    "comment": "Multi-threaded",
+    "value": "MultiThreaded",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MTd",
+    "comment": "Multi-threaded Debug",
+    "value": "MultiThreadedDebug",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MD",
+    "comment": "Multi-threaded DLL",
+    "value": "MultiThreadedDLL",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MDd",
+    "comment": "Multi-threaded Debug DLL",
+    "value": "MultiThreadedDebugDLL",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp1",
+    "comment": "1 Byte",
+    "value": "1Byte",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp2",
+    "comment": "2 Bytes",
+    "value": "2Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp4",
+    "comment": "4 Byte",
+    "value": "4Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp8",
+    "comment": "8 Bytes",
+    "value": "8Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp16",
+    "comment": "16 Bytes",
+    "value": "16Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS-",
+    "comment": "Disable Security Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS",
+    "comment": "Enable Security Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE",
+    "comment": "Streaming SIMD Extensions",
+    "value": "StreamingSIMDExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE2",
+    "comment": "Streaming SIMD Extensions 2",
+    "value": "StreamingSIMDExtensions2",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:AVX",
+    "comment": "Advanced Vector Extensions",
+    "value": "AdvancedVectorExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:AVX2",
+    "comment": "Advanced Vector Extensions 2",
+    "value": "AdvancedVectorExtensions2",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:IA32",
+    "comment": "No Enhanced Instructions",
+    "value": "NoExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:precise",
+    "comment": "Precise",
+    "value": "Precise",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:strict",
+    "comment": "Strict",
+    "value": "Strict",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:fast",
+    "comment": "Fast",
+    "value": "Fast",
+    "flags": []
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yc",
+    "comment": "Create",
+    "value": "Create",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yu",
+    "comment": "Use",
+    "value": "Use",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Y-",
+    "comment": "Not Using Precompiled Headers",
+    "value": "NotUsing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "",
+    "comment": "No Listing",
+    "value": "NoListing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FA",
+    "comment": "Assembly-Only Listing",
+    "value": "AssemblyCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAc",
+    "comment": "Assembly With Machine Code",
+    "value": "AssemblyAndMachineCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAs",
+    "comment": "Assembly With Source Code",
+    "value": "AssemblyAndSourceCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAcs",
+    "comment": "Assembly, Machine Code and Source",
+    "value": "All",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gd",
+    "comment": "__cdecl",
+    "value": "Cdecl",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gr",
+    "comment": "__fastcall",
+    "value": "FastCall",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gz",
+    "comment": "__stdcall",
+    "value": "StdCall",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gv",
+    "comment": "__vectorcall",
+    "value": "VectorCall",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TC",
+    "comment": "Compile as C Code",
+    "value": "CompileAsC",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TP",
+    "comment": "Compile as C++ Code",
+    "value": "CompileAsCpp",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:none",
+    "comment": "Do Not Send Report",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "Prompt",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:queue",
+    "comment": "Queue For Next Login",
+    "value": "Queue",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:send",
+    "comment": "Send Automatically",
+    "value": "Send",
+    "flags": []
+  },
+  {
+    "name": "CompileAsWinRT",
+    "switch": "ZW",
+    "comment": "Consume Windows Runtime Extension",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WinRTNoStdLib",
+    "switch": "ZW:nostdlib",
+    "comment": "No Standard WinRT Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX-",
+    "comment": "Treat Warnings As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX",
+    "comment": "Treat Warnings As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SDLCheck",
+    "switch": "sdl-",
+    "comment": "SDL checks",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SDLCheck",
+    "switch": "sdl",
+    "comment": "SDL checks",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MultiProcessorCompilation",
+    "switch": "MP",
+    "comment": "Multi-processor Compilation",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "IntrinsicFunctions",
+    "switch": "Oi",
+    "comment": "Enable Intrinsic Functions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy-",
+    "comment": "Omit Frame Pointers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy",
+    "comment": "Omit Frame Pointers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableFiberSafeOptimizations",
+    "switch": "GT",
+    "comment": "Enable Fiber-Safe Optimizations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WholeProgramOptimization",
+    "switch": "GL",
+    "comment": "Whole Program Optimization",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UndefineAllPreprocessorDefinitions",
+    "switch": "u",
+    "comment": "Undefine All Preprocessor Definitions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreStandardIncludePath",
+    "switch": "X",
+    "comment": "Ignore Standard Include Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessToFile",
+    "switch": "P",
+    "comment": "Preprocess to a File",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessSuppressLineNumbers",
+    "switch": "EP",
+    "comment": "Preprocess Suppress Line Numbers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessKeepComments",
+    "switch": "C",
+    "comment": "Keep Comments",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF-",
+    "comment": "Enable String Pooling",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF",
+    "comment": "Enable String Pooling",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm-",
+    "comment": "Enable Minimal Rebuild",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm",
+    "comment": "Enable Minimal Rebuild",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SmallerTypeCheck",
+    "switch": "RTCc",
+    "comment": "Smaller Type Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy-",
+    "comment": "Enable Function-Level Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy",
+    "comment": "Enable Function-Level Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableParallelCodeGeneration",
+    "switch": "Qpar-",
+    "comment": "Enable Parallel Code Generation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableParallelCodeGeneration",
+    "switch": "Qpar",
+    "comment": "Enable Parallel Code Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except-",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CreateHotpatchableImage",
+    "switch": "hotpatch",
+    "comment": "Create Hotpatchable Image",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DisableLanguageExtensions",
+    "switch": "Za",
+    "comment": "Disable Language Extensions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t-",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope-",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR-",
+    "comment": "Enable Run-Time Type Information",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR",
+    "comment": "Enable Run-Time Type Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp-",
+    "comment": "Open MP Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp",
+    "comment": "Open MP Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ExpandAttributedSource",
+    "switch": "Fx",
+    "comment": "Expand Attributed Source",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseUnicodeForAssemblerListing",
+    "switch": "FAu",
+    "comment": "Use Unicode For Assembler Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateXMLDocumentationFiles",
+    "switch": "doc",
+    "comment": "Generate XML Documentation Files",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "BrowseInformation",
+    "switch": "FR",
+    "comment": "Enable Browse Information",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "ShowIncludes",
+    "switch": "showIncludes",
+    "comment": "Show Includes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze-",
+    "comment": "Enable Code Analysis",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze",
+    "comment": "Enable Code Analysis",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseFullPaths",
+    "switch": "FC",
+    "comment": "Use Full Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitDefaultLibName",
+    "switch": "Zl",
+    "comment": "Omit Default Library Name",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalIncludeDirectories",
+    "switch": "I",
+    "comment": "Additional Include Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalUsingDirectories",
+    "switch": "AI",
+    "comment": "Additional #using Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "UndefinePreprocessorDefinitions",
+    "switch": "U",
+    "comment": "Undefine Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DisableSpecificWarnings",
+    "switch": "wd",
+    "comment": "Disable Specific Warnings",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedIncludeFiles",
+    "switch": "FI",
+    "comment": "Forced Include File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedUsingFiles",
+    "switch": "FU",
+    "comment": "Forced #using File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PREfastLog",
+    "switch": "analyze:log",
+    "comment": "Code Analysis Log",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name": "PREfastAdditionalPlugins",
+    "switch": "analyze:plugin",
+    "comment": "Additional Code Analysis Native plugins",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "TreatSpecificWarningsAsErrors",
+    "switch": "we",
+    "comment": "Treat Specific Warnings As Errors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PreprocessOutputPath",
+    "switch": "Fi",
+    "comment": "Preprocess Output Path",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yu",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yc",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderOutputFile",
+    "switch": "Fp",
+    "comment": "Precompiled Header Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "AssemblerListingLocation",
+    "switch": "Fa",
+    "comment": "ASM List Location",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ObjectFileName",
+    "switch": "Fo",
+    "comment": "Object File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDataBaseFileName",
+    "switch": "Fd",
+    "comment": "Program Database File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "XMLDocumentationFileName",
+    "switch": "doc",
+    "comment": "XML Documentation File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "BrowseInformationFile",
+    "switch": "FR",
+    "comment": "Browse Information File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "ProcessorNumber",
+    "switch": "MP",
+    "comment": "Number of processors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v12_CSharp.json b/Templates/MSBuild/FlagTables/v12_CSharp.json
new file mode 100644
index 0000000..a0780a4
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v12_CSharp.json
@@ -0,0 +1,570 @@
+[
+  {
+    "name":  "ProjectName",
+    "switch": "out:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:exe",
+    "comment": "",
+    "value": "Exe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:winexe",
+    "comment": "",
+    "value": "Winexe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:library",
+    "comment": "",
+    "value": "Library",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:module",
+    "comment": "",
+    "value": "Module",
+    "flags": []
+  },
+  {
+    "name":  "DocumentationFile",
+    "switch": "doc",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x86",
+    "comment": "",
+    "value": "x86",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:Itanium",
+    "comment": "",
+    "value": "Itanium",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x64",
+    "comment": "",
+    "value": "x64",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:arm",
+    "comment": "",
+    "value": "arm",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu32bitpreferred",
+    "comment": "",
+    "value": "anycpu32bitpreferred",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu",
+    "comment": "",
+    "value": "anycpu",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "mit alias",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "dateiliste",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AddModules",
+    "switch": "addmodule:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "Win32Resource",
+    "switch": "win32res:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationIcon",
+    "switch": "win32icon:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationManifest",
+    "switch": "win32manifest:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "NoWin32Manifest",
+    "switch": "nowin32manifest",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineDebug",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:none",
+    "comment": "",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:full",
+    "comment": "",
+    "value": "full",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:pdbonly",
+    "comment": "",
+    "value": "pdbonly",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:0",
+    "comment": "",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:1",
+    "comment": "",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:2",
+    "comment": "",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "DisabledWarnings",
+    "switch": "nowarn",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineConstants",
+    "switch": "define:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable",
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:ISO-1",
+    "comment": "",
+    "value": "ISO-1",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:ISO-2",
+    "comment": "",
+    "value": "ISO-2",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:5",
+    "comment": "",
+    "value": "5",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:6",
+    "comment": "",
+    "value": "6",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:default",
+    "comment": "",
+    "value": "default",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AssemblyOriginatorKeyFile",
+    "switch": "keyfile",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "KeyContainerName",
+    "switch": "keycontainer",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoLogo",
+    "switch": "nologo",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoConfig",
+    "switch": "noconfig",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "BaseAddress",
+    "switch": "baseaddress:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CodePage",
+    "switch": "codepage",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "Utf8Output",
+    "switch": "utf8output",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "MainEntryPoint",
+    "switch": "main:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "GenerateFullPaths",
+    "switch": "fullpaths",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "FileAlignment",
+    "switch": "filealign",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "PdbFile",
+    "switch": "pdb:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "SubsystemVersion",
+    "switch": "subsystemversion",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AdditionalLibPaths",
+    "switch": "lib:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:none",
+    "comment": "Do Not Send Report",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "prompt",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:queue",
+    "comment": "Queue For Next Login",
+    "value": "queue",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:send",
+    "comment": "Send Automatically",
+    "value": "send",
+    "flags": []
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v12_LIB.json b/Templates/MSBuild/FlagTables/v12_LIB.json
new file mode 100644
index 0000000..58a238c
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v12_LIB.json
@@ -0,0 +1,297 @@
+[
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWSCE",
+    "comment": "WindowsCE",
+    "value": "WindowsCE",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLibWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Lib Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLibWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Lib Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Verbose",
+    "switch": "VERBOSE",
+    "comment": "Verbose",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Link Time Code Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ExportNamedFunctions",
+    "switch": "EXPORT:",
+    "comment": "Export Named Functions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "RemoveObjects",
+    "switch": "REMOVE:",
+    "comment": "Remove Objects",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "DisplayLibrary",
+    "switch": "LIST:",
+    "comment": "Display Library to standard output",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Name",
+    "switch": "NAME:",
+    "comment": "Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v12_Link.json b/Templates/MSBuild/FlagTables/v12_Link.json
new file mode 100644
index 0000000..5d5c13f
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v12_Link.json
@@ -0,0 +1,1272 @@
+[
+  {
+    "name": "ShowProgress",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE",
+    "comment": "Display all progress messages",
+    "value": "LinkVerbose",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:Lib",
+    "comment": "For Libraries Searched",
+    "value": "LinkVerboseLib",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:ICF",
+    "comment": "About COMDAT folding during optimized linking",
+    "value": "LinkVerboseICF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:REF",
+    "comment": "About data removed during optimized linking",
+    "value": "LinkVerboseREF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:SAFESEH",
+    "comment": "About Modules incompatible with SEH",
+    "value": "LinkVerboseSAFESEH",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:CLR",
+    "comment": "About linker activity related to managed code",
+    "value": "LinkVerboseCLR",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:MULTIPLE",
+    "comment": "Multiply Defined Symbol Only",
+    "value": "MultiplyDefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:UNRESOLVED",
+    "comment": "Undefined Symbol Only",
+    "value": "UndefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:5",
+    "comment": "X86 Image Only",
+    "value": "X86Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:6",
+    "comment": "X64 Image Only",
+    "value": "X64Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:16",
+    "comment": "Itanium Image Only",
+    "value": "ItaniumImage",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='asInvoker'",
+    "comment": "asInvoker",
+    "value": "AsInvoker",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='highestAvailable'",
+    "comment": "highestAvailable",
+    "value": "HighestAvailable",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='requireAdministrator'",
+    "comment": "requireAdministrator",
+    "value": "RequireAdministrator",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "Driver",
+    "comment": "Driver",
+    "value": "Driver",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:UPONLY",
+    "comment": "UP Only",
+    "value": "UpOnly",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:WDM",
+    "comment": "WDM",
+    "value": "WDM",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Use Link Time Code Generation",
+    "value": "UseLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGInstrument",
+    "comment": "Profile Guided Optimization - Instrument",
+    "value": "PGInstrument",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGOptimize",
+    "comment": "Profile Guided Optimization - Optimization",
+    "value": "PGOptimization",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGUpdate",
+    "comment": "Profile Guided Optimization - Update",
+    "value": "PGUpdate",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD",
+    "comment": "Yes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD:NO",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:MTA",
+    "comment": "MTA threading attribute",
+    "value": "MTAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:STA",
+    "comment": "STA threading attribute",
+    "value": "STAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:NONE",
+    "comment": "Default threading attribute",
+    "value": "DefaultThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:IJW",
+    "comment": "Force IJW image",
+    "value": "ForceIJWImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:PURE",
+    "comment": "Force Pure IL Image",
+    "value": "ForcePureILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:SAFE",
+    "comment": "Force Safe IL Image",
+    "value": "ForceSafeILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "",
+    "comment": "Default image type",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:NO",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:SYSTEMDLL",
+    "comment": "System Dlls Only",
+    "value": "SystemDlls",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL:NO",
+    "comment": "Enable Incremental Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL",
+    "comment": "Enable Incremental Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:NOSTATUS",
+    "comment": "Link Status",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:STATUS",
+    "comment": "Link Status",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND:NO",
+    "comment": "Prevent Dll Binding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND",
+    "comment": "Prevent Dll Binding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST:NO",
+    "comment": "Generate Manifest",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST",
+    "comment": "Generate Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "ALLOWISOLATION:NO",
+    "comment": "Allow Isolation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "",
+    "comment": "Allow Isolation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableUAC",
+    "switch": "MANIFESTUAC:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "SpaceAppendable"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='true'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ManifestEmbed",
+    "switch": "manifest:embed",
+    "comment": "Embed Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG",
+    "comment": "Generate Debug Info",
+    "value": "true",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateMapFile",
+    "switch": "MAP",
+    "comment": "Generate Map File",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "MapExports",
+    "switch": "MAPINFO:EXPORTS",
+    "comment": "Map Exports",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG:DISABLE",
+    "comment": "Debuggable Assembly",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG",
+    "comment": "Debuggable Assembly",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE:NO",
+    "comment": "Enable Large Addresses",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE",
+    "comment": "Enable Large Addresses",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE:NO",
+    "comment": "Terminal Server",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE",
+    "comment": "Terminal Server",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromCD",
+    "switch": "SWAPRUN:CD",
+    "comment": "Swap Run From CD",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromNET",
+    "switch": "SWAPRUN:NET",
+    "comment": "Swap Run From Network",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:NOREF",
+    "comment": "References",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:REF",
+    "comment": "References",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:NOICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:ICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreEmbeddedIDL",
+    "switch": "IGNOREIDL",
+    "comment": "Ignore Embedded IDL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AppContainer",
+    "switch": "APPCONTAINER",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN:NO",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NoEntryPoint",
+    "switch": "NOENTRY",
+    "comment": "No Entry Point",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SetChecksum",
+    "switch": "RELEASE",
+    "comment": "Set Checksum",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE:NO",
+    "comment": "Randomized Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE",
+    "comment": "Randomized Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED:NO",
+    "comment": "Fixed Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED",
+    "comment": "Fixed Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT:NO",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TurnOffAssemblyGeneration",
+    "switch": "NOASSEMBLY",
+    "comment": "Turn Off Assembly Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportUnloadOfDelayLoadedDLL",
+    "switch": "DELAY:UNLOAD",
+    "comment": "Unload delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportNobindOfDelayLoadedDLL",
+    "switch": "DELAY:NOBIND",
+    "comment": "Nobind delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Profile",
+    "switch": "PROFILE",
+    "comment": "Profile",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN:NO",
+    "comment": "Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN",
+    "comment": "Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK:NO",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DetectOneDefinitionRule",
+    "switch": "ODR",
+    "comment": "Detect One Definition Rule violations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH:NO",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDLL",
+    "switch": "DLL",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AddModuleNamesToAssembly",
+    "switch": "ASSEMBLYMODULE:",
+    "comment": "Add Module to Assembly",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "EmbedManagedResourceFile",
+    "switch": "ASSEMBLYRESOURCE:",
+    "comment": "Embed Managed Resource File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DelayLoadDLLs",
+    "switch": "DELAYLOAD:",
+    "comment": "Delay Loaded Dlls",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AssemblyLinkResource",
+    "switch": "ASSEMBLYLINKRESOURCE:",
+    "comment": "Assembly Link Resource",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalManifestDependencies",
+    "switch": "MANIFESTDEPENDENCY:",
+    "comment": "Additional Manifest Dependencies",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ManifestInput",
+    "switch": "manifestinput:",
+    "comment": "Manifest Input",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Version",
+    "switch": "VERSION:",
+    "comment": "Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SpecifySectionAttributes",
+    "switch": "SECTION:",
+    "comment": "Specify Section Attributes",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MSDOSStubFileName",
+    "switch": "STUB:",
+    "comment": "MS-DOS Stub File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ManifestFile",
+    "switch": "ManifestFile:",
+    "comment": "Manifest File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDatabaseFile",
+    "switch": "PDB:",
+    "comment": "Generate Program Database File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StripPrivateSymbols",
+    "switch": "PDBSTRIPPED:",
+    "comment": "Strip Private Symbols",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MapFileName",
+    "switch": "MAP:",
+    "comment": "Map File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "HeapReserveSize",
+    "switch": "HEAP:",
+    "comment": "Heap Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "HeapCommitSize",
+    "switch": "HEAP",
+    "comment": "Heap Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "StackReserveSize",
+    "switch": "STACK:",
+    "comment": "Stack Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StackCommitSize",
+    "switch": "STACK",
+    "comment": "Stack Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "FunctionOrder",
+    "switch": "ORDER:@",
+    "comment": "Function Order",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProfileGuidedDatabase",
+    "switch": "PGD:",
+    "comment": "Profile Guided Database",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MidlCommandFile",
+    "switch": "MIDL:@",
+    "comment": "MIDL Commands",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergedIDLBaseFileName",
+    "switch": "IDLOUT:",
+    "comment": "Merged IDL Base File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryFile",
+    "switch": "TLBOUT:",
+    "comment": "Type Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataFile",
+    "switch": "WINMDFILE:",
+    "comment": "Windows Metadata File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataLinkKeyFile",
+    "switch": "WINMDKEYFILE:",
+    "comment": "Windows Metadata Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataKeyContainer",
+    "switch": "WINMDKEYCONTAINER:",
+    "comment": "Windows Metadata Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "EntryPointSymbol",
+    "switch": "ENTRY:",
+    "comment": "Entry Point",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "BaseAddress",
+    "switch": "BASE:",
+    "comment": "Base Address",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ImportLibrary",
+    "switch": "IMPLIB:",
+    "comment": "Import Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergeSections",
+    "switch": "MERGE:",
+    "comment": "Merge Sections",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "LinkKeyFile",
+    "switch": "KEYFILE:",
+    "comment": "Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "KeyContainer",
+    "switch": "KEYCONTAINER:",
+    "comment": "Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryResourceID",
+    "switch": "TLBID:",
+    "comment": "TypeLib Resource ID",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SectionAlignment",
+    "switch": "ALIGN:",
+    "comment": "SectionAlignment",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v12_MASM.json b/Templates/MSBuild/FlagTables/v12_MASM.json
new file mode 100644
index 0000000..4634306
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v12_MASM.json
@@ -0,0 +1,295 @@
+[
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "",
+    "comment": "Default",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "Cp",
+    "comment": "Preserves Identifier Case (/Cp)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "Cu",
+    "comment": "Maps all identifiers to upper case. (/Cu)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "Cx",
+    "comment": "Preserves case in public and extern symbols. (/Cx)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W0",
+    "comment": "Warning Level 0 (/W0)",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W1",
+    "comment": "Warning Level 1 (/W1)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W2",
+    "comment": "Warning Level 2 (/W2)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W3",
+    "comment": "Warning Level 3 (/W3)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "",
+    "comment": "Default",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp1",
+    "comment": "One Byte Boundary (/Zp1)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp2",
+    "comment": "Two Byte Boundary (/Zp2)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp4",
+    "comment": "Four Byte Boundary (/Zp4)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp8",
+    "comment": "Eight Byte Boundary (/Zp8)",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp16",
+    "comment": "Sixteen Byte Boundary (/Zp16)",
+    "value": "5",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "",
+    "comment": "Default",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gd",
+    "comment": "Use C-style Calling Convention (/Gd)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gz",
+    "comment": "Use stdcall Calling Convention (/Gz)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gc",
+    "comment": "Use Pascal Calling Convention (/Gc)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:prompt",
+    "comment": "Prompt to send report immediately (/errorReport:prompt)",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:queue",
+    "comment": "Prompt to send report at the next logon (/errorReport:queue)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:send",
+    "comment": "Automatically send report (/errorReport:send)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:none",
+    "comment": "Do not send report (/errorReport:none)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "NoLogo",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GeneratePreprocessedSourceListing",
+    "switch": "EP",
+    "comment": "Generate Preprocessed Source Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ListAllAvailableInformation",
+    "switch": "Sa",
+    "comment": "List All Available Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseSafeExceptionHandlers",
+    "switch": "safeseh",
+    "comment": "Use Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AddFirstPassListing",
+    "switch": "Sf",
+    "comment": "Add First Pass Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableAssemblyGeneratedCodeListing",
+    "switch": "Sg",
+    "comment": "Enable Assembly Generated Code Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DisableSymbolTable",
+    "switch": "Sn",
+    "comment": "Disable Symbol Table",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableFalseConditionalsInListing",
+    "switch": "Sx",
+    "comment": "Enable False Conditionals In Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningsAsErrors",
+    "switch": "WX",
+    "comment": "Treat Warnings As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MakeAllSymbolsPublic",
+    "switch": "Zf",
+    "comment": "Make All Symbols Public",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "Zi",
+    "comment": "Generate Debug Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableMASM51Compatibility",
+    "switch": "Zm",
+    "comment": "Enable MASM 5.1 Compatibility",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PerformSyntaxCheckOnly",
+    "switch": "Zs",
+    "comment": "Perform Syntax Check Only",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IncludePaths",
+    "switch": "I",
+    "comment": "Include Paths",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "BrowseFile",
+    "switch": "FR",
+    "comment": "Generate Browse Information File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ObjectFileName",
+    "switch": "Fo",
+    "comment": "Object File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "AssembledCodeListingFile",
+    "switch": "Fl",
+    "comment": "Assembled Code Listing File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v12_RC.json b/Templates/MSBuild/FlagTables/v12_RC.json
new file mode 100644
index 0000000..b8c0127
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v12_RC.json
@@ -0,0 +1,69 @@
+[
+  {
+    "name": "IgnoreStandardIncludePath",
+    "switch": "X",
+    "comment": "Ignore Standard Include Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "v",
+    "comment": "Show Progress",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NullTerminateStrings",
+    "switch": "n",
+    "comment": "Null Terminate Strings",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "UndefinePreprocessorDefinitions",
+    "switch": "u",
+    "comment": "Undefine Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalIncludeDirectories",
+    "switch": "I",
+    "comment": "Additional Include Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ResourceOutputFileName",
+    "switch": "fo",
+    "comment": "Resource File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v140_CL.json b/Templates/MSBuild/FlagTables/v140_CL.json
new file mode 100644
index 0000000..3dc9f35
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v140_CL.json
@@ -0,0 +1,1184 @@
+[
+  {
+    "name": "DebugInformationFormat",
+    "switch": "",
+    "comment": "None",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Z7",
+    "comment": "C7 compatible",
+    "value": "OldStyle",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Zi",
+    "comment": "Program Database",
+    "value": "ProgramDatabase",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "ZI",
+    "comment": "Program Database for Edit And Continue",
+    "value": "EditAndContinue",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "",
+    "comment": "No Common Language RunTime Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr",
+    "comment": "Common Language RunTime Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:pure",
+    "comment": "Pure MSIL Common Language RunTime Support",
+    "value": "Pure",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:safe",
+    "comment": "Safe MSIL Common Language RunTime Support",
+    "value": "Safe",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W0",
+    "comment": "Turn Off All Warnings",
+    "value": "TurnOffAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W1",
+    "comment": "Level1",
+    "value": "Level1",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W2",
+    "comment": "Level2",
+    "value": "Level2",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W3",
+    "comment": "Level3",
+    "value": "Level3",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W4",
+    "comment": "Level4",
+    "value": "Level4",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "Wall",
+    "comment": "EnableAllWarnings",
+    "value": "EnableAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "",
+    "comment": "Custom",
+    "value": "Custom",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Od",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O1",
+    "comment": "Minimize Size",
+    "value": "MinSpace",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O2",
+    "comment": "Maximize Speed",
+    "value": "MaxSpeed",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Ox",
+    "comment": "Full Optimization",
+    "value": "Full",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob0",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob1",
+    "comment": "Only __inline",
+    "value": "OnlyExplicitInline",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob2",
+    "comment": "Any Suitable",
+    "value": "AnySuitable",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Os",
+    "comment": "Favor small code",
+    "value": "Size",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Ot",
+    "comment": "Favor fast code",
+    "value": "Speed",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "",
+    "comment": "Neither",
+    "value": "Neither",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHa",
+    "comment": "Yes with SEH Exceptions",
+    "value": "Async",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHsc",
+    "comment": "Yes",
+    "value": "Sync",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHs",
+    "comment": "Yes with Extern C functions",
+    "value": "SyncCThrow",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCs",
+    "comment": "Stack Frames",
+    "value": "StackFrameRuntimeCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCu",
+    "comment": "Uninitialized variables",
+    "value": "UninitializedLocalUsageCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTC1",
+    "comment": "Both (/RTC1, equiv. to /RTCsu)",
+    "value": "EnableFastChecks",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MT",
+    "comment": "Multi-threaded",
+    "value": "MultiThreaded",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MTd",
+    "comment": "Multi-threaded Debug",
+    "value": "MultiThreadedDebug",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MD",
+    "comment": "Multi-threaded DLL",
+    "value": "MultiThreadedDLL",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MDd",
+    "comment": "Multi-threaded Debug DLL",
+    "value": "MultiThreadedDebugDLL",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp1",
+    "comment": "1 Byte",
+    "value": "1Byte",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp2",
+    "comment": "2 Bytes",
+    "value": "2Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp4",
+    "comment": "4 Byte",
+    "value": "4Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp8",
+    "comment": "8 Bytes",
+    "value": "8Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp16",
+    "comment": "16 Bytes",
+    "value": "16Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS-",
+    "comment": "Disable Security Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS",
+    "comment": "Enable Security Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ControlFlowGuard",
+    "switch": "guard:cf",
+    "comment": "Yes",
+    "value": "Guard",
+    "flags": []
+  },
+  {
+    "name": "ControlFlowGuard",
+    "switch": "",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE",
+    "comment": "Streaming SIMD Extensions",
+    "value": "StreamingSIMDExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE2",
+    "comment": "Streaming SIMD Extensions 2",
+    "value": "StreamingSIMDExtensions2",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:AVX",
+    "comment": "Advanced Vector Extensions",
+    "value": "AdvancedVectorExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:AVX2",
+    "comment": "Advanced Vector Extensions 2",
+    "value": "AdvancedVectorExtensions2",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:IA32",
+    "comment": "No Enhanced Instructions",
+    "value": "NoExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:precise",
+    "comment": "Precise",
+    "value": "Precise",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:strict",
+    "comment": "Strict",
+    "value": "Strict",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:fast",
+    "comment": "Fast",
+    "value": "Fast",
+    "flags": []
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yc",
+    "comment": "Create",
+    "value": "Create",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yu",
+    "comment": "Use",
+    "value": "Use",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Y-",
+    "comment": "Not Using Precompiled Headers",
+    "value": "NotUsing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "",
+    "comment": "No Listing",
+    "value": "NoListing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FA",
+    "comment": "Assembly-Only Listing",
+    "value": "AssemblyCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAc",
+    "comment": "Assembly With Machine Code",
+    "value": "AssemblyAndMachineCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAs",
+    "comment": "Assembly With Source Code",
+    "value": "AssemblyAndSourceCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAcs",
+    "comment": "Assembly, Machine Code and Source",
+    "value": "All",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gd",
+    "comment": "__cdecl",
+    "value": "Cdecl",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gr",
+    "comment": "__fastcall",
+    "value": "FastCall",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gz",
+    "comment": "__stdcall",
+    "value": "StdCall",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gv",
+    "comment": "__vectorcall",
+    "value": "VectorCall",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TC",
+    "comment": "Compile as C Code",
+    "value": "CompileAsC",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TP",
+    "comment": "Compile as C++ Code",
+    "value": "CompileAsCpp",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:none",
+    "comment": "Do Not Send Report",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "Prompt",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:queue",
+    "comment": "Queue For Next Login",
+    "value": "Queue",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:send",
+    "comment": "Send Automatically",
+    "value": "Send",
+    "flags": []
+  },
+  {
+    "name": "CompileAsWinRT",
+    "switch": "ZW",
+    "comment": "Consume Windows Runtime Extension",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WinRTNoStdLib",
+    "switch": "ZW:nostdlib",
+    "comment": "No Standard WinRT Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX-",
+    "comment": "Treat Warnings As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX",
+    "comment": "Treat Warnings As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SDLCheck",
+    "switch": "sdl-",
+    "comment": "SDL checks",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SDLCheck",
+    "switch": "sdl",
+    "comment": "SDL checks",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MultiProcessorCompilation",
+    "switch": "MP",
+    "comment": "Multi-processor Compilation",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "IntrinsicFunctions",
+    "switch": "Oi",
+    "comment": "Enable Intrinsic Functions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy-",
+    "comment": "Omit Frame Pointers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy",
+    "comment": "Omit Frame Pointers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableFiberSafeOptimizations",
+    "switch": "GT",
+    "comment": "Enable Fiber-Safe Optimizations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WholeProgramOptimization",
+    "switch": "GL",
+    "comment": "Whole Program Optimization",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UndefineAllPreprocessorDefinitions",
+    "switch": "u",
+    "comment": "Undefine All Preprocessor Definitions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreStandardIncludePath",
+    "switch": "X",
+    "comment": "Ignore Standard Include Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessToFile",
+    "switch": "P",
+    "comment": "Preprocess to a File",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessSuppressLineNumbers",
+    "switch": "EP",
+    "comment": "Preprocess Suppress Line Numbers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessKeepComments",
+    "switch": "C",
+    "comment": "Keep Comments",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF-",
+    "comment": "Enable String Pooling",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF",
+    "comment": "Enable String Pooling",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm-",
+    "comment": "Enable Minimal Rebuild",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm",
+    "comment": "Enable Minimal Rebuild",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SmallerTypeCheck",
+    "switch": "RTCc",
+    "comment": "Smaller Type Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy-",
+    "comment": "Enable Function-Level Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy",
+    "comment": "Enable Function-Level Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableParallelCodeGeneration",
+    "switch": "Qpar-",
+    "comment": "Enable Parallel Code Generation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableParallelCodeGeneration",
+    "switch": "Qpar",
+    "comment": "Enable Parallel Code Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except-",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CreateHotpatchableImage",
+    "switch": "hotpatch",
+    "comment": "Create Hotpatchable Image",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DisableLanguageExtensions",
+    "switch": "Za",
+    "comment": "Disable Language Extensions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t-",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope-",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RemoveUnreferencedCodeData",
+    "switch": "Zc:inline-",
+    "comment": "Remove unreferenced code and data",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RemoveUnreferencedCodeData",
+    "switch": "Zc:inline",
+    "comment": "Remove unreferenced code and data",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnforceTypeConversionRules",
+    "switch": "Zc:rvalueCast-",
+    "comment": "Enforce type conversion rules",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnforceTypeConversionRules",
+    "switch": "Zc:rvalueCast",
+    "comment": "Enforce type conversion rules",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR-",
+    "comment": "Enable Run-Time Type Information",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR",
+    "comment": "Enable Run-Time Type Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp-",
+    "comment": "Open MP Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp",
+    "comment": "Open MP Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ExpandAttributedSource",
+    "switch": "Fx",
+    "comment": "Expand Attributed Source",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseUnicodeForAssemblerListing",
+    "switch": "FAu",
+    "comment": "Use Unicode For Assembler Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateXMLDocumentationFiles",
+    "switch": "doc",
+    "comment": "Generate XML Documentation Files",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "BrowseInformation",
+    "switch": "FR",
+    "comment": "Enable Browse Information",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "ShowIncludes",
+    "switch": "showIncludes",
+    "comment": "Show Includes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze-",
+    "comment": "Enable Code Analysis",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze",
+    "comment": "Enable Code Analysis",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseFullPaths",
+    "switch": "FC",
+    "comment": "Use Full Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitDefaultLibName",
+    "switch": "Zl",
+    "comment": "Omit Default Library Name",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalIncludeDirectories",
+    "switch": "I",
+    "comment": "Additional Include Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalUsingDirectories",
+    "switch": "AI",
+    "comment": "Additional #using Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "UndefinePreprocessorDefinitions",
+    "switch": "U",
+    "comment": "Undefine Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DisableSpecificWarnings",
+    "switch": "wd",
+    "comment": "Disable Specific Warnings",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedIncludeFiles",
+    "switch": "FI",
+    "comment": "Forced Include File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedUsingFiles",
+    "switch": "FU",
+    "comment": "Forced #using File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PREfastLog",
+    "switch": "analyze:log",
+    "comment": "Code Analysis Log",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name": "PREfastAdditionalPlugins",
+    "switch": "analyze:plugin",
+    "comment": "Additional Code Analysis Native plugins",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "TreatSpecificWarningsAsErrors",
+    "switch": "we",
+    "comment": "Treat Specific Warnings As Errors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "WarningVersion",
+    "switch": "Wv:",
+    "comment": "Warning Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PreprocessOutputPath",
+    "switch": "Fi",
+    "comment": "Preprocess Output Path",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yu",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yc",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderOutputFile",
+    "switch": "Fp",
+    "comment": "Precompiled Header Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "AssemblerListingLocation",
+    "switch": "Fa",
+    "comment": "ASM List Location",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ObjectFileName",
+    "switch": "Fo",
+    "comment": "Object File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDataBaseFileName",
+    "switch": "Fd",
+    "comment": "Program Database File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "XMLDocumentationFileName",
+    "switch": "doc",
+    "comment": "XML Documentation File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "BrowseInformationFile",
+    "switch": "FR",
+    "comment": "Browse Information File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "ProcessorNumber",
+    "switch": "MP",
+    "comment": "Number of processors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=c++98",
+    "comment": "C++03",
+    "value": "c++98",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=c++11",
+    "comment": "C++11",
+    "value": "c++11",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=c++1y",
+    "comment": "C++14",
+    "value": "c++1y",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=c++14",
+    "comment": "C++14",
+    "value": "c++1y",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=gnu++98",
+    "comment": "C++03 (GNU Dialect)",
+    "value": "gnu++98",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=gnu++11",
+    "comment": "C++11 (GNU Dialect)",
+    "value": "gnu++11",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=gnu++1y",
+    "comment": "C++14 (GNU Dialect)",
+    "value": "gnu++1y",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=gnu++14",
+    "comment": "C++14 (GNU Dialect)",
+    "value": "gnu++1y",
+    "flags": []
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v140_CSharp.json b/Templates/MSBuild/FlagTables/v140_CSharp.json
new file mode 100644
index 0000000..a0780a4
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v140_CSharp.json
@@ -0,0 +1,570 @@
+[
+  {
+    "name":  "ProjectName",
+    "switch": "out:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:exe",
+    "comment": "",
+    "value": "Exe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:winexe",
+    "comment": "",
+    "value": "Winexe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:library",
+    "comment": "",
+    "value": "Library",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:module",
+    "comment": "",
+    "value": "Module",
+    "flags": []
+  },
+  {
+    "name":  "DocumentationFile",
+    "switch": "doc",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x86",
+    "comment": "",
+    "value": "x86",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:Itanium",
+    "comment": "",
+    "value": "Itanium",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x64",
+    "comment": "",
+    "value": "x64",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:arm",
+    "comment": "",
+    "value": "arm",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu32bitpreferred",
+    "comment": "",
+    "value": "anycpu32bitpreferred",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu",
+    "comment": "",
+    "value": "anycpu",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "mit alias",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "dateiliste",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AddModules",
+    "switch": "addmodule:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "Win32Resource",
+    "switch": "win32res:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationIcon",
+    "switch": "win32icon:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationManifest",
+    "switch": "win32manifest:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "NoWin32Manifest",
+    "switch": "nowin32manifest",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineDebug",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:none",
+    "comment": "",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:full",
+    "comment": "",
+    "value": "full",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:pdbonly",
+    "comment": "",
+    "value": "pdbonly",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:0",
+    "comment": "",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:1",
+    "comment": "",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:2",
+    "comment": "",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "DisabledWarnings",
+    "switch": "nowarn",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineConstants",
+    "switch": "define:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable",
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:ISO-1",
+    "comment": "",
+    "value": "ISO-1",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:ISO-2",
+    "comment": "",
+    "value": "ISO-2",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:5",
+    "comment": "",
+    "value": "5",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:6",
+    "comment": "",
+    "value": "6",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:default",
+    "comment": "",
+    "value": "default",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AssemblyOriginatorKeyFile",
+    "switch": "keyfile",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "KeyContainerName",
+    "switch": "keycontainer",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoLogo",
+    "switch": "nologo",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoConfig",
+    "switch": "noconfig",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "BaseAddress",
+    "switch": "baseaddress:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CodePage",
+    "switch": "codepage",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "Utf8Output",
+    "switch": "utf8output",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "MainEntryPoint",
+    "switch": "main:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "GenerateFullPaths",
+    "switch": "fullpaths",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "FileAlignment",
+    "switch": "filealign",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "PdbFile",
+    "switch": "pdb:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "SubsystemVersion",
+    "switch": "subsystemversion",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AdditionalLibPaths",
+    "switch": "lib:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:none",
+    "comment": "Do Not Send Report",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "prompt",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:queue",
+    "comment": "Queue For Next Login",
+    "value": "queue",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:send",
+    "comment": "Send Automatically",
+    "value": "send",
+    "flags": []
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v140_Link.json b/Templates/MSBuild/FlagTables/v140_Link.json
new file mode 100644
index 0000000..3fb072c
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v140_Link.json
@@ -0,0 +1,1316 @@
+[
+  {
+    "name": "ShowProgress",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE",
+    "comment": "Display all progress messages",
+    "value": "LinkVerbose",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:Lib",
+    "comment": "For Libraries Searched",
+    "value": "LinkVerboseLib",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:ICF",
+    "comment": "About COMDAT folding during optimized linking",
+    "value": "LinkVerboseICF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:REF",
+    "comment": "About data removed during optimized linking",
+    "value": "LinkVerboseREF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:SAFESEH",
+    "comment": "About Modules incompatible with SEH",
+    "value": "LinkVerboseSAFESEH",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:CLR",
+    "comment": "About linker activity related to managed code",
+    "value": "LinkVerboseCLR",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:MULTIPLE",
+    "comment": "Multiply Defined Symbol Only",
+    "value": "MultiplyDefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:UNRESOLVED",
+    "comment": "Undefined Symbol Only",
+    "value": "UndefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:5",
+    "comment": "X86 Image Only",
+    "value": "X86Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:6",
+    "comment": "X64 Image Only",
+    "value": "X64Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:16",
+    "comment": "Itanium Image Only",
+    "value": "ItaniumImage",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='asInvoker'",
+    "comment": "asInvoker",
+    "value": "AsInvoker",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='highestAvailable'",
+    "comment": "highestAvailable",
+    "value": "HighestAvailable",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='requireAdministrator'",
+    "comment": "requireAdministrator",
+    "value": "RequireAdministrator",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG",
+    "comment": "Optimize for debugging",
+    "value": "true",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:FASTLINK",
+    "comment": "Optimize for faster linking",
+    "value": "DebugFastLink",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:FULL",
+    "comment": "Optimize for debugging",
+    "value": "true",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:NONE",
+    "comment": "Produces no debugging information",
+    "value": "false",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "SubSystem",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "Driver",
+    "comment": "Driver",
+    "value": "Driver",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:UPONLY",
+    "comment": "UP Only",
+    "value": "UpOnly",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:WDM",
+    "comment": "WDM",
+    "value": "WDM",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:incremental",
+    "comment": "Use Fast Link Time Code Generation",
+    "value": "UseFastLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Use Link Time Code Generation",
+    "value": "UseLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGInstrument",
+    "comment": "Profile Guided Optimization - Instrument",
+    "value": "PGInstrument",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGOptimize",
+    "comment": "Profile Guided Optimization - Optimization",
+    "value": "PGOptimization",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGUpdate",
+    "comment": "Profile Guided Optimization - Update",
+    "value": "PGUpdate",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD",
+    "comment": "Yes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD:NO",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:MTA",
+    "comment": "MTA threading attribute",
+    "value": "MTAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:STA",
+    "comment": "STA threading attribute",
+    "value": "STAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:NONE",
+    "comment": "Default threading attribute",
+    "value": "DefaultThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:IJW",
+    "comment": "Force IJW image",
+    "value": "ForceIJWImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:PURE",
+    "comment": "Force Pure IL Image",
+    "value": "ForcePureILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:SAFE",
+    "comment": "Force Safe IL Image",
+    "value": "ForceSafeILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "",
+    "comment": "Default image type",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:NO",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:SYSTEMDLL",
+    "comment": "System Dlls Only",
+    "value": "SystemDlls",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL:NO",
+    "comment": "Enable Incremental Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL",
+    "comment": "Enable Incremental Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:NOSTATUS",
+    "comment": "Link Status",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:STATUS",
+    "comment": "Link Status",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND:NO",
+    "comment": "Prevent Dll Binding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND",
+    "comment": "Prevent Dll Binding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST:NO",
+    "comment": "Generate Manifest",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST",
+    "comment": "Generate Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "ALLOWISOLATION:NO",
+    "comment": "Allow Isolation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "",
+    "comment": "Allow Isolation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableUAC",
+    "switch": "MANIFESTUAC:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "SpaceAppendable"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='true'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ManifestEmbed",
+    "switch": "manifest:embed",
+    "comment": "Embed Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateMapFile",
+    "switch": "MAP",
+    "comment": "Generate Map File",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "MapExports",
+    "switch": "MAPINFO:EXPORTS",
+    "comment": "Map Exports",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG:DISABLE",
+    "comment": "Debuggable Assembly",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG",
+    "comment": "Debuggable Assembly",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE:NO",
+    "comment": "Enable Large Addresses",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE",
+    "comment": "Enable Large Addresses",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE:NO",
+    "comment": "Terminal Server",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE",
+    "comment": "Terminal Server",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromCD",
+    "switch": "SWAPRUN:CD",
+    "comment": "Swap Run From CD",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromNET",
+    "switch": "SWAPRUN:NET",
+    "comment": "Swap Run From Network",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:NOREF",
+    "comment": "References",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:REF",
+    "comment": "References",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:NOICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:ICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreEmbeddedIDL",
+    "switch": "IGNOREIDL",
+    "comment": "Ignore Embedded IDL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AppContainer",
+    "switch": "APPCONTAINER",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN:NO",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NoEntryPoint",
+    "switch": "NOENTRY",
+    "comment": "No Entry Point",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SetChecksum",
+    "switch": "RELEASE",
+    "comment": "Set Checksum",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE:NO",
+    "comment": "Randomized Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE",
+    "comment": "Randomized Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED:NO",
+    "comment": "Fixed Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED",
+    "comment": "Fixed Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT:NO",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TurnOffAssemblyGeneration",
+    "switch": "NOASSEMBLY",
+    "comment": "Turn Off Assembly Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportUnloadOfDelayLoadedDLL",
+    "switch": "DELAY:UNLOAD",
+    "comment": "Unload delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportNobindOfDelayLoadedDLL",
+    "switch": "DELAY:NOBIND",
+    "comment": "Nobind delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Profile",
+    "switch": "PROFILE",
+    "comment": "Profile",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN:NO",
+    "comment": "Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN",
+    "comment": "Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK:NO",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DetectOneDefinitionRule",
+    "switch": "ODR",
+    "comment": "Detect One Definition Rule violations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH:NO",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDLL",
+    "switch": "DLL",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "Natvis",
+    "switch": "NATVIS:",
+    "comment": "Natvis files",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AddModuleNamesToAssembly",
+    "switch": "ASSEMBLYMODULE:",
+    "comment": "Add Module to Assembly",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "EmbedManagedResourceFile",
+    "switch": "ASSEMBLYRESOURCE:",
+    "comment": "Embed Managed Resource File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DelayLoadDLLs",
+    "switch": "DELAYLOAD:",
+    "comment": "Delay Loaded Dlls",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AssemblyLinkResource",
+    "switch": "ASSEMBLYLINKRESOURCE:",
+    "comment": "Assembly Link Resource",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalManifestDependencies",
+    "switch": "MANIFESTDEPENDENCY:",
+    "comment": "Additional Manifest Dependencies",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ManifestInput",
+    "switch": "manifestinput:",
+    "comment": "Manifest Input",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Version",
+    "switch": "VERSION:",
+    "comment": "Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SpecifySectionAttributes",
+    "switch": "SECTION:",
+    "comment": "Specify Section Attributes",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MSDOSStubFileName",
+    "switch": "STUB:",
+    "comment": "MS-DOS Stub File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ManifestFile",
+    "switch": "ManifestFile:",
+    "comment": "Manifest File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDatabaseFile",
+    "switch": "PDB:",
+    "comment": "Generate Program Database File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StripPrivateSymbols",
+    "switch": "PDBSTRIPPED:",
+    "comment": "Strip Private Symbols",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MapFileName",
+    "switch": "MAP:",
+    "comment": "Map File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "HeapReserveSize",
+    "switch": "HEAP:",
+    "comment": "Heap Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "HeapCommitSize",
+    "switch": "HEAP",
+    "comment": "Heap Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "StackReserveSize",
+    "switch": "STACK:",
+    "comment": "Stack Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StackCommitSize",
+    "switch": "STACK",
+    "comment": "Stack Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "FunctionOrder",
+    "switch": "ORDER:@",
+    "comment": "Function Order",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProfileGuidedDatabase",
+    "switch": "PGD:",
+    "comment": "Profile Guided Database",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MidlCommandFile",
+    "switch": "MIDL:@",
+    "comment": "MIDL Commands",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergedIDLBaseFileName",
+    "switch": "IDLOUT:",
+    "comment": "Merged IDL Base File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryFile",
+    "switch": "TLBOUT:",
+    "comment": "Type Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataFile",
+    "switch": "WINMDFILE:",
+    "comment": "Windows Metadata File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataLinkKeyFile",
+    "switch": "WINMDKEYFILE:",
+    "comment": "Windows Metadata Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataKeyContainer",
+    "switch": "WINMDKEYCONTAINER:",
+    "comment": "Windows Metadata Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "EntryPointSymbol",
+    "switch": "ENTRY:",
+    "comment": "Entry Point",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "BaseAddress",
+    "switch": "BASE:",
+    "comment": "Base Address",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ImportLibrary",
+    "switch": "IMPLIB:",
+    "comment": "Import Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergeSections",
+    "switch": "MERGE:",
+    "comment": "Merge Sections",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "LinkKeyFile",
+    "switch": "KEYFILE:",
+    "comment": "Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "KeyContainer",
+    "switch": "KEYCONTAINER:",
+    "comment": "Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryResourceID",
+    "switch": "TLBID:",
+    "comment": "TypeLib Resource ID",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SectionAlignment",
+    "switch": "ALIGN:",
+    "comment": "SectionAlignment",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v141_CL.json b/Templates/MSBuild/FlagTables/v141_CL.json
new file mode 100644
index 0000000..01fafe4
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v141_CL.json
@@ -0,0 +1,1268 @@
+[
+  {
+    "name": "DebugInformationFormat",
+    "switch": "",
+    "comment": "None",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Z7",
+    "comment": "C7 compatible",
+    "value": "OldStyle",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Zi",
+    "comment": "Program Database",
+    "value": "ProgramDatabase",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "ZI",
+    "comment": "Program Database for Edit And Continue",
+    "value": "EditAndContinue",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "",
+    "comment": "No Common Language RunTime Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr",
+    "comment": "Common Language RunTime Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:pure",
+    "comment": "Pure MSIL Common Language RunTime Support",
+    "value": "Pure",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:safe",
+    "comment": "Safe MSIL Common Language RunTime Support",
+    "value": "Safe",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W0",
+    "comment": "Turn Off All Warnings",
+    "value": "TurnOffAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W1",
+    "comment": "Level1",
+    "value": "Level1",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W2",
+    "comment": "Level2",
+    "value": "Level2",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W3",
+    "comment": "Level3",
+    "value": "Level3",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W4",
+    "comment": "Level4",
+    "value": "Level4",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "Wall",
+    "comment": "EnableAllWarnings",
+    "value": "EnableAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "DiagnosticsFormat",
+    "switch": "diagnostics:caret",
+    "comment": "Caret",
+    "value": "Caret",
+    "flags": []
+  },
+  {
+    "name": "DiagnosticsFormat",
+    "switch": "diagnostics:column",
+    "comment": "Column Info",
+    "value": "Column",
+    "flags": []
+  },
+  {
+    "name": "DiagnosticsFormat",
+    "switch": "diagnostics:classic",
+    "comment": "Classic",
+    "value": "Classic",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "",
+    "comment": "Custom",
+    "value": "Custom",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Od",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O1",
+    "comment": "Maximum Optimization (Favor Size)",
+    "value": "MinSpace",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O2",
+    "comment": "Maximum Optimization (Favor Speed)",
+    "value": "MaxSpeed",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Ox",
+    "comment": "Optimizations (Favor Speed)",
+    "value": "Full",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob0",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob1",
+    "comment": "Only __inline",
+    "value": "OnlyExplicitInline",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob2",
+    "comment": "Any Suitable",
+    "value": "AnySuitable",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Os",
+    "comment": "Favor small code",
+    "value": "Size",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Ot",
+    "comment": "Favor fast code",
+    "value": "Speed",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "",
+    "comment": "Neither",
+    "value": "Neither",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHa",
+    "comment": "Yes with SEH Exceptions",
+    "value": "Async",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHsc",
+    "comment": "Yes",
+    "value": "Sync",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHs",
+    "comment": "Yes with Extern C functions",
+    "value": "SyncCThrow",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCs",
+    "comment": "Stack Frames",
+    "value": "StackFrameRuntimeCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCu",
+    "comment": "Uninitialized variables",
+    "value": "UninitializedLocalUsageCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTC1",
+    "comment": "Both (/RTC1, equiv. to /RTCsu)",
+    "value": "EnableFastChecks",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MT",
+    "comment": "Multi-threaded",
+    "value": "MultiThreaded",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MTd",
+    "comment": "Multi-threaded Debug",
+    "value": "MultiThreadedDebug",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MD",
+    "comment": "Multi-threaded DLL",
+    "value": "MultiThreadedDLL",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MDd",
+    "comment": "Multi-threaded Debug DLL",
+    "value": "MultiThreadedDebugDLL",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp1",
+    "comment": "1 Byte",
+    "value": "1Byte",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp2",
+    "comment": "2 Bytes",
+    "value": "2Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp4",
+    "comment": "4 Byte",
+    "value": "4Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp8",
+    "comment": "8 Bytes",
+    "value": "8Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp16",
+    "comment": "16 Bytes",
+    "value": "16Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS-",
+    "comment": "Disable Security Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS",
+    "comment": "Enable Security Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ControlFlowGuard",
+    "switch": "guard:cf",
+    "comment": "Yes",
+    "value": "Guard",
+    "flags": []
+  },
+  {
+    "name": "ControlFlowGuard",
+    "switch": "",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE",
+    "comment": "Streaming SIMD Extensions",
+    "value": "StreamingSIMDExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE2",
+    "comment": "Streaming SIMD Extensions 2",
+    "value": "StreamingSIMDExtensions2",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:AVX",
+    "comment": "Advanced Vector Extensions",
+    "value": "AdvancedVectorExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:AVX2",
+    "comment": "Advanced Vector Extensions 2",
+    "value": "AdvancedVectorExtensions2",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:IA32",
+    "comment": "No Enhanced Instructions",
+    "value": "NoExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:precise",
+    "comment": "Precise",
+    "value": "Precise",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:strict",
+    "comment": "Strict",
+    "value": "Strict",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:fast",
+    "comment": "Fast",
+    "value": "Fast",
+    "flags": []
+  },
+  {
+    "name": "SpectreMitigation",
+    "switch": "Qspectre",
+    "comment": "Spectre mitigations",
+    "value": "Spectre",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard",
+    "switch": "std:c++14",
+    "comment": "ISO C++14 Standard",
+    "value": "stdcpp14",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard",
+    "switch": "std:c++17",
+    "comment": "ISO C++17 Standard",
+    "value": "stdcpp17",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard",
+    "switch": "std:c++latest",
+    "comment": "ISO C++ Latest Draft Standard",
+    "value": "stdcpplatest",
+    "flags": []
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yc",
+    "comment": "Create",
+    "value": "Create",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yu",
+    "comment": "Use",
+    "value": "Use",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Y-",
+    "comment": "Not Using Precompiled Headers",
+    "value": "NotUsing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "",
+    "comment": "No Listing",
+    "value": "NoListing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FA",
+    "comment": "Assembly-Only Listing",
+    "value": "AssemblyCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAc",
+    "comment": "Assembly With Machine Code",
+    "value": "AssemblyAndMachineCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAs",
+    "comment": "Assembly With Source Code",
+    "value": "AssemblyAndSourceCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAcs",
+    "comment": "Assembly, Machine Code and Source",
+    "value": "All",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gd",
+    "comment": "__cdecl",
+    "value": "Cdecl",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gr",
+    "comment": "__fastcall",
+    "value": "FastCall",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gz",
+    "comment": "__stdcall",
+    "value": "StdCall",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gv",
+    "comment": "__vectorcall",
+    "value": "VectorCall",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TC",
+    "comment": "Compile as C Code",
+    "value": "CompileAsC",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TP",
+    "comment": "Compile as C++ Code",
+    "value": "CompileAsCpp",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:none",
+    "comment": "Do Not Send Report",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "Prompt",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:queue",
+    "comment": "Queue For Next Login",
+    "value": "Queue",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:send",
+    "comment": "Send Automatically",
+    "value": "Send",
+    "flags": []
+  },
+  {
+    "name": "CompileAsWinRT",
+    "switch": "ZW",
+    "comment": "Consume Windows Runtime Extension",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WinRTNoStdLib",
+    "switch": "ZW:nostdlib",
+    "comment": "No Standard WinRT Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX-",
+    "comment": "Treat Warnings As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX",
+    "comment": "Treat Warnings As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SDLCheck",
+    "switch": "sdl-",
+    "comment": "SDL checks",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SDLCheck",
+    "switch": "sdl",
+    "comment": "SDL checks",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MultiProcessorCompilation",
+    "switch": "MP",
+    "comment": "Multi-processor Compilation",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "IntrinsicFunctions",
+    "switch": "Oi",
+    "comment": "Enable Intrinsic Functions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy-",
+    "comment": "Omit Frame Pointers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy",
+    "comment": "Omit Frame Pointers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableFiberSafeOptimizations",
+    "switch": "GT",
+    "comment": "Enable Fiber-Safe Optimizations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WholeProgramOptimization",
+    "switch": "GL",
+    "comment": "Whole Program Optimization",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UndefineAllPreprocessorDefinitions",
+    "switch": "u",
+    "comment": "Undefine All Preprocessor Definitions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreStandardIncludePath",
+    "switch": "X",
+    "comment": "Ignore Standard Include Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessToFile",
+    "switch": "P",
+    "comment": "Preprocess to a File",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessSuppressLineNumbers",
+    "switch": "EP",
+    "comment": "Preprocess Suppress Line Numbers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessKeepComments",
+    "switch": "C",
+    "comment": "Keep Comments",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF-",
+    "comment": "Enable String Pooling",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF",
+    "comment": "Enable String Pooling",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm-",
+    "comment": "Enable Minimal Rebuild",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm",
+    "comment": "Enable Minimal Rebuild",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SmallerTypeCheck",
+    "switch": "RTCc",
+    "comment": "Smaller Type Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy-",
+    "comment": "Enable Function-Level Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy",
+    "comment": "Enable Function-Level Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableParallelCodeGeneration",
+    "switch": "Qpar-",
+    "comment": "Enable Parallel Code Generation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableParallelCodeGeneration",
+    "switch": "Qpar",
+    "comment": "Enable Parallel Code Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except-",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CreateHotpatchableImage",
+    "switch": "hotpatch",
+    "comment": "Create Hotpatchable Image",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DisableLanguageExtensions",
+    "switch": "Za",
+    "comment": "Disable Language Extensions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ConformanceMode",
+    "switch": "permissive-",
+    "comment": "Conformance mode enabled",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ConformanceMode",
+    "switch": "permissive",
+    "comment": "Conformance mode disabled",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t-",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope-",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RemoveUnreferencedCodeData",
+    "switch": "Zc:inline-",
+    "comment": "Remove unreferenced code and data",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RemoveUnreferencedCodeData",
+    "switch": "Zc:inline",
+    "comment": "Remove unreferenced code and data",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnforceTypeConversionRules",
+    "switch": "Zc:rvalueCast-",
+    "comment": "Enforce type conversion rules",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnforceTypeConversionRules",
+    "switch": "Zc:rvalueCast",
+    "comment": "Enforce type conversion rules",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR-",
+    "comment": "Enable Run-Time Type Information",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR",
+    "comment": "Enable Run-Time Type Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp-",
+    "comment": "Open MP Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp",
+    "comment": "Open MP Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableModules",
+    "switch": "experimental:module",
+    "comment": "Enable C++ Modules (experimental)",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ExpandAttributedSource",
+    "switch": "Fx",
+    "comment": "Expand Attributed Source",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseUnicodeForAssemblerListing",
+    "switch": "FAu",
+    "comment": "Use Unicode For Assembler Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateXMLDocumentationFiles",
+    "switch": "doc",
+    "comment": "Generate XML Documentation Files",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "BrowseInformation",
+    "switch": "FR",
+    "comment": "Enable Browse Information",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "ShowIncludes",
+    "switch": "showIncludes",
+    "comment": "Show Includes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze-",
+    "comment": "Enable Code Analysis",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze",
+    "comment": "Enable Code Analysis",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseFullPaths",
+    "switch": "FC",
+    "comment": "Use Full Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitDefaultLibName",
+    "switch": "Zl",
+    "comment": "Omit Default Library Name",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalIncludeDirectories",
+    "switch": "I",
+    "comment": "Additional Include Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalUsingDirectories",
+    "switch": "AI",
+    "comment": "Additional #using Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "UndefinePreprocessorDefinitions",
+    "switch": "U",
+    "comment": "Undefine Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DisableSpecificWarnings",
+    "switch": "wd",
+    "comment": "Disable Specific Warnings",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedIncludeFiles",
+    "switch": "FI",
+    "comment": "Forced Include File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedUsingFiles",
+    "switch": "FU",
+    "comment": "Forced #using File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PREfastLog",
+    "switch": "analyze:log",
+    "comment": "Code Analysis Log",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name": "PREfastAdditionalPlugins",
+    "switch": "analyze:plugin",
+    "comment": "Additional Code Analysis Native plugins",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "TreatSpecificWarningsAsErrors",
+    "switch": "we",
+    "comment": "Treat Specific Warnings As Errors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "WarningVersion",
+    "switch": "Wv:",
+    "comment": "Warning Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PreprocessOutputPath",
+    "switch": "Fi",
+    "comment": "Preprocess Output Path",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yu",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yc",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderOutputFile",
+    "switch": "Fp",
+    "comment": "Precompiled Header Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "AssemblerListingLocation",
+    "switch": "Fa",
+    "comment": "ASM List Location",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ObjectFileName",
+    "switch": "Fo",
+    "comment": "Object File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDataBaseFileName",
+    "switch": "Fd",
+    "comment": "Program Database File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "XMLDocumentationFileName",
+    "switch": "doc",
+    "comment": "XML Documentation File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "BrowseInformationFile",
+    "switch": "FR",
+    "comment": "Browse Information File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "ProcessorNumber",
+    "switch": "MP",
+    "comment": "Number of processors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=c++98",
+    "comment": "C++03",
+    "value": "c++98",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=c++11",
+    "comment": "C++11",
+    "value": "c++11",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=c++1y",
+    "comment": "C++14",
+    "value": "c++1y",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=c++14",
+    "comment": "C++14",
+    "value": "c++1y",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=gnu++98",
+    "comment": "C++03 (GNU Dialect)",
+    "value": "gnu++98",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=gnu++11",
+    "comment": "C++11 (GNU Dialect)",
+    "value": "gnu++11",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=gnu++1y",
+    "comment": "C++14 (GNU Dialect)",
+    "value": "gnu++1y",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=gnu++14",
+    "comment": "C++14 (GNU Dialect)",
+    "value": "gnu++1y",
+    "flags": []
+  },
+  {
+    "name": "SupportJustMyCode",
+    "switch": "JMC-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SupportJustMyCode",
+    "switch": "JMC",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v141_CSharp.json b/Templates/MSBuild/FlagTables/v141_CSharp.json
new file mode 100644
index 0000000..a0780a4
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v141_CSharp.json
@@ -0,0 +1,570 @@
+[
+  {
+    "name":  "ProjectName",
+    "switch": "out:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:exe",
+    "comment": "",
+    "value": "Exe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:winexe",
+    "comment": "",
+    "value": "Winexe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:library",
+    "comment": "",
+    "value": "Library",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:module",
+    "comment": "",
+    "value": "Module",
+    "flags": []
+  },
+  {
+    "name":  "DocumentationFile",
+    "switch": "doc",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x86",
+    "comment": "",
+    "value": "x86",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:Itanium",
+    "comment": "",
+    "value": "Itanium",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x64",
+    "comment": "",
+    "value": "x64",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:arm",
+    "comment": "",
+    "value": "arm",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu32bitpreferred",
+    "comment": "",
+    "value": "anycpu32bitpreferred",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu",
+    "comment": "",
+    "value": "anycpu",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "mit alias",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "dateiliste",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AddModules",
+    "switch": "addmodule:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "Win32Resource",
+    "switch": "win32res:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationIcon",
+    "switch": "win32icon:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationManifest",
+    "switch": "win32manifest:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "NoWin32Manifest",
+    "switch": "nowin32manifest",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineDebug",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:none",
+    "comment": "",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:full",
+    "comment": "",
+    "value": "full",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:pdbonly",
+    "comment": "",
+    "value": "pdbonly",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:0",
+    "comment": "",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:1",
+    "comment": "",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:2",
+    "comment": "",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "DisabledWarnings",
+    "switch": "nowarn",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineConstants",
+    "switch": "define:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable",
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:ISO-1",
+    "comment": "",
+    "value": "ISO-1",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:ISO-2",
+    "comment": "",
+    "value": "ISO-2",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:5",
+    "comment": "",
+    "value": "5",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:6",
+    "comment": "",
+    "value": "6",
+    "flags": []
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:default",
+    "comment": "",
+    "value": "default",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AssemblyOriginatorKeyFile",
+    "switch": "keyfile",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "KeyContainerName",
+    "switch": "keycontainer",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoLogo",
+    "switch": "nologo",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoConfig",
+    "switch": "noconfig",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "BaseAddress",
+    "switch": "baseaddress:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CodePage",
+    "switch": "codepage",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "Utf8Output",
+    "switch": "utf8output",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "MainEntryPoint",
+    "switch": "main:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "GenerateFullPaths",
+    "switch": "fullpaths",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "FileAlignment",
+    "switch": "filealign",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "PdbFile",
+    "switch": "pdb:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "SubsystemVersion",
+    "switch": "subsystemversion",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AdditionalLibPaths",
+    "switch": "lib:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:none",
+    "comment": "Do Not Send Report",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "prompt",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:queue",
+    "comment": "Queue For Next Login",
+    "value": "queue",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:send",
+    "comment": "Send Automatically",
+    "value": "send",
+    "flags": []
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v141_Link.json b/Templates/MSBuild/FlagTables/v141_Link.json
new file mode 100644
index 0000000..66ee76f
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v141_Link.json
@@ -0,0 +1,1323 @@
+[
+  {
+    "name": "ShowProgress",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE",
+    "comment": "Display all progress messages",
+    "value": "LinkVerbose",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:Lib",
+    "comment": "For Libraries Searched",
+    "value": "LinkVerboseLib",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:ICF",
+    "comment": "About COMDAT folding during optimized linking",
+    "value": "LinkVerboseICF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:REF",
+    "comment": "About data removed during optimized linking",
+    "value": "LinkVerboseREF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:SAFESEH",
+    "comment": "About Modules incompatible with SEH",
+    "value": "LinkVerboseSAFESEH",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:CLR",
+    "comment": "About linker activity related to managed code",
+    "value": "LinkVerboseCLR",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:MULTIPLE",
+    "comment": "Multiply Defined Symbol Only",
+    "value": "MultiplyDefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:UNRESOLVED",
+    "comment": "Undefined Symbol Only",
+    "value": "UndefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:5",
+    "comment": "X86 Image Only",
+    "value": "X86Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:6",
+    "comment": "X64 Image Only",
+    "value": "X64Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:16",
+    "comment": "Itanium Image Only",
+    "value": "ItaniumImage",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='asInvoker'",
+    "comment": "asInvoker",
+    "value": "AsInvoker",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='highestAvailable'",
+    "comment": "highestAvailable",
+    "value": "HighestAvailable",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='requireAdministrator'",
+    "comment": "requireAdministrator",
+    "value": "RequireAdministrator",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG",
+    "comment": "Generate Debug Information",
+    "value": "true",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:FASTLINK",
+    "comment": "Generate Debug Information optimized for faster links",
+    "value": "DebugFastLink",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:FULL",
+    "comment": "Generate Debug Information optimized for sharing and publishing",
+    "value": "DebugFull",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:NONE",
+    "comment": "Produces no debugging information",
+    "value": "false",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "SubSystem",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "Driver",
+    "comment": "Driver",
+    "value": "Driver",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:UPONLY",
+    "comment": "UP Only",
+    "value": "UpOnly",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:WDM",
+    "comment": "WDM",
+    "value": "WDM",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:incremental",
+    "comment": "Use Fast Link Time Code Generation",
+    "value": "UseFastLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Use Link Time Code Generation",
+    "value": "UseLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGInstrument",
+    "comment": "Profile Guided Optimization - Instrument",
+    "value": "PGInstrument",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGOptimize",
+    "comment": "Profile Guided Optimization - Optimization",
+    "value": "PGOptimization",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGUpdate",
+    "comment": "Profile Guided Optimization - Update",
+    "value": "PGUpdate",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD",
+    "comment": "Yes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD:NO",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM64",
+    "comment": "MachineARM64",
+    "value": "MachineARM64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:MTA",
+    "comment": "MTA threading attribute",
+    "value": "MTAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:STA",
+    "comment": "STA threading attribute",
+    "value": "STAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:NONE",
+    "comment": "Default threading attribute",
+    "value": "DefaultThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:IJW",
+    "comment": "Force IJW image",
+    "value": "ForceIJWImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:PURE",
+    "comment": "Force Pure IL Image",
+    "value": "ForcePureILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:SAFE",
+    "comment": "Force Safe IL Image",
+    "value": "ForceSafeILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "",
+    "comment": "Default image type",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:NO",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:SYSTEMDLL",
+    "comment": "System Dlls Only",
+    "value": "SystemDlls",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL:NO",
+    "comment": "Enable Incremental Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL",
+    "comment": "Enable Incremental Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:NOSTATUS",
+    "comment": "Link Status",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:STATUS",
+    "comment": "Link Status",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND:NO",
+    "comment": "Prevent Dll Binding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND",
+    "comment": "Prevent Dll Binding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST:NO",
+    "comment": "Generate Manifest",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST",
+    "comment": "Generate Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "ALLOWISOLATION:NO",
+    "comment": "Allow Isolation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "",
+    "comment": "Allow Isolation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableUAC",
+    "switch": "MANIFESTUAC:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "SpaceAppendable"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='true'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ManifestEmbed",
+    "switch": "manifest:embed",
+    "comment": "Embed Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateMapFile",
+    "switch": "MAP",
+    "comment": "Generate Map File",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "MapExports",
+    "switch": "MAPINFO:EXPORTS",
+    "comment": "Map Exports",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG:DISABLE",
+    "comment": "Debuggable Assembly",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG",
+    "comment": "Debuggable Assembly",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE:NO",
+    "comment": "Enable Large Addresses",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE",
+    "comment": "Enable Large Addresses",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE:NO",
+    "comment": "Terminal Server",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE",
+    "comment": "Terminal Server",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromCD",
+    "switch": "SWAPRUN:CD",
+    "comment": "Swap Run From CD",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromNET",
+    "switch": "SWAPRUN:NET",
+    "comment": "Swap Run From Network",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:NOREF",
+    "comment": "References",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:REF",
+    "comment": "References",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:NOICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:ICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreEmbeddedIDL",
+    "switch": "IGNOREIDL",
+    "comment": "Ignore Embedded IDL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AppContainer",
+    "switch": "APPCONTAINER",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN:NO",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NoEntryPoint",
+    "switch": "NOENTRY",
+    "comment": "No Entry Point",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SetChecksum",
+    "switch": "RELEASE",
+    "comment": "Set Checksum",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE:NO",
+    "comment": "Randomized Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE",
+    "comment": "Randomized Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED:NO",
+    "comment": "Fixed Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED",
+    "comment": "Fixed Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT:NO",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TurnOffAssemblyGeneration",
+    "switch": "NOASSEMBLY",
+    "comment": "Turn Off Assembly Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportUnloadOfDelayLoadedDLL",
+    "switch": "DELAY:UNLOAD",
+    "comment": "Unload delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportNobindOfDelayLoadedDLL",
+    "switch": "DELAY:NOBIND",
+    "comment": "Nobind delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Profile",
+    "switch": "PROFILE",
+    "comment": "Profile",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN:NO",
+    "comment": "Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN",
+    "comment": "Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK:NO",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DetectOneDefinitionRule",
+    "switch": "ODR",
+    "comment": "Detect One Definition Rule violations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH:NO",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDLL",
+    "switch": "DLL",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "Natvis",
+    "switch": "NATVIS:",
+    "comment": "Natvis files",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AddModuleNamesToAssembly",
+    "switch": "ASSEMBLYMODULE:",
+    "comment": "Add Module to Assembly",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "EmbedManagedResourceFile",
+    "switch": "ASSEMBLYRESOURCE:",
+    "comment": "Embed Managed Resource File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DelayLoadDLLs",
+    "switch": "DELAYLOAD:",
+    "comment": "Delay Loaded Dlls",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AssemblyLinkResource",
+    "switch": "ASSEMBLYLINKRESOURCE:",
+    "comment": "Assembly Link Resource",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalManifestDependencies",
+    "switch": "MANIFESTDEPENDENCY:",
+    "comment": "Additional Manifest Dependencies",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ManifestInput",
+    "switch": "manifestinput:",
+    "comment": "Manifest Input",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Version",
+    "switch": "VERSION:",
+    "comment": "Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SpecifySectionAttributes",
+    "switch": "SECTION:",
+    "comment": "Specify Section Attributes",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MSDOSStubFileName",
+    "switch": "STUB:",
+    "comment": "MS-DOS Stub File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ManifestFile",
+    "switch": "ManifestFile:",
+    "comment": "Manifest File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDatabaseFile",
+    "switch": "PDB:",
+    "comment": "Generate Program Database File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StripPrivateSymbols",
+    "switch": "PDBSTRIPPED:",
+    "comment": "Strip Private Symbols",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MapFileName",
+    "switch": "MAP:",
+    "comment": "Map File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "HeapReserveSize",
+    "switch": "HEAP:",
+    "comment": "Heap Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "HeapCommitSize",
+    "switch": "HEAP",
+    "comment": "Heap Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "StackReserveSize",
+    "switch": "STACK:",
+    "comment": "Stack Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StackCommitSize",
+    "switch": "STACK",
+    "comment": "Stack Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "FunctionOrder",
+    "switch": "ORDER:@",
+    "comment": "Function Order",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProfileGuidedDatabase",
+    "switch": "PGD:",
+    "comment": "Profile Guided Database",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MidlCommandFile",
+    "switch": "MIDL:@",
+    "comment": "MIDL Commands",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergedIDLBaseFileName",
+    "switch": "IDLOUT:",
+    "comment": "Merged IDL Base File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryFile",
+    "switch": "TLBOUT:",
+    "comment": "Type Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataFile",
+    "switch": "WINMDFILE:",
+    "comment": "Windows Metadata File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataLinkKeyFile",
+    "switch": "WINMDKEYFILE:",
+    "comment": "Windows Metadata Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataKeyContainer",
+    "switch": "WINMDKEYCONTAINER:",
+    "comment": "Windows Metadata Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "EntryPointSymbol",
+    "switch": "ENTRY:",
+    "comment": "Entry Point",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "BaseAddress",
+    "switch": "BASE:",
+    "comment": "Base Address",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ImportLibrary",
+    "switch": "IMPLIB:",
+    "comment": "Import Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergeSections",
+    "switch": "MERGE:",
+    "comment": "Merge Sections",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "LinkKeyFile",
+    "switch": "KEYFILE:",
+    "comment": "Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "KeyContainer",
+    "switch": "KEYCONTAINER:",
+    "comment": "Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryResourceID",
+    "switch": "TLBID:",
+    "comment": "TypeLib Resource ID",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SectionAlignment",
+    "switch": "ALIGN:",
+    "comment": "SectionAlignment",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v14_LIB.json b/Templates/MSBuild/FlagTables/v14_LIB.json
new file mode 100644
index 0000000..5990ed1
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v14_LIB.json
@@ -0,0 +1,304 @@
+[
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM64",
+    "comment": "MachineARM64",
+    "value": "MachineARM64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWSCE",
+    "comment": "WindowsCE",
+    "value": "WindowsCE",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLibWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Lib Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLibWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Lib Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Verbose",
+    "switch": "VERBOSE",
+    "comment": "Verbose",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Link Time Code Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ExportNamedFunctions",
+    "switch": "EXPORT:",
+    "comment": "Export Named Functions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "RemoveObjects",
+    "switch": "REMOVE:",
+    "comment": "Remove Objects",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "DisplayLibrary",
+    "switch": "LIST:",
+    "comment": "Display Library to standard output",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Name",
+    "switch": "NAME:",
+    "comment": "Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v14_MASM.json b/Templates/MSBuild/FlagTables/v14_MASM.json
new file mode 100644
index 0000000..4634306
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v14_MASM.json
@@ -0,0 +1,295 @@
+[
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "",
+    "comment": "Default",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "Cp",
+    "comment": "Preserves Identifier Case (/Cp)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "Cu",
+    "comment": "Maps all identifiers to upper case. (/Cu)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "PreserveIdentifierCase",
+    "switch": "Cx",
+    "comment": "Preserves case in public and extern symbols. (/Cx)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W0",
+    "comment": "Warning Level 0 (/W0)",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W1",
+    "comment": "Warning Level 1 (/W1)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W2",
+    "comment": "Warning Level 2 (/W2)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W3",
+    "comment": "Warning Level 3 (/W3)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "",
+    "comment": "Default",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp1",
+    "comment": "One Byte Boundary (/Zp1)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp2",
+    "comment": "Two Byte Boundary (/Zp2)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp4",
+    "comment": "Four Byte Boundary (/Zp4)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp8",
+    "comment": "Eight Byte Boundary (/Zp8)",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name": "PackAlignmentBoundary",
+    "switch": "Zp16",
+    "comment": "Sixteen Byte Boundary (/Zp16)",
+    "value": "5",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "",
+    "comment": "Default",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gd",
+    "comment": "Use C-style Calling Convention (/Gd)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gz",
+    "comment": "Use stdcall Calling Convention (/Gz)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gc",
+    "comment": "Use Pascal Calling Convention (/Gc)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:prompt",
+    "comment": "Prompt to send report immediately (/errorReport:prompt)",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:queue",
+    "comment": "Prompt to send report at the next logon (/errorReport:queue)",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:send",
+    "comment": "Automatically send report (/errorReport:send)",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:none",
+    "comment": "Do not send report (/errorReport:none)",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name": "NoLogo",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GeneratePreprocessedSourceListing",
+    "switch": "EP",
+    "comment": "Generate Preprocessed Source Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ListAllAvailableInformation",
+    "switch": "Sa",
+    "comment": "List All Available Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseSafeExceptionHandlers",
+    "switch": "safeseh",
+    "comment": "Use Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AddFirstPassListing",
+    "switch": "Sf",
+    "comment": "Add First Pass Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableAssemblyGeneratedCodeListing",
+    "switch": "Sg",
+    "comment": "Enable Assembly Generated Code Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DisableSymbolTable",
+    "switch": "Sn",
+    "comment": "Disable Symbol Table",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableFalseConditionalsInListing",
+    "switch": "Sx",
+    "comment": "Enable False Conditionals In Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningsAsErrors",
+    "switch": "WX",
+    "comment": "Treat Warnings As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MakeAllSymbolsPublic",
+    "switch": "Zf",
+    "comment": "Make All Symbols Public",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "Zi",
+    "comment": "Generate Debug Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableMASM51Compatibility",
+    "switch": "Zm",
+    "comment": "Enable MASM 5.1 Compatibility",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PerformSyntaxCheckOnly",
+    "switch": "Zs",
+    "comment": "Perform Syntax Check Only",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IncludePaths",
+    "switch": "I",
+    "comment": "Include Paths",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "BrowseFile",
+    "switch": "FR",
+    "comment": "Generate Browse Information File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ObjectFileName",
+    "switch": "Fo",
+    "comment": "Object File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "AssembledCodeListingFile",
+    "switch": "Fl",
+    "comment": "Assembled Code Listing File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Templates/MSBuild/FlagTables/v14_RC.json b/Templates/MSBuild/FlagTables/v14_RC.json
new file mode 100644
index 0000000..b8c0127
--- /dev/null
+++ b/Templates/MSBuild/FlagTables/v14_RC.json
@@ -0,0 +1,69 @@
+[
+  {
+    "name": "IgnoreStandardIncludePath",
+    "switch": "X",
+    "comment": "Ignore Standard Include Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "v",
+    "comment": "Show Progress",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NullTerminateStrings",
+    "switch": "n",
+    "comment": "Null Terminate Strings",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "UndefinePreprocessorDefinitions",
+    "switch": "u",
+    "comment": "Undefine Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalIncludeDirectories",
+    "switch": "I",
+    "comment": "Additional Include Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ResourceOutputFileName",
+    "switch": "fo",
+    "comment": "Resource File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 8b5f2e9..408c941 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -1441,6 +1441,10 @@
     add_subdirectory(FindODBC)
   endif()
 
+  if(CMake_TEST_FindOctave)
+    add_subdirectory(FindOctave)
+  endif()
+
   if(CMake_TEST_FindOpenCL)
     add_subdirectory(FindOpenCL)
   endif()
diff --git a/Tests/CMakeTests/StringTest.cmake.in b/Tests/CMakeTests/StringTest.cmake.in
index 566f4b1..154afa7 100644
--- a/Tests/CMakeTests/StringTest.cmake.in
+++ b/Tests/CMakeTests/StringTest.cmake.in
@@ -81,7 +81,7 @@
 # Execute each test listed in StringTestScript.cmake:
 #
 set(scriptname "@CMAKE_CURRENT_SOURCE_DIR@/StringTestScript.cmake")
-set(number_of_tests_expected 70)
+set(number_of_tests_expected 74)
 
 include("@CMAKE_CURRENT_SOURCE_DIR@/ExecuteScriptTests.cmake")
 execute_all_script_tests(${scriptname} number_of_tests_executed)
diff --git a/Tests/CMakeTests/StringTestScript.cmake b/Tests/CMakeTests/StringTestScript.cmake
index 44d5653..e069897 100644
--- a/Tests/CMakeTests/StringTestScript.cmake
+++ b/Tests/CMakeTests/StringTestScript.cmake
@@ -1,5 +1,18 @@
 message(STATUS "testname='${testname}'")
 
+function(test_configure_line_number EXPRESSION POLICY)
+  cmake_policy(PUSH)
+  cmake_policy(SET CMP0053 ${POLICY})
+  string(CONFIGURE
+  "${EXPRESSION}" v) # line should indicate string() call
+  math(EXPR vplus3 "${v} + 3")
+  if(NOT ${CMAKE_CURRENT_LIST_LINE} EQUAL ${vplus3})
+    message(SEND_ERROR "Couldn't configure CMAKE_CURRENT_LIST_LINE, evaluated into '${v}'")
+  endif()
+  message(STATUS "v='${v}'")
+  cmake_policy(POP)
+endfunction()
+
 if(testname STREQUAL empty) # fail
   string()
 
@@ -32,6 +45,18 @@
   string(CONFIGURE "this is @testname@" v ESCAPE_QUOTES)
   message(STATUS "v='${v}'")
 
+elseif(testname STREQUAL configure_line_number_CMP0053_old) # pass
+  test_configure_line_number("\${CMAKE_CURRENT_LIST_LINE}" OLD)
+
+elseif(testname STREQUAL configure_line_number_CMP0053_new) # pass
+  test_configure_line_number("\${CMAKE_CURRENT_LIST_LINE}" NEW)
+
+elseif(testname STREQUAL configure_line_number_CMP0053_old_use_at) # pass
+  test_configure_line_number("\@CMAKE_CURRENT_LIST_LINE\@" OLD)
+
+elseif(testname STREQUAL configure_line_number_CMP0053_new_use_at) # pass
+  test_configure_line_number("\@CMAKE_CURRENT_LIST_LINE\@" NEW)
+
 elseif(testname STREQUAL configure_bogus) # fail
   string(CONFIGURE "this is @testname@" v ESCAPE_QUOTES BOGUS)
 
diff --git a/Tests/CTestTestBadExe/CTestConfig.cmake b/Tests/CTestTestBadExe/CTestConfig.cmake
index fc5bffc..5bc1e9e 100644
--- a/Tests/CTestTestBadExe/CTestConfig.cmake
+++ b/Tests/CTestTestBadExe/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set (CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestBadGenerator/CTestConfig.cmake b/Tests/CTestTestBadGenerator/CTestConfig.cmake
index fc5bffc..5bc1e9e 100644
--- a/Tests/CTestTestBadGenerator/CTestConfig.cmake
+++ b/Tests/CTestTestBadGenerator/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set (CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestCostSerial/CTestConfig.cmake b/Tests/CTestTestCostSerial/CTestConfig.cmake
index faa91f0..bd265f9 100644
--- a/Tests/CTestTestCostSerial/CTestConfig.cmake
+++ b/Tests/CTestTestCostSerial/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set(CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestCrash/CTestConfig.cmake b/Tests/CTestTestCrash/CTestConfig.cmake
index fc5bffc..5bc1e9e 100644
--- a/Tests/CTestTestCrash/CTestConfig.cmake
+++ b/Tests/CTestTestCrash/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set (CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestCycle/CTestConfig.cmake b/Tests/CTestTestCycle/CTestConfig.cmake
index fc5bffc..5bc1e9e 100644
--- a/Tests/CTestTestCycle/CTestConfig.cmake
+++ b/Tests/CTestTestCycle/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set (CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestDepends/CTestConfig.cmake b/Tests/CTestTestDepends/CTestConfig.cmake
index fc5bffc..5bc1e9e 100644
--- a/Tests/CTestTestDepends/CTestConfig.cmake
+++ b/Tests/CTestTestDepends/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set (CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestFailure/CTestConfig.cmake b/Tests/CTestTestFailure/CTestConfig.cmake
index fc5bffc..5bc1e9e 100644
--- a/Tests/CTestTestFailure/CTestConfig.cmake
+++ b/Tests/CTestTestFailure/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set (CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestLaunchers/launcher_compiler_test_project/CTestConfig.cmake b/Tests/CTestTestLaunchers/launcher_compiler_test_project/CTestConfig.cmake
index 409d83a..c08eded 100644
--- a/Tests/CTestTestLaunchers/launcher_compiler_test_project/CTestConfig.cmake
+++ b/Tests/CTestTestLaunchers/launcher_compiler_test_project/CTestConfig.cmake
@@ -1,7 +1,5 @@
 set(CTEST_USE_LAUNCHERS 1)
 set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set(CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestLaunchers/launcher_custom_command_test_project/CTestConfig.cmake b/Tests/CTestTestLaunchers/launcher_custom_command_test_project/CTestConfig.cmake
index 409d83a..c08eded 100644
--- a/Tests/CTestTestLaunchers/launcher_custom_command_test_project/CTestConfig.cmake
+++ b/Tests/CTestTestLaunchers/launcher_custom_command_test_project/CTestConfig.cmake
@@ -1,7 +1,5 @@
 set(CTEST_USE_LAUNCHERS 1)
 set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set(CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestLaunchers/launcher_linker_test_project/CTestConfig.cmake b/Tests/CTestTestLaunchers/launcher_linker_test_project/CTestConfig.cmake
index 409d83a..c08eded 100644
--- a/Tests/CTestTestLaunchers/launcher_linker_test_project/CTestConfig.cmake
+++ b/Tests/CTestTestLaunchers/launcher_linker_test_project/CTestConfig.cmake
@@ -1,7 +1,5 @@
 set(CTEST_USE_LAUNCHERS 1)
 set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set(CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestParallel/CTestConfig.cmake b/Tests/CTestTestParallel/CTestConfig.cmake
index faa91f0..bd265f9 100644
--- a/Tests/CTestTestParallel/CTestConfig.cmake
+++ b/Tests/CTestTestParallel/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set(CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestResourceLock/CTestConfig.cmake b/Tests/CTestTestResourceLock/CTestConfig.cmake
index faa91f0..bd265f9 100644
--- a/Tests/CTestTestResourceLock/CTestConfig.cmake
+++ b/Tests/CTestTestResourceLock/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set(CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestScheduler/CTestConfig.cmake b/Tests/CTestTestScheduler/CTestConfig.cmake
index faa91f0..bd265f9 100644
--- a/Tests/CTestTestScheduler/CTestConfig.cmake
+++ b/Tests/CTestTestScheduler/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set(CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestSkipReturnCode/CTestConfig.cmake b/Tests/CTestTestSkipReturnCode/CTestConfig.cmake
index fc5bffc..5bc1e9e 100644
--- a/Tests/CTestTestSkipReturnCode/CTestConfig.cmake
+++ b/Tests/CTestTestSkipReturnCode/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set (CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestStopTime/CTestConfig.cmake b/Tests/CTestTestStopTime/CTestConfig.cmake
index fc5bffc..5bc1e9e 100644
--- a/Tests/CTestTestStopTime/CTestConfig.cmake
+++ b/Tests/CTestTestStopTime/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set (CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestSubdir/CTestConfig.cmake b/Tests/CTestTestSubdir/CTestConfig.cmake
index faa91f0..bd265f9 100644
--- a/Tests/CTestTestSubdir/CTestConfig.cmake
+++ b/Tests/CTestTestSubdir/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set(CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestTimeout/CTestConfig.cmake b/Tests/CTestTestTimeout/CTestConfig.cmake
index faa91f0..bd265f9 100644
--- a/Tests/CTestTestTimeout/CTestConfig.cmake
+++ b/Tests/CTestTestTimeout/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set(CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestUpload/CTestConfig.cmake b/Tests/CTestTestUpload/CTestConfig.cmake
index 95c79ff..21318b4 100644
--- a/Tests/CTestTestUpload/CTestConfig.cmake
+++ b/Tests/CTestTestUpload/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set (CTEST_DART_SERVER_VERSION "2")
 set (CTEST_DROP_METHOD "http")
 set (CTEST_DROP_SITE "open.cdash.org")
 set (CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set (CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestVerboseOutput/CTestConfig.cmake b/Tests/CTestTestVerboseOutput/CTestConfig.cmake
index faa91f0..bd265f9 100644
--- a/Tests/CTestTestVerboseOutput/CTestConfig.cmake
+++ b/Tests/CTestTestVerboseOutput/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set(CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestZeroTimeout/CTestConfig.cmake b/Tests/CTestTestZeroTimeout/CTestConfig.cmake
index faa91f0..bd265f9 100644
--- a/Tests/CTestTestZeroTimeout/CTestConfig.cmake
+++ b/Tests/CTestTestZeroTimeout/CTestConfig.cmake
@@ -1,6 +1,4 @@
 set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set(CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/FindCURL/Test/CMakeLists.txt b/Tests/FindCURL/Test/CMakeLists.txt
index c3c719b..cbf2866 100644
--- a/Tests/FindCURL/Test/CMakeLists.txt
+++ b/Tests/FindCURL/Test/CMakeLists.txt
@@ -2,7 +2,7 @@
 project(TestFindCURL C)
 include(CTest)
 
-find_package(CURL REQUIRED)
+find_package(CURL REQUIRED COMPONENTS HTTP)
 
 add_definitions(-DCMAKE_EXPECTED_CURL_VERSION="${CURL_VERSION_STRING}")
 
diff --git a/Tests/FindOctave/CMakeLists.txt b/Tests/FindOctave/CMakeLists.txt
new file mode 100644
index 0000000..1acc966
--- /dev/null
+++ b/Tests/FindOctave/CMakeLists.txt
@@ -0,0 +1,10 @@
+add_test(NAME FindOctave.Test COMMAND
+  ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
+  --build-and-test
+  "${CMake_SOURCE_DIR}/Tests/FindOctave/Test"
+  "${CMake_BINARY_DIR}/Tests/FindOctave/Test"
+  ${build_generator_args}
+  --build-project TestFindOctave
+  --build-options ${build_options}
+  --test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
+  )
diff --git a/Tests/FindOctave/Test/CMakeLists.txt b/Tests/FindOctave/Test/CMakeLists.txt
new file mode 100644
index 0000000..ce33fcd
--- /dev/null
+++ b/Tests/FindOctave/Test/CMakeLists.txt
@@ -0,0 +1,20 @@
+cmake_minimum_required(VERSION 3.3)
+project(TestFindOctave CXX)
+enable_testing()
+
+find_package(Octave REQUIRED COMPONENTS Development Interpreter)
+
+add_definitions(-DCMAKE_EXPECTED_Octave_VERSION=${Octave_VERSION})
+
+add_executable(test_tgt main.cpp)
+target_link_libraries(test_tgt Octave::Octave)
+add_test(NAME test_tgt COMMAND test_tgt)
+
+add_test(NAME test_tgt_exe
+         COMMAND Octave::Interpreter -q --eval "runtests('.')"
+         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+
+add_executable(test_var main.cpp)
+target_include_directories(test_var PRIVATE ${Octave_INCLUDE_DIRS})
+target_link_libraries(test_var PRIVATE ${Octave_LIBRARIES})
+add_test(NAME test_var COMMAND test_var)
diff --git a/Tests/FindOctave/Test/main.cpp b/Tests/FindOctave/Test/main.cpp
new file mode 100644
index 0000000..68270b1
--- /dev/null
+++ b/Tests/FindOctave/Test/main.cpp
@@ -0,0 +1,18 @@
+#include <iostream>
+#include <oct.h>
+
+// http://www.dm.unibo.it/~achilles/calc/octave.html/Standalone-Programs.html
+int main(void)
+{
+  int n = 2;
+  Matrix a_matrix = Matrix(n, n);
+  for (octave_idx_type i = 0; i < n; i++) {
+    for (octave_idx_type j = 0; j < n; j++) {
+      a_matrix(i, j) = (i + 1) * 10 + (j + 1);
+    }
+  }
+
+  std::cout << a_matrix << std::endl;
+
+  return EXIT_SUCCESS;
+}
diff --git a/Tests/FindOctave/Test/testtrue.m b/Tests/FindOctave/Test/testtrue.m
new file mode 100644
index 0000000..0c28a9e
--- /dev/null
+++ b/Tests/FindOctave/Test/testtrue.m
@@ -0,0 +1 @@
+%!assert(true)
diff --git a/Tests/FindThreads/C-only/CMakeLists.txt b/Tests/FindThreads/C-only/CMakeLists.txt
index ab4ca0d..ee2a5f9 100644
--- a/Tests/FindThreads/C-only/CMakeLists.txt
+++ b/Tests/FindThreads/C-only/CMakeLists.txt
@@ -1,7 +1,6 @@
 cmake_minimum_required(VERSION 3.3 FATAL_ERROR)
 project(FindThreads_C-only C)
 
-set(CMAKE_THREAD_PREFER_PTHREAD On)
 find_package(Threads REQUIRED)
 
 if (NOT WIN32)
diff --git a/Tests/FindThreads/CXX-only/CMakeLists.txt b/Tests/FindThreads/CXX-only/CMakeLists.txt
index 9993123..3c6cc1e 100644
--- a/Tests/FindThreads/CXX-only/CMakeLists.txt
+++ b/Tests/FindThreads/CXX-only/CMakeLists.txt
@@ -1,7 +1,6 @@
 cmake_minimum_required(VERSION 3.3 FATAL_ERROR)
 project(FindThreads_CXX-only CXX)
 
-set(CMAKE_THREAD_PREFER_PTHREAD On)
 find_package(Threads REQUIRED)
 
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../../../Modules/CheckForPthreads.c
diff --git a/Tests/QtAutogen/AutogenTest.cmake b/Tests/QtAutogen/AutogenCoreTest.cmake
similarity index 82%
copy from Tests/QtAutogen/AutogenTest.cmake
copy to Tests/QtAutogen/AutogenCoreTest.cmake
index 3969a89..5803859 100644
--- a/Tests/QtAutogen/AutogenTest.cmake
+++ b/Tests/QtAutogen/AutogenCoreTest.cmake
@@ -7,11 +7,11 @@
 endif()
 
 if (QT_TEST_VERSION EQUAL 4)
-  find_package(Qt4 REQUIRED)
+
+  find_package(Qt4 REQUIRED QtCore)
   include(UseQt4)
 
   set(QT_QTCORE_TARGET Qt4::QtCore)
-  set(QT_QTGUI_TARGET Qt4::QtGui)
 
   # Qt macros
   macro(qtx_wrap_cpp)
@@ -22,14 +22,16 @@
   endmacro()
 
 elseif(QT_TEST_VERSION EQUAL 5)
-  find_package(Qt5Widgets REQUIRED)
+
+  find_package(Qt5Core REQUIRED)
 
   set(QT_QTCORE_TARGET Qt5::Core)
-  set(QT_QTGUI_TARGET Qt5::Widgets)
+  set(QT_LIBRARIES Qt5::Core)
 
-  include_directories(${Qt5Widgets_INCLUDE_DIRS})
-  set(QT_LIBRARIES Qt5::Widgets)
+  # Include directories
+  include_directories(${Qt5Core_INCLUDE_DIRS})
 
+  # Definitions
   if(Qt5_POSITION_INDEPENDENT_CODE AND CMAKE_CXX_COMPILE_OPTIONS_PIC)
     add_definitions(${CMAKE_CXX_COMPILE_OPTIONS_PIC})
   endif()
diff --git a/Tests/QtAutogen/AutogenTest.cmake b/Tests/QtAutogen/AutogenGuiTest.cmake
similarity index 94%
rename from Tests/QtAutogen/AutogenTest.cmake
rename to Tests/QtAutogen/AutogenGuiTest.cmake
index 3969a89..b76d341 100644
--- a/Tests/QtAutogen/AutogenTest.cmake
+++ b/Tests/QtAutogen/AutogenGuiTest.cmake
@@ -7,11 +7,11 @@
 endif()
 
 if (QT_TEST_VERSION EQUAL 4)
+
   find_package(Qt4 REQUIRED)
   include(UseQt4)
 
   set(QT_QTCORE_TARGET Qt4::QtCore)
-  set(QT_QTGUI_TARGET Qt4::QtGui)
 
   # Qt macros
   macro(qtx_wrap_cpp)
@@ -22,14 +22,16 @@
   endmacro()
 
 elseif(QT_TEST_VERSION EQUAL 5)
+
   find_package(Qt5Widgets REQUIRED)
 
   set(QT_QTCORE_TARGET Qt5::Core)
-  set(QT_QTGUI_TARGET Qt5::Widgets)
-
-  include_directories(${Qt5Widgets_INCLUDE_DIRS})
   set(QT_LIBRARIES Qt5::Widgets)
 
+  # Include directories
+  include_directories(${Qt5Widgets_INCLUDE_DIRS})
+
+  # Definitions
   if(Qt5_POSITION_INDEPENDENT_CODE AND CMAKE_CXX_COMPILE_OPTIONS_PIC)
     add_definitions(${CMAKE_CXX_COMPILE_OPTIONS_PIC})
   endif()
diff --git a/Tests/QtAutogen/AutogenOriginDependsOff/CMakeLists.txt b/Tests/QtAutogen/AutogenOriginDependsOff/CMakeLists.txt
index 1c2271a..9e6fe8b 100644
--- a/Tests/QtAutogen/AutogenOriginDependsOff/CMakeLists.txt
+++ b/Tests/QtAutogen/AutogenOriginDependsOff/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.11)
 project(AutogenOriginDependsOff)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 set(CSD ${CMAKE_CURRENT_SOURCE_DIR})
 set(CBD ${CMAKE_CURRENT_BINARY_DIR})
diff --git a/Tests/QtAutogen/AutogenOriginDependsOn/CMakeLists.txt b/Tests/QtAutogen/AutogenOriginDependsOn/CMakeLists.txt
index 60869eb..5aabe0e 100644
--- a/Tests/QtAutogen/AutogenOriginDependsOn/CMakeLists.txt
+++ b/Tests/QtAutogen/AutogenOriginDependsOn/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(AutogenOriginDependsOn)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 include_directories(${CMAKE_CURRENT_BINARY_DIR})
 set(CSD ${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/Tests/QtAutogen/AutogenTargetDepends/CMakeLists.txt b/Tests/QtAutogen/AutogenTargetDepends/CMakeLists.txt
index 63b7c98..492b5db 100644
--- a/Tests/QtAutogen/AutogenTargetDepends/CMakeLists.txt
+++ b/Tests/QtAutogen/AutogenTargetDepends/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(AutogenTargetDepends)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 include_directories(${CMAKE_CURRENT_BINARY_DIR})
 set(CSD ${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/Tests/QtAutogen/Complex/CMakeLists.txt b/Tests/QtAutogen/Complex/CMakeLists.txt
index a18cc04..d9fdf5c 100644
--- a/Tests/QtAutogen/Complex/CMakeLists.txt
+++ b/Tests/QtAutogen/Complex/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(Complex)
-include("../AutogenTest.cmake")
+include("../AutogenGuiTest.cmake")
 
 # -- Test: AUTOMOC AUTORCC AUTOUIC
 add_definitions(-DFOO -DSomeDefine="Barx")
diff --git a/Tests/QtAutogen/GlobalAutogenTarget/CMakeLists.txt b/Tests/QtAutogen/GlobalAutogenTarget/CMakeLists.txt
index e020673..cff7022 100644
--- a/Tests/QtAutogen/GlobalAutogenTarget/CMakeLists.txt
+++ b/Tests/QtAutogen/GlobalAutogenTarget/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.12)
 project(GlobalAutogenTarget)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # This tests
 # CMAKE_GLOBAL_AUTOGEN_TARGET,
diff --git a/Tests/QtAutogen/GlobalAutogenTarget/GAT/CMakeLists.txt b/Tests/QtAutogen/GlobalAutogenTarget/GAT/CMakeLists.txt
index b1008e8..3925197 100644
--- a/Tests/QtAutogen/GlobalAutogenTarget/GAT/CMakeLists.txt
+++ b/Tests/QtAutogen/GlobalAutogenTarget/GAT/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.12)
 project(GAT)
-include("../../AutogenTest.cmake")
+include("../../AutogenCoreTest.cmake")
 
 # Include directories
 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/Tests/QtAutogen/LowMinimumVersion/CMakeLists.txt b/Tests/QtAutogen/LowMinimumVersion/CMakeLists.txt
index a6ac338..e1af3d8 100644
--- a/Tests/QtAutogen/LowMinimumVersion/CMakeLists.txt
+++ b/Tests/QtAutogen/LowMinimumVersion/CMakeLists.txt
@@ -1,7 +1,7 @@
 # Use a low minimum version
 cmake_minimum_required(VERSION 3.0)
 project(LowMinimumVersion)
-include("../AutogenTest.cmake")
+include("../AutogenGuiTest.cmake")
 
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTOUIC ON)
diff --git a/Tests/QtAutogen/MacOsFW/CMakeLists.txt b/Tests/QtAutogen/MacOsFW/CMakeLists.txt
index 26d2019..c08efc4 100644
--- a/Tests/QtAutogen/MacOsFW/CMakeLists.txt
+++ b/Tests/QtAutogen/MacOsFW/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(MacOsFW)
-include("../AutogenTest.cmake")
+include("../AutogenGuiTest.cmake")
 
 find_package(Qt5Test REQUIRED)
 
diff --git a/Tests/QtAutogen/MocCMP0071/CMakeLists.txt b/Tests/QtAutogen/MocCMP0071/CMakeLists.txt
index a79f36e..5c58a82 100644
--- a/Tests/QtAutogen/MocCMP0071/CMakeLists.txt
+++ b/Tests/QtAutogen/MocCMP0071/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(MocCMP0071)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 add_subdirectory(OLD)
 add_subdirectory(NEW)
diff --git a/Tests/QtAutogen/MocIncludeRelaxed/CMakeLists.txt b/Tests/QtAutogen/MocIncludeRelaxed/CMakeLists.txt
index 1ad6238..8b4da34 100644
--- a/Tests/QtAutogen/MocIncludeRelaxed/CMakeLists.txt
+++ b/Tests/QtAutogen/MocIncludeRelaxed/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(MocIncludeRelaxed)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # Test moc include patterns
 set(CMAKE_AUTOMOC_RELAXED_MODE TRUE)
diff --git a/Tests/QtAutogen/MocIncludeStrict/CMakeLists.txt b/Tests/QtAutogen/MocIncludeStrict/CMakeLists.txt
index 2cf0fed..d0aaebf 100644
--- a/Tests/QtAutogen/MocIncludeStrict/CMakeLists.txt
+++ b/Tests/QtAutogen/MocIncludeStrict/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(MocIncludeStrict)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # Test moc include patterns
 set(CMAKE_AUTOMOC_RELAXED_MODE FALSE)
diff --git a/Tests/QtAutogen/MocMacroName/CMakeLists.txt b/Tests/QtAutogen/MocMacroName/CMakeLists.txt
index f0251a2..bf13d18 100644
--- a/Tests/QtAutogen/MocMacroName/CMakeLists.txt
+++ b/Tests/QtAutogen/MocMacroName/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(MocMacroName)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # Test CMAKE_AUTOMOC_MACRO_NAMES and AUTOMOC_MACRO_NAMES
 list(APPEND CMAKE_AUTOMOC_MACRO_NAMES "QO1_ALIAS")
diff --git a/Tests/QtAutogen/MocOnly/CMakeLists.txt b/Tests/QtAutogen/MocOnly/CMakeLists.txt
index 5377728..e109154 100644
--- a/Tests/QtAutogen/MocOnly/CMakeLists.txt
+++ b/Tests/QtAutogen/MocOnly/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(MocOnly)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 add_executable(mocOnly
   main.cpp
diff --git a/Tests/QtAutogen/MocOptions/CMakeLists.txt b/Tests/QtAutogen/MocOptions/CMakeLists.txt
index f64b37b..19ee658 100644
--- a/Tests/QtAutogen/MocOptions/CMakeLists.txt
+++ b/Tests/QtAutogen/MocOptions/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(MocOptions)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # Test extra options passed to moc via AUTOMOC_MOC_OPTIONS
 add_executable(mocOptions Object.cpp main.cpp)
diff --git a/Tests/QtAutogen/MocOsMacros/CMakeLists.txt b/Tests/QtAutogen/MocOsMacros/CMakeLists.txt
index e7b670e..b0125f6 100644
--- a/Tests/QtAutogen/MocOsMacros/CMakeLists.txt
+++ b/Tests/QtAutogen/MocOsMacros/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.11)
 project(MocOsMacros)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # Tests if moc processes Q_OS_XXX macros
 
diff --git a/Tests/QtAutogen/MocSkipSource/CMakeLists.txt b/Tests/QtAutogen/MocSkipSource/CMakeLists.txt
index 8d1fa6a..454e896 100644
--- a/Tests/QtAutogen/MocSkipSource/CMakeLists.txt
+++ b/Tests/QtAutogen/MocSkipSource/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(MocSkipSource)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # Test for SKIP_AUTOMOC and SKIP_AUTOGEN on an AUTOMOC enabled target
 
diff --git a/Tests/QtAutogen/ObjectLibrary/CMakeLists.txt b/Tests/QtAutogen/ObjectLibrary/CMakeLists.txt
index 088a24c..ec204e7 100644
--- a/Tests/QtAutogen/ObjectLibrary/CMakeLists.txt
+++ b/Tests/QtAutogen/ObjectLibrary/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(ObjectLibrary)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 set(CMAKE_AUTOMOC ON)
diff --git a/Tests/QtAutogen/Parallel/CMakeLists.txt b/Tests/QtAutogen/Parallel/CMakeLists.txt
index 9c64804..299bcbf 100644
--- a/Tests/QtAutogen/Parallel/CMakeLists.txt
+++ b/Tests/QtAutogen/Parallel/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(Parallel)
-include("../AutogenTest.cmake")
+include("../AutogenGuiTest.cmake")
 
 # Test different values for AUTOGEN_PARALLEL
 include("../Parallel/parallel.cmake")
diff --git a/Tests/QtAutogen/Parallel1/CMakeLists.txt b/Tests/QtAutogen/Parallel1/CMakeLists.txt
index 9c0b4e5..5c7d547 100644
--- a/Tests/QtAutogen/Parallel1/CMakeLists.txt
+++ b/Tests/QtAutogen/Parallel1/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(Parallel1)
-include("../AutogenTest.cmake")
+include("../AutogenGuiTest.cmake")
 
 # Test different values for AUTOGEN_PARALLEL
 include("../Parallel/parallel.cmake")
diff --git a/Tests/QtAutogen/Parallel2/CMakeLists.txt b/Tests/QtAutogen/Parallel2/CMakeLists.txt
index 74c38f1..668aea4 100644
--- a/Tests/QtAutogen/Parallel2/CMakeLists.txt
+++ b/Tests/QtAutogen/Parallel2/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(Parallel2)
-include("../AutogenTest.cmake")
+include("../AutogenGuiTest.cmake")
 
 # Test different values for AUTOGEN_PARALLEL
 include("../Parallel/parallel.cmake")
diff --git a/Tests/QtAutogen/Parallel3/CMakeLists.txt b/Tests/QtAutogen/Parallel3/CMakeLists.txt
index c735531..5c50f5e 100644
--- a/Tests/QtAutogen/Parallel3/CMakeLists.txt
+++ b/Tests/QtAutogen/Parallel3/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(Parallel3)
-include("../AutogenTest.cmake")
+include("../AutogenGuiTest.cmake")
 
 # Test different values for AUTOGEN_PARALLEL
 include("../Parallel/parallel.cmake")
diff --git a/Tests/QtAutogen/Parallel4/CMakeLists.txt b/Tests/QtAutogen/Parallel4/CMakeLists.txt
index c012ccd..2c40c6a 100644
--- a/Tests/QtAutogen/Parallel4/CMakeLists.txt
+++ b/Tests/QtAutogen/Parallel4/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(Parallel4)
-include("../AutogenTest.cmake")
+include("../AutogenGuiTest.cmake")
 
 # Test different values for AUTOGEN_PARALLEL
 include("../Parallel/parallel.cmake")
diff --git a/Tests/QtAutogen/ParallelAUTO/CMakeLists.txt b/Tests/QtAutogen/ParallelAUTO/CMakeLists.txt
index 3fd3ebc..cddece3 100644
--- a/Tests/QtAutogen/ParallelAUTO/CMakeLists.txt
+++ b/Tests/QtAutogen/ParallelAUTO/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(ParallelAUTO)
-include("../AutogenTest.cmake")
+include("../AutogenGuiTest.cmake")
 
 # Test different values for AUTOGEN_PARALLEL
 include("../Parallel/parallel.cmake")
diff --git a/Tests/QtAutogen/RccEmpty/CMakeLists.txt b/Tests/QtAutogen/RccEmpty/CMakeLists.txt
index 3b16edc..a8e2af1 100644
--- a/Tests/QtAutogen/RccEmpty/CMakeLists.txt
+++ b/Tests/QtAutogen/RccEmpty/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(RccEmpty)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # Test AUTORCC on a .qrc file with no resource files
 add_executable(rccEmpty rccEmpty.cpp rccEmptyRes.qrc)
diff --git a/Tests/QtAutogen/RccOffMocLibrary/CMakeLists.txt b/Tests/QtAutogen/RccOffMocLibrary/CMakeLists.txt
index 7f7432e..61b9601 100644
--- a/Tests/QtAutogen/RccOffMocLibrary/CMakeLists.txt
+++ b/Tests/QtAutogen/RccOffMocLibrary/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(RccOffMocLibrary)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # Add not_generated_file.qrc to the source list to get the file-level
 # dependency, but don't generate a c++ file from it.  Disable the AUTORCC
diff --git a/Tests/QtAutogen/RccOnly/CMakeLists.txt b/Tests/QtAutogen/RccOnly/CMakeLists.txt
index a65dee4..f3776f5 100644
--- a/Tests/QtAutogen/RccOnly/CMakeLists.txt
+++ b/Tests/QtAutogen/RccOnly/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(RccOnly)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # Test AUTORCC being enabled only
 add_executable(rccOnly rccOnly.cpp rccOnlyRes.qrc)
diff --git a/Tests/QtAutogen/RccSkipSource/CMakeLists.txt b/Tests/QtAutogen/RccSkipSource/CMakeLists.txt
index f8a8032..4223274 100644
--- a/Tests/QtAutogen/RccSkipSource/CMakeLists.txt
+++ b/Tests/QtAutogen/RccSkipSource/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(RccSkipSource)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # Test for SKIP_AUTORCC and SKIP_AUTOGEN on an AUTORCC enabled target
 set(skipRccSources
diff --git a/Tests/QtAutogen/RerunMocBasic/CMakeLists.txt b/Tests/QtAutogen/RerunMocBasic/CMakeLists.txt
index 6fad80c..f4b726f 100644
--- a/Tests/QtAutogen/RerunMocBasic/CMakeLists.txt
+++ b/Tests/QtAutogen/RerunMocBasic/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(RerunMocBasic)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # Dummy executable to generate a clean target
 add_executable(dummy dummy.cpp)
diff --git a/Tests/QtAutogen/RerunMocBasic/MocBasic/CMakeLists.txt b/Tests/QtAutogen/RerunMocBasic/MocBasic/CMakeLists.txt
index cec60a4..6a9f550 100644
--- a/Tests/QtAutogen/RerunMocBasic/MocBasic/CMakeLists.txt
+++ b/Tests/QtAutogen/RerunMocBasic/MocBasic/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(MocBasic)
-include("../../AutogenTest.cmake")
+include("../../AutogenCoreTest.cmake")
 
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTORCC ON)
diff --git a/Tests/QtAutogen/RerunMocPlugin/CMakeLists.txt b/Tests/QtAutogen/RerunMocPlugin/CMakeLists.txt
index b5287c1..b83e994 100644
--- a/Tests/QtAutogen/RerunMocPlugin/CMakeLists.txt
+++ b/Tests/QtAutogen/RerunMocPlugin/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(RerunMocPlugin)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # Tests Q_PLUGIN_METADATA and CMAKE_AUTOMOC_DEPEND_FILTERS
 # json file change detection
diff --git a/Tests/QtAutogen/RerunMocPlugin/MocPlugin/CMakeLists.txt b/Tests/QtAutogen/RerunMocPlugin/MocPlugin/CMakeLists.txt
index ca22aeb..5068289 100644
--- a/Tests/QtAutogen/RerunMocPlugin/MocPlugin/CMakeLists.txt
+++ b/Tests/QtAutogen/RerunMocPlugin/MocPlugin/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(MocPlugin)
-include("../../AutogenTest.cmake")
+include("../../AutogenGuiTest.cmake")
 
 if (QT_TEST_VERSION LESS 5)
   message(SEND_ERROR "Qt 5 or higher required.")
diff --git a/Tests/QtAutogen/RerunRccConfigChange/CMakeLists.txt b/Tests/QtAutogen/RerunRccConfigChange/CMakeLists.txt
index 4dc24fe..dcb7a79 100644
--- a/Tests/QtAutogen/RerunRccConfigChange/CMakeLists.txt
+++ b/Tests/QtAutogen/RerunRccConfigChange/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.11.2)
 project(RerunRccConfigChange)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # Tests rcc rebuilding after a configuration change
 
diff --git a/Tests/QtAutogen/RerunRccConfigChange/RccConfigChange/CMakeLists.txt b/Tests/QtAutogen/RerunRccConfigChange/RccConfigChange/CMakeLists.txt
index 3cddf5c..e2dd0ac 100644
--- a/Tests/QtAutogen/RerunRccConfigChange/RccConfigChange/CMakeLists.txt
+++ b/Tests/QtAutogen/RerunRccConfigChange/RccConfigChange/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.11.2)
 project(RccConfigChange)
-include("../../AutogenTest.cmake")
+include("../../AutogenCoreTest.cmake")
 
 # Enable AUTORCC for all targets
 set(CMAKE_AUTORCC ON)
diff --git a/Tests/QtAutogen/RerunRccDepends/CMakeLists.txt b/Tests/QtAutogen/RerunRccDepends/CMakeLists.txt
index 4268de2..80c5cf0 100644
--- a/Tests/QtAutogen/RerunRccDepends/CMakeLists.txt
+++ b/Tests/QtAutogen/RerunRccDepends/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(RerunRccDepends)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # Tests rcc rebuilding when a resource file changes
 
diff --git a/Tests/QtAutogen/RerunRccDepends/RccDepends/CMakeLists.txt b/Tests/QtAutogen/RerunRccDepends/RccDepends/CMakeLists.txt
index 0507e61..150f849 100644
--- a/Tests/QtAutogen/RerunRccDepends/RccDepends/CMakeLists.txt
+++ b/Tests/QtAutogen/RerunRccDepends/RccDepends/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(RccDepends)
-include("../../AutogenTest.cmake")
+include("../../AutogenCoreTest.cmake")
 
 # Enable AUTORCC for all targets
 set(CMAKE_AUTORCC ON)
diff --git a/Tests/QtAutogen/SameName/CMakeLists.txt b/Tests/QtAutogen/SameName/CMakeLists.txt
index 931e40f..6d42499 100644
--- a/Tests/QtAutogen/SameName/CMakeLists.txt
+++ b/Tests/QtAutogen/SameName/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(SameName)
-include("../AutogenTest.cmake")
+include("../AutogenGuiTest.cmake")
 
 # Test AUTOMOC and AUTORCC on source files with the same name
 # but in different subdirectories
diff --git a/Tests/QtAutogen/StaticLibraryCycle/CMakeLists.txt b/Tests/QtAutogen/StaticLibraryCycle/CMakeLists.txt
index 0c2f987..f3536ba 100644
--- a/Tests/QtAutogen/StaticLibraryCycle/CMakeLists.txt
+++ b/Tests/QtAutogen/StaticLibraryCycle/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(StaticLibraryCycle)
-include("../AutogenTest.cmake")
+include("../AutogenCoreTest.cmake")
 
 # Test AUTOMOC on cyclic static libraries
 
diff --git a/Tests/QtAutogen/Tests.cmake b/Tests/QtAutogen/Tests.cmake
index 5025d43..c53fb4f 100644
--- a/Tests/QtAutogen/Tests.cmake
+++ b/Tests/QtAutogen/Tests.cmake
@@ -25,6 +25,7 @@
 ADD_AUTOGEN_TEST(StaticLibraryCycle slc)
 ADD_AUTOGEN_TEST(UicInclude uicInclude)
 ADD_AUTOGEN_TEST(UicInterface QtAutoUicInterface)
+ADD_AUTOGEN_TEST(UicNoGui uicNoGui)
 ADD_AUTOGEN_TEST(UicOnly uicOnly)
 ADD_AUTOGEN_TEST(UicSkipSource)
 
@@ -38,7 +39,8 @@
 # Qt5 only tests
 if(QT_TEST_VERSION GREATER 4)
   ADD_AUTOGEN_TEST(MocMacroName mocMacroName)
-  ADD_AUTOGEN_TEST(MocOsMacros)
+  # Disabled for issue #18669
+  #ADD_AUTOGEN_TEST(MocOsMacros)
   ADD_AUTOGEN_TEST(RerunMocPlugin)
   if(APPLE)
     ADD_AUTOGEN_TEST(MacOsFW)
diff --git a/Tests/QtAutogen/UicInclude/CMakeLists.txt b/Tests/QtAutogen/UicInclude/CMakeLists.txt
index 56f76fb..929868b 100644
--- a/Tests/QtAutogen/UicInclude/CMakeLists.txt
+++ b/Tests/QtAutogen/UicInclude/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(UicInclude)
-include("../AutogenTest.cmake")
+include("../AutogenGuiTest.cmake")
 
 # Test uic include patterns
 set(CMAKE_AUTOUIC_SEARCH_PATHS "dirA")
diff --git a/Tests/QtAutogen/UicInterface/CMakeLists.txt b/Tests/QtAutogen/UicInterface/CMakeLists.txt
index e0421a2..e022764 100644
--- a/Tests/QtAutogen/UicInterface/CMakeLists.txt
+++ b/Tests/QtAutogen/UicInterface/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(UicInterface)
-include("../AutogenTest.cmake")
+include("../AutogenGuiTest.cmake")
 
 set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
 set(CMAKE_AUTOMOC ON)
@@ -43,12 +43,12 @@
 endif()
 
 add_library(LibWidget libwidget.cpp)
-target_link_libraries(LibWidget KI18n ${QT_QTGUI_TARGET})
+target_link_libraries(LibWidget KI18n ${QT_LIBRARIES})
 set_property(TARGET LibWidget PROPERTY NO_KUIT_SEMANTIC ON)
 set_property(TARGET LibWidget PROPERTY TRANSLATION_DOMAIN customdomain)
 
 add_library(MyWidget mywidget.cpp)
-target_link_libraries(MyWidget KI18n ${QT_QTGUI_TARGET})
+target_link_libraries(MyWidget KI18n ${QT_LIBRARIES})
 
 add_executable(QtAutoUicInterface main.cpp)
 target_compile_definitions(QtAutoUicInterface
diff --git a/Tests/QtAutogen/UicNoGui/CMakeLists.txt b/Tests/QtAutogen/UicNoGui/CMakeLists.txt
new file mode 100644
index 0000000..076299d
--- /dev/null
+++ b/Tests/QtAutogen/UicNoGui/CMakeLists.txt
@@ -0,0 +1,16 @@
+cmake_minimum_required(VERSION 3.13)
+project(UicNoGui)
+include("../AutogenCoreTest.cmake")
+
+# This tests creates a target that has AUTOUIC enabled but does not
+# link against QtXWidgets.
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTORCC ON)
+
+add_subdirectory(MocOnly)
+add_subdirectory(NoQt)
+
+add_executable(uicNoGui main.cpp)
+target_link_libraries(uicNoGui mocOnly noQt)
diff --git a/Tests/QtAutogen/UicNoGui/MocOnly/CMakeLists.txt b/Tests/QtAutogen/UicNoGui/MocOnly/CMakeLists.txt
new file mode 100644
index 0000000..4fcd75f
--- /dev/null
+++ b/Tests/QtAutogen/UicNoGui/MocOnly/CMakeLists.txt
@@ -0,0 +1,3 @@
+# Library uses QtCore only (no Widgets)
+add_library(mocOnly main.cpp)
+target_link_libraries(mocOnly ${QT_QTCORE_TARGET})
diff --git a/Tests/QtAutogen/UicNoGui/MocOnly/main.cpp b/Tests/QtAutogen/UicNoGui/MocOnly/main.cpp
new file mode 100644
index 0000000..3091845
--- /dev/null
+++ b/Tests/QtAutogen/UicNoGui/MocOnly/main.cpp
@@ -0,0 +1,15 @@
+#include <QObject>
+
+class LocalObject : public QObject
+{
+  Q_OBJECT
+public:
+  LocalObject(){};
+};
+
+void mocOnly()
+{
+  LocalObject obj;
+}
+
+#include "main.moc"
diff --git a/Tests/QtAutogen/UicNoGui/NoQt/CMakeLists.txt b/Tests/QtAutogen/UicNoGui/NoQt/CMakeLists.txt
new file mode 100644
index 0000000..f2bf3ee
--- /dev/null
+++ b/Tests/QtAutogen/UicNoGui/NoQt/CMakeLists.txt
@@ -0,0 +1,2 @@
+# Library doesn't use or link against Qt at all
+add_library(noQt main.cpp)
diff --git a/Tests/QtAutogen/UicNoGui/NoQt/main.cpp b/Tests/QtAutogen/UicNoGui/NoQt/main.cpp
new file mode 100644
index 0000000..0052cc8
--- /dev/null
+++ b/Tests/QtAutogen/UicNoGui/NoQt/main.cpp
@@ -0,0 +1,4 @@
+
+void noQt()
+{
+}
diff --git a/Tests/QtAutogen/UicNoGui/main.cpp b/Tests/QtAutogen/UicNoGui/main.cpp
new file mode 100644
index 0000000..e90c60a
--- /dev/null
+++ b/Tests/QtAutogen/UicNoGui/main.cpp
@@ -0,0 +1,9 @@
+extern void mocOnly();
+extern void noQt();
+
+int main(int argc, char* argv[])
+{
+  mocOnly();
+  noQt();
+  return 0;
+}
diff --git a/Tests/QtAutogen/UicOnly/CMakeLists.txt b/Tests/QtAutogen/UicOnly/CMakeLists.txt
index f927f72..b163254 100644
--- a/Tests/QtAutogen/UicOnly/CMakeLists.txt
+++ b/Tests/QtAutogen/UicOnly/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(UicOnly)
-include("../AutogenTest.cmake")
+include("../AutogenGuiTest.cmake")
 
 # Test AUTOUIC being enabled only
 add_executable(uicOnly main.cpp UicOnly.cpp)
diff --git a/Tests/QtAutogen/UicSkipSource/CMakeLists.txt b/Tests/QtAutogen/UicSkipSource/CMakeLists.txt
index e94864d..dc3b7d4e 100644
--- a/Tests/QtAutogen/UicSkipSource/CMakeLists.txt
+++ b/Tests/QtAutogen/UicSkipSource/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(UicSkipSource)
-include("../AutogenTest.cmake")
+include("../AutogenGuiTest.cmake")
 
 # Test for SKIP_AUTOUIC and SKIP_AUTOGEN on an AUTOUIC enabled target
 set(skipUicSources
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index d5aa0c3..67fd65a 100644
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -163,7 +163,7 @@
 add_RunCMake_test(FindLua)
 add_RunCMake_test(FindOpenGL)
 if(CMake_TEST_UseSWIG)
-  add_RunCMake_test(UseSWIG)
+  add_RunCMake_test(UseSWIG -DCMake_TEST_FindPython=${CMake_TEST_FindPython})
 endif()
 if(NOT CMAKE_C_COMPILER_ID MATCHES "Watcom")
   add_RunCMake_test(GenerateExportHeader)
@@ -279,6 +279,7 @@
     endif()
   endif()
   foreach(var
+      CMAKE_SYSTEM_NAME
       CMAKE_C_COMPILER_ID
       CMAKE_C_COMPILER_VERSION
       CMAKE_C_STANDARD_DEFAULT
@@ -295,7 +296,8 @@
 endfunction()
 add_RunCMake_test_try_compile()
 
-add_RunCMake_test(try_run)
+add_RunCMake_test(try_run -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
+                          -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
 add_RunCMake_test(set)
 add_RunCMake_test(variable_watch)
 add_RunCMake_test(while)
diff --git a/Tests/RunCMake/CPack/tests/EXTERNAL/create_package.cmake b/Tests/RunCMake/CPack/tests/EXTERNAL/create_package.cmake
index e308ccb..2d7f993 100644
--- a/Tests/RunCMake/CPack/tests/EXTERNAL/create_package.cmake
+++ b/Tests/RunCMake/CPack/tests/EXTERNAL/create_package.cmake
@@ -22,3 +22,5 @@
 expect_file(${CPACK_TEMPORARY_DIRECTORY}/f2/share/cpack-test/f2.txt)
 expect_file(${CPACK_TEMPORARY_DIRECTORY}/f3/share/cpack-test/f3.txt)
 expect_file(${CPACK_TEMPORARY_DIRECTORY}/f4/share/cpack-test/f4.txt)
+
+message(STATUS "This status message is expected to be visible")
diff --git a/Tests/RunCMake/CPack/tests/EXTERNAL/stage_and_package-stdout.txt b/Tests/RunCMake/CPack/tests/EXTERNAL/stage_and_package-stdout.txt
new file mode 100644
index 0000000..37d635f
--- /dev/null
+++ b/Tests/RunCMake/CPack/tests/EXTERNAL/stage_and_package-stdout.txt
@@ -0,0 +1 @@
+-- This status message is expected to be visible
diff --git a/Tests/RunCMake/CommandLine/E_touch-nonexistent-dir-result.txt b/Tests/RunCMake/CommandLine/E_touch-nonexistent-dir-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CommandLine/E_touch-nonexistent-dir-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CommandLine/E_touch-nonexistent-dir-stderr.txt b/Tests/RunCMake/CommandLine/E_touch-nonexistent-dir-stderr.txt
new file mode 100644
index 0000000..470d811
--- /dev/null
+++ b/Tests/RunCMake/CommandLine/E_touch-nonexistent-dir-stderr.txt
@@ -0,0 +1 @@
+^cmake -E touch: failed to update ".+/touch-nonexistent-dir/foo"\.$
diff --git a/Tests/RunCMake/CommandLine/RunCMakeTest.cmake b/Tests/RunCMake/CommandLine/RunCMakeTest.cmake
index ef48852..a37b7f1 100644
--- a/Tests/RunCMake/CommandLine/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CommandLine/RunCMakeTest.cmake
@@ -22,7 +22,9 @@
 run_cmake_command(E_rename-no-arg ${CMAKE_COMMAND} -E rename)
 run_cmake_command(E_server-arg ${CMAKE_COMMAND} -E server --extra-arg)
 run_cmake_command(E_server-pipe ${CMAKE_COMMAND} -E server --pipe=)
+
 run_cmake_command(E_touch_nocreate-no-arg ${CMAKE_COMMAND} -E touch_nocreate)
+run_cmake_command(E_touch-nonexistent-dir ${CMAKE_COMMAND} -E touch "${RunCMake_BINARY_DIR}/touch-nonexistent-dir/foo")
 
 run_cmake_command(E_time ${CMAKE_COMMAND} -E time ${CMAKE_COMMAND} -E echo "hello  world")
 run_cmake_command(E_time-no-arg ${CMAKE_COMMAND} -E time)
diff --git a/Tests/RunCMake/Languages/ExternalCUDA.cmake b/Tests/RunCMake/Languages/ExternalCUDA.cmake
new file mode 100644
index 0000000..3afa93e
--- /dev/null
+++ b/Tests/RunCMake/Languages/ExternalCUDA.cmake
@@ -0,0 +1,8 @@
+enable_language(C)
+
+add_library(ext_cuda IMPORTED STATIC)
+set_property(TARGET ext_cuda PROPERTY IMPORTED_LOCATION "/does_not_exist")
+set_property(TARGET ext_cuda PROPERTY IMPORTED_LINK_INTERFACE_LANGUAGES "CUDA")
+
+add_executable(main empty.c)
+target_link_libraries(main ext_cuda)
diff --git a/Tests/RunCMake/Languages/RunCMakeTest.cmake b/Tests/RunCMake/Languages/RunCMakeTest.cmake
index 732baae..2a534b3 100644
--- a/Tests/RunCMake/Languages/RunCMakeTest.cmake
+++ b/Tests/RunCMake/Languages/RunCMakeTest.cmake
@@ -6,3 +6,5 @@
 run_cmake(link-libraries-TARGET_FILE-genex-ok)
 
 run_cmake(DetermineFail)
+
+run_cmake(ExternalCUDA)
diff --git a/Tests/RunCMake/Languages/empty.c b/Tests/RunCMake/Languages/empty.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/Languages/empty.c
diff --git a/Tests/RunCMake/ObjectLibrary/RunCMakeTest.cmake b/Tests/RunCMake/ObjectLibrary/RunCMakeTest.cmake
index c73732f..6ca33b8 100644
--- a/Tests/RunCMake/ObjectLibrary/RunCMakeTest.cmake
+++ b/Tests/RunCMake/ObjectLibrary/RunCMakeTest.cmake
@@ -45,6 +45,7 @@
 run_object_lib_build(LinkObjRHSShared2)
 run_object_lib_build(LinkObjRHSStatic2)
 run_object_lib_build2(LinkObjRHSObject2)
+run_object_lib_build(TransitiveDependencies)
 
 run_cmake(MissingSource)
 run_cmake(ObjWithObj)
diff --git a/Tests/RunCMake/ObjectLibrary/TransitiveDependencies.cmake b/Tests/RunCMake/ObjectLibrary/TransitiveDependencies.cmake
new file mode 100644
index 0000000..e41cf2e
--- /dev/null
+++ b/Tests/RunCMake/ObjectLibrary/TransitiveDependencies.cmake
@@ -0,0 +1,7 @@
+add_library(lib1 STATIC depends_obj0.c)
+add_library(lib2 OBJECT a.c)
+target_link_libraries(lib2 PRIVATE lib1)
+
+add_executable(test exe2.c)
+
+target_link_libraries(test PUBLIC lib2)
diff --git a/Tests/RunCMake/ObjectLibrary/exe2.c b/Tests/RunCMake/ObjectLibrary/exe2.c
new file mode 100644
index 0000000..66e0caf
--- /dev/null
+++ b/Tests/RunCMake/ObjectLibrary/exe2.c
@@ -0,0 +1,6 @@
+extern int myobj_foo(void);
+
+int main(void)
+{
+  return myobj_foo();
+}
diff --git a/Tests/RunCMake/UseSWIG/CMP0078-WARN-stderr.txt b/Tests/RunCMake/UseSWIG/CMP0078-WARN-stderr.txt
index f0ed577..d89d174 100644
--- a/Tests/RunCMake/UseSWIG/CMP0078-WARN-stderr.txt
+++ b/Tests/RunCMake/UseSWIG/CMP0078-WARN-stderr.txt
@@ -4,7 +4,7 @@
   command to set the policy and suppress this warning\.
 
 Call Stack \(most recent call first\):
-  CMP0078-common\.cmake:6 \(swig_add_library\)
+  CMP0078-common\.cmake:8 \(swig_add_library\)
   CMP0078-WARN\.cmake:1 \(include\)
   CMakeLists\.txt:3 \(include\)
 This warning is for project developers.  Use -Wno-dev to suppress it.$
diff --git a/Tests/RunCMake/UseSWIG/CMP0078-common.cmake b/Tests/RunCMake/UseSWIG/CMP0078-common.cmake
index 6cf39dc..b13796b 100644
--- a/Tests/RunCMake/UseSWIG/CMP0078-common.cmake
+++ b/Tests/RunCMake/UseSWIG/CMP0078-common.cmake
@@ -1,4 +1,6 @@
 
+cmake_policy(SET CMP0086 NEW)
+
 set(SWIG_EXECUTABLE "swig")
 set(SWIG_DIR "/swig")
 include(UseSWIG)
diff --git a/Tests/RunCMake/UseSWIG/CMP0086-NEW-nuild-check.cmake b/Tests/RunCMake/UseSWIG/CMP0086-NEW-nuild-check.cmake
new file mode 100644
index 0000000..ea8b2cd
--- /dev/null
+++ b/Tests/RunCMake/UseSWIG/CMP0086-NEW-nuild-check.cmake
@@ -0,0 +1,4 @@
+
+if (NOT EXISTS "${RunCMake_TEST_BINARY_DIR}/new_example.py")
+  set (RunCMake_TEST_FAILED "Not found expected file: '${RunCMake_TEST_BINARY_DIR}/new_example.py'.")
+endif()
diff --git a/Tests/RunCMake/UseSWIG/CMP0086-NEW.cmake b/Tests/RunCMake/UseSWIG/CMP0086-NEW.cmake
new file mode 100644
index 0000000..b54338d
--- /dev/null
+++ b/Tests/RunCMake/UseSWIG/CMP0086-NEW.cmake
@@ -0,0 +1,2 @@
+cmake_policy(SET CMP0086 NEW)
+include(CMP0086-common.cmake)
diff --git a/Tests/RunCMake/UseSWIG/CMP0086-OLD-build-check.cmake b/Tests/RunCMake/UseSWIG/CMP0086-OLD-build-check.cmake
new file mode 100644
index 0000000..96b5295
--- /dev/null
+++ b/Tests/RunCMake/UseSWIG/CMP0086-OLD-build-check.cmake
@@ -0,0 +1,4 @@
+
+if (NOT EXISTS "${RunCMake_TEST_BINARY_DIR}/example.py")
+  set (RunCMake_TEST_FAILED "Not found expected file: '${RunCMake_TEST_BINARY_DIR}/example.py'.")
+endif()
diff --git a/Tests/RunCMake/UseSWIG/CMP0086-OLD.cmake b/Tests/RunCMake/UseSWIG/CMP0086-OLD.cmake
new file mode 100644
index 0000000..6a63d4c
--- /dev/null
+++ b/Tests/RunCMake/UseSWIG/CMP0086-OLD.cmake
@@ -0,0 +1,2 @@
+cmake_policy(SET CMP0086 OLD)
+include(CMP0086-common.cmake)
diff --git a/Tests/RunCMake/UseSWIG/CMP0086-WARN-stderr.txt b/Tests/RunCMake/UseSWIG/CMP0086-WARN-stderr.txt
new file mode 100644
index 0000000..af41021
--- /dev/null
+++ b/Tests/RunCMake/UseSWIG/CMP0086-WARN-stderr.txt
@@ -0,0 +1,11 @@
+CMake Warning \(dev\) at .*/Modules/UseSWIG.cmake:[0-9]+ \(message\):
+  Policy CMP0086 is not set: UseSWIG honors SWIG_MODULE_NAME via -module
+  flag.  Run "cmake --help-policy CMP0086" for policy details\.  Use the
+  cmake_policy command to set the policy and suppress this warning\.
+
+Call Stack \(most recent call first\):
+  .*/Modules/UseSWIG.cmake:[0-9]+ \(SWIG_ADD_SOURCE_TO_MODULE\)
+  CMP0086-common\.cmake:[0-9]+ \(swig_add_library\)
+  CMP0086-WARN\.cmake:1 \(include\)
+  CMakeLists\.txt:3 \(include\)
+This warning is for project developers\.  Use -Wno-dev to suppress it\.$
diff --git a/Tests/RunCMake/UseSWIG/CMP0086-WARN.cmake b/Tests/RunCMake/UseSWIG/CMP0086-WARN.cmake
new file mode 100644
index 0000000..69c2d9d
--- /dev/null
+++ b/Tests/RunCMake/UseSWIG/CMP0086-WARN.cmake
@@ -0,0 +1 @@
+include(CMP0086-common.cmake)
diff --git a/Tests/RunCMake/UseSWIG/CMP0086-common.cmake b/Tests/RunCMake/UseSWIG/CMP0086-common.cmake
new file mode 100644
index 0000000..c02592a
--- /dev/null
+++ b/Tests/RunCMake/UseSWIG/CMP0086-common.cmake
@@ -0,0 +1,11 @@
+
+cmake_policy(SET CMP0078 NEW)
+
+find_package(Python REQUIRED COMPONENTS Development)
+find_package (SWIG REQUIRED)
+include(UseSWIG)
+
+set_property (SOURCE example.i PROPERTY SWIG_MODULE_NAME "new_example")
+
+swig_add_library(example LANGUAGE python TYPE MODULE SOURCES example.i)
+target_link_libraries(example PRIVATE Python::Python)
diff --git a/Tests/RunCMake/UseSWIG/RunCMakeTest.cmake b/Tests/RunCMake/UseSWIG/RunCMakeTest.cmake
index b96622a..6acf719 100644
--- a/Tests/RunCMake/UseSWIG/RunCMakeTest.cmake
+++ b/Tests/RunCMake/UseSWIG/RunCMakeTest.cmake
@@ -3,3 +3,23 @@
 run_cmake(CMP0078-WARN)
 run_cmake(CMP0078-OLD)
 run_cmake(CMP0078-NEW)
+
+run_cmake(CMP0086-WARN)
+
+if (CMake_TEST_FindPython)
+
+  macro(run_cmake_target test subtest target)
+    set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build)
+    set(RunCMake_TEST_NO_CLEAN 1)
+    run_cmake_command(${test}-${subtest} ${CMAKE_COMMAND} --build . --target ${target} ${ARGN})
+
+    unset(RunCMake_TEST_BINARY_DIR)
+    unset(RunCMake_TEST_NO_CLEAN)
+  endmacro()
+
+  run_cmake(CMP0086-OLD)
+  run_cmake_target(CMP0086-OLD build example)
+  run_cmake(CMP0086-NEW)
+  run_cmake_target(CMP0086-NEW build example)
+
+endif()
diff --git a/Tests/RunCMake/WriteBasicConfigVersionFile/ArchIndependent.cmake b/Tests/RunCMake/WriteBasicConfigVersionFile/ArchIndependent.cmake
new file mode 100644
index 0000000..13ec5d1
--- /dev/null
+++ b/Tests/RunCMake/WriteBasicConfigVersionFile/ArchIndependent.cmake
@@ -0,0 +1,63 @@
+# Hard-code architecture for test without a real compiler.
+set(CMAKE_SIZEOF_VOID_P 4)
+
+include(WriteBasicConfigVersionFile)
+
+set(_dummy_version 1.0.0)
+
+set(_compatibilities AnyNewerVersion
+                     SameMajorVersion
+                     SameMinorVersion
+                     ExactVersion)
+
+function(test_write_basic_config_version_file_arch_prepare filename_out compat arch_independent arch)
+  if(arch_independent)
+    set(arch_arg ARCH_INDEPENDENT)
+  else()
+    set(arch_arg )
+  endif()
+
+  set(filename "${CMAKE_CURRENT_BINARY_DIR}/${compat}Arch${arch_arg}ConfigVersion.cmake")
+
+  set(CMAKE_SIZEOF_VOID_P "${arch}")
+
+  write_basic_config_version_file("${filename}"
+                                  VERSION "${_dummy_version}"
+                                  COMPATIBILITY "${compat}"
+                                  ${arch_arg})
+
+  set("${filename_out}" "${filename}" PARENT_SCOPE)
+endfunction()
+
+function(test_write_basic_config_version_file_arch_check unsuitable_out filename arch)
+  set(CMAKE_SIZEOF_VOID_P "${arch}")
+  set(PACKAGE_FIND_VERSION "${_dummy_version}")
+
+  include("${filename}")
+
+  set("${unsuitable_out}" "${PACKAGE_VERSION_UNSUITABLE}" PARENT_SCOPE)
+endfunction()
+
+function(test_write_basic_config_version_file_arch_test expected_unsuitable compat arch_independent source_arch user_arch)
+  test_write_basic_config_version_file_arch_prepare(filename "${compat}" "${arch_independent}" "${source_arch}")
+  test_write_basic_config_version_file_arch_check(unsuitable "${filename}" "${user_arch}")
+  if(unsuitable AND NOT expected_unsuitable)
+    message(SEND_ERROR "Architecture was checked when it shouldn't have been. Compatibility: ${compat} ARCH_INDEPENDENT: ${arch_independent}.")
+  elseif(expected_unsuitable AND NOT unsuitable)
+    message(SEND_ERROR "Requested architecture check not performed. Compatibility: ${compat} ARCH_INDEPENDENT: ${arch_independent}.")
+  endif()
+endfunction()
+
+set(_unsuitable TRUE)
+set(_suitable FALSE)
+
+foreach(compat ${_compatibilities})
+  test_write_basic_config_version_file_arch_test("${_suitable}" "${compat}" TRUE 4 4)
+  test_write_basic_config_version_file_arch_test("${_suitable}" "${compat}" FALSE 4 4)
+  test_write_basic_config_version_file_arch_test("${_suitable}" "${compat}" TRUE 4 8)
+  test_write_basic_config_version_file_arch_test("${_unsuitable}" "${compat}" FALSE 4 8)
+  test_write_basic_config_version_file_arch_test("${_suitable}" "${compat}" TRUE 8 4)
+  test_write_basic_config_version_file_arch_test("${_unsuitable}" "${compat}" FALSE 8 4)
+  test_write_basic_config_version_file_arch_test("${_suitable}" "${compat}" TRUE 8 8)
+  test_write_basic_config_version_file_arch_test("${_suitable}" "${compat}" FALSE 8 8)
+endforeach()
diff --git a/Tests/RunCMake/WriteBasicConfigVersionFile/RunCMakeTest.cmake b/Tests/RunCMake/WriteBasicConfigVersionFile/RunCMakeTest.cmake
index e956f4f..5db33f7 100644
--- a/Tests/RunCMake/WriteBasicConfigVersionFile/RunCMakeTest.cmake
+++ b/Tests/RunCMake/WriteBasicConfigVersionFile/RunCMakeTest.cmake
@@ -1,3 +1,4 @@
 include(RunCMake)
 
 run_cmake(All)
+run_cmake(ArchIndependent)
diff --git a/Tests/RunCMake/ctest_memcheck/CTestConfig.cmake.in b/Tests/RunCMake/ctest_memcheck/CTestConfig.cmake.in
index fe6f6ce..53bdd20 100644
--- a/Tests/RunCMake/ctest_memcheck/CTestConfig.cmake.in
+++ b/Tests/RunCMake/ctest_memcheck/CTestConfig.cmake.in
@@ -1,8 +1,6 @@
 set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-set (CTEST_DART_SERVER_VERSION "2")
 set(CTEST_DROP_METHOD "http")
 set(CTEST_DROP_SITE "open.cdash.org")
 set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
-set(CTEST_DROP_SITE_CDASH TRUE)
 
 @CTEST_EXTRA_CONFIG@
diff --git a/Tests/RunCMake/ctest_submit/FailDrop-cp-result.txt b/Tests/RunCMake/ctest_submit/FailDrop-cp-result.txt
deleted file mode 100644
index b57e2de..0000000
--- a/Tests/RunCMake/ctest_submit/FailDrop-cp-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-(-1|255)
diff --git a/Tests/RunCMake/ctest_submit/FailDrop-cp-stderr.txt b/Tests/RunCMake/ctest_submit/FailDrop-cp-stderr.txt
deleted file mode 100644
index 00a60ac..0000000
--- a/Tests/RunCMake/ctest_submit/FailDrop-cp-stderr.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Missing arguments for submit via cp:
-.*
-   Problems when submitting via CP
diff --git a/Tests/RunCMake/ctest_submit/FailDrop-cp-stdout.txt b/Tests/RunCMake/ctest_submit/FailDrop-cp-stdout.txt
deleted file mode 100644
index fa6e004..0000000
--- a/Tests/RunCMake/ctest_submit/FailDrop-cp-stdout.txt
+++ /dev/null
@@ -1 +0,0 @@
-Submit files \(using cp\)
diff --git a/Tests/RunCMake/ctest_submit/FailDrop-ftp-result.txt b/Tests/RunCMake/ctest_submit/FailDrop-ftp-result.txt
deleted file mode 100644
index b57e2de..0000000
--- a/Tests/RunCMake/ctest_submit/FailDrop-ftp-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-(-1|255)
diff --git a/Tests/RunCMake/ctest_submit/FailDrop-ftp-stderr.txt b/Tests/RunCMake/ctest_submit/FailDrop-ftp-stderr.txt
deleted file mode 100644
index b9d9394..0000000
--- a/Tests/RunCMake/ctest_submit/FailDrop-ftp-stderr.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Error message was: ([Cc]ould *n.t resolve host:? '?-no-site-'?.*|The requested URL returned error:.*)
-   Problems when submitting via FTP
diff --git a/Tests/RunCMake/ctest_submit/FailDrop-ftp-stdout.txt b/Tests/RunCMake/ctest_submit/FailDrop-ftp-stdout.txt
deleted file mode 100644
index 345bb62..0000000
--- a/Tests/RunCMake/ctest_submit/FailDrop-ftp-stdout.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Submit files \(using ftp\)
-   Using FTP submit method
-   Drop site: ftp://
diff --git a/Tests/RunCMake/ctest_submit/FailDrop-scp-result.txt b/Tests/RunCMake/ctest_submit/FailDrop-scp-result.txt
deleted file mode 100644
index b57e2de..0000000
--- a/Tests/RunCMake/ctest_submit/FailDrop-scp-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-(-1|255)
diff --git a/Tests/RunCMake/ctest_submit/FailDrop-scp-stderr.txt b/Tests/RunCMake/ctest_submit/FailDrop-scp-stderr.txt
deleted file mode 100644
index ef67149..0000000
--- a/Tests/RunCMake/ctest_submit/FailDrop-scp-stderr.txt
+++ /dev/null
@@ -1 +0,0 @@
-   Problems when submitting via SCP
diff --git a/Tests/RunCMake/ctest_submit/FailDrop-scp-stdout.txt b/Tests/RunCMake/ctest_submit/FailDrop-scp-stdout.txt
deleted file mode 100644
index ec2ce92..0000000
--- a/Tests/RunCMake/ctest_submit/FailDrop-scp-stdout.txt
+++ /dev/null
@@ -1 +0,0 @@
-Submit files \(using scp\)
diff --git a/Tests/RunCMake/ctest_submit/FailDrop-xmlrpc-result.txt b/Tests/RunCMake/ctest_submit/FailDrop-xmlrpc-result.txt
deleted file mode 100644
index b57e2de..0000000
--- a/Tests/RunCMake/ctest_submit/FailDrop-xmlrpc-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-(-1|255)
diff --git a/Tests/RunCMake/ctest_submit/FailDrop-xmlrpc-stderr.txt b/Tests/RunCMake/ctest_submit/FailDrop-xmlrpc-stderr.txt
deleted file mode 100644
index c0f718e..0000000
--- a/Tests/RunCMake/ctest_submit/FailDrop-xmlrpc-stderr.txt
+++ /dev/null
@@ -1 +0,0 @@
-   (Problems when submitting via XML-RPC|Submission method "xmlrpc" not compiled into CTest!)
diff --git a/Tests/RunCMake/ctest_submit/FailDrop-xmlrpc-stdout.txt b/Tests/RunCMake/ctest_submit/FailDrop-xmlrpc-stdout.txt
deleted file mode 100644
index ed2acb5..0000000
--- a/Tests/RunCMake/ctest_submit/FailDrop-xmlrpc-stdout.txt
+++ /dev/null
@@ -1 +0,0 @@
-Submit files \(using xmlrpc\)
diff --git a/Tests/RunCMake/ctest_submit/RunCMakeTest.cmake b/Tests/RunCMake/ctest_submit/RunCMakeTest.cmake
index 178f0cb..4d7d29b 100644
--- a/Tests/RunCMake/ctest_submit/RunCMakeTest.cmake
+++ b/Tests/RunCMake/ctest_submit/RunCMakeTest.cmake
@@ -49,9 +49,5 @@
   run_ctest(FailDrop-${CASE_DROP_METHOD})
 endfunction()
 
-run_ctest_submit_FailDrop(cp)
-run_ctest_submit_FailDrop(ftp)
 run_ctest_submit_FailDrop(http)
 run_ctest_submit_FailDrop(https)
-run_ctest_submit_FailDrop(scp)
-run_ctest_submit_FailDrop(xmlrpc)
diff --git a/Tests/RunCMake/file/READ_SYMLINK-noexist-result.txt b/Tests/RunCMake/file/READ_SYMLINK-noexist-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/file/READ_SYMLINK-noexist-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/file/READ_SYMLINK-noexist-stderr.txt b/Tests/RunCMake/file/READ_SYMLINK-noexist-stderr.txt
new file mode 100644
index 0000000..32b3e85
--- /dev/null
+++ b/Tests/RunCMake/file/READ_SYMLINK-noexist-stderr.txt
@@ -0,0 +1,6 @@
+^CMake Error at READ_SYMLINK-noexist\.cmake:[0-9]+ \(file\):
+  file READ_SYMLINK requested of path that is not a symlink:
+
+    .*/Tests/RunCMake/file/READ_SYMLINK-noexist-build/rel\.sym
+Call Stack \(most recent call first\):
+  CMakeLists\.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/file/READ_SYMLINK-noexist.cmake b/Tests/RunCMake/file/READ_SYMLINK-noexist.cmake
new file mode 100644
index 0000000..9e57e4b
--- /dev/null
+++ b/Tests/RunCMake/file/READ_SYMLINK-noexist.cmake
@@ -0,0 +1 @@
+file(READ_SYMLINK "${CMAKE_CURRENT_BINARY_DIR}/rel.sym" result)
diff --git a/Tests/RunCMake/file/READ_SYMLINK-notsymlink-result.txt b/Tests/RunCMake/file/READ_SYMLINK-notsymlink-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/file/READ_SYMLINK-notsymlink-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/file/READ_SYMLINK-notsymlink-stderr.txt b/Tests/RunCMake/file/READ_SYMLINK-notsymlink-stderr.txt
new file mode 100644
index 0000000..63e32ed
--- /dev/null
+++ b/Tests/RunCMake/file/READ_SYMLINK-notsymlink-stderr.txt
@@ -0,0 +1,6 @@
+^CMake Error at READ_SYMLINK-notsymlink\.cmake:[0-9]+ \(file\):
+  file READ_SYMLINK requested of path that is not a symlink:
+
+    .*/Tests/RunCMake/file/READ_SYMLINK-notsymlink-build/rel\.sym
+Call Stack \(most recent call first\):
+  CMakeLists\.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/file/READ_SYMLINK-notsymlink.cmake b/Tests/RunCMake/file/READ_SYMLINK-notsymlink.cmake
new file mode 100644
index 0000000..a9798b6
--- /dev/null
+++ b/Tests/RunCMake/file/READ_SYMLINK-notsymlink.cmake
@@ -0,0 +1,2 @@
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/rel.sym" "")
+file(READ_SYMLINK "${CMAKE_CURRENT_BINARY_DIR}/rel.sym" result)
diff --git a/Tests/RunCMake/file/READ_SYMLINK.cmake b/Tests/RunCMake/file/READ_SYMLINK.cmake
new file mode 100644
index 0000000..865a2e9
--- /dev/null
+++ b/Tests/RunCMake/file/READ_SYMLINK.cmake
@@ -0,0 +1,13 @@
+execute_process(COMMAND
+  ${CMAKE_COMMAND} -E create_symlink "test.txt" "${CMAKE_CURRENT_BINARY_DIR}/rel.sym")
+file(READ_SYMLINK "${CMAKE_CURRENT_BINARY_DIR}/rel.sym" result)
+if(NOT result STREQUAL "test.txt")
+  message(SEND_ERROR "Relative symlink is \"${result}\", should be \"test.txt\"")
+endif()
+
+execute_process(COMMAND
+  ${CMAKE_COMMAND} -E create_symlink "${CMAKE_CURRENT_BINARY_DIR}/test.txt" "${CMAKE_CURRENT_BINARY_DIR}/abs.sym")
+file(READ_SYMLINK "${CMAKE_CURRENT_BINARY_DIR}/abs.sym" result)
+if(NOT result MATCHES "^.*/Tests/RunCMake/file/READ_SYMLINK-build/test\\.txt$")
+  message(SEND_ERROR "Absolute symlink is \"${result}\", should be \"*/Tests/RunCMake/file/READ_SYMLINK-build/test.txt\"")
+endif()
diff --git a/Tests/RunCMake/file/RunCMakeTest.cmake b/Tests/RunCMake/file/RunCMakeTest.cmake
index b9d76bf..b872824 100644
--- a/Tests/RunCMake/file/RunCMakeTest.cmake
+++ b/Tests/RunCMake/file/RunCMakeTest.cmake
@@ -55,6 +55,9 @@
 if(NOT WIN32 OR CYGWIN)
   run_cmake(GLOB_RECURSE-cyclic-recursion)
   run_cmake(INSTALL-SYMLINK)
+  run_cmake(READ_SYMLINK)
+  run_cmake(READ_SYMLINK-noexist)
+  run_cmake(READ_SYMLINK-notsymlink)
 endif()
 
 if(RunCMake_GENERATOR STREQUAL "Ninja")
diff --git a/Tests/RunCMake/file/SIZE-error-does-not-exist-stderr.txt b/Tests/RunCMake/file/SIZE-error-does-not-exist-stderr.txt
index b797a41..842cf89 100644
--- a/Tests/RunCMake/file/SIZE-error-does-not-exist-stderr.txt
+++ b/Tests/RunCMake/file/SIZE-error-does-not-exist-stderr.txt
@@ -1,5 +1,6 @@
 ^CMake Error at SIZE-error-does-not-exist.cmake:[0-9]+ \(file\):
-  file SIZE requested of path that is not readable
-  /a/file/that/does-not-exist
+  file SIZE requested of path that is not readable:
+
+    .*/Tests/RunCMake/file/SIZE-error-does-not-exist-build/does-not-exist
 Call Stack \(most recent call first\):
   CMakeLists.txt:[0-9]+ \(include\)
diff --git a/Tests/RunCMake/file/SIZE-error-does-not-exist.cmake b/Tests/RunCMake/file/SIZE-error-does-not-exist.cmake
index edcc222..ebac737 100644
--- a/Tests/RunCMake/file/SIZE-error-does-not-exist.cmake
+++ b/Tests/RunCMake/file/SIZE-error-does-not-exist.cmake
@@ -1,3 +1,3 @@
-set(file "/a/file/that/does-not-exist")
+set(file "${CMAKE_CURRENT_BINARY_DIR}/does-not-exist")
 
 file(SIZE "${file}" CALCULATED_SIZE)
diff --git a/Tests/RunCMake/try_compile/LinkOptions.cmake b/Tests/RunCMake/try_compile/LinkOptions.cmake
new file mode 100644
index 0000000..9b246c4
--- /dev/null
+++ b/Tests/RunCMake/try_compile/LinkOptions.cmake
@@ -0,0 +1,38 @@
+
+enable_language(C)
+
+cmake_policy(SET CMP0054 NEW)
+
+set (lib_name "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}lib${CMAKE_STATIC_LIBRARY_SUFFIX}")
+if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
+  if (RunCMake_C_COMPILER_ID STREQUAL "MSVC")
+    if (CMAKE_SIZEOF_VOID_P EQUAL 4)
+      set (undef_flag /INCLUDE:_func)
+    else()
+      set (undef_flag /INCLUDE:func)
+    endif()
+  else()
+    if (CMAKE_SIZEOF_VOID_P EQUAL 4)
+      set (undef_flag -u _func)
+    else()
+      set (undef_flag -u func)
+    endif()
+  endif()
+elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+  set (undef_flag -u _func)
+else()
+  set (undef_flag -u func)
+endif()
+
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+try_compile(result ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/lib.c
+  COPY_FILE "${lib_name}")
+
+set(CMAKE_TRY_COMPILE_TARGET_TYPE EXECUTABLE)
+try_compile(result ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/main.c
+  OUTPUT_VARIABLE out
+  LINK_OPTIONS ${undef_flag} "${lib_name}")
+
+if(NOT result)
+  message(FATAL_ERROR "try_compile(... LINK_OPTIONS ...)  failed:\n${out}")
+endif()
diff --git a/Tests/RunCMake/try_compile/RunCMakeTest.cmake b/Tests/RunCMake/try_compile/RunCMakeTest.cmake
index 6a1bc64..77fb7a0 100644
--- a/Tests/RunCMake/try_compile/RunCMakeTest.cmake
+++ b/Tests/RunCMake/try_compile/RunCMakeTest.cmake
@@ -25,6 +25,13 @@
 run_cmake(TargetTypeInvalid)
 run_cmake(TargetTypeStatic)
 
+if (CMAKE_SYSTEM_NAME MATCHES "^(Linux|Darwin|Windows)$" AND
+    CMAKE_C_COMPILER_ID MATCHES "^(MSVC|GNU|Clang|AppleClang)$")
+  set (RunCMake_TEST_OPTIONS -DRunCMake_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
+  run_cmake(LinkOptions)
+  unset (RunCMake_TEST_OPTIONS)
+endif()
+
 if(CMAKE_C_STANDARD_DEFAULT)
   run_cmake(CStandard)
 elseif(DEFINED CMAKE_C_STANDARD_DEFAULT)
diff --git a/Tests/RunCMake/try_compile/lib.c b/Tests/RunCMake/try_compile/lib.c
new file mode 100644
index 0000000..b00c576
--- /dev/null
+++ b/Tests/RunCMake/try_compile/lib.c
@@ -0,0 +1,4 @@
+
+void func()
+{
+}
diff --git a/Tests/RunCMake/try_compile/main.c b/Tests/RunCMake/try_compile/main.c
new file mode 100644
index 0000000..2128ead
--- /dev/null
+++ b/Tests/RunCMake/try_compile/main.c
@@ -0,0 +1,8 @@
+extern void func();
+
+int main(void)
+{
+  func();
+
+  return 0;
+}
diff --git a/Tests/RunCMake/try_run/LinkOptions.cmake b/Tests/RunCMake/try_run/LinkOptions.cmake
new file mode 100644
index 0000000..17af2f7
--- /dev/null
+++ b/Tests/RunCMake/try_run/LinkOptions.cmake
@@ -0,0 +1,42 @@
+
+enable_language(C)
+
+cmake_policy(SET CMP0054 NEW)
+
+set (lib_name "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}lib${CMAKE_STATIC_LIBRARY_SUFFIX}")
+if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
+  if (RunCMake_C_COMPILER_ID STREQUAL "MSVC")
+    if (CMAKE_SIZEOF_VOID_P EQUAL 4)
+      set (undef_flag /INCLUDE:_func)
+    else()
+      set (undef_flag /INCLUDE:func)
+    endif()
+  else()
+    if (CMAKE_SIZEOF_VOID_P EQUAL 4)
+      set (undef_flag -u _func)
+    else()
+      set (undef_flag -u func)
+    endif()
+  endif()
+elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+  set (undef_flag -u _func)
+else()
+  set (undef_flag -u func)
+endif()
+
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+try_compile(result ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/lib.c
+  COPY_FILE "${lib_name}")
+
+set(CMAKE_TRY_COMPILE_TARGET_TYPE EXECUTABLE)
+try_run(run_result compile_result ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/main.c
+  COMPILE_OUTPUT_VARIABLE compile_out
+  RUN_OUTPUT_VARIABLE run_out
+  LINK_OPTIONS ${undef_flag} "${lib_name}")
+
+if(NOT compile_result)
+  message(FATAL_ERROR "try_run(... LINK_OPTIONS ...) compilation failed:\n${compile_out}")
+endif()
+if(run_result STREQUAL "FAILED_TO_RUN")
+  message(FATAL_ERROR "try_run(... LINK_OPTIONS ...) execution failed:\n${run_out}")
+endif()
diff --git a/Tests/RunCMake/try_run/RunCMakeTest.cmake b/Tests/RunCMake/try_run/RunCMakeTest.cmake
index 1ec9a55..3689562 100644
--- a/Tests/RunCMake/try_run/RunCMakeTest.cmake
+++ b/Tests/RunCMake/try_run/RunCMakeTest.cmake
@@ -1,3 +1,10 @@
 include(RunCMake)
 
 run_cmake(BadLinkLibraries)
+
+if (CMAKE_SYSTEM_NAME MATCHES "^(Linux|Darwin|Windows)$" AND
+    CMAKE_C_COMPILER_ID MATCHES "^(MSVC|GNU|Clang|AppleClang)$")
+  set (RunCMake_TEST_OPTIONS -DRunCMake_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
+  run_cmake(LinkOptions)
+  unset (RunCMake_TEST_OPTIONS)
+endif()
diff --git a/Tests/RunCMake/try_run/lib.c b/Tests/RunCMake/try_run/lib.c
new file mode 100644
index 0000000..b00c576
--- /dev/null
+++ b/Tests/RunCMake/try_run/lib.c
@@ -0,0 +1,4 @@
+
+void func()
+{
+}
diff --git a/Tests/RunCMake/try_run/main.c b/Tests/RunCMake/try_run/main.c
new file mode 100644
index 0000000..2128ead
--- /dev/null
+++ b/Tests/RunCMake/try_run/main.c
@@ -0,0 +1,8 @@
+extern void func();
+
+int main(void)
+{
+  func();
+
+  return 0;
+}
diff --git a/Tests/UseSWIG/CMakeLists.txt b/Tests/UseSWIG/CMakeLists.txt
index 4c3d901..f79cda6 100644
--- a/Tests/UseSWIG/CMakeLists.txt
+++ b/Tests/UseSWIG/CMakeLists.txt
@@ -96,6 +96,18 @@
   "${CMake_SOURCE_DIR}/Tests/UseSWIG/UseTargetINCLUDE_DIRECTORIES"
   "${CMake_BINARY_DIR}/Tests/UseSWIG/UseTargetINCLUDE_DIRECTORIES"
   ${build_generator_args}
-  --build-project TestModuleVersion2
+  --build-project TestUseTargetINCLUDE_DIRECTORIES
   --build-options ${build_options}
   )
+
+
+add_test(NAME UseSWIG.ModuleName COMMAND
+  ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
+  --build-and-test
+  "${CMake_SOURCE_DIR}/Tests/UseSWIG/ModuleName"
+  "${CMake_BINARY_DIR}/Tests/UseSWIG/ModuleName"
+  ${build_generator_args}
+  --build-project TestModuleName
+  --build-options ${build_options}
+  --test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
+  )
diff --git a/Tests/UseSWIG/ModuleName/CMakeLists.txt b/Tests/UseSWIG/ModuleName/CMakeLists.txt
new file mode 100644
index 0000000..de63883
--- /dev/null
+++ b/Tests/UseSWIG/ModuleName/CMakeLists.txt
@@ -0,0 +1,42 @@
+cmake_minimum_required(VERSION 3.1...3.14)
+
+project(TestModuleName CXX)
+
+include(CTest)
+
+find_package(SWIG REQUIRED)
+cmake_policy(SET CMP0086 NEW)
+include(${SWIG_USE_FILE})
+
+find_package(Python2 REQUIRED COMPONENTS Interpreter Development)
+
+# Path separator
+if (WIN32)
+  set (PS "$<SEMICOLON>")
+else()
+  set (PS ":")
+endif()
+
+unset(CMAKE_SWIG_FLAGS)
+
+set_property(SOURCE "example.i" PROPERTY CPLUSPLUS ON)
+set_property(SOURCE "example.i" PROPERTY COMPILE_OPTIONS -includeall)
+set_property(SOURCE "example.i" PROPERTY SWIG_MODULE_NAME new_example)
+
+swig_add_library(example1
+                 LANGUAGE python
+                 OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/example1"
+                 SOURCES example.i ../example.cxx)
+set_target_properties (example1 PROPERTIES
+  INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/.."
+  SWIG_USE_TARGET_INCLUDE_DIRECTORIES TRUE
+  OUTPUT_NAME new_example
+  LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/example1"
+  ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/example1"
+  RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/example1")
+target_link_libraries(example1 PRIVATE Python2::Python)
+
+
+add_test (NAME ModuleName.example1
+  COMMAND "${CMAKE_COMMAND}" -E env "PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR}/Python2${PS}$<TARGET_FILE_DIR:example1>"
+  "${Python2_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/runme.py")
diff --git a/Tests/UseSWIG/ModuleName/example.i b/Tests/UseSWIG/ModuleName/example.i
new file mode 100644
index 0000000..fbdf724
--- /dev/null
+++ b/Tests/UseSWIG/ModuleName/example.i
@@ -0,0 +1,9 @@
+/* File : example.i */
+%module example
+
+%{
+#include "example.h"
+%}
+
+/* Let's just grab the original header file here */
+%include "example.h"
diff --git a/Tests/UseSWIG/ModuleName/runme.py b/Tests/UseSWIG/ModuleName/runme.py
new file mode 100644
index 0000000..c37e4a7
--- /dev/null
+++ b/Tests/UseSWIG/ModuleName/runme.py
@@ -0,0 +1,52 @@
+# file: runme.py
+
+# This file illustrates the shadow-class C++ interface generated
+# by SWIG.
+
+from __future__ import print_function
+
+import new_example
+
+# ----- Object creation -----
+
+print ("Creating some objects:")
+c = new_example.Circle(10)
+print ("    Created circle", c)
+s = new_example.Square(10)
+print ("    Created square", s)
+
+# ----- Access a static member -----
+
+print ("\nA total of", new_example.cvar.Shape_nshapes,"shapes were created")
+
+# ----- Member data access -----
+
+# Set the location of the object
+
+c.x = 20
+c.y = 30
+
+s.x = -10
+s.y = 5
+
+print ("\nHere is their current position:")
+print ("    Circle = (%f, %f)" % (c.x,c.y))
+print ("    Square = (%f, %f)" % (s.x,s.y))
+
+# ----- Call some methods -----
+
+print ("\nHere are some properties of the shapes:")
+for o in [c,s]:
+      print ("   ", o)
+      print ("        area      = ", o.area())
+      print ("        perimeter = ", o.perimeter())
+
+print ("\nGuess I'll clean up now")
+
+# Note: this invokes the virtual destructor
+del c
+del s
+
+s = 3
+print (new_example.cvar.Shape_nshapes,"shapes remain")
+print ("Goodbye")
diff --git a/Utilities/IWYU/mapping.imp b/Utilities/IWYU/mapping.imp
index 4f26ce1..c5231bb 100644
--- a/Utilities/IWYU/mapping.imp
+++ b/Utilities/IWYU/mapping.imp
@@ -97,9 +97,6 @@
   { include: [ "@<uv-.+\\.h>", private, "\"cm_uv.h\"", public ] },
   { include: [ "<kwiml/abi.h>", private, "\"cm_kwiml.h\"", public ] },
   { include: [ "<kwiml/int.h>", private, "\"cm_kwiml.h\"", public ] },
-  { include: [ "<xmlrpc.h>", private, "\"cm_xmlrpc.h\"", public ] },
-  { include: [ "<xmlrpc_client.h>", private, "\"cm_xmlrpc.h\"", public ] },
-  { include: [ "@<xmlrpc-c/.+\\.h>", private, "\"cm_xmlrpc.h\"", public ] },
   { include: [ "<zconf.h>", private, "\"cm_zlib.h\"", public ] },
   { include: [ "<zlib.h>", private, "\"cm_zlib.h\"", public ] },
 
diff --git a/Utilities/cmThirdParty.h.in b/Utilities/cmThirdParty.h.in
index a547f0d..46e0490 100644
--- a/Utilities/cmThirdParty.h.in
+++ b/Utilities/cmThirdParty.h.in
@@ -15,6 +15,5 @@
 #cmakedefine CMAKE_USE_SYSTEM_JSONCPP
 #cmakedefine CMAKE_USE_SYSTEM_LIBRHASH
 #cmakedefine CMAKE_USE_SYSTEM_LIBUV
-#cmakedefine CTEST_USE_XMLRPC
 
 #endif
diff --git a/Utilities/cm_xmlrpc.h b/Utilities/cm_xmlrpc.h
deleted file mode 100644
index 932066a..0000000
--- a/Utilities/cm_xmlrpc.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-   file Copyright.txt or https://cmake.org/licensing for details.  */
-#ifndef cm_xmlrpc_h
-#define cm_xmlrpc_h
-
-/* Use the xmlrpc library configured for CMake.  */
-#include "cmThirdParty.h"
-#ifdef CTEST_USE_XMLRPC
-#  include <xmlrpc.h>
-#  include <xmlrpc_client.h>
-#endif
-
-#endif