diff --git a/source/dub/project.d b/source/dub/project.d index 72f67e5..85657a4 100644 --- a/source/dub/project.d +++ b/source/dub/project.d @@ -237,7 +237,32 @@ foreach (name, vspec_; pack.dependencies) { Dependency vspec = vspec_; Package p; - if (!vspec.path.empty) { + + auto basename = getBasePackageName(name); + if (name == m_rootPackage.basePackage.name) { + vspec = Dependency(m_rootPackage.ver); + p = m_rootPackage.basePackage; + } else if (basename == m_rootPackage.basePackage.name) { + vspec = Dependency(m_rootPackage.ver); + try p = m_packageManager.getSubPackage(m_rootPackage.basePackage, getSubPackageName(name), false); + catch (Exception e) { + logDiagnostic("Error getting sub package %s: %s", name, e.msg); + continue; + } + } else if (m_selections.hasSelectedVersion(basename)) { + vspec = m_selections.getSelectedVersion(basename); + p = m_packageManager.getBestPackage(name, vspec); + } 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(name), false); + } else { + logDiagnostic("Version selection for dependency %s (%s) of %s is missing.", + basename, name, pack.name); + } + + if (!p && !vspec.path.empty) { Path path = vspec.path; if (!path.absolute) path = pack.path ~ path; logDiagnostic("Adding local %s", path); @@ -253,33 +278,6 @@ } if (!p) { - auto basename = getBasePackageName(name); - if (name == m_rootPackage.basePackage.name) { - vspec = Dependency(m_rootPackage.ver); - p = m_rootPackage.basePackage; - } else if (basename == m_rootPackage.basePackage.name) { - vspec = Dependency(m_rootPackage.ver); - try p = m_packageManager.getSubPackage(m_rootPackage.basePackage, getSubPackageName(name), false); - catch (Exception e) { - logDiagnostic("Error getting sub package %s: %s", name, e.msg); - continue; - } - } else if (m_selections.hasSelectedVersion(basename)) { - vspec = m_selections.getSelectedVersion(basename); - p = m_packageManager.getBestPackage(name, vspec); - } 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(name), false); - } else { - logDiagnostic("Version selection for dependency %s (%s) of %s is missing.", - basename, name, pack.name); - continue; - } - } - - if (!p) { logDiagnostic("Missing dependency %s %s of %s", name, vspec, pack.name); continue; }