@@ -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
622623struct 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
667696private :
0 commit comments