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 )