6909331: Add vsvars.sh to the jdk repository (handy cygwin way to get vcvars32.bat run)
authorohair
Mon, 20 Dec 2010 08:44:58 -0800
changeset 7361 f412b1d9549b
parent 7360 39aa1820e934
child 7366 d13ebf5050e1
child 7649 b63dcad65b80
child 7650 6a3a53d8eacc
6909331: Add vsvars.sh to the jdk repository (handy cygwin way to get vcvars32.bat run) Reviewed-by: robilad
make/scripts/vsvars.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/scripts/vsvars.sh	Mon Dec 20 08:44:58 2010 -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
+