diff options
Diffstat (limited to 'security/nss/coreconf/msvc.sh')
-rw-r--r-- | security/nss/coreconf/msvc.sh | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/security/nss/coreconf/msvc.sh b/security/nss/coreconf/msvc.sh new file mode 100644 index 000000000..a592279c9 --- /dev/null +++ b/security/nss/coreconf/msvc.sh @@ -0,0 +1,106 @@ +#!/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 |