[Cmake-commits] CMake branch, next, updated. v2.8.12.1-5293-g3baea9f

Brad King brad.king at kitware.com
Mon Nov 18 09:49:14 EST 2013


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  3baea9fc060d3f9d1acd089f0e87ab872c6589bb (commit)
       via  424ea788541a5547a32711e5e09e9cb8e6dc0650 (commit)
       via  48b722e013751f1e3033ce7825ad79c27b07b7ce (commit)
       via  3608cfdf7f7487244d5effdecfc8fbaa64f4cc9e (commit)
       via  00038735b056c871c067be973c1b98caebce3487 (commit)
       via  45eef60800fb43a0d5e70018feabe8e231676e09 (commit)
       via  c2533fb487b1a6c2cbf101815ca2124480ce7532 (commit)
       via  1af148b30d7a18442aa1906de9834b6f8a91352c (commit)
       via  5af4d742c7a9b35765eefb5020248a0da796e137 (commit)
       via  699ef9b0dcab8df8b5d28622bc400466d15af87b (commit)
       via  23e303f1562830b32756941679c02e8379f4092a (commit)
       via  21c3409cb13c17c9a7474bcb3936376d37ff9215 (commit)
       via  a2ec7f13d41c1316eaf9f0b09a3c8745ba8ae1f4 (commit)
       via  f9ac25ea3833f95ed20984dcd117143c8d421209 (commit)
       via  163dc3628c92f985a37497009ecdc353bc4bac52 (commit)
       via  5f5c92b9a2c2f9c780c08e23231b93af71f175bd (commit)
       via  4ac75fdfe6e7a91f3beea037d13b1f4c8c8b80ed (commit)
       via  cc23f92861aeb2443cc5b6443c04a761c99bb100 (commit)
       via  20bac8f19e1fa12856e96b8e9541e518068d2122 (commit)
       via  4d85365307975cfdb07e824b46b76da5aed4ed1e (commit)
       via  95b28eb76329262d10e60f4ad67172f8a566855c (commit)
       via  c85672634c37d640ea99fd5b36d7889a53c922b2 (commit)
       via  f2b1d653cf4124e32c324f54848d55f52ca8370d (commit)
       via  8ee6b4763034439ce5aada285de5fa584144c6c6 (commit)
       via  7fc7624af5403e6bff9dbc99da398be314c0b223 (commit)
       via  0a7f17b870ceb03fd8687d630ed6fb875dcdc66a (commit)
       via  1f679b8d46069696e14b3ff512fee2696c4e601e (commit)
       via  8904d1410be3d62fc48d3bdaa87cbce3895fc815 (commit)
       via  0814d0a6559ed3634dafb372f34491407a27c5e8 (commit)
       via  ee6e4ac841d8094b59cd0a48c61d7ca3b68c68c2 (commit)
       via  2d072069e2ef44780c214c847285df8ed8e70bba (commit)
       via  bca67c710f21cdea70c9b23fe927c87135ee81d9 (commit)
       via  05923172f94d804dfba33957aa08ac88cc5cd0bd (commit)
       via  1befbfad3d9971335ab0e7deb1a93acfdccf0fb6 (commit)
      from  9ea0c4f3d6f1529ba7eaf99bc915beeea1b0a1fd (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3baea9fc060d3f9d1acd089f0e87ab872c6589bb
commit 3baea9fc060d3f9d1acd089f0e87ab872c6589bb
Merge: 9ea0c4f 424ea78
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Nov 18 09:48:16 2013 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Nov 18 09:48:16 2013 -0500

    Merge topic 'cleanup-build-commands' into next
    
    424ea78 Help: Document the CMAKE_MAKE_PROGRAM variable in more detail
    48b722e VS: Switch to internal CMAKE_MAKE_PROGRAM lookup by generators
    3608cfd Tests: Do not use an explicit make program for VS generators
    0003873 Tests: Fix MFC test heuristic for empty CMAKE_TEST_MAKEPROGRAM
    45eef60 Tests: Pass CMAKE_MAKE_PROGRAM instead of --build-makeprogram
    c2533fb Tests: Configure SubProject-Stage2 test more robustly
    1af148b Tests: Simplify VSExcludeFromDefaultBuild configuration
    5af4d74 Tests: Simplify VSProjectInSubdir configuration
    699ef9b Tests: Simplify CTest.BuildCommand.ProjectInSubdir configuration
    23e303f Tests: Pass --build-options to every test
    21c3409 ctest: Teach --build-options to allow zero options
    a2ec7f1 ctest: Make the --build-makeprogram optional for --build-and-test
    f9ac25e Simplify some calls to cmGlobalGenerator::Build
    163dc36 Teach GenerateBuildCommand to find its own make program
    5f5c92b VS: Add internal APIs to find MSBuild, devenv/VCExpress, and msdev
    4ac75fd Prefer CMAKE_MAKE_PROGRAM over CMAKE_BUILD_TOOL (#14548)
    ...


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=424ea788541a5547a32711e5e09e9cb8e6dc0650
commit 424ea788541a5547a32711e5e09e9cb8e6dc0650
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Nov 15 15:34:54 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:27 2013 -0500

    Help: Document the CMAKE_MAKE_PROGRAM variable in more detail
    
    Explain how it is set for each group of generators.  Also explain
    the build-time selection behavior used by Visual Studio generators.

diff --git a/Help/variable/CMAKE_MAKE_PROGRAM.rst b/Help/variable/CMAKE_MAKE_PROGRAM.rst
index b546815..0c851ad 100644
--- a/Help/variable/CMAKE_MAKE_PROGRAM.rst
+++ b/Help/variable/CMAKE_MAKE_PROGRAM.rst
@@ -1,10 +1,51 @@
 CMAKE_MAKE_PROGRAM
 ------------------
 
-Tool used for the actual build process.
+Tool that can launch the native build system.
+The value may be the full path to an executable or just the tool
+name if it is expected to be in the ``PATH``.
 
-This variable is set to the program that will be needed to build the
-output of CMake.  If the generator selected was Visual Studio 6, the
-CMAKE_MAKE_PROGRAM will be set to msdev, for Unix Makefiles it will be
-set to make or gmake, and for Visual Studio 7 it set to devenv.  For
-NMake Makefiles the value is nmake.
+The tool selected depends on the :variable:`CMAKE_GENERATOR` used
+to configure the project:
+
+* The Makefile generators set this to ``make``, ``gmake``, or
+  a generator-specific tool (e.g. ``nmake`` for "NMake Makefiles").
+
+  These generators store ``CMAKE_MAKE_PROGRAM`` in the CMake cache
+  so that it may be edited by the user.
+
+* The Ninja generator sets this to ``ninja``.
+
+  This generator stores ``CMAKE_MAKE_PROGRAM`` in the CMake cache
+  so that it may be edited by the user.
+
+* The Xcode generator sets this to ``xcodebuild`` (or possibly an
+  otherwise undocumented ``cmakexbuild`` wrapper implementing some
+  workarounds).
+
+  This generator stores ``CMAKE_MAKE_PROGRAM`` in the CMake cache
+  so that it may be edited by the user.
+
+* The Visual Studio generators set this to the full path to
+  ``MSBuild.exe`` (VS >= 10), ``devenv.com`` (VS 7,8,9),
+  ``VCExpress.exe`` (VS Express 8,9), or ``msdev.exe`` (VS 6).
+
+  These generators prefer to lookup the build tool at build time
+  rather than to store ``CMAKE_MAKE_PROGRAM`` in the CMake cache
+  ahead of time.  This is because the tools are version-specific
+  and can be located using the Windows Registry.  It is also
+  necessary because the proper build tool may depend on the
+  project content (e.g. the Intel Fortran plugin to VS 10 and 11
+  requires ``devenv.com`` to build its ``.vfproj`` project files
+  even though ``MSBuild.exe`` is normally preferred to support
+  the :variable:`CMAKE_GENERATOR_TOOLSET`).
+
+  For compatibility with versions of CMake prior to 3.0, if
+  a user or project explicitly adds ``CMAKE_MAKE_PROGRAM`` to
+  the CMake cache then CMake will use the specified value if
+  possible.
+
+The ``CMAKE_MAKE_PROGRAM`` variable is set for use by project code.
+The value is also used by the :manual:`cmake(1)` ``--build`` and
+:manual:`ctest(1)` ``--build-and-test`` tools to launch the native
+build process.

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=48b722e013751f1e3033ce7825ad79c27b07b7ce
commit 48b722e013751f1e3033ce7825ad79c27b07b7ce
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Nov 15 10:41:45 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:26 2013 -0500

    VS: Switch to internal CMAKE_MAKE_PROGRAM lookup by generators
    
    Drop the "Modules/CMakeVS*FindMake.cmake" files.  Override the
    cmGlobalGenerator::FindMakeProgram method for VS generators to use their
    internal APIs to locate the build tool.  Set the CMAKE_MAKE_PROGRAM as a
    normal variable for use by project code, but do not cache it.  This will
    allow CMake and CTest to select the proper tool at build time.

diff --git a/Modules/CMakeVS10FindMake.cmake b/Modules/CMakeVS10FindMake.cmake
deleted file mode 100644
index 189b626..0000000
--- a/Modules/CMakeVS10FindMake.cmake
+++ /dev/null
@@ -1,54 +0,0 @@
-
-#=============================================================================
-# Copyright 2007-2009 Kitware, Inc.
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-#  License text for the above reference.)
-
-# Look for devenv as a build program.  We need to use this to support
-# Intel Fortran integration into VS.  MSBuild can not be used for that case
-# since Intel Fortran uses the older devenv file format.
-find_program(CMAKE_MAKE_PROGRAM
-  NAMES devenv
-  HINTS
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VS;EnvironmentDirectory]
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup;Dbghelp_path]
-  "$ENV{ProgramFiles}/Microsoft Visual Studio 10.0/Common7/IDE"
-  "$ENV{ProgramFiles}/Microsoft Visual Studio10.0/Common7/IDE"
-  "$ENV{ProgramFiles}/Microsoft Visual Studio 10/Common7/IDE"
-  "$ENV{ProgramFiles}/Microsoft Visual Studio10/Common7/IDE"
-  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 10.0/Common7/IDE"
-  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio10.0/Common7/IDE"
-  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 10/Common7/IDE"
-  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio10/Common7/IDE"
-  "/Program Files/Microsoft Visual Studio 10.0/Common7/IDE/"
-  "/Program Files/Microsoft Visual Studio 10/Common7/IDE/"
-  )
-
-# if devenv is not found, then use MSBuild.
-# it is expected that if devenv is not found, then we are
-# dealing with Visual Studio Express.  VCExpress has random
-# failures when being run as a command line build tool which
-# causes the compiler checks and try-compile stuff to fail. MSbuild
-# is a better choice for this.  However, VCExpress does not support
-# cross compiling needed for Win CE.
-if(NOT CMAKE_CROSSCOMPILING)
-  find_program(CMAKE_MAKE_PROGRAM
-    NAMES MSBuild
-    HINTS
-    [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VS;ProductDir]
-    "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0;CLR Version]/"
-    "c:/WINDOWS/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0;CLR Version]/"
-    "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\10.0;CLR Version]/")
-endif()
-
-mark_as_advanced(CMAKE_MAKE_PROGRAM)
-set(MSVC10 1)
-set(MSVC_VERSION 1600)
diff --git a/Modules/CMakeVS11FindMake.cmake b/Modules/CMakeVS11FindMake.cmake
deleted file mode 100644
index 2df015d..0000000
--- a/Modules/CMakeVS11FindMake.cmake
+++ /dev/null
@@ -1,53 +0,0 @@
-
-#=============================================================================
-# Copyright 2007-2011 Kitware, Inc.
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-#  License text for the above reference.)
-
-# Look for devenv as a build program.  We need to use this to support
-# Intel Fortran integration into VS.  MSBuild can not be used for that case
-# since Intel Fortran uses the older devenv file format.
-find_program(CMAKE_MAKE_PROGRAM
-  NAMES devenv
-  HINTS
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VS;EnvironmentDirectory]
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup;Dbghelp_path]
-  "$ENV{ProgramFiles}/Microsoft Visual Studio 11.0/Common7/IDE"
-  "$ENV{ProgramFiles}/Microsoft Visual Studio11.0/Common7/IDE"
-  "$ENV{ProgramFiles}/Microsoft Visual Studio 11/Common7/IDE"
-  "$ENV{ProgramFiles}/Microsoft Visual Studio11/Common7/IDE"
-  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 11.0/Common7/IDE"
-  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio11.0/Common7/IDE"
-  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 11/Common7/IDE"
-  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio11/Common7/IDE"
-  "/Program Files/Microsoft Visual Studio 11.0/Common7/IDE/"
-  "/Program Files/Microsoft Visual Studio 11/Common7/IDE/"
-  )
-
-# if devenv is not found, then use MSBuild.
-# it is expected that if devenv is not found, then we are
-# dealing with Visual Studio Express.
-if(NOT CMAKE_CROSSCOMPILING)
-  set(_FDIR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7;FrameworkDir32]")
-  set(_FVER "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7;FrameworkVer32]")
-  find_program(CMAKE_MAKE_PROGRAM
-    NAMES MSBuild
-    HINTS
-    ${_FDIR}/${_FVER}
-    [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VS;ProductDir]
-    "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0;CLR Version]/"
-    "c:/WINDOWS/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0;CLR Version]/"
-    "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\11.0;CLR Version]/")
-endif()
-
-mark_as_advanced(CMAKE_MAKE_PROGRAM)
-set(MSVC11 1)
-set(MSVC_VERSION 1700)
diff --git a/Modules/CMakeVS12FindMake.cmake b/Modules/CMakeVS12FindMake.cmake
deleted file mode 100644
index 338d9a2..0000000
--- a/Modules/CMakeVS12FindMake.cmake
+++ /dev/null
@@ -1,27 +0,0 @@
-
-#=============================================================================
-# Copyright 2007-2013 Kitware, Inc.
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-#  License text for the above reference.)
-
-# Always use MSBuild because:
-# - devenv treats command-line builds as recently-loaded projects in the IDE
-# - devenv does not appear to support non-standard platform toolsets
-# If we need devenv for Intel Fortran in the future we should add
-# a special case when Fortran is enabled.
-find_program(CMAKE_MAKE_PROGRAM
-  NAMES MSBuild
-  HINTS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\12.0;MSBuildToolsPath]"
-  )
-
-mark_as_advanced(CMAKE_MAKE_PROGRAM)
-set(MSVC12 1)
-set(MSVC_VERSION 1800)
diff --git a/Modules/CMakeVS6FindMake.cmake b/Modules/CMakeVS6FindMake.cmake
deleted file mode 100644
index 40bf5b1..0000000
--- a/Modules/CMakeVS6FindMake.cmake
+++ /dev/null
@@ -1,25 +0,0 @@
-
-#=============================================================================
-# Copyright 2002-2009 Kitware, Inc.
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-#  License text for the above reference.)
-
-find_program(CMAKE_MAKE_PROGRAM
-  NAMES msdev
-  PATHS
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\6.0\\Setup;VsCommonDir]/MSDev98/Bin
-  "c:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin"
-  "c:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin"
-  "/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin"
-  )
-mark_as_advanced(CMAKE_MAKE_PROGRAM)
-set(MSVC60 1)
-set(MSVC_VERSION 1200)
diff --git a/Modules/CMakeVS71FindMake.cmake b/Modules/CMakeVS71FindMake.cmake
deleted file mode 100644
index 945c3fa..0000000
--- a/Modules/CMakeVS71FindMake.cmake
+++ /dev/null
@@ -1,26 +0,0 @@
-
-#=============================================================================
-# Copyright 2003-2009 Kitware, Inc.
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-#  License text for the above reference.)
-
-find_program(CMAKE_MAKE_PROGRAM
-  NAMES devenv
-  PATHS
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.1\\Setup\\VS;EnvironmentDirectory]
-  "$ENV{ProgramFiles}/Microsoft Visual Studio .NET/Common7/IDE"
-  "c:/Program Files/Microsoft Visual Studio .NET/Common7/IDE"
-  "c:/Program Files/Microsoft Visual Studio.NET/Common7/IDE"
-  "/Program Files/Microsoft Visual Studio .NET/Common7/IDE/"
-  )
-mark_as_advanced(CMAKE_MAKE_PROGRAM)
-set(MSVC71 1)
-set(MSVC_VERSION 1310)
diff --git a/Modules/CMakeVS7FindMake.cmake b/Modules/CMakeVS7FindMake.cmake
deleted file mode 100644
index 218c5f2..0000000
--- a/Modules/CMakeVS7FindMake.cmake
+++ /dev/null
@@ -1,25 +0,0 @@
-
-#=============================================================================
-# Copyright 2002-2009 Kitware, Inc.
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-#  License text for the above reference.)
-
-find_program(CMAKE_MAKE_PROGRAM
-  NAMES devenv
-  PATHS
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.0\\Setup\\VS;EnvironmentDirectory]
-  "c:/Program Files/Microsoft Visual Studio .NET/Common7/IDE"
-  "c:/Program Files/Microsoft Visual Studio.NET/Common7/IDE"
-  "/Program Files/Microsoft Visual Studio .NET/Common7/IDE/"
-  )
-mark_as_advanced(CMAKE_MAKE_PROGRAM)
-set(MSVC70 1)
-set(MSVC_VERSION 1300)
diff --git a/Modules/CMakeVS8FindMake.cmake b/Modules/CMakeVS8FindMake.cmake
deleted file mode 100644
index 31df026..0000000
--- a/Modules/CMakeVS8FindMake.cmake
+++ /dev/null
@@ -1,34 +0,0 @@
-
-#=============================================================================
-# Copyright 2004-2009 Kitware, Inc.
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-#  License text for the above reference.)
-
-# VCExpress does not support cross compiling, which is necessary for Win CE
-set( _CMAKE_MAKE_PROGRAM_NAMES devenv)
-if(NOT CMAKE_CROSSCOMPILING)
-  set( _CMAKE_MAKE_PROGRAM_NAMES ${_CMAKE_MAKE_PROGRAM_NAMES} VCExpress)
-endif()
-
-find_program(CMAKE_MAKE_PROGRAM
-  NAMES ${_CMAKE_MAKE_PROGRAM_NAMES}
-  HINTS
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VS;EnvironmentDirectory]
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup;Dbghelp_path]
-  "$ENV{ProgramFiles}/Microsoft Visual Studio 8/Common7/IDE"
-  "$ENV{ProgramFiles}/Microsoft Visual Studio8/Common7/IDE"
-  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 8/Common7/IDE"
-  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio8/Common7/IDE"
-  "/Program Files/Microsoft Visual Studio 8/Common7/IDE/"
-  )
-mark_as_advanced(CMAKE_MAKE_PROGRAM)
-set(MSVC80 1)
-set(MSVC_VERSION 1400)
diff --git a/Modules/CMakeVS9FindMake.cmake b/Modules/CMakeVS9FindMake.cmake
deleted file mode 100644
index 35e9f98..0000000
--- a/Modules/CMakeVS9FindMake.cmake
+++ /dev/null
@@ -1,39 +0,0 @@
-
-#=============================================================================
-# Copyright 2007-2009 Kitware, Inc.
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-#  License text for the above reference.)
-
-# VCExpress does not support cross compiling, which is necessary for Win CE
-set( _CMAKE_MAKE_PROGRAM_NAMES devenv)
-if(NOT CMAKE_CROSSCOMPILING)
-  set( _CMAKE_MAKE_PROGRAM_NAMES ${_CMAKE_MAKE_PROGRAM_NAMES} VCExpress)
-endif()
-
-find_program(CMAKE_MAKE_PROGRAM
-  NAMES ${_CMAKE_MAKE_PROGRAM_NAMES}
-  HINTS
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup\\VS;EnvironmentDirectory]
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup;Dbghelp_path]
-  "$ENV{ProgramFiles}/Microsoft Visual Studio 9.0/Common7/IDE"
-  "$ENV{ProgramFiles}/Microsoft Visual Studio9.0/Common7/IDE"
-  "$ENV{ProgramFiles}/Microsoft Visual Studio 9/Common7/IDE"
-  "$ENV{ProgramFiles}/Microsoft Visual Studio9/Common7/IDE"
-  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 9.0/Common7/IDE"
-  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio9.0/Common7/IDE"
-  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 9/Common7/IDE"
-  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio9/Common7/IDE"
-  "/Program Files/Microsoft Visual Studio 9.0/Common7/IDE/"
-  "/Program Files/Microsoft Visual Studio 9/Common7/IDE/"
-  )
-mark_as_advanced(CMAKE_MAKE_PROGRAM)
-set(MSVC90 1)
-set(MSVC_VERSION 1500)
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 74d88f3..6e93609 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -203,7 +203,7 @@ public:
   /*
    * Determine what program to use for building the project.
    */
-  void FindMakeProgram(cmMakefile*);
+  virtual void FindMakeProgram(cmMakefile*);
 
   ///! Find a target by name by searching the local generators.
   cmTarget* FindTarget(const char* project, const char* name,
diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx
index 6740787..c51d807 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -92,7 +92,6 @@ cmGlobalVisualStudio10Generator::cmGlobalVisualStudio10Generator(
   : cmGlobalVisualStudio8Generator(name, platformName,
                                    additionalPlatformDefinition)
 {
-  this->FindMakeProgramFile = "CMakeVS10FindMake.cmake";
   std::string vc10Express;
   this->ExpressEdition = cmSystemTools::ReadRegistryValue(
     "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\10.0\\Setup\\VC;"
diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h
index ad0aa6d..66440ea 100644
--- a/Source/cmGlobalVisualStudio10Generator.h
+++ b/Source/cmGlobalVisualStudio10Generator.h
@@ -118,5 +118,6 @@ private:
   bool MSBuildCommandInitialized;
   virtual std::string FindMSBuildCommand();
   virtual std::string FindDevEnvCommand();
+  virtual std::string GetVSMakeProgram() { return this->GetMSBuildCommand(); }
 };
 #endif
diff --git a/Source/cmGlobalVisualStudio11Generator.cxx b/Source/cmGlobalVisualStudio11Generator.cxx
index d968c6d..f1d7312 100644
--- a/Source/cmGlobalVisualStudio11Generator.cxx
+++ b/Source/cmGlobalVisualStudio11Generator.cxx
@@ -112,7 +112,6 @@ cmGlobalVisualStudio11Generator::cmGlobalVisualStudio11Generator(
   : cmGlobalVisualStudio10Generator(name, platformName,
                                    additionalPlatformDefinition)
 {
-  this->FindMakeProgramFile = "CMakeVS11FindMake.cmake";
   std::string vc11Express;
   this->ExpressEdition = cmSystemTools::ReadRegistryValue(
     "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\11.0\\Setup\\VC;"
diff --git a/Source/cmGlobalVisualStudio12Generator.cxx b/Source/cmGlobalVisualStudio12Generator.cxx
index f3806df..edd5567 100644
--- a/Source/cmGlobalVisualStudio12Generator.cxx
+++ b/Source/cmGlobalVisualStudio12Generator.cxx
@@ -87,7 +87,6 @@ cmGlobalVisualStudio12Generator::cmGlobalVisualStudio12Generator(
   : cmGlobalVisualStudio11Generator(name, platformName,
                                    additionalPlatformDefinition)
 {
-  this->FindMakeProgramFile = "CMakeVS12FindMake.cmake";
   std::string vc12Express;
   this->ExpressEdition = cmSystemTools::ReadRegistryValue(
     "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\12.0\\Setup\\VC;"
diff --git a/Source/cmGlobalVisualStudio6Generator.cxx b/Source/cmGlobalVisualStudio6Generator.cxx
index 08ea249..8651da7 100644
--- a/Source/cmGlobalVisualStudio6Generator.cxx
+++ b/Source/cmGlobalVisualStudio6Generator.cxx
@@ -32,7 +32,6 @@ std::string GetVS6TargetName(const std::string& targetName)
 
 cmGlobalVisualStudio6Generator::cmGlobalVisualStudio6Generator()
 {
-  this->FindMakeProgramFile = "CMakeVS6FindMake.cmake";
   this->MSDevCommandInitialized = false;
 }
 
diff --git a/Source/cmGlobalVisualStudio6Generator.h b/Source/cmGlobalVisualStudio6Generator.h
index 24f46b3..8fe5792 100644
--- a/Source/cmGlobalVisualStudio6Generator.h
+++ b/Source/cmGlobalVisualStudio6Generator.h
@@ -92,6 +92,7 @@ public:
 protected:
   virtual const char* GetIDEVersion() { return "6.0"; }
 private:
+  virtual std::string GetVSMakeProgram() { return this->GetMSDevCommand(); }
   void GenerateConfigurations(cmMakefile* mf);
   void WriteDSWFile(std::ostream& fout);
   void WriteDSWHeader(std::ostream& fout);
diff --git a/Source/cmGlobalVisualStudio71Generator.cxx b/Source/cmGlobalVisualStudio71Generator.cxx
index 2643719..61d3c4c 100644
--- a/Source/cmGlobalVisualStudio71Generator.cxx
+++ b/Source/cmGlobalVisualStudio71Generator.cxx
@@ -19,7 +19,6 @@
 cmGlobalVisualStudio71Generator::cmGlobalVisualStudio71Generator(
   const char* platformName) : cmGlobalVisualStudio7Generator(platformName)
 {
-  this->FindMakeProgramFile = "CMakeVS71FindMake.cmake";
   this->ProjectConfigurationSectionName = "ProjectConfiguration";
 }
 
diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx
index cf38773..9cd88ef 100644
--- a/Source/cmGlobalVisualStudio7Generator.cxx
+++ b/Source/cmGlobalVisualStudio7Generator.cxx
@@ -20,7 +20,6 @@
 cmGlobalVisualStudio7Generator::cmGlobalVisualStudio7Generator(
   const char* platformName)
 {
-  this->FindMakeProgramFile = "CMakeVS7FindMake.cmake";
   this->IntelProjectVersion = 0;
   this->DevEnvCommandInitialized = false;
 
diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h
index d272fa0..c7b0081 100644
--- a/Source/cmGlobalVisualStudio7Generator.h
+++ b/Source/cmGlobalVisualStudio7Generator.h
@@ -173,6 +173,7 @@ private:
   char* IntelProjectVersion;
   std::string DevEnvCommand;
   bool DevEnvCommandInitialized;
+  virtual std::string GetVSMakeProgram() { return this->GetDevEnvCommand(); }
 };
 
 #define CMAKE_CHECK_BUILD_SYSTEM_TARGET "ZERO_CHECK"
diff --git a/Source/cmGlobalVisualStudio8Generator.cxx b/Source/cmGlobalVisualStudio8Generator.cxx
index 949dd1b..69b0a7a 100644
--- a/Source/cmGlobalVisualStudio8Generator.cxx
+++ b/Source/cmGlobalVisualStudio8Generator.cxx
@@ -94,7 +94,6 @@ cmGlobalVisualStudio8Generator::cmGlobalVisualStudio8Generator(
   const char* additionalPlatformDefinition)
   : cmGlobalVisualStudio71Generator(platformName)
 {
-  this->FindMakeProgramFile = "CMakeVS8FindMake.cmake";
   this->ProjectConfigurationSectionName = "ProjectConfigurationPlatforms";
   this->Name = name;
 
diff --git a/Source/cmGlobalVisualStudio9Generator.cxx b/Source/cmGlobalVisualStudio9Generator.cxx
index aadf982..ccc27ad 100644
--- a/Source/cmGlobalVisualStudio9Generator.cxx
+++ b/Source/cmGlobalVisualStudio9Generator.cxx
@@ -101,7 +101,6 @@ cmGlobalVisualStudio9Generator::cmGlobalVisualStudio9Generator(
   : cmGlobalVisualStudio8Generator(name, platformName,
                                    additionalPlatformDefinition)
 {
-  this->FindMakeProgramFile = "CMakeVS9FindMake.cmake";
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmGlobalVisualStudioGenerator.cxx b/Source/cmGlobalVisualStudioGenerator.cxx
index af80070..7afcfa7 100644
--- a/Source/cmGlobalVisualStudioGenerator.cxx
+++ b/Source/cmGlobalVisualStudioGenerator.cxx
@@ -500,6 +500,19 @@ void cmGlobalVisualStudioGenerator::ComputeVSTargetDepends(cmTarget& target)
 }
 
 //----------------------------------------------------------------------------
+void cmGlobalVisualStudioGenerator::FindMakeProgram(cmMakefile* mf)
+{
+  // Visual Studio generators know how to lookup their build tool
+  // directly instead of needing a helper module to do it, so we
+  // do not actually need to put CMAKE_MAKE_PROGRAM into the cache.
+  if(cmSystemTools::IsOff(mf->GetDefinition("CMAKE_MAKE_PROGRAM")))
+    {
+    mf->AddDefinition("CMAKE_MAKE_PROGRAM",
+                      this->GetVSMakeProgram().c_str());
+    }
+}
+
+//----------------------------------------------------------------------------
 void cmGlobalVisualStudioGenerator::AddPlatformDefinitions(cmMakefile* mf)
 {
   if(this->AdditionalPlatformDefinition)
diff --git a/Source/cmGlobalVisualStudioGenerator.h b/Source/cmGlobalVisualStudioGenerator.h
index ce03a0e..da2d021 100644
--- a/Source/cmGlobalVisualStudioGenerator.h
+++ b/Source/cmGlobalVisualStudioGenerator.h
@@ -82,6 +82,8 @@ public:
   };
   class OrderedTargetDependSet;
 
+  virtual void FindMakeProgram(cmMakefile*);
+
 protected:
   // Does this VS version link targets to each other if there are
   // dependencies in the SLN file?  This was done for VS versions
@@ -107,6 +109,7 @@ protected:
   const char* AdditionalPlatformDefinition;
 
 private:
+  virtual std::string GetVSMakeProgram() = 0;
   void PrintCompilerAdvice(std::ostream&, std::string, const char*) {}
   void ComputeTargetObjects(cmGeneratorTarget* gt) const;
 

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3608cfdf7f7487244d5effdecfc8fbaa64f4cc9e
commit 3608cfdf7f7487244d5effdecfc8fbaa64f4cc9e
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Nov 15 09:15:33 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:26 2013 -0500

    Tests: Do not use an explicit make program for VS generators
    
    Do not pass the CMAKE_MAKE_PROGRAM cache entry to tests when using the
    VS generators.  Allow them to pick the correct build tool automatically.

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 4e016e1..48abfae 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -47,7 +47,11 @@ configure_file(${CMake_SOURCE_DIR}/Tests/EnforceConfig.cmake.in
 if(BUILD_TESTING)
   set(CMAKE_TEST_DEVENV "")
   if(NOT CMAKE_TEST_DIFFERENT_GENERATOR)
-    set(CMAKE_TEST_MAKEPROGRAM "${CMAKE_MAKE_PROGRAM}")
+    if(CMAKE_TEST_GENERATOR MATCHES "Visual Studio")
+      set(CMAKE_TEST_MAKEPROGRAM "")
+    else()
+      set(CMAKE_TEST_MAKEPROGRAM "${CMAKE_MAKE_PROGRAM}")
+    endif()
     if(CMAKE_TEST_GENERATOR MATCHES "Visual Studio [7-9] " AND
         NOT CMAKE_MAKE_PROGRAM MATCHES "[mM][sS][bB][uU][iI][lL][dD]\\.[eE][xX][eE]")
       set(CMAKE_TEST_DEVENV "${CMAKE_MAKE_PROGRAM}")

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=00038735b056c871c067be973c1b98caebce3487
commit 00038735b056c871c067be973c1b98caebce3487
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 14:43:02 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:26 2013 -0500

    Tests: Fix MFC test heuristic for empty CMAKE_TEST_MAKEPROGRAM
    
    Also disable the MFC test if CMAKE_MAKE_PROGRAM is vcexpress.

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 6c3e478..4e016e1 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -1492,7 +1492,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
 
       # Look for evidence that this is a VCExpress build. If so, avoid
       # the MFC test by default.
-      string(TOLOWER "${CMAKE_TEST_MAKEPROGRAM}" mkprog)
+      string(TOLOWER "${CMAKE_MAKE_PROGRAM};${CMAKE_TEST_MAKEPROGRAM}" mkprog)
       if(mkprog MATCHES "vcexpress")
         message(STATUS
           "CMAKE_TEST_MAKEPROGRAM indicates vcexpress, avoiding MFC test")

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=45eef60800fb43a0d5e70018feabe8e231676e09
commit 45eef60800fb43a0d5e70018feabe8e231676e09
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Nov 15 09:07:42 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:26 2013 -0500

    Tests: Pass CMAKE_MAKE_PROGRAM instead of --build-makeprogram
    
    Pass the CMAKE_TEST_MAKEPROGRAM, if any, to each test at CMake time in
    the CMAKE_MAKE_PROGRAM cache entry.  Pass the CMAKE_TEST_MAKEPROGRAM
    into the ExportImport, Fortran, and MacRuntimePath tests so that they
    may do the same for the nested project configurations.
    
    Now "ctest --build-and-test" can get the make program from the test
    build tree cache, so drop the explicit --build-makeprogram.

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 43ae52a..6c3e478 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -80,7 +80,6 @@ if(BUILD_TESTING)
 
   set(build_generator_args
     --build-generator ${CMAKE_TEST_GENERATOR}
-    --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
     )
   if(CMAKE_TEST_GENERATOR_TOOLSET)
     list(APPEND build_generator_args
@@ -89,6 +88,9 @@ if(BUILD_TESTING)
   endif()
 
   set(build_options)
+  if(CMAKE_TEST_MAKEPROGRAM)
+    list(APPEND build_options -DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_TEST_MAKEPROGRAM})
+  endif()
 
   add_subdirectory(CMakeLib)
   add_subdirectory(CMakeOnly)
@@ -254,6 +256,7 @@ if(BUILD_TESTING)
   ADD_TEST_MACRO(Assembler HelloAsm)
   ADD_TEST_MACRO(SourceGroups SourceGroups)
   ADD_TEST_MACRO(Preprocess Preprocess)
+  set(ExportImport_BUILD_OPTIONS -DCMAKE_TEST_MAKEPROGRAM:FILEPATH=${CMAKE_TEST_MAKEPROGRAM})
   ADD_TEST_MACRO(ExportImport ExportImport)
   ADD_TEST_MACRO(Unset Unset)
   ADD_TEST_MACRO(PolicyScope PolicyScope)
@@ -465,7 +468,6 @@ if(BUILD_TESTING)
          --build-two-config
          --build-generator "Eclipse CDT4 - Unix Makefiles"
          --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}"
-         --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
          --build-project Simple
          --build-options ${build_options}
          --test-command Simple)
@@ -481,7 +483,6 @@ if(BUILD_TESTING)
          --build-two-config
          --build-generator "CodeBlocks - Unix Makefiles"
          --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}"
-         --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
          --build-project Simple
          --build-options ${build_options}
          --test-command Simple)
@@ -496,7 +497,6 @@ if(BUILD_TESTING)
          --build-two-config
          --build-generator "KDevelop3 - Unix Makefiles"
          --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}"
-         --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
          --build-project Simple
          --build-options ${build_options}
          --test-command Simple)
@@ -1352,6 +1352,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       ${build_generator_args}
       --build-project MacRuntimePath
       --build-options ${build_options}
+        -DCMAKE_TEST_MAKEPROGRAM:FILEPATH=${CMAKE_TEST_MAKEPROGRAM}
       )
   endif()
 
@@ -2504,6 +2505,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       --build-project testf
       --build-two-config
       --build-options ${build_options}
+        -DCMAKE_TEST_MAKEPROGRAM:FILEPATH=${CMAKE_TEST_MAKEPROGRAM}
       --test-command testf)
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Fortran")
 
diff --git a/Tests/ExportImport/CMakeLists.txt b/Tests/ExportImport/CMakeLists.txt
index b8368fc..8be8d33 100644
--- a/Tests/ExportImport/CMakeLists.txt
+++ b/Tests/ExportImport/CMakeLists.txt
@@ -42,7 +42,6 @@ add_custom_command(
     --build-target install
     --build-generator ${CMAKE_GENERATOR}
     --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
-    --build-makeprogram ${CMAKE_MAKE_PROGRAM}
     --build-options -C${ExportImport_BINARY_DIR}/InitialCache.cmake
   VERBATIM
   )
@@ -64,7 +63,6 @@ add_custom_command(
    --build-project Import
    --build-generator ${CMAKE_GENERATOR}
    --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
-   --build-makeprogram ${CMAKE_MAKE_PROGRAM}
    --build-options -C${ExportImport_BINARY_DIR}/InitialCache.cmake
   VERBATIM
   )
diff --git a/Tests/ExportImport/InitialCache.cmake.in b/Tests/ExportImport/InitialCache.cmake.in
index 98d355f..fba6ee2 100644
--- a/Tests/ExportImport/InitialCache.cmake.in
+++ b/Tests/ExportImport/InitialCache.cmake.in
@@ -1,3 +1,4 @@
+set(CMAKE_MAKE_PROGRAM "@CMAKE_TEST_MAKEPROGRAM@" CACHE FILEPATH "Make Program")
 set(CMAKE_C_COMPILER "@CMAKE_C_COMPILER@" CACHE STRING "C Compiler")
 set(CMAKE_C_FLAGS "@CMAKE_C_FLAGS@" CACHE STRING "C Flags")
 set(CMAKE_C_FLAGS_DEBUG "@CMAKE_C_FLAGS_DEBUG@" CACHE STRING "C Flags")
diff --git a/Tests/Fortran/CMakeLists.txt b/Tests/Fortran/CMakeLists.txt
index cda5fed..8f165ce 100644
--- a/Tests/Fortran/CMakeLists.txt
+++ b/Tests/Fortran/CMakeLists.txt
@@ -198,13 +198,13 @@ if(TEST_MODULE_DEPENDS)
          --build-project ExtFort
          --build-generator ${CMAKE_GENERATOR}
          --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
-         --build-makeprogram ${CMAKE_MAKE_PROGRAM}
          --build-options -DCMAKE_Fortran_COMPILER:STRING=${CMAKE_Fortran_COMPILER}
                          -DCMAKE_Fortran_FLAGS:STRING=${CMAKE_Fortran_FLAGS}
                          -DCMAKE_Fortran_FLAGS_DEBUG:STRING=${CMAKE_Fortran_FLAGS_DEBUG}
                          -DCMAKE_Fortran_FLAGS_RELEASE:STRING=${CMAKE_Fortran_FLAGS_RELEASE}
                          -DCMAKE_Fortran_FLAGS_MINSIZEREL:STRING=${CMAKE_Fortran_FLAGS_MINSIZEREL}
                          -DCMAKE_Fortran_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_Fortran_FLAGS_RELWITHDEBINFO}
+                         -DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_TEST_MAKEPROGRAM}
                          ${External_BUILD_TYPE}
     VERBATIM
     )
diff --git a/Tests/MacRuntimePath/CMakeLists.txt b/Tests/MacRuntimePath/CMakeLists.txt
index 5e5b6c4..a87b41e 100644
--- a/Tests/MacRuntimePath/CMakeLists.txt
+++ b/Tests/MacRuntimePath/CMakeLists.txt
@@ -38,7 +38,6 @@ add_custom_command(
     --build-target install
     --build-generator ${CMAKE_GENERATOR}
     --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
-    --build-makeprogram ${CMAKE_MAKE_PROGRAM}
     --build-options -C${MacRuntimePath_BINARY_DIR}/InitialCache.cmake
   VERBATIM
   )
@@ -60,7 +59,6 @@ add_custom_command(
    --build-project MacRuntimePath_B
    --build-generator ${CMAKE_GENERATOR}
    --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
-   --build-makeprogram ${CMAKE_MAKE_PROGRAM}
    --build-options -C${MacRuntimePath_BINARY_DIR}/InitialCache.cmake
   VERBATIM
   )
diff --git a/Tests/MacRuntimePath/InitialCache.cmake.in b/Tests/MacRuntimePath/InitialCache.cmake.in
index be15eb3..3dc9041 100644
--- a/Tests/MacRuntimePath/InitialCache.cmake.in
+++ b/Tests/MacRuntimePath/InitialCache.cmake.in
@@ -1,3 +1,4 @@
+set(CMAKE_MAKE_PROGRAM "@CMAKE_TEST_MAKEPROGRAM@" CACHE FILEPATH "Make Program")
 set(CMAKE_C_COMPILER "@CMAKE_C_COMPILER@" CACHE STRING "C Compiler")
 set(CMAKE_C_FLAGS "@CMAKE_C_FLAGS@" CACHE STRING "C Flags")
 set(CMAKE_C_FLAGS_DEBUG "@CMAKE_C_FLAGS_DEBUG@" CACHE STRING "C Flags")

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=c2533fb487b1a6c2cbf101815ca2124480ce7532
commit c2533fb487b1a6c2cbf101815ca2124480ce7532
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Nov 15 10:33:04 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:26 2013 -0500

    Tests: Configure SubProject-Stage2 test more robustly
    
    Fix the condition that adds the test to check CMAKE_TEST_GENERATOR
    rather than the tools used to build CMake.  Drop the test on Ninja
    because the generator does not support subproject generation anyway.
    Stop using the general build_generator_args and pass the
    --build-generator options explicitly.  Also pass --build-makeprogram
    explicitly when CMAKE_TEST_MAKEPROGRAM is available because there is no
    CMakeCache.txt in the test project subdirectory from which to pick up
    the make program.

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 59aa59f..43ae52a 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -506,8 +506,8 @@ if(BUILD_TESTING)
   endif()
 
   # test for correct sub-project generation
-  # not implemented in VS6 or Xcode
-  if(NOT MSVC60 AND NOT XCODE AND NOT MSVC70)
+  # not implemented in VS 6, VS 7.0, Xcode, or Ninja
+  if(NOT CMAKE_TEST_GENERATOR MATCHES "Visual Studio [67]$|Xcode|Ninja")
     # run cmake and configure all of SubProject
     # but only build the independent executable car
     add_test(SubProject ${CMAKE_CTEST_COMMAND}
@@ -521,24 +521,23 @@ if(BUILD_TESTING)
       --test-command car
       )
 
-    if(${CMAKE_TEST_GENERATOR} MATCHES "Ninja")
-      # The Ninja generator does not create a recursive build system.  Start
-      # from the root directory.
-      set(SubProject_SUBDIR)
-    else()
-      set(SubProject_SUBDIR "/foo")
-    endif()
-
     # For stage 2, do not run cmake again.
     # Then build the foo sub project which should build
     # the bar library which should be referenced because
     # foo links to the static library bar, but bar is not
     # directly in the foo sub project
+    if(CMAKE_TEST_MAKEPROGRAM)
+      set(SubProject-Stage2_BUILD_MAKEPROGRAM
+        --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
+        )
+    endif()
     add_test(SubProject-Stage2  ${CMAKE_CTEST_COMMAND}
       --build-and-test
-      "${CMake_SOURCE_DIR}/Tests/SubProject${SubProject_SUBDIR}"
-      "${CMake_BINARY_DIR}/Tests/SubProject${SubProject_SUBDIR}"
-      ${build_generator_args}
+      "${CMake_SOURCE_DIR}/Tests/SubProject/foo"
+      "${CMake_BINARY_DIR}/Tests/SubProject/foo"
+      --build-generator ${CMAKE_TEST_GENERATOR}
+      --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}"
+      ${SubProject-Stage2_BUILD_MAKEPROGRAM}
       --build-nocmake
       --build-project foo
       --build-target foo

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=1af148b30d7a18442aa1906de9834b6f8a91352c
commit 1af148b30d7a18442aa1906de9834b6f8a91352c
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 14:27:46 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:25 2013 -0500

    Tests: Simplify VSExcludeFromDefaultBuild configuration
    
    Create a CTEST_TEST_DEVENV variable that is set to the
    CMAKE_MAKE_PROGRAM used for Visual Studio 7, 8, and 9.  It will always
    be either "devenv" or "VCExpress", and not "MSBuild".  Add the
    VSExcludeFromDefaultBuild test only when this variable is set, and use
    its value as the --build-makeprogram value.
    
    More work will be needed later to restore the test on VS 10 and above
    when devenv is available, but this is the simplest approach for now.

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index fc2d8a4..59aa59f 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -45,8 +45,13 @@ configure_file(${CMake_SOURCE_DIR}/Tests/EnforceConfig.cmake.in
 
 # Testing
 if(BUILD_TESTING)
+  set(CMAKE_TEST_DEVENV "")
   if(NOT CMAKE_TEST_DIFFERENT_GENERATOR)
     set(CMAKE_TEST_MAKEPROGRAM "${CMAKE_MAKE_PROGRAM}")
+    if(CMAKE_TEST_GENERATOR MATCHES "Visual Studio [7-9] " AND
+        NOT CMAKE_MAKE_PROGRAM MATCHES "[mM][sS][bB][uU][iI][lL][dD]\\.[eE][xX][eE]")
+      set(CMAKE_TEST_DEVENV "${CMAKE_MAKE_PROGRAM}")
+    endif()
   endif()
 
   if("${CMAKE_TEST_GENERATOR}" MATCHES "Unix Makefiles" OR ("${CMAKE_TEST_GENERATOR}" MATCHES Ninja AND NOT WIN32))
@@ -1616,7 +1621,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       --test-command VSMidl)
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/VSMidl")
 
-    if(NOT MSVC60 AND NOT CMAKE_TEST_MAKEPROGRAM MATCHES "[mM][sS][bB][uU][iI][lL][dD]\\.[eE][xX][eE]")
+    if(CMAKE_TEST_DEVENV)
       # The test (and tested property) works with .sln files, so it's skipped when:
       # * Using VS6, which doesn't use .sln files
       # * cmake --build is set up to use MSBuild, since the MSBuild invocation does not use the .sln file
@@ -1628,7 +1633,9 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
           "${CMake_BINARY_DIR}/Tests/VSExcludeFromDefaultBuild"
           --build-config ${config}
           --build-two-config
-          ${build_generator_args}
+          --build-generator ${CMAKE_TEST_GENERATOR}
+          --build-makeprogram ${CMAKE_TEST_DEVENV}
+          --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}"
           --build-project VSExcludeFromDefaultBuild
           --test-command ${CMAKE_COMMAND}
              -D "activeConfig=${config}"

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5af4d742c7a9b35765eefb5020248a0da796e137
commit 5af4d742c7a9b35765eefb5020248a0da796e137
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 14:21:40 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:25 2013 -0500

    Tests: Simplify VSProjectInSubdir configuration
    
    The test is only enabled on VS 10 and above, where the generators now
    select for "ctest --build-and-test" the MSBuild tool by default.
    Simplify the test configuration by dropping the --build-makeprogram
    option and all the logic needed to compute its value.  The test will
    automatically use MSBuild.

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index e618f14..fc2d8a4 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -1645,31 +1645,17 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     endif()
 
     if(CMAKE_TEST_GENERATOR MATCHES "Visual Studio ([0-5]|[6-9][0-9])")
-      if(CMAKE_TEST_MAKEPROGRAM MATCHES "[mM][sS][bB][uU][iI][lL][dD]\\.[eE][xX][eE]")
-        set(MSBUILD_EXECUTABLE "${CMAKE_TEST_MAKEPROGRAM}")
-      else()
-        if(CMAKE_TEST_GENERATOR MATCHES "Visual Studio (12)")
-          set(_msbuild_hints "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\${CMAKE_MATCH_1}.0;MSBuildToolsPath]")
-        else()
-          set(_FDIR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7;FrameworkDir32]")
-          set(_FVER "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7;FrameworkVer32]")
-          set(_msbuild_hints ${_FDIR}/${_FVER})
-        endif()
-        find_program(MSBUILD_EXECUTABLE NAMES msbuild HINTS ${_msbuild_hints})
-      endif()
-      if(MSBUILD_EXECUTABLE)
-        add_test(NAME VSProjectInSubdir COMMAND ${CMAKE_CTEST_COMMAND}
-          --build-and-test
-          "${CMake_SOURCE_DIR}/Tests/VSProjectInSubdir"
-          "${CMake_BINARY_DIR}/Tests/VSProjectInSubdir"
-          --build-two-config
-          --build-generator ${CMAKE_TEST_GENERATOR}
-          --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}"
-          --build-makeprogram "${MSBUILD_EXECUTABLE}"
-          --build-project VSProjectInSubdir
-          --build-target test)
-        list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/VSProjectInSubdir")
-      endif()
+      # This is Visual Studio 10 or above, so the default build tool is MSBuild.
+      add_test(NAME VSProjectInSubdir COMMAND ${CMAKE_CTEST_COMMAND}
+        --build-and-test
+        "${CMake_SOURCE_DIR}/Tests/VSProjectInSubdir"
+        "${CMake_BINARY_DIR}/Tests/VSProjectInSubdir"
+        --build-two-config
+        --build-generator ${CMAKE_TEST_GENERATOR}
+        --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}"
+        --build-project VSProjectInSubdir
+        --build-target test)
+      list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/VSProjectInSubdir")
     endif()
   endif()
 

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=699ef9b0dcab8df8b5d28622bc400466d15af87b
commit 699ef9b0dcab8df8b5d28622bc400466d15af87b
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 13:32:39 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:25 2013 -0500

    Tests: Simplify CTest.BuildCommand.ProjectInSubdir configuration
    
    Collect all ctest_configure options in a list to configure it into the
    test script.  Drop the unused -DCMAKE_MAKE_PROGRAM argument to ctest.

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index cd4a843..e618f14 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -1829,17 +1829,18 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
 #        )
 
   # A test for ctest_build() with targets in subdirectories
