Skip to content
This repository was archived by the owner on Mar 1, 2022. It is now read-only.

Commit a2f6b2c

Browse files
committed
add more information to rootPackageBuildSettings
1 parent d085997 commit a2f6b2c

File tree

1 file changed

+32
-3
lines changed
  • source/workspaced/com

1 file changed

+32
-3
lines changed

source/workspaced/com/dub.d

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,8 @@ class DubComponent : ComponentWrapper
321321
BuildSettings settings = pkg.getBuildSettings(_platform, _configuration);
322322
return PackageBuildSettings(settings,
323323
pkg.path.toString,
324-
pkg.name);
324+
pkg.name,
325+
_dub.project.rootPackage.recipePath.toNativeString());
325326
}
326327

327328
/// Lists all build types defined in the package description AND the predefined ones from dub ("plain", "debug", "release", "release-debug", "release-nobounds", "unittest", "docs", "ddox", "profile", "profile-gc", "cov", "unittest-cov")
@@ -622,20 +623,42 @@ struct BuildIssue
622623
struct PackageBuildSettings
623624
{
624625
/// construct from dub build settings
625-
this(BuildSettings dubBuildSettings, string packagePath, string packageName)
626+
this(BuildSettings dubBuildSettings, string packagePath, string packageName, string recipePath)
626627
{
627-
foreach (i, ref val; this.tupleof)
628+
foreach (i, ref val; this.tupleof[0 .. __IGNORE_TRAIL])
628629
{
629630
enum name = __traits(identifier, this.tupleof[i]);
630631
static if (__traits(hasMember, dubBuildSettings, name))
631632
val = __traits(getMember, dubBuildSettings, name);
632633
}
633634
this.packagePath = packagePath;
634635
this.packageName = packageName;
636+
this.recipePath = recipePath;
637+
638+
if (!targetName.length)
639+
targetName = packageName;
640+
641+
version (Windows)
642+
targetName ~= ".exe";
643+
644+
this.targetType = dubBuildSettings.targetType.to!string;
645+
foreach (enumMember; __traits(allMembers, BuildOption))
646+
{
647+
enum value = __traits(getMember, BuildOption, enumMember);
648+
if (value != 0 && dubBuildSettings.options.opDispatch!enumMember)
649+
this.buildOptions ~= enumMember;
650+
}
651+
foreach (enumMember; __traits(allMembers, BuildRequirement))
652+
{
653+
enum value = __traits(getMember, BuildRequirement, enumMember);
654+
if (value != 0 && dubBuildSettings.requirements.opDispatch!enumMember)
655+
this.buildRequirements ~= enumMember;
656+
}
635657
}
636658

637659
string packagePath;
638660
string packageName;
661+
string recipePath;
639662

640663
string targetPath; /// same as dub BuildSettings
641664
string targetName; /// same as dub BuildSettings
@@ -662,6 +685,12 @@ struct PackageBuildSettings
662685
string[] postBuildCommands; /// same as dub BuildSettings
663686
string[] preRunCommands; /// same as dub BuildSettings
664687
string[] postRunCommands; /// same as dub BuildSettings
688+
689+
private enum __IGNORE_TRAIL = 2; // number of ignored settings below this line
690+
691+
string targetType; /// same as dub BuildSettings
692+
string[] buildOptions; /// same as dub BuildSettings
693+
string[] buildRequirements; /// same as dub BuildSettings
665694
}
666695

667696
private:

0 commit comments

Comments
 (0)