Browse Source

Merge topic 'cleanup-build-commands'

e420124 CMakeDetermineCompilerId: Use CMAKE_VS_(DEVENV|MSBUILD|MSDEV)_COMMAND
0c55729 VS: Add CMAKE_VS_(DEVENV|MSBUILD|MSDEV)_COMMAND variables
Brad King 12 years ago
parent
commit
520ead7200

+ 3 - 0
Help/manual/cmake-variables.7.rst

@@ -68,7 +68,10 @@ Variables that Provide Information
    /variable/CMAKE_TWEAK_VERSION
    /variable/CMAKE_VERBOSE_MAKEFILE
    /variable/CMAKE_VERSION
+   /variable/CMAKE_VS_DEVENV_COMMAND
    /variable/CMAKE_VS_INTEL_Fortran_PROJECT_VERSION
+   /variable/CMAKE_VS_MSBUILD_COMMAND
+   /variable/CMAKE_VS_MSDEV_COMMAND
    /variable/CMAKE_VS_PLATFORM_TOOLSET
    /variable/CMAKE_XCODE_PLATFORM_TOOLSET
    /variable/PROJECT_BINARY_DIR

+ 4 - 0
Help/variable/CMAKE_MAKE_PROGRAM.rst

@@ -29,6 +29,10 @@ to configure the project:
 * 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).
+  (See also variables
+  :variable:`CMAKE_VS_MSBUILD_COMMAND`,
+  :variable:`CMAKE_VS_DEVENV_COMMAND`, and
+  :variable:`CMAKE_VS_MSDEV_COMMAND`.)
 
   These generators prefer to lookup the build tool at build time
   rather than to store ``CMAKE_MAKE_PROGRAM`` in the CMake cache

+ 14 - 0
Help/variable/CMAKE_VS_DEVENV_COMMAND.rst

@@ -0,0 +1,14 @@
+CMAKE_VS_DEVENV_COMMAND
+-----------------------
+
+The generators for :generator:`Visual Studio 7` and above set this
+variable to the ``devenv.com`` command installed with the corresponding
+Visual Studio version.  Note that this variable may be empty on
+Visual Studio Express editions because they do not provide this tool.
+
+This variable is not defined by other generators even if ``devenv.com``
+is installed on the computer.
+
+The :variable:`CMAKE_VS_MSBUILD_COMMAND` is also provided for
+:generator:`Visual Studio 10 2010` and above.
+See also the :variable:`CMAKE_MAKE_PROGRAM` variable.

+ 13 - 0
Help/variable/CMAKE_VS_MSBUILD_COMMAND.rst

@@ -0,0 +1,13 @@
+CMAKE_VS_MSBUILD_COMMAND
+------------------------
+
+The generators for :generator:`Visual Studio 10 2010` and above set this
+variable to the ``MSBuild.exe`` command installed with the corresponding
+Visual Studio version.
+
+This variable is not defined by other generators even if ``MSBuild.exe``
+is installed on the computer.
+
+The :variable:`CMAKE_VS_DEVENV_COMMAND` is also provided for the
+non-Express editions of Visual Studio.
+See also the :variable:`CMAKE_MAKE_PROGRAM` variable.

+ 10 - 0
Help/variable/CMAKE_VS_MSDEV_COMMAND.rst

@@ -0,0 +1,10 @@
+CMAKE_VS_MSDEV_COMMAND
+----------------------
+
+The :generator:`Visual Studio 6` generator sets this variable to the
+``msdev.exe`` command installed with Visual Studio 6.
+
+This variable is not defined by other generators even if ``msdev.exe``
+is installed on the computer.
+
+See also the :variable:`CMAKE_MAKE_PROGRAM` variable.

+ 23 - 14
Modules/CMakeDetermineCompilerId.cmake

@@ -154,24 +154,33 @@ Id flags: ${testflags}
     else()
       set(id_subsystem 1)
     endif()
-    if("${CMAKE_MAKE_PROGRAM}" MATCHES "[Mm][Ss][Bb][Uu][Ii][Ll][Dd]")
-      set(build /p:Configuration=Debug /p:Platform=@id_platform@ /p:VisualStudioVersion=${vs_version}.0)
-    elseif("${CMAKE_MAKE_PROGRAM}" MATCHES "[Mm][Ss][Dd][Ee][Vv]")
-      set(build /make)
-    else()
-      set(build /build Debug)
-    endif()
     set(id_dir ${CMAKE_${lang}_COMPILER_ID_DIR})
     get_filename_component(id_src "${src}" NAME)
     configure_file(${CMAKE_ROOT}/Modules/CompilerId/VS-${v}.${ext}.in
       ${id_dir}/CompilerId${lang}.${ext} @ONLY)
