diff options
author | ThiƩbaud Weksteen <tweek@google.com> | 2020-08-05 14:27:32 +0200 |
---|---|---|
committer | ThiƩbaud Weksteen <tweek@google.com> | 2020-08-06 15:17:42 +0200 |
commit | 2f628baeaeb5e4c353df53040cc161b398a2ce1d (patch) | |
tree | 2dbbbcff984bb4d63fa689f648fae750dc2f2aec /rust/project_json.go | |
parent | c8105108980fce1c0bf56c30630b84205aa57746 (diff) |
rust: handle modules with same crate_name
crate_name do not need to be unique. A library may depend on two
different versions of the same crate. Use the module name instead of the
crate name when indexing the modules for rust-project.json.
Test: SOONG_GEN_RUST_PROJECT=1 m nothing
Bug: 162896400
Change-Id: I8af9115b106fda2bed5b9fe96059cc29a33ac247
Diffstat (limited to 'rust/project_json.go')
-rw-r--r-- | rust/project_json.go | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/rust/project_json.go b/rust/project_json.go index 41dd194ee..5c3d785d6 100644 --- a/rust/project_json.go +++ b/rust/project_json.go @@ -77,15 +77,15 @@ func mergeDependencies(ctx android.SingletonContext, project *rustProjectJson, //TODO(tweek): The stdlib dependencies do not appear here. We need to manually add them. ctx.VisitDirectDeps(module, func(child android.Module) { - childId, childName, ok := appendLibraryAndDeps(ctx, project, knownCrates, child) + childId, childCrateName, ok := appendLibraryAndDeps(ctx, project, knownCrates, child) if !ok { return } - if _, ok = deps[childName]; ok { + if _, ok = deps[ctx.ModuleName(child)]; ok { return } - crate.Deps = append(crate.Deps, rustProjectDep{Crate: childId, Name: childName}) - deps[childName] = childId + crate.Deps = append(crate.Deps, rustProjectDep{Crate: childId, Name: childCrateName}) + deps[ctx.ModuleName(child)] = childId }) } @@ -106,8 +106,9 @@ func appendLibraryAndDeps(ctx android.SingletonContext, project *rustProjectJson if !ok { return 0, "", false } + moduleName := ctx.ModuleName(module) crateName := rModule.CrateName() - if cInfo, ok := knownCrates[crateName]; ok { + if cInfo, ok := knownCrates[moduleName]; ok { // We have seen this crate already; merge any new dependencies. crate := project.Crates[cInfo.ID] mergeDependencies(ctx, project, knownCrates, module, &crate, cInfo.Deps) @@ -123,7 +124,7 @@ func appendLibraryAndDeps(ctx android.SingletonContext, project *rustProjectJson mergeDependencies(ctx, project, knownCrates, module, &crate, deps) id := len(project.Crates) - knownCrates[crateName] = crateInfo{ID: id, Deps: deps} + knownCrates[moduleName] = crateInfo{ID: id, Deps: deps} project.Crates = append(project.Crates, crate) // rust-analyzer requires that all crates belong to at least one root: // https://github.com/rust-analyzer/rust-analyzer/issues/4735. |