diff --git a/source/dub/compilers/buildsettings.d b/source/dub/compilers/buildsettings.d index c874c88..10ec798 100644 --- a/source/dub/compilers/buildsettings.d +++ b/source/dub/compilers/buildsettings.d @@ -290,6 +290,9 @@ deprecationErrors = 1<<19, /// Stop compilation upon usage of deprecated features (-de) property = 1<<20, /// DEPRECATED: Enforce property syntax (-property) profileGC = 1<<21, /// Profile runtime allocations + // for internal usage + _docs = 1<<22, // Write ddoc to docs + _ddox = 1<<23, // Compile docs.json } struct BuildOptions { diff --git a/source/dub/compilers/dmd.d b/source/dub/compilers/dmd.d index 53d7626..73d3994 100644 --- a/source/dub/compilers/dmd.d +++ b/source/dub/compilers/dmd.d @@ -47,6 +47,9 @@ tuple(BuildOption.deprecationErrors, ["-de"]), tuple(BuildOption.property, ["-property"]), tuple(BuildOption.profileGC, ["-profile=gc"]), + + tuple(BuildOption._docs, ["-Dddocs"]), + tuple(BuildOption._ddox, ["-Xfdocs.json", "-Df__dummy.html"]), ]; @property string name() const { return "dmd"; } @@ -218,7 +221,7 @@ { return lflags.map!(f => "-L"~f)().array(); } - + private auto escapeArgs(in string[] args) { return args.map!(s => s.canFind(' ') ? "\""~s~"\"" : s); diff --git a/source/dub/compilers/gdc.d b/source/dub/compilers/gdc.d index 1eac982..3c58cf1 100644 --- a/source/dub/compilers/gdc.d +++ b/source/dub/compilers/gdc.d @@ -47,6 +47,9 @@ tuple(BuildOption.deprecationErrors, ["-Werror", "-Wdeprecated"]), tuple(BuildOption.property, ["-fproperty"]), //tuple(BuildOption.profileGC, ["-?"]), + + tuple(BuildOption._docs, ["-fdoc-dir=docs"]), + tuple(BuildOption._ddox, ["-fXf=docs.json", "-fdoc-file=__dummy.html"]), ]; @property string name() const { return "gdc"; } diff --git a/source/dub/compilers/ldc.d b/source/dub/compilers/ldc.d index 2f3af97..7cd75d8 100644 --- a/source/dub/compilers/ldc.d +++ b/source/dub/compilers/ldc.d @@ -47,6 +47,9 @@ tuple(BuildOption.deprecationErrors, ["-de"]), tuple(BuildOption.property, ["-property"]), //tuple(BuildOption.profileGC, ["-?"]), + + tuple(BuildOption._docs, ["-Dd=docs"]), + tuple(BuildOption._ddox, ["-Xf=docs.json", "-Dd=__dummy_docs"]), ]; @property string name() const { return "ldc"; } diff --git a/source/dub/generators/build.d b/source/dub/generators/build.d index 9ddb93f..8db2c32 100644 --- a/source/dub/generators/build.d +++ b/source/dub/generators/build.d @@ -124,6 +124,15 @@ else if (settings.direct || !generate_binary) performDirectBuild(settings, buildsettings, pack, config); else cached = performCachedBuild(settings, buildsettings, pack, config, build_id, packages, additional_dep_files); + // HACK: cleanup dummy doc files, we shouldn't specialize on buildType + // here and the compiler shouldn't need dummy doc ouput. + if (settings.buildType == "ddox") { + if ("__dummy.html".exists) + removeFile("__dummy.html"); + if ("__dummy_docs".exists) + rmdirRecurse("__dummy_docs"); + } + // run post-build commands if (!cached && buildsettings.postBuildCommands.length) { logInfo("Running post-build commands..."); diff --git a/source/dub/package_.d b/source/dub/package_.d index 0c1fb7c..de5adb5 100644 --- a/source/dub/package_.d +++ b/source/dub/package_.d @@ -299,8 +299,8 @@ case "release": settings.addOptions(releaseMode, optimize, inline); break; case "release-nobounds": settings.addOptions(releaseMode, optimize, inline, noBoundsCheck); break; case "unittest": settings.addOptions(unittests, debugMode, debugInfo); break; - case "docs": settings.addOptions(syntaxOnly); settings.addDFlags("-c", "-Dddocs"); break; - case "ddox": settings.addOptions(syntaxOnly); settings.addDFlags("-c", "-Df__dummy.html", "-Xfdocs.json"); break; + case "docs": settings.addOptions(syntaxOnly, _docs); break; + case "ddox": settings.addOptions(syntaxOnly, _ddox); break; case "profile": settings.addOptions(profile, optimize, inline, debugInfo); break; case "profile-gc": settings.addOptions(profileGC, debugInfo); break; case "cov": settings.addOptions(coverage, debugInfo); break; @@ -680,7 +680,7 @@ return null; } - + bool isRecursiveInvocation(string pack) { import std.process : environment;