Created
August 31, 2021 08:03
-
-
Save objectx/9560f592b5dd75bbf082707c06deaf7f to your computer and use it in GitHub Desktop.
Find a MSVC directory
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Copyright (c) 2021 Masashi Fujita. | |
# SPDX-License-Identifier: MIT | |
cmake_minimum_required (VERSION 3.20) | |
include_guard (GLOBAL) | |
define_property (GLOBAL PROPERTY MSVC_INSTALL_DIRECTORY | |
BRIEF_DOCS "Holds the MSVC installation directory" | |
FULL_DOCS "Holds the MSVC installation directory to cache the probing result") | |
function (find_msvc_directory_slow var_) | |
list (APPEND CMAKE_MESSAGE_CONTEXT ${CMAKE_CURRENT_FUNCTION}) | |
if (DEFINED ENV{VSINSTALLDIR}) | |
message (DEBUG "obeys $$VSINSTALLDIR (= $ENV{VSINSTALLDIR}) settings") | |
set (vsdir_ "$ENV{VSINSTALLDIR}") | |
else () | |
message ("use vswhere to determine the Visual Studio installation directory") | |
cmake_path (SET vswhere_ NORMALIZE "$ENV{ProgramFiles\(x86\)}/Microsoft Visual Studio/Installer/vswhere.exe") | |
execute_process (COMMAND ${vswhere_} | |
-latest | |
-requires Microsoft.VisualStudio.Component.VC.ASAN | |
-property installationPath | |
OUTPUT_VARIABLE vsdir_ | |
RESULT_VARIABLE result_) | |
if (NOT (result_ EQUAL 0)) | |
set (${var_} "VC-NOTFOUND" PARENT_SCOPE) | |
message (AUTHOR_WARNING "missing MSVC (${result_})") | |
return () | |
endif () | |
string (STRIP "${vsdir_}" vsdir_) | |
endif () | |
cmake_path (NORMAL_PATH vsdir_) | |
cmake_path (APPEND vsdir_ "VC/Auxiliary/Build/Microsoft.VCToolsVersion.default.txt" OUTPUT_VARIABLE version_text_) | |
if (NOT EXISTS ${version_text_}) | |
set (${var_} "VCVersion-NOTFOUND") | |
message (AUTHOR_WARNING "missing MSVC version file ${version_text_}") | |
return () | |
endif () | |
file (READ ${version_text_} version_) | |
string (STRIP ${version_} version_) | |
cmake_path (APPEND vsdir_ "VC/Tools/MSVC" ${version_} "bin/Hostx64/x64" OUTPUT_VARIABLE vcdir_) | |
if (EXISTS ${vcdir_}) | |
set (${var_} ${vcdir_} PARENT_SCOPE) | |
else () | |
set (${var_} "VCDirectory-NOTFOUND") | |
message (AUTHOR_WARNING "missing MSVC directory ${vcdir_}") | |
endif () | |
endfunction () | |
function (find_msvc_directory var_) | |
list (APPEND CMAKE_MESSAGE_CONTEXT ${CMAKE_CURRENT_FUNCTION}) | |
get_property (is_cached_ GLOBAL PROPERTY MSVC_INSTALL_DIRECTORY SET) | |
if (is_cached_) | |
get_property (cache_ GLOBAL PROPERTY MSVC_INSTALL_DIRECTORY) | |
message (DEBUG "found in cache (${cache_})") | |
set (${var_} ${cache_} PARENT_SCOPE) | |
return () | |
else () | |
find_msvc_directory_slow (vcdir_) | |
set_property (GLOBAL PROPERTY MSVC_INSTALL_DIRECTORY ${vcdir_}) | |
set (${var_} ${vcdir_} PARENT_SCOPE) | |
endif () | |
endfunction () |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment