@@ -186,6 +186,35 @@ string[] getChangedBuildFiles(ProjectNode root, CompilingSession s)
186186 return buildFiles;
187187}
188188
189+ void createSelectionsFile (ProjectNode tree)
190+ {
191+ import std.file ;
192+ import std.array :appender;
193+ import std.string :replace;
194+ if (exists(" dub.selections.json" ))
195+ return ;
196+ auto dubSelections = appender! string ;
197+ dubSelections~= " {\n\t\" fileVersion\" : 1,\n\t\" versions\" : {" ;
198+
199+ bool isFirst = true ;
200+
201+ foreach (ProjectNode node; tree.collapse)
202+ {
203+ if (! isFirst) dubSelections~= " ," ;
204+ isFirst = false ;
205+ auto req = node.requirements;
206+ dubSelections~= " \n\t\t\" " ~ node.name~ " \" : " ;
207+ if (req.version_.length != 0 )
208+ dubSelections~= " \" " ~ req.version_~ " \" " ;
209+ else
210+ dubSelections~= " {\" path\" : \" " ~ replace(req.cfg.workingDir, " \\ " , " \\\\ " )~ " \" }" ;
211+ }
212+
213+ dubSelections~= " \n\t }\n }" ;
214+
215+ std.file.write (" dub.selections.json" , dubSelections.data);
216+ }
217+
189218
190219ProjectDetails buildProject (ProjectDetails d)
191220{
@@ -209,6 +238,7 @@ ProjectDetails buildProject(ProjectDetails d)
209238 else
210239 invalidateCaches(d.tree,session, sharedFormula);
211240 ProjectNode tree = d.tree;
241+ createSelectionsFile(tree);
212242 if (d.useExistingObjFiles)
213243 tree.requirements.cfg.changedBuildFiles = getChangedBuildFiles(tree, session);
214244 // /TODO: Might be reactivated if that issue shows again.
0 commit comments