diff --git a/source/app.d b/source/app.d
index 6f67a61..9ae9af6 100644
--- a/source/app.d
+++ b/source/app.d
@@ -324,7 +324,7 @@
remove-path
Removes a package search path
list-installed Prints a list of all installed packages
generate Generates project files using the specified generator:
- visuald, mono-d, build, rdmd
+ visuald, visuald-combined, mono-d, build, rdmd
describe Prints a JSON description of the project and its
dependencies
diff --git a/source/dub/generators/generator.d b/source/dub/generators/generator.d
index 402a01e..f7f87d6 100644
--- a/source/dub/generators/generator.d
+++ b/source/dub/generators/generator.d
@@ -67,9 +67,12 @@
case "mono-d":
logDebug("Creating MonoD generator.");
return new MonoDGenerator(app, mgr);
- case "visuald":
+ case "visuald":
logDebug("Creating VisualD generator.");
- return new VisualDGenerator(app, mgr);
+ return new VisualDGenerator(app, mgr, false);
+ case "visuald-combined":
+ logDebug("Creating VisualD generator (combined project).");
+ return new VisualDGenerator(app, mgr, true);
}
}
diff --git a/source/dub/generators/visuald.d b/source/dub/generators/visuald.d
index fc6a9eb..7d7dc9f 100644
--- a/source/dub/generators/visuald.d
+++ b/source/dub/generators/visuald.d
@@ -24,9 +24,6 @@
import std.exception;
-version = VISUALD_SEPERATE_PROJECT_FILES;
-//version = VISUALD_SINGLE_PROJECT_FILE;
-
// Dubbing is developing dub...
//version = DUBBING;
@@ -38,9 +35,12 @@
Project m_app;
PackageManager m_pkgMgr;
string[string] m_projectUuids;
+ bool m_combinedProject;
}
- this(Project app, PackageManager mgr) {
+ this(Project app, PackageManager mgr, bool combined_project)
+ {
+ m_combinedProject = combined_project;
m_app = app;
m_pkgMgr = mgr;
}
@@ -77,8 +77,7 @@
# Visual Studio 2010");
generateSolutionEntry(ret, m_app.mainPackage, settings);
- version(VISUALD_SEPERATE_PROJECT_FILES)
- {
+ if (!m_combinedProject) {
performOnDependencies(m_app.mainPackage, (pack){
generateSolutionEntry(ret, pack, settings);
});
@@ -124,7 +123,7 @@
ret.formattedWrite("\nProject(\"%s\") = \"%s\", \"%s\", \"%s\"",
projUuid, projName, projPath, projectUuid);
- version(VISUALD_SEPERATE_PROJECT_FILES) {
+ if (!m_combinedProject) {
void addDepsRec(in Package p)
{
foreach(id, dependency; p.dependencies) {
@@ -167,8 +166,7 @@
generateProj(main, settings);
- version(VISUALD_SEPERATE_PROJECT_FILES)
- {
+ if (!m_combinedProject) {
bool[string] generatedProjects;
generatedProjects[main.name] = true;
performOnDependencies(main, (const Package dependency) {
@@ -205,14 +203,17 @@
generateProjectConfiguration(ret, pack, Config.Unittest, settings);
// Add all files
- version(VISUALD_SINGLE_PROJECT_FILE){
- auto files = settings.buildSettings;
-
+ auto configs = m_app.getPackageConfigs(settings.platform, settings.config);
+ auto files = pack.getBuildSettings(settings.platform, configs[pack.name]);
+ bool[SourceFile] sourceFiles;
+ if (m_combinedProject) {
// add all package.json files to the project
- foreach(prj; m_app.getTopologicalPackageList())
+ performOnDependencies(pack, (prj) {
files.sourceFiles ~= prj.packageInfoFile.toNativeString();
+ auto pfiles = prj.getBuildSettings(settings.platform, configs[prj.name]);
+ files.sourceFiles ~= pfiles.sourceFiles.map!(f => (prj.path ~ f).toNativeString()).array;
+ });
- bool[SourceFile] sourceFiles;
foreach(s; files.sourceFiles){
auto sp = Path(s);
if( !sp.absolute ) sp = m_app.mainPackage.path ~ sp;
@@ -222,15 +223,9 @@
sf.structurePath = Path(getPackageFileName(pack)) ~ sp.relativeTo(pack.path);
sourceFiles[sf] = true;
}
- }
-
- version(VISUALD_SEPERATE_PROJECT_FILES){
- auto configs = m_app.getPackageConfigs(settings.platform, settings.config);
- auto files = pack.getBuildSettings(settings.platform, configs[pack.name]);
-
+ } else {
files.sourceFiles ~= pack.packageInfoFile.toNativeString();
- bool[SourceFile] sourceFiles;
foreach(s; files.sourceFiles){
auto sp = Path(s);
if( !sp.absolute ) sp = pack.path ~ sp;
@@ -397,10 +392,9 @@
0
0
2
- 0
- 0
- 0
-");
+ 0\n");
+ ret.formattedWrite(" %s\n", settings.compiler.name == "ldc" ? 2 : settings.compiler.name == "gdc" ? 1 : 0);
+ ret.formattedWrite(" 0\n");
ret.formattedWrite(" %s\n", bin_path.toNativeString());
ret.formattedWrite(" .dub/obj/%s/%s\n", to!string(type), intersubdir);
ret.formattedWrite("%s",