Skip to content

Commit 4c9fb4a

Browse files
committed
Fixed yet another even more convoluted case in bundle lib selection
Fix arduino#572
1 parent bb0918f commit 4c9fb4a

File tree

2 files changed

+37
-18
lines changed

2 files changed

+37
-18
lines changed

arduino/libraries/librariesresolver/cpp.go

+26-18
Original file line numberDiff line numberDiff line change
@@ -127,34 +127,42 @@ func computePriority(lib *libraries.Library, header, arch string) int {
127127
priority := 0
128128

129129
// Bonus for core-optimized libraries
130-
if lib.IsOptimizedForArchitecture(arch) || lib.IsArchitectureIndependent() {
131-
priority += 0x0100
130+
if lib.IsOptimizedForArchitecture(arch) {
131+
// give a slightly better bonus for libraries that have specific optimization
132+
// (it is more important than Location but less important than Name)
133+
priority += 1010
134+
} else if lib.IsArchitectureIndependent() {
135+
// standard bonus for architecture independent (vanilla) libraries
136+
priority += 1000
137+
} else {
138+
// the library is not architecture compatible
139+
priority += 0
140+
}
141+
142+
if name == header {
143+
priority += 500
144+
} else if name == header+"-master" {
145+
priority += 400
146+
} else if strings.HasPrefix(name, header) {
147+
priority += 300
148+
} else if strings.HasSuffix(name, header) {
149+
priority += 200
150+
} else if strings.Contains(name, header) {
151+
priority += 100
132152
}
133153

134154
switch lib.Location {
135155
case libraries.IDEBuiltIn:
136-
priority += 0x0000
156+
priority += 0
137157
case libraries.ReferencedPlatformBuiltIn:
138-
priority += 0x0001
158+
priority += 1
139159
case libraries.PlatformBuiltIn:
140-
priority += 0x0002
160+
priority += 2
141161
case libraries.User:
142-
priority += 0x0003
162+
priority += 3
143163
default:
144164
panic(fmt.Sprintf("Invalid library location: %d", lib.Location))
145165
}
146-
147-
if name == header {
148-
priority += 0x0050
149-
} else if name == header+"-master" {
150-
priority += 0x0040
151-
} else if strings.HasPrefix(name, header) {
152-
priority += 0x0030
153-
} else if strings.HasSuffix(name, header) {
154-
priority += 0x0020
155-
} else if strings.Contains(name, header) {
156-
priority += 0x0010
157-
}
158166
return priority
159167
}
160168

arduino/libraries/librariesresolver/cpp_test.go

+11
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,17 @@ func TestArchitecturePriority(t *testing.T) {
7676
res = runResolver("Servo.h", "esp32", userServoAllArch, userAnotherServo)
7777
require.NotNil(t, res)
7878
require.Equal(t, userServoAllArch, res, "selected library")
79+
80+
userSDAllArch := &libraries.Library{
81+
Name: "SD",
82+
Location: libraries.User,
83+
Architectures: []string{"*"}}
84+
builtinSDesp := &libraries.Library{
85+
Name: "SD",
86+
Location: libraries.PlatformBuiltIn,
87+
Architectures: []string{"esp8266"}}
88+
res = runResolver("SD.h", "esp8266", userSDAllArch, builtinSDesp)
89+
require.Equal(t, builtinSDesp, res, "selected library")
7990
}
8091

8192
func TestClosestMatchWithTotallyDifferentNames(t *testing.T) {

0 commit comments

Comments
 (0)