diff --git a/source/dub/dependency.d b/source/dub/dependency.d index e316fde..942da1a 100644 --- a/source/dub/dependency.d +++ b/source/dub/dependency.d @@ -500,7 +500,7 @@ }); RequestedDependency[string] optionalDeps; foreach(id, req; allDeps) - if(req.dependency) optionalDeps[id] = req; + if(req.dependency.optional) optionalDeps[id] = req; return optionalDeps; } diff --git a/source/dub/project.d b/source/dub/project.d index bc9fb07..4370b35 100644 --- a/source/dub/project.d +++ b/source/dub/project.d @@ -101,8 +101,9 @@ if( ret ) return; } - foreach(d; p.dependencies.byKey){ - perform_rec(getDependency(d)); + foreach(dn, dv; p.dependencies){ + auto dependency = getDependency(dn, dv.optional); + if(dependency) perform_rec(dependency); if( ret ) return; } @@ -118,12 +119,13 @@ return &iterator; } - inout(Package) getDependency(string name) + private inout(Package) getDependency(string name, bool isOptional) inout { foreach(dp; m_dependencies) if( dp.name == name ) return dp; - assert(false, "Unknown dependency"); + if(!isOptional) assert(false, "Unknown dependency: "~name); + else return null; } string getDefaultConfiguration(BuildPlatform platform) @@ -211,8 +213,9 @@ else return; } auto pconf = configs[p.name]; - foreach(dn; p.dependencies.byKey){ - auto dep = getDependency(dn); + foreach(dn, dv; p.dependencies){ + auto dep = getDependency(dn, dv.optional); + if( dep is null ) continue; auto conf = p.getSubConfiguration(pconf, dep, platform); if( !conf.empty ){ if( auto pc = dn in configs ){