1 #
   2 # Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
   3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4 #
   5 # This code is free software; you can redistribute it and/or modify it
   6 # under the terms of the GNU General Public License version 2 only, as
   7 # published by the Free Software Foundation.  Oracle designates this
   8 # particular file as subject to the "Classpath" exception as provided
   9 # by Oracle in the LICENSE file that accompanied this code.
  10 #
  11 # This code is distributed in the hope that it will be useful, but WITHOUT
  12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14 # version 2 for more details (a copy is included in the LICENSE file that
  15 # accompanied this code).
  16 #
  17 # You should have received a copy of the GNU General Public License version
  18 # 2 along with this work; if not, write to the Free Software Foundation,
  19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20 #
  21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22 # or visit www.oracle.com if you need additional information or have any
  23 # questions.
  24 #
  25 
  26 AC_DEFUN([BASIC_WINDOWS_REWRITE_AS_UNIX_PATH],
  27 [
  28   windows_path="[$]$1"
  29   if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
  30     unix_path=`$CYGPATH -u "$windows_path"`
  31     $1="$unix_path"
  32   elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
  33     unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
  34     $1="$unix_path"
  35   elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
  36     # wslpath does not check the input, only call if an actual windows path was
  37     # given.
  38     if $ECHO "$windows_path" | $GREP -q ["^[a-zA-Z]:[\\\\/]"]; then
  39       unix_path=`$WSLPATH -u "$windows_path"`
  40       $1="$unix_path"
  41     fi
  42   fi
  43 ])
  44 
  45 AC_DEFUN([BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH],
  46 [
  47   unix_path="[$]$1"
  48   if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
  49     windows_path=`$CYGPATH -m "$unix_path"`
  50     $1="$windows_path"
  51   elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
  52     windows_path=`cmd //c echo $unix_path`
  53     $1="$windows_path"
  54   elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
  55     windows_path=`$WSLPATH -m "$unix_path"`
  56     $1="$windows_path"
  57   fi
  58 ])
  59 
  60 # Helper function which possibly converts a path using DOS-style short mode.
  61 # If so, the updated path is stored in $new_path.
  62 # $1: The path to check
  63 AC_DEFUN([BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN],
  64 [
  65   input_path="$1"
  66   # Check if we need to convert this using DOS-style short mode. If the path
  67   # contains just simple characters, use it. Otherwise (spaces, weird characters),
  68   # take no chances and rewrite it.
  69   # Note: m4 eats our [], so we need to use @<:@ and @:>@ instead.
  70   has_forbidden_chars=`$ECHO "$input_path" | $GREP @<:@^-._/a-zA-Z0-9@:>@`
  71   if test "x$has_forbidden_chars" != x; then
  72     # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
  73     shortmode_path=`$CYGPATH -s -m -a "$input_path"`
  74     path_after_shortmode=`$CYGPATH -u "$shortmode_path"`
  75     if test "x$path_after_shortmode" != "x$input_to_shortpath"; then
  76       # Going to short mode and back again did indeed matter. Since short mode is
  77       # case insensitive, let's make it lowercase to improve readability.
  78       shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
  79       # Now convert it back to Unix-style (cygpath)
  80       input_path=`$CYGPATH -u "$shortmode_path"`
  81       new_path="$input_path"
  82     fi
  83   fi
  84 
  85   test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/`
  86   if test "x$test_cygdrive_prefix" = x; then
  87     # As a simple fix, exclude /usr/bin since it's not a real path.
  88     if test "x`$ECHO $1 | $GREP ^/usr/bin/`" = x; then
  89       # The path is in a Cygwin special directory (e.g. /home). We need this converted to
  90       # a path prefixed by /cygdrive for fixpath to work.
  91       new_path="$CYGWIN_ROOT_PATH$input_path"
  92     fi
  93   fi
  94 ])
  95 
  96 # Helper function which possibly converts a path using DOS-style short mode.
  97 # If so, the updated path is stored in $new_path.
  98 # $1: The path to check
  99 AC_DEFUN([BASIC_MAKE_WINDOWS_SPACE_SAFE_MSYS],
 100 [
 101   input_path="$1"
 102   # Check if we need to convert this using DOS-style short mode. If the path
 103   # contains just simple characters, use it. Otherwise (spaces, weird characters),
 104   # take no chances and rewrite it.
 105   # Note: m4 eats our [], so we need to use @<:@ and @:>@ instead.
 106   has_forbidden_chars=`$ECHO "$input_path" | $GREP @<:@^-_/:a-zA-Z0-9@:>@`
 107   if test "x$has_forbidden_chars" != x; then
 108     # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
 109     new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
 110   fi
 111 ])
 112 
 113 # Helper function which possibly converts a path using DOS-style short mode.
 114 # If so, the updated path is stored in $new_path.
 115 # $1: The path to check
 116 AC_DEFUN([BASIC_MAKE_WINDOWS_SPACE_SAFE_WSL],
 117 [
 118   input_path="$1"
 119   # Check if we need to convert this using DOS-style short mode. If the path
 120   # contains just simple characters, use it. Otherwise (spaces, weird characters),
 121   # take no chances and rewrite it.
 122   # Note: m4 eats our [], so we need to use @<:@ and @:>@ instead.
 123   has_forbidden_chars=`$ECHO "$input_path" | $GREP [[^-_/:a-zA-Z0-9\\.]]`
 124   if test "x$has_forbidden_chars" != x; then
 125     # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
 126     TOPDIR_windows="$TOPDIR"
 127     BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([TOPDIR_windows])
 128     # First convert to Windows path to make input valid for cmd
 129     BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([input_path])
 130     new_path=`$CMD /c $TOPDIR_windows/make/scripts/windowsShortName.cmd "$input_path" \
 131         | $SED -e 's|\r||g' \
 132         | $TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
 133     # Rewrite back to unix style
 134     BASIC_WINDOWS_REWRITE_AS_UNIX_PATH([new_path])
 135   fi
 136 ])
 137 
 138 # FIXME: The BASIC_FIXUP_*_CYGWIN/MSYS is most likely too convoluted
 139 # and could probably be heavily simplified. However, all changes in this
 140 # area tend to need lot of testing in different scenarios, and in lack of
 141 # proper unit testing, cleaning this up has not been deemed worth the effort
 142 # at the moment.
 143 
 144 AC_DEFUN([BASIC_FIXUP_PATH_CYGWIN],
 145 [
 146   # Input might be given as Windows format, start by converting to
 147   # unix format.
 148   path="[$]$1"
 149   new_path=`$CYGPATH -u "$path"`
 150 
 151   # Cygwin tries to hide some aspects of the Windows file system, such that binaries are
 152   # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
 153   # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
 154   # "foo.exe" is OK but "foo" is an error.
 155   #
 156   # This test is therefore slightly more accurate than "test -f" to check for file precense.
 157   # It is also a way to make sure we got the proper file name for the real test later on.
 158   test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
 159   if test "x$test_shortpath" = x; then
 160     AC_MSG_NOTICE([The path of $1, which resolves as "$path", is invalid.])
 161     AC_MSG_ERROR([Cannot locate the the path of $1])
 162   fi
 163 
 164   # Call helper function which possibly converts this using DOS-style short mode.
 165   # If so, the updated path is stored in $new_path.
 166   BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN([$new_path])
 167 
 168   if test "x$path" != "x$new_path"; then
 169     $1="$new_path"
 170     AC_MSG_NOTICE([Rewriting $1 to "$new_path"])
 171   fi
 172 ])
 173 
 174 AC_DEFUN([BASIC_FIXUP_PATH_MSYS],
 175 [
 176   path="[$]$1"
 177   has_colon=`$ECHO $path | $GREP ^.:`
 178   new_path="$path"
 179   if test "x$has_colon" = x; then
 180     # Not in mixed or Windows style, start by that.
 181     new_path=`cmd //c echo $path`
 182   fi
 183 
 184   BASIC_MAKE_WINDOWS_SPACE_SAFE_MSYS([$new_path])
 185   BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path)
 186   if test "x$path" != "x$new_path"; then
 187     $1="$new_path"
 188     AC_MSG_NOTICE([Rewriting $1 to "$new_path"])
 189   fi
 190 
 191   # Save the first 10 bytes of this path to the storage, so fixpath can work.
 192   all_fixpath_prefixes=("${all_fixpath_prefixes@<:@@@:>@}" "${new_path:0:10}")
 193 ])
 194 
 195 AC_DEFUN([BASIC_FIXUP_PATH_WSL],
 196 [
 197   # Input might be given as Windows format, start by converting to
 198   # unix format.
 199   new_path="[$]$1"
 200   BASIC_WINDOWS_REWRITE_AS_UNIX_PATH([new_path])
 201 
 202   # Call helper function which possibly converts this using DOS-style short mode.
 203   # If so, the updated path is stored in $new_path.
 204   BASIC_MAKE_WINDOWS_SPACE_SAFE_WSL([$new_path])
 205 
 206   if test "x$path" != "x$new_path"; then
 207     $1="$new_path"
 208     AC_MSG_NOTICE([Rewriting $1 to "$new_path"])
 209   fi
 210 ])
 211 
 212 AC_DEFUN([BASIC_FIXUP_EXECUTABLE_CYGWIN],
 213 [
 214   # First separate the path from the arguments. This will split at the first
 215   # space.
 216   complete="[$]$1"
 217   path="${complete%% *}"
 218   tmp="$complete EOL"
 219   arguments="${tmp#* }"
 220 
 221   # Input might be given as Windows format, start by converting to
 222   # unix format.
 223   new_path=`$CYGPATH -u "$path"`
 224 
 225   # Now try to locate executable using which
 226   new_path=`$WHICH "$new_path" 2> /dev/null`
 227   # bat and cmd files are not always considered executable in cygwin causing which
 228   # to not find them
 229   if test "x$new_path" = x \
 230       && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
 231       && test "x`$LS \"$path\" 2>/dev/null`" != x; then
 232     new_path=`$CYGPATH -u "$path"`
 233   fi
 234   if test "x$new_path" = x; then
 235     # Oops. Which didn't find the executable.
 236     # The splitting of arguments from the executable at a space might have been incorrect,
 237     # since paths with space are more likely in Windows. Give it another try with the whole
 238     # argument.
 239     path="$complete"
 240     arguments="EOL"
 241     new_path=`$CYGPATH -u "$path"`
 242     new_path=`$WHICH "$new_path" 2> /dev/null`
 243     # bat and cmd files are not always considered executable in cygwin causing which
 244     # to not find them
 245     if test "x$new_path" = x \
 246         && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
 247         && test "x`$LS \"$path\" 2>/dev/null`" != x; then
 248       new_path=`$CYGPATH -u "$path"`
 249     fi
 250     if test "x$new_path" = x; then
 251       # It's still not found. Now this is an unrecoverable error.
 252       AC_MSG_NOTICE([The path of $1, which resolves as "$complete", is not found.])
 253       has_space=`$ECHO "$complete" | $GREP " "`
 254       if test "x$has_space" != x; then
 255         AC_MSG_NOTICE([You might be mixing spaces in the path and extra arguments, which is not allowed.])
 256       fi
 257       AC_MSG_ERROR([Cannot locate the the path of $1])
 258     fi
 259   fi
 260 
 261   # Cygwin tries to hide some aspects of the Windows file system, such that binaries are
 262   # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
 263   # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
 264   # "foo.exe" is OK but "foo" is an error.
 265   #
 266   # This test is therefore slightly more accurate than "test -f" to check for file presence.
 267   # It is also a way to make sure we got the proper file name for the real test later on.
 268   test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
 269   if test "x$test_shortpath" = x; then
 270     # Short path failed, file does not exist as specified.
 271     # Try adding .exe or .cmd
 272     if test -f "${new_path}.exe"; then
 273       input_to_shortpath="${new_path}.exe"
 274     elif test -f "${new_path}.cmd"; then
 275       input_to_shortpath="${new_path}.cmd"
 276     else
 277       AC_MSG_NOTICE([The path of $1, which resolves as "$new_path", is invalid.])
 278       AC_MSG_NOTICE([Neither "$new_path" nor "$new_path.exe/cmd" can be found])
 279       AC_MSG_ERROR([Cannot locate the the path of $1])
 280     fi
 281   else
 282     input_to_shortpath="$new_path"
 283   fi
 284 
 285   # Call helper function which possibly converts this using DOS-style short mode.
 286   # If so, the updated path is stored in $new_path.
 287   new_path="$input_to_shortpath"
 288   BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN([$input_to_shortpath])
 289   # remove trailing .exe if any
 290   new_path="${new_path/%.exe/}"
 291 ])
 292 
 293 AC_DEFUN([BASIC_FIXUP_EXECUTABLE_MSYS],
 294 [
 295   # First separate the path from the arguments. This will split at the first
 296   # space.
 297   complete="[$]$1"
 298   path="${complete%% *}"
 299   tmp="$complete EOL"
 300   arguments="${tmp#* }"
 301 
 302   # Input might be given as Windows format, start by converting to
 303   # unix format.
 304   new_path="$path"
 305   BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path)
 306 
 307   # Now try to locate executable using which
 308   new_path=`$WHICH "$new_path" 2> /dev/null`
 309 
 310   if test "x$new_path" = x; then
 311     # Oops. Which didn't find the executable.
 312     # The splitting of arguments from the executable at a space might have been incorrect,
 313     # since paths with space are more likely in Windows. Give it another try with the whole
 314     # argument.
 315     path="$complete"
 316     arguments="EOL"
 317     new_path="$path"
 318     BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path)
 319 
 320     new_path=`$WHICH "$new_path" 2> /dev/null`
 321     # bat and cmd files are not always considered executable in MSYS causing which
 322     # to not find them
 323     if test "x$new_path" = x \
 324         && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
 325         && test "x`$LS \"$path\" 2>/dev/null`" != x; then
 326       new_path="$path"
 327       BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path)
 328     fi
 329 
 330     if test "x$new_path" = x; then
 331       # It's still not found. Now this is an unrecoverable error.
 332       AC_MSG_NOTICE([The path of $1, which resolves as "$complete", is not found.])
 333       has_space=`$ECHO "$complete" | $GREP " "`
 334       if test "x$has_space" != x; then
 335         AC_MSG_NOTICE([You might be mixing spaces in the path and extra arguments, which is not allowed.])
 336       fi
 337       AC_MSG_ERROR([Cannot locate the the path of $1])
 338     fi
 339   fi
 340 
 341   # Now new_path has a complete unix path to the binary
 342   if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then
 343     # Keep paths in /bin as-is, but remove trailing .exe if any
 344     new_path="${new_path/%.exe/}"
 345     # Do not save /bin paths to all_fixpath_prefixes!
 346   else
 347     # Not in mixed or Windows style, start by that.
 348     new_path=`cmd //c echo $new_path`
 349     BASIC_MAKE_WINDOWS_SPACE_SAFE_MSYS([$new_path])
 350     # Output is in $new_path
 351     BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path)
 352     # remove trailing .exe if any
 353     new_path="${new_path/%.exe/}"
 354 
 355     # Save the first 10 bytes of this path to the storage, so fixpath can work.
 356     all_fixpath_prefixes=("${all_fixpath_prefixes@<:@@@:>@}" "${new_path:0:10}")
 357   fi
 358 ])
 359 
 360 AC_DEFUN([BASIC_FIXUP_EXECUTABLE_WSL],
 361 [
 362   # First separate the path from the arguments. This will split at the first
 363   # space.
 364   complete="[$]$1"
 365   path="${complete%% *}"
 366   tmp="$complete EOL"
 367   arguments="${tmp#* }"
 368 
 369   # Input might be given as Windows format, start by converting to
 370   # unix format.
 371   new_path="$path"
 372   BASIC_WINDOWS_REWRITE_AS_UNIX_PATH([new_path])
 373 
 374   # Now try to locate executable using which
 375   new_path_bak="$new_path"
 376   new_path=`$WHICH "$new_path" 2> /dev/null`
 377   # bat and cmd files are not considered executable in WSL
 378   if test "x$new_path" = x \
 379       && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
 380       && test "x`$LS \"$path\" 2>/dev/null`" != x; then
 381     new_path="$new_path_back"
 382   fi
 383   if test "x$new_path" = x; then
 384     # Oops. Which didn't find the executable.
 385     # The splitting of arguments from the executable at a space might have been incorrect,
 386     # since paths with space are more likely in Windows. Give it another try with the whole
 387     # argument.
 388     path="$complete"
 389     arguments="EOL"
 390     new_path="$path"
 391     BASIC_WINDOWS_REWRITE_AS_UNIX_PATH([new_path])
 392     new_path_bak="$new_path"
 393     new_path=`$WHICH "$new_path" 2> /dev/null`
 394     # bat and cmd files are not considered executable in WSL
 395     if test "x$new_path" = x \
 396         && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
 397         && test "x`$LS \"$path\" 2>/dev/null`" != x; then
 398       new_path="$new_path_bak"
 399     fi
 400     if test "x$new_path" = x; then
 401       # It's still not found. Now this is an unrecoverable error.
 402       AC_MSG_NOTICE([The path of $1, which resolves as "$complete", is not found.])
 403       has_space=`$ECHO "$complete" | $GREP " "`
 404       if test "x$has_space" != x; then
 405         AC_MSG_NOTICE([You might be mixing spaces in the path and extra arguments, which is not allowed.])
 406       fi
 407       AC_MSG_ERROR([Cannot locate the the path of $1])
 408     fi
 409   fi
 410 
 411   # In WSL, suffixes must be present for Windows executables
 412   if test ! -f "$new_path"; then
 413     # Try adding .exe or .cmd
 414     if test -f "${new_path}.exe"; then
 415       input_to_shortpath="${new_path}.exe"
 416     elif test -f "${new_path}.cmd"; then
 417       input_to_shortpath="${new_path}.cmd"
 418     else
 419       AC_MSG_NOTICE([The path of $1, which resolves as "$new_path", is invalid.])
 420       AC_MSG_NOTICE([Neither "$new_path" nor "$new_path.exe/cmd" can be found])
 421       AC_MSG_ERROR([Cannot locate the the path of $1])
 422     fi
 423   else
 424     input_to_shortpath="$new_path"
 425   fi
 426 
 427   # Call helper function which possibly converts this using DOS-style short mode.
 428   # If so, the updated path is stored in $new_path.
 429   new_path="$input_to_shortpath"
 430   BASIC_MAKE_WINDOWS_SPACE_SAFE_WSL([$input_to_shortpath])
 431 ])
 432 
 433 # Setup basic configuration paths, and platform-specific stuff related to PATHs.
 434 AC_DEFUN([BASIC_CHECK_PATHS_WINDOWS],
 435 [
 436   SRC_ROOT_LENGTH=`$THEPWDCMD -L|$WC -m`
 437   if test $SRC_ROOT_LENGTH -gt 100; then
 438     AC_MSG_ERROR([Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported])
 439   fi
 440 
 441   if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
 442     AC_MSG_CHECKING([cygwin release])
 443     CYGWIN_VERSION=`$UNAME -r`
 444     AC_MSG_RESULT([$CYGWIN_VERSION])
 445     WINDOWS_ENV_VENDOR='cygwin'
 446     WINDOWS_ENV_VERSION="$CYGWIN_VERSION"
 447 
 448     CYGWIN_VERSION_OLD=`$ECHO $CYGWIN_VERSION | $GREP -e '^1\.[0-6]'`
 449     if test "x$CYGWIN_VERSION_OLD" != x; then
 450       AC_MSG_NOTICE([Your cygwin is too old. You are running $CYGWIN_VERSION, but at least cygwin 1.7 is required. Please upgrade.])
 451       AC_MSG_ERROR([Cannot continue])
 452     fi
 453     if test "x$CYGPATH" = x; then
 454       AC_MSG_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path])
 455     fi
 456     AC_MSG_CHECKING([cygwin root directory as unix-style path])
 457     # The cmd output ends with Windows line endings (CR/LF)
 458     cygwin_winpath_root=`cd / ; cmd /c cd | $TR -d '\r\n'`
 459     # Force cygpath to report the proper root by including a trailing space, and then stripping it off again.
 460     CYGWIN_ROOT_PATH=`$CYGPATH -u "$cygwin_winpath_root " | $CUT -f 1 -d " "`
 461     AC_MSG_RESULT([$CYGWIN_ROOT_PATH])
 462     WINDOWS_ENV_ROOT_PATH="$CYGWIN_ROOT_PATH"
 463     test_cygdrive_prefix=`$ECHO $CYGWIN_ROOT_PATH | $GREP ^/cygdrive/`
 464     if test "x$test_cygdrive_prefix" = x; then
 465       AC_MSG_ERROR([Your cygdrive prefix is not /cygdrive. This is currently not supported. Change with mount -c.])
 466     fi
 467         EXECUTABLE_SUFFIX=""
 468   elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
 469     AC_MSG_CHECKING([msys release])
 470     MSYS_VERSION=`$UNAME -r`
 471     AC_MSG_RESULT([$MSYS_VERSION])
 472 
 473     WINDOWS_ENV_VENDOR='msys'
 474     WINDOWS_ENV_VERSION="$MSYS_VERSION"
 475 
 476     AC_MSG_CHECKING([msys root directory as unix-style path])
 477     # The cmd output ends with Windows line endings (CR/LF), the grep command will strip that away
 478     MSYS_ROOT_PATH=`cd / ; cmd /c cd | $GREP ".*"`
 479     BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(MSYS_ROOT_PATH)
 480     AC_MSG_RESULT([$MSYS_ROOT_PATH])
 481     WINDOWS_ENV_ROOT_PATH="$MSYS_ROOT_PATH"
 482         EXECUTABLE_SUFFIX=""
 483   elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
 484         EXECUTABLE_SUFFIX=".exe"
 485   else
 486     AC_MSG_ERROR([Unknown Windows environment. Neither cygwin, msys, nor wsl was detected.])
 487   fi
 488 
 489   # Test if windows or unix (cygwin/msys) find is first in path.
 490   AC_MSG_CHECKING([what kind of 'find' is first on the PATH])
 491   FIND_BINARY_OUTPUT=`find --version 2>&1`
 492   if test "x`echo $FIND_BINARY_OUTPUT | $GREP GNU`" != x; then
 493     AC_MSG_RESULT([unix style])
 494   elif test "x`echo $FIND_BINARY_OUTPUT | $GREP FIND`" != x; then
 495     AC_MSG_RESULT([Windows])
 496     AC_MSG_NOTICE([Your path contains Windows tools (C:\Windows\system32) before your unix (cygwin or msys) tools.])
 497     AC_MSG_NOTICE([This will not work. Please correct and make sure /usr/bin (or similar) is first in path.])
 498     AC_MSG_ERROR([Cannot continue])
 499   else
 500     AC_MSG_RESULT([unknown])
 501     AC_MSG_WARN([It seems that your find utility is non-standard.])
 502   fi
 503 ])
 504 
 505 AC_DEFUN_ONCE([BASIC_COMPILE_FIXPATH],
 506 [
 507   # When using cygwin or msys, we need a wrapper binary that renames
 508   # /cygdrive/c/ arguments into c:/ arguments and peeks into
 509   # @files and rewrites these too! This wrapper binary is
 510   # called fixpath.
 511   FIXPATH=
 512   if test "x$OPENJDK_BUILD_OS" = xwindows; then
 513     AC_MSG_CHECKING([if fixpath can be created])
 514     FIXPATH_SRC="$TOPDIR/make/src/native/fixpath.c"
 515     FIXPATH_BIN="$CONFIGURESUPPORT_OUTPUTDIR/bin/fixpath.exe"
 516     FIXPATH_DIR="$CONFIGURESUPPORT_OUTPUTDIR/fixpath"
 517     if test "x$OPENJDK_BUILD_OS_ENV" = xwindows.cygwin; then
 518       # Important to keep the .exe suffix on Cygwin for Hotspot makefiles
 519       FIXPATH="$FIXPATH_BIN -c"
 520     elif test "x$OPENJDK_BUILD_OS_ENV" = xwindows.msys; then
 521       # Take all collected prefixes and turn them into a -m/c/foo@/c/bar@... command line
 522       # @ was chosen as separator to minimize risk of other tools messing around with it
 523       all_unique_prefixes=`echo "${all_fixpath_prefixes@<:@@@:>@}" \
 524           | tr ' ' '\n' | $GREP '^/./' | $SORT | $UNIQ`
 525       fixpath_argument_list=`echo $all_unique_prefixes  | tr ' ' '@'`
 526       FIXPATH="$FIXPATH_BIN -m$fixpath_argument_list"
 527         elif test "x$OPENJDK_BUILD_OS_ENV" = xwindows.wsl; then
 528       FIXPATH="$FIXPATH_BIN -w"
 529     fi
 530     FIXPATH_SRC_W="$FIXPATH_SRC"
 531     FIXPATH_BIN_W="$FIXPATH_BIN"
 532     BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([FIXPATH_SRC_W])
 533     BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([FIXPATH_BIN_W])
 534     $RM -rf $FIXPATH_BIN $FIXPATH_DIR
 535     $MKDIR -p $FIXPATH_DIR $CONFIGURESUPPORT_OUTPUTDIR/bin
 536     cd $FIXPATH_DIR
 537     $CC $FIXPATH_SRC_W -Fe$FIXPATH_BIN_W > $FIXPATH_DIR/fixpath1.log 2>&1
 538     cd $CURDIR
 539 
 540     if test ! -x $FIXPATH_BIN; then
 541       AC_MSG_RESULT([no])
 542       cat $FIXPATH_DIR/fixpath1.log
 543       AC_MSG_ERROR([Could not create $FIXPATH_BIN])
 544     fi
 545     AC_MSG_RESULT([yes])
 546     AC_MSG_CHECKING([if fixpath.exe works])
 547     cd $FIXPATH_DIR
 548     $FIXPATH $CC $FIXPATH_SRC -Fe$FIXPATH_DIR/fixpath2.exe \
 549         > $FIXPATH_DIR/fixpath2.log 2>&1
 550     cd $CURDIR
 551     if test ! -x $FIXPATH_DIR/fixpath2.exe; then
 552       AC_MSG_RESULT([no])
 553       cat $FIXPATH_DIR/fixpath2.log
 554       AC_MSG_ERROR([fixpath did not work!])
 555     fi
 556     AC_MSG_RESULT([yes])
 557 
 558     FIXPATH_DETACH_FLAG="--detach"
 559   fi
 560 
 561   AC_SUBST(FIXPATH)
 562   AC_SUBST(FIXPATH_DETACH_FLAG)
 563 ])