2 # This configures the environment for running MSVC. It uses vswhere, the
3 # registry, and a little knowledge of how MSVC is laid out.
5 if ! hash vswhere
2>/dev
/null
; then
6 echo "Can't find vswhere on the path, aborting" 1>&2
10 if ! hash reg
2>/dev
/null
; then
11 echo "Can't find reg on the path, aborting" 1>&2
15 # Turn a unix-y path into a windows one.
17 if hash cygpath
2>/dev
/null
; then
20 echo "$1" |
sed -e 's,\\,/,g;s,^\(.\):,/\L\1,;s,/$,,'
24 # Query the registry. This takes $1 and tags that on the end of several
25 # different paths, looking for a value called $2 at that location.
27 # regquery Microsoft\Microsoft SDKs\Windows\v10.0 ProductVersion
28 # looks for a REG_SZ value called ProductVersion at
29 # HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0
30 # HKLU\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0
33 search
=("HKLM\\SOFTWARE\\Wow6432Node" \
34 "HKCU\\SOFTWARE\\Wow6432Node" \
37 for i
in "${search[@]}"; do
38 r
=$
(reg query
"${i}\\${1}" -v "$2" |
sed -e 's/ *'"$2"' *REG_SZ *//;t;d')
47 VSCOMPONENT
=Microsoft.VisualStudio.Component.VC.Tools.x86.x64
48 vsinstall
=$
(vswhere
-latest -requires "$VSCOMPONENT" -property installationPath
)
50 # Attempt to setup paths if vswhere returns something and VSPATH isn't set.
51 # Otherwise, assume that the env is setup.
52 if [[ -n "$vsinstall" && -z "$VSPATH" ]]; then
54 case "$target_arch" in
56 x64
) m
="$target_arch" ;;
58 echo "No support for target '$target_arch' with MSVC." 1>&2
62 export VSPATH
=$
(fixpath
"$vsinstall")
63 export WINDOWSSDKDIR
="${VSPATH}/SDK"
64 export VCINSTALLDIR
="${VSPATH}/VC"
66 CRTREG
="Microsoft\\Microsoft SDKs\\Windows\\v10.0"
67 UniversalCRTSdkDir
=$
(regquery
"$CRTREG" InstallationFolder
)
68 UniversalCRTSdkDir
=$
(fixpath
"$UniversalCRTSdkDir")
69 UCRTVersion
=$
(regquery
"$CRTREG" ProductVersion
)
70 UCRTVersion
=$
(cd "${UniversalCRTSdkDir}/include"; ls -d "${UCRTVersion}"* |
tail -1)
72 VCVER
=$
(cat "${VCINSTALLDIR}/Auxiliary/Build/Microsoft.VCToolsVersion.default.txt")
73 REDISTVER
=$
(cat "${VCINSTALLDIR}/Auxiliary/Build/Microsoft.VCRedistVersion.default.txt")
74 export WIN32_REDIST_DIR
="${VCINSTALLDIR}/Redist/MSVC/${REDISTVER}/${m}/Microsoft.VC141.CRT"
75 export WIN_UCRT_REDIST_DIR
="${UniversalCRTSdkDir}/Redist/ucrt/DLLs/${m}"
77 if [ "$m" == "x86" ]; then
78 PATH
="${PATH}:${VCINSTALLDIR}/Tools/MSVC/${VCVER}/bin/Hostx64/x64"
79 PATH
="${PATH}:${VCINSTALLDIR}/Tools/MSVC/${VCVER}/bin/Hostx64/x86"
81 PATH
="${PATH}:${VCINSTALLDIR}/Tools/MSVC/${VCVER}/bin/Host${m}/${m}"
82 PATH
="${PATH}:${UniversalCRTSdkDir}/bin/${UCRTVersion}/${m}"
83 PATH
="${PATH}:${WIN32_REDIST_DIR}"
86 INCLUDE
="${VCINSTALLDIR}/Tools/MSVC/${VCVER}/ATLMFC/include"
87 INCLUDE
="${INCLUDE}:${VCINSTALLDIR}/Tools/MSVC/${VCVER}/include"
88 INCLUDE
="${INCLUDE}:${UniversalCRTSdkDir}/include/${UCRTVersion}/ucrt"
89 INCLUDE
="${INCLUDE}:${UniversalCRTSdkDir}/include/${UCRTVersion}/shared"
90 INCLUDE
="${INCLUDE}:${UniversalCRTSdkDir}/include/${UCRTVersion}/um"
91 INCLUDE
="${INCLUDE}:${UniversalCRTSdkDir}/include/${UCRTVersion}/winrt"
92 INCLUDE
="${INCLUDE}:${UniversalCRTSdkDir}/include/${UCRTVersion}/cppwinrt"
95 LIB
="${VCINSTALLDIR}/lib/${m}"
96 LIB
="${VCINSTALLDIR}/Tools/MSVC/${VCVER}/lib/${m}"
97 LIB
="${LIB}:${UniversalCRTSdkDir}/lib/${UCRTVersion}/ucrt/${m}"
98 LIB
="${LIB}:${UniversalCRTSdkDir}/lib/${UCRTVersion}/um/${m}"
101 export GYP_MSVS_OVERRIDE_PATH
="${VSPATH}"
102 export GYP_MSVS_VERSION
=$
(vswhere
-latest -requires "$VSCOMPONENT" -property catalog_productLineVersion
)
104 echo Assuming env setup is already
done.