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

fix XcodeDeps in editable root path #12841

Merged
merged 2 commits into from
Jan 5, 2023
Merged
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
9 changes: 7 additions & 2 deletions conan/tools/apple/xcodedeps.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ def _merged_vars(name):
merged = [var for cpp_info in transitive_cpp_infos for var in getattr(cpp_info, name)]
return list(OrderedDict.fromkeys(merged).keys())

# TODO: Investigate if paths can be made relative to "root" folder
fields = {
'pkg_name': pkg_name,
'comp_name': comp_name,
Expand Down Expand Up @@ -270,8 +271,10 @@ def _transitive_components(component):
transitive_internal = list(OrderedDict.fromkeys(transitive_internal).keys())
transitive_external = list(OrderedDict.fromkeys(transitive_external).keys())

# In case dep is editable and package_folder=None
pkg_folder = dep.package_folder or dep.recipe_folder
component_content = self.get_content_for_component(dep_name, comp_name,
dep.package_folder,
pkg_folder,
transitive_internal,
transitive_external)
include_components_names.append((dep_name, comp_name))
Expand All @@ -289,7 +292,9 @@ def _transitive_components(component):
public_deps.append((_format_name(d.ref.name),) * 2)

required_components = dep.cpp_info.required_components if dep.cpp_info.required_components else public_deps
root_content = self.get_content_for_component(dep_name, dep_name, dep.package_folder, [dep.cpp_info],
# In case dep is editable and package_folder=None
pkg_folder = dep.package_folder or dep.recipe_folder
root_content = self.get_content_for_component(dep_name, dep_name, pkg_folder, [dep.cpp_info],
required_components)
include_components_names.append((dep_name, dep_name))
result.update(root_content)
Expand Down
13 changes: 9 additions & 4 deletions conans/test/integration/layout/test_layout_paths.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import os
import textwrap

from conans.test.assets.genconanfile import GenConanfile
Expand All @@ -6,6 +7,7 @@

def test_editable_layout_paths():
# https://github.com/conan-io/conan/issues/12521
# https://github.com/conan-io/conan/issues/12839
c = TestClient()
dep = textwrap.dedent("""
import os
Expand All @@ -21,13 +23,16 @@ def layout(self):
"pkg/conanfile.py": GenConanfile("pkg", "0.1").with_settings("build_type", "arch")
.with_requires("dep/0.1")
.with_generator("CMakeDeps")
.with_generator("PkgConfigDeps")})
.with_generator("PkgConfigDeps")
.with_generator("XcodeDeps")})
c.run("editable add dep dep/0.1")
c.run("install pkg")
c.run("install pkg -s arch=x86_64")
# It doesn't crash anymore
assert "dep/0.1:5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9 - Editable" in c.out
arch = c.get_default_host_profile().settings['arch']
data = c.load(f"dep-release-{arch}-data.cmake")
data = c.load(f"dep-release-x86_64-data.cmake")
assert 'set(dep_INCLUDE_DIRS_RELEASE "${dep_PACKAGE_FOLDER_RELEASE}/include")' in data
pc = c.load("dep.pc")
assert "includedir1=${prefix}/include" in pc
xcode = c.load("conan_dep_dep_release_x86_64.xcconfig")
dep_path = os.path.join(c.current_folder, "dep")
assert f"PACKAGE_ROOT_dep[config=Release][arch=x86_64][sdk=*] = {dep_path}" in xcode