CMakeParseImplicitLinkInfo: Fix detection of MSVC link.exe from quoted path

If the path to `link.exe` is not converted to a Windows short path,
then it may be quoted.

Issue: #16138
This commit is contained in:
Brad King
2026-02-24 10:53:44 -05:00
parent c211b5b7f3
commit 8099fe4436
6 changed files with 46 additions and 1 deletions
+1 -1
View File
@@ -119,7 +119,7 @@ function(cmake_parse_implicit_link_info2 text log_var obj_regex)
if("${line}" MATCHES " --with-ld=([^ ]+/${linker})( |$)")
set(linker_tool_fallback "${CMAKE_MATCH_1}")
endif()
elseif("${line}" MATCHES "vs_link.*-- +([^\"]*[/\\](${linker})) ") # cmake -E vs_link_exe
elseif("${line}" MATCHES "vs_link.*-- +\"?([^\"]*[/\\](${linker}))\"? ") # cmake -E vs_link_exe
set(linker_tool "${CMAKE_MATCH_1}")
elseif("${line}" MATCHES "${linker_tool_regex}")
set(linker_tool "${CMAKE_MATCH_2}")
@@ -0,0 +1,19 @@
CMAKE_LANG=C
CMAKE_LINKER=C:/Program Files/Microsoft Visual Studio/18/Professional/VC/Tools/MSVC/14.50.35717/bin/Hostx64/x64/link.exe
CMAKE_C_COMPILER_ABI=
CMAKE_C_COMPILER_AR=
CMAKE_C_COMPILER_ARCHITECTURE_ID=x64
CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN=
CMAKE_C_COMPILER_ID=MSVC
CMAKE_C_COMPILER_LAUNCHER=
CMAKE_C_COMPILER_LOADED=1
CMAKE_C_COMPILER_RANLIB=
CMAKE_C_COMPILER_TARGET=
CMAKE_C_COMPILER_VERSION=19.50.35724.0
CMAKE_C_COMPILER_VERSION_INTERNAL=
CMAKE_HOST_SYSTEM_NAME=Windows
Change Dir: 'C:/DoesNotExist/Temp/CMakeFiles/CMakeTmp'
Run Build Command(s): C:/DoesNotExist/ninja/bin/ninja.exe -v cmTC_42252
[1/2] "C:\Program Files\Microsoft Visual Studio\18\Professional\VC\Tools\MSVC\14.50.35717\bin\Hostx64\x64\cl.exe" /nologo -D_MBCS /DWIN32 /D_WINDOWS /W3 /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /FoCMakeFiles\cmTC_42252.dir\CMakeCCompilerABI.c.obj /FdCMakeFiles\cmTC_42252.dir\ /FS -c "C:\DoesNotExist\CMake\Modules\CMakeCCompilerABI.c"
[2/2] C:\WINDOWS\system32\cmd.exe /C "cd . && "C:\DoesNotExist\CMake\build\bin\cmake.exe" -E vs_link_exe --msvc-ver=1950 --intdir=CMakeFiles\cmTC_42252.dir --rc="C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\rc.exe" --mt="C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\mt.exe" --manifests -- "C:\Program Files\Microsoft Visual Studio\18\Professional\VC\Tools\MSVC\14.50.35717\bin\Hostx64\x64\link.exe" /nologo CMakeFiles\cmTC_42252.dir\CMakeCCompilerABI.c.obj /out:cmTC_42252.exe /implib:cmTC_42252.lib /pdb:cmTC_42252.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
@@ -0,0 +1,19 @@
CMAKE_LANG=CXX
CMAKE_LINKER=C:/Program Files/Microsoft Visual Studio/18/Professional/VC/Tools/MSVC/14.50.35717/bin/Hostx64/x64/link.exe
CMAKE_CXX_COMPILER_ABI=
CMAKE_CXX_COMPILER_AR=
CMAKE_CXX_COMPILER_ARCHITECTURE_ID=x64
CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN=
CMAKE_CXX_COMPILER_ID=MSVC
CMAKE_CXX_COMPILER_LAUNCHER=
CMAKE_CXX_COMPILER_LOADED=1
CMAKE_CXX_COMPILER_RANLIB=
CMAKE_CXX_COMPILER_TARGET=
CMAKE_CXX_COMPILER_VERSION=19.50.35724.0
CMAKE_CXX_COMPILER_VERSION_INTERNAL=
CMAKE_HOST_SYSTEM_NAME=Windows
Change Dir: 'C:/DoesNotExist/Temp/CMakeFiles/CMakeTmp'
Run Build Command(s): C:/DoesNotExist/ninja/bin/ninja.exe -v cmTC_6fe1d
[1/2] "C:\Program Files\Microsoft Visual Studio\18\Professional\VC\Tools\MSVC\14.50.35717\bin\Hostx64\x64\cl.exe" /nologo /TP -D_MBCS /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /FoCMakeFiles\cmTC_6fe1d.dir\CMakeCXXCompilerABI.cpp.obj /FdCMakeFiles\cmTC_6fe1d.dir\ /FS -c "C:\DoesNotExist\CMake\Modules\CMakeCXXCompilerABI.cpp"
[2/2] C:\WINDOWS\system32\cmd.exe /C "cd . && "C:\DoesNotExist\CMake\build\bin\cmake.exe" -E vs_link_exe --msvc-ver=1950 --intdir=CMakeFiles\cmTC_6fe1d.dir --rc="C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\rc.exe" --mt="C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\mt.exe" --manifests -- "C:\Program Files\Microsoft Visual Studio\18\Professional\VC\Tools\MSVC\14.50.35717\bin\Hostx64\x64\link.exe" /nologo CMakeFiles\cmTC_6fe1d.dir\CMakeCXXCompilerABI.cpp.obj /out:cmTC_6fe1d.exe /implib:cmTC_6fe1d.lib /pdb:cmTC_6fe1d.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
@@ -62,6 +62,7 @@ set(targets
sunos5.11_i386-C-GNU-5.5.0 sunos5.11_i386-CXX-GNU-5.5.0 sunos5.11_i386-Fortran-GNU-5.5.0
windows_x86_64-C-MSVC-19.36.32543.0 windows_x86_64-CXX-MSVC-19.36.32543.0
windows_x86_64-C-MSVC-19.38.33130.0-VS windows_x86_64-CXX-MSVC-19.38.33130.0-VS
windows_x86_64-C-MSVC-19.50.35724.0 windows_x86_64-CXX-MSVC-19.50.35724.0
windows_x86_64-C-Clang-17.0.1-MSVC windows_x86_64-CXX-Clang-17.0.1-MSVC windows_x86_64-Fortran-LLVMFlang-17.0.1-MSVC
windows_x86_64-Fortran-LLVMFlang-18.0.0-MSVC
windows_x86_64-C-Intel-2021.9.0.20230302 windows_x86_64-CXX-Intel-2021.9.0.20230302 windows_x86_64-Fortran-Intel-2021.9.0.20230302
@@ -0,0 +1,3 @@
libs=
dirs=
linker_tool=C:/Program Files/Microsoft Visual Studio/18/Professional/VC/Tools/MSVC/14\.50\.35717/bin/Hostx64/x64/link\.exe
@@ -0,0 +1,3 @@
libs=
dirs=
linker_tool=C:/Program Files/Microsoft Visual Studio/18/Professional/VC/Tools/MSVC/14\.50\.35717/bin/Hostx64/x64/link\.exe