-    execute_process(
-      COMMAND ${CMAKE_MAKE_PROGRAM} CompilerId${lang}.${ext} ${build}
-      WORKING_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}
-      OUTPUT_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
-      ERROR_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
-      RESULT_VARIABLE CMAKE_${lang}_COMPILER_ID_RESULT
-      )
+    if(CMAKE_VS_MSBUILD_COMMAND AND NOT lang STREQUAL "Fortran")
+      set(command "${CMAKE_VS_MSBUILD_COMMAND}" "CompilerId${lang}.${ext}"
+        "/p:Configuration=Debug" "/p:Platform=${id_platform}" "/p:VisualStudioVersion=${vs_version}.0"
+        )
+    elseif(CMAKE_VS_DEVENV_COMMAND)
+      set(command "${CMAKE_VS_DEVENV_COMMAND}" "CompilerId${lang}.${ext}" "/build" "Debug")
+    elseif(CMAKE_VS_MSDEV_COMMAND)
+      set(command "${CMAKE_VS_MSDEV_COMMAND}" "CompilerId${lang}.${ext}" "/make")
+    else()
+      set(command "")
+    endif()
+    if(command)
+      execute_process(
+        COMMAND ${command}
+        WORKING_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}
+        OUTPUT_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
+        ERROR_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
+        RESULT_VARIABLE CMAKE_${lang}_COMPILER_ID_RESULT
+        )
+    else()
+      set(CMAKE_${lang}_COMPILER_ID_RESULT 1)
+      set(CMAKE_${lang}_COMPILER_ID_OUTPUT "VS environment not known to support ${lang}")
+    endif()
     # Match the compiler location line printed out.
     if("${CMAKE_${lang}_COMPILER_ID_OUTPUT}" MATCHES "CMAKE_${lang}_COMPILER=([^%\r\n]+)[\r\n]")
       # Strip VS diagnostic output from the end of the line.

+ 8 - 0
Source/cmGlobalVisualStudio10Generator.cxx

@@ -255,6 +255,14 @@ std::string cmGlobalVisualStudio10Generator::GetUserMacrosRegKeyBase()
   return "Software\\Microsoft\\VisualStudio\\10.0\\vsmacros";
 }
 
+//----------------------------------------------------------------------------
+void cmGlobalVisualStudio10Generator::FindMakeProgram(cmMakefile* mf)
+{
+  this->cmGlobalVisualStudio8Generator::FindMakeProgram(mf);
+  mf->AddDefinition("CMAKE_VS_MSBUILD_COMMAND",
+                    this->GetMSBuildCommand().c_str());
+}
+
 //----------------------------------------------------------------------------
 std::string const& cmGlobalVisualStudio10Generator::GetMSBuildCommand()
 {

+ 2 - 0
Source/cmGlobalVisualStudio10Generator.h

@@ -91,6 +91,8 @@ public:
 
   virtual const char* GetToolsVersion() { return "4.0"; }
 
+  virtual void FindMakeProgram(cmMakefile*);
+
 protected:
   virtual const char* GetIDEVersion() { return "10.0"; }
 

+ 8 - 0
Source/cmGlobalVisualStudio6Generator.cxx

@@ -77,6 +77,14 @@ void cmGlobalVisualStudio6Generator::GenerateConfigurations(cmMakefile* mf)
     }
 }
 
+//----------------------------------------------------------------------------
+void cmGlobalVisualStudio6Generator::FindMakeProgram(cmMakefile* mf)
+{
+  this->cmGlobalVisualStudioGenerator::FindMakeProgram(mf);
+  mf->AddDefinition("CMAKE_VS_MSDEV_COMMAND",
+                    this->GetMSDevCommand().c_str());
+}
+
 //----------------------------------------------------------------------------
 std::string const& cmGlobalVisualStudio6Generator::GetMSDevCommand()
 {

+ 2 - 0
Source/cmGlobalVisualStudio6Generator.h

@@ -89,6 +89,8 @@ public:
   ///! What is the configurations directory variable called?
   virtual const char* GetCMakeCFGIntDir() const { return "$(IntDir)"; }
 
+  virtual void FindMakeProgram(cmMakefile*);
+
 protected:
   virtual const char* GetIDEVersion() { return "6.0"; }
 private:

+ 8 - 0
Source/cmGlobalVisualStudio7Generator.cxx

@@ -110,6 +110,14 @@ void cmGlobalVisualStudio7Generator
 
 }
 
+//----------------------------------------------------------------------------
+void cmGlobalVisualStudio7Generator::FindMakeProgram(cmMakefile* mf)
+{
+  this->cmGlobalVisualStudioGenerator::FindMakeProgram(mf);
+  mf->AddDefinition("CMAKE_VS_DEVENV_COMMAND",
+                    this->GetDevEnvCommand().c_str());
+}
+
 //----------------------------------------------------------------------------
 std::string const& cmGlobalVisualStudio7Generator::GetDevEnvCommand()
 {

+ 2 - 0
Source/cmGlobalVisualStudio7Generator.h

@@ -107,6 +107,8 @@ public:
 
   const char* GetIntelProjectVersion();
 
+  virtual void FindMakeProgram(cmMakefile*);
+
 protected:
   virtual const char* GetIDEVersion() { return "7.0"; }