@@ -7,7 +7,7 @@ import redub.package_searching.api;
77
88
99// /vX.X.X
10- enum RedubVersionOnly = " v1.26.3 " ;
10+ enum RedubVersionOnly = " v1.26.4 " ;
1111// /Redub vX.X.X
1212enum RedubVersionShort = " Redub " ~ RedubVersionOnly;
1313// /Redub vX.X.X - Description
@@ -363,6 +363,32 @@ struct BuildConfiguration
363363 return ret;
364364 }
365365
366+ /**
367+ * This function is mainly used to merge a dependency with its parent.
368+ * Params:
369+ * other = The parent configuration
370+ * Returns:
371+ */
372+ BuildConfiguration mergeForCombine (const ref BuildConfiguration other) const
373+ {
374+ BuildConfiguration ret = clone;
375+ ret.extraDependencyFiles.exclusiveMergePaths(other.extraDependencyFiles);
376+ ret.filesToCopy.exclusiveMergePaths(other.filesToCopy);
377+ ret.stringImportPaths.exclusiveMergePaths(other.stringImportPaths);
378+ ret.sourceFiles.exclusiveMerge(other.sourceFiles);
379+ ret.excludeSourceFiles.exclusiveMerge(other.excludeSourceFiles);
380+ ret.sourcePaths.exclusiveMergePaths(other.sourcePaths);
381+ ret.importDirectories.exclusiveMergePaths(other.importDirectories);
382+ ret.versions.exclusiveMerge(other.versions);
383+ ret.debugVersions.exclusiveMerge(other.debugVersions);
384+ ret.dFlags.exclusiveMerge(other.dFlags);
385+ ret.libraries.exclusiveMerge(other.libraries);
386+ ret.frameworks.exclusiveMerge(other.frameworks);
387+ ret.libraryPaths.exclusiveMergePaths(other.libraryPaths);
388+ ret.linkFlags.exclusiveMerge(other.linkFlags, null , linkerMergeKeep);
389+ return ret;
390+ }
391+
366392 BuildConfiguration mergeCommands (const ref BuildConfiguration other) const
367393 {
368394 BuildConfiguration ret = clone;
@@ -1329,8 +1355,8 @@ class ProjectNode
13291355 */
13301356 void combine ()
13311357 {
1358+ import redub.api;
13321359 ProjectNode[] leaves;
1333-
13341360 while (true )
13351361 {
13361362 leaves = findLeavesNodes();
@@ -1340,10 +1366,10 @@ class ProjectNode
13401366 {
13411367 foreach (ref leafParent; leaf.parent)
13421368 {
1369+ if (leafParent.requirements.cfg.language != leaf.requirements.cfg.language)
1370+ throw new RedubException(" Can't combine " ~ leafParent.name~ " with " ~ leaf.name~ " . Can only combine projects with same programming language" );
13431371 // /Keep the old target type.
1344- TargetType oldTargetType = leafParent.requirements.cfg.targetType;
1345- leafParent.requirements.cfg = leafParent.requirements.cfg.merge(leaf.requirements.cfg);
1346- leafParent.requirements.cfg.targetType = oldTargetType;
1372+ leafParent.requirements.cfg = leafParent.requirements.cfg.mergeForCombine(leaf.requirements.cfg);
13471373 }
13481374 leaf.parent[0 ].requirements.cfg = leaf.parent[0 ].requirements.cfg.mergeCommands(leaf.requirements.cfg);
13491375 leaf.becomeIndependent();
0 commit comments