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 ])