Skip to content

Commit c7f5bb5

Browse files
committed
Merge branch 'saudi/fix-dependency-order-determinism' into 'main'
Fix determinism when configs inherit properties from their dependencies, during Link stage See merge request Sharpmake/sharpmake!551
2 parents 1e5e327 + 7252ea0 commit c7f5bb5

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

Sharpmake/Project.Configuration.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3284,6 +3284,18 @@ private static int SortConfigurationForLink(Configuration l, Configuration r)
32843284
return string.Compare(l.Project.FullClassName, r.Project.FullClassName, StringComparison.Ordinal);
32853285
}
32863286

3287+
private static int SortDotNetDependencyForLink(DotNetDependency l, DotNetDependency r)
3288+
{
3289+
return SortConfigurationForLink(l.Configuration, r.Configuration);
3290+
}
3291+
private static int SortDependencyForLink((DependencyNode, DependencyType) l, (DependencyNode, DependencyType) r)
3292+
{
3293+
int cmpType = l.Item2.CompareTo(r.Item2);
3294+
if (cmpType != 0)
3295+
return -cmpType; // reverse order (public first, private last)
3296+
return SortConfigurationForLink(l.Item1._configuration, r.Item1._configuration);
3297+
}
3298+
32873299
internal class DependencyNode
32883300
{
32893301
internal DependencyNode(Configuration inConfiguration, DependencySetting inDependencySetting)
@@ -3815,6 +3827,10 @@ IConfigurationTasks GetConfigurationTasks(Platform platform)
38153827

38163828
DotNetPublicDependencies = resolvedDotNetPublicDependencies.ToList();
38173829
DotNetPrivateDependencies = resolvedDotNetPrivateDependencies.ToList();
3830+
3831+
DotNetPublicDependencies.Sort(SortDotNetDependencyForLink);
3832+
DotNetPrivateDependencies.Sort(SortDotNetDependencyForLink);
3833+
38183834
if (configurationsSwappedToDll is not null)
38193835
{
38203836
ConfigurationsSwappedToDll = configurationsSwappedToDll;
@@ -3905,6 +3921,7 @@ static private DependencyNode BuildDependencyNodeTree(Builder builder, Configura
39053921
visiting.Push(childNode);
39063922
}
39073923
}
3924+
visitedNode._childNodes.Sort(SortDependencyForLink);
39083925
}
39093926

39103927
return rootNode;

0 commit comments

Comments
 (0)