diff --git a/arduino/libraries/librariesresolver/cpp.go b/arduino/libraries/librariesresolver/cpp.go index 4afbd399169..f817a68f7eb 100644 --- a/arduino/libraries/librariesresolver/cpp.go +++ b/arduino/libraries/librariesresolver/cpp.go @@ -189,8 +189,10 @@ func ComputePriority(lib *libraries.Library, header, arch string) int { } if name == header && dirName == header { - priority += 600 + priority += 700 } else if name == header || dirName == header { + priority += 600 + } else if name == header+"-main" || dirName == header+"-main" { priority += 500 } else if name == header+"-master" || dirName == header+"-master" { priority += 400 diff --git a/arduino/libraries/librariesresolver/cpp_test.go b/arduino/libraries/librariesresolver/cpp_test.go index e89ac8305a7..3be147636ac 100644 --- a/arduino/libraries/librariesresolver/cpp_test.go +++ b/arduino/libraries/librariesresolver/cpp_test.go @@ -23,12 +23,13 @@ import ( ) var l1 = &libraries.Library{Name: "Calculus Lib", Location: libraries.User} -var l2 = &libraries.Library{Name: "Calculus Lib-master", Location: libraries.User} -var l3 = &libraries.Library{Name: "Calculus Lib Improved", Location: libraries.User} -var l4 = &libraries.Library{Name: "Another Calculus Lib", Location: libraries.User} -var l5 = &libraries.Library{Name: "Yet Another Calculus Lib Improved", Location: libraries.User} -var l6 = &libraries.Library{Name: "Calculus Unified Lib", Location: libraries.User} -var l7 = &libraries.Library{Name: "AnotherLib", Location: libraries.User} +var l2 = &libraries.Library{Name: "Calculus Lib-main", Location: libraries.User} +var l3 = &libraries.Library{Name: "Calculus Lib-master", Location: libraries.User} +var l4 = &libraries.Library{Name: "Calculus Lib Improved", Location: libraries.User} +var l5 = &libraries.Library{Name: "Another Calculus Lib", Location: libraries.User} +var l6 = &libraries.Library{Name: "Yet Another Calculus Lib Improved", Location: libraries.User} +var l7 = &libraries.Library{Name: "Calculus Unified Lib", Location: libraries.User} +var l8 = &libraries.Library{Name: "AnotherLib", Location: libraries.User} var bundleServo = &libraries.Library{Name: "Servo", Location: libraries.IDEBuiltIn, Architectures: []string{"avr", "sam", "samd"}} func runResolver(include string, arch string, libs ...*libraries.Library) *libraries.Library { @@ -91,14 +92,14 @@ func TestArchitecturePriority(t *testing.T) { func TestClosestMatchWithTotallyDifferentNames(t *testing.T) { libraryList := libraries.List{} - libraryList.Add(l5) libraryList.Add(l6) libraryList.Add(l7) + libraryList.Add(l8) resolver := NewCppResolver() resolver.headers["XYZ.h"] = libraryList res := resolver.ResolveFor("XYZ.h", "xyz") require.NotNil(t, res) - require.Equal(t, l7, res, "selected library") + require.Equal(t, l8, res, "selected library") } func TestCppHeaderPriority(t *testing.T) { @@ -109,12 +110,14 @@ func TestCppHeaderPriority(t *testing.T) { r5 := ComputePriority(l5, "calculus_lib.h", "avr") r6 := ComputePriority(l6, "calculus_lib.h", "avr") r7 := ComputePriority(l7, "calculus_lib.h", "avr") + r8 := ComputePriority(l8, "calculus_lib.h", "avr") require.True(t, r1 > r2) require.True(t, r2 > r3) require.True(t, r3 > r4) require.True(t, r4 > r5) require.True(t, r5 > r6) - require.True(t, r6 == r7) + require.True(t, r6 > r7) + require.True(t, r7 == r8) } func TestCppHeaderResolverWithNilResult(t *testing.T) { @@ -135,13 +138,14 @@ func TestCppHeaderResolver(t *testing.T) { resolver.headers[header] = librarylist return resolver.ResolveFor(header, "avr").Name } - require.Equal(t, "Calculus Lib", resolve("calculus_lib.h", l1, l2, l3, l4, l5, l6, l7)) - require.Equal(t, "Calculus Lib-master", resolve("calculus_lib.h", l2, l3, l4, l5, l6, l7)) - require.Equal(t, "Calculus Lib Improved", resolve("calculus_lib.h", l3, l4, l5, l6, l7)) - require.Equal(t, "Another Calculus Lib", resolve("calculus_lib.h", l4, l5, l6, l7)) - require.Equal(t, "Yet Another Calculus Lib Improved", resolve("calculus_lib.h", l5, l6, l7)) - require.Equal(t, "Calculus Unified Lib", resolve("calculus_lib.h", l6, l7)) - require.Equal(t, "Calculus Unified Lib", resolve("calculus_lib.h", l7, l6)) + require.Equal(t, "Calculus Lib", resolve("calculus_lib.h", l1, l2, l3, l4, l5, l6, l7, l8)) + require.Equal(t, "Calculus Lib-main", resolve("calculus_lib.h", l2, l3, l4, l5, l6, l7, l8)) + require.Equal(t, "Calculus Lib-master", resolve("calculus_lib.h", l3, l4, l5, l6, l7, l8)) + require.Equal(t, "Calculus Lib Improved", resolve("calculus_lib.h", l4, l5, l6, l7, l8)) + require.Equal(t, "Another Calculus Lib", resolve("calculus_lib.h", l5, l6, l7, l8)) + require.Equal(t, "Yet Another Calculus Lib Improved", resolve("calculus_lib.h", l6, l7, l8)) + require.Equal(t, "Calculus Unified Lib", resolve("calculus_lib.h", l7, l8)) + require.Equal(t, "Calculus Unified Lib", resolve("calculus_lib.h", l8, l7)) } func TestCppHeaderResolverWithLibrariesInStrangeDirectoryNames(t *testing.T) { diff --git a/docs/sketch-build-process.md b/docs/sketch-build-process.md index 2f1486eff79..6fad171187e 100644 --- a/docs/sketch-build-process.md +++ b/docs/sketch-build-process.md @@ -101,6 +101,7 @@ The "library name priority" is determined as follows (in order of highest to low | Rule | Example for `Arduino_Low_Power.h` | | ------------------------------------------------------------------------- | --------------------------------- | | The library name matches the include 100% | `Arduino Low Power` | +| The library name matches the include 100%, except with a `-main` suffix | `Arduino Low Power-main` | | The library name matches the include 100%, except with a `-master` suffix | `Arduino Low Power-master` | | The library name has a matching prefix | `Arduino Low Power Whatever` | | The library name has a matching suffix | `Awesome Arduino Low Power` | @@ -113,6 +114,7 @@ The "folder name priority" is determined as follows (in order of highest to lowe | Rule | Example for `Servo.h` | | ------------------------------------------------------------------------ | --------------------------- | | The folder name matches the include 100% | `Servo` | +| The folder name matches the include 100%, except with a `-main` suffix | `Servo-main` | | The folder name matches the include 100%, except with a `-master` suffix | `Servo-master` | | The folder name has a matching prefix | `ServoWhatever` | | The folder name has a matching suffix | `AwesomeServo` |