Backed out 3 changesets (bug 1898476) for causing build bustages @ MozContainerSurfac...
[gecko.git] / security / nss / coreconf / msvc.sh
bloba592279c90f38c69634895ae28966cac8eaa3a9b
1 #!/bin/bash
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
7 exit 1
8 fi
10 if ! hash reg 2>/dev/null; then
11 echo "Can't find reg on the path, aborting" 1>&2
12 exit 1
15 # Turn a unix-y path into a windows one.
16 fixpath() {
17 if hash cygpath 2>/dev/null; then
18 cygpath --unix "$1"
19 else # haxx
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.
26 # e.g.,
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
31 # etc...
32 regquery() {
33 search=("HKLM\\SOFTWARE\\Wow6432Node" \
34 "HKCU\\SOFTWARE\\Wow6432Node" \
35 "HKLM\\SOFTWARE" \
36 "HKCU\\SOFTWARE")
37 for i in "${search[@]}"; do
38 r=$(reg query "${i}\\${1}" -v "$2" | sed -e 's/ *'"$2"' *REG_SZ *//;t;d')
39 if [ -n "$r" ]; then
40 echo "$r"
41 return 0
43 done
44 return 1
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
55 ia32) m=x86 ;;
56 x64) m="$target_arch" ;;
58 echo "No support for target '$target_arch' with MSVC." 1>&2
59 exit 1
60 esac
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}"
84 export PATH
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"
93 export INCLUDE
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}"
99 export LIB
101 export GYP_MSVS_OVERRIDE_PATH="${VSPATH}"
102 export GYP_MSVS_VERSION=$(vswhere -latest -requires "$VSCOMPONENT" -property catalog_productLineVersion)
103 else
104 echo Assuming env setup is already done.
105 echo VSPATH=$VSPATH