diff --git a/source/dub/dub.d b/source/dub/dub.d index ad31b55..c933c83 100644 --- a/source/dub/dub.d +++ b/source/dub/dub.d @@ -956,8 +956,15 @@ return sp; } else if (!basepack.subPackages.canFind!(p => p.path.length)) { // note: external sub packages are handled further below - logDiagnostic("Sub package %s doesn't exist in %s %s.", name, basename, dep.version_); - return null; + auto spr = basepack.getInternalSubPackage(subname); + if (!spr.isNull) { + auto sp = new Package(spr, basepack.path, basepack); + m_remotePackages[sp.name] = sp; + return sp; + } else { + logDiagnostic("Sub package %s doesn't exist in %s %s.", name, basename, dep.version_); + return null; + } } else if (auto ret = m_dub.m_packageManager.getBestPackage(name, dep)) { return ret; } else { diff --git a/source/dub/package_.d b/source/dub/package_.d index 276579b..39a47d1 100644 --- a/source/dub/package_.d +++ b/source/dub/package_.d @@ -1,7 +1,7 @@ /** Stuff with dependencies. - Copyright: © 2012-2013 Matthias Dondorff + Copyright: © 2012-2013 Matthias Dondorff, © 2012-2015 Sönke Ludwig License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Matthias Dondorff */ @@ -27,6 +27,7 @@ import std.file; import std.range; import std.string; +import std.typecons : Nullable; @@ -201,14 +202,13 @@ dstFile.writePrettyJsonString(m_info.toJson()); } - /*inout(Package) getSubPackage(string name, bool silent_fail = false) - inout { - foreach (p; m_info.subPackages) - if (p.package_ !is null && p.package_.name == this.name ~ ":" ~ name) - return p.package_; - enforce(silent_fail, format("Unknown sub package: %s:%s", this.name, name)); - return null; - }*/ + Nullable!PackageRecipe getInternalSubPackage(string name) + { + foreach (ref p; m_info.subPackages) + if (p.path.empty && p.recipe.name == name) + return Nullable!PackageRecipe(p.recipe); + return Nullable!PackageRecipe(); + } void warnOnSpecialCompilerFlags() {