diff --git a/source/dub/generators/visuald.d b/source/dub/generators/visuald.d index c960f1b..c10b91b 100644 --- a/source/dub/generators/visuald.d +++ b/source/dub/generators/visuald.d @@ -45,7 +45,8 @@ m_pkgMgr = mgr; } - void generateProject(GeneratorSettings settings) { + void generateProject(GeneratorSettings settings) + { auto buildsettings = settings.buildSettings; m_app.addBuildSettings(buildsettings, settings.platform, settings.config); @@ -53,7 +54,7 @@ logTrace("About to generate projects for %s, with %s direct dependencies.", m_app.mainPackage().name, m_app.mainPackage().dependencies().length); generateProjects(m_app.mainPackage(), settings); - generateSolution(); + generateSolution(settings); logInfo("VisualD project generated."); finalizeGeneration(buildsettings, true); @@ -66,7 +67,8 @@ Unittest } - void generateSolution() { + void generateSolution(GeneratorSettings settings) + { auto ret = appender!(char[])(); // Solution header @@ -74,11 +76,11 @@ Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010"); - generateSolutionEntry(ret, m_app.mainPackage); + generateSolutionEntry(ret, m_app.mainPackage, settings); version(VISUALD_SEPERATE_PROJECT_FILES) { performOnDependencies(m_app.mainPackage, (pack){ - generateSolutionEntry(ret, pack); + generateSolutionEntry(ret, pack, settings); }); } @@ -110,7 +112,8 @@ sln.flush(); } - void generateSolutionEntry(Appender!(char[]) ret, const Package pack) { + void generateSolutionEntry(Appender!(char[]) ret, const Package pack, GeneratorSettings settings) + { auto projUuid = generateUUID(); auto projName = pack.name; auto projPath = projFileName(pack); @@ -126,6 +129,9 @@ ret.formattedWrite(" ProjectSection(ProjectDependencies) = postProject"); foreach(id, dependency; pack.dependencies) { + auto deppack = m_app.getDependency(id, true); + if (!deppack || isHeaderOnlyPackage(deppack, settings)) + continue; // TODO: clarify what "uuid = uuid" should mean auto uuid = guid(id); ret.formattedWrite(" @@ -165,6 +171,15 @@ } ); } } + + bool isHeaderOnlyPackage(in Package pack, in GeneratorSettings settings) + const { + auto configs = m_app.getPackageConfigs(settings.platform, settings.config); + auto pbuildsettings = pack.getBuildSettings(settings.platform, configs[pack.name]); + if (!pbuildsettings.sourceFiles.any!(f => f.endsWith(".d"))()) + return true; + return false; + } void generateProj(const Package pack, GeneratorSettings settings) { @@ -339,8 +354,10 @@ 0 0 0 - 0 - 0 +"); + ret.formattedWrite(" %s\n", arch == "x64" ? 1 : 0); +ret.formattedWrite( +" 0 0 0 0 diff --git a/source/dub/project.d b/source/dub/project.d index 4e8de7f..3fa0b94 100644 --- a/source/dub/project.d +++ b/source/dub/project.d @@ -119,7 +119,7 @@ return &iterator; } - private inout(Package) getDependency(string name, bool isOptional) + inout(Package) getDependency(string name, bool isOptional) inout { foreach(dp; m_dependencies) if( dp.name == name )