зеркало из https://github.com/mozilla/gecko-dev.git
107 строки
4.0 KiB
Bash
107 строки
4.0 KiB
Bash
#!/bin/bash
|
|
# This configures the environment for running MSVC. It uses vswhere, the
|
|
# registry, and a little knowledge of how MSVC is laid out.
|
|
|
|
if ! hash vswhere 2>/dev/null; then
|
|
echo "Can't find vswhere on the path, aborting" 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! hash reg 2>/dev/null; then
|
|
echo "Can't find reg on the path, aborting" 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
# Turn a unix-y path into a windows one.
|
|
fixpath() {
|
|
if hash cygpath 2>/dev/null; then
|
|
cygpath --unix "$1"
|
|
else # haxx
|
|
echo "$1" | sed -e 's,\\,/,g;s,^\(.\):,/\L\1,;s,/$,,'
|
|
fi
|
|
}
|
|
|
|
# Query the registry. This takes $1 and tags that on the end of several
|
|
# different paths, looking for a value called $2 at that location.
|
|
# e.g.,
|
|
# regquery Microsoft\Microsoft SDKs\Windows\v10.0 ProductVersion
|
|
# looks for a REG_SZ value called ProductVersion at
|
|
# HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0
|
|
# HKLU\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0
|
|
# etc...
|
|
regquery() {
|
|
search=("HKLM\\SOFTWARE\\Wow6432Node" \
|
|
"HKCU\\SOFTWARE\\Wow6432Node" \
|
|
"HKLM\\SOFTWARE" \
|
|
"HKCU\\SOFTWARE")
|
|
for i in "${search[@]}"; do
|
|
r=$(reg query "${i}\\${1}" -v "$2" | sed -e 's/ *'"$2"' *REG_SZ *//;t;d')
|
|
if [ -n "$r" ]; then
|
|
echo "$r"
|
|
return 0
|
|
fi
|
|
done
|
|
return 1
|
|
}
|
|
|
|
VSCOMPONENT=Microsoft.VisualStudio.Component.VC.Tools.x86.x64
|
|
vsinstall=$(vswhere -latest -requires "$VSCOMPONENT" -property installationPath)
|
|
|
|
# Attempt to setup paths if vswhere returns something and VSPATH isn't set.
|
|
# Otherwise, assume that the env is setup.
|
|
if [[ -n "$vsinstall" && -z "$VSPATH" ]]; then
|
|
|
|
case "$target_arch" in
|
|
ia32) m=x86 ;;
|
|
x64) m="$target_arch" ;;
|
|
*)
|
|
echo "No support for target '$target_arch' with MSVC." 1>&2
|
|
exit 1
|
|
esac
|
|
|
|
export VSPATH=$(fixpath "$vsinstall")
|
|
export WINDOWSSDKDIR="${VSPATH}/SDK"
|
|
export VCINSTALLDIR="${VSPATH}/VC"
|
|
|
|
CRTREG="Microsoft\\Microsoft SDKs\\Windows\\v10.0"
|
|
UniversalCRTSdkDir=$(regquery "$CRTREG" InstallationFolder)
|
|
UniversalCRTSdkDir=$(fixpath "$UniversalCRTSdkDir")
|
|
UCRTVersion=$(regquery "$CRTREG" ProductVersion)
|
|
UCRTVersion=$(cd "${UniversalCRTSdkDir}/include"; ls -d "${UCRTVersion}"* | tail -1)
|
|
|
|
VCVER=$(cat "${VCINSTALLDIR}/Auxiliary/Build/Microsoft.VCToolsVersion.default.txt")
|
|
REDISTVER=$(cat "${VCINSTALLDIR}/Auxiliary/Build/Microsoft.VCRedistVersion.default.txt")
|
|
export WIN32_REDIST_DIR="${VCINSTALLDIR}/Redist/MSVC/${REDISTVER}/${m}/Microsoft.VC141.CRT"
|
|
export WIN_UCRT_REDIST_DIR="${UniversalCRTSdkDir}/Redist/ucrt/DLLs/${m}"
|
|
|
|
if [ "$m" == "x86" ]; then
|
|
PATH="${PATH}:${VCINSTALLDIR}/Tools/MSVC/${VCVER}/bin/Hostx64/x64"
|
|
PATH="${PATH}:${VCINSTALLDIR}/Tools/MSVC/${VCVER}/bin/Hostx64/x86"
|
|
fi
|
|
PATH="${PATH}:${VCINSTALLDIR}/Tools/MSVC/${VCVER}/bin/Host${m}/${m}"
|
|
PATH="${PATH}:${UniversalCRTSdkDir}/bin/${UCRTVersion}/${m}"
|
|
PATH="${PATH}:${WIN32_REDIST_DIR}"
|
|
export PATH
|
|
|
|
INCLUDE="${VCINSTALLDIR}/Tools/MSVC/${VCVER}/ATLMFC/include"
|
|
INCLUDE="${INCLUDE}:${VCINSTALLDIR}/Tools/MSVC/${VCVER}/include"
|
|
INCLUDE="${INCLUDE}:${UniversalCRTSdkDir}/include/${UCRTVersion}/ucrt"
|
|
INCLUDE="${INCLUDE}:${UniversalCRTSdkDir}/include/${UCRTVersion}/shared"
|
|
INCLUDE="${INCLUDE}:${UniversalCRTSdkDir}/include/${UCRTVersion}/um"
|
|
INCLUDE="${INCLUDE}:${UniversalCRTSdkDir}/include/${UCRTVersion}/winrt"
|
|
INCLUDE="${INCLUDE}:${UniversalCRTSdkDir}/include/${UCRTVersion}/cppwinrt"
|
|
export INCLUDE
|
|
|
|
LIB="${VCINSTALLDIR}/lib/${m}"
|
|
LIB="${VCINSTALLDIR}/Tools/MSVC/${VCVER}/lib/${m}"
|
|
LIB="${LIB}:${UniversalCRTSdkDir}/lib/${UCRTVersion}/ucrt/${m}"
|
|
LIB="${LIB}:${UniversalCRTSdkDir}/lib/${UCRTVersion}/um/${m}"
|
|
export LIB
|
|
|
|
export GYP_MSVS_OVERRIDE_PATH="${VSPATH}"
|
|
export GYP_MSVS_VERSION=$(vswhere -latest -requires "$VSCOMPONENT" -property catalog_productLineVersion)
|
|
else
|
|
echo Assuming env setup is already done.
|
|
echo VSPATH=$VSPATH
|
|
fi
|