From 82c47f9263af4e673c1b6bf8aa3bd5e5bc4dc3e3 Mon Sep 17 00:00:00 2001 From: "Laverdure, Alexandre" Date: Tue, 23 Sep 2025 10:15:53 -0400 Subject: [PATCH 1/2] Fix: Correct semicolon handling in MSVC environment variable stacking --- conan/tools/microsoft/msbuilddeps.py | 40 +++++++++++----------------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/conan/tools/microsoft/msbuilddeps.py b/conan/tools/microsoft/msbuilddeps.py index 50fcc90a0b1..dc0bb7d9d00 100644 --- a/conan/tools/microsoft/msbuilddeps.py +++ b/conan/tools/microsoft/msbuilddeps.py @@ -1,4 +1,4 @@ -import fnmatch +import fnmatch import os import re import textwrap @@ -11,7 +11,7 @@ from conan.internal.api.install.generators import relativize_path from conan.internal.model.dependencies import get_transitive_requires from conan.tools.microsoft.visual import msvc_platform_from_arch -from conan.internal.util.files import load, save +from conans.util.files import load, save VALID_LIB_EXTENSIONS = (".so", ".lib", ".a", ".dylib", ".bc") @@ -64,22 +64,22 @@ class MSBuildDeps: - $(Conan{{name}}IncludeDirectories)%(AdditionalIncludeDirectories) - $(Conan{{name}}PreprocessorDefinitions)%(PreprocessorDefinitions) + $(Conan{{name}}IncludeDirectories);%(AdditionalIncludeDirectories) + $(Conan{{name}}PreprocessorDefinitions);%(PreprocessorDefinitions) $(Conan{{name}}CompilerFlags) %(AdditionalOptions) - $(Conan{{name}}LibraryDirectories)%(AdditionalLibraryDirectories) - $(Conan{{name}}Libraries)%(AdditionalDependencies) - $(Conan{{name}}SystemLibs)%(AdditionalDependencies) + $(Conan{{name}}LibraryDirectories);%(AdditionalLibraryDirectories) + $(Conan{{name}}Libraries);%(AdditionalDependencies) + $(Conan{{name}}SystemLibs);%(AdditionalDependencies) $(Conan{{name}}LinkerFlags) %(AdditionalOptions) - $(Conan{{name}}IncludeDirectories)%(AdditionalIncludeDirectories) + $(Conan{{name}}IncludeDirectories);%(AdditionalIncludeDirectories) - $(Conan{{name}}IncludeDirectories)%(AdditionalIncludeDirectories) - $(Conan{{name}}PreprocessorDefinitions)%(PreprocessorDefinitions) + $(Conan{{name}}IncludeDirectories);%(AdditionalIncludeDirectories) + $(Conan{{name}}PreprocessorDefinitions);%(PreprocessorDefinitions) {% else %} @@ -157,17 +157,9 @@ def _vars_props_file(self, require, dep, name, cpp_info, build): :return: varfile content """ - def add_valid_ext(libname, libdirs=None): + def add_valid_ext(libname): ext = os.path.splitext(libname)[1] - if ext in VALID_LIB_EXTENSIONS: - return f"{libname};" - - lib_name = f"{libname}.lib" - if libdirs and not any(lib_name in os.listdir(d) for d in libdirs if os.path.isdir(d)): - meson_name = f"lib{libname}.a" - if any(meson_name in os.listdir(d) for d in libdirs if os.path.isdir(d)): - lib_name = meson_name - return f"{lib_name};" + return '%s;' % libname if ext in VALID_LIB_EXTENSIONS else '%s.lib;' % libname pkg_placeholder = "$(Conan{}RootFolder)".format(name) @@ -187,7 +179,7 @@ def join_paths(paths): rel = full_path[len(root_folder)+1:] full_path = ("%s/%s" % (pkg_placeholder, rel)) ret.append(full_path) - return "".join("{};".format(e) for e in ret) + return "".join("{};".format(e) for e in ret).removesuffix(";") root_folder = dep.recipe_folder if dep.package_folder is None else dep.package_folder root_folder = escape_path(root_folder) @@ -199,10 +191,10 @@ def join_paths(paths): res_dirs = join_paths(cpp_info.resdirs) include_dirs = join_paths(cpp_info.includedirs) lib_dirs = join_paths(cpp_info.libdirs) - libs = "".join([add_valid_ext(lib, cpp_info.libdirs) for lib in cpp_info.libs]) + libs = "".join([add_valid_ext(lib) for lib in cpp_info.libs]).removesuffix(";") # TODO: Missing objects - system_libs = "".join([add_valid_ext(sys_dep) for sys_dep in cpp_info.system_libs]) - definitions = "".join("%s;" % d for d in cpp_info.defines) + system_libs = "".join([add_valid_ext(sys_dep) for sys_dep in cpp_info.system_libs]).removesuffix(";") + definitions = "".join("%s;" % d for d in cpp_info.defines).removesuffix(";") compiler_flags = " ".join(cpp_info.cxxflags + cpp_info.cflags) linker_flags = " ".join(cpp_info.sharedlinkflags + cpp_info.exelinkflags) From 02cf752c2a90405693e8c2acaa9b5b2ccbd9f0df Mon Sep 17 00:00:00 2001 From: alexandrelaverdure-eaton <149598791+alexandrelaverdure-eaton@users.noreply.github.com> Date: Wed, 24 Sep 2025 10:30:25 -0400 Subject: [PATCH 2/2] Update conan/tools/microsoft/msbuilddeps.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Abril Rincón Blanco <5364255+AbrilRBS@users.noreply.github.com> --- conan/tools/microsoft/msbuilddeps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conan/tools/microsoft/msbuilddeps.py b/conan/tools/microsoft/msbuilddeps.py index dc0bb7d9d00..ae401395c8f 100644 --- a/conan/tools/microsoft/msbuilddeps.py +++ b/conan/tools/microsoft/msbuilddeps.py @@ -179,7 +179,7 @@ def join_paths(paths): rel = full_path[len(root_folder)+1:] full_path = ("%s/%s" % (pkg_placeholder, rel)) ret.append(full_path) - return "".join("{};".format(e) for e in ret).removesuffix(";") + return ";".join(ret) root_folder = dep.recipe_folder if dep.package_folder is None else dep.package_folder root_folder = escape_path(root_folder)