--- /dev/null 2010-12-19 11:10:19.000000000 -0800 +++ new/make/scripts/vsvars.sh 2010-12-19 11:10:19.000000000 -0800 @@ -0,0 +1,546 @@ +#!/bin/sh + +# +# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# This file should be used to set the Visual Studio environment +# variables normally set by the vcvars32.bat or vcvars64.bat file or +# SetEnv.cmd for older SDKs. + +# Use cygpath? +isCygwin="`uname -s | grep CYGWIN`" +if [ "${isCygwin}" != "" ] ; then + cygpath="/usr/bin/cygpath" + cygpath_short="${cygpath} -m -s" + cygpath_windows="${cygpath} -w -s" + cygpath_path="${cygpath} -p" + pathsep=':' +else + cygpath="dosname" + cygpath_short="${cygpath} -s" + cygpath_windows="${cygpath} -s" + cygpath_path="echo" + pathsep=';' +fi + +######################################################################## +# Error functions +msg() # message +{ + echo "$1" 1>&2 +} +error() # message +{ + msg "ERROR: $1" + exit 1 +} +warning() # message +{ + msg "WARNING: $1" +} +envpath() # path +{ + if [ "${cygpath_short}" != "" -a -d "$1" ] ; then + ${cygpath_short} "$1" + else + echo "$1" + fi +} +######################################################################## + + +# Defaults settings +debug="false" +verbose="false" +shellStyle="sh" +parentCsh="` ps -p ${PPID} 2> /dev/null | grep csh `" +if [ "${parentCsh}" != "" ] ; then + shellStyle="csh" +fi + +set -e + +# Check environment first +if [ "${PROGRAMFILES}" != "" ] ; then + progfiles=`envpath "${PROGRAMFILES}"` +elif [ "${ProgramFiles}" != "" ] ; then + progfiles=`envpath "${ProgramFiles}"` +elif [ "${SYSTEMDRIVE}" != "" ] ; then + progfiles=`envpath "${SYSTEMDRIVE}/Program Files"` +elif [ "${SystemDrive}" != "" ] ; then + progfiles=`envpath "${SystemDrive}/Program Files"` +else + error "No PROGRAMFILES or SYSTEMDRIVE defined in environment" +fi + +# Arch data model +if [ "${PROCESSOR_IDENTIFIER}" != "" ] ; then + arch=`echo "${PROCESSOR_IDENTIFIER}" | cut -d' ' -f1` +elif [ "${MACHTYPE}" != "" ] ; then + if [ "`echo ${MACHTYPE} | grep 64`" != "" ] ; then + # Assume this is X64, not IA64 + arch="x64" + else + arch="x86" + fi +else + arch="`uname -m`" +fi +if [ "${arch}" = "X86" -o \ + "${arch}" = "386" -o "${arch}" = "i386" -o \ + "${arch}" = "486" -o "${arch}" = "i486" -o \ + "${arch}" = "586" -o "${arch}" = "i586" -o \ + "${arch}" = "686" -o "${arch}" = "i686" -o \ + "${arch}" = "86" ] ; then + arch="x86" +fi +if [ "${arch}" = "X64" -o \ + "${arch}" = "8664" -o "${arch}" = "i8664" -o \ + "${arch}" = "amd64" -o "${arch}" = "AMD64" -o \ + "${arch}" = "EM64T" -o "${arch}" = "emt64t" -o \ + "${arch}" = "intel64" -o "${arch}" = "Intel64" -o \ + "${arch}" = "64" ] ; then + arch="x64" + binarch64="/amd64" +fi +if [ "${arch}" = "IA64" ] ; then + arch="ia64" + binarch64="/ia64" +fi +if [ "${arch}" != "x86" -a "${arch}" != "x64" -a "${arch}" != "ia64" ] ; then + error "No PROCESSOR_IDENTIFIER or MACHTYPE environment variables and uname -m is not helping" +fi +if [ "${arch}" = "x86" ] ; then + arch_data_model=32 + progfiles32="${progfiles}" + progfiles64="${progfiles}" +else + arch_data_model=64 + progfiles32="${progfiles}" + if [ "${PROGRAMW6432}" != "" ] ; then + progfiles64=`envpath "${PROGRAMW6432}"` + else + progfiles64=`envpath "C:/Program Files"` + fi +fi + +# VS2010 (VC10) +if [ "${VS100COMNTOOLS}" = "" ] ; then + VS100COMNTOOLS="${progfiles32}/Microsoft Visual Studio 10.0/Common7/Tools/" + export VS100COMNTOOLS +fi +vc10Bin32Dir=`envpath "${VS100COMNTOOLS}"`/../../VC/Bin +vc10Bin64Dir="${vc10Bin32Dir}${binarch64}" +vc10vars32Bat="vcvars32.bat" +vc10vars64Bat="vcvars64.bat" + +# VS2008 (VC9) +if [ "${VS90COMNTOOLS}" = "" ] ; then + VS90COMNTOOLS="${progfiles32}/Microsoft Visual Studio 9.0/Common7/Tools/" + export VS90COMNTOOLS +fi +vc9Bin32Dir=`envpath "${VS90COMNTOOLS}"`/../../VC/Bin +vc9Bin64Dir="${vc9Bin32Dir}" +vc9vars32Bat="vcvars32.bat" +vc9vars64Bat="vcvars64.bat" + +# VS2005 (VC8) +if [ "${VS80COMNTOOLS}" = "" ] ; then + VS80COMNTOOLS="${progfiles32}/Microsoft Visual Studio 8.0/Common7/Tools/" + export VS80COMNTOOLS +fi +vc8Bin32Dir=`envpath "${VS80COMNTOOLS}"`/../../VC/Bin +vc8Bin64Dir="${progfiles64}/Microsoft Platform SDK" +vc8vars32Bat="vcvars32.bat" +vc8vars64Bat="SetEnv.cmd /X64" + +# VS2003 (VC7) +if [ "${VS71COMNTOOLS}" = "" ] ; then + VS71COMNTOOLS="${progfiles32}/Microsoft Visual Studio .NET 2003/Common7/Tools/" + export VS71COMNTOOLS +fi +vc7Bin32Dir=`envpath "${VS71COMNTOOLS}"`/../../VC7/Bin +vc7Bin64Dir="${progfiles64}/Microsoft Platform SDK" +vc7vars32Bat="vcvars32.bat" +vc7vars64Bat="SetEnv.cmd /X64" + +# Force user to select +vcSelection="" + +# Parse options +usage="Usage: $0 [-help] [-debug] [-v] [-c] [-s] [-p] [-v10] [-v9] [-v8] [-v7] [-32] [-64]" +while [ $# -gt 0 ] ; do + if [ "$1" = "-help" ] ; then + msg "${usage}" + msg " -help Print out this help message" + msg " -debug Print out extra env variables to help debug this script" + msg " -v Verbose output warns about missing directories" + msg " -c Print out csh style output" + msg " -s Print out sh style output" + msg " -p Print out properties style output" + msg " -v10 Use Visual Studio 10 VS2010" + msg " -v9 Use Visual Studio 9 VS2008" + msg " -v8 Use Visual Studio 8 VS2005" + msg " -v7 Use Visual Studio 7 VS2003" + msg " -32 Force 32bit" + msg " -64 Force 64bit" + exit 0 + elif [ "$1" = "-debug" ] ; then + debug="true" + shift + elif [ "$1" = "-v" ] ; then + verbose="true" + shift + elif [ "$1" = "-c" ] ; then + shellStyle="csh" + shift + elif [ "$1" = "-s" ] ; then + shellStyle="sh" + shift + elif [ "$1" = "-p" ] ; then + shellStyle="props" + shift + elif [ "$1" = "-v10" ] ; then + vcBin32Dir="${vc10Bin32Dir}" + vcBin64Dir="${vc10Bin64Dir}" + vcvars32Bat="${vc10vars32Bat}" + vcvars64Bat="${vc10vars64Bat}" + vcSelection="10" + shift + elif [ "$1" = "-v9" ] ; then + vcBin32Dir="${vc9Bin32Dir}" + vcBin64Dir="${vc9Bin64Dir}" + vcvars32Bat="${vc9vars32Bat}" + vcvars64Bat="${vc9vars64Bat}" + vcSelection="9" + shift + elif [ "$1" = "-v8" ] ; then + vcBin32Dir="${vc8Bin32Dir}" + vcBin64Dir="${vc8Bin64Dir}" + vcvars32Bat="${vc8vars32Bat}" + vcvars64Bat="${vc8vars64Bat}" + vcSelection="8" + shift + elif [ "$1" = "-v7" ] ; then + vcBin32Dir="${vc7Bin32Dir}" + vcBin64Dir="${vc7Bin64Dir}" + vcvars32Bat="${vc7vars32Bat}" + vcvars64Bat="${vc7vars64Bat}" + vcSelection="7" + shift + elif [ "$1" = "-32" ] ; then + arch_data_model=32 + shift + elif [ "$1" = "-64" ] ; then + arch_data_model=64 + shift + else + msg "${usage}" + error "Unknown option: $1" + fi +done + +# Need to pick +if [ "${vcSelection}" = "" ] ; then + msg "${usage}" + error "You must pick the version" +fi + +# Which vcvars bat file to run +if [ "${arch_data_model}" = "32" ] ; then + vcBinDir="${vcBin32Dir}" + vcvarsBat="${vcvars32Bat}" +fi +if [ "${arch_data_model}" = "64" ] ; then + vcBinDir="${vcBin64Dir}" + vcvarsBat="${vcvars64Bat}" +fi + +# Do not allow any error returns +set -e + +# Different systems have different awk's +if [ -f /usr/bin/nawk ] ; then + awk="nawk" +elif [ -f /usr/bin/gawk ] ; then + awk="gawk" +else + awk="awk" +fi + +if [ "${verbose}" = "true" ] ; then + echo "# Welcome to verbose mode" + set -x +fi + +if [ "${debug}" = "true" ] ; then + echo "# Welcome to debug mode" + set -x +fi + +# Temp file area +tmp="/tmp/vsvars.$$" +rm -f -r ${tmp} +mkdir -p ${tmp} + +# Check paths +checkPaths() # var path sep +{ + set -e + sep="$3" + checklist="${tmp}/checklist" + printf "%s\n" "$2" | \ + sed -e 's@\\@/@g' | \ + sed -e 's@//@/@g' | \ + ${awk} -F"${sep}" '{for(i=1;i<=NF;i++){printf "%s\n",$i;}}' \ + > ${checklist} + cat ${checklist} | while read orig; do + if [ "${orig}" != "" ] ; then + if [ ! -d "${orig}" ] ; then + warning "Directory in $1 does not exist: ${orig}" + fi + fi + done +} + +# Remove all duplicate entries +removeDeadDups() # string sep +{ + set -e + sep="$2" + pathlist="${tmp}/pathlist" + printf "%s\n" "$1" | \ + sed -e 's@\\@/@g' | \ + sed -e 's@//@/@g' | \ + ${awk} -F"${sep}" '{for(i=1;i<=NF;i++){printf "%s\n",$i;}}' \ + > ${pathlist} + upaths="${tmp}/upaths" + cat ${pathlist} | while read orig; do + p="${orig}" + if [ "${cygpath_short}" != "" ] ; then + if [ "${p}" != "" ] ; then + if [ -d "${p}" ] ; then + short=`${cygpath_short} "${p}"` + if [ "${short}" != "" -a -d "${short}" ] ; then + p=`${cygpath} "${short}"` + fi + echo "${p}" >> ${upaths} + fi + fi + fi + done + newpaths="" + for i in `cat ${upaths}` ; do + # For some reason, \r characters can get into this + i=`echo "${i}" | tr -d '\r' | sed -e 's@/$@@'` + if [ "${newpaths}" = "" ] ; then + newpaths="${i}" + else + newpaths="${newpaths}${sep}${i}" + fi + done + printf "%s\n" "${newpaths}" | \ + ${awk} -F"${sep}" \ + '{a[$1];printf "%s",$1;for(i=2;i<=NF;i++){if(!($i in a)){a[$i];printf "%s%s",FS,$i;}};printf "\n";}' +} + +# Create bat file to process Visual Studio vcvars*.bat files +createBat() # batfile bindir command +{ + bat="$1" + bindir="$2" + command="$3" + stdout="${bat}.stdout" + rm -f ${bat} ${stdout} + echo "Output from: ${command}" > ${stdout} + bdir=`envpath "${bindir}"` + cat > ${bat} << EOF +REM Pick the right vcvars bat file +REM Empty these out so we only get the additions we want +set INCLUDE= +set LIB= +set LIBPATH= +set MSVCDIR= +set MSSdk= +set Mstools= +set DevEnvDir= +set VCINSTALLDIR= +set VSINSTALLDIR= +set WindowsSdkDir= +REM Run the vcvars bat file, send all output to stderr +call `${cygpath_windows} ${bdir}`\\${command} > `${cygpath_windows} "${stdout}"` +REM Echo out env var settings +echo VS_VS71COMNTOOLS="%VS71COMNTOOLS%" +echo export VS_VS71COMNTOOLS +echo VS_VS80COMNTOOLS="%VS80COMNTOOLS%" +echo export VS_VS80COMNTOOLS +echo VS_VS90COMNTOOLS="%VS90COMNTOOLS%" +echo export VS_VS90COMNTOOLS +echo VS_VS100COMNTOOLS="%VS100COMNTOOLS%" +echo export VS_VS100COMNTOOLS +echo VS_VCINSTALLDIR="%VCINSTALLDIR%" +echo export VS_VCINSTALLDIR +echo VS_VSINSTALLDIR="%VSINSTALLDIR%" +echo export VS_VSINSTALLDIR +echo VS_DEVENVDIR="%DevEnvDir%" +echo export VS_DEVENVDIR +echo VS_MSVCDIR="%MSVCDIR%" +echo export VS_MSVCDIR +echo VS_MSSDK="%MSSdk%" +echo export VS_MSSDK +echo VS_MSTOOLS="%Mstools%" +echo export VS_MSTOOLS +echo VS_WINDOWSSDKDIR="%WindowsSdkDir%" +echo export VS_WINDOWSSDKDIR +echo VS_INCLUDE="%INCLUDE%" +echo export VS_INCLUDE +echo VS_LIB="%LIB%" +echo export VS_LIB +echo VS_LIBPATH="%LIBPATH%" +echo export VS_LIBPATH +echo VS_WPATH="%PATH%" +echo export VS_WPATH +EOF + chmod a+x ${bat} +} + +# Create env file +createEnv() # batfile envfile +{ + rm -f ${1}.stdout + cmd.exe /Q /C `${cygpath_short} $1` | \ + sed -e 's@\\@/@g' | \ + sed -e 's@//@/@g' > $2 + if [ -f "${1}.stdout" ] ; then + cat ${1}.stdout 1>&2 + fi + chmod a+x $2 +} + +printEnv() # name pname vsname val +{ + name="$1" + pname="$2" + vsname="$3" + val="$4" + if [ "${val}" != "" ] ; then + if [ "${shellStyle}" = "csh" ] ; then + if [ "${debug}" = "true" ] ; then + echo "setenv ${vsname} \"${val}\";" + fi + echo "setenv ${name} \"${val}\";" + elif [ "${shellStyle}" = "sh" ] ; then + if [ "${debug}" = "true" ] ; then + echo "${vsname}=\"${val}\";" + echo "export ${vsname};" + fi + echo "${name}=\"${val}\";" + echo "export ${name};" + elif [ "${shellStyle}" = "props" ] ; then + echo "vs.${pname}=${val}" + fi + fi +} + +############################################################################# + +# Get Visual Studio settings +if [ "${cygpath}" != "" ] ; then + + # Create bat file to run + batfile="${tmp}/vs-to-env.bat" + if [ ! -d "${vcBinDir}" ] ; then + error "Does not exist: ${vcBinDir}" + elif [ "${vcvarsBat}" = "" ] ; then + error "No vcvars script: ${vcvarsBat}" + else + createBat "${batfile}" "${vcBinDir}" "${vcvarsBat}" + fi + + # Run bat file to create environment variable settings + envfile="${tmp}/env.sh" + createEnv "${batfile}" "${envfile}" + + # Read in the VS_* settings + . ${envfile} + + # Derive unix style path, save old, and define new (remove dups) + VS_UPATH=`${cygpath_path} "${VS_WPATH}"` + export VS_UPATH + VS_OPATH=`printf "%s" "${PATH}" | sed -e 's@\\\\@/@g'` + export VS_OPATH + VS_PATH=`removeDeadDups "${VS_UPATH}${pathsep}${VS_OPATH}" "${pathsep}"` + export VS_PATH + +fi + +# Adjustments due to differences in vcvars*bat files +if [ "${VS_MSVCDIR}" = "" ] ; then + VS_MSVCDIR="${VS_VCINSTALLDIR}" +fi +if [ "${VS_DEVENVDIR}" = "" ] ; then + VS_DEVENVDIR="${VS_VSINSTALLDIR}" +fi + +# Print env settings +# env vs.prop vs env value +# ------- ------- ---------- ----- +printEnv INCLUDE include VS_INCLUDE "${VS_INCLUDE}" +printEnv LIB lib VS_LIB "${VS_LIB}" +printEnv LIBPATH libpath VS_LIBPATH "${VS_LIBPATH}" +if [ "${debug}" = "true" ] ; then + printEnv UPATH upath VS_UPATH "${VS_UPATH}" + printEnv WPATH wpath VS_WPATH "${VS_WPATH}" + printEnv OPATH opath VS_OPATH "${VS_OPATH}" +fi +printEnv PATH path VS_PATH "${VS_PATH}" +printEnv VCINSTALLDIR vcinstalldir VS_VCINSTALLDIR "${VS_VCINSTALLDIR}" +printEnv VSINSTALLDIR vsinstalldir VS_VSINSTALLDIR "${VS_VSINSTALLDIR}" +printEnv MSVCDIR msvcdir VS_MSVCDIR "${VS_MSVCDIR}" +printEnv MSSDK mssdk VS_MSSDK "${VS_MSSDK}" +printEnv MSTOOLS mstools VS_MSTOOLS "${VS_MSTOOLS}" +printEnv DEVENVDIR devenvdir VS_DEVENVDIR "${VS_DEVENVDIR}" +printEnv WINDOWSSDKDIR windowssdkdir VS_WINDOWSSDKDIR "${VS_WINDOWSSDKDIR}" +if [ "${vcSelection}" = "10" ] ; then + printEnv VS100COMNTOOLS vs100comntools VS_VS100COMNTOOLS "${VS_VS100COMNTOOLS}" +elif [ "${vcSelection}" = "9" ] ; then + printEnv VS90COMNTOOLS vs90comntools VS_VS90COMNTOOLS "${VS_VS90COMNTOOLS}" +elif [ "${vcSelection}" = "7" ] ; then + printEnv VS71COMNTOOLS vs71comntools VS_VS71COMNTOOLS "${VS_VS71COMNTOOLS}" +elif [ "${vcSelection}" = "8" ] ; then + printEnv VS80COMNTOOLS vs80comntools VS_VS80COMNTOOLS "${VS_VS80COMNTOOLS}" +fi + +# Check final settings +if [ "${verbose}" = "true" ] ; then + checkPaths "Windows PATH" "${VS_WPATH}" ";" + checkPaths LIB "${VS_LIB}" ";" + checkPaths INCLUDE "${VS_INCLUDE}" ";" + checkPaths PATH "${VS_PATH}" "${pathsep}" +fi + +# Remove all temp files +rm -f -r ${tmp} + +exit 0 +