+  set(ctest_configure_options)
   if(CMAKE_TEST_GENERATOR_TOOLSET)
-    set(CMAKE_TEST_GENERATOR_TOOLSET_SELECTION "-T;${CMAKE_TEST_GENERATOR_TOOLSET};")
-  else()
-    set(CMAKE_TEST_GENERATOR_TOOLSET_SELECTION)
+    list(APPEND ctest_configure_options -T ${CMAKE_TEST_GENERATOR_TOOLSET})
+  endif()
+  if(CMAKE_TEST_MAKEPROGRAM)
+    list(APPEND ctest_configure_options -DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_TEST_MAKEPROGRAM})
   endif()
   configure_file("${CMake_SOURCE_DIR}/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake.in"
                  "${CMake_BINARY_DIR}/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake" @ONLY)
-  unset(CMAKE_TEST_GENERATOR_TOOLSET_SELECTION)
+  unset(ctest_configure_options)
   add_test(CTest.BuildCommand.ProjectInSubdir
-    ${CMAKE_CTEST_COMMAND} -S "${CMake_BINARY_DIR}/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake"
-                           -DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_TEST_MAKEPROGRAM})
+    ${CMAKE_CTEST_COMMAND} -S "${CMake_BINARY_DIR}/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake")
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/CTestBuildCommandProjectInSubdir/Nested")
 
   set(CTEST_TEST_UPDATE 1)
diff --git a/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake.in b/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake.in
index ea48c78..abf010b 100644
--- a/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake.in
+++ b/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake.in
@@ -8,5 +8,5 @@ set(CTEST_BUILD_CONFIGURATION "@CTestTest_CONFIG@")
 
 ctest_empty_binary_directory(${CTEST_BINARY_DIRECTORY})
 ctest_start(Experimental)
-ctest_configure(OPTIONS "@CMAKE_TEST_GENERATOR_TOOLSET_SELECTION at -DCMAKE_MAKE_PROGRAM:FILEPATH=@CMAKE_TEST_MAKEPROGRAM@")
+ctest_configure(OPTIONS "@ctest_configure_options@")
 ctest_build(TARGET test)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=23e303f1562830b32756941679c02e8379f4092a
commit 23e303f1562830b32756941679c02e8379f4092a
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Nov 15 09:12:55 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:25 2013 -0500

    Tests: Pass --build-options to every test
    
    Create a "build_options" variable whose value is passed to every
    "ctest --build-and-test" call through the --build-options argument.

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index b0aaf17..cd4a843 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -11,7 +11,7 @@ macro(ADD_TEST_MACRO NAME COMMAND)
     ${build_generator_args}
     --build-project ${proj}
     ${${NAME}_CTEST_OPTIONS}
-    --build-options
+    --build-options ${build_options}
     ${${NAME}_BUILD_OPTIONS}
     --test-command ${COMMAND} ${ARGN})
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/${dir}")
@@ -83,6 +83,8 @@ if(BUILD_TESTING)
       )
   endif()
 
+  set(build_options)
+
   add_subdirectory(CMakeLib)
   add_subdirectory(CMakeOnly)
   add_subdirectory(RunCMake)
@@ -282,6 +284,7 @@ if(BUILD_TESTING)
       --build-two-config
       ${build_generator_args}
       --build-project InterfaceBuildTargets
+      --build-options ${build_options}
       --test-command ${CMAKE_CMAKE_COMMAND} -E touch_nocreate ${InterfaceBuildTargets_libname}
       )
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/InterfaceBuildTargets")
@@ -325,6 +328,7 @@ if(BUILD_TESTING)
       "${CMake_BINARY_DIR}/Tests/BundleUtilities"
       ${build_generator_args}
       --build-project BundleUtilities
+      --build-options ${build_options}
       )
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BundleUtilities")
 
@@ -337,7 +341,7 @@ if(BUILD_TESTING)
         "${CMake_BINARY_DIR}/Tests/Qt4Deploy"
         ${build_generator_args}
         --build-project Qt4Deploy
-        --build-options
+        --build-options ${build_options}
         -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
         -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
         )
@@ -375,7 +379,8 @@ if(BUILD_TESTING)
     --build-project ExternalDataTest
     --build-noclean
     --force-new-ctest-process
-    --build-options -DMAKE_SUPPORTS_SPACES=${MAKE_SUPPORTS_SPACES}
+    --build-options ${build_options}
+      -DMAKE_SUPPORTS_SPACES=${MAKE_SUPPORTS_SPACES}
     --test-command ${CMAKE_CTEST_COMMAND} -C \${CTEST_CONFIGURATION_TYPE} -V
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Module/ExternalData")
@@ -408,7 +413,8 @@ if(BUILD_TESTING)
     ${build_generator_args}
     --build-project LinkFlags
     --build-target LinkFlags
-    --build-options -DTEST_CONFIG=\${CTEST_CONFIGURATION_TYPE}
+    --build-options ${build_options}
+      -DTEST_CONFIG=\${CTEST_CONFIGURATION_TYPE}
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/LinkFlags")
 
@@ -456,6 +462,7 @@ if(BUILD_TESTING)
          --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}"
          --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
          --build-project Simple
+         --build-options ${build_options}
          --test-command Simple)
       list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Simple_EclipseGenerator")
     endif ()
@@ -471,6 +478,7 @@ if(BUILD_TESTING)
          --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}"
          --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
          --build-project Simple
+         --build-options ${build_options}
          --test-command Simple)
       list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Simple_CodeBlocksGenerator")
     endif ()
@@ -485,6 +493,7 @@ if(BUILD_TESTING)
          --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}"
          --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
          --build-project Simple
+         --build-options ${build_options}
          --test-command Simple)
       list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Simple_KDevelop3Generator")
     endif ()
@@ -503,6 +512,7 @@ if(BUILD_TESTING)
       --build-project SubProject
       ${build_generator_args}
       --build-target car
+      --build-options ${build_options}
       --test-command car
       )
 
@@ -528,6 +538,7 @@ if(BUILD_TESTING)
       --build-project foo
       --build-target foo
       --build-exe-dir "${CMake_BINARY_DIR}/Tests/SubProject/foo"
+      --build-options ${build_options}
       --test-command foo
       )
     set_tests_properties ( SubProject-Stage2 PROPERTIES DEPENDS SubProject)
@@ -568,7 +579,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     --build-two-config
     ${build_generator_args}
     --build-project Framework
-    --build-options
+    --build-options ${build_options}
     "-DCMAKE_INSTALL_PREFIX:PATH=${CMake_BINARY_DIR}/Tests/Framework/Install"
     --test-command bar)
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Framework")
@@ -580,6 +591,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     --build-two-config
     ${build_generator_args}
     --build-project TargetName
+    --build-options ${build_options}
     --test-command ${CMAKE_CMAKE_COMMAND} -E compare_files
     ${CMake_SOURCE_DIR}/Tests/TargetName/scripts/hello_world
     ${CMake_BINARY_DIR}/Tests/TargetName/scripts/hello_world)
@@ -593,6 +605,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-project LibName
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/LibName/lib"
+    --build-options ${build_options}
     --test-command foobar
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/LibName")
@@ -605,6 +618,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-project CustComDepend
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/CustComDepend/bin"
+    --build-options ${build_options}
     --test-command foo bar.c
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/CustComDepend")
@@ -616,6 +630,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-project ArgumentExpansion
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/ArgumentExpansion/bin"
+    --build-options ${build_options}
     )
   set_tests_properties(ArgumentExpansion PROPERTIES
     FAIL_REGULAR_EXPRESSION "Unexpected: ")
@@ -627,7 +642,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     "${CMake_BINARY_DIR}/Tests/GeneratorExpression"
     ${build_generator_args}
     --build-project GeneratorExpression
-    --build-options -DCMAKE_BUILD_TYPE=\${CTEST_CONFIGURATION_TYPE}
+    --build-options ${build_options}
+      -DCMAKE_BUILD_TYPE=\${CTEST_CONFIGURATION_TYPE}
     --test-command ${CMAKE_CTEST_COMMAND} -C \${CTEST_CONFIGURATION_TYPE} -V
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/GeneratorExpression")
@@ -640,6 +656,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-project CustomCommand
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/CustomCommand/bin"
+    --build-options ${build_options}
     --test-command CustomCommand
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/CustomCommand")
@@ -653,6 +670,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     --build-two-config
     ${build_generator_args}
     --build-project TestWorkingDir
+    --build-options ${build_options}
     --test-command working
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/CustomCommandWorkingDirectory")
@@ -664,6 +682,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
    #  ${build_generator_args}
    #  --build-project SimpleExclude
    #  --build-two-config
+   #  --build-options ${build_options}
    #  --test-command t4
    #--test-command "${CMAKE_COMMAND}"
    #"-DCONFIGURATION=\${CTEST_CONFIGURATION_TYPE}"
@@ -677,6 +696,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
 #    ${build_generator_args}
 #    --build-project SameName
 #    --build-two-config
+#    --build-options ${build_options}
 #    --test-command
 #    "${CMake_BINARY_DIR}/Tests/SameName/Exe1/mytest2")
 
@@ -687,6 +707,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-project OutOfSource
     --build-two-config
+    --build-options ${build_options}
     --test-command
     "${CMake_BINARY_DIR}/Tests/OutOfSource/SubDir/OutOfSourceSubdir/simple")
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/OutOfSource")
@@ -699,6 +720,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     "${CMake_BINARY_DIR}/Tests/BuildDepends"
     ${build_generator_args}
     --build-project BuildDepends
+    --build-options ${build_options}
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BuildDepends")
 
@@ -711,7 +733,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-project TestSimpleInstall
     --build-two-config
-    --build-options
+    --build-options ${build_options}
     "-DCMAKE_INSTALL_PREFIX:PATH=${SimpleInstallInstallDir}"
     "-DCTEST_TEST_CPACK:BOOL=${CTEST_TEST_CPACK}"
     --test-command   ${SimpleInstallInstallDir}/MyTest/bin/SimpleInstExe)
@@ -723,7 +745,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-project TestSimpleInstall
     --build-two-config
-    --build-options
+    --build-options ${build_options}
     "-DCMAKE_INSTALL_PREFIX:PATH=${SimpleInstallInstallDir}"
     "-DSTAGE2:BOOL=1"
     --test-command   ${SimpleInstallInstallDir}/MyTest/bin/SimpleInstExeS2)
@@ -777,6 +799,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
         "${CMake_BINARY_DIR}/Tests/CPackWiXGenerator"
         ${build_generator_args}
         --build-project CPackWiXGenerator
+        --build-options ${build_options}
         --test-command ${CMAKE_CMAKE_COMMAND}
           "-DCPackWiXGenerator_BINARY_DIR:PATH=${CMake_BINARY_DIR}/Tests/CPackWiXGenerator"
           -P "${CMake_SOURCE_DIR}/Tests/CPackWiXGenerator/RunCPackVerifyResult.cmake")
@@ -801,7 +824,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       --build-project CPackComponents
       --build-two-config
       --build-target package
-      --build-options
+      --build-options ${build_options}
         -DCPACK_BINARY_DEB:BOOL=${CPACK_BINARY_DEB}
         -DCPACK_BINARY_RPM:BOOL=${CPACK_BINARY_RPM}
         ${CPackComponents_BUILD_OPTIONS}
@@ -860,7 +883,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
           "${CMake_BINARY_DIR}/Tests/CPackComponentsForAll/build${CPackGen}-${CPackComponentWay}"
           ${build_generator_args}
           --build-project CPackComponentsForAll
-          --build-options
+          --build-options ${build_options}
              -DCPACK_BINARY_${CPackGen}:BOOL=ON
              ${CPackRun_CPackComponentWay}
              ${CPackComponentsForAll_BUILD_OPTIONS}
@@ -897,6 +920,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       "${CMake_BINARY_DIR}/Tests/CPackTestAllGenerators"
       ${build_generator_args}
       --build-project CPackTestAllGenerators
+      --build-options ${build_options}
       --test-command
       ${CMAKE_CMAKE_COMMAND}
         -D dir=${CMake_BINARY_DIR}/Tests/CPackTestAllGenerators
@@ -919,6 +943,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     --build-project UseX11
     --build-two-config
     ${X11_build_target_arg}
+    --build-options ${build_options}
     --test-command  UseX11)
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/X11")
 
@@ -972,6 +997,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     "${CMake_BINARY_DIR}/Tests/LoadCommandOneConfig"
     ${build_generator_args}
     --build-project LoadCommand
+    --build-options ${build_options}
     --test-command  LoadedCommand
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/LoadCommandOneConfig")
@@ -985,7 +1011,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-project Complex
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/Complex/bin"
-    --build-options
+    --build-options ${build_options}
     -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
     --test-command complex
     )
@@ -998,7 +1024,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-project Complex
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/ComplexOneConfig/bin"
-    --build-options
+    --build-options ${build_options}
     -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
     --test-command complex)
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/ComplexOneConfig")
@@ -1012,6 +1038,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-project HELLO
     --build-exe-dir "${CMake_BINARY_DIR}/Example/Demo"
+    --build-options ${build_options}
     --test-command helloDemo
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Example")
@@ -1024,6 +1051,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     --build-project EnvironmentProj
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/Environment"
     --force-new-ctest-process
+    --build-options ${build_options}
     --test-command ${CMAKE_CTEST_COMMAND} -V
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Environment")
@@ -1034,7 +1062,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     "${CMake_BINARY_DIR}/Tests/QtAutomocNoQt"
     ${build_generator_args}
     --build-project QtAutomocNoQt
-    --build-options -DCMAKE_BUILD_TYPE=\${CTEST_CONFIGURATION_TYPE}
+    --build-options ${build_options}
+      -DCMAKE_BUILD_TYPE=\${CTEST_CONFIGURATION_TYPE}
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/QtAutomocNoQt")
 
@@ -1057,7 +1086,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       --build-project QtAutogen
       --build-exe-dir "${CMake_BINARY_DIR}/Tests/Qt5Autogen"
       --force-new-ctest-process
-      --build-options -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} -DQT_TEST_VERSION=5
+      --build-options ${build_options}
+        -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} -DQT_TEST_VERSION=5
       --test-command ${run_autogen_test}
       )
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Qt5Autogen")
@@ -1071,7 +1101,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       --build-project QtAutogen
       --build-exe-dir "${CMake_BINARY_DIR}/Tests/Qt4Autogen"
       --force-new-ctest-process
-      --build-options -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} -DQT_TEST_VERSION=4
+      --build-options ${build_options}
+        -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} -DQT_TEST_VERSION=4
       --test-command ${run_autogen_test}
       )
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Qt4Autogen")
@@ -1084,7 +1115,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       --build-project Qt4Targets
       --build-exe-dir "${CMake_BINARY_DIR}/Tests/Qt4Targets"
       --force-new-ctest-process
-      --build-options -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
+      --build-options ${build_options}
+        -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
       --test-command ${CMAKE_CTEST_COMMAND} -V
       )
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Qt4Targets")
@@ -1098,6 +1130,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
         --build-project Qt4And5Automoc
         --build-exe-dir "${CMake_BINARY_DIR}/Tests/Qt4And5Automoc"
         --force-new-ctest-process
+        --build-options ${build_options}
         --test-command ${CMAKE_CTEST_COMMAND} -V
         )
       list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Qt4And5Automoc")
@@ -1117,6 +1150,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     --build-project ExternalProjectTest
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/ExternalProject"
     --force-new-ctest-process
+    --build-options ${build_options}
     --test-command ${CMAKE_CTEST_COMMAND} -V
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/ExternalProject")
@@ -1131,6 +1165,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     --build-project ExternalProjectUpdateTest
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/ExternalProjectUpdate"
     --force-new-ctest-process
+    --build-options ${build_options}
     --test-command ${CMAKE_CTEST_COMMAND} -V
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/ExternalProjectUpdate")
@@ -1161,6 +1196,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       --build-two-config
       ${build_generator_args}
       --build-project Tutorial
+      --build-options ${build_options}
       --test-command Tutorial 25.0)
   endforeach()
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Tutorial")
@@ -1171,6 +1207,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     "${CMake_BINARY_DIR}/Tests/Testing"
     ${build_generator_args}
     --build-project Testing
+    --build-options ${build_options}
     --test-command ${CMAKE_CTEST_COMMAND} -C \${CTEST_CONFIGURATION_TYPE}
     )
   set_tests_properties(testing PROPERTIES PASS_REGULAR_EXPRESSION "Passed")
@@ -1183,6 +1220,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-project Wrapping
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/Wrapping/bin"
+    --build-options ${build_options}
     --test-command wrapping
     )
   add_test(qtwrapping  ${CMAKE_CTEST_COMMAND}
@@ -1192,6 +1230,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-project Wrapping
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/Wrapping/bin"
+    --build-options ${build_options}
       --test-command qtwrapping
       )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Wrapping")
@@ -1203,6 +1242,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/Wrapping/bin"
     --build-project TestDriverTest
+    --build-options ${build_options}
     --test-command TestDriverTest test1
     )
 
@@ -1213,6 +1253,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/Wrapping/bin"
     --build-project TestDriverTest
+    --build-options ${build_options}
     --test-command TestDriverTest test2
     )
 
@@ -1223,6 +1264,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/Wrapping/bin"
     --build-project TestDriverTest
+    --build-options ${build_options}
     --test-command TestDriverTest subdir/test3
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/TestDriver")
@@ -1234,6 +1276,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/Dependency/Exec"
     ${build_generator_args}
     --build-project Dependency
+    --build-options ${build_options}
     --test-command exec
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Dependency")
@@ -1263,7 +1306,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       --build-exe-dir "${CMake_BINARY_DIR}/Tests/Jump/WithLibOut/Executable"
       --build-project Jump
       ${build_generator_args}
-      --build-options
+      --build-options ${build_options}
       -DLIBRARY_OUTPUT_PATH:PATH=${CMake_BINARY_DIR}/Tests/Jump/WithLibOut/Lib
       --test-command jumpExecutable
       )
@@ -1276,6 +1319,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       --build-run-dir "${CMake_BINARY_DIR}/Tests/Jump/NoLibOut/Executable"
       --build-project Jump
       ${build_generator_args}
+      --build-options ${build_options}
       --test-command jumpExecutable
       )
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Jump")
@@ -1287,6 +1331,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       ${build_generator_args}
       --build-project Plugin
       --build-two-config
+      --build-options ${build_options}
       --test-command bin/example)
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Plugin")
 
@@ -1302,6 +1347,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       "${CMake_BINARY_DIR}/Tests/MacRuntimePath"
       ${build_generator_args}
       --build-project MacRuntimePath
+      --build-options ${build_options}
       )
   endif()
 
@@ -1311,6 +1357,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     "${CMake_BINARY_DIR}/Tests/LinkLineOrder"
     ${build_generator_args}
     --build-project LinkLineOrder
+    --build-options ${build_options}
     --test-command Exec1
     )
 
@@ -1320,6 +1367,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     "${CMake_BINARY_DIR}/Tests/LinkLineOrder"
     ${build_generator_args}
     --build-project LinkLineOrder
+    --build-options ${build_options}
     --test-command Exec2
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/LinkLineOrder")
@@ -1340,7 +1388,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       "${CMake_BINARY_DIR}/Tests/LinkStatic"
       ${build_generator_args}
       --build-project LinkStatic
-      --build-options -DMATH_LIBRARY:FILEPATH=/usr/lib/libm.a
+      --build-options ${build_options}
+        -DMATH_LIBRARY:FILEPATH=/usr/lib/libm.a
       --test-command LinkStatic
       )
   endif()
@@ -1352,6 +1401,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       "${CMake_BINARY_DIR}/Tests/kwsys"
       ${build_generator_args}
       --build-project kwsys
+      --build-options ${build_options}
       --test-command kwsysTestsCxx testIOS
       )
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/kwsys")
@@ -1366,6 +1416,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       "${CMake_BINARY_DIR}/Tests/SubDirSpaces/Executable Sources"
       ${build_generator_args}
       --build-project SUBDIR
+      --build-options ${build_options}
       --test-command test
       "${CMake_BINARY_DIR}/Tests/SubDirSpaces/ShouldBeHere"
       "${CMake_BINARY_DIR}/Tests/SubDirSpaces/testfromsubdir.obj"
@@ -1381,6 +1432,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       --build-exe-dir "${CMake_BINARY_DIR}/Tests/SubDir/Executable"
       ${build_generator_args}
       --build-project SUBDIR
+      --build-options ${build_options}
       --test-command test
       "${CMake_BINARY_DIR}/Tests/SubDir/ShouldBeHere"
       "${CMake_BINARY_DIR}/Tests/SubDir/testfromsubdir.obj"
@@ -1393,6 +1445,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       --build-exe-dir "${CMake_BINARY_DIR}/Tests/SubDir/Executable"
       ${build_generator_args}
       --build-project SUBDIR
+      --build-options ${build_options}
       --test-command test
       "${CMake_BINARY_DIR}/Tests/SubDir/ShouldBeHere"
       "${CMake_BINARY_DIR}/Tests/SubDir/testfromsubdir.o"
@@ -1420,6 +1473,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       ${build_generator_args}
       --build-project MakeClean
       --build-exe-dir "${CMake_BINARY_DIR}/MakeClean"
+      --build-options ${build_options}
       --test-command check_clean
       )
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/MakeClean")
@@ -1524,6 +1578,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       --build-two-config
       ${build_generator_args}
       --build-project mfc_driver
+      --build-options ${build_options}
       --test-command ${CMAKE_CTEST_COMMAND}
         -C \${CTEST_CONFIGURATION_TYPE} -VV)
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/MFC")
@@ -1546,6 +1601,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       --build-two-config
       ${build_generator_args}
       --build-project VSExternalInclude
+      --build-options ${build_options}
       --test-command VSExternalInclude)
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/VSExternalInclude")
 
@@ -1556,6 +1612,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       --build-two-config
       ${build_generator_args}
       --build-project VSMidl
+      --build-options ${build_options}
       --test-command VSMidl)
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/VSMidl")
 
@@ -1629,7 +1686,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
         --build-project BundleTest
         --build-target install
 #       --build-target package
-        --build-options "-DCMAKE_INSTALL_PREFIX:PATH=${BundleTestInstallDir}"
+        --build-options ${build_options}
+        "-DCMAKE_INSTALL_PREFIX:PATH=${BundleTestInstallDir}"
         "-DCMake_SOURCE_DIR:PATH=${CMake_SOURCE_DIR}"
         --test-command
         ${BundleTestInstallDir}/Applications/SecondBundleExe.app/Contents/MacOS/SecondBundleExe)
@@ -1642,6 +1700,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
         --build-two-config
         ${build_generator_args}
         --build-project CFBundleTest
+        --build-options ${build_options}
         --test-command
         ${CMAKE_CMAKE_COMMAND} -DCTEST_CONFIGURATION_TYPE=\${CTEST_CONFIGURATION_TYPE}
         -Ddir=${CMake_BINARY_DIR}/Tests/CFBundleTest
@@ -1662,7 +1721,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       ${build_generator_args}
       --build-project BundleGeneratorTest
       --build-target package
-      --build-options "-DCMAKE_INSTALL_PREFIX:PATH=${CMake_BINARY_DIR}/Tests/BundleGeneratorTest/InstallDirectory"
+      --build-options ${build_options}
+        "-DCMAKE_INSTALL_PREFIX:PATH=${CMake_BINARY_DIR}/Tests/BundleGeneratorTest/InstallDirectory"
       )
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BundleGeneratorTest")
   endif()
@@ -1674,7 +1734,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-noclean
     --build-project WarnUnusedUnusedViaSet
-    --build-options "--warn-unused-vars")
+    --build-options ${build_options}
+      "--warn-unused-vars")
   set_tests_properties(WarnUnusedUnusedViaSet PROPERTIES
     PASS_REGULAR_EXPRESSION "unused variable \\(changing definition\\) 'UNUSED_VARIABLE'")
   set_tests_properties(WarnUnusedUnusedViaSet PROPERTIES
@@ -1688,7 +1749,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-noclean
     --build-project WarnUnusedUnusedViaUnset
-    --build-options "--warn-unused-vars")
+    --build-options ${build_options}
+      "--warn-unused-vars")
   set_tests_properties(WarnUnusedUnusedViaUnset PROPERTIES
     PASS_REGULAR_EXPRESSION "CMake Warning .*VariableUnusedViaUnset.CMakeLists.txt:7 \\(set\\):")
   set_tests_properties(WarnUnusedUnusedViaUnset PROPERTIES
@@ -1707,7 +1769,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       "${CMake_BINARY_DIR}/Tests/WarnUnusedCliUnused"
       ${build_generator_args}
       --build-project WarnUnusedCliUnused
-      --build-options "-DUNUSED_CLI_VARIABLE=Unused")
+      --build-options ${build_options}
+        "-DUNUSED_CLI_VARIABLE=Unused")
     set_tests_properties(WarnUnusedCliUnused PROPERTIES
       PASS_REGULAR_EXPRESSION "CMake Warning:.*Manually-specified variables were not used by the project:.*  UNUSED_CLI_VARIABLE")
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/WarnUnusedCliUnused")
@@ -1720,7 +1783,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-noclean
     --build-project WarnUnusedCliUsed
