Manual Packaging - ERROR: Failed to find vcvars

Having problems with building or using CEF's C/C++ APIs? This forum is here to help. Please do not post bug reports or feature requests here.

Manual Packaging - ERROR: Failed to find vcvars

Postby Ellesedil » Thu Jan 04, 2018 6:35 pm

When running the manual packaging script, specifically:

Code: Select all
cd /path/to/chromium/src/cef/tools
./make_distrib.sh --ninja-build


It can fail.

-------- Running "msvs_env.bat win32 python combine_libs.py -o "C:\code\chromium_git\chromium\src\cef\binary_distrib\cef_binary_3.3282.1722.g50ca692_windows32\Debug\cef_sandbox.lib" "C:\code\chromium_git\chromium\src\out\Debug_GN_x86\obj\base\base.lib" "C:\code\chromium_git\chromium\src\out\Debug_GN_x86\obj\base\base_static.lib" "C:\code\chromium_git\chromium\src\out\Debug_GN_x86\obj\base\third_party\dynamic_annotations\dynamic_annotations.lib" "C:\code\chromium_git\chromium\src\out\Debug_GN_x86\obj\base\win\pe_image.lib" "C:\code\chromium_git\chromium\src\out\Debug_GN_x86\obj\cef\cef_sandbox.lib" "C:\code\chromium_git\chromium\src\out\Debug_GN_x86\obj\sandbox\win\sandbox.lib"" in "C:\code\chromium_git\chromium\src\cef\tools"...
ERROR: Failed to find vcvars
Traceback (most recent call last):
File "make_distrib.py", line 696, in <module>
os.path.join(dst_dir, 'cef_sandbox.lib'))
File "make_distrib.py", line 279, in combine_libs
run(cmdline, os.path.join(cef_dir, 'tools'))
File "make_distrib.py", line 288, in run
args, cwd=working_dir, env=os.environ, shell=(sys.platform == 'win32'))
File "c:\code\depot_tools\win_tools-2_7_6_bin\python\bin\lib\subprocess.py", line 540, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['msvs_env.bat', 'win32', 'python', 'combine_libs.py', '-o', 'C:\\code\\chromium_git\\chromium\\src\\cef\\binary_distrib\\cef_binary_3.3282.1722.g50ca692_windows32\\Debug\\cef_sandbox.lib', 'C:\\code\\chromium_git\\chromium\\src\\out\\Debug_GN_x86\\obj\\base\\base.lib', 'C:\\code\\chromium_git\\chromium\\src\\out\\Debug_GN_x86\\obj\\base\\base_static.lib', 'C:\\code\\chromium_git\\chromium\\src\\out\\Debug_GN_x86\\obj\\base\\third_party\\dynamic_annotations\\dynamic_annotations.lib', 'C:\\code\\chromium_git\\chromium\\src\\out\\Debug_GN_x86\\obj\\base\\win\\pe_image.lib', 'C:\\code\\chromium_git\\chromium\\src\\out\\Debug_GN_x86\\obj\\cef\\cef_sandbox.lib', 'C:\\code\\chromium_git\\chromium\\src\\out\\Debug_GN_x86\\obj\\sandbox\\win\\sandbox.lib']' returned non-zero exit status 1


Looking around, it looks like the msvs_env.bat file is responsible for finding vsvars. However, it appears to only being looking for vcvars for VS2017 in "%PROGRAMFILES(X86)%\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build", which would thus require that only Professional edition installations of Visual Studio could package files. Visual Studio 2017 Enterprise edition, for instance, installs in "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build". I'm assuming Community Edition may install elsewhere as well.

I duplicated the VS2017 lines with the Professional file path and changed it to look for Enterprise editions of Visual Studio as well and it seems to move past that (into a different error, but related error with combine_libs.py).

Code: Select all
:: Hardcoded list of MSVS paths for VS2017 32-bit builds.
set vcvars="%PROGRAMFILES(X86)%\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvars32.bat"
if exist %vcvars% goto found_vcvars
set vcvars="%PROGRAMFILES%\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvars32.bat"
if exist %vcvars% goto found_vcvars
set vcvars="%PROGRAMFILES(X86)%\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars32.bat"
if exist %vcvars% goto found_vcvars
set vcvars="%PROGRAMFILES%\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars32.bat"
if exist %vcvars% goto found_vcvars

:check_win64
:: Hardcoded list of MSVS paths for VS2017 64-bit builds.
set vcvars="%PROGRAMFILES(X86)%\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvars64.bat"
if exist %vcvars% goto found_vcvars
set vcvars="%PROGRAMFILES%\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvars64.bat"
if exist %vcvars% goto found_vcvars
set vcvars="%PROGRAMFILES(X86)%\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
if exist %vcvars% goto found_vcvars
set vcvars="%PROGRAMFILES%\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
if exist %vcvars% goto found_vcvars


I'm not really sure who is responsible for this file (CEF, Chromium, some other team), or what other changes may need to be made, but this seems to be a potential issue others could encounter when attempting to package up the files after building.
Ellesedil
Newbie
 
