diff --git a/source/dub/packagemanager.d b/source/dub/packagemanager.d index 4d5caa5..34d34af 100644 --- a/source/dub/packagemanager.d +++ b/source/dub/packagemanager.d @@ -152,11 +152,11 @@ return null; } - Package getOrLoadPackage(Path path, PathAndFormat infoFile = PathAndFormat()) + Package getOrLoadPackage(Path path, PathAndFormat infoFile = PathAndFormat(), bool allow_sub_packages = false) { path.endsWithSlash = true; foreach (p; getPackageIterator()) - if (!p.parentPackage && p.path == path) + if (p.path == path && (!p.parentPackage || (allow_sub_packages && p.parentPackage.path != p.path))) return p; auto pack = new Package(path, infoFile); addPackages(m_temporaryPackages, pack); diff --git a/source/dub/project.d b/source/dub/project.d index 84342cf..36191a9 100644 --- a/source/dub/project.d +++ b/source/dub/project.d @@ -239,7 +239,11 @@ Path path = vspec.path; if (!path.absolute) path = pack.path ~ path; logDiagnostic("Adding local %s", path); - p = m_packageManager.getOrLoadPackage(path); + p = m_packageManager.getOrLoadPackage(path, PathAndFormat.init, true); + if (p.parentPackage !is null) { + logWarn("Sub package %s must be referenced using the path to it's parent package.", name); + p = p.parentPackage; + } if (name.canFind(':')) p = m_packageManager.getSubPackage(p, getSubPackageName(name), false); enforce(p.name == name, format("Path based dependency %s is referenced with a wrong name: %s vs. %s",