Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Regression of other extensions for Visual Studio (#5316) #5319

Merged
4 changes: 3 additions & 1 deletion conans/client/build/visual_environment.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from conans.client.build.compiler_flags import build_type_define, build_type_flags, format_defines, \
include_path_option, parallel_compiler_cl_flag, visual_runtime
from conans.client.build.cppstd_flags import cppstd_flag, cppstd_from_settings
from conans.tools import valid_lib_extensions


class VisualStudioBuildEnvironment(object):
Expand Down Expand Up @@ -78,7 +79,8 @@ def _get_link_list(self):
# FIXME: Conan 2.0. The libs are being added twice to visual_studio
# one in the conanbuildinfo.props, and the other in the env-vars
def format_lib(lib):
return lib if os.path.splitext(lib)[1] else '%s.lib' % lib
ext = os.path.splitext(lib)[1]
return lib if ext in valid_lib_extensions() else '%s.lib' % lib

ret = [flag for flag in self.link_flags] # copy
ret.extend([format_lib(lib) for lib in self.libs])
Expand Down
7 changes: 6 additions & 1 deletion conans/client/generators/visualstudio.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

from conans.model import Generator
from conans.paths import BUILD_INFO_VISUAL_STUDIO
from conans.tools import valid_lib_extensions


class VisualStudioGenerator(Generator):
Expand Down Expand Up @@ -65,13 +66,17 @@ def filename(self):
return BUILD_INFO_VISUAL_STUDIO

def _format_properties(self, build_info, condition):
def has_valid_ext(lib):
ext = os.path.splitext(lib)[1]
return ext in valid_lib_extensions()

fields = {
'condition': condition,
'bin_dirs': "".join("%s;" % p for p in build_info.bin_paths),
'res_dirs': "".join("%s;" % p for p in build_info.res_paths),
'include_dirs': "".join("%s;" % p for p in build_info.include_paths),
'lib_dirs': "".join("%s;" % p for p in build_info.lib_paths),
'libs': "".join(['%s.lib;' % lib if not os.path.splitext(lib)[1] # No extension
'libs': "".join(['%s.lib;' % lib if not has_valid_ext(lib)
else '%s;' % lib for lib in build_info.libs]),
'definitions': "".join("%s;" % d for d in build_info.defines),
'compiler_flags': " ".join(build_info.cxxflags + build_info.cflags),
Expand Down
6 changes: 5 additions & 1 deletion conans/client/tools/files.py
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,10 @@ def _path_equals(path1, path2):
return path1 == path2


def valid_lib_extensions():
uilianries marked this conversation as resolved.
Show resolved Hide resolved
return (".so", ".lib", ".a", ".dylib", ".bc")


def collect_libs(conanfile, folder=None):
if not conanfile.package_folder:
return []
Expand All @@ -321,7 +325,7 @@ def collect_libs(conanfile, folder=None):
files = os.listdir(lib_folder)
for f in files:
name, ext = os.path.splitext(f)
if ext in (".so", ".lib", ".a", ".dylib", ".bc"):
if ext in valid_lib_extensions():
if ext != ".lib" and name.startswith("lib"):
name = name[3:]
if name in result:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,3 +86,49 @@ def valid_xml_test(self, use_toolset):
"Project=\"conanbuildinfo_release_x64_v141.props\"/>", content_multi)

os.unlink('conanbuildinfo_multi.props')

def addional_dependencies_test(self):

def validate_additional_dependencies(libname, additional_dep):
tempdir = temp_folder()
with chdir(tempdir):
conanfile = ConanFile(TestBufferConanOutput(), None)
conanfile.initialize(Settings({}), EnvValues())

ref = ConanFileReference.loads("MyPkg/0.1@user/testing")
cpp_info = CppInfo("dummy_root_folder1")
cpp_info.libs = [libname]
conanfile.deps_cpp_info.update(cpp_info, ref.name)

settings = Settings.loads(default_settings_yml)
settings.os = "Windows"
settings.arch = "x86_64"
settings.build_type = "Release"
settings.compiler = "Visual Studio"
settings.compiler.version = "15"
settings.compiler.runtime = "MD"
settings.compiler.toolset = "v141"
conanfile.settings = settings

generator = VisualStudioMultiGenerator(conanfile)
generator.output_path = ""
content = generator.content

self.assertIn('conanbuildinfo_release_x64_v141.props', content.keys())

content_release = content['conanbuildinfo_release_x64_v141.props']
self.assertIn("<AdditionalDependencies>"
"{};%(AdditionalDependencies)"
"</AdditionalDependencies>".format(additional_dep), content_release)

# regular
validate_additional_dependencies("foobar", "foobar.lib")

# .lib extension
validate_additional_dependencies("blah.lib", "blah.lib")

# extra dot dot
validate_additional_dependencies("foo.v12.core", "foo.v12.core.lib")

# extra dot dot + .lib
validate_additional_dependencies("foo.v12.core.lib", "foo.v12.core.lib")
26 changes: 26 additions & 0 deletions conans/test/unittests/client/generators/visual_studio_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,29 @@ def multi_config_test(self):
self.assertIn(condition_debug, content)
self.assertIn(condition_release, content)
self.assertIn(condition_custom, content)

def addional_dependencies_test(self):

def validate_additional_dependencies(lib, additional_dep):
conanfile = ConanFile(TestBufferConanOutput(), None)
conanfile.initialize(Settings({}), EnvValues())
ref = ConanFileReference.loads("MyPkg/0.1@user/testing")
cpp_info = CppInfo("dummy_root_folder1")
cpp_info.libs = [lib]
conanfile.deps_cpp_info.update(cpp_info, ref.name)
generator = VisualStudioGenerator(conanfile)
self.assertIn("<AdditionalDependencies>"
"{};%(AdditionalDependencies)"
"</AdditionalDependencies>".format(additional_dep), generator.content)

# regular
validate_additional_dependencies("foobar", "foobar.lib")
uilianries marked this conversation as resolved.
Show resolved Hide resolved

# .lib extension
validate_additional_dependencies("blah.lib", "blah.lib")

# extra dot dot
validate_additional_dependencies("foo.v12.core", "foo.v12.core.lib")

# extra dot dot + .lib
validate_additional_dependencies("foo.v12.core.lib", "foo.v12.core.lib")
1 change: 1 addition & 0 deletions conans/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ def get(*args, **kwargs):
which = tools_files.which
unix2dos = tools_files.unix2dos
dos2unix = tools_files.dos2unix
valid_lib_extensions = tools_files.valid_lib_extensions
memsharded marked this conversation as resolved.
Show resolved Hide resolved


def unzip(*args, **kwargs):
Expand Down