8202557: OpenJDK fails to start in Windows 7 and 8.1 after upgrading compiler to VC 2017 jdk8u202-b02

Mon, 29 Oct 2018 14:43:07 -0700

author
kevinw
date
Mon, 29 Oct 2018 14:43:07 -0700
changeset 2333
1c0d5a15ab4c
parent 2332
21d41d977059
child 2334
cfa6347c891b

8202557: OpenJDK fails to start in Windows 7 and 8.1 after upgrading compiler to VC 2017
Reviewed-by: tbell, erikj

common/autoconf/basics.m4 file | annotate | diff | comparison | revisions
common/autoconf/generated-configure.sh file | annotate | diff | comparison | revisions
common/autoconf/spec.gmk.in file | annotate | diff | comparison | revisions
common/autoconf/toolchain_windows.m4 file | annotate | diff | comparison | revisions
     1.1 --- a/common/autoconf/basics.m4	Wed Oct 17 13:00:32 2018 +0100
     1.2 +++ b/common/autoconf/basics.m4	Mon Oct 29 14:43:07 2018 -0700
     1.3 @@ -500,6 +500,8 @@
     1.4        BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCR_DLL])
     1.5        # Corresponds to --with-msvcp-dll
     1.6        BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCP_DLL])
     1.7 +      # Corresponds to --with-ucrt-dll-dir
     1.8 +      BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_UCRT_DLL_DIR])
     1.9      fi
    1.10  
    1.11      AC_MSG_CHECKING([for devkit])
     2.1 --- a/common/autoconf/generated-configure.sh	Wed Oct 17 13:00:32 2018 +0100
     2.2 +++ b/common/autoconf/generated-configure.sh	Mon Oct 29 14:43:07 2018 -0700
     2.3 @@ -640,6 +640,7 @@
     2.4  ENABLE_INTREE_EC
     2.5  SALIB_NAME
     2.6  HOTSPOT_MAKE_ARGS
     2.7 +UCRT_DLL_DIR
     2.8  MSVCP_DLL
     2.9  MSVCR_DLL
    2.10  LIBCXX
    2.11 @@ -1095,6 +1096,7 @@
    2.12  with_stdc__lib
    2.13  with_msvcr_dll
    2.14  with_msvcp_dll
    2.15 +with_ucrt_dll_dir
    2.16  with_dxsdk
    2.17  with_dxsdk_lib
    2.18  with_dxsdk_include
    2.19 @@ -1956,6 +1958,8 @@
    2.20                            (Windows only) [probed]
    2.21    --with-msvcp-dll        path to microsoft C++ runtime dll (msvcp*.dll)
    2.22                            (Windows only) [probed]
    2.23 +  --with-ucrt-dll-dir     path to Microsoft Windows Kit UCRT DLL dir (Windows
    2.24 +                          only) [probed]
    2.25    --with-dxsdk            Deprecated. Option is kept for backwards
    2.26                            compatibility and is ignored
    2.27    --with-dxsdk-lib        Deprecated. Option is kept for backwards
    2.28 @@ -4290,6 +4294,7 @@
    2.29  VS_MSVCR_2017=vcruntime140.dll
    2.30  VS_MSVCP_2017=msvcp140.dll
    2.31  VS_ENVVAR_2017="VS150COMNTOOLS"
    2.32 +VS_USE_UCRT_2017="true"
    2.33  VS_VS_INSTALLDIR_2017="Microsoft Visual Studio/2017"
    2.34  VS_EDITIONS_2017="Community Professional Enterprise"
    2.35  VS_SDK_INSTALLDIR_2017=
    2.36 @@ -4337,7 +4342,7 @@
    2.37  #CUSTOM_AUTOCONF_INCLUDE
    2.38  
    2.39  # Do not change or remove the following line, it is needed for consistency checks:
    2.40 -DATE_WHEN_GENERATED=1539613812
    2.41 +DATE_WHEN_GENERATED=1540846365
    2.42  
    2.43  ###############################################################################
    2.44  #
    2.45 @@ -14911,6 +14916,12 @@
    2.46      eval DEVKIT_MSVCP_DLL="\${DEVKIT_MSVCP_DLL_${OPENJDK_TARGET_CPU}}"
    2.47    fi
    2.48  
    2.49 +      # Corresponds to --with-ucrt-dll-dir
    2.50 +
    2.51 +  if test "x$DEVKIT_UCRT_DLL_DIR" = x; then
    2.52 +    eval DEVKIT_UCRT_DLL_DIR="\${DEVKIT_UCRT_DLL_DIR_${OPENJDK_TARGET_CPU}}"
    2.53 +  fi
    2.54 +
    2.55      fi
    2.56  
    2.57      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for devkit" >&5
    2.58 @@ -25408,6 +25419,7 @@
    2.59      eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}"
    2.60      eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}"
    2.61      eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}"
    2.62 +    eval USE_UCRT="\${VS_USE_UCRT_${VS_VERSION}}"
    2.63      eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
    2.64      VS_PATH="$TOOLCHAIN_PATH:$PATH"
    2.65  
    2.66 @@ -26142,6 +26154,7 @@
    2.67        eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}"
    2.68        eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}"
    2.69        eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}"
    2.70 +      eval USE_UCRT="\${VS_USE_UCRT_${VS_VERSION}}"
    2.71        # The rest of the variables are already evaled while probing
    2.72        { $as_echo "$as_me:${as_lineno-$LINENO}: Found $VS_DESCRIPTION" >&5
    2.73  $as_echo "$as_me: Found $VS_DESCRIPTION" >&6;}
    2.74 @@ -26550,8 +26563,11 @@
    2.75        VS_INCLUDE=`$ECHO "$VS_INCLUDE" | $SED 's/\\\\* *$//'`
    2.76        VS_LIB=`$ECHO "$VS_LIB" | $SED 's/\\\\* *$//'`
    2.77        VCINSTALLDIR=`$ECHO "$VCINSTALLDIR" | $SED 's/\\\\* *$//'`
    2.78 -      WindowsSDKDir=`$ECHO "$WindowsSDKDir" | $SED 's/\\\\* *$//'`
    2.79 +      WindowsSdkDir=`$ECHO "$WindowsSdkDir" | $SED 's/\\\\* *$//'`
    2.80        WINDOWSSDKDIR=`$ECHO "$WINDOWSSDKDIR" | $SED 's/\\\\* *$//'`
    2.81 +      if test -z "$WINDOWSSDKDIR"; then
    2.82 +        WINDOWSSDKDIR="$WindowsSdkDir"
    2.83 +      fi
    2.84        # Remove any paths containing # (typically F#) as that messes up make. This
    2.85        # is needed if visual studio was installed with F# support.
    2.86        VS_PATH=`$ECHO "$VS_PATH" | $SED 's/[^:#]*#[^:]*://g'`
    2.87 @@ -48765,13 +48781,125 @@
    2.88      if test "x$VCINSTALLDIR" != x; then
    2.89        CYGWIN_VC_INSTALL_DIR="$VCINSTALLDIR"
    2.90  
    2.91 -  windows_path="$CYGWIN_VC_INSTALL_DIR"
    2.92 -  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
    2.93 -    unix_path=`$CYGPATH -u "$windows_path"`
    2.94 -    CYGWIN_VC_INSTALL_DIR="$unix_path"
    2.95 -  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
    2.96 -    unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
    2.97 -    CYGWIN_VC_INSTALL_DIR="$unix_path"
    2.98 +  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
    2.99 +
   2.100 +  # Input might be given as Windows format, start by converting to
   2.101 +  # unix format.
   2.102 +  path="$CYGWIN_VC_INSTALL_DIR"
   2.103 +  new_path=`$CYGPATH -u "$path"`
   2.104 +
   2.105 +  # Cygwin tries to hide some aspects of the Windows file system, such that binaries are
   2.106 +  # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
   2.107 +  # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
   2.108 +  # "foo.exe" is OK but "foo" is an error.
   2.109 +  #
   2.110 +  # This test is therefore slightly more accurate than "test -f" to check for file precense.
   2.111 +  # It is also a way to make sure we got the proper file name for the real test later on.
   2.112 +  test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
   2.113 +  if test "x$test_shortpath" = x; then
   2.114 +    { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CYGWIN_VC_INSTALL_DIR, which resolves as \"$path\", is invalid." >&5
   2.115 +$as_echo "$as_me: The path of CYGWIN_VC_INSTALL_DIR, which resolves as \"$path\", is invalid." >&6;}
   2.116 +    as_fn_error $? "Cannot locate the the path of CYGWIN_VC_INSTALL_DIR" "$LINENO" 5
   2.117 +  fi
   2.118 +
   2.119 +  # Call helper function which possibly converts this using DOS-style short mode.
   2.120 +  # If so, the updated path is stored in $new_path.
   2.121 +
   2.122 +  input_path="$new_path"
   2.123 +  # Check if we need to convert this using DOS-style short mode. If the path
   2.124 +  # contains just simple characters, use it. Otherwise (spaces, weird characters),
   2.125 +  # take no chances and rewrite it.
   2.126 +  # Note: m4 eats our [], so we need to use [ and ] instead.
   2.127 +  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]`
   2.128 +  if test "x$has_forbidden_chars" != x; then
   2.129 +    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
   2.130 +    shortmode_path=`$CYGPATH -s -m -a "$input_path"`
   2.131 +    path_after_shortmode=`$CYGPATH -u "$shortmode_path"`
   2.132 +    if test "x$path_after_shortmode" != "x$input_to_shortpath"; then
   2.133 +      # Going to short mode and back again did indeed matter. Since short mode is
   2.134 +      # case insensitive, let's make it lowercase to improve readability.
   2.135 +      shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
   2.136 +      # Now convert it back to Unix-style (cygpath)
   2.137 +      input_path=`$CYGPATH -u "$shortmode_path"`
   2.138 +      new_path="$input_path"
   2.139 +    fi
   2.140 +  fi
   2.141 +
   2.142 +  test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/`
   2.143 +  if test "x$test_cygdrive_prefix" = x; then
   2.144 +    # As a simple fix, exclude /usr/bin since it's not a real path.
   2.145 +    if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then
   2.146 +      # The path is in a Cygwin special directory (e.g. /home). We need this converted to
   2.147 +      # a path prefixed by /cygdrive for fixpath to work.
   2.148 +      new_path="$CYGWIN_ROOT_PATH$input_path"
   2.149 +    fi
   2.150 +  fi
   2.151 +
   2.152 +
   2.153 +  if test "x$path" != "x$new_path"; then
   2.154 +    CYGWIN_VC_INSTALL_DIR="$new_path"
   2.155 +    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CYGWIN_VC_INSTALL_DIR to \"$new_path\"" >&5
   2.156 +$as_echo "$as_me: Rewriting CYGWIN_VC_INSTALL_DIR to \"$new_path\"" >&6;}
   2.157 +  fi
   2.158 +
   2.159 +  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
   2.160 +
   2.161 +  path="$CYGWIN_VC_INSTALL_DIR"
   2.162 +  has_colon=`$ECHO $path | $GREP ^.:`
   2.163 +  new_path="$path"
   2.164 +  if test "x$has_colon" = x; then
   2.165 +    # Not in mixed or Windows style, start by that.
   2.166 +    new_path=`cmd //c echo $path`
   2.167 +  fi
   2.168 +
   2.169 +
   2.170 +  input_path="$new_path"
   2.171 +  # Check if we need to convert this using DOS-style short mode. If the path
   2.172 +  # contains just simple characters, use it. Otherwise (spaces, weird characters),
   2.173 +  # take no chances and rewrite it.
   2.174 +  # Note: m4 eats our [], so we need to use [ and ] instead.
   2.175 +  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]`
   2.176 +  if test "x$has_forbidden_chars" != x; then
   2.177 +    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
   2.178 +    new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
   2.179 +  fi
   2.180 +
   2.181 +
   2.182 +  windows_path="$new_path"
   2.183 +  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
   2.184 +    unix_path=`$CYGPATH -u "$windows_path"`
   2.185 +    new_path="$unix_path"
   2.186 +  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
   2.187 +    unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
   2.188 +    new_path="$unix_path"
   2.189 +  fi
   2.190 +
   2.191 +  if test "x$path" != "x$new_path"; then
   2.192 +    CYGWIN_VC_INSTALL_DIR="$new_path"
   2.193 +    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CYGWIN_VC_INSTALL_DIR to \"$new_path\"" >&5
   2.194 +$as_echo "$as_me: Rewriting CYGWIN_VC_INSTALL_DIR to \"$new_path\"" >&6;}
   2.195 +  fi
   2.196 +
   2.197 +  # Save the first 10 bytes of this path to the storage, so fixpath can work.
   2.198 +  all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}")
   2.199 +
   2.200 +  else
   2.201 +    # We're on a posix platform. Hooray! :)
   2.202 +    path="$CYGWIN_VC_INSTALL_DIR"
   2.203 +    has_space=`$ECHO "$path" | $GREP " "`
   2.204 +    if test "x$has_space" != x; then
   2.205 +      { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CYGWIN_VC_INSTALL_DIR, which resolves as \"$path\", is invalid." >&5
   2.206 +$as_echo "$as_me: The path of CYGWIN_VC_INSTALL_DIR, which resolves as \"$path\", is invalid." >&6;}
   2.207 +      as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5
   2.208 +    fi
   2.209 +
   2.210 +    # Use eval to expand a potential ~
   2.211 +    eval path="$path"
   2.212 +    if test ! -f "$path" && test ! -d "$path"; then
   2.213 +      as_fn_error $? "The path of CYGWIN_VC_INSTALL_DIR, which resolves as \"$path\", is not found." "$LINENO" 5
   2.214 +    fi
   2.215 +
   2.216 +    CYGWIN_VC_INSTALL_DIR="`cd "$path"; $THEPWDCMD -L`"
   2.217    fi
   2.218  
   2.219        if test "$VS_VERSION" -lt 2017; then
   2.220 @@ -50056,13 +50184,125 @@
   2.221      if test "x$VCINSTALLDIR" != x; then
   2.222        CYGWIN_VC_INSTALL_DIR="$VCINSTALLDIR"
   2.223  
   2.224 -  windows_path="$CYGWIN_VC_INSTALL_DIR"
   2.225 -  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
   2.226 -    unix_path=`$CYGPATH -u "$windows_path"`
   2.227 -    CYGWIN_VC_INSTALL_DIR="$unix_path"
   2.228 -  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
   2.229 -    unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
   2.230 -    CYGWIN_VC_INSTALL_DIR="$unix_path"
   2.231 +  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
   2.232 +
   2.233 +  # Input might be given as Windows format, start by converting to
   2.234 +  # unix format.
   2.235 +  path="$CYGWIN_VC_INSTALL_DIR"
   2.236 +  new_path=`$CYGPATH -u "$path"`
   2.237 +
   2.238 +  # Cygwin tries to hide some aspects of the Windows file system, such that binaries are
   2.239 +  # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
   2.240 +  # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
   2.241 +  # "foo.exe" is OK but "foo" is an error.
   2.242 +  #
   2.243 +  # This test is therefore slightly more accurate than "test -f" to check for file precense.
   2.244 +  # It is also a way to make sure we got the proper file name for the real test later on.
   2.245 +  test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
   2.246 +  if test "x$test_shortpath" = x; then
   2.247 +    { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CYGWIN_VC_INSTALL_DIR, which resolves as \"$path\", is invalid." >&5
   2.248 +$as_echo "$as_me: The path of CYGWIN_VC_INSTALL_DIR, which resolves as \"$path\", is invalid." >&6;}
   2.249 +    as_fn_error $? "Cannot locate the the path of CYGWIN_VC_INSTALL_DIR" "$LINENO" 5
   2.250 +  fi
   2.251 +
   2.252 +  # Call helper function which possibly converts this using DOS-style short mode.
   2.253 +  # If so, the updated path is stored in $new_path.
   2.254 +
   2.255 +  input_path="$new_path"
   2.256 +  # Check if we need to convert this using DOS-style short mode. If the path
   2.257 +  # contains just simple characters, use it. Otherwise (spaces, weird characters),
   2.258 +  # take no chances and rewrite it.
   2.259 +  # Note: m4 eats our [], so we need to use [ and ] instead.
   2.260 +  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]`
   2.261 +  if test "x$has_forbidden_chars" != x; then
   2.262 +    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
   2.263 +    shortmode_path=`$CYGPATH -s -m -a "$input_path"`
   2.264 +    path_after_shortmode=`$CYGPATH -u "$shortmode_path"`
   2.265 +    if test "x$path_after_shortmode" != "x$input_to_shortpath"; then
   2.266 +      # Going to short mode and back again did indeed matter. Since short mode is
   2.267 +      # case insensitive, let's make it lowercase to improve readability.
   2.268 +      shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
   2.269 +      # Now convert it back to Unix-style (cygpath)
   2.270 +      input_path=`$CYGPATH -u "$shortmode_path"`
   2.271 +      new_path="$input_path"
   2.272 +    fi
   2.273 +  fi
   2.274 +
   2.275 +  test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/`
   2.276 +  if test "x$test_cygdrive_prefix" = x; then
   2.277 +    # As a simple fix, exclude /usr/bin since it's not a real path.
   2.278 +    if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then
   2.279 +      # The path is in a Cygwin special directory (e.g. /home). We need this converted to
   2.280 +      # a path prefixed by /cygdrive for fixpath to work.
   2.281 +      new_path="$CYGWIN_ROOT_PATH$input_path"
   2.282 +    fi
   2.283 +  fi
   2.284 +
   2.285 +
   2.286 +  if test "x$path" != "x$new_path"; then
   2.287 +    CYGWIN_VC_INSTALL_DIR="$new_path"
   2.288 +    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CYGWIN_VC_INSTALL_DIR to \"$new_path\"" >&5
   2.289 +$as_echo "$as_me: Rewriting CYGWIN_VC_INSTALL_DIR to \"$new_path\"" >&6;}
   2.290 +  fi
   2.291 +
   2.292 +  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
   2.293 +
   2.294 +  path="$CYGWIN_VC_INSTALL_DIR"
   2.295 +  has_colon=`$ECHO $path | $GREP ^.:`
   2.296 +  new_path="$path"
   2.297 +  if test "x$has_colon" = x; then
   2.298 +    # Not in mixed or Windows style, start by that.
   2.299 +    new_path=`cmd //c echo $path`
   2.300 +  fi
   2.301 +
   2.302 +
   2.303 +  input_path="$new_path"
   2.304 +  # Check if we need to convert this using DOS-style short mode. If the path
   2.305 +  # contains just simple characters, use it. Otherwise (spaces, weird characters),
   2.306 +  # take no chances and rewrite it.
   2.307 +  # Note: m4 eats our [], so we need to use [ and ] instead.
   2.308 +  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]`
   2.309 +  if test "x$has_forbidden_chars" != x; then
   2.310 +    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
   2.311 +    new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
   2.312 +  fi
   2.313 +
   2.314 +
   2.315 +  windows_path="$new_path"
   2.316 +  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
   2.317 +    unix_path=`$CYGPATH -u "$windows_path"`
   2.318 +    new_path="$unix_path"
   2.319 +  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
   2.320 +    unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
   2.321 +    new_path="$unix_path"
   2.322 +  fi
   2.323 +
   2.324 +  if test "x$path" != "x$new_path"; then
   2.325 +    CYGWIN_VC_INSTALL_DIR="$new_path"
   2.326 +    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CYGWIN_VC_INSTALL_DIR to \"$new_path\"" >&5
   2.327 +$as_echo "$as_me: Rewriting CYGWIN_VC_INSTALL_DIR to \"$new_path\"" >&6;}
   2.328 +  fi
   2.329 +
   2.330 +  # Save the first 10 bytes of this path to the storage, so fixpath can work.
   2.331 +  all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}")
   2.332 +
   2.333 +  else
   2.334 +    # We're on a posix platform. Hooray! :)
   2.335 +    path="$CYGWIN_VC_INSTALL_DIR"
   2.336 +    has_space=`$ECHO "$path" | $GREP " "`
   2.337 +    if test "x$has_space" != x; then
   2.338 +      { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CYGWIN_VC_INSTALL_DIR, which resolves as \"$path\", is invalid." >&5
   2.339 +$as_echo "$as_me: The path of CYGWIN_VC_INSTALL_DIR, which resolves as \"$path\", is invalid." >&6;}
   2.340 +      as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5
   2.341 +    fi
   2.342 +
   2.343 +    # Use eval to expand a potential ~
   2.344 +    eval path="$path"
   2.345 +    if test ! -f "$path" && test ! -d "$path"; then
   2.346 +      as_fn_error $? "The path of CYGWIN_VC_INSTALL_DIR, which resolves as \"$path\", is not found." "$LINENO" 5
   2.347 +    fi
   2.348 +
   2.349 +    CYGWIN_VC_INSTALL_DIR="`cd "$path"; $THEPWDCMD -L`"
   2.350    fi
   2.351  
   2.352        if test "$VS_VERSION" -lt 2017; then
   2.353 @@ -50991,6 +51231,295 @@
   2.354    fi
   2.355  
   2.356  
   2.357 +# Check whether --with-ucrt-dll-dir was given.
   2.358 +if test "${with_ucrt_dll_dir+set}" = set; then :
   2.359 +  withval=$with_ucrt_dll_dir;
   2.360 +fi
   2.361 +
   2.362 +
   2.363 +  if test "x$USE_UCRT" = "xtrue"; then
   2.364 +    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for UCRT DLL dir" >&5
   2.365 +$as_echo_n "checking for UCRT DLL dir... " >&6; }
   2.366 +    if test "x$with_ucrt_dll_dir" != x; then
   2.367 +      if test -z "$(ls -d "$with_ucrt_dll_dir/*.dll" 2> /dev/null)"; then
   2.368 +        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
   2.369 +$as_echo "no" >&6; }
   2.370 +        as_fn_error $? "Could not find any dlls in $with_ucrt_dll_dir" "$LINENO" 5
   2.371 +      else
   2.372 +        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_ucrt_dll_dir" >&5
   2.373 +$as_echo "$with_ucrt_dll_dir" >&6; }
   2.374 +        UCRT_DLL_DIR="$with_ucrt_dll_dir"
   2.375 +
   2.376 +  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
   2.377 +
   2.378 +  # Input might be given as Windows format, start by converting to
   2.379 +  # unix format.
   2.380 +  path="$UCRT_DLL_DIR"
   2.381 +  new_path=`$CYGPATH -u "$path"`
   2.382 +
   2.383 +  # Cygwin tries to hide some aspects of the Windows file system, such that binaries are
   2.384 +  # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
   2.385 +  # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
   2.386 +  # "foo.exe" is OK but "foo" is an error.
   2.387 +  #
   2.388 +  # This test is therefore slightly more accurate than "test -f" to check for file precense.
   2.389 +  # It is also a way to make sure we got the proper file name for the real test later on.
   2.390 +  test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
   2.391 +  if test "x$test_shortpath" = x; then
   2.392 +    { $as_echo "$as_me:${as_lineno-$LINENO}: The path of UCRT_DLL_DIR, which resolves as \"$path\", is invalid." >&5
   2.393 +$as_echo "$as_me: The path of UCRT_DLL_DIR, which resolves as \"$path\", is invalid." >&6;}
   2.394 +    as_fn_error $? "Cannot locate the the path of UCRT_DLL_DIR" "$LINENO" 5
   2.395 +  fi
   2.396 +
   2.397 +  # Call helper function which possibly converts this using DOS-style short mode.
   2.398 +  # If so, the updated path is stored in $new_path.
   2.399 +
   2.400 +  input_path="$new_path"
   2.401 +  # Check if we need to convert this using DOS-style short mode. If the path
   2.402 +  # contains just simple characters, use it. Otherwise (spaces, weird characters),
   2.403 +  # take no chances and rewrite it.
   2.404 +  # Note: m4 eats our [], so we need to use [ and ] instead.
   2.405 +  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]`
   2.406 +  if test "x$has_forbidden_chars" != x; then
   2.407 +    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
   2.408 +    shortmode_path=`$CYGPATH -s -m -a "$input_path"`
   2.409 +    path_after_shortmode=`$CYGPATH -u "$shortmode_path"`
   2.410 +    if test "x$path_after_shortmode" != "x$input_to_shortpath"; then
   2.411 +      # Going to short mode and back again did indeed matter. Since short mode is
   2.412 +      # case insensitive, let's make it lowercase to improve readability.
   2.413 +      shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
   2.414 +      # Now convert it back to Unix-style (cygpath)
   2.415 +      input_path=`$CYGPATH -u "$shortmode_path"`
   2.416 +      new_path="$input_path"
   2.417 +    fi
   2.418 +  fi
   2.419 +
   2.420 +  test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/`
   2.421 +  if test "x$test_cygdrive_prefix" = x; then
   2.422 +    # As a simple fix, exclude /usr/bin since it's not a real path.
   2.423 +    if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then
   2.424 +      # The path is in a Cygwin special directory (e.g. /home). We need this converted to
   2.425 +      # a path prefixed by /cygdrive for fixpath to work.
   2.426 +      new_path="$CYGWIN_ROOT_PATH$input_path"
   2.427 +    fi
   2.428 +  fi
   2.429 +
   2.430 +
   2.431 +  if test "x$path" != "x$new_path"; then
   2.432 +    UCRT_DLL_DIR="$new_path"
   2.433 +    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting UCRT_DLL_DIR to \"$new_path\"" >&5
   2.434 +$as_echo "$as_me: Rewriting UCRT_DLL_DIR to \"$new_path\"" >&6;}
   2.435 +  fi
   2.436 +
   2.437 +  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
   2.438 +
   2.439 +  path="$UCRT_DLL_DIR"
   2.440 +  has_colon=`$ECHO $path | $GREP ^.:`
   2.441 +  new_path="$path"
   2.442 +  if test "x$has_colon" = x; then
   2.443 +    # Not in mixed or Windows style, start by that.
   2.444 +    new_path=`cmd //c echo $path`
   2.445 +  fi
   2.446 +
   2.447 +
   2.448 +  input_path="$new_path"
   2.449 +  # Check if we need to convert this using DOS-style short mode. If the path
   2.450 +  # contains just simple characters, use it. Otherwise (spaces, weird characters),
   2.451 +  # take no chances and rewrite it.
   2.452 +  # Note: m4 eats our [], so we need to use [ and ] instead.
   2.453 +  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]`
   2.454 +  if test "x$has_forbidden_chars" != x; then
   2.455 +    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
   2.456 +    new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
   2.457 +  fi
   2.458 +
   2.459 +
   2.460 +  windows_path="$new_path"
   2.461 +  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
   2.462 +    unix_path=`$CYGPATH -u "$windows_path"`
   2.463 +    new_path="$unix_path"
   2.464 +  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
   2.465 +    unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
   2.466 +    new_path="$unix_path"
   2.467 +  fi
   2.468 +
   2.469 +  if test "x$path" != "x$new_path"; then
   2.470 +    UCRT_DLL_DIR="$new_path"
   2.471 +    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting UCRT_DLL_DIR to \"$new_path\"" >&5
   2.472 +$as_echo "$as_me: Rewriting UCRT_DLL_DIR to \"$new_path\"" >&6;}
   2.473 +  fi
   2.474 +
   2.475 +  # Save the first 10 bytes of this path to the storage, so fixpath can work.
   2.476 +  all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}")
   2.477 +
   2.478 +  else
   2.479 +    # We're on a posix platform. Hooray! :)
   2.480 +    path="$UCRT_DLL_DIR"
   2.481 +    has_space=`$ECHO "$path" | $GREP " "`
   2.482 +    if test "x$has_space" != x; then
   2.483 +      { $as_echo "$as_me:${as_lineno-$LINENO}: The path of UCRT_DLL_DIR, which resolves as \"$path\", is invalid." >&5
   2.484 +$as_echo "$as_me: The path of UCRT_DLL_DIR, which resolves as \"$path\", is invalid." >&6;}
   2.485 +      as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5
   2.486 +    fi
   2.487 +
   2.488 +    # Use eval to expand a potential ~
   2.489 +    eval path="$path"
   2.490 +    if test ! -f "$path" && test ! -d "$path"; then
   2.491 +      as_fn_error $? "The path of UCRT_DLL_DIR, which resolves as \"$path\", is not found." "$LINENO" 5
   2.492 +    fi
   2.493 +
   2.494 +    UCRT_DLL_DIR="`cd "$path"; $THEPWDCMD -L`"
   2.495 +  fi
   2.496 +
   2.497 +      fi
   2.498 +    elif test "x$DEVKIT_UCRT_DLL_DIR" != "x"; then
   2.499 +      UCRT_DLL_DIR="$DEVKIT_UCRT_DLL_DIR"
   2.500 +      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UCRT_DLL_DIR" >&5
   2.501 +$as_echo "$UCRT_DLL_DIR" >&6; }
   2.502 +    else
   2.503 +      CYGWIN_WINDOWSSDKDIR="${WINDOWSSDKDIR}"
   2.504 +
   2.505 +  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
   2.506 +
   2.507 +  # Input might be given as Windows format, start by converting to
   2.508 +  # unix format.
   2.509 +  path="$CYGWIN_WINDOWSSDKDIR"
   2.510 +  new_path=`$CYGPATH -u "$path"`
   2.511 +
   2.512 +  # Cygwin tries to hide some aspects of the Windows file system, such that binaries are
   2.513 +  # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
   2.514 +  # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
   2.515 +  # "foo.exe" is OK but "foo" is an error.
   2.516 +  #
   2.517 +  # This test is therefore slightly more accurate than "test -f" to check for file precense.
   2.518 +  # It is also a way to make sure we got the proper file name for the real test later on.
   2.519 +  test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
   2.520 +  if test "x$test_shortpath" = x; then
   2.521 +    { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CYGWIN_WINDOWSSDKDIR, which resolves as \"$path\", is invalid." >&5
   2.522 +$as_echo "$as_me: The path of CYGWIN_WINDOWSSDKDIR, which resolves as \"$path\", is invalid." >&6;}
   2.523 +    as_fn_error $? "Cannot locate the the path of CYGWIN_WINDOWSSDKDIR" "$LINENO" 5
   2.524 +  fi
   2.525 +
   2.526 +  # Call helper function which possibly converts this using DOS-style short mode.
   2.527 +  # If so, the updated path is stored in $new_path.
   2.528 +
   2.529 +  input_path="$new_path"
   2.530 +  # Check if we need to convert this using DOS-style short mode. If the path
   2.531 +  # contains just simple characters, use it. Otherwise (spaces, weird characters),
   2.532 +  # take no chances and rewrite it.
   2.533 +  # Note: m4 eats our [], so we need to use [ and ] instead.
   2.534 +  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]`
   2.535 +  if test "x$has_forbidden_chars" != x; then
   2.536 +    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
   2.537 +    shortmode_path=`$CYGPATH -s -m -a "$input_path"`
   2.538 +    path_after_shortmode=`$CYGPATH -u "$shortmode_path"`
   2.539 +    if test "x$path_after_shortmode" != "x$input_to_shortpath"; then
   2.540 +      # Going to short mode and back again did indeed matter. Since short mode is
   2.541 +      # case insensitive, let's make it lowercase to improve readability.
   2.542 +      shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
   2.543 +      # Now convert it back to Unix-style (cygpath)
   2.544 +      input_path=`$CYGPATH -u "$shortmode_path"`
   2.545 +      new_path="$input_path"
   2.546 +    fi
   2.547 +  fi
   2.548 +
   2.549 +  test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/`
   2.550 +  if test "x$test_cygdrive_prefix" = x; then
   2.551 +    # As a simple fix, exclude /usr/bin since it's not a real path.
   2.552 +    if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then
   2.553 +      # The path is in a Cygwin special directory (e.g. /home). We need this converted to
   2.554 +      # a path prefixed by /cygdrive for fixpath to work.
   2.555 +      new_path="$CYGWIN_ROOT_PATH$input_path"
   2.556 +    fi
   2.557 +  fi
   2.558 +
   2.559 +
   2.560 +  if test "x$path" != "x$new_path"; then
   2.561 +    CYGWIN_WINDOWSSDKDIR="$new_path"
   2.562 +    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CYGWIN_WINDOWSSDKDIR to \"$new_path\"" >&5
   2.563 +$as_echo "$as_me: Rewriting CYGWIN_WINDOWSSDKDIR to \"$new_path\"" >&6;}
   2.564 +  fi
   2.565 +
   2.566 +  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
   2.567 +
   2.568 +  path="$CYGWIN_WINDOWSSDKDIR"
   2.569 +  has_colon=`$ECHO $path | $GREP ^.:`
   2.570 +  new_path="$path"
   2.571 +  if test "x$has_colon" = x; then
   2.572 +    # Not in mixed or Windows style, start by that.
   2.573 +    new_path=`cmd //c echo $path`
   2.574 +  fi
   2.575 +
   2.576 +
   2.577 +  input_path="$new_path"
   2.578 +  # Check if we need to convert this using DOS-style short mode. If the path
   2.579 +  # contains just simple characters, use it. Otherwise (spaces, weird characters),
   2.580 +  # take no chances and rewrite it.
   2.581 +  # Note: m4 eats our [], so we need to use [ and ] instead.
   2.582 +  has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]`
   2.583 +  if test "x$has_forbidden_chars" != x; then
   2.584 +    # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
   2.585 +    new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
   2.586 +  fi
   2.587 +
   2.588 +
   2.589 +  windows_path="$new_path"
   2.590 +  if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
   2.591 +    unix_path=`$CYGPATH -u "$windows_path"`
   2.592 +    new_path="$unix_path"
   2.593 +  elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
   2.594 +    unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
   2.595 +    new_path="$unix_path"
   2.596 +  fi
   2.597 +
   2.598 +  if test "x$path" != "x$new_path"; then
   2.599 +    CYGWIN_WINDOWSSDKDIR="$new_path"
   2.600 +    { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CYGWIN_WINDOWSSDKDIR to \"$new_path\"" >&5
   2.601 +$as_echo "$as_me: Rewriting CYGWIN_WINDOWSSDKDIR to \"$new_path\"" >&6;}
   2.602 +  fi
   2.603 +
   2.604 +  # Save the first 10 bytes of this path to the storage, so fixpath can work.
   2.605 +  all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}")
   2.606 +
   2.607 +  else
   2.608 +    # We're on a posix platform. Hooray! :)
   2.609 +    path="$CYGWIN_WINDOWSSDKDIR"
   2.610 +    has_space=`$ECHO "$path" | $GREP " "`
   2.611 +    if test "x$has_space" != x; then
   2.612 +      { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CYGWIN_WINDOWSSDKDIR, which resolves as \"$path\", is invalid." >&5
   2.613 +$as_echo "$as_me: The path of CYGWIN_WINDOWSSDKDIR, which resolves as \"$path\", is invalid." >&6;}
   2.614 +      as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5
   2.615 +    fi
   2.616 +
   2.617 +    # Use eval to expand a potential ~
   2.618 +    eval path="$path"
   2.619 +    if test ! -f "$path" && test ! -d "$path"; then
   2.620 +      as_fn_error $? "The path of CYGWIN_WINDOWSSDKDIR, which resolves as \"$path\", is not found." "$LINENO" 5
   2.621 +    fi
   2.622 +
   2.623 +    CYGWIN_WINDOWSSDKDIR="`cd "$path"; $THEPWDCMD -L`"
   2.624 +  fi
   2.625 +
   2.626 +      dll_subdir=$OPENJDK_TARGET_CPU
   2.627 +      if test "x$dll_subdir" = "xx86_64"; then
   2.628 +        dll_subdir="x64"
   2.629 +      fi
   2.630 +      UCRT_DLL_DIR="$CYGWIN_WINDOWSSDKDIR/Redist/ucrt/DLLs/$dll_subdir"
   2.631 +      if test -z "$(ls -d "$UCRT_DLL_DIR/"*.dll 2> /dev/null)"; then
   2.632 +        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
   2.633 +$as_echo "no" >&6; }
   2.634 +        as_fn_error $? "Could not find any dlls in $UCRT_DLL_DIR" "$LINENO" 5
   2.635 +      else
   2.636 +        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UCRT_DLL_DIR" >&5
   2.637 +$as_echo "$UCRT_DLL_DIR" >&6; }
   2.638 +      fi
   2.639 +    fi
   2.640 +  else
   2.641 +    UCRT_DLL_DIR=
   2.642 +  fi
   2.643 +
   2.644 +
   2.645 +
   2.646  
   2.647  # Check whether --with-dxsdk was given.
   2.648  if test "${with_dxsdk+set}" = set; then :
     3.1 --- a/common/autoconf/spec.gmk.in	Wed Oct 17 13:00:32 2018 +0100
     3.2 +++ b/common/autoconf/spec.gmk.in	Mon Oct 29 14:43:07 2018 -0700
     3.3 @@ -576,6 +576,7 @@
     3.4  LIBZIP_CAN_USE_MMAP:=@LIBZIP_CAN_USE_MMAP@
     3.5  MSVCR_DLL:=@MSVCR_DLL@
     3.6  MSVCP_DLL:=@MSVCP_DLL@
     3.7 +UCRT_DLL_DIR:=@UCRT_DLL_DIR@
     3.8  
     3.9  
    3.10  # ADD_SRCS takes a single argument with source roots
     4.1 --- a/common/autoconf/toolchain_windows.m4	Wed Oct 17 13:00:32 2018 +0100
     4.2 +++ b/common/autoconf/toolchain_windows.m4	Mon Oct 29 14:43:07 2018 -0700
     4.3 @@ -76,6 +76,7 @@
     4.4  VS_MSVCR_2017=vcruntime140.dll
     4.5  VS_MSVCP_2017=msvcp140.dll
     4.6  VS_ENVVAR_2017="VS150COMNTOOLS"
     4.7 +VS_USE_UCRT_2017="true"
     4.8  VS_VS_INSTALLDIR_2017="Microsoft Visual Studio/2017"
     4.9  VS_EDITIONS_2017="Community Professional Enterprise"
    4.10  VS_SDK_INSTALLDIR_2017=
    4.11 @@ -265,6 +266,7 @@
    4.12      eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}"
    4.13      eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}"
    4.14      eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}"
    4.15 +    eval USE_UCRT="\${VS_USE_UCRT_${VS_VERSION}}"
    4.16      eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
    4.17      VS_PATH="$TOOLCHAIN_PATH:$PATH"
    4.18  
    4.19 @@ -310,6 +312,7 @@
    4.20        eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}"
    4.21        eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}"
    4.22        eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}"
    4.23 +      eval USE_UCRT="\${VS_USE_UCRT_${VS_VERSION}}"
    4.24        # The rest of the variables are already evaled while probing
    4.25        AC_MSG_NOTICE([Found $VS_DESCRIPTION])
    4.26        break
    4.27 @@ -433,8 +436,11 @@
    4.28        VS_INCLUDE=`$ECHO "$VS_INCLUDE" | $SED 's/\\\\* *$//'`
    4.29        VS_LIB=`$ECHO "$VS_LIB" | $SED 's/\\\\* *$//'`
    4.30        VCINSTALLDIR=`$ECHO "$VCINSTALLDIR" | $SED 's/\\\\* *$//'`
    4.31 -      WindowsSDKDir=`$ECHO "$WindowsSDKDir" | $SED 's/\\\\* *$//'`
    4.32 +      WindowsSdkDir=`$ECHO "$WindowsSdkDir" | $SED 's/\\\\* *$//'`
    4.33        WINDOWSSDKDIR=`$ECHO "$WINDOWSSDKDIR" | $SED 's/\\\\* *$//'`
    4.34 +      if test -z "$WINDOWSSDKDIR"; then
    4.35 +        WINDOWSSDKDIR="$WindowsSdkDir"
    4.36 +      fi
    4.37        # Remove any paths containing # (typically F#) as that messes up make. This
    4.38        # is needed if visual studio was installed with F# support.
    4.39        VS_PATH=`$ECHO "$VS_PATH" | $SED 's/[[^:#]]*#[^:]*://g'`
    4.40 @@ -505,7 +511,7 @@
    4.41    if test "x$MSVC_DLL" = x; then
    4.42      if test "x$VCINSTALLDIR" != x; then
    4.43        CYGWIN_VC_INSTALL_DIR="$VCINSTALLDIR"
    4.44 -      BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(CYGWIN_VC_INSTALL_DIR)
    4.45 +      BASIC_FIXUP_PATH(CYGWIN_VC_INSTALL_DIR)
    4.46        if test "$VS_VERSION" -lt 2017; then
    4.47          # Probe: Using well-known location from Visual Studio 12.0 and older
    4.48          if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
    4.49 @@ -639,5 +645,42 @@
    4.50      fi
    4.51      AC_SUBST(MSVCP_DLL)
    4.52    fi
    4.53 +
    4.54 +  AC_ARG_WITH(ucrt-dll-dir, [AS_HELP_STRING([--with-ucrt-dll-dir],
    4.55 +      [path to Microsoft Windows Kit UCRT DLL dir (Windows only) @<:@probed@:>@])])
    4.56 +
    4.57 +  if test "x$USE_UCRT" = "xtrue"; then
    4.58 +    AC_MSG_CHECKING([for UCRT DLL dir])
    4.59 +    if test "x$with_ucrt_dll_dir" != x; then
    4.60 +      if test -z "$(ls -d "$with_ucrt_dll_dir/*.dll" 2> /dev/null)"; then
    4.61 +        AC_MSG_RESULT([no])
    4.62 +        AC_MSG_ERROR([Could not find any dlls in $with_ucrt_dll_dir])
    4.63 +      else
    4.64 +        AC_MSG_RESULT([$with_ucrt_dll_dir])
    4.65 +        UCRT_DLL_DIR="$with_ucrt_dll_dir"
    4.66 +        BASIC_FIXUP_PATH([UCRT_DLL_DIR])
    4.67 +      fi
    4.68 +    elif test "x$DEVKIT_UCRT_DLL_DIR" != "x"; then
    4.69 +      UCRT_DLL_DIR="$DEVKIT_UCRT_DLL_DIR"
    4.70 +      AC_MSG_RESULT($UCRT_DLL_DIR)
    4.71 +    else
    4.72 +      CYGWIN_WINDOWSSDKDIR="${WINDOWSSDKDIR}"
    4.73 +      BASIC_FIXUP_PATH([CYGWIN_WINDOWSSDKDIR])
    4.74 +      dll_subdir=$OPENJDK_TARGET_CPU
    4.75 +      if test "x$dll_subdir" = "xx86_64"; then
    4.76 +        dll_subdir="x64"
    4.77 +      fi
    4.78 +      UCRT_DLL_DIR="$CYGWIN_WINDOWSSDKDIR/Redist/ucrt/DLLs/$dll_subdir"
    4.79 +      if test -z "$(ls -d "$UCRT_DLL_DIR/"*.dll 2> /dev/null)"; then
    4.80 +        AC_MSG_RESULT([no])
    4.81 +        AC_MSG_ERROR([Could not find any dlls in $UCRT_DLL_DIR])
    4.82 +      else
    4.83 +        AC_MSG_RESULT($UCRT_DLL_DIR)
    4.84 +      fi
    4.85 +    fi
    4.86 +  else
    4.87 +    UCRT_DLL_DIR=
    4.88 +  fi
    4.89 +  AC_SUBST(UCRT_DLL_DIR)
    4.90  ])
    4.91  

mercurial