microsoft / vcpkg

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

vcpkg_execute_required_process not setting OUTPUT_VARIABLE? #41104

Open matthew-wozniczka opened 1 week ago

matthew-wozniczka commented 1 week ago

Discussed in https://github.com/microsoft/vcpkg/discussions/39131

Originally posted by **matthew-wozniczka** June 4, 2024 I've made a stackoverflow question about this, so I thought I'd just link it instead of repeating the question here: https://stackoverflow.com/questions/78577338/vcpkg-execute-required-process-not-setting-output-variable Since I'm very new to cmake/vcpkg, I assume I'm making some simple mistake, but my coworkers who have a bit more experience with them couldn't see the problem. Edit: I've copied the question from SO below I'm not very familiar w/ cmake or vcpkg, but I've been assigned to work on a task to build some libraries using a tool which wraps the latter. My goal, in the interests of perhaps helping me solve this XY problem, is to follow the directions from https://unicode-org.github.io/icu/userguide/icu4c/build.html#how-to-build-and-install-on-windows-with-cygwin, which tell you to run vcvars.bat before running configure. My constraint is that I have to implement the build process from within a vcpkg 'port' .cmake file, so I can't simply CALL the batch file directly to affect vcpkg/cmake's environment. My idea was to run another shell script which runs vcvars.bat & then echo the relevant details to stdout, and to have cmake parse that output & explicitly set the environment based on that. My new script which implements that idea, called GetVCVars.bat looks like ``` @ECHO off REM Run the VS batch script (the path to which should be the first & only parameter provided to this script) to set up the environment CALL %* >NUL IF ERRORLEVEL 1 ( ECHO %* failed with error %ERRORLEVEL% 1>&2 EXIT /B 1 ) REM Print out the relevant environment variables to stdout SET | FINDSTR /R /X /C:"PATH=.*" /C:"INCLUDE=.*" /C:"LIB=.*" /C:"LIBPATH=.*" /C:"PLATFORM=.*" /C:"VS[0-9]*COMNTOOLS=.*" EXIT /B 0 ``` The relevant fragment of associated cmake logic is ``` # Output is of the form of key=value, one variable per line set(VCVARS_SCRIPT "${VCVARS_SCRIPT_DIR}/../../../../../../Auxiliary/Build/vcvars${SIMBA_TARGET_BITNESS}.bat") vcpkg_execute_required_process( COMMAND cmd /c GetVCVars.bat "${VCVARS_SCRIPT}" WORKING_DIRECTORY ${CURRENT_PORT_DIR} LOGNAME GetVCVars-${TARGET_TRIPLET}-${VCPKG_BUILD_TYPE} OUTPUT_VARIABLE VC_VARS ) message(STATUS "VC_VARS = '${VC_VARS}'") # Iterate over each line/variable definition string(REGEX MATCHALL "[^\r\n]+" VC_VAR_DEFS "${VC_VARS}") foreach(VC_VAR_DEF IN LISTS VC_VAR_DEFS) if(NOT ${VC_VAR_DEF} MATCHES "^([^=]+)=(.*)$") message(FATAL_ERROR "Unexpected line returned from GetVCVars.bat: ${VC_VAR_DEF}") endif() message(STATUS "Setting '${CMAKE_MATCH_1}' to '${CMAKE_MATCH_2}'") set(ENV{${CMAKE_MATCH_1}} ${CMAKE_MATCH_2}) endforeach() ``` The weird thing is, that when I test this, that I get the output -- VC_VARS = '' (Which I interpret to mean that the output variable I told vcpkg_execute_required_process to fill w/ the stdout of the invoked command was either not set, or set to an empty string???), even though a file called GetVCVars-build_configuration-release-out.log gets created with the content ``` INCLUDE=C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\include;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\ATLMFC\include;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\VS\include;C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\shared;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\winrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\cppwinrt;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\include;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\ATLMFC\include;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\VS\include;C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\shared;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\winrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\cppwinrt;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um LIB=C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\ATLMFC\lib\x64;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\lib\x64;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\ucrt\x64;C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\ATLMFC\lib\x64;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\lib\x64;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\ucrt\x64;C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64 LIBPATH=C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\ATLMFC\lib\x64;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\lib\x64;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\lib\x86\store\references;C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.22621.0;C:\Program Files (x86)\Windows Kits\10\References\10.0.22621.0;C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\ATLMFC\lib\x64;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\lib\x64;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\lib\x86\store\references;C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.22621.0;C:\Program Files (x86)\Windows Kits\10\References\10.0.22621.0;C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319 VS170COMNTOOLS=C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\ PATH=C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\bin\HostX64\x64;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\VC\VCPackages;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\bin\Roslyn;C:\Program Files (x86)\Microsoft Visual Studio\Shared\Common\VSPerfCollectionTools\vs2019\\x64;C:\Program Files (x86)\Microsoft Visual Studio\Shared\Common\VSPerfCollectionTools\vs2019\;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64\;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Team Tools\DiagnosticsHub\Collector;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\Extensions\Microsoft\CodeCoverage.Console;C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\\x64;C:\Program Files (x86)\Windows Kits\10\bin\\x64;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\\MSBuild\Current\Bin\amd64;C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\;C:/bitbucket/packagey/vcpkg/downloads/tools/python/python-3.11.5-x64;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\bin\HostX64\x64;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\VC\VCPackages;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\bin\Roslyn;C:\Program Files (x86)\Microsoft Visual Studio\Shared\Common\VSPerfCollectionTools\vs2019\\x64;C:\Program Files (x86)\Microsoft Visual Studio\Shared\Common\VSPerfCollectionTools\vs2019\;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64\;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Team Tools\DiagnosticsHub\Collector;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\Extensions\Microsoft\CodeCoverage.Console;C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\\x64;C:\Program Files (x86)\Windows Kits\10\bin\\x64;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\\MSBuild\Current\Bin\amd64;C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\;C:\bitbucket\packagey\vcpkg\downloads\tools\powershell-core-7.2.16-windows;C:\Program Files\OpenLogic\jdk-11.0.21.9-hotspot\bin;C:\Program Files\OpenLogic\jdk-8.0.392.08-hotspot\bin;C:\Program Files\Python312\Scripts\;C:\Program Files\Python312\;C:\Program Files\Eclipse Adoptium\jdk-11.0.21.9-hotspot\bin;C:\Program Files\Eclipse Adoptium\jdk-17.0.8.101-hotspot\bin;C:\Program Files (x86)\Eclipse Adoptium\jdk-8.0.392.8-hotspot\bin;C:\Program Files\Eclipse Adoptium\jdk-8.0.392.8-hotspot\bin;C:\Program Files\Eclipse Adoptium\jre-8.0.392.8-hotspot\bin;C:\Program Files\Eclipse Adoptium\jre-17.0.8.101-hotspot\bin;C:\Program Files\Eclipse Adoptium\jre-11.0.21.9-hotspot\bin;C:\Program Files (x86)\Eclipse Adoptium\jre-8.0.392.8-hotspot\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\dotnet\;C:\Program Files\Perforce\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\Microsoft SQL Server\150\Tools\Binn\;C:\Program Files\PuTTY\;C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files (x86)\Windows Kits\10\Microsoft Application Virtualization\Sequencer\;C:\Program Files\Git\cmd;C:\Program Files\Amazon\AWSCLIV2\;C:\Users\matthew.wozniczka\AppData\Local\Microsoft\WindowsApps;C:\ripgrep-13.0.0-i686-pc-windows-msvc;C:\Program Files\OpenLogic\jdk-11.0.21.9-hotspot\bin\server;C:\Users\matthew.wozniczka\.dotnet\tools;C:\Program Files (x86)\Dr. Memory\bin\;C:\Users\matthew.wozniczka\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\matthew.wozniczka\AppData\Local\GitHubDesktop\bin;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\VC\Linux\bin\ConnectionManagerExe;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\vcpkg;C:/bitbucket/packagey/vcpkg/downloads/tools/ninja/1.10.2-windows;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\VC\Linux\bin\ConnectionManagerExe;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\vcpkg ``` (i.e. what I expected) I don't understand what I've done wrong (https://learn.microsoft.com/en-us/vcpkg/maintainers/functions/vcpkg_execute_required_process#output_variable)?
dg0yt commented 6 days ago

Isn't this already fixed by #39445? It also added a test.

matthew-wozniczka commented 5 days ago

Yeah, looks like it. I haven't tried it since I first reported in https://github.com/microsoft/vcpkg/discussions/39131, should have made it an issue back then

jimwang118 commented 5 days ago

Please test the latest vcpkg, and if the problem has been solved, please close this issue.