-    --build-options "-DUSED_VARIABLE=Usage proven")
+    --build-options ${build_options}
+      "-DUSED_VARIABLE=Usage proven")
   set_tests_properties(WarnUnusedCliUsed PROPERTIES
     PASS_REGULAR_EXPRESSION "Usage proven")
   set_tests_properties(WarnUnusedCliUsed PROPERTIES
@@ -1734,7 +1798,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-noclean
     --build-project WarnUninitialized
-    --build-options "--warn-uninitialized")
+    --build-options ${build_options}
+      "--warn-uninitialized")
   set_tests_properties(WarnUninitialized PROPERTIES
     PASS_REGULAR_EXPRESSION "uninitialized variable 'USED_VARIABLE'")
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/WarnUninitialized")
@@ -1747,6 +1812,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     --build-project TestsWorkingDirectoryProj
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/TestsWorkingDirectory"
     --force-new-ctest-process
+    --build-options ${build_options}
     --test-command ${CMAKE_CTEST_COMMAND} -V -C \${CTEST_CONFIGURATION_TYPE}
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/TestsWorkingDirectory")
@@ -2444,6 +2510,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       ${build_generator_args}
       --build-project testf
       --build-two-config
+      --build-options ${build_options}
       --test-command testf)
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Fortran")
 
@@ -2462,6 +2529,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
         ${build_generator_args}
         --build-project FortranC
         --build-two-config
+        --build-options ${build_options}
         --test-command CMakeFiles/FortranCInterface/FortranCInterface)
       list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/FortranC")
     endif()
@@ -2485,6 +2553,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
           --build-project hello
           --build-two-config
           --build-run-dir "${CMake_BINARY_DIR}/Tests/Java/"
+          --build-options ${build_options}
           --test-command ${JAVA_RUNTIME} -classpath hello.jar HelloWorld)
         list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Java")
       endif()
@@ -2504,7 +2573,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
         "${CMake_BINARY_DIR}/Tests/SimpleCOnly_sdcc"
         ${build_generator_args}
         --build-project SimpleC
-        --build-options
+        --build-options ${build_options}
         "-DCMAKE_SYSTEM_NAME=Generic"
         "-DCMAKE_C_COMPILER=${SDCC_EXECUTABLE}")
       list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/SimpleCOnly_sdcc")
@@ -2522,7 +2591,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
         "${CMake_BINARY_DIR}/Tests/Simple_Mingw_Linux2Win"
         ${build_generator_args}
         --build-project Simple
-        --build-options
+        --build-options ${build_options}
         "-DCMAKE_SYSTEM_NAME=Windows"
         "-DCMAKE_C_COMPILER=${MINGW_CC_LINUX2WIN_EXECUTABLE}"
         "-DCMAKE_CXX_COMPILER=${MINGW_CXX_LINUX2WIN_EXECUTABLE}"
@@ -2616,6 +2685,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     --build-two-config
     ${build_generator_args}
     --build-project IncludeDirectories
+    --build-options ${build_options}
     --test-command IncludeDirectories)
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/IncludeDirectories")
 
@@ -2626,6 +2696,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     --build-two-config
     ${build_generator_args}
     --build-project InterfaceLinkLibraries
+    --build-options ${build_options}
     --test-command InterfaceLinkLibraries)
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/InterfaceLinkLibraries")
 

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=21c3409cb13c17c9a7474bcb3936376d37ff9215
commit 21c3409cb13c17c9a7474bcb3936376d37ff9215
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Nov 15 08:28:25 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:25 2013 -0500

    ctest: Teach --build-options to allow zero options
    
    The --build-options option consumes all following arguments until either
    --build-target or --test-command.  Fix the logic to allow this to be
    zero options.

diff --git a/Source/CTest/cmCTestBuildAndTestHandler.cxx b/Source/CTest/cmCTestBuildAndTestHandler.cxx
index 807a7e8..0fac136 100644
--- a/Source/CTest/cmCTestBuildAndTestHandler.cxx
+++ b/Source/CTest/cmCTestBuildAndTestHandler.cxx
@@ -513,23 +513,14 @@ int cmCTestBuildAndTestHandler::ProcessCommandLineArguments(
     {
     this->BuildNoClean = true;
     }
-  if(currentArg.find("--build-options",0) == 0 && idx < allArgs.size() - 1)
+  if(currentArg.find("--build-options",0) == 0)
     {
-    ++idx;
-    bool done = false;
-    while(idx < allArgs.size() && !done)
+    while(idx+1 < allArgs.size() &&
+          allArgs[idx+1] != "--build-target" &&
+          allArgs[idx+1] != "--test-command")
       {
+      ++idx;
       this->BuildOptions.push_back(allArgs[idx]);
-      if(idx+1 < allArgs.size()
-         && (allArgs[idx+1] == "--build-target" ||
-             allArgs[idx+1] == "--test-command"))
-        {
-        done = true;
-        }
-      else
-        {
-        ++idx;
-        }
       }
     }
   if(currentArg.find("--test-command",0) == 0 && idx < allArgs.size() - 1)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a2ec7f13d41c1316eaf9f0b09a3c8745ba8ae1f4
commit a2ec7f13d41c1316eaf9f0b09a3c8745ba8ae1f4
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 10:14:35 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:24 2013 -0500

    ctest: Make the --build-makeprogram optional for --build-and-test
    
    GenerateBuildCommand now knows how to lookup CMAKE_MAKE_PROGRAM or
    choose a generator-provided default build tool.  Therefore the
    --build-makeprogram can now be optional and simply override the
    default selection when provided.
    
    Note that with --build-nocmake we now need to load the cache in order to
    make the CMAKE_MAKE_PROGRAM entry available to GenerateBuildCommand.

diff --git a/Help/manual/ctest.1.rst b/Help/manual/ctest.1.rst
index eee12fd..60d08dd 100644
--- a/Help/manual/ctest.1.rst
+++ b/Help/manual/ctest.1.rst
@@ -225,8 +225,8 @@ Options
  and or execute a test.  The configure and test steps are optional.
  The arguments to this command line are the source and binary
  directories.  By default this will run CMake on the Source/Bin
- directories specified unless --build-nocmake is specified.  Both
- --build-makeprogram and --build-generator MUST be provided to use
+ directories specified unless --build-nocmake is specified.
+ The --build-generator option *must* be provided to use
  --build-and-test.  If --test-command is specified then that will be
  run after the build is complete.  Other options that affect this
  mode are --build-target --build-nocmake, --build-run-dir,
@@ -265,7 +265,7 @@ Options
  Specify the name of the project to build.
 
 ``--build-makeprogram``
- Specify the make program to use.
+ Override the make program chosen by CTest with a given one.
 
 ``--build-noclean``
  Skip the make clean step.
diff --git a/Source/CTest/cmCTestBuildAndTestHandler.cxx b/Source/CTest/cmCTestBuildAndTestHandler.cxx
index 5e53dbe..807a7e8 100644
--- a/Source/CTest/cmCTestBuildAndTestHandler.cxx
+++ b/Source/CTest/cmCTestBuildAndTestHandler.cxx
@@ -18,6 +18,7 @@
 #include "cmGlobalGenerator.h"
 #include <cmsys/Process.h>
 #include "cmCTestTestHandler.h"
+#include "cmCacheManager.h"
 
 //----------------------------------------------------------------------
 cmCTestBuildAndTestHandler::cmCTestBuildAndTestHandler()
@@ -184,14 +185,14 @@ int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring)
   cmOStringStream out;
 
   // if the generator and make program are not specified then it is an error
-  if (!this->BuildGenerator.size() || !this->BuildMakeProgram.size())
+  if (!this->BuildGenerator.size())
     {
     if(outstring)
       {
       *outstring =
-        "--build-and-test requires that both the generator and makeprogram "
-        "be provided using the --build-generator and --build-makeprogram "
-        "command line options. ";
+        "--build-and-test requires that the generator "
+        "be provided using the --build-generator "
+        "command line option. ";
       }
     return 1;
     }
@@ -238,9 +239,13 @@ int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring)
 
   if(this->BuildNoCMake)
     {
+    // Make the generator available for the Build call below.
     cm.SetGlobalGenerator(cm.CreateGlobalGenerator(
                             this->BuildGenerator.c_str()));
     cm.SetGeneratorToolset(this->BuildGeneratorToolset);
+
+    // Load the cache to make CMAKE_MAKE_PROGRAM available.
+    cm.GetCacheManager()->LoadCache(this->BinaryDir.c_str());
     }
   else
     {

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f9ac25ea3833f95ed20984dcd117143c8d421209
commit f9ac25ea3833f95ed20984dcd117143c8d421209
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 11:14:22 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:24 2013 -0500

    Simplify some calls to cmGlobalGenerator::Build
    
    Code paths that look up CMAKE_MAKE_PROGRAM from the cache only to
    pass it to Build, which only passes it to GenerateBuildCommand,
    no longer need to do so.  GenerateBuildCommand now knows how to
    look up CMAKE_MAKE_PROGRAM in the cache when no explicit value
    is given, so simply pass 0 now.

diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 9609497..b11b274 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -1562,15 +1562,6 @@ int cmGlobalGenerator::TryCompile(const char *srcdir, const char *bindir,
                                         this->FirstTimeProgress);
     }
 
-  std::string makeCommand = this->CMakeInstance->
-    GetCacheManager()->GetCacheValue("CMAKE_MAKE_PROGRAM");
-  if(makeCommand.size() == 0)
-    {
-    cmSystemTools::Error(
-      "Generator cannot find the appropriate make command.");
-    return 1;
-    }
-
   std::string newTarget;
   if (target && strlen(target))
     {
@@ -1590,7 +1581,7 @@ int cmGlobalGenerator::TryCompile(const char *srcdir, const char *bindir,
   const char* config = mf->GetDefinition("CMAKE_TRY_COMPILE_CONFIGURATION");
   return this->Build(srcdir,bindir,projectName,
                      newTarget.c_str(),
-                     output,makeCommand.c_str(),config,false,fast,
+                     output,0,config,false,fast,
                      this->TryCompileTimeout);
 }
 
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 16a6240..bf27c78 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -2663,23 +2663,16 @@ int cmake::Build(const std::string& dir,
     this->CreateGlobalGenerator(it.GetValue()));
   std::string output;
   std::string projName;
-  std::string makeProgram;
   if(!it.Find("CMAKE_PROJECT_NAME"))
     {
     std::cerr << "Error: could not find CMAKE_PROJECT_NAME in Cache\n";
     return 1;
     }
   projName = it.GetValue();
-  if(!it.Find("CMAKE_MAKE_PROGRAM"))
-    {
-    std::cerr << "Error: could not find CMAKE_MAKE_PROGRAM in Cache\n";
-    return 1;
-    }
-  makeProgram = it.GetValue();
   return gen->Build(0, dir.c_str(),
                     projName.c_str(), target.c_str(),
                     &output,
-                    makeProgram.c_str(),
+                    0,
                     config.c_str(), clean, false, 0,
                     cmSystemTools::OUTPUT_PASSTHROUGH,
                     nativeOptions);

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=163dc3628c92f985a37497009ecdc353bc4bac52
commit 163dc3628c92f985a37497009ecdc353bc4bac52
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Nov 13 15:12:06 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:24 2013 -0500

    Teach GenerateBuildCommand to find its own make program
    
    Add a cmGlobalGenerator::SelectMakeProgram method to select a
    caller-provided make program, the CMAKE_MAKE_PROGRAM cache entry, or a
    generator-provided default.  Call it from all implementations of the
    GenerateBuildCommand method with the corresponding generator's default,
    if any.

diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index b653aff..9609497 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -88,6 +88,26 @@ bool cmGlobalGenerator::SetGeneratorToolset(std::string const& ts)
   return false;
 }
 
+std::string cmGlobalGenerator::SelectMakeProgram(const char* makeProgram,
+                                                 std::string makeDefault)
+{
+  if(cmSystemTools::IsOff(makeProgram))
+    {
+    makeProgram =
+      this->CMakeInstance->GetCacheDefinition("CMAKE_MAKE_PROGRAM");
+    if(cmSystemTools::IsOff(makeProgram))
+      {
+      makeProgram = makeDefault.c_str();
+      }
+    if(cmSystemTools::IsOff(makeProgram) &&
+       !(makeProgram && *makeProgram))
+      {
+      makeProgram = "CMAKE_MAKE_PROGRAM-NOTFOUND";
+      }
+    }
+  return makeProgram;
+}
+
 void cmGlobalGenerator::ResolveLanguageCompiler(const std::string &lang,
                                                 cmMakefile *mf,
                                                 bool optional)
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 37e12ff..74d88f3 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -334,6 +334,8 @@ protected:
   typedef std::vector<std::pair<cmQtAutoGenerators, cmTarget*> > AutogensType;
   void CreateQtAutoGeneratorsTargets(AutogensType& autogens);
 
+  std::string SelectMakeProgram(const char* makeProgram,
+                                std::string makeDefault = "");
 
   // Fill the ProjectMap, this must be called after LocalGenerators
   // has been populated.
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx
index 24bfdc3..77571b2 100644
--- a/Source/cmGlobalNinjaGenerator.cxx
+++ b/Source/cmGlobalNinjaGenerator.cxx
@@ -559,7 +559,9 @@ void cmGlobalNinjaGenerator
                        bool /*fast*/,
                        std::vector<std::string> const& makeOptions)
 {
-  makeCommand.push_back(makeProgram);
+  makeCommand.push_back(
+    this->SelectMakeProgram(makeProgram)
+    );
 
   makeCommand.insert(makeCommand.end(),
                      makeOptions.begin(), makeOptions.end());
diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx
index 3aa1f5f..e1af2f9 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.cxx
+++ b/Source/cmGlobalUnixMakefileGenerator3.cxx
@@ -566,7 +566,9 @@ void cmGlobalUnixMakefileGenerator3
                        bool fast,
                        std::vector<std::string> const& makeOptions)
 {
-  makeCommand.push_back(makeProgram);
+  makeCommand.push_back(
+    this->SelectMakeProgram(makeProgram)
+    );
 
   // Since we have full control over the invocation of nmake, let us
   // make it quiet.
diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx
index d4d67d0..6740787 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -311,23 +311,57 @@ void cmGlobalVisualStudio10Generator::GenerateBuildCommand(
   bool fast,
   std::vector<std::string> const& makeOptions)
 {
-  // now build the test
-  std::string lowerCaseCommand = makeProgram;
-  cmSystemTools::LowerCase(lowerCaseCommand);
-
-  // If makeProgram is devenv, parent class knows how to generate command:
-  if (lowerCaseCommand.find("devenv") != std::string::npos ||
-      lowerCaseCommand.find("VCExpress") != std::string::npos)
+  // Check if the caller explicitly requested a devenv tool.
+  std::string makeProgramLower = makeProgram? makeProgram : "";
+  cmSystemTools::LowerCase(makeProgramLower);
+  bool useDevEnv =
+    (makeProgramLower.find("devenv") != std::string::npos ||
+     makeProgramLower.find("vcexpress") != std::string::npos);
+
+  // MSBuild is preferred (and required for VS Express), but if the .sln has
+  // an Intel Fortran .vfproj then we have to use devenv. Parse it to find out.
+  cmSlnData slnData;
+  {
+  std::string slnFile;
+  if(projectDir && *projectDir)
+    {
+    slnFile = projectDir;
+    slnFile += "/";
+    }
+  slnFile += projectName;
+  slnFile += ".sln";
+  cmVisualStudioSlnParser parser;
+  if(parser.ParseFile(slnFile, slnData,
+                      cmVisualStudioSlnParser::DataGroupProjects))
+    {
+    std::vector<cmSlnProjectEntry> slnProjects = slnData.GetProjects();
+    for(std::vector<cmSlnProjectEntry>::iterator i = slnProjects.begin();
+        !useDevEnv && i != slnProjects.end(); ++i)
+      {
+      std::string proj = i->GetRelativePath();
+      if(proj.size() > 7 &&
+         proj.substr(proj.size()-7) == ".vfproj")
+        {
+        useDevEnv = true;
+        // The caller-provided makeProgram did not suggest devenv,
+        // but now we need devenv, so ignore the caller suggestion.
+        makeProgram = 0;
+        }
+      }
+    }
+  }
+  if(useDevEnv)
     {
+    // Use devenv to build solutions containing Intel Fortran projects.
     cmGlobalVisualStudio7Generator::GenerateBuildCommand(
       makeCommand, makeProgram, projectName, projectDir,
       targetName, config, fast, makeOptions);
     return;
     }
 
-  // Otherwise, assume MSBuild command line, and construct accordingly.
-
-  makeCommand.push_back(makeProgram);
+  makeCommand.push_back(
+    this->SelectMakeProgram(makeProgram, this->GetMSBuildCommand())
+    );
 
   // msbuild.exe CxxOnly.sln /t:Build /p:Configuration=Debug /target:ALL_BUILD
   if(!targetName || strlen(targetName) == 0)
@@ -346,28 +380,11 @@ void cmGlobalVisualStudio10Generator::GenerateBuildCommand(
     if (targetProject.find('/') == std::string::npos)
       {
       // it might be in a subdir
-      cmVisualStudioSlnParser parser;
-      cmSlnData slnData;
-      std::string slnFile;
-      if (projectDir && *projectDir)
-        {
-        slnFile = projectDir;
-        slnFile += '/';
-        slnFile += projectName;
-        }
-      else
-        {
-        slnFile = projectName;
-        }
-      if (parser.ParseFile(slnFile + ".sln", slnData,
-                           cmVisualStudioSlnParser::DataGroupProjects))
+      if (cmSlnProjectEntry const* proj =
+          slnData.GetProjectByName(targetName))
         {
-        if (cmSlnProjectEntry const* proj =
-            slnData.GetProjectByName(targetName))
-          {
-          targetProject = proj->GetRelativePath();
-          cmSystemTools::ConvertToUnixSlashes(targetProject);
-          }
+        targetProject = proj->GetRelativePath();
+        cmSystemTools::ConvertToUnixSlashes(targetProject);
         }
       }
     makeCommand.push_back(targetProject);
diff --git a/Source/cmGlobalVisualStudio6Generator.cxx b/Source/cmGlobalVisualStudio6Generator.cxx
index 51f38c2..08ea249 100644
--- a/Source/cmGlobalVisualStudio6Generator.cxx
+++ b/Source/cmGlobalVisualStudio6Generator.cxx
@@ -118,24 +118,9 @@ cmGlobalVisualStudio6Generator::GenerateBuildCommand(
   )
 {
   // now build the test
-  std::vector<std::string> mp;
-  mp.push_back("[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio"
-               "\\6.0\\Setup;VsCommonDir]/MSDev98/Bin");
-  cmSystemTools::ExpandRegistryValues(mp[0]);
-  std::string originalCommand = makeProgram;
-  std::string makeCommandFound =
-    cmSystemTools::FindProgram(makeProgram, mp);
-  if(makeCommandFound.size() == 0)
-    {
-    std::string e = "Generator cannot find Visual Studio 6 msdev program \"";
-    e += originalCommand;
-    e += "\" specified by CMAKE_MAKE_PROGRAM cache entry.  ";
-    e += "Please fix the setting.";
-    cmSystemTools::Error(e.c_str());
-    return;
-    }
-
-  makeCommand.push_back(makeCommandFound);
+  makeCommand.push_back(
+    this->SelectMakeProgram(makeProgram, this->GetMSDevCommand())
+    );
 
   makeCommand.push_back(std::string(projectName)+".dsw");
   makeCommand.push_back("/MAKE");
diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx
index 2602f83..cf38773 100644
--- a/Source/cmGlobalVisualStudio7Generator.cxx
+++ b/Source/cmGlobalVisualStudio7Generator.cxx
@@ -148,7 +148,9 @@ void cmGlobalVisualStudio7Generator::GenerateBuildCommand(
   bool /*fast*/,
   std::vector<std::string> const& makeOptions)
 {
-  makeCommand.push_back(makeProgram);
+  makeCommand.push_back(
+    this->SelectMakeProgram(makeProgram, this->GetDevEnvCommand())
+    );
 
   makeCommand.push_back(std::string(projectName) + ".sln");
   bool clean = false;
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index f8ec8a0..be0459d 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -269,13 +269,9 @@ cmGlobalXCodeGenerator::GenerateBuildCommand(
   std::vector<std::string> const& makeOptions)
 {
   // now build the test
-  if(makeProgram == 0 || !strlen(makeProgram))
-    {
-    cmSystemTools::Error(
-      "Generator cannot find the appropriate make command.");
-    return;
-    }
-  makeCommand.push_back(makeProgram);
+  makeCommand.push_back(
+    this->SelectMakeProgram(makeProgram, "xcodebuild")
+    );
 
   makeCommand.push_back("-project");
   std::string projectArg = projectName;

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5f5c92b9a2c2f9c780c08e23231b93af71f175bd
commit 5f5c92b9a2c2f9c780c08e23231b93af71f175bd
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Nov 13 14:27:51 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:24 2013 -0500

    VS: Add internal APIs to find MSBuild, devenv/VCExpress, and msdev
    
    Teach the VS generators to compute the locations of these tools directly
    from registry entries.  Add internal APIs to get the locations on demand.

diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx
index 7be10b1..d4d67d0 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -98,6 +98,7 @@ cmGlobalVisualStudio10Generator::cmGlobalVisualStudio10Generator(
     "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\10.0\\Setup\\VC;"
     "ProductDir", vc10Express, cmSystemTools::KeyWOW64_32);
   this->MasmEnabled = false;
+  this->MSBuildCommandInitialized = false;
 }
 
 //----------------------------------------------------------------------------
@@ -255,7 +256,51 @@ std::string cmGlobalVisualStudio10Generator::GetUserMacrosRegKeyBase()
   return "Software\\Microsoft\\VisualStudio\\10.0\\vsmacros";
 }
 
+//----------------------------------------------------------------------------
+std::string const& cmGlobalVisualStudio10Generator::GetMSBuildCommand()
+{
+  if(!this->MSBuildCommandInitialized)
+    {
+    this->MSBuildCommandInitialized = true;
+    this->MSBuildCommand = this->FindMSBuildCommand();
+    }
+  return this->MSBuildCommand;
+}
+
+//----------------------------------------------------------------------------
+std::string cmGlobalVisualStudio10Generator::FindMSBuildCommand()
+{
+  std::string msbuild;
+  std::string mskey =
+    "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\";
+  mskey += this->GetToolsVersion();
+  mskey += ";MSBuildToolsPath";
+  if(cmSystemTools::ReadRegistryValue(mskey.c_str(), msbuild,
+                                      cmSystemTools::KeyWOW64_32))
+    {
+    cmSystemTools::ConvertToUnixSlashes(msbuild);
+    msbuild += "/";
+    }
+  msbuild += "MSBuild.exe";
+  return msbuild;
+}
 
+//----------------------------------------------------------------------------
+std::string cmGlobalVisualStudio10Generator::FindDevEnvCommand()
+{
+  if(this->ExpressEdition)
+    {
+    // Visual Studio Express >= 10 do not have "devenv.com" or
+    // "VCExpress.exe" that we can use to build reliably.
+    // Tell the caller it needs to use MSBuild instead.
+    return "";
+    }
+  // Skip over the cmGlobalVisualStudio8Generator implementation because
+  // we expect a real devenv and do not want to look for VCExpress.
+  return this->cmGlobalVisualStudio71Generator::FindDevEnvCommand();
+}
+
+//----------------------------------------------------------------------------
 void cmGlobalVisualStudio10Generator::GenerateBuildCommand(
   std::vector<std::string>& makeCommand,
   const char* makeProgram,
diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h
index f358e5e..ad0aa6d 100644
--- a/Source/cmGlobalVisualStudio10Generator.h
+++ b/Source/cmGlobalVisualStudio10Generator.h
@@ -94,6 +94,8 @@ public:
 protected:
   virtual const char* GetIDEVersion() { return "10.0"; }
 
+  std::string const& GetMSBuildCommand();
+
   std::string PlatformToolset;
   bool ExpressEdition;
   bool MasmEnabled;
@@ -111,5 +113,10 @@ private:
     std::string SourceRel;
   };
   LongestSourcePath LongestSource;
+
+  std::string MSBuildCommand;
+  bool MSBuildCommandInitialized;
+  virtual std::string FindMSBuildCommand();
+  virtual std::string FindDevEnvCommand();
 };
 #endif
diff --git a/Source/cmGlobalVisualStudio6Generator.cxx b/Source/cmGlobalVisualStudio6Generator.cxx
index 612e50f..51f38c2 100644
--- a/Source/cmGlobalVisualStudio6Generator.cxx
+++ b/Source/cmGlobalVisualStudio6Generator.cxx
@@ -33,6 +33,7 @@ std::string GetVS6TargetName(const std::string& targetName)
 cmGlobalVisualStudio6Generator::cmGlobalVisualStudio6Generator()
 {
   this->FindMakeProgramFile = "CMakeVS6FindMake.cmake";
+  this->MSDevCommandInitialized = false;
 }
 
 void cmGlobalVisualStudio6Generator
@@ -77,6 +78,33 @@ void cmGlobalVisualStudio6Generator::GenerateConfigurations(cmMakefile* mf)
     }
 }
 
+//----------------------------------------------------------------------------
+std::string const& cmGlobalVisualStudio6Generator::GetMSDevCommand()
+{
+  if(!this->MSDevCommandInitialized)
+    {
+    this->MSDevCommandInitialized = true;
+    this->MSDevCommand = this->FindMSDevCommand();
+    }
+  return this->MSDevCommand;
+}
+
+//----------------------------------------------------------------------------
+std::string cmGlobalVisualStudio6Generator::FindMSDevCommand()
+{
+  std::string vscmd;
+  std::string vskey = this->GetRegistryBase() + "\\Setup;VsCommonDir";
+  if(cmSystemTools::ReadRegistryValue(vskey.c_str(), vscmd,
+                                      cmSystemTools::KeyWOW64_32))
+    {
+    cmSystemTools::ConvertToUnixSlashes(vscmd);
+    vscmd += "/MSDev98/Bin/";
+    }
+  vscmd += "msdev.exe";
+  return vscmd;
+}
+
+//----------------------------------------------------------------------------
 void
 cmGlobalVisualStudio6Generator::GenerateBuildCommand(
   std::vector<std::string>& makeCommand,
diff --git a/Source/cmGlobalVisualStudio6Generator.h b/Source/cmGlobalVisualStudio6Generator.h
index 1ffa130..24f46b3 100644
--- a/Source/cmGlobalVisualStudio6Generator.h
+++ b/Source/cmGlobalVisualStudio6Generator.h
@@ -102,6 +102,10 @@ private:
                             const std::set<cmStdString>& dependencies);
   void WriteDSWFooter(std::ostream& fout);
   virtual std::string WriteUtilityDepend(cmTarget* target);
+  std::string MSDevCommand;
+  bool MSDevCommandInitialized;
+  std::string const& GetMSDevCommand();
+  std::string FindMSDevCommand();
 };
 
 #endif
diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx
index 04563f3..2602f83 100644
--- a/Source/cmGlobalVisualStudio7Generator.cxx
+++ b/Source/cmGlobalVisualStudio7Generator.cxx
@@ -22,6 +22,7 @@ cmGlobalVisualStudio7Generator::cmGlobalVisualStudio7Generator(
 {
   this->FindMakeProgramFile = "CMakeVS7FindMake.cmake";
   this->IntelProjectVersion = 0;
+  this->DevEnvCommandInitialized = false;
 
   if (!platformName)
     {
@@ -110,6 +111,33 @@ void cmGlobalVisualStudio7Generator
 
 }
 
+//----------------------------------------------------------------------------
+std::string const& cmGlobalVisualStudio7Generator::GetDevEnvCommand()
+{
+  if(!this->DevEnvCommandInitialized)
+    {
+    this->DevEnvCommandInitialized = true;
+    this->DevEnvCommand = this->FindDevEnvCommand();
+    }
+  return this->DevEnvCommand;
+}
+
+//----------------------------------------------------------------------------
+std::string cmGlobalVisualStudio7Generator::FindDevEnvCommand()
+{
+  std::string vscmd;
+  std::string vskey = this->GetRegistryBase() + ";InstallDir";
+  if(cmSystemTools::ReadRegistryValue(vskey.c_str(), vscmd,
+                                      cmSystemTools::KeyWOW64_32))
+    {
+    cmSystemTools::ConvertToUnixSlashes(vscmd);
+    vscmd += "/";
+    }
+  vscmd += "devenv.com";
+  return vscmd;
+}
+
+//----------------------------------------------------------------------------
 void cmGlobalVisualStudio7Generator::GenerateBuildCommand(
   std::vector<std::string>& makeCommand,
   const char* makeProgram,
diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h
index a6c2581..d272fa0 100644
--- a/Source/cmGlobalVisualStudio7Generator.h
+++ b/Source/cmGlobalVisualStudio7Generator.h
@@ -110,6 +110,9 @@ public:
 protected:
   virtual const char* GetIDEVersion() { return "7.0"; }
 
+  std::string const& GetDevEnvCommand();
+  virtual std::string FindDevEnvCommand();
+
   static cmIDEFlagTable const* GetExtraFlagTableVS7();
   virtual void OutputSLNFile(cmLocalGenerator* root,
                              std::vector<cmLocalGenerator*>& generators);
@@ -168,6 +171,8 @@ protected:
 
 private:
   char* IntelProjectVersion;
+  std::string DevEnvCommand;
+  bool DevEnvCommandInitialized;
 };
 
 #define CMAKE_CHECK_BUILD_SYSTEM_TARGET "ZERO_CHECK"
diff --git a/Source/cmGlobalVisualStudio8Generator.cxx b/Source/cmGlobalVisualStudio8Generator.cxx
index b9bc1ae..949dd1b 100644
--- a/Source/cmGlobalVisualStudio8Generator.cxx
+++ b/Source/cmGlobalVisualStudio8Generator.cxx
@@ -105,6 +105,26 @@ cmGlobalVisualStudio8Generator::cmGlobalVisualStudio8Generator(
 }
 
 //----------------------------------------------------------------------------
+std::string cmGlobalVisualStudio8Generator::FindDevEnvCommand()
+{
+  // First look for VCExpress.
+  std::string vsxcmd;
+  std::string vsxkey =
+    "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\";
+  vsxkey += this->GetIDEVersion();
+  vsxkey += ";InstallDir";
+  if(cmSystemTools::ReadRegistryValue(vsxkey.c_str(), vsxcmd,
+                                      cmSystemTools::KeyWOW64_32))
+    {
+    cmSystemTools::ConvertToUnixSlashes(vsxcmd);
+    vsxcmd += "/VCExpress.exe";
+    return vsxcmd;
+    }
+  // Now look for devenv.
+  return this->cmGlobalVisualStudio71Generator::FindDevEnvCommand();
+}
+
+//----------------------------------------------------------------------------
 ///! Create a local generator appropriate to this Global Generator
 cmLocalGenerator *cmGlobalVisualStudio8Generator::CreateLocalGenerator()
 {
diff --git a/Source/cmGlobalVisualStudio8Generator.h b/Source/cmGlobalVisualStudio8Generator.h
index 2376f8a..ad01a24 100644
--- a/Source/cmGlobalVisualStudio8Generator.h
+++ b/Source/cmGlobalVisualStudio8Generator.h
@@ -69,6 +69,8 @@ public:
 protected:
   virtual const char* GetIDEVersion() { return "8.0"; }
 
+  virtual std::string FindDevEnvCommand();
+
   virtual bool VSLinksDependencies() const { return false; }
 
   bool AddCheckTarget();

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=4ac75fdfe6e7a91f3beea037d13b1f4c8c8b80ed
commit 4ac75fdfe6e7a91f3beea037d13b1f4c8c8b80ed
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Nov 13 11:33:17 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:23 2013 -0500

    Prefer CMAKE_MAKE_PROGRAM over CMAKE_BUILD_TOOL (#14548)
    
    Historically these were both added for the Makefile and Visual Studio
    generators, respectively.  Later the VS generators started using the
    CMAKE_MAKE_PROGRAM cache entry to find the IDE build tool, and the
    CMAKE_BUILD_TOOL was simply set as an alias.
    
    Fix the documentation to explain that CMAKE_MAKE_PROGRAM is the modern
    variable and that CMAKE_BUILD_TOOL is the compatibility alias, not the
    other way around.  Replace uses of CMAKE_BUILD_TOOL with
    CMAKE_MAKE_PROGRAM in CMake-provided modules.  Nothing needs to lookup
    CMAKE_BUILD_TOOL in the cache, so simply set it as a normal variable.

diff --git a/Help/variable/CMAKE_BUILD_TOOL.rst b/Help/variable/CMAKE_BUILD_TOOL.rst
index f0bc938..6133491 100644
--- a/Help/variable/CMAKE_BUILD_TOOL.rst
+++ b/Help/variable/CMAKE_BUILD_TOOL.rst
@@ -1,11 +1,6 @@
 CMAKE_BUILD_TOOL
 ----------------
 
-Tool used for the actual build process.
-
-This variable is set to the program that will be needed to build the
-output of CMake.  If the generator selected was Visual Studio 6, the
-CMAKE_BUILD_TOOL will be set to msdev, for Unix Makefiles it will be
-set to make or gmake, and for Visual Studio 7 it set to devenv.  For
-NMake Makefiles the value is nmake.  This can be useful for adding
-special flags and commands based on the final build environment.
+This variable exists only for backwards compatibility.
+It contains the same value as :variable:`CMAKE_MAKE_PROGRAM`.
+Use that variable instead.
diff --git a/Help/variable/CMAKE_MAKE_PROGRAM.rst b/Help/variable/CMAKE_MAKE_PROGRAM.rst
index 8307bc6..b546815 100644
--- a/Help/variable/CMAKE_MAKE_PROGRAM.rst
+++ b/Help/variable/CMAKE_MAKE_PROGRAM.rst
@@ -1,7 +1,10 @@
 CMAKE_MAKE_PROGRAM
 ------------------
 
-See CMAKE_BUILD_TOOL.
+Tool used for the actual build process.
 
-This variable is around for backwards compatibility, see
-CMAKE_BUILD_TOOL.
+This variable is set to the program that will be needed to build the
+output of CMake.  If the generator selected was Visual Studio 6, the
+CMAKE_MAKE_PROGRAM will be set to msdev, for Unix Makefiles it will be
+set to make or gmake, and for Visual Studio 7 it set to devenv.  For
+NMake Makefiles the value is nmake.
diff --git a/Modules/CMakeCXXInformation.cmake b/Modules/CMakeCXXInformation.cmake
index 45ec95a..9cf3489 100644
--- a/Modules/CMakeCXXInformation.cmake
+++ b/Modules/CMakeCXXInformation.cmake
@@ -287,7 +287,6 @@ if(NOT CMAKE_CXX_LINK_EXECUTABLE)
 endif()
 
 mark_as_advanced(
-CMAKE_BUILD_TOOL
 CMAKE_VERBOSE_MAKEFILE
 CMAKE_CXX_FLAGS
 CMAKE_CXX_FLAGS_RELEASE
diff --git a/Modules/CMakeCommonLanguageInclude.cmake b/Modules/CMakeCommonLanguageInclude.cmake
index e945aa7..38a6d35 100644
--- a/Modules/CMakeCommonLanguageInclude.cmake
+++ b/Modules/CMakeCommonLanguageInclude.cmake
@@ -94,12 +94,10 @@ set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS_INIT} $ENV{LDFLAGS}"
 set (CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS_INIT}"
      CACHE STRING "Flags used by the linker during the creation of static libraries.")
 
-set(CMAKE_BUILD_TOOL ${CMAKE_MAKE_PROGRAM} CACHE INTERNAL
-     "What is the target build tool cmake is generating for.")
-
+# Alias the build tool variable for backward compatibility.
+set(CMAKE_BUILD_TOOL ${CMAKE_MAKE_PROGRAM})
 
 mark_as_advanced(
-CMAKE_BUILD_TOOL
 CMAKE_VERBOSE_MAKEFILE
 
 CMAKE_EXE_LINKER_FLAGS
diff --git a/Modules/CTest.cmake b/Modules/CTest.cmake
index ada8655..7759ead 100644
--- a/Modules/CTest.cmake
+++ b/Modules/CTest.cmake
@@ -244,7 +244,7 @@ if(BUILD_TESTING)
         "${CMAKE_CXX_COMPILER}" ${DART_NAME_COMPONENT})
     else()
       get_filename_component(DART_CXX_NAME
-        "${CMAKE_BUILD_TOOL}" ${DART_NAME_COMPONENT})
+        "${CMAKE_MAKE_PROGRAM}" ${DART_NAME_COMPONENT})
     endif()
     if(DART_CXX_NAME MATCHES "msdev")
       set(DART_CXX_NAME "vs60")
diff --git a/Source/cmGlobalKdevelopGenerator.cxx b/Source/cmGlobalKdevelopGenerator.cxx
index e7c857e..273d4bb 100644
--- a/Source/cmGlobalKdevelopGenerator.cxx
+++ b/Source/cmGlobalKdevelopGenerator.cxx
@@ -462,7 +462,7 @@ void cmGlobalKdevelopGenerator
         "      <numberofjobs>1</numberofjobs>\n"
         "      <dontact>false</dontact>\n"
         "      <makebin>" << this->GlobalGenerator->GetLocalGenerators()[0]->
-            GetMakefile()->GetRequiredDefinition("CMAKE_BUILD_TOOL")
+            GetMakefile()->GetRequiredDefinition("CMAKE_MAKE_PROGRAM")
             << " </makebin>\n"
         "      <selectedenvironment>default</selectedenvironment>\n"
         "      <environments>\n"
diff --git a/Tests/RunCMake/build_command/ErrorsCommon.cmake b/Tests/RunCMake/build_command/ErrorsCommon.cmake
index d224539..f007b88 100644
--- a/Tests/RunCMake/build_command/ErrorsCommon.cmake
+++ b/Tests/RunCMake/build_command/ErrorsCommon.cmake
@@ -37,9 +37,9 @@ build_command(cmd)
 message("4. cmd='${cmd}'")
 
 # Test the two-arg legacy signature:
-build_command(legacy_cmd ${CMAKE_BUILD_TOOL})
+build_command(legacy_cmd ${CMAKE_MAKE_PROGRAM})
 message("5. legacy_cmd='${legacy_cmd}'")
-message("   CMAKE_BUILD_TOOL='${CMAKE_BUILD_TOOL}'")
+message("   CMAKE_MAKE_PROGRAM='${CMAKE_MAKE_PROGRAM}'")
 
 # Test the optional KEYWORDs:
 build_command(cmd CONFIGURATION hoohaaConfig)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=cc23f92861aeb2443cc5b6443c04a761c99bb100
commit cc23f92861aeb2443cc5b6443c04a761c99bb100
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Nov 15 08:19:13 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:23 2013 -0500

    Tests: Split <test>_EXTRA_OPTIONS into <test>_(CTEST|BUILD)_OPTIONS
    
    Some extra options are for "ctest --build-and-test" directly, and others
    are values for "--build-options".  Split these two roles out into two
    separate variables and update existing uses.

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 577b86c..b0aaf17 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -10,7 +10,9 @@ macro(ADD_TEST_MACRO NAME COMMAND)
     --build-two-config
     ${build_generator_args}
     --build-project ${proj}
-    ${${NAME}_EXTRA_OPTIONS}
+    ${${NAME}_CTEST_OPTIONS}
+    --build-options
+    ${${NAME}_BUILD_OPTIONS}
     --test-command ${COMMAND} ${ARGN})
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/${dir}")
 endmacro()
@@ -782,12 +784,12 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
   endif()
 
   if(CTEST_RUN_CPackComponents)
-    set(CPackComponents_EXTRA_OPTIONS)
+    set(CPackComponents_BUILD_OPTIONS)
     if(APPLE)
-      set(CPackComponents_EXTRA_OPTIONS -DCPACK_BINARY_DRAGNDROP:BOOL=ON)
+      set(CPackComponents_BUILD_OPTIONS -DCPACK_BINARY_DRAGNDROP:BOOL=ON)
     endif()
     if(NSIS_MAKENSIS_EXECUTABLE)
-      set(CPackComponents_EXTRA_OPTIONS ${CPackComponents_EXTRA_OPTIONS}
+      set(CPackComponents_BUILD_OPTIONS ${CPackComponents_BUILD_OPTIONS}
         -DCPACK_BINARY_NSIS:BOOL=ON)
     endif()
 
@@ -802,7 +804,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
       --build-options
         -DCPACK_BINARY_DEB:BOOL=${CPACK_BINARY_DEB}
         -DCPACK_BINARY_RPM:BOOL=${CPACK_BINARY_RPM}
-        ${CPackComponents_EXTRA_OPTIONS}
+        ${CPackComponents_BUILD_OPTIONS}
         --graphviz=CPackComponents.dot
       --test-command ${CMAKE_CMAKE_COMMAND}
         "-DCPackComponents_BINARY_DIR:PATH=${CMake_BINARY_DIR}/Tests/CPackComponents"
@@ -826,7 +828,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
 
     # ACTIVE_CPACK_GENERATORS variable
     # now contains the list of 'active generators'
-    set(CPackComponentsForAll_EXTRA_OPTIONS)
+    set(CPackComponentsForAll_BUILD_OPTIONS)
     # set up list of CPack generators
     list(APPEND GENLST "ZIP")
     if(APPLE)
@@ -861,7 +863,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
           --build-options
              -DCPACK_BINARY_${CPackGen}:BOOL=ON
              ${CPackRun_CPackComponentWay}
-             ${CPackComponentsForAll_EXTRA_OPTIONS}
+             ${CPackComponentsForAll_BUILD_OPTIONS}
              --graphviz=CPackComponentsForAll.dot
           --test-command ${CMAKE_CMAKE_COMMAND}
             "-DCPackComponentsForAll_BINARY_DIR:PATH=${CMake_BINARY_DIR}/Tests/CPackComponentsForAll/build${CPackGen}-${CPackComponentWay}"
@@ -2141,7 +2143,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     --output-on-failure -C "\${CTestTest_CONFIG}")
 
   if(NOT BORLAND)
-    set(CTestLimitDashJ_EXTRA_OPTIONS --force-new-ctest-process)
+    set(CTestLimitDashJ_CTEST_OPTIONS --force-new-ctest-process)
     add_test_macro(CTestLimitDashJ ${CMAKE_CTEST_COMMAND} -j 4
       --output-on-failure -C "\${CTestTest_CONFIG}")
   endif()
@@ -2601,8 +2603,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
   endforeach()
 
   if(TEST_CompileCommandOutput)
-    set(CompileCommandOutput_EXTRA_OPTIONS
-      --build-options -DMAKE_SUPPORTS_SPACES=${MAKE_SUPPORTS_SPACES})
+    set(CompileCommandOutput_BUILD_OPTIONS
+      -DMAKE_SUPPORTS_SPACES=${MAKE_SUPPORTS_SPACES})
     ADD_TEST_MACRO(CompileCommandOutput
       "${CMake_BINARY_DIR}/Tests/CMakeLib/runcompilecommands")
   endif()

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=20bac8f19e1fa12856e96b8e9541e518068d2122
commit 20bac8f19e1fa12856e96b8e9541e518068d2122
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 15:27:44 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:23 2013 -0500

    Tests: Simplify ExternalProjectUpdate test arguments
    
    Drop the -DCMAKE_TEST_MAKEPROGRAM argument because the value is not
    used inside the test script.

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 5fde091..577b86c 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -1141,7 +1141,6 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     -DExternalProjectUpdate_BINARY_DIR:PATH=${CMake_BINARY_DIR}/Tests/ExternalProjectUpdate
     -DCMAKE_TEST_GENERATOR=${CMAKE_TEST_GENERATOR}
     -DCMAKE_TEST_GENERATOR_TOOLSET=${CMAKE_TEST_GENERATOR_TOOLSET}
-    -DCMAKE_TEST_MAKEPROGRAM=${CMAKE_TEST_MAKEPROGRAM}
     -DCMAKE_CTEST_COMMAND=${CMAKE_CTEST_COMMAND}
     -P ${CMake_SOURCE_DIR}/Tests/ExternalProjectUpdate/ExternalProjectUpdateTest.cmake
     )

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=4d85365307975cfdb07e824b46b76da5aed4ed1e
commit 4d85365307975cfdb07e824b46b76da5aed4ed1e
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 13:17:34 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:23 2013 -0500

    Tests: Fix make capability selection for empty CMAKE_TEST_MAKEPROGRAM

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 73f880f..5fde091 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -52,7 +52,7 @@ if(BUILD_TESTING)
   endif()
 
   set(MAKE_IS_GNU )
-  if(${CMAKE_TEST_MAKEPROGRAM} MATCHES make)
+  if(CMAKE_TEST_MAKEPROGRAM MATCHES make)
     execute_process(COMMAND ${CMAKE_TEST_MAKEPROGRAM} no_such_target --version
       RESULT_VARIABLE res OUTPUT_VARIABLE out ERROR_VARIABLE out)
     if("${res}" STREQUAL "0")
@@ -64,8 +64,8 @@ if(BUILD_TESTING)
 
   # some old versions of make simply cannot handle spaces in paths
   if (MAKE_IS_GNU OR
-      "${CMAKE_TEST_MAKEPROGRAM}" MATCHES "nmake|gmake|wmake" OR
-      "${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio|XCode|Borland")
+      CMAKE_TEST_MAKEPROGRAM MATCHES "nmake|gmake|wmake" OR
+      CMAKE_TEST_GENERATOR MATCHES "Visual Studio|XCode|Borland")
     set(MAKE_SUPPORTS_SPACES 1)
   else()
     set(MAKE_SUPPORTS_SPACES 0)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=95b28eb76329262d10e60f4ad67172f8a566855c
commit 95b28eb76329262d10e60f4ad67172f8a566855c
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 15:15:17 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:23 2013 -0500

    Tests: Teach MakeClean to use "cmake --build"
    
    Switch from "ctest --build-and-test" to "cmake --build" to drive the
    clean target in the MakeClean test.

diff --git a/Tests/MakeClean/CMakeLists.txt b/Tests/MakeClean/CMakeLists.txt
index 1308b61..8ac624a 100644
--- a/Tests/MakeClean/CMakeLists.txt
+++ b/Tests/MakeClean/CMakeLists.txt
@@ -44,14 +44,7 @@ add_executable(check_clean ${MakeClean_BINARY_DIR}/check_clean.c)
 add_custom_command(
   TARGET check_clean
   POST_BUILD
-  COMMAND ${CMAKE_CTEST_COMMAND}
-  ARGS --build-and-test
-       ${MakeClean_SOURCE_DIR}/ToClean
-       ${MakeClean_BINARY_DIR}/ToClean
-       --build-generator ${CMAKE_GENERATOR}
-       --build-project ToClean
-       --build-makeprogram ${CMAKE_MAKE_PROGRAM}
-       --build-noclean
-       --build-target clean
+  COMMAND ${CMAKE_COMMAND} --build ${MakeClean_BINARY_DIR}/ToClean
+          --target clean
   COMMENT "Clean the ToClean Project"
   )

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=c85672634c37d640ea99fd5b36d7889a53c922b2
commit c85672634c37d640ea99fd5b36d7889a53c922b2
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 15:11:04 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:22 2013 -0500

    Tests: Teach SimpleInstall to use "cmake --build"
    
    Switch from "ctest --build-and-test" to "cmake --build" to drive the
    install and package targets in the SimpleInstall test.

diff --git a/Tests/SimpleInstall/CMakeLists.txt b/Tests/SimpleInstall/CMakeLists.txt
index b969bfd..cc3c3be 100644
--- a/Tests/SimpleInstall/CMakeLists.txt
+++ b/Tests/SimpleInstall/CMakeLists.txt
@@ -308,7 +308,7 @@ else()
 endif()
 
 if(CMAKE_CONFIGURATION_TYPES)
-  set(SI_CONFIG -C ${CMAKE_CFG_INTDIR})
+  set(SI_CONFIG --config $<CONFIGURATION>)
 else()
   set(SI_CONFIG)
 endif()
@@ -367,7 +367,9 @@ set(CMAKE_INSTALL_DEBUG_LIBRARIES 1)
 include(InstallRequiredSystemLibraries)
 
 if(CTEST_TEST_CPACK)
-  set(PACKAGE_TARGET --build-target package)
+  set(package_command COMMAND
+    ${CMAKE_COMMAND} --build . --target package ${SI_CONFIG}
+    )
 
   # Avoid settings that require the .zip file command line tools...
   # (just build an NSIS installer without component support)
