From 174f69eebac132ac5ee609c2d7f38ddff91ffa2d Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Mon, 3 Feb 2020 18:55:50 +0100 Subject: [PATCH 1/4] Reorganized tests --- .../libraries/librariesresolver/cpp_test.go | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/arduino/libraries/librariesresolver/cpp_test.go b/arduino/libraries/librariesresolver/cpp_test.go index 2a9af1cff6d..d2f009ea8fb 100644 --- a/arduino/libraries/librariesresolver/cpp_test.go +++ b/arduino/libraries/librariesresolver/cpp_test.go @@ -30,10 +30,6 @@ var l5 = &libraries.Library{Name: "Yet Another Calculus Lib Improved", Location: var l6 = &libraries.Library{Name: "Calculus Unified Lib", Location: libraries.User} var l7 = &libraries.Library{Name: "AnotherLib", Location: libraries.User} var bundleServo = &libraries.Library{Name: "Servo", Location: libraries.IDEBuiltIn, Architectures: []string{"avr", "sam", "samd"}} -var userServo = &libraries.Library{Name: "Servo", Location: libraries.User, Architectures: []string{"avr", "sam", "samd"}} -var userServoAllArch = &libraries.Library{Name: "Servo", Location: libraries.User, Architectures: []string{"*"}} -var userServoNonavr = &libraries.Library{Name: "Servo", Location: libraries.User, Architectures: []string{"sam", "samd"}} -var userAnotherServo = &libraries.Library{Name: "AnotherServo", Location: libraries.User, Architectures: []string{"avr", "sam", "samd", "esp32"}} func runResolver(include string, arch string, libs ...*libraries.Library) *libraries.Library { libraryList := libraries.List{} @@ -44,6 +40,23 @@ func runResolver(include string, arch string, libs ...*libraries.Library) *libra } func TestArchitecturePriority(t *testing.T) { + userServo := &libraries.Library{ + Name: "Servo", + Location: libraries.User, + Architectures: []string{"avr", "sam", "samd"}} + userServoAllArch := &libraries.Library{ + Name: "Servo", + Location: libraries.User, + Architectures: []string{"*"}} + userServoNonavr := &libraries.Library{ + Name: "Servo", + Location: libraries.User, + Architectures: []string{"sam", "samd"}} + userAnotherServo := &libraries.Library{ + Name: "AnotherServo", + Location: libraries.User, + Architectures: []string{"avr", "sam", "samd", "esp32"}} + res := runResolver("Servo.h", "avr", bundleServo, userServo) require.NotNil(t, res) require.Equal(t, userServo, res, "selected library") From bb0918f1d82bb7c4b1f6b308ec620629c67bb847 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Mon, 3 Feb 2020 20:06:41 +0100 Subject: [PATCH 2/4] Fixed library.IsArchitectureIndependent method. Now it returns true for libraries that do not specify "architecture" fiels. --- arduino/libraries/libraries.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/arduino/libraries/libraries.go b/arduino/libraries/libraries.go index eb063387435..b31f546aa74 100644 --- a/arduino/libraries/libraries.go +++ b/arduino/libraries/libraries.go @@ -83,9 +83,6 @@ func (library *Library) String() string { // - the library is architecture independent // - the library doesn't specify any `architecture` field in library.properties func (library *Library) SupportsAnyArchitectureIn(archs ...string) bool { - if len(library.Architectures) == 0 { - return true - } if library.IsArchitectureIndependent() { return true } @@ -113,7 +110,7 @@ func (library *Library) IsOptimizedForArchitecture(arch string) bool { // compatible with all architectures (the `architecture` field in // library.properties contains the `*` item) func (library *Library) IsArchitectureIndependent() bool { - return library.IsOptimizedForArchitecture("*") + return library.IsOptimizedForArchitecture("*") || library.Architectures == nil || len(library.Architectures) == 0 } // SourceDir represents a source dir of a library From 4c9fb4afbc2b811299d56b982fa162ea27aaa6e6 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Mon, 3 Feb 2020 20:07:21 +0100 Subject: [PATCH 3/4] Fixed yet another even more convoluted case in bundle lib selection Fix #572 --- arduino/libraries/librariesresolver/cpp.go | 44 +++++++++++-------- .../libraries/librariesresolver/cpp_test.go | 11 +++++ 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/arduino/libraries/librariesresolver/cpp.go b/arduino/libraries/librariesresolver/cpp.go index 47e240722cf..84c03e29463 100644 --- a/arduino/libraries/librariesresolver/cpp.go +++ b/arduino/libraries/librariesresolver/cpp.go @@ -127,34 +127,42 @@ func computePriority(lib *libraries.Library, header, arch string) int { priority := 0 // Bonus for core-optimized libraries - if lib.IsOptimizedForArchitecture(arch) || lib.IsArchitectureIndependent() { - priority += 0x0100 + if lib.IsOptimizedForArchitecture(arch) { + // give a slightly better bonus for libraries that have specific optimization + // (it is more important than Location but less important than Name) + priority += 1010 + } else if lib.IsArchitectureIndependent() { + // standard bonus for architecture independent (vanilla) libraries + priority += 1000 + } else { + // the library is not architecture compatible + priority += 0 + } + + if name == header { + priority += 500 + } else if name == header+"-master" { + priority += 400 + } else if strings.HasPrefix(name, header) { + priority += 300 + } else if strings.HasSuffix(name, header) { + priority += 200 + } else if strings.Contains(name, header) { + priority += 100 } switch lib.Location { case libraries.IDEBuiltIn: - priority += 0x0000 + priority += 0 case libraries.ReferencedPlatformBuiltIn: - priority += 0x0001 + priority += 1 case libraries.PlatformBuiltIn: - priority += 0x0002 + priority += 2 case libraries.User: - priority += 0x0003 + priority += 3 default: panic(fmt.Sprintf("Invalid library location: %d", lib.Location)) } - - if name == header { - priority += 0x0050 - } else if name == header+"-master" { - priority += 0x0040 - } else if strings.HasPrefix(name, header) { - priority += 0x0030 - } else if strings.HasSuffix(name, header) { - priority += 0x0020 - } else if strings.Contains(name, header) { - priority += 0x0010 - } return priority } diff --git a/arduino/libraries/librariesresolver/cpp_test.go b/arduino/libraries/librariesresolver/cpp_test.go index d2f009ea8fb..0bea2dcbe0f 100644 --- a/arduino/libraries/librariesresolver/cpp_test.go +++ b/arduino/libraries/librariesresolver/cpp_test.go @@ -76,6 +76,17 @@ func TestArchitecturePriority(t *testing.T) { res = runResolver("Servo.h", "esp32", userServoAllArch, userAnotherServo) require.NotNil(t, res) require.Equal(t, userServoAllArch, res, "selected library") + + userSDAllArch := &libraries.Library{ + Name: "SD", + Location: libraries.User, + Architectures: []string{"*"}} + builtinSDesp := &libraries.Library{ + Name: "SD", + Location: libraries.PlatformBuiltIn, + Architectures: []string{"esp8266"}} + res = runResolver("SD.h", "esp8266", userSDAllArch, builtinSDesp) + require.Equal(t, builtinSDesp, res, "selected library") } func TestClosestMatchWithTotallyDifferentNames(t *testing.T) { From 57956a017186f4f641bf81e10ecf685995acfb78 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 4 Feb 2020 12:33:33 +0100 Subject: [PATCH 4/4] Makes linter happy... --- arduino/libraries/librariesresolver/cpp.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arduino/libraries/librariesresolver/cpp.go b/arduino/libraries/librariesresolver/cpp.go index 84c03e29463..9baf3d098c7 100644 --- a/arduino/libraries/librariesresolver/cpp.go +++ b/arduino/libraries/librariesresolver/cpp.go @@ -155,7 +155,7 @@ func computePriority(lib *libraries.Library, header, arch string) int { case libraries.IDEBuiltIn: priority += 0 case libraries.ReferencedPlatformBuiltIn: - priority += 1 + priority++ case libraries.PlatformBuiltIn: priority += 2 case libraries.User: pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy