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

Add a test to ensure that #6288 is reverted in v1.22 #6292

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions conans/client/generators/cmake.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ def content(self):
sections.append(CMakeCommonMacros.apple_frameworks_macro)

# Per requirement variables
for name, dep_cpp_info in self.deps_build_info.dependencies:
dep_name = dep_cpp_info.get_name("cmake", name)
for _, dep_cpp_info in self.deps_build_info.dependencies:
dep_name = dep_cpp_info.get_name("cmake")
deps = DepsCppCmake(dep_cpp_info)
dep_flags = cmake_dependency_vars(dep_name, deps=deps)
sections.append(dep_flags)
Expand Down
8 changes: 4 additions & 4 deletions conans/client/generators/cmake_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,14 +190,14 @@ def generate_targets_section(dependencies, generator_name):
' set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CONAN_CMD_C_FLAGS}")\n'
' set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CONAN_CMD_SHARED_LINKER_FLAGS}")\n')
dependencies_dict = {name: dep_info for name, dep_info in dependencies}
for name, dep_info in dependencies:
dep_name = dep_info.get_name(generator_name, name)
use_deps = ["CONAN_PKG::%s" % dependencies_dict[d].get_name(generator_name, d) for d in dep_info.public_deps]
for _, dep_info in dependencies:
dep_name = dep_info.get_name(generator_name)
use_deps = ["CONAN_PKG::%s" % dependencies_dict[d].get_name(generator_name) for d in dep_info.public_deps]
deps = "" if not use_deps else " ".join(use_deps)
section.append(_target_template.format(name="CONAN_PKG::%s" % dep_name, deps=deps,
uname=dep_name.upper(), pkg_name=dep_name))

all_targets = " ".join(["CONAN_PKG::%s" % dep_info.get_name(generator_name, name) for name, dep_info in dependencies])
all_targets = " ".join(["CONAN_PKG::%s" % dep_info.get_name(generator_name) for _, dep_info in dependencies])
section.append(' set(CONAN_TARGETS %s)\n' % all_targets)
section.append('endmacro()\n')
return section
Expand Down
4 changes: 2 additions & 2 deletions conans/client/generators/cmake_multi.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ def _content_type(self, build_type):
sections = []

# Per requirement variables
for name, dep_cpp_info in self.deps_build_info.dependencies:
dep_name = dep_cpp_info.get_name("cmake_multi", name)
for _, dep_cpp_info in self.deps_build_info.dependencies:
dep_name = dep_cpp_info.get_name("cmake_multi")
# Only the specific of the build_type
dep_cpp_info = extend(dep_cpp_info, build_type)
deps = DepsCppCmake(dep_cpp_info)
Expand Down
4 changes: 2 additions & 2 deletions conans/client/generators/cmake_paths.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ def content(self):
# The CONAN_XXX_ROOT variables are needed because the FindXXX.cmake or XXXConfig.cmake
# in a package could have been "patched" with the `cmake.patch_config_paths()`
# replacing absolute paths with CONAN_XXX_ROOT variables.
for name, dep_cpp_info in self.deps_build_info.dependencies:
var_name = "CONAN_{}_ROOT".format(dep_cpp_info.get_name("cmake_paths", name).upper())
for _, dep_cpp_info in self.deps_build_info.dependencies:
var_name = "CONAN_{}_ROOT".format(dep_cpp_info.get_name("cmake_paths").upper())
lines.append('set({} {})'.format(var_name, DepsCppCmake(dep_cpp_info).rootpath))

# We want to prioritize the FindXXX.cmake files:
Expand Down
5 changes: 2 additions & 3 deletions conans/model/build_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,8 @@ def framework_paths(self):
self._framework_paths = self._filter_paths(self.frameworkdirs)
return self._framework_paths

def get_name(self, generator, pkg_name=None):
fallback_name = self.name if generator not in ["cmake", "cmake_multi", "cmake_paths"] else pkg_name # FIXME: Remove in v1.22 (https://github.com/conan-io/conan/issues/6269#issuecomment-570182130)
return self.names.get(generator, fallback_name)
def get_name(self, generator):
return self.names.get(generator, self.name)

# Compatibility for 'cppflags' (old style property to allow decoration)
@deprecation.deprecated(deprecated_in="1.13", removed_in="2.0", details="Use 'cxxflags' instead")
Expand Down
Empty file.
106 changes: 106 additions & 0 deletions conans/test/sentinel/test_cmake_generator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import unittest

import semver

from conans import __version__
from conans.client.generators.cmake import CMakeGenerator
from conans.client.generators.cmake_multi import CMakeMultiGenerator
from conans.errors import ConanException
from conans.model.build_info import CppInfo
from conans.model.conan_file import ConanFile
from conans.model.env_info import EnvValues
from conans.model.ref import ConanFileReference
from conans.test.utils.tools import TestBufferConanOutput


# More info: https://github.com/conan-io/conan/pull/6292
assert semver.compare(__version__, "1.22.0", loose=False) == -1, "File to be removed in v1.22 (tests should pass)"


class _MockSettings(object):
build_type = None
os = None
os_build = None
fields = []

def __init__(self, build_type=None):
self.build_type = build_type

@property
def compiler(self):
raise ConanException("mock: not available")

def constraint(self, _):
return self

def get_safe(self, name):
if name == "build_type":
return self.build_type
return None

def items(self):
return {}


class CMakeGeneratorSentinel(unittest.TestCase):
"""
In v1.21.1 we introduced a workaround to bypass the `cpp_info.name` for the `cmake` generator, that
behavior should be reverted and the recipes in `conan-center-index` should be fixed.

*** These tests HAVE TO pass in v1.22 ***

Rationale
https://github.com/conan-io/conan/issues/6269#issuecomment-570182130

Behavior not to be merged in v1.22
https://github.com/conan-io/conan/pull/6288

This test is here just to be sure that the previous PR doesn't reach 1.22, afterwards, this file should
be removed
"""

def test_conan_version(self):
# Remove this TestCase in v1.22
self.assertEqual(semver.compare(__version__, "1.22.0", loose=False), -1, "Remove this TestCase")

def _generate_conanfile(self, with_names=None):
conanfile = ConanFile(TestBufferConanOutput(), None)
settings = _MockSettings()
settings.build_type = "Debug"
conanfile.initialize(settings, EnvValues())

ref = ConanFileReference.loads("my_pkg/0.1@lasote/stables")
cpp_info = CppInfo("dummy_root_folder1")
cpp_info.name = "alternate_name"
if with_names:
cpp_info.names[with_names] = "alternate_name"
conanfile.deps_cpp_info.update(cpp_info, ref.name)
return conanfile

def test_cmake_generator(self):
conanfile = self._generate_conanfile()
generator = CMakeGenerator(conanfile)
content = generator.content
self.assertIn("CONAN_PKG::alternate_name", content)
self.assertNotIn("CONAN_PKG::my_pkg", content)

def test_cmake_multi_generator(self):
conanfile = self._generate_conanfile()
generator = CMakeMultiGenerator(conanfile)
content = generator.content['conanbuildinfo_multi.cmake']
self.assertIn("CONAN_PKG::alternate_name", content)
self.assertNotIn("CONAN_PKG::my_pkg", content)

def test_cmake_generator_with_names(self):
conanfile = self._generate_conanfile(with_names='cmake')
generator = CMakeGenerator(conanfile)
content = generator.content
self.assertIn("CONAN_PKG::alternate_name", content)
self.assertNotIn("CONAN_PKG::my_pkg", content)

def test_cmake_multi_generator_with_names(self):
conanfile = self._generate_conanfile(with_names='cmake_multi')
generator = CMakeMultiGenerator(conanfile)
content = generator.content['conanbuildinfo_multi.cmake']
self.assertIn("CONAN_PKG::alternate_name", content)
self.assertNotIn("CONAN_PKG::my_pkg", content)