On Tue, 11 May 2021 01:17:32 GMT, John Neffenger <[email protected]> wrote:
>> The Windows build calls a series of batch files to get the Visual Studio
>> paths and environment variables. The batch files are a black box: any
>> messages they print are discarded. If anything goes wrong, the only signs
>> are a vague Gradle exception and a corrupted properties file.
>>
>> This has been causing problems for years. There are at least 49 messages on
>> the mailing since 2017 that discuss the exception and ways to work around it.
>>
>> This pull request lets you enable the batch file messages, shedding light on
>> their internal workings and allowing you to catch any errors at their
>> source. Specifically, it adds the variable `VSCMD_DEBUG` to the environment
>> of `genVSproperties.bat` and documents its use.
>>
>> ### Before
>>
>> For example, if your `PATH` environment variable is missing
>> `C:/Windows/System32`, like mine was, you'll see the following errors:
>>
>>
>> $ gradle sdk
>> Dependency verification is an incubating feature.
>>
>> FAILURE: Build failed with an exception.
>>
>> * Where:
>> Script 'C:\cygwin64\home\john\src\jfx\buildSrc\win.gradle' line: 108
>>
>> * What went wrong:
>> A problem occurred evaluating script.
>>> FAIL: WINSDK_DIR not defined
>>
>> ︙
>>
>> BUILD FAILED in 4s
>>
>>
>> *Me:* What's a `WINSDK_DIR`? The Wiki says, "This means that you will have
>> to define these paths manually." I guess this is normal. 😕️
>>
>> ### After
>>
>> With this change, you can set the debug level to "3" in the `win.gradle`
>> file and get a better picture of the problem:
>>
>>
>> $ gradle sdk
>> Dependency verification is an incubating feature.
>>
>>> Configure project :
>> 'reg' is not recognized as an internal or external command,
>> operable program or batch file.
>> 'reg' is not recognized as an internal or external command,
>> operable program or batch file.
>> 'reg' is not recognized as an internal or external command,
>> operable program or batch file.
>>
>> ︙
>>
>> 'powershell.exe' is not recognized as an internal or external command,
>> operable program or batch file.
>>
>> FAILURE: Build failed with an exception.
>>
>> * Where:
>> Script 'C:\cygwin64\home\john\src\jfx\buildSrc\win.gradle' line: 108
>>
>> * What went wrong:
>> A problem occurred evaluating script.
>>> FAIL: WINSDK_DIR not defined
>>
>> ︙
>>
>> BUILD FAILED in 3s
>>
>>
>> *Me:* Oh, it's just a "command not found" error. I'll check my `PATH`. 🤓
>
> John Neffenger has updated the pull request incrementally with one additional
> commit since the last revision:
>
> Skip sending telemetry to fix "file in use" error
I wrote a Bash shell script, included below, that can help in reviewing this
pull request. It isolates the call to `vcvarsall.bat`, making it easier to
experiment with different choices, such as:
- leaving `VSCMD_SKIP_SENDTELEMETRY` undefined,
- adding the `/q` option to `cmd`,
- removing `2>&1` to use the default standard error, or
- discarding standard output with `> /dev/null`.
#!/bin/bash
# Tests the Visual Studio 'vcvarsall.bat' batch file
trap exit INT TERM
set -o errexit
# Path to 'vcvarsall.bat' batch file
vsroot="C:\\Program Files (x86)\\Microsoft Visual Studio"
vcfile="2019\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat"
vcpath="$vsroot\$vcfile"
# Windows command interpreter and options
# /C Carries out the command specified by string and then terminates
# /Q Turns echo off
command="cmd /c"
# Skips calling PowerShell script to send telemetry
export VSCMD_SKIP_SENDTELEMETRY="1"
printf "VSCMD_SKIP_SENDTELEMETRY="%s"\n" "$VSCMD_SKIP_SENDTELEMETRY"
# VSCMD_DEBUG undefined
unset VSCMD_DEBUG
printf "Testing VSCMD_DEBUG="%s"\n" "$VSCMD_DEBUG"
$command "$vcpath" x86 > 0-debug.log 2>&1
$command "$vcpath" x64 >> 0-debug.log 2>&1
# VSCMD_DEBUG = 1 (basic), 2 (detailed), and 3 (trace)
for n in 1 2 3; do
export VSCMD_DEBUG="$n"
printf "Testing VSCMD_DEBUG="%s"\n" "$VSCMD_DEBUG"
$command "$vcpath" x86 > $n-debug.log 2>&1
$command "$vcpath" x64 >> $n-debug.log 2>&1
done
I run the script under Cygwin on Windows and evaluate its output as follows:
$ ./vcvarstest.sh
VSCMD_SKIP_SENDTELEMETRY="1"
Testing VSCMD_DEBUG=""
Testing VSCMD_DEBUG="1"
Testing VSCMD_DEBUG="2"
Testing VSCMD_DEBUG="3"
$ wc -l *.log
10 0-debug.log
92 1-debug.log
508 2-debug.log
5690 3-debug.log
6300 total
-------------
PR: https://git.openjdk.java.net/jfx/pull/488