Skip to content

Commit 511210a

Browse files
committed
allow consuming meson libname.a libs in MSBuildDeps (conan-io#18557)
* allow consuming meson libname.a libs in MSBuildDeps * fix test in OSX
1 parent 56241b0 commit 511210a

2 files changed

Lines changed: 36 additions & 3 deletions

File tree

conan/tools/microsoft/msbuilddeps.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,17 @@ def _vars_props_file(self, require, dep, name, cpp_info, build):
157157
:return: varfile content
158158
"""
159159

160-
def add_valid_ext(libname):
160+
def add_valid_ext(libname, libdirs=None):
161161
ext = os.path.splitext(libname)[1]
162-
return '%s;' % libname if ext in VALID_LIB_EXTENSIONS else '%s.lib;' % libname
162+
if ext in VALID_LIB_EXTENSIONS:
163+
return f"{libname};"
164+
165+
lib_name = f"{libname}.lib"
166+
if libdirs and not any(lib_name in os.listdir(d) for d in libdirs if os.path.isdir(d)):
167+
meson_name = f"lib{libname}.a"
168+
if any(meson_name in os.listdir(d) for d in libdirs if os.path.isdir(d)):
169+
lib_name = meson_name
170+
return f"{lib_name};"
163171

164172
pkg_placeholder = "$(Conan{}RootFolder)".format(name)
165173

@@ -191,7 +199,7 @@ def join_paths(paths):
191199
res_dirs = join_paths(cpp_info.resdirs)
192200
include_dirs = join_paths(cpp_info.includedirs)
193201
lib_dirs = join_paths(cpp_info.libdirs)
194-
libs = "".join([add_valid_ext(lib) for lib in cpp_info.libs])
202+
libs = "".join([add_valid_ext(lib, cpp_info.libdirs) for lib in cpp_info.libs])
195203
# TODO: Missing objects
196204
system_libs = "".join([add_valid_ext(sys_dep) for sys_dep in cpp_info.system_libs])
197205
definitions = "".join("%s;" % d for d in cpp_info.defines)

test/integration/toolchains/microsoft/test_msbuilddeps.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,3 +218,28 @@ def test_msbuilddeps_relocatable(withdepl):
218218
text = text.replace('\\', '/')
219219
folder = c.current_folder.replace('\\', '/')
220220
assert folder not in text
221+
222+
223+
def test_msbuilddeps_consume_meson():
224+
c = TestClient()
225+
pkga = textwrap.dedent("""
226+
import os
227+
from conan import ConanFile
228+
from conan.tools.files import save
229+
class Pkg(ConanFile):
230+
name = "pkga"
231+
version = "0.1"
232+
package_type = "static-library"
233+
def package(self):
234+
save(self, os.path.join(self.package_folder, "lib", "libpkga.a"), "")
235+
def package_info(self):
236+
self.cpp_info.libs = ["pkga"]
237+
""")
238+
239+
c.save({"pkga/conanfile.py": pkga,
240+
"app/conanfile.py": GenConanfile().with_requires("pkga/0.1")
241+
.with_settings("arch", "build_type")})
242+
c.run("create pkga -s arch=x86_64")
243+
c.run("install app -g MSBuildDeps -s arch=x86_64")
244+
deps = c.load("app/conan_pkga_vars_release_x64.props")
245+
assert "<ConanpkgaLibraries>libpkga.a;</ConanpkgaLibraries>" in deps

0 commit comments

Comments
 (0)