microsoft / vcpkg

C++ Library Manager for Windows, Linux, and MacOS
MIT License
23.42k stars 6.48k forks source link

[omniorb] Build of ANYTHING fails early on with "vcvarsall.bat returned 255" #38831

Open j-xella opened 6 months ago

j-xella commented 6 months ago

Operating system

WIN 10 Enterprise 22H2

Compiler

VS 2022

Steps to reproduce the behavior

vcpkg install omniorb:x64-windows --debug

Failure logs

...
[DEBUG] Found path: C:\Program Files\PowerShell\7\pwsh.exe
[DEBUG] 1006: CreateProcessW("C:\Program Files\PowerShell\7\pwsh.exe" --version)
[DEBUG] 1006: cmd_execute_and_stream_data() returned 0 after  1105716 us
[DEBUG] command line: cmd /d /c "C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary/Build\vcvarsall.bat" -vcvars_ver=14.36.32532 amd64   2>&1 <NUL  & echo cdARN4xjKueKScMy9C6H & set
[DEBUG] 1007: CreateProcessW(cmd /d /c "C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary/Build\vcvarsall.bat" -vcvars_ver=14.36.32532 amd64   2>&1 <NUL  & echo cdARN4xjKueKScMy9C6H & set)
[DEBUG] 1007: cmd_execute_and_stream_data() returned 255 after  2802303 us
[DEBUG] **********************************************************************
** Visual Studio 2022 Developer Command Prompt v17.6.13
** Copyright (c) 2022 Microsoft Corporation
**********************************************************************

error: while trying to get a Visual Studio environment, vcvarsall.bat returned 255
[DEBUG] D:\a\_work\1\s\src\vcpkg\base\system.process.cpp(1284):
[DEBUG] Time in subprocesses: 4694304us
[DEBUG] Time in parsing JSON: 462us
[DEBUG] Time in JSON reader: 855us
[DEBUG] Time in filesystem: 129544us
[DEBUG] Time in loading ports: 119141us
[DEBUG] Exiting after 4.9 s (4856342us)

Additional context

There were similar issues reported earlier:

However, this time it is with newer version of compilers, so maybe the problem is somewhere else?

The --debug invocation gives a command line that failed. When I replay that command

cmd /d /c "C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary/Build\vcvarsall.bat" -vcvars_ver=14.36.32532 amd64   2>&1 <NUL  & echo cdARN4xjKueKScMy9C6H & set

in a new command window, I don't see any errors, just a list of environment variables:

**********************************************************************
** Visual Studio 2022 Developer Command Prompt v17.6.13
** Copyright (c) 2022 Microsoft Corporation
**********************************************************************
cdARN4xjKueKScMy9C6H
ALLUSERSPROFILE=C:\ProgramData
APClientType=FAT
APDesktop=C:\Users\XXX\Desktop
APPDATA=C:\Users\XXX\AppData\Roaming
...

Versions:

StarGate-One commented 6 months ago

cmd /d /c "C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary/Build\vcvarsall.bat" -vcvars_ver=14.36.32532 amd64 2>&1 <NUL & echo cdARN4xjKueKScMy9C6H

One issue I see is the path - C:\Program Files (x86) is where Visual Studio 2019 and older reside as they were 32-bit (x86) programs. Visual Studio 2022 is 64-bit (x64) and should be found in C:\Program Files, that is unless the Visual Studio Installer was over-ridden to something other than the default when VS2022 was installed.

j-xella commented 6 months ago

One issue I see is the path - C:\Program Files (x86) is where Visual Studio 2019 and older reside as they were 32-bit (x86) programs. Visual Studio 2022 is 64-bit (x64) and should be found in C:\Program Files, that is unless the Visual Studio Installer was over-ridden to something other than the default when VS2022 was installed.

I have no control over the location of VS - I request it and it gets installed from a centralized package repository in our organisation. That being said, installation location should not be of importance, right? Otherwise, VS 2022 seems to work OK, even when being installed in a wrong folder.

github-actions[bot] commented 5 months ago

This is an automated message. Per our repo policy, stale issues get closed if there has been no activity in the past 28 days. The issue will be automatically closed in 14 days. If you wish to keep this issue open, please add a new comment.

Filyus commented 5 months ago

I'm not sure, but it seems the problem is the length limit of the command line arguments in Windows, it is equal to 8191 characters. Command prompt (Cmd. exe) command-line string limitation

It appears that due to the large number of paths in the user PATH and the system PATH environment variables, vcvarsall.bat cannot execute successfully. You can try to remove unnecessary and duplicate paths in the user PATH that are already in the system PATH.

Also, there another length limitations: What is the maximum length of an environment variable?

The theoretical maximum length of an environment variable is around 32760 characters. All environment variables must live together in a single environment block, which itself has a limit of 32767 characters.

You can test it youself with the following bat file:

set VSCMD_DEBUG=0
set VCVARSALL_PATH=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build
call "%VCVARSALL_PATH%\vcvarsall.bat" -vcvars_ver=14.33.31629 amd64 

There must be two errors printed (about the length and about a command syntax). Also, you can check the size of a generateddd_vsdevcmd17_preinit_env.log file. In my case it is 20.4 KB in size.

Filyus commented 5 months ago

But actually the problem probably with a VSINSTALLDIR environment variable, it must be like this: C:\Program Files\Microsoft Visual Studio\2022\Community\

Check list:

Filyus commented 5 months ago

Now I can successfully run vcvarsall.bat manually, but vcpkg install still shows the error: error: while trying to get a Visual Studio environment, vcvarsall.bat returned 255

vcpkg runs vcvarsall.bat -vcvars_ver=14.33.31629 amd64 as in the above bat file and there no exit /B 255 in the vcvarsall.bat, so probably the error is somewhere else.

Filyus commented 5 months ago

In my case, updating Visual Studio 2022 Community fixes the problem!

Also, I removed extra Build Tools for Visual Studio 2022 (2).