On Mon, 10 May 2021 05:54:51 GMT, John Neffenger <jgn...@openjdk.org> 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 with a new target base due to a 
> merge or a rebase. The incremental webrev excludes the unrelated changes 
> brought in by the merge/rebase. The pull request contains three additional 
> commits since the last revision:
> 
>  - JDK-8266396: Allow VSCMD_DEBUG to work as intended
>  - Merge branch 'master' into vscmd-debug
>  - JDK-8266396: Add VSCMD_DEBUG to genVSproperties.bat environment

I committed a better proposal, thanks to Kevin's suggestion, and after seeing 
what it takes to create the `trace.bat` file in my previous comment.

Unfortunately, it's not enough to define `VSCMD_DEBUG` externally. The `cmd /q` 
option (in `win.gradle`) and the redirection of output to `NUL` (in 
`genVSproperties.bat`) conspire to suppress the requested information, 
regardless of the variable's value.

So this commit adds the minimum changes for `VSCMD_DEBUG` to work. Instead of 
redirecting output to `NUL`, it redirects output to a new log file called 
`vcvarsall.log`. Because the trace-level debugging of `VSCMD_DEBUG=3` depends 
on `echo` being enabled, it adds `echo off` and `echo on` commands selectively 
in the OpenJFX batch file instead of using the global `cmd /q` option in the 
Gradle build file.

The table below shows the number of debugging lines that are logged for each 
value of `VSCMD_DEBUG`, both before this pull request (on the `master` branch) 
and after the latest commit (on the pull request branch):

| VSCMD_DEBUG | Level    | Before | After |
|:-----------:|:---------|-------:|------:|
|  undefined  | none     |      0 |    10 |
|      1      | basic    |      0 |    93 |
|      2      | detailed |      0 |   615 |
|      3      | trace    |      2 | 5,832 |

With this change, `VSCMD_DEBUG` actually works as intended. When the build is 
successful, there's just an extra 10-line log file in the build directory. If 
something goes wrong, though, developers can set the environment variable and 
run `gradle help`. The log file will then contain all the information needed to 
fix the error. If they're having trouble figuring it out, they can post the log 
file and ask for help on the mailing list.

-------------

PR: https://git.openjdk.java.net/jfx/pull/488

Reply via email to