Merge topic 'msvc-embed-manifest-direct' into release-3.27

8a07bcc149 MSVC: Restore support for non-incremental linking without 'rc' in PATH

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !8613
This commit is contained in:
Brad King
2023-07-07 14:28:26 +00:00
committed by Kitware Robot

View File

@@ -2502,6 +2502,26 @@ int cmVSLink::LinkIncremental()
int cmVSLink::LinkNonIncremental()
{
// The MSVC link tool expects 'rc' to be in the PATH if it needs to embed
// manifests, but the user might explicitly set 'CMAKE_RC_COMPILER' instead.
// Add its location as a fallback at the end of PATH.
if (cmSystemTools::FileIsFullPath(this->RcPath)) {
std::string rcDir = cmSystemTools::GetFilenamePath(this->RcPath);
#ifdef _WIN32
std::replace(rcDir.begin(), rcDir.end(), '/', '\\');
char const pathSep = ';';
#else
char const pathSep = ':';
#endif
cm::optional<std::string> path = cmSystemTools::GetEnvVar("PATH");
if (path) {
path = cmStrCat(*path, pathSep, rcDir);
} else {
path = rcDir;
}
cmSystemTools::PutEnv(cmStrCat("PATH=", *path));
}
// Sort out any manifests.
if (this->LinkGeneratesManifest || !this->UserManifests.empty()) {
std::string opt =