Skip to content

Use enumeration for LibraryLocation and LibraryLayout fields in grpc API #585

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions arduino/libraries/libraries.go
Original file line number Diff line number Diff line change
@@ -17,6 +17,7 @@ package libraries

import (
"github.com/arduino/arduino-cli/arduino/cores"
rpc "github.com/arduino/arduino-cli/rpc/commands"
paths "github.com/arduino/go-paths-helper"
properties "github.com/arduino/go-properties-orderedmap"
semver "go.bug.st/relaxed-semver"
@@ -58,9 +59,9 @@ type Library struct {
InstallDir *paths.Path
SourceDir *paths.Path
UtilityDir *paths.Path
Location LibraryLocation
Location rpc.LibraryLocation
ContainerPlatform *cores.PlatformRelease `json:""`
Layout LibraryLayout
Layout rpc.LibraryLayout
RealName string
DotALinkage bool
Precompiled bool
@@ -125,7 +126,7 @@ func (library *Library) SourceDirs() []SourceDir {
dirs = append(dirs,
SourceDir{
Dir: library.SourceDir,
Recurse: library.Layout == RecursiveLayout,
Recurse: library.Layout == rpc.LibraryLayout_recursive_layout,
})
if library.UtilityDir != nil {
dirs = append(dirs,
67 changes: 0 additions & 67 deletions arduino/libraries/libraries_layout.go

This file was deleted.

84 changes: 0 additions & 84 deletions arduino/libraries/libraries_location.go

This file was deleted.

3 changes: 2 additions & 1 deletion arduino/libraries/librariesmanager/install.go
Original file line number Diff line number Diff line change
@@ -22,6 +22,7 @@ import (
"github.com/arduino/arduino-cli/arduino/libraries"
"github.com/arduino/arduino-cli/arduino/libraries/librariesindex"
"github.com/arduino/arduino-cli/arduino/utils"
rpc "github.com/arduino/arduino-cli/rpc/commands"
paths "github.com/arduino/go-paths-helper"
)

@@ -40,7 +41,7 @@ func (lm *LibrariesManager) InstallPrerequisiteCheck(indexLibrary *librariesinde
var replaced *libraries.Library
if installedLibs, have := lm.Libraries[saneName]; have {
for _, installedLib := range installedLibs.Alternatives {
if installedLib.Location != libraries.User {
if installedLib.Location != rpc.LibraryLocation_user {
continue
}
if installedLib.Version.Equal(indexLibrary.Version) {
11 changes: 6 additions & 5 deletions arduino/libraries/librariesmanager/librariesmanager.go
Original file line number Diff line number Diff line change
@@ -23,6 +23,7 @@ import (
"github.com/arduino/arduino-cli/arduino/libraries"
"github.com/arduino/arduino-cli/arduino/libraries/librariesindex"
"github.com/arduino/arduino-cli/arduino/utils"
rpc "github.com/arduino/arduino-cli/rpc/commands"
paths "github.com/arduino/go-paths-helper"
"github.com/pmylund/sortutil"
"github.com/sirupsen/logrus"
@@ -43,7 +44,7 @@ type LibrariesManager struct {
// LibrariesDir is a directory containing libraries
type LibrariesDir struct {
Path *paths.Path
Location libraries.LibraryLocation
Location rpc.LibraryLocation
PlatformRelease *cores.PlatformRelease
}

@@ -122,7 +123,7 @@ func (sc *LibrariesManager) LoadIndex() error {
// AddLibrariesDir adds path to the list of directories
// to scan when searching for libraries. If a path is already
// in the list it is ignored.
func (sc *LibrariesManager) AddLibrariesDir(path *paths.Path, location libraries.LibraryLocation) {
func (sc *LibrariesManager) AddLibrariesDir(path *paths.Path, location rpc.LibraryLocation) {
for _, dir := range sc.LibrariesDir {
if dir.Path.EquivalentTo(path) {
return
@@ -138,7 +139,7 @@ func (sc *LibrariesManager) AddLibrariesDir(path *paths.Path, location libraries
// AddPlatformReleaseLibrariesDir add the libraries directory in the
// specified PlatformRelease to the list of directories to scan when
// searching for libraries.
func (sc *LibrariesManager) AddPlatformReleaseLibrariesDir(plaftormRelease *cores.PlatformRelease, location libraries.LibraryLocation) {
func (sc *LibrariesManager) AddPlatformReleaseLibrariesDir(plaftormRelease *cores.PlatformRelease, location rpc.LibraryLocation) {
path := plaftormRelease.GetLibrariesDir()
if path == nil {
return
@@ -168,7 +169,7 @@ func (sc *LibrariesManager) RescanLibraries() error {

func (sc *LibrariesManager) getUserLibrariesDir() *paths.Path {
for _, dir := range sc.LibrariesDir {
if dir.Location == libraries.User {
if dir.Location == rpc.LibraryLocation_user {
return dir.Path
}
}
@@ -216,7 +217,7 @@ func (sc *LibrariesManager) FindByReference(libRef *librariesindex.Reference) *l
// TODO: Move "search into user" into another method...
if libRef.Version == nil {
for _, candidate := range alternatives.Alternatives {
if candidate.Location == libraries.User {
if candidate.Location == rpc.LibraryLocation_user {
return candidate
}
}
9 changes: 5 additions & 4 deletions arduino/libraries/librariesresolver/cpp.go
Original file line number Diff line number Diff line change
@@ -23,6 +23,7 @@ import (
"github.com/arduino/arduino-cli/arduino/libraries"
"github.com/arduino/arduino-cli/arduino/libraries/librariesmanager"
"github.com/arduino/arduino-cli/arduino/utils"
rpc "github.com/arduino/arduino-cli/rpc/commands"
"github.com/schollz/closestmatch"
"github.com/sirupsen/logrus"
)
@@ -152,13 +153,13 @@ func computePriority(lib *libraries.Library, header, arch string) int {
}

switch lib.Location {
case libraries.IDEBuiltIn:
case rpc.LibraryLocation_ide_builtin:
priority += 0
case libraries.ReferencedPlatformBuiltIn:
case rpc.LibraryLocation_referenced_platform_builtin:
priority++
case libraries.PlatformBuiltIn:
case rpc.LibraryLocation_platform_builtin:
priority += 2
case libraries.User:
case rpc.LibraryLocation_user:
priority += 3
default:
panic(fmt.Sprintf("Invalid library location: %d", lib.Location))
29 changes: 15 additions & 14 deletions arduino/libraries/librariesresolver/cpp_test.go
Original file line number Diff line number Diff line change
@@ -19,17 +19,18 @@ import (
"testing"

"github.com/arduino/arduino-cli/arduino/libraries"
rpc "github.com/arduino/arduino-cli/rpc/commands"
"github.com/stretchr/testify/require"
)

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 bundleServo = &libraries.Library{Name: "Servo", Location: libraries.IDEBuiltIn, Architectures: []string{"avr", "sam", "samd"}}
var l1 = &libraries.Library{Name: "Calculus Lib", Location: rpc.LibraryLocation_user}
var l2 = &libraries.Library{Name: "Calculus Lib-master", Location: rpc.LibraryLocation_user}
var l3 = &libraries.Library{Name: "Calculus Lib Improved", Location: rpc.LibraryLocation_user}
var l4 = &libraries.Library{Name: "Another Calculus Lib", Location: rpc.LibraryLocation_user}
var l5 = &libraries.Library{Name: "Yet Another Calculus Lib Improved", Location: rpc.LibraryLocation_user}
var l6 = &libraries.Library{Name: "Calculus Unified Lib", Location: rpc.LibraryLocation_user}
var l7 = &libraries.Library{Name: "AnotherLib", Location: rpc.LibraryLocation_user}
var bundleServo = &libraries.Library{Name: "Servo", Location: rpc.LibraryLocation_ide_builtin, Architectures: []string{"avr", "sam", "samd"}}

func runResolver(include string, arch string, libs ...*libraries.Library) *libraries.Library {
libraryList := libraries.List{}
@@ -42,19 +43,19 @@ func runResolver(include string, arch string, libs ...*libraries.Library) *libra
func TestArchitecturePriority(t *testing.T) {
userServo := &libraries.Library{
Name: "Servo",
Location: libraries.User,
Location: rpc.LibraryLocation_user,
Architectures: []string{"avr", "sam", "samd"}}
userServoAllArch := &libraries.Library{
Name: "Servo",
Location: libraries.User,
Location: rpc.LibraryLocation_user,
Architectures: []string{"*"}}
userServoNonavr := &libraries.Library{
Name: "Servo",
Location: libraries.User,
Location: rpc.LibraryLocation_user,
Architectures: []string{"sam", "samd"}}
userAnotherServo := &libraries.Library{
Name: "AnotherServo",
Location: libraries.User,
Location: rpc.LibraryLocation_user,
Architectures: []string{"avr", "sam", "samd", "esp32"}}

res := runResolver("Servo.h", "avr", bundleServo, userServo)
@@ -79,11 +80,11 @@ func TestArchitecturePriority(t *testing.T) {

userSDAllArch := &libraries.Library{
Name: "SD",
Location: libraries.User,
Location: rpc.LibraryLocation_user,
Architectures: []string{"*"}}
builtinSDesp := &libraries.Library{
Name: "SD",
Location: libraries.PlatformBuiltIn,
Location: rpc.LibraryLocation_platform_builtin,
Architectures: []string{"esp8266"}}
res = runResolver("SD.h", "esp8266", userSDAllArch, builtinSDesp)
require.Equal(t, builtinSDesp, res, "selected library")
13 changes: 7 additions & 6 deletions arduino/libraries/loader.go
Original file line number Diff line number Diff line change
@@ -19,13 +19,14 @@ import (
"fmt"
"strings"

rpc "github.com/arduino/arduino-cli/rpc/commands"
"github.com/arduino/go-paths-helper"
properties "github.com/arduino/go-properties-orderedmap"
semver "go.bug.st/relaxed-semver"
)

// Load loads a library from the given LibraryLocation
func Load(libDir *paths.Path, location LibraryLocation) (*Library, error) {
func Load(libDir *paths.Path, location rpc.LibraryLocation) (*Library, error) {
if libDir.Join("library.properties").Exist() {
return makeNewLibrary(libDir, location)
}
@@ -39,7 +40,7 @@ func addUtilityDirectory(library *Library) {
}
}

func makeNewLibrary(libraryDir *paths.Path, location LibraryLocation) (*Library, error) {
func makeNewLibrary(libraryDir *paths.Path, location rpc.LibraryLocation) (*Library, error) {
libProperties, err := properties.Load(libraryDir.Join("library.properties").String())
if err != nil {
return nil, fmt.Errorf("loading library.properties: %s", err)
@@ -59,10 +60,10 @@ func makeNewLibrary(libraryDir *paths.Path, location LibraryLocation) (*Library,
library.Location = location
library.InstallDir = libraryDir
if libraryDir.Join("src").Exist() {
library.Layout = RecursiveLayout
library.Layout = rpc.LibraryLayout_recursive_layout
library.SourceDir = libraryDir.Join("src")
} else {
library.Layout = FlatLayout
library.Layout = rpc.LibraryLayout_flat_layout
library.SourceDir = libraryDir
addUtilityDirectory(library)
}
@@ -110,12 +111,12 @@ func makeNewLibrary(libraryDir *paths.Path, location LibraryLocation) (*Library,
return library, nil
}

func makeLegacyLibrary(path *paths.Path, location LibraryLocation) (*Library, error) {
func makeLegacyLibrary(path *paths.Path, location rpc.LibraryLocation) (*Library, error) {
library := &Library{
InstallDir: path,
Location: location,
SourceDir: path,
Layout: FlatLayout,
Layout: rpc.LibraryLayout_flat_layout,
Name: path.Base(),
Architectures: []string{"*"},
IsLegacy: true,
4 changes: 2 additions & 2 deletions cli/lib/list.go
Original file line number Diff line number Diff line change
@@ -102,9 +102,9 @@ func (ir installedResult) String() string {
lastName = name
}

location := lib.GetLocation()
location := lib.GetLocation().String()
if lib.ContainerPlatform != "" {
location = lib.GetContainerPlatform()
location += " " + lib.GetContainerPlatform()
}

if libMeta.GetRelease() != nil {
7 changes: 3 additions & 4 deletions commands/instances.go
Original file line number Diff line number Diff line change
@@ -27,7 +27,6 @@ import (
"github.com/arduino/arduino-cli/arduino/cores"
"github.com/arduino/arduino-cli/arduino/cores/packageindex"
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
"github.com/arduino/arduino-cli/arduino/libraries"
"github.com/arduino/arduino-cli/arduino/libraries/librariesmanager"
"github.com/arduino/arduino-cli/cli/globals"
"github.com/arduino/arduino-cli/configuration"
@@ -323,19 +322,19 @@ func createInstance(ctx context.Context, getLibOnly bool) (*createInstanceResult

// Add IDE builtin libraries dir
if bundledLibsDir := configuration.IDEBundledLibrariesDir(); bundledLibsDir != nil {
res.Lm.AddLibrariesDir(bundledLibsDir, libraries.IDEBuiltIn)
res.Lm.AddLibrariesDir(bundledLibsDir, rpc.LibraryLocation_ide_builtin)
}

// Add user libraries dir
libDir := configuration.LibrariesDir()
res.Lm.AddLibrariesDir(libDir, libraries.User)
res.Lm.AddLibrariesDir(libDir, rpc.LibraryLocation_user)

// Add libraries dirs from installed platforms
if res.Pm != nil {
for _, targetPackage := range res.Pm.Packages {
for _, platform := range targetPackage.Platforms {
if platformRelease := res.Pm.GetInstalledPlatformRelease(platform); platformRelease != nil {
res.Lm.AddPlatformReleaseLibrariesDir(platformRelease, libraries.PlatformBuiltIn)
res.Lm.AddPlatformReleaseLibrariesDir(platformRelease, rpc.LibraryLocation_platform_builtin)
}
}
}
6 changes: 3 additions & 3 deletions commands/lib/list.go
Original file line number Diff line number Diff line change
@@ -58,7 +58,7 @@ func listLibraries(lm *librariesmanager.LibrariesManager, updatable bool, all bo
for _, libAlternatives := range lm.Libraries {
for _, lib := range libAlternatives.Alternatives {
if !all {
if lib.Location != libraries.User {
if lib.Location != rpc.LibraryLocation_user {
continue
}
}
@@ -107,9 +107,9 @@ func GetOutputLibrary(lib *libraries.Library) *rpc.Library {
InstallDir: insdir,
SourceDir: srcdir,
UtilityDir: utldir,
Location: lib.Location.String(),
Location: lib.Location,
ContainerPlatform: cntplat,
Layout: lib.Layout.String(),
Layout: lib.Layout,
RealName: lib.RealName,
DotALinkage: lib.DotALinkage,
Precompiled: lib.Precompiled,
3 changes: 2 additions & 1 deletion legacy/builder/fail_if_imported_library_is_wrong.go
Original file line number Diff line number Diff line change
@@ -20,6 +20,7 @@ import (
"github.com/arduino/arduino-cli/legacy/builder/constants"
"github.com/arduino/arduino-cli/legacy/builder/i18n"
"github.com/arduino/arduino-cli/legacy/builder/types"
rpc "github.com/arduino/arduino-cli/rpc/commands"
)

type FailIfImportedLibraryIsWrong struct{}
@@ -41,7 +42,7 @@ func (s *FailIfImportedLibraryIsWrong) Run(ctx *types.Context) error {
return i18n.ErrorfWithLogger(logger, constants.MSG_PROP_IN_LIBRARY, propName, library.InstallDir)
}
}
if library.Layout == libraries.RecursiveLayout {
if library.Layout == rpc.LibraryLayout_recursive_layout {
if library.UtilityDir != nil {
return i18n.ErrorfWithLogger(logger, constants.MSG_LIBRARY_CAN_USE_SRC_AND_UTILITY_FOLDERS, library.InstallDir)
}
10 changes: 5 additions & 5 deletions legacy/builder/libraries_loader.go
Original file line number Diff line number Diff line change
@@ -18,11 +18,11 @@ package builder
import (
"os"

"github.com/arduino/arduino-cli/arduino/libraries"
"github.com/arduino/arduino-cli/arduino/libraries/librariesmanager"
"github.com/arduino/arduino-cli/arduino/libraries/librariesresolver"
"github.com/arduino/arduino-cli/legacy/builder/i18n"
"github.com/arduino/arduino-cli/legacy/builder/types"
rpc "github.com/arduino/arduino-cli/rpc/commands"
)

type LibrariesLoader struct{}
@@ -36,7 +36,7 @@ func (s *LibrariesLoader) Run(ctx *types.Context) error {
return i18n.WrapError(err)
}
for _, folder := range builtInLibrariesFolders {
lm.AddLibrariesDir(folder, libraries.IDEBuiltIn)
lm.AddLibrariesDir(folder, rpc.LibraryLocation_ide_builtin)
}

debugLevel := ctx.DebugLevel
@@ -45,16 +45,16 @@ func (s *LibrariesLoader) Run(ctx *types.Context) error {
actualPlatform := ctx.ActualPlatform
platform := ctx.TargetPlatform
if actualPlatform != platform {
lm.AddPlatformReleaseLibrariesDir(actualPlatform, libraries.ReferencedPlatformBuiltIn)
lm.AddPlatformReleaseLibrariesDir(actualPlatform, rpc.LibraryLocation_referenced_platform_builtin)
}
lm.AddPlatformReleaseLibrariesDir(platform, libraries.PlatformBuiltIn)
lm.AddPlatformReleaseLibrariesDir(platform, rpc.LibraryLocation_platform_builtin)

librariesFolders := ctx.OtherLibrariesDirs
if err := librariesFolders.ToAbs(); err != nil {
return i18n.WrapError(err)
}
for _, folder := range librariesFolders {
lm.AddLibrariesDir(folder, libraries.User)
lm.AddLibrariesDir(folder, rpc.LibraryLocation_user)
}

if err := lm.RescanLibraries(); err != nil {
3 changes: 2 additions & 1 deletion legacy/builder/phases/libraries_builder.go
Original file line number Diff line number Diff line change
@@ -26,6 +26,7 @@ import (
"github.com/arduino/arduino-cli/legacy/builder/i18n"
"github.com/arduino/arduino-cli/legacy/builder/types"
"github.com/arduino/arduino-cli/legacy/builder/utils"
rpc "github.com/arduino/arduino-cli/rpc/commands"
"github.com/arduino/go-paths-helper"
"github.com/arduino/go-properties-orderedmap"
)
@@ -191,7 +192,7 @@ func compileLibrary(ctx *types.Context, library *libraries.Library, buildPath *p
}
}

if library.Layout == libraries.RecursiveLayout {
if library.Layout == rpc.LibraryLayout_recursive_layout {
libObjectFiles, err := builder_utils.CompileFilesRecursive(ctx, library.SourceDir, libraryBuildPath, buildProperties, includes)
if err != nil {
return nil, i18n.WrapError(err)
211 changes: 106 additions & 105 deletions rpc/commands/lib.pb.go

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions rpc/commands/lib.proto
Original file line number Diff line number Diff line change
@@ -149,9 +149,7 @@ message Library {
string install_dir = 10;
string source_dir = 11;
string utility_dir = 12;
string location = 13;
string container_platform = 14;
string layout = 15;
string real_name = 16;
bool dot_a_linkage = 17;
bool precompiled = 18;
@@ -160,6 +158,8 @@ message Library {
string version = 21;
string license = 22;
map<string, string> properties = 23;
LibraryLocation location = 24;
LibraryLayout layout = 25;
}

enum LibraryLayout {
@@ -169,7 +169,7 @@ enum LibraryLayout {

enum LibraryLocation {
ide_builtin = 0;
platform_builtin = 1;
referenced_platform_builtin = 2;
sketchbook = 3;
user = 1; // (sketchbook)
platform_builtin = 2;
referenced_platform_builtin = 3;
}