@@ -375,24 +377,19 @@ if(CTEST_TEST_CPACK)
   set(CPACK_BINARY_ZIP OFF)
   set(CPACK_MONOLITHIC_INSTALL ON)
 else()
-  set(PACKAGE_TARGET)
+  set(package_command)
 endif()
 
 include(CPack)
 
+set(install_command COMMAND
+  ${CMAKE_COMMAND} --build . --target install ${SI_CONFIG}
+  )
+
 add_custom_command(
   TARGET ${install_target}
   POST_BUILD
-  COMMAND ${CMAKE_CTEST_COMMAND}
-  ARGS ${SI_CONFIG}
-  --build-and-test
-  ${CMAKE_SOURCE_DIR}
-  ${CMAKE_BINARY_DIR}
-  --build-generator ${CMAKE_GENERATOR}
-  --build-project ${PROJECT_NAME}
-  --build-makeprogram ${CMAKE_MAKE_PROGRAM}
-  --build-noclean
-  --build-target install
-  ${PACKAGE_TARGET}
+  ${install_command}
+  ${package_command}
   COMMENT "Install Project"
   )
diff --git a/Tests/SimpleInstallS2/CMakeLists.txt b/Tests/SimpleInstallS2/CMakeLists.txt
index b969bfd..cc3c3be 100644
--- a/Tests/SimpleInstallS2/CMakeLists.txt
+++ b/Tests/SimpleInstallS2/CMakeLists.txt
@@ -308,7 +308,7 @@ else()
 endif()
 
 if(CMAKE_CONFIGURATION_TYPES)
-  set(SI_CONFIG -C ${CMAKE_CFG_INTDIR})
+  set(SI_CONFIG --config $<CONFIGURATION>)
 else()
   set(SI_CONFIG)
 endif()
@@ -367,7 +367,9 @@ set(CMAKE_INSTALL_DEBUG_LIBRARIES 1)
 include(InstallRequiredSystemLibraries)
 
 if(CTEST_TEST_CPACK)
-  set(PACKAGE_TARGET --build-target package)
+  set(package_command COMMAND
+    ${CMAKE_COMMAND} --build . --target package ${SI_CONFIG}
+    )
 
   # Avoid settings that require the .zip file command line tools...
   # (just build an NSIS installer without component support)
@@ -375,24 +377,19 @@ if(CTEST_TEST_CPACK)
   set(CPACK_BINARY_ZIP OFF)
   set(CPACK_MONOLITHIC_INSTALL ON)
 else()
-  set(PACKAGE_TARGET)
+  set(package_command)
 endif()
 
 include(CPack)
 
+set(install_command COMMAND
+  ${CMAKE_COMMAND} --build . --target install ${SI_CONFIG}
+  )
+
 add_custom_command(
   TARGET ${install_target}
   POST_BUILD
-  COMMAND ${CMAKE_CTEST_COMMAND}
-  ARGS ${SI_CONFIG}
-  --build-and-test
-  ${CMAKE_SOURCE_DIR}
-  ${CMAKE_BINARY_DIR}
-  --build-generator ${CMAKE_GENERATOR}
-  --build-project ${PROJECT_NAME}
-  --build-makeprogram ${CMAKE_MAKE_PROGRAM}
-  --build-noclean
-  --build-target install
-  ${PACKAGE_TARGET}
+  ${install_command}
+  ${package_command}
   COMMENT "Install Project"
   )

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f2b1d653cf4124e32c324f54848d55f52ca8370d
commit f2b1d653cf4124e32c324f54848d55f52ca8370d
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 14:16:06 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:22 2013 -0500

    Tests: Launch CMake.Install test through 'cmake --build'
    
    Use "cmake --build" to drive the "install" target from the CMake build
    tree itself.  This avoids using the heavier "ctest --build-and-test"
    just to run the native build tool to drive installation.

diff --git a/Tests/CMakeInstall.cmake b/Tests/CMakeInstall.cmake
index 5f814d9..fda8c54 100644
--- a/Tests/CMakeInstall.cmake
+++ b/Tests/CMakeInstall.cmake
@@ -17,29 +17,15 @@ if(CMake_TEST_INSTALL)
   if(CMAKE_CONFIGURATION_TYPES)
     # There are multiple configurations.  Make sure the tested
     # configuration is the one that is installed.
-    set(CMake_TEST_INSTALL_CONFIG -C "\${CTEST_CONFIGURATION_TYPE}")
+    set(CMake_TEST_INSTALL_CONFIG --config $<CONFIGURATION>)
   else()
     set(CMake_TEST_INSTALL_CONFIG)
   endif()
 
-  # The CTest of the CMake used to build this CMake.
-  if(CMAKE_CTEST_COMMAND)
-    set(CMake_TEST_INSTALL_CTest ${CMAKE_CTEST_COMMAND})
-  else()
-    set(CMake_TEST_INSTALL_CTest ${CMake_BIN_DIR}/ctest)
-  endif()
-
   # Add a test to install CMake through the build system install target.
-  add_test(CMake.Install
-    ${CMake_TEST_INSTALL_CTest}
-    ${CMake_TEST_INSTALL_CONFIG}
-    --build-and-test ${CMake_SOURCE_DIR} ${CMake_BINARY_DIR}
-    --build-generator ${CMAKE_GENERATOR} # Not CMAKE_TEST_GENERATOR
-    --build-project CMake
-    --build-makeprogram ${CMAKE_MAKE_PROGRAM} # Not CMAKE_TEST_MAKEPROGRAM
-    --build-nocmake
-    --build-noclean
-    --build-target install)
+  add_test(NAME CMake.Install
+    COMMAND cmake --build . --target install ${CMake_TEST_INSTALL_CONFIG}
+    )
 
   # Avoid running this test simultaneously with other tests:
   set_tests_properties(CMake.Install PROPERTIES RUN_SERIAL ON)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8ee6b4763034439ce5aada285de5fa584144c6c6
commit 8ee6b4763034439ce5aada285de5fa584144c6c6
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 09:18:51 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:22 2013 -0500

    Tests: Launch BootstrapTest through cmake instead of ctest
    
    Run the bootstrap script through "cmake -P" instead of
    "ctest --build-and-test" so that we do not need to abuse
    the --build-makeprogram option of the latter.

diff --git a/Tests/BootstrapTest.cmake b/Tests/BootstrapTest.cmake
new file mode 100644
index 0000000..9c9fe09
--- /dev/null
+++ b/Tests/BootstrapTest.cmake
@@ -0,0 +1,10 @@
+file(MAKE_DIRECTORY "${bin_dir}")
+message(STATUS "running bootstrap: ${bootstrap}")
+execute_process(
+  COMMAND ${bootstrap}
+  WORKING_DIRECTORY "${bin_dir}"
+  RESULT_VARIABLE result
+  )
+if(result)
+  message(FATAL_ERROR "bootstrap failed: ${result}")
+endif()
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 1b8b2ec..73f880f 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -2417,16 +2417,12 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     endif()
   endif()
   if(bootstrap)
-    add_test(BootstrapTest ${CMAKE_CTEST_COMMAND}
-      --build-and-test
-      ${CMake_SOURCE_DIR}
-      ${CMake_BINARY_DIR}/Tests/BootstrapTest
-      --build-nocmake
-      --build-noclean
-      --build-makeprogram ${bootstrap}
-      --build-generator "${CMAKE_TEST_GENERATOR}"
-      --test-command
-      ${CMake_BINARY_DIR}/Tests/BootstrapTest/Bootstrap.cmk/cmake)
+    add_test(NAME BootstrapTest
+      COMMAND ${CMAKE_CMAKE_COMMAND}
+        -D "bootstrap=${bootstrap}"
+        -D "bin_dir=${CMake_BINARY_DIR}/Tests/BootstrapTest"
+        -P ${CMAKE_CURRENT_SOURCE_DIR}/BootstrapTest.cmake
+      )
     list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BootstrapTest")
     # Make this test run early during parallel execution
     set_tests_properties(BootstrapTest PROPERTIES COST 5000)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7fc7624af5403e6bff9dbc99da398be314c0b223
commit 7fc7624af5403e6bff9dbc99da398be314c0b223
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 09:04:54 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:22 2013 -0500

    Tests: Move CMAKE_TEST_MAKEPROGRAM into Tests/CMakeLists.txt
    
    Also drop the temporary MAKEPROGRAM variable and the DART_ROOT special
    case.  We never run dashboard clients with Dart anymore.

diff --git a/CMakeLists.txt b/CMakeLists.txt
index d6237b3..a13afa1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -113,10 +113,6 @@ endif()
 # for testing. Simply to improve readability of the main script.
 #-----------------------------------------------------------------------
 macro(CMAKE_SETUP_TESTING)
-  if (NOT DART_ROOT)
-    set(MAKEPROGRAM ${CMAKE_MAKE_PROGRAM})
-  endif ()
-
   if(BUILD_TESTING)
     set(CMAKE_TEST_GENERATOR "" CACHE STRING
       "Generator used when running tests")
@@ -125,7 +121,6 @@ macro(CMAKE_SETUP_TESTING)
     if(NOT CMAKE_TEST_GENERATOR)
       set(CMAKE_TEST_GENERATOR "${CMAKE_GENERATOR}")
       set(CMAKE_TEST_GENERATOR_TOOLSET "${CMAKE_GENERATOR_TOOLSET}")
-      set(CMAKE_TEST_MAKEPROGRAM "${MAKEPROGRAM}")
     else()
       set(CMAKE_TEST_DIFFERENT_GENERATOR TRUE)
       set(CMAKE_TEST_GENERATOR_TOOLSET "")
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index b6e945e..1b8b2ec 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -43,6 +43,10 @@ configure_file(${CMake_SOURCE_DIR}/Tests/EnforceConfig.cmake.in
 
 # Testing
 if(BUILD_TESTING)
+  if(NOT CMAKE_TEST_DIFFERENT_GENERATOR)
+    set(CMAKE_TEST_MAKEPROGRAM "${CMAKE_MAKE_PROGRAM}")
+  endif()
+
   if("${CMAKE_TEST_GENERATOR}" MATCHES "Unix Makefiles" OR ("${CMAKE_TEST_GENERATOR}" MATCHES Ninja AND NOT WIN32))
     set(TEST_CompileCommandOutput 1)
   endif()

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0a7f17b870ceb03fd8687d630ed6fb875dcdc66a
commit 0a7f17b870ceb03fd8687d630ed6fb875dcdc66a
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 09:01:14 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:22 2013 -0500

    Tests: Remove unused Source/cmaketest.h.in file
    
    This file has not been used since commit 2c2291bb (add new feature to
    ctest so that it can cmake, build and run a test executable, 2004-01-07).

diff --git a/Source/cmaketest.h.in b/Source/cmaketest.h.in
deleted file mode 100644
index aada52d..0000000
--- a/Source/cmaketest.h.in
+++ /dev/null
@@ -1,16 +0,0 @@
-/*============================================================================
-  CMake - Cross Platform Makefile Generator
-  Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
-
-  Distributed under the OSI-approved BSD License (the "License");
-  see accompanying file Copyright.txt for details.
-
-  This software is distributed WITHOUT ANY WARRANTY; without even the
-  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-  See the License for more information.
-============================================================================*/
-#define CMAKE_BINARY_DIR "${CMake_BINARY_DIR}"
-#define EXECUTABLE_OUTPUT_PATH "${EXECUTABLE_OUTPUT_PATH}"
-#define MAKEPROGRAM "${MAKEPROGRAM}"
-#define CMAKE_GENERATOR "${CMAKE_GENERATOR}"
-#define DART_MAKECOMMAND "${MAKECOMMAND}"

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=1f679b8d46069696e14b3ff512fee2696c4e601e
commit 1f679b8d46069696e14b3ff512fee2696c4e601e
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 13:08:07 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:21 2013 -0500

    Tests: Drop remnants of unused ShellInstall test
    
    The ShellInstall test has long been replaced by the CMake.Install test.

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 6426b3a..b6e945e 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -2531,19 +2531,6 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     endif()
   endif()
 
-  if(UNIX)
-    string(COMPARE EQUAL "${CMAKE_INSTALL_PREFIX}" "${CMake_BINARY_DIR}/Tests/TestShellInstall/Prefix"
-      PREFIX_IS_FOR_TEST)
-    if(PREFIX_IS_FOR_TEST)
-      configure_file(
-        ${CMake_SOURCE_DIR}/Tests/TestInstall.sh.in
-        ${CMake_BINARY_DIR}/Tests/TestShellInstall/TestInstall.sh
-        @ONLY
-        )
-      add_test(ShellInstall /bin/sh ${CMake_BINARY_DIR}/Tests/TestShellInstall/TestShellInstall.sh)
-    endif()
-  endif()
-
   if(CMAKE_TEST_PROJECT_CSE_DIR)
     set(script "${CMAKE_TEST_PROJECT_CSE_DIR}/BuildProjectCSE.cmake")
     if(NOT EXISTS "${script}")
diff --git a/Tests/TestInstall.sh.in b/Tests/TestInstall.sh.in
deleted file mode 100755
index 9535780..0000000
--- a/Tests/TestInstall.sh.in
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/sh
-
-CMAKE_COMMAND="@CMAKE_INSTALL_PREFIX@/bin/cmake"
-CMake_SOURCE_DIR="@CMake_SOURCE_DIR@"
-CMake_BINARY_DIR="@CMake_BINARY_DIR@"
-CMAKE_INSTALL_PREFIX="@CMAKE_INSTALL_PREFIX@"
-CMAKE_BUILD_TOOL="@CMAKE_BUILD_TOOL@"
-
-SOURCE_DIR="${CMake_SOURCE_DIR}/Tests/Simple"
-BINARY_DIR="${CMake_BINARY_DIR}/Tests/TestInstall"
-
-install()
-{
-    echo "Erasing ${CMAKE_INSTALL_PREFIX}" &&
-    ([ ! -d "${CMAKE_INSTALL_PREFIX}" ] || rm -rf "${CMAKE_INSTALL_PREFIX}") &&
-    mkdir -p "${CMAKE_INSTALL_PREFIX}" &&
-    echo "Running make install" &&
-    (
-        cd "${CMake_BINARY_DIR}" &&
-        "${CMAKE_BUILD_TOOL}" install
-    )
-}
-
-setup()
-{
-    echo "Entering ${BINARY_DIR}" &&
-    cd "${BINARY_DIR}"
-}
-
-write_cache()
-{
-    install || return 1
-    setup || return 1
-    echo "Writing CMakeCache.txt"
-    (
-        cat > CMakeCache.txt <<EOF
-EOF
-    )
-}
-
-run_cmake()
-{
-    write_cache || return 1
-    echo "Running CMake"
-    "${CMAKE_COMMAND}" "${SOURCE_DIR}"
-}
-
-run_make()
-{
-    run_cmake || return 1
-    echo "Running ${CMAKE_BUILD_TOOL}"
-    "${CMAKE_BUILD_TOOL}"
-}
-
-run_test()
-{
-    echo "Running ${BINARY_DIR}/simple"
-    (
-    "${BINARY_DIR}/simple"
-    )
-}
-
-run_make && run_test

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8904d1410be3d62fc48d3bdaa87cbce3895fc815
commit 8904d1410be3d62fc48d3bdaa87cbce3895fc815
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Nov 15 13:33:32 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Nov 18 08:26:21 2013 -0500

    cmGlobalGenerator: Cleanup GenerateBuildCommand API
    
    All cmGlobalGenerator::GenerateBuildCommand call sites that need to
    produce a string now generate "cmake --build" commands.  The remaining
    call sites immediately pass the result to cmSystemTools::RunSingleCommand.
    Avoid the intermediate string and argument parsing by directly producing a
    vector of strings.  Also drop the ignoreErrors argument because no call
    sites remain that use it.

diff --git a/Source/CPack/cmCPackGenerator.cxx b/Source/CPack/cmCPackGenerator.cxx
index 0e16a40..5475c2f 100644
--- a/Source/CPack/cmCPackGenerator.cxx
+++ b/Source/CPack/cmCPackGenerator.cxx
@@ -637,19 +637,21 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects(
         globalGenerator->FindMakeProgram(this->MakefileMap);
         const char* cmakeMakeProgram
           = this->MakefileMap->GetDefinition("CMAKE_MAKE_PROGRAM");
-        std::string buildCommand
-          = globalGenerator->GenerateBuildCommand(cmakeMakeProgram,
-            installProjectName.c_str(), 0, 0,
+        std::vector<std::string> buildCommand;
+        globalGenerator->GenerateBuildCommand(buildCommand, cmakeMakeProgram,
+            installProjectName.c_str(), installDirectory.c_str(),
             globalGenerator->GetPreinstallTargetName(),
-            buildConfig, false, false);
+            buildConfig, false);
+        std::string buildCommandStr =
+          cmSystemTools::PrintSingleCommand(buildCommand);
         cmCPackLogger(cmCPackLog::LOG_DEBUG,
-          "- Install command: " << buildCommand << std::endl);
+          "- Install command: " << buildCommandStr << std::endl);
         cmCPackLogger(cmCPackLog::LOG_OUTPUT,
           "- Run preinstall target for: " << installProjectName << std::endl);
         std::string output;
         int retVal = 1;
         bool resB =
-          cmSystemTools::RunSingleCommand(buildCommand.c_str(),
+          cmSystemTools::RunSingleCommand(buildCommand,
                                           &output,
                                           &retVal,
                                           installDirectory.c_str(),
@@ -659,12 +661,12 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects(
           std::string tmpFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY");
           tmpFile += "/PreinstallOutput.log";
           cmGeneratedFileStream ofs(tmpFile.c_str());
-          ofs << "# Run command: " << buildCommand.c_str() << std::endl
+          ofs << "# Run command: " << buildCommandStr.c_str() << std::endl
             << "# Directory: " << installDirectory.c_str() << std::endl
             << "# Output:" << std::endl
             << output.c_str() << std::endl;
           cmCPackLogger(cmCPackLog::LOG_ERROR,
-            "Problem running install command: " << buildCommand.c_str()
+            "Problem running install command: " << buildCommandStr.c_str()
             << std::endl
             << "Please check " << tmpFile.c_str() << " for errors"
             << std::endl);
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 531e1ca..b653aff 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -1574,13 +1574,12 @@ int cmGlobalGenerator::TryCompile(const char *srcdir, const char *bindir,
                      this->TryCompileTimeout);
 }
 
-std::string cmGlobalGenerator
-::GenerateBuildCommand(const char*, const char*,
-                       const char*, const char*,
-                       const char*, const char*,
-                       bool, bool)
+void cmGlobalGenerator::GenerateBuildCommand(
+  std::vector<std::string>& makeCommand, const char*, const char*, const char*,
+  const char*, const char*, bool, std::vector<std::string> const&)
 {
-  return "cmGlobalGenerator::GenerateBuildCommand not implemented";
+  makeCommand.push_back(
+    "cmGlobalGenerator::GenerateBuildCommand not implemented");
 }
 
 int cmGlobalGenerator::Build(
@@ -1592,7 +1591,6 @@ int cmGlobalGenerator::Build(
   bool clean, bool fast,
   double timeout,
   cmSystemTools::OutputOption outputflag,
-  const char* extraOptions,
   std::vector<std::string> const& nativeOptions)
 {
   /**
@@ -1620,17 +1618,17 @@ int cmGlobalGenerator::Build(
   // should we do a clean first?
   if (clean)
     {
-    std::string cleanCommand =
-      this->GenerateBuildCommand(makeCommandCSTR, projectName, bindir,
-      0, "clean", config, false, fast);
+    std::vector<std::string> cleanCommand;
+    this->GenerateBuildCommand(cleanCommand, makeCommandCSTR, projectName,
+                               bindir, "clean", config, fast);
     if(output)
       {
       *output += "\nRun Clean Command:";
-      *output += cleanCommand;
+      *output += cmSystemTools::PrintSingleCommand(cleanCommand);
       *output += "\n";
       }
 
-    if (!cmSystemTools::RunSingleCommand(cleanCommand.c_str(), outputPtr,
+    if (!cmSystemTools::RunSingleCommand(cleanCommand, outputPtr,
                                          &retVal, 0, outputflag, timeout))
       {
       cmSystemTools::SetRunCommandHideConsole(hideconsole);
@@ -1652,37 +1650,29 @@ int cmGlobalGenerator::Build(
     }
 
   // now build
-  std::string makeCommand =
-    this->GenerateBuildCommand(makeCommandCSTR, projectName, bindir,
-                               extraOptions, target,
-                               config, false, fast);
+  std::vector<std::string> makeCommand;
+  this->GenerateBuildCommand(makeCommand, makeCommandCSTR, projectName,
+                             bindir, target, config, fast, nativeOptions);
+  std::string makeCommandStr = cmSystemTools::PrintSingleCommand(makeCommand);
   if(output)
     {
     *output += "\nRun Build Command:";
-    *output += makeCommand;
+    *output += makeCommandStr;
     *output += "\n";
     }
 
-  std::vector<cmStdString> command =
-    cmSystemTools::ParseArguments(makeCommand.c_str());
-  for(std::vector<std::string>::const_iterator ni = nativeOptions.begin();
-      ni != nativeOptions.end(); ++ni)
-    {
-    command.push_back(*ni);
-    }
-
-  if (!cmSystemTools::RunSingleCommand(command, outputPtr,
+  if (!cmSystemTools::RunSingleCommand(makeCommand, outputPtr,
                                        &retVal, 0, outputflag, timeout))
     {
     cmSystemTools::SetRunCommandHideConsole(hideconsole);
     cmSystemTools::Error
       ("Generator: execution of make failed. Make command was: ",
-       makeCommand.c_str());
+       makeCommandStr.c_str());
     if (output)
       {
       *output += *outputPtr;
       *output += "\nGenerator: execution of make failed. Make command was: "
-        + makeCommand + "\n";
+        + makeCommandStr + "\n";
       }
 
     // return to the original directory
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 82ffd64..37e12ff 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -123,16 +123,16 @@ public:
             bool clean, bool fast,
             double timeout,
             cmSystemTools::OutputOption outputflag=cmSystemTools::OUTPUT_NONE,
-            const char* extraOptions = 0,
             std::vector<std::string> const& nativeOptions =
             std::vector<std::string>());
 
-  virtual std::string GenerateBuildCommand(
+  virtual void GenerateBuildCommand(
+    std::vector<std::string>& makeCommand,
     const char* makeProgram,
     const char *projectName, const char *projectDir,
-    const char* additionalOptions,
-    const char *targetName, const char* config,
-    bool ignoreErrors, bool fast);
+    const char *targetName, const char* config, bool fast,
+    std::vector<std::string> const& makeOptions = std::vector<std::string>()
+    );
 
   /** Generate a "cmake --build" call for a given target and config.  */
   std::string GenerateCMakeBuildCommand(const char* target,
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx
index e938065..24bfdc3 100644
--- a/Source/cmGlobalNinjaGenerator.cxx
+++ b/Source/cmGlobalNinjaGenerator.cxx
@@ -549,47 +549,32 @@ bool cmGlobalNinjaGenerator::UsingMinGW = false;
 //   cmGlobalXCodeGenerator
 // Called by:
 //   cmGlobalGenerator::Build()
-std::string cmGlobalNinjaGenerator
-::GenerateBuildCommand(const char* makeProgram,
-                       const char* projectName,
-                       const char* projectDir,
-                       const char* additionalOptions,
+void cmGlobalNinjaGenerator
+::GenerateBuildCommand(std::vector<std::string>& makeCommand,
+                       const char* makeProgram,
+                       const char* /*projectName*/,
+                       const char* /*projectDir*/,
                        const char* targetName,
-                       const char* config,
-                       bool ignoreErrors,
-                       bool fast)
+                       const char* /*config*/,
+                       bool /*fast*/,
+                       std::vector<std::string> const& makeOptions)
 {
-  // Project name & dir and config are not used yet.
-  (void)projectName;
-  (void)projectDir;
-  (void)config;
-  // Ninja does not have -i equivalent option yet.
-  (void)ignoreErrors;
-  // We do not handle fast build yet.
-  (void)fast;
-
-  std::string makeCommand =
-    cmSystemTools::ConvertToUnixOutputPath(makeProgram);
-
-  if(additionalOptions)
-    {
-    makeCommand += " ";
-    makeCommand += additionalOptions;
-    }
-  if(targetName)
+  makeCommand.push_back(makeProgram);
+
+  makeCommand.insert(makeCommand.end(),
+                     makeOptions.begin(), makeOptions.end());
+  if(targetName && *targetName)
     {
     if(strcmp(targetName, "clean") == 0)
       {
-      makeCommand += " -t clean";
+      makeCommand.push_back("-t");
+      makeCommand.push_back("clean");
       }
     else
       {
-      makeCommand += " ";
-      makeCommand += targetName;
+      makeCommand.push_back(targetName);
       }
     }
-
-  return makeCommand;
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmGlobalNinjaGenerator.h b/Source/cmGlobalNinjaGenerator.h
index e9c8684..4fd0d5c 100644
--- a/Source/cmGlobalNinjaGenerator.h
+++ b/Source/cmGlobalNinjaGenerator.h
@@ -191,14 +191,16 @@ public:
                               bool optional);
 
   /// Overloaded methods. @see cmGlobalGenerator::GenerateBuildCommand()
-  virtual std::string GenerateBuildCommand(const char* makeProgram,
-                                           const char* projectName,
-                                           const char* projectDir,
-                                           const char* additionalOptions,
-                                           const char* targetName,
-                                           const char* config,
-                                           bool ignoreErrors,
-                                           bool fast);
+  virtual void GenerateBuildCommand(
+    std::vector<std::string>& makeCommand,
+    const char* makeProgram,
+    const char* projectName,
+    const char* projectDir,
+    const char* targetName,
+    const char* config,
+    bool fast,
+    std::vector<std::string> const& makeOptions = std::vector<std::string>()
+    );
 
   // Setup target names
   virtual const char* GetAllTargetName()           const { return "all"; }
diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx
index cfd93c2..3aa1f5f 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.cxx
+++ b/Source/cmGlobalUnixMakefileGenerator3.cxx
@@ -555,36 +555,27 @@ cmGlobalUnixMakefileGenerator3
   this->WriteDirectoryRule2(ruleFileStream, lg, "preinstall", true, true);
 }
 
-
-std::string cmGlobalUnixMakefileGenerator3
-::GenerateBuildCommand(const char* makeProgram, const char *projectName,
-                       const char *projectDir, const char* additionalOptions,
-                       const char *targetName, const char* config,
-                       bool ignoreErrors, bool fast)
+//----------------------------------------------------------------------------
+void cmGlobalUnixMakefileGenerator3
+::GenerateBuildCommand(std::vector<std::string>& makeCommand,
+                       const char* makeProgram,
+                       const char* /*projectName*/,
+                       const char* /*projectDir*/,
+                       const char* targetName,
+                       const char* /*config*/,
+                       bool fast,
+                       std::vector<std::string> const& makeOptions)
 {
-  // Project name & dir and config are not used yet.
-  (void)projectName;
-  (void)projectDir;
-  (void)config;
-
-  std::string makeCommand =
-    cmSystemTools::ConvertToUnixOutputPath(makeProgram);
+  makeCommand.push_back(makeProgram);
 
   // Since we have full control over the invocation of nmake, let us
   // make it quiet.
   if ( strcmp(this->GetName(), "NMake Makefiles") == 0 )
     {
-    makeCommand += " /NOLOGO ";
-    }
-  if ( ignoreErrors )
-    {
-    makeCommand += " -i";
-    }
-  if ( additionalOptions )
-    {
-    makeCommand += " ";
-    makeCommand += additionalOptions;
+    makeCommand.push_back("/NOLOGO");
     }
+  makeCommand.insert(makeCommand.end(),
+                     makeOptions.begin(), makeOptions.end());
   if ( targetName && strlen(targetName))
     {
     cmLocalUnixMakefileGenerator3 *lg;
@@ -605,22 +596,19 @@ std::string cmGlobalUnixMakefileGenerator3
       lg->GetMakefile()->MakeStartDirectoriesCurrent();
       }
 
-    makeCommand += " \"";
     std::string tname = targetName;
     if(fast)
       {
       tname += "/fast";
       }
-    tname = lg->Convert(tname.c_str(),cmLocalGenerator::HOME_OUTPUT,
-                        cmLocalGenerator::MAKEFILE);
-    makeCommand += tname.c_str();
-    makeCommand += "\"";
+    tname = lg->Convert(tname.c_str(),cmLocalGenerator::HOME_OUTPUT);
+    cmSystemTools::ConvertToOutputSlashes(tname);
+    makeCommand.push_back(tname);
     if (!this->LocalGenerators.size())
       {
       delete lg;
       }
     }
-  return makeCommand;
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmGlobalUnixMakefileGenerator3.h b/Source/cmGlobalUnixMakefileGenerator3.h
index 322736f..284f5d1 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.h
+++ b/Source/cmGlobalUnixMakefileGenerator3.h
@@ -107,12 +107,16 @@ public:
   std::string GetEmptyRuleHackDepends() { return this->EmptyRuleHackDepends; }
 
   // change the build command for speed
-  virtual std::string GenerateBuildCommand
-  (const char* makeProgram,
-   const char *projectName, const char *projectDir,
-   const char* additionalOptions,
-   const char *targetName,
-   const char* config, bool ignoreErrors, bool fast);
+  virtual void GenerateBuildCommand(
+    std::vector<std::string>& makeCommand,
+    const char* makeProgram,
+    const char* projectName,
+    const char* projectDir,
+    const char* targetName,
+    const char* config,
+    bool fast,
+    std::vector<std::string> const& makeOptions = std::vector<std::string>()
+    );
 
   /** Record per-target progress information.  */
   void RecordTargetProgress(cmMakefileTargetGenerator* tg);
diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx
index 5e29fd7..7be10b1 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -256,49 +256,43 @@ std::string cmGlobalVisualStudio10Generator::GetUserMacrosRegKeyBase()
 }
 
 
-std::string cmGlobalVisualStudio10Generator
-::GenerateBuildCommand(const char* makeProgram,
-                       const char *projectName, const char *projectDir,
-                       const char* additionalOptions, const char *targetName,
-                       const char* config, bool ignoreErrors, bool fast)
+void cmGlobalVisualStudio10Generator::GenerateBuildCommand(
+  std::vector<std::string>& makeCommand,
+  const char* makeProgram,
+  const char* projectName,
+  const char* projectDir,
+  const char* targetName,
+  const char* config,
+  bool fast,
+  std::vector<std::string> const& makeOptions)
 {
   // now build the test
-  std::string makeCommand
-    = cmSystemTools::ConvertToOutputPath(makeProgram);
-  std::string lowerCaseCommand = makeCommand;
+  std::string lowerCaseCommand = makeProgram;
   cmSystemTools::LowerCase(lowerCaseCommand);
 
   // If makeProgram is devenv, parent class knows how to generate command:
   if (lowerCaseCommand.find("devenv") != std::string::npos ||
       lowerCaseCommand.find("VCExpress") != std::string::npos)
     {
-    return cmGlobalVisualStudio7Generator::GenerateBuildCommand(makeProgram,
-      projectName, projectDir, additionalOptions, targetName, config,
-      ignoreErrors, fast);
+    cmGlobalVisualStudio7Generator::GenerateBuildCommand(
+      makeCommand, makeProgram, projectName, projectDir,
+      targetName, config, fast, makeOptions);
+    return;
     }
 
   // Otherwise, assume MSBuild command line, and construct accordingly.
 
-  // if there are spaces in the makeCommand, assume a full path
-  // and convert it to a path with no spaces in it as the
-  // RunSingleCommand does not like spaces
-  if(makeCommand.find(' ') != std::string::npos)
-    {
-    cmSystemTools::GetShortPath(makeCommand.c_str(), makeCommand);
-    }
+  makeCommand.push_back(makeProgram);
+
   // msbuild.exe CxxOnly.sln /t:Build /p:Configuration=Debug /target:ALL_BUILD
   if(!targetName || strlen(targetName) == 0)
     {
     targetName = "ALL_BUILD";
     }
-  bool clean = false;
   if ( targetName && strcmp(targetName, "clean") == 0 )
     {
-    clean = true;
-    makeCommand += " ";
-    makeCommand += projectName;
-    makeCommand += ".sln ";
-    makeCommand += "/t:Clean ";
+    makeCommand.push_back(std::string(projectName)+".sln");
+    makeCommand.push_back("/t:Clean");
     }
   else
     {
@@ -331,27 +325,22 @@ std::string cmGlobalVisualStudio10Generator
           }
         }
       }
-    makeCommand += " ";
-    makeCommand += targetProject;
-    makeCommand += " ";
+    makeCommand.push_back(targetProject);
     }
-  makeCommand += "/p:Configuration=";
+  std::string configArg = "/p:Configuration=";
   if(config && strlen(config))
     {
-    makeCommand += config;
+    configArg += config;
     }
   else
     {
-    makeCommand += "Debug";
-    }
-  makeCommand += " /p:VisualStudioVersion=";
-  makeCommand += this->GetIDEVersion();
-  if ( additionalOptions )
-    {
-    makeCommand += " ";
-    makeCommand += additionalOptions;
+    configArg += "Debug";
     }
-  return makeCommand;
+  makeCommand.push_back(configArg);
+  makeCommand.push_back(std::string("/p:VisualStudioVersion=")+
+                        this->GetIDEVersion());
+  makeCommand.insert(makeCommand.end(),
+                     makeOptions.begin(), makeOptions.end());
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h
index e9e7cb1..f358e5e 100644
--- a/Source/cmGlobalVisualStudio10Generator.h
+++ b/Source/cmGlobalVisualStudio10Generator.h
@@ -32,11 +32,16 @@ public:
 
   virtual bool SetGeneratorToolset(std::string const& ts);
 
-  virtual std::string
-  GenerateBuildCommand(const char* makeProgram,
-                       const char *projectName, const char *projectDir,
-                       const char* additionalOptions, const char *targetName,
-                       const char* config, bool ignoreErrors, bool);
+  virtual void GenerateBuildCommand(
+    std::vector<std::string>& makeCommand,
+    const char* makeProgram,
+    const char* projectName,
+    const char* projectDir,
+    const char* targetName,
+    const char* config,
+    bool fast,
+    std::vector<std::string> const& makeOptions = std::vector<std::string>()
+    );
 
   virtual void AddPlatformDefinitions(cmMakefile* mf);
 
diff --git a/Source/cmGlobalVisualStudio6Generator.cxx b/Source/cmGlobalVisualStudio6Generator.cxx
index 4006df4..612e50f 100644
--- a/Source/cmGlobalVisualStudio6Generator.cxx
+++ b/Source/cmGlobalVisualStudio6Generator.cxx
@@ -77,52 +77,41 @@ void cmGlobalVisualStudio6Generator::GenerateConfigurations(cmMakefile* mf)
     }
 }
 
