diff --git a/source/dub/project.d b/source/dub/project.d index eb59e8e..ca78b8f 100644 --- a/source/dub/project.d +++ b/source/dub/project.d @@ -296,12 +296,13 @@ Package p; auto basename = getBasePackageName(dep.name); + auto subname = getSubPackageName(dep.name); if (dep.name == m_rootPackage.basePackage.name) { vspec = Dependency(m_rootPackage.version_); p = m_rootPackage.basePackage; } else if (basename == m_rootPackage.basePackage.name) { vspec = Dependency(m_rootPackage.version_); - try p = m_packageManager.getSubPackage(m_rootPackage.basePackage, getSubPackageName(dep.name), false); + try p = m_packageManager.getSubPackage(m_rootPackage.basePackage, subname, false); catch (Exception e) { logDiagnostic("%sError getting sub package %s: %s", indent, dep.name, e.msg); continue; @@ -313,12 +314,13 @@ auto path = vspec.path; if (!path.absolute) path = m_rootPackage.path ~ path; p = m_packageManager.getOrLoadPackage(path, Path.init, true); + if (subname.length) p = m_packageManager.getSubPackage(p, subname, true); } } else if (m_dependencies.canFind!(d => getBasePackageName(d.name) == basename)) { auto idx = m_dependencies.countUntil!(d => getBasePackageName(d.name) == basename); auto bp = m_dependencies[idx].basePackage; vspec = Dependency(bp.path); - p = m_packageManager.getSubPackage(bp, getSubPackageName(dep.name), false); + p = m_packageManager.getSubPackage(bp, subname, false); } else { logDiagnostic("%sVersion selection for dependency %s (%s) of %s is missing.", indent, basename, dep.name, pack.name); @@ -333,7 +335,7 @@ logWarn("%sSub package %s must be referenced using the path to it's parent package.", indent, dep.name); p = p.parentPackage; } - if (dep.name.canFind(':')) p = m_packageManager.getSubPackage(p, getSubPackageName(dep.name), false); + if (subname.length) p = m_packageManager.getSubPackage(p, subname, false); enforce(p.name == dep.name, format("Path based dependency %s is referenced with a wrong name: %s vs. %s", path.toNativeString(), dep.name, p.name));