From 44a86d0b3890848e2df702dc87d625a19216641e Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 20 Oct 2021 12:05:24 -0400 Subject: cmake_host_system_information: Add undocumented VS_MSBUILD_COMMAND key When using the Visual Studio generator for VS 10 or above, offer this key to get the location of the MSBuild command before the first `project()` or `enable_language()` command has finished running. This will be needed only by one of our own modules, so leave it undocumented for now. --- Source/cmCMakeHostSystemInformationCommand.cxx | 7 +++++++ Tests/RunCMake/cmake_host_system_information/RunCMakeTest.cmake | 6 ++++++ Tests/RunCMake/cmake_host_system_information/VsMSBuild.cmake | 4 ++++ .../cmake_host_system_information/VsMSBuildMissing-result.txt | 1 + .../cmake_host_system_information/VsMSBuildMissing-stderr.txt | 4 ++++ .../RunCMake/cmake_host_system_information/VsMSBuildMissing.cmake | 1 + 6 files changed, 23 insertions(+) create mode 100644 Tests/RunCMake/cmake_host_system_information/VsMSBuild.cmake create mode 100644 Tests/RunCMake/cmake_host_system_information/VsMSBuildMissing-result.txt create mode 100644 Tests/RunCMake/cmake_host_system_information/VsMSBuildMissing-stderr.txt create mode 100644 Tests/RunCMake/cmake_host_system_information/VsMSBuildMissing.cmake diff --git a/Source/cmCMakeHostSystemInformationCommand.cxx b/Source/cmCMakeHostSystemInformationCommand.cxx index 74071ff..3922c56 100644 --- a/Source/cmCMakeHostSystemInformationCommand.cxx +++ b/Source/cmCMakeHostSystemInformationCommand.cxx @@ -27,6 +27,7 @@ #ifdef _WIN32 # include "cmAlgorithms.h" # include "cmGlobalGenerator.h" +# include "cmGlobalVisualStudio10Generator.h" # include "cmGlobalVisualStudioVersionedGenerator.h" # include "cmVSSetupHelper.h" # define HAVE_VS_SETUP_HELPER @@ -434,6 +435,12 @@ cm::optional GetValue(cmExecutionStatus& status, } } + if (key == "VS_MSBUILD_COMMAND"_s && gg->IsVisualStudioAtLeast10()) { + cmGlobalVisualStudio10Generator* vs10gen = + static_cast(gg); + return vs10gen->FindMSBuildCommandEarly(&status.GetMakefile()); + } + return {}; } #endif diff --git a/Tests/RunCMake/cmake_host_system_information/RunCMakeTest.cmake b/Tests/RunCMake/cmake_host_system_information/RunCMakeTest.cmake index 189013f..87b6944 100644 --- a/Tests/RunCMake/cmake_host_system_information/RunCMakeTest.cmake +++ b/Tests/RunCMake/cmake_host_system_information/RunCMakeTest.cmake @@ -15,3 +15,9 @@ run_cmake(CentOS6) run_cmake(Debian6) run_cmake(UserFallbackScript) + +if(RunCMake_GENERATOR MATCHES "^Visual Studio " AND NOT RunCMake_GENERATOR STREQUAL "Visual Studio 9 2008") + run_cmake(VsMSBuild) +else() + run_cmake(VsMSBuildMissing) +endif() diff --git a/Tests/RunCMake/cmake_host_system_information/VsMSBuild.cmake b/Tests/RunCMake/cmake_host_system_information/VsMSBuild.cmake new file mode 100644 index 0000000..30e616e --- /dev/null +++ b/Tests/RunCMake/cmake_host_system_information/VsMSBuild.cmake @@ -0,0 +1,4 @@ +cmake_host_system_information(RESULT msbuild QUERY VS_MSBUILD_COMMAND) +if(NOT EXISTS "${msbuild}") + message(FATAL_ERROR "VS_MSBUILD_COMMAND returned path that does not exist:\n ${msbuild}") +endif() diff --git a/Tests/RunCMake/cmake_host_system_information/VsMSBuildMissing-result.txt b/Tests/RunCMake/cmake_host_system_information/VsMSBuildMissing-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/cmake_host_system_information/VsMSBuildMissing-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/cmake_host_system_information/VsMSBuildMissing-stderr.txt b/Tests/RunCMake/cmake_host_system_information/VsMSBuildMissing-stderr.txt new file mode 100644 index 0000000..3a7dfef --- /dev/null +++ b/Tests/RunCMake/cmake_host_system_information/VsMSBuildMissing-stderr.txt @@ -0,0 +1,4 @@ +^CMake Error at VsMSBuildMissing.cmake:[0-9]+ \(cmake_host_system_information\): + cmake_host_system_information does not recognize VS_MSBUILD_COMMAND +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/cmake_host_system_information/VsMSBuildMissing.cmake b/Tests/RunCMake/cmake_host_system_information/VsMSBuildMissing.cmake new file mode 100644 index 0000000..23c0364 --- /dev/null +++ b/Tests/RunCMake/cmake_host_system_information/VsMSBuildMissing.cmake @@ -0,0 +1 @@ +cmake_host_system_information(RESULT msbuild QUERY VS_MSBUILD_COMMAND) -- cgit v0.12