-std::string cmGlobalVisualStudio6Generator
-::GenerateBuildCommand(const char* makeProgram,
-                       const char *projectName,
-                       const char *projectDir,
-                       const char* additionalOptions,
-                       const char *targetName,
-                       const char* config,
-                       bool ignoreErrors,
-                       bool)
+void
+cmGlobalVisualStudio6Generator::GenerateBuildCommand(
+  std::vector<std::string>& makeCommand,
+  const char* makeProgram,
+  const char* projectName,
+  const char* /*projectDir*/,
+  const char* targetName,
+  const char* config,
+  bool /*fast*/,
+  std::vector<std::string> const& makeOptions
+  )
 {
-  // Visual studio 6 doesn't need project dir
-  (void) projectDir;
-  // Ingoring errors is not implemented in visual studio 6
-  (void) ignoreErrors;
-
   // now build the test
   std::vector<std::string> mp;
   mp.push_back("[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio"
                "\\6.0\\Setup;VsCommonDir]/MSDev98/Bin");
   cmSystemTools::ExpandRegistryValues(mp[0]);
   std::string originalCommand = makeProgram;
-  std::string makeCommand =
+  std::string makeCommandFound =
     cmSystemTools::FindProgram(makeProgram, mp);
-  if(makeCommand.size() == 0)
+  if(makeCommandFound.size() == 0)
     {
     std::string e = "Generator cannot find Visual Studio 6 msdev program \"";
     e += originalCommand;
     e += "\" specified by CMAKE_MAKE_PROGRAM cache entry.  ";
     e += "Please fix the setting.";
     cmSystemTools::Error(e.c_str());
-    return "";
+    return;
     }
-  makeCommand = cmSystemTools::ConvertToOutputPath(makeCommand.c_str());
 
-  // if there are spaces in the makeCommand, assume a full path
-  // and convert it to a path with no spaces in it as the
-  // RunSingleCommand does not like spaces
-#if defined(_WIN32) && !defined(__CYGWIN__)
-  if(makeCommand.find(' ') != std::string::npos)
-    {
-    cmSystemTools::GetShortPath(makeCommand.c_str(), makeCommand);
-    }
-#endif
-  makeCommand += " ";
-  makeCommand += projectName;
-  makeCommand += ".dsw /MAKE \"";
+  makeCommand.push_back(makeCommandFound);
+
+  makeCommand.push_back(std::string(projectName)+".dsw");
+  makeCommand.push_back("/MAKE");
+  std::string targetArg;
   bool clean = false;
   if ( targetName && strcmp(targetName, "clean") == 0 )
     {
@@ -131,35 +120,32 @@ std::string cmGlobalVisualStudio6Generator
     }
   if (targetName && strlen(targetName))
     {
-    makeCommand += targetName;
+    targetArg += targetName;
     }
   else
     {
-    makeCommand += "ALL_BUILD";
+    targetArg += "ALL_BUILD";
     }
-  makeCommand += " - ";
+  targetArg += " - ";
   if(config && strlen(config))
     {
-    makeCommand += config;
+    targetArg += config;
     }
   else
     {
-    makeCommand += "Debug";
+    targetArg += "Debug";
     }
+  makeCommand.push_back(targetArg);
   if(clean)
     {
-    makeCommand += "\" /CLEAN";
+    makeCommand.push_back("/CLEAN");
     }
   else
     {
-    makeCommand += "\" /BUILD";
-    }
-  if ( additionalOptions )
-    {
-    makeCommand += " ";
-    makeCommand += additionalOptions;
+    makeCommand.push_back("/BUILD");
     }
-  return makeCommand;
+  makeCommand.insert(makeCommand.end(),
+                     makeOptions.begin(), makeOptions.end());
 }
 
 ///! Create a local generator appropriate to this Global Generator
diff --git a/Source/cmGlobalVisualStudio6Generator.h b/Source/cmGlobalVisualStudio6Generator.h
index 6bd39ca..1ffa130 100644
--- a/Source/cmGlobalVisualStudio6Generator.h
+++ b/Source/cmGlobalVisualStudio6Generator.h
@@ -52,14 +52,16 @@ public:
    * Try running cmake and building a file. This is used for dynalically
    * loaded commands, not as part of the usual build process.
    */
-  virtual std::string GenerateBuildCommand(const char* makeProgram,
-                                           const char *projectName,
-                                           const char *projectDir,
-                                           const char* additionalOptions,
-                                           const char *targetName,
-                                           const char* config,
-                                           bool ignoreErrors,
-                                           bool fast);
+  virtual void GenerateBuildCommand(
+    std::vector<std::string>& makeCommand,
+    const char* makeProgram,
+    const char* projectName,
+    const char* projectDir,
+    const char* targetName,
+    const char* config,
+    bool fast,
+    std::vector<std::string> const& makeOptions = std::vector<std::string>()
+    );
 
   /**
    * Generate the all required files for building this project/tree. This
diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx
index d476c24..04563f3 100644
--- a/Source/cmGlobalVisualStudio7Generator.cxx
+++ b/Source/cmGlobalVisualStudio7Generator.cxx
@@ -110,35 +110,19 @@ void cmGlobalVisualStudio7Generator
 
 }
 
-std::string cmGlobalVisualStudio7Generator
-::GenerateBuildCommand(const char* makeProgram,
-                       const char *projectName, const char *projectDir,
-                       const char* additionalOptions, const char *targetName,
-                       const char* config, bool ignoreErrors, bool)
-{
-  // Visual studio 7 doesn't need project dir
-  (void) projectDir;
-  // Ingoring errors is not implemented in visual studio 6
-  (void) ignoreErrors;
-
-  // now build the test
-  std::string makeCommand =
-    cmSystemTools::ConvertToOutputPath(makeProgram);
-  std::string lowerCaseCommand = makeCommand;
-  cmSystemTools::LowerCase(lowerCaseCommand);
-
-  // if there are spaces in the makeCommand, assume a full path
-  // and convert it to a path with no spaces in it as the
-  // RunSingleCommand does not like spaces
-#if defined(_WIN32) && !defined(__CYGWIN__)
-  if(makeCommand.find(' ') != std::string::npos)
-    {
-    cmSystemTools::GetShortPath(makeCommand.c_str(), makeCommand);
-    }
-#endif
-  makeCommand += " ";
-  makeCommand += projectName;
-  makeCommand += ".sln ";
+void cmGlobalVisualStudio7Generator::GenerateBuildCommand(
+  std::vector<std::string>& makeCommand,
+  const char* makeProgram,
+  const char* projectName,
+  const char* /*projectDir*/,
+  const char* targetName,
+  const char* config,
+  bool /*fast*/,
+  std::vector<std::string> const& makeOptions)
+{
+  makeCommand.push_back(makeProgram);
+
+  makeCommand.push_back(std::string(projectName) + ".sln");
   bool clean = false;
   if ( targetName && strcmp(targetName, "clean") == 0 )
     {
@@ -147,37 +131,33 @@ std::string cmGlobalVisualStudio7Generator
     }
   if(clean)
     {
-    makeCommand += "/clean ";
+    makeCommand.push_back("/clean");
     }
   else
     {
-    makeCommand += "/build ";
+    makeCommand.push_back("/build");
     }
 
   if(config && strlen(config))
     {
-    makeCommand += config;
+    makeCommand.push_back(config);
     }
   else
     {
-    makeCommand += "Debug";
+    makeCommand.push_back("Debug");
     }
-  makeCommand += " /project ";
+  makeCommand.push_back("/project");
 
   if (targetName && strlen(targetName))
     {
-    makeCommand += targetName;
+    makeCommand.push_back(targetName);
     }
   else
     {
-    makeCommand += "ALL_BUILD";
+    makeCommand.push_back("ALL_BUILD");
     }
-  if ( additionalOptions )
-    {
-    makeCommand += " ";
-    makeCommand += additionalOptions;
-    }
-  return makeCommand;
+  makeCommand.insert(makeCommand.end(),
+                     makeOptions.begin(), makeOptions.end());
 }
 
 ///! Create a local generator appropriate to this Global Generator
diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h
index 66dc443..a6c2581 100644
--- a/Source/cmGlobalVisualStudio7Generator.h
+++ b/Source/cmGlobalVisualStudio7Generator.h
@@ -60,14 +60,16 @@ public:
    * Try running cmake and building a file. This is used for dynamically
    * loaded commands, not as part of the usual build process.
    */
-  virtual std::string GenerateBuildCommand(const char* makeProgram,
-                                           const char *projectName,
-                                           const char *projectDir,
-                                           const char* additionalOptions,
-                                           const char *targetName,
-                                           const char* config,
-                                           bool ignoreErrors,
-                                           bool fast);
+  virtual void GenerateBuildCommand(
+    std::vector<std::string>& makeCommand,
+    const char* makeProgram,
+    const char* projectName,
+    const char* projectDir,
+    const char* targetName,
+    const char* config,
+    bool fast,
+    std::vector<std::string> const& makeOptions = std::vector<std::string>()
+    );
 
   /**
    * Generate the all required files for building this project/tree. This
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index 13ed143..f8ec8a0 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -257,39 +257,34 @@ void cmGlobalXCodeGenerator::EnableLanguage(std::vector<std::string>const&
 }
 
 //----------------------------------------------------------------------------
-std::string cmGlobalXCodeGenerator
-::GenerateBuildCommand(const char* makeProgram,
-                       const char *projectName,
-                       const char *projectDir,
-                       const char* additionalOptions,
-                       const char *targetName,
-                       const char* config,
-                       bool ignoreErrors,
-                       bool)
-{
-  // Config is not used yet
-  (void) ignoreErrors;
-  (void) projectDir;
-
+void
+cmGlobalXCodeGenerator::GenerateBuildCommand(
+  std::vector<std::string>& makeCommand,
+  const char* makeProgram,
+  const char* projectName,
+  const char* /*projectDir*/,
+  const char* targetName,
+  const char* config,
+  bool /*fast*/,
+  std::vector<std::string> const& makeOptions)
+{
   // now build the test
   if(makeProgram == 0 || !strlen(makeProgram))
     {
     cmSystemTools::Error(
       "Generator cannot find the appropriate make command.");
-    return "";
+    return;
     }
-  std::string makeCommand =
-    cmSystemTools::ConvertToOutputPath(makeProgram);
-  std::string lowerCaseCommand = makeCommand;
-  cmSystemTools::LowerCase(lowerCaseCommand);
+  makeCommand.push_back(makeProgram);
 
-  makeCommand += " -project ";
-  makeCommand += projectName;
-  makeCommand += ".xcode";
+  makeCommand.push_back("-project");
+  std::string projectArg = projectName;
+  projectArg += ".xcode";
   if(this->XcodeVersion > 20)
     {
-    makeCommand += "proj";
+    projectArg += "proj";
     }
+  makeCommand.push_back(projectArg);
 
   bool clean = false;
   if ( targetName && strcmp(targetName, "clean") == 0 )
@@ -299,13 +294,13 @@ std::string cmGlobalXCodeGenerator
     }
   if(clean)
     {
-    makeCommand += " clean";
+    makeCommand.push_back("clean");
     }
   else
     {
-    makeCommand += " build";
+    makeCommand.push_back("build");
     }
-  makeCommand += " -target ";
+  makeCommand.push_back("-target");
   // if it is a null string for config don't use it
   if(config && *config == 0)
     {
@@ -313,27 +308,24 @@ std::string cmGlobalXCodeGenerator
     }
   if (targetName && strlen(targetName))
     {
-    makeCommand += targetName;
+    makeCommand.push_back(targetName);
     }
   else
     {
-    makeCommand += "ALL_BUILD";
+    makeCommand.push_back("ALL_BUILD");
     }
   if(this->XcodeVersion == 15)
     {
-    makeCommand += " -buildstyle Development ";
+    makeCommand.push_back("-buildstyle");
+    makeCommand.push_back("Development");
     }
   else
     {
-    makeCommand += " -configuration ";
-    makeCommand += config?config:"Debug";
-    }
-  if ( additionalOptions )
-    {
-    makeCommand += " ";
-    makeCommand += additionalOptions;
+    makeCommand.push_back("-configuration");
+    makeCommand.push_back(config?config:"Debug");
     }
-  return makeCommand;
+  makeCommand.insert(makeCommand.end(),
+                     makeOptions.begin(), makeOptions.end());
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmGlobalXCodeGenerator.h b/Source/cmGlobalXCodeGenerator.h
index 97072b2..e8cbd14 100644
--- a/Source/cmGlobalXCodeGenerator.h
+++ b/Source/cmGlobalXCodeGenerator.h
@@ -53,14 +53,16 @@ public:
    * Try running cmake and building a file. This is used for dynalically
    * loaded commands, not as part of the usual build process.
    */
-  virtual std::string GenerateBuildCommand(const char* makeProgram,
-                                           const char *projectName,
-                                           const char *projectDir,
-                                           const char* additionalOptions,
-                                           const char *targetName,
-                                           const char* config,
-                                           bool ignoreErrors,
-                                           bool fast);
+  virtual void GenerateBuildCommand(
+    std::vector<std::string>& makeCommand,
+    const char* makeProgram,
+    const char* projectName,
+    const char* projectDir,
+    const char* targetName,
+    const char* config,
+    bool fast,
+    std::vector<std::string> const& makeOptions = std::vector<std::string>()
+    );
 
   /**
    * Generate the all required files for building this project/tree. This
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index f0f9ef7..16a6240 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -2682,7 +2682,7 @@ int cmake::Build(const std::string& dir,
                     makeProgram.c_str(),
                     config.c_str(), clean, false, 0,
                     cmSystemTools::OUTPUT_PASSTHROUGH,
-                    0, nativeOptions);
+                    nativeOptions);
 }
 
 void cmake::WatchUnusedCli(const char* var)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0814d0a6559ed3634dafb372f34491407a27c5e8
commit 0814d0a6559ed3634dafb372f34491407a27c5e8
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Nov 15 13:31:00 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Nov 15 14:40:55 2013 -0500

    cmSystemTools: Add PrintSingleCommand method
    
    Add a method to print a command line for human reference by simply
    double-quoting every argument.

diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index 8a0d8dc..b3dbd05 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -795,6 +795,23 @@ bool cmSystemTools::RunSingleCommand(
                                          dir, outputflag, timeout);
 }
 
+std::string
+cmSystemTools::PrintSingleCommand(std::vector<std::string> const& command)
+{
+  std::string commandStr;
+  const char* sep = "";
+  for(std::vector<std::string>::const_iterator i = command.begin();
+      i != command.end(); ++i)
+    {
+    commandStr += sep;
+    commandStr += "\"";
+    commandStr += *i;
+    commandStr += "\"";
+    sep = " ";
+    }
+  return commandStr;
+}
+
 bool cmSystemTools::DoesFileExistWithExtensions(
   const char* name,
   const std::vector<std::string>& headerExts)
diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h
index 95c7029..4e854c8 100644
--- a/Source/cmSystemTools.h
+++ b/Source/cmSystemTools.h
@@ -239,6 +239,8 @@ public:
                                OutputOption outputflag = OUTPUT_MERGE,
                                double timeout = 0.0);
 
+  static std::string PrintSingleCommand(std::vector<std::string> const&);
+
   /**
    * Parse arguments out of a single string command
    */

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ee6e4ac841d8094b59cd0a48c61d7ca3b68c68c2
commit ee6e4ac841d8094b59cd0a48c61d7ca3b68c68c2
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Nov 15 13:30:10 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Nov 15 14:40:55 2013 -0500

    cmSystemTools: Add RunSingleCommand overload for std::vector<std::string>

diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index f5376eb..8a0d8dc 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -616,8 +616,24 @@ bool cmSystemTools::RunSingleCommand(std::vector<cmStdString>const& command,
                                      OutputOption outputflag ,
                                      double timeout )
 {
+  std::vector<std::string> cmd;
+  for(std::vector<cmStdString>::const_iterator i = command.begin();
+      i != command.end(); ++i)
+    {
+    cmd.push_back(*i);
+    }
+  return cmSystemTools::RunSingleCommand(cmd, output, retVal, dir,
+                                         outputflag, timeout);
+}
+
+bool cmSystemTools::RunSingleCommand(std::vector<std::string>const& command,
+                                     std::string* output ,
+                                     int* retVal , const char* dir ,
+                                     OutputOption outputflag ,
+                                     double timeout )
+{
   std::vector<const char*> argv;
-  for(std::vector<cmStdString>::const_iterator a = command.begin();
+  for(std::vector<std::string>::const_iterator a = command.begin();
       a != command.end(); ++a)
     {
     argv.push_back(a->c_str());
diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h
index 69f6381..95c7029 100644
--- a/Source/cmSystemTools.h
+++ b/Source/cmSystemTools.h
@@ -228,6 +228,11 @@ public:
    * the command to run, and each argument to the command should
    * be in comand[1]...command[command.size()]
    */
+  static bool RunSingleCommand(std::vector<std::string> const& command,
+                               std::string* output = 0,
+                               int* retVal = 0, const char* dir = 0,
+                               OutputOption outputflag = OUTPUT_MERGE,
+                               double timeout = 0.0);
   static bool RunSingleCommand(std::vector<cmStdString> const& command,
                                std::string* output = 0,
                                int* retVal = 0, const char* dir = 0,

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2d072069e2ef44780c214c847285df8ed8e70bba
commit 2d072069e2ef44780c214c847285df8ed8e70bba
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 14 16:06:08 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Nov 15 14:40:04 2013 -0500

    ctest_build: Use "cmake --build" to launch the native build tool
    
    This avoids requiring cmGlobalGenerator::GenerateBuildCommand to produce
    a string so that it can be later refactored to produce a vector with no
    quoting or escaping.  It also makes the ctest_build command match what
    "ctest -T Build" would run in a build tree configured with the new
    build_command() command behavior.  It also ensures that the native build
    tool used matches that selected by the configuration of the tree to be
    built.

diff --git a/Source/CTest/cmCTestBuildCommand.cxx b/Source/CTest/cmCTestBuildCommand.cxx
index 1f63185..12ff718 100644
--- a/Source/CTest/cmCTestBuildCommand.cxx
+++ b/Source/CTest/cmCTestBuildCommand.cxx
@@ -114,9 +114,6 @@ cmCTestGenericHandler* cmCTestBuildCommand::InitializeHandler()
           this->Makefile->GetCMakeInstance()->CreateGlobalGenerator(
             cmakeGeneratorName);
         }
-      this->GlobalGenerator->FindMakeProgram(this->Makefile);
-      const char* cmakeMakeProgram
-        = this->Makefile->GetDefinition("CMAKE_MAKE_PROGRAM");
       if(strlen(cmakeBuildConfiguration) == 0)
         {
         const char* config = 0;
@@ -133,10 +130,8 @@ cmCTestGenericHandler* cmCTestBuildCommand::InitializeHandler()
       std::string dir = this->CTest->GetCTestConfiguration("BuildDirectory");
       std::string buildCommand
         = this->GlobalGenerator->
-        GenerateBuildCommand(cmakeMakeProgram,
-                             cmakeProjectName, dir.c_str(),
-                             cmakeBuildAdditionalFlags, cmakeBuildTarget,
-                             cmakeBuildConfiguration, true, false);
+        GenerateCMakeBuildCommand(cmakeBuildTarget, cmakeBuildConfiguration,
+                                  cmakeBuildAdditionalFlags, true);
       cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
                  "SetMakeCommand:"
                  << buildCommand.c_str() << "\n");

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=bca67c710f21cdea70c9b23fe927c87135ee81d9
commit bca67c710f21cdea70c9b23fe927c87135ee81d9
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Nov 13 16:01:20 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Nov 15 14:38:18 2013 -0500

    build_command: Return a "cmake --build" command-line
    
    Re-implement the build_command() command to use "cmake --build" instead
    of generating a native build tool invocation directly.  This command
    will internally invoke the proper native build tool.
    
    This avoids requiring cmGlobalGenerator::GenerateBuildCommand to produce
    a string so that it can be later refactored to produce a vector with no
    quoting or escaping.  It will also allow us to later teach CMake to
    delay the decision about which build tool to invoke until after the
    project build system is generated to disk.  For example, on Visual
    Studio 10 and above the preferred command-line tool is MSBuild, but we
    need to fall back to devenv if the .sln has Intel Fortran .vfproj files.

diff --git a/Help/command/build_command.rst b/Help/command/build_command.rst
index f4a56f0..82a9a42 100644
--- a/Help/command/build_command.rst
+++ b/Help/command/build_command.rst
@@ -1,37 +1,44 @@
 build_command
 -------------
 
-Get the command line to build this project.
+Get a command line to build the current project.
+This is mainly intended for internal use by the :module:`CTest` module.
 
-::
+.. code-block:: cmake
 
   build_command(<variable>
                 [CONFIGURATION <config>]
-                [PROJECT_NAME <projname>]
-                [TARGET <target>])
+                [TARGET <target>]
+                [PROJECT_NAME <projname>] # legacy, causes warning
+               )
 
-Sets the given <variable> to a string containing the command line for
-building one configuration of a target in a project using the build
-tool appropriate for the current CMAKE_GENERATOR.
+Sets the given ``<variable>`` to a command-line string of the form::
 
-If CONFIGURATION is omitted, CMake chooses a reasonable default value
-for multi-configuration generators.  CONFIGURATION is ignored for
-single-configuration generators.
+ <cmake> --build . [--config <config>] [--target <target>] [-- -i]
 
-If PROJECT_NAME is omitted, the resulting command line will build the
-top level PROJECT in the current build tree.
+where ``<cmake>`` is the location of the :manual:`cmake(1)` command-line
+tool, and ``<config>`` and ``<target>`` are the values provided to the
+``CONFIGURATION`` and ``TARGET`` options, if any.  The trailing ``-- -i``
+option is added for Makefile generators.
 
-If TARGET is omitted, the resulting command line will build
-everything, effectively using build target 'all' or 'ALL_BUILD'.
+When invoked, this ``cmake --build`` command line will launch the
+underlying build system tool.
 
-::
+.. code-block:: cmake
 
   build_command(<cachevariable> <makecommand>)
 
 This second signature is deprecated, but still available for backwards
 compatibility.  Use the first signature instead.
 
-Sets the given <cachevariable> to a string containing the command to
-build this project from the root of the build tree using the build
-tool given by <makecommand>.  <makecommand> should be the full path to
-msdev, devenv, nmake, make or one of the end user build tools.
+It sets the given ``<cachevariable>`` to a command-line string as
+above but without the ``--config`` or ``--target`` options.
+The ``<makecommand>`` is ignored but should be the full path to
+msdev, devenv, nmake, make or one of the end user build tools
+for legacy invocations.
+
+.. note::
+ In CMake versions prior to 3.0 this command returned a command
+ line that directly invokes the native build tool for the current
+ generator.  Their implementation of the ``PROJECT_NAME`` option
+ had no useful effects, so CMake now warns on use of the option.
diff --git a/Source/cmBuildCommand.cxx b/Source/cmBuildCommand.cxx
index b6e2569..c06b8ad 100644
--- a/Source/cmBuildCommand.cxx
+++ b/Source/cmBuildCommand.cxx
@@ -85,18 +85,7 @@ bool cmBuildCommand
       }
     }
 
-  const char* makeprogram
-    = this->Makefile->GetDefinition("CMAKE_MAKE_PROGRAM");
-  if(!makeprogram)
-    {
-    this->Makefile->IssueMessage(
-      cmake::FATAL_ERROR,
-      "build_command() requires CMAKE_MAKE_PROGRAM to be defined.  "
-      "Call project() or enable_language() first.");
-    return true;
-    }
-
-  // If null/empty CONFIGURATION argument, GenerateBuildCommand uses 'Debug'
+  // If null/empty CONFIGURATION argument, cmake --build uses 'Debug'
   // in the currently implemented multi-configuration global generators...
   // so we put this code here to end up with the same default configuration
   // as the original 2-arg build_command signature:
@@ -110,19 +99,15 @@ bool cmBuildCommand
     configuration = "Release";
     }
 
-  // If null/empty PROJECT_NAME argument, use the Makefile's project name:
-  //
-  if(!project_name || !*project_name)
+  if(project_name && *project_name)
     {
-    project_name = this->Makefile->GetProjectName();
+    this->Makefile->IssueMessage(cmake::AUTHOR_WARNING,
+      "Ignoring PROJECT_NAME option because it has no effect.");
     }
 
-  // If null/empty TARGET argument, GenerateBuildCommand omits any mention
-  // of a target name on the build command line...
-  //
   std::string makecommand = this->Makefile->GetLocalGenerator()
-    ->GetGlobalGenerator()->GenerateBuildCommand
-    (makeprogram, project_name, 0, 0, target, configuration, true, false);
+    ->GetGlobalGenerator()->GenerateCMakeBuildCommand(target, configuration,
+                                                      0, true);
 
   this->Makefile->AddDefinition(variable, makecommand.c_str());
 
@@ -142,7 +127,6 @@ bool cmBuildCommand
   const char* define = args[0].c_str();
   const char* cacheValue
     = this->Makefile->GetDefinition(define);
-  std::string makeprogram = args[1];
 
   std::string configType = "Release";
   const char* cfg = getenv("CMAKE_CONFIG_TYPE");
@@ -152,9 +136,8 @@ bool cmBuildCommand
     }
 
   std::string makecommand = this->Makefile->GetLocalGenerator()
-    ->GetGlobalGenerator()->GenerateBuildCommand
-    (makeprogram.c_str(), this->Makefile->GetProjectName(), 0, 0,
-     0, configType.c_str(), true, false);
+    ->GetGlobalGenerator()->GenerateCMakeBuildCommand(0, configType.c_str(),
+                                                      0, true);
 
   if(cacheValue)
     {
diff --git a/Tests/RunCMake/CTest/BeforeProject-stderr.txt b/Tests/RunCMake/CTest/BeforeProject-stderr.txt
index 354896b..2d934a4 100644
--- a/Tests/RunCMake/CTest/BeforeProject-stderr.txt
+++ b/Tests/RunCMake/CTest/BeforeProject-stderr.txt
@@ -1,6 +1,6 @@
-CMake Error at .*/Modules/CTest.cmake:[0-9]+ \(build_command\):
-  build_command\(\) requires CMAKE_MAKE_PROGRAM to be defined.  Call project\(\)
-  or enable_language\(\) first.
+CMake Error at .*/Modules/CTestTargets.cmake:20 \(message\):
+  Do not include\(CTest\) before calling project\(\).
 Call Stack \(most recent call first\):
-  BeforeProject.cmake:[0-9]+ \(include\)
-  CMakeLists.txt:[0-9]+ \(include\)
+  .*/Modules/CTest.cmake:297 \(include\)
+  BeforeProject.cmake:1 \(include\)
+  CMakeLists.txt:5 \(include\)
diff --git a/Tests/RunCMake/build_command/BeforeProject-result.txt b/Tests/RunCMake/build_command/BeforeProject-result.txt
deleted file mode 100644
index d00491f..0000000
--- a/Tests/RunCMake/build_command/BeforeProject-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/build_command/BeforeProject-stderr.txt b/Tests/RunCMake/build_command/BeforeProject-stderr.txt
index d3d7661..2ae0ed1 100644
--- a/Tests/RunCMake/build_command/BeforeProject-stderr.txt
+++ b/Tests/RunCMake/build_command/BeforeProject-stderr.txt
@@ -1,5 +1,7 @@
-CMake Error at BeforeProject.cmake:[0-9]+ \(build_command\):
-  build_command\(\) requires CMAKE_MAKE_PROGRAM to be defined.  Call project\(\)
-  or enable_language\(\) first.
+CMake Warning \(dev\) at BeforeProject.cmake:2 \(message\):
+  build_command\(\) returned:
+
+   .*cmake.* --build \..*
 Call Stack \(most recent call first\):
-  CMakeLists.txt:[0-9]+ \(include\)
+  CMakeLists.txt:5 \(include\)
+This warning is for project developers.  Use -Wno-dev to suppress it.
diff --git a/Tests/RunCMake/build_command/BeforeProject.cmake b/Tests/RunCMake/build_command/BeforeProject.cmake
index 15788d1..a2175c4 100644
--- a/Tests/RunCMake/build_command/BeforeProject.cmake
+++ b/Tests/RunCMake/build_command/BeforeProject.cmake
@@ -1,2 +1,3 @@
 build_command(MAKECOMMAND_DEFAULT_VALUE)
+message(AUTHOR_WARNING "build_command() returned:\n ${MAKECOMMAND_DEFAULT_VALUE}")
 project(${RunCMake_TEST} NONE)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=05923172f94d804dfba33957aa08ac88cc5cd0bd
commit 05923172f94d804dfba33957aa08ac88cc5cd0bd
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Nov 13 15:59:32 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Thu Nov 14 16:25:31 2013 -0500

    cmGlobalGenerator: Add method to compute "cmake --build" command line
    
    Create a GenerateCMakeBuildCommand method to generate a command-line
    string invoking "cmake --build" for a given target and configuration.
    Optionally allow the "-i" make flag and additional native options.

diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 335bf5a..531e1ca 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -1707,6 +1707,46 @@ int cmGlobalGenerator::Build(
   return retVal;
 }
 
+//----------------------------------------------------------------------------
+std::string cmGlobalGenerator::GenerateCMakeBuildCommand(
+  const char* target, const char* config, const char* native,
+  bool ignoreErrors)
+{
+  std::string makeCommand = cmSystemTools::GetCMakeCommand();
+  makeCommand = cmSystemTools::ConvertToOutputPath(makeCommand.c_str());
+  makeCommand += " --build .";
+  if(config && *config)
+    {
+    makeCommand += " --config \"";
+    makeCommand += config;
+    makeCommand += "\"";
+    }
+  if(target && *target)
+    {
+    makeCommand += " --target \"";
+    makeCommand += target;
+    makeCommand += "\"";
+    }
+  const char* sep = " -- ";
+  if(ignoreErrors)
+    {
+    const char* iflag = this->GetBuildIgnoreErrorsFlag();
+    if(iflag && *iflag)
+      {
+      makeCommand += sep;
+      makeCommand += iflag;
+      sep = " ";
+      }
+    }
+  if(native && *native)
+    {
+    makeCommand += sep;
+    makeCommand += native;
+    }
+  return makeCommand;
+}
+
+//----------------------------------------------------------------------------
 void cmGlobalGenerator::AddLocalGenerator(cmLocalGenerator *lg)
 {
   this->LocalGenerators.push_back(lg);
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 2761158..82ffd64 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -134,6 +134,11 @@ public:
     const char *targetName, const char* config,
     bool ignoreErrors, bool fast);
 
+  /** Generate a "cmake --build" call for a given target and config.  */
+  std::string GenerateCMakeBuildCommand(const char* target,
+                                        const char* config,
+                                        const char* native,
+                                        bool ignoreErrors);
 
   ///! Set the CMake instance
   void SetCMakeInstance(cmake *cm);
@@ -422,6 +427,8 @@ private:
 
   void ClearGeneratorMembers();
 
+  virtual const char* GetBuildIgnoreErrorsFlag() const { return 0; }
+
   // Cache directory content and target files to be built.
   struct DirectoryContent: public std::set<cmStdString>
   {
diff --git a/Source/cmGlobalUnixMakefileGenerator3.h b/Source/cmGlobalUnixMakefileGenerator3.h
index 608f643..322736f 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.h
+++ b/Source/cmGlobalUnixMakefileGenerator3.h
@@ -188,6 +188,7 @@ protected:
 
   cmGeneratedFileStream *CommandDatabase;
 private:
+  virtual const char* GetBuildIgnoreErrorsFlag() const { return "-i"; }
   virtual std::string GetEditCacheCommand() const;
   virtual void ComputeTargetObjects(cmGeneratorTarget* gt) const;
 };

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=1befbfad3d9971335ab0e7deb1a93acfdccf0fb6
commit 1befbfad3d9971335ab0e7deb1a93acfdccf0fb6
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Nov 13 11:15:14 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Thu Nov 14 16:25:31 2013 -0500

    cmGlobalGenerator: Drop unused GenerateBuildCommand implementation
    
    This is a virtual method that is overridden by every generator
    subclass.  The base class implementation should never be called,
    so replace it with a dummy implementation.

diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index b2a0ef7..335bf5a 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -1575,40 +1575,12 @@ int cmGlobalGenerator::TryCompile(const char *srcdir, const char *bindir,
 }
 
 std::string cmGlobalGenerator
-::GenerateBuildCommand(const char* makeProgram, const char *projectName,
-                       const char *projectDir, const char* additionalOptions,
-                       const char *targetName, const char* config,
-                       bool ignoreErrors, bool)
+::GenerateBuildCommand(const char*, const char*,
+                       const char*, const char*,
+                       const char*, const char*,
+                       bool, bool)
 {
-  // Project name & dir and config are not used yet.
-  (void)projectName;
-  (void)projectDir;
-  (void)config;
-
-  std::string makeCommand =
-    cmSystemTools::ConvertToUnixOutputPath(makeProgram);
-
-  // Since we have full control over the invocation of nmake, let us
-  // make it quiet.
-  if ( strcmp(this->GetName(), "NMake Makefiles") == 0 )
-    {
-    makeCommand += " /NOLOGO ";
-    }
-  if ( ignoreErrors )
-    {
-    makeCommand += " -i";
-    }
-  if ( additionalOptions )
-    {
-    makeCommand += " ";
-    makeCommand += additionalOptions;
-    }
-  if ( targetName )
-    {
-    makeCommand += " ";
-    makeCommand += targetName;
-    }
-  return makeCommand;
+  return "cmGlobalGenerator::GenerateBuildCommand not implemented";
 }
 
 int cmGlobalGenerator::Build(

-----------------------------------------------------------------------

Summary of changes:
 CMakeLists.txt                                     |    5 -
 Help/command/build_command.rst                     |   45 ++--
 Help/manual/ctest.1.rst                            |    6 +-
 Help/variable/CMAKE_BUILD_TOOL.rst                 |   11 +-
 Help/variable/CMAKE_MAKE_PROGRAM.rst               |   50 ++++-
 Modules/CMakeCXXInformation.cmake                  |    1 -
 Modules/CMakeCommonLanguageInclude.cmake           |    6 +-
 Modules/CMakeVS10FindMake.cmake                    |   54 ----
 Modules/CMakeVS11FindMake.cmake                    |   53 ----
 Modules/CMakeVS12FindMake.cmake                    |   27 --
 Modules/CMakeVS6FindMake.cmake                     |   25 --
 Modules/CMakeVS71FindMake.cmake                    |   26 --
 Modules/CMakeVS7FindMake.cmake                     |   25 --
 Modules/CMakeVS8FindMake.cmake                     |   34 ---
 Modules/CMakeVS9FindMake.cmake                     |   39 ---
 Modules/CTest.cmake                                |    2 +-
 Source/CPack/cmCPackGenerator.cxx                  |   18 +-
 Source/CTest/cmCTestBuildAndTestHandler.cxx        |   32 +--
 Source/CTest/cmCTestBuildCommand.cxx               |    9 +-
 Source/cmBuildCommand.cxx                          |   33 +--
 Source/cmGlobalGenerator.cxx                       |  145 ++++++-----
 Source/cmGlobalGenerator.h                         |   21 +-
 Source/cmGlobalKdevelopGenerator.cxx               |    2 +-
 Source/cmGlobalNinjaGenerator.cxx                  |   49 ++---
 Source/cmGlobalNinjaGenerator.h                    |   18 +-
 Source/cmGlobalUnixMakefileGenerator3.cxx          |   48 ++--
 Source/cmGlobalUnixMakefileGenerator3.h            |   17 +-
 Source/cmGlobalVisualStudio10Generator.cxx         |  180 ++++++++-----
 Source/cmGlobalVisualStudio10Generator.h           |   23 ++-
 Source/cmGlobalVisualStudio11Generator.cxx         |    1 -
 Source/cmGlobalVisualStudio12Generator.cxx         |    1 -
 Source/cmGlobalVisualStudio6Generator.cxx          |  106 ++++----
 Source/cmGlobalVisualStudio6Generator.h            |   23 +-
 Source/cmGlobalVisualStudio71Generator.cxx         |    1 -
 Source/cmGlobalVisualStudio7Generator.cxx          |   89 ++++---
 Source/cmGlobalVisualStudio7Generator.h            |   24 ++-
 Source/cmGlobalVisualStudio8Generator.cxx          |   21 ++-
 Source/cmGlobalVisualStudio8Generator.h            |    2 +
 Source/cmGlobalVisualStudio9Generator.cxx          |    1 -
 Source/cmGlobalVisualStudioGenerator.cxx           |   13 +
 Source/cmGlobalVisualStudioGenerator.h             |    3 +
 Source/cmGlobalXCodeGenerator.cxx                  |   70 ++---
 Source/cmGlobalXCodeGenerator.h                    |   18 +-
 Source/cmSystemTools.cxx                           |   35 +++-
 Source/cmSystemTools.h                             |    7 +
 Source/cmake.cxx                                   |   11 +-
 Source/cmaketest.h.in                              |   16 --
 Tests/BootstrapTest.cmake                          |   10 +
 Tests/CMakeInstall.cmake                           |   22 +--
 Tests/CMakeLists.txt                               |  286 ++++++++++++--------
 .../CTestBuildCommandProjectInSubdir.cmake.in      |    2 +-
 Tests/ExportImport/CMakeLists.txt                  |    2 -
 Tests/ExportImport/InitialCache.cmake.in           |    1 +
 Tests/Fortran/CMakeLists.txt                       |    2 +-
 Tests/MacRuntimePath/CMakeLists.txt                |    2 -
 Tests/MacRuntimePath/InitialCache.cmake.in         |    1 +
 Tests/MakeClean/CMakeLists.txt                     |   11 +-
 Tests/RunCMake/CTest/BeforeProject-stderr.txt      |   10 +-
 .../build_command/BeforeProject-result.txt         |    1 -
 .../build_command/BeforeProject-stderr.txt         |   10 +-
 Tests/RunCMake/build_command/BeforeProject.cmake   |    1 +
 Tests/RunCMake/build_command/ErrorsCommon.cmake    |    4 +-
 Tests/SimpleInstall/CMakeLists.txt                 |   25 +-
 Tests/SimpleInstallS2/CMakeLists.txt               |   25 +-
 Tests/TestInstall.sh.in                            |   63 -----
 65 files changed, 882 insertions(+), 1042 deletions(-)
 delete mode 100644 Modules/CMakeVS10FindMake.cmake
 delete mode 100644 Modules/CMakeVS11FindMake.cmake
 delete mode 100644 Modules/CMakeVS12FindMake.cmake
 delete mode 100644 Modules/CMakeVS6FindMake.cmake
 delete mode 100644 Modules/CMakeVS71FindMake.cmake
 delete mode 100644 Modules/CMakeVS7FindMake.cmake
 delete mode 100644 Modules/CMakeVS8FindMake.cmake
 delete mode 100644 Modules/CMakeVS9FindMake.cmake
 delete mode 100644 Source/cmaketest.h.in
 create mode 100644 Tests/BootstrapTest.cmake
 delete mode 100644 Tests/RunCMake/build_command/BeforeProject-result.txt
 delete mode 100755 Tests/TestInstall.sh.in


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list