Posts: 4
Joined: Mon Dec 18, 2017 5:16 pm

Re: Manual Packaging - ERROR: Failed to find vcvars

Postby magreenblatt » Thu Jan 04, 2018 6:50 pm

Thanks for the report.
magreenblatt
Site Admin
 
Posts: 12406
Joined: Fri May 29, 2009 6:57 pm

Re: Manual Packaging - ERROR: Failed to find vcvars

Postby Ellesedil » Thu Jan 04, 2018 7:32 pm

I think there's another error/assumption in msvs_env.bat. Now, combine_libs.py can't be found.

command:
python combine_libs.py -o C:\code\chromium_git\chromium\src\cef\binary_distrib\cef_binary_3.3282.1722.g50ca692_windows32\Debug\cef_sandbox.lib C:\code\chromium_git\chromium\src\out\Debug_GN_x86\obj\base\base.lib C:\code\chromium_git\chromium\src\out\Debug_GN_x86\obj\base\base_static.lib C:\code\chromium_git\chromium\src\out\Debug_GN_x86\obj\base\third_party\dynamic_annotations\dynamic_annotations.lib C:\code\chromium_git\chromium\src\out\Debug_GN_x86\obj\base\win\pe_image.lib C:\code\chromium_git\chromium\src\out\Debug_GN_x86\obj\cef\cef_sandbox.lib C:\code\chromium_git\chromium\src\out\Debug_GN_x86\obj\sandbox\win\sandbox.lib
python: can't open file 'combine_libs.py': [Errno 2] No such file or directory
Traceback (most recent call last):
File "make_distrib.py", line 697, in <module>
os.path.join(dst_dir, 'cef_sandbox.lib'))
File "make_distrib.py", line 280, in combine_libs
run(cmdline, os.path.join(cef_dir, 'tools'))
File "make_distrib.py", line 289, in run
args, cwd=working_dir, env=os.environ, shell=(sys.platform == 'win32'))
File "c:\code\depot_tools\win_tools-2_7_6_bin\python\bin\lib\subprocess.py", line 540, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['msvs_env.bat', 'win32', 'python', 'combine_libs.py', '-o', 'C:\\code\\chromium_git\\chromium\\src\\cef\\binary_distrib\\cef_binary_3.3282.1722.g50ca692_windows32\\Debug\\cef_sandbox.lib', 'C:\\code\\chromium_git\\chromium\\src\\out\\Debug_GN_x86\\obj\\base\\base.lib', 'C:\\code\\chromium_git\\chromium\\src\\out\\Debug_GN_x86\\obj\\base\\base_static.lib', 'C:\\code\\chromium_git\\chromium\\src\\out\\Debug_GN_x86\\obj\\base\\third_party\\dynamic_annotations\\dynamic_annotations.lib', 'C:\\code\\chromium_git\\chromium\\src\\out\\Debug_GN_x86\\obj\\base\\win\\pe_image.lib', 'C:\\code\\chromium_git\\chromium\\src\\out\\Debug_GN_x86\\obj\\cef\\cef_sandbox.lib', 'C:\\code\\chromium_git\\chromium\\src\\out\\Debug_GN_x86\\obj\\sandbox\\win\\sandbox.lib']' returned non-zero exit status 2


As per the build instructions, I've put all of my cef-related files into C:\code. However, it appears to be msvs_env.bat that is being passed the call to run combine_libs.py. Well, my Visual Studio repository settings are different than C:\code, so the working directory appears to be getting changed to the repo that Visual Studio knows about.

I added a few lines of code to msvs_env.bat to double-check.
Code: Select all
:found_vcvars
echo vcvars:
echo %vcvars%
if not %vcvars% == "none" call %vcvars%

echo PATH:
echo %PATH%
echo ""
echo ""
echo %cd%


This results in:
vcvars:
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars32.bat"
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.5.1
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x86'
PATH:
{Lots of set paths here}
""
""
C:\Users\[currentuser]\Source


Since that path is what Visual Studio is using for source control integration (for a completely unrelated project), it seems to be changing to that directory and attempting to kick off combine_libs.py.

I'm going to force msvs_env.bat to change back to a hard-coded string that represents the CEF directory for my purposes, but it probably needs to be a bit more intelligent to know where to find the directory that cef, and specifically combine_libs.py, resides in.
Ellesedil
Newbie
 
Posts: 4
Joined: Mon Dec 18, 2017 5:16 pm

Re: Manual Packaging - ERROR: Failed to find vcvars

Postby magreenblatt » Thu Jan 04, 2018 8:37 pm

Sounds like you're having the problem fixed by https://bitbucket.org/chromiumembedded/ ... rking/diff
magreenblatt
Site Admin
 
Posts: 12406
Joined: Fri May 29, 2009 6:57 pm

Re: Manual Packaging - ERROR: Failed to find vcvars

Postby Ellesedil » Thu Jan 04, 2018 9:26 pm

That's great, thanks!
Ellesedil
Newbie
 
Posts: 4
Joined: Mon Dec 18, 2017 5:16 pm


Return to Support Forum

Who is online

Users browsing this forum: Google [Bot] and 38 guests