作者:me-no-de
项目:arduino-builde
func findToolUrl(index map[string]interface{}, tool Tool, host []string) (string, error) {
if len(tool.OsUrls) > 0 {
for _, osUrl := range tool.OsUrls {
if utils.SliceContains(host, osUrl.Os) {
return osUrl.Url, nil
}
}
} else {
packages := index["packages"].([]interface{})
for _, p := range packages {
pack := p.(map[string]interface{})
packageTools := pack[constants.PACKAGE_TOOLS].([]interface{})
for _, pt := range packageTools {
packageTool := pt.(map[string]interface{})
name := packageTool[constants.TOOL_NAME].(string)
version := packageTool[constants.TOOL_VERSION].(string)
if name == tool.Name && version == tool.Version {
systems := packageTool["systems"].([]interface{})
for _, s := range systems {
system := s.(map[string]interface{})
if utils.SliceContains(host, system["host"].(string)) {
return system[constants.TOOL_URL].(string), nil
}
}
}
}
}
}
return constants.EMPTY_STRING, errors.Errorf("Unable to find tool " + tool.Name + " " + tool.Version)
}
作者:ricklo
项目:arduino-builde
func libraryCompatibleWithPlatform(library *types.Library, platform *types.Platform) bool {
if len(library.Archs) == 0 {
return true
}
if utils.SliceContains(library.Archs, constants.LIBRARY_ALL_ARCHS) {
return true
}
return utils.SliceContains(library.Archs, platform.PlatformId)
}
作者:ricklo
项目:arduino-builde
func (library *Library) SupportsArchitectures(archs []string) bool {
if utils.SliceContains(archs, constants.LIBRARY_ALL_ARCHS) || utils.SliceContains(library.Archs, constants.LIBRARY_ALL_ARCHS) {
return true
}
for _, libraryArch := range library.Archs {
if utils.SliceContains(archs, libraryArch) {
return true
}
}
return false
}
作者:facchin
项目:arduino-builde
func (s *FilterSketchSource) Run(ctx *types.Context) error {
fileNames := []string{ctx.Sketch.MainFile.Name}
for _, file := range ctx.Sketch.OtherSketchFiles {
fileNames = append(fileNames, file.Name)
}
inSketch := false
filtered := ""
scanner := bufio.NewScanner(strings.NewReader(*s.Source))
for scanner.Scan() {
line := scanner.Text()
filename := parseLineMarker(line)
if filename != "" {
inSketch = utils.SliceContains(fileNames, filename)
}
if inSketch {
filtered += line + "\n"
}
}
*s.Source = filtered
return nil
}
作者:me-no-de
项目:arduino-builde
func (s *UnusedCompiledLibrariesRemover) Run(ctx *types.Context) error {
librariesBuildPath := ctx.LibrariesBuildPath
_, err := os.Stat(librariesBuildPath)
if err != nil && os.IsNotExist(err) {
return nil
}
libraryNames := toLibraryNames(ctx.ImportedLibraries)
files, err := ioutil.ReadDir(librariesBuildPath)
if err != nil {
return i18n.WrapError(err)
}
for _, file := range files {
if file.IsDir() {
if !utils.SliceContains(libraryNames, file.Name()) {
err := os.RemoveAll(filepath.Join(librariesBuildPath, file.Name()))
if err != nil {
return i18n.WrapError(err)
}
}
}
}
return nil
}
作者:andy52
项目:arduino-builde
func (s *UnusedCompiledLibrariesRemover) Run(context map[string]interface{}) error {
librariesBuildPath := context[constants.CTX_LIBRARIES_BUILD_PATH].(string)
libraries := context[constants.CTX_IMPORTED_LIBRARIES].([]*types.Library)
_, err := os.Stat(librariesBuildPath)
if err != nil && os.IsNotExist(err) {
return nil
}
libraryNames := toLibraryNames(libraries)
files, err := ioutil.ReadDir(librariesBuildPath)
if err != nil {
return utils.WrapError(err)
}
for _, file := range files {
if file.IsDir() {
if !utils.SliceContains(libraryNames, file.Name()) {
err := os.RemoveAll(filepath.Join(librariesBuildPath, file.Name()))
if err != nil {
return utils.WrapError(err)
}
}
}
}
return nil
}
作者:stevemarpl
项目:arduino-builde
func TestIncludesFinderWithGCCSketchWithConfig(t *testing.T) {
DownloadCoresAndToolsAndLibraries(t)
context := make(map[string]interface{})
buildPath := SetupBuildPath(t, context)
defer os.RemoveAll(buildPath)
context[constants.CTX_HARDWARE_FOLDERS] = []string{filepath.Join("..", "hardware"), "hardware", "downloaded_hardware"}
context[constants.CTX_TOOLS_FOLDERS] = []string{"downloaded_tools"}
context[constants.CTX_BUILT_IN_LIBRARIES_FOLDERS] = []string{"downloaded_libraries"}
context[constants.CTX_OTHER_LIBRARIES_FOLDERS] = []string{"dependent_libraries", "libraries"}
context[constants.CTX_FQBN] = "arduino:avr:leonardo"
context[constants.CTX_SKETCH_LOCATION] = filepath.Join("sketch_with_config", "sketch_with_config.ino")
context[constants.CTX_BUILD_PROPERTIES_RUNTIME_IDE_VERSION] = "10600"
context[constants.CTX_VERBOSE] = false
commands := []types.Command{
&builder.SetupHumanLoggerIfMissing{},
&builder.ContainerSetupHardwareToolsLibsSketchAndProps{},
&builder.ContainerMergeCopySketchFiles{},
&builder.ContainerFindIncludes{},
}
for _, command := range commands {
err := command.Run(context)
NoError(t, err)
}
require.NotNil(t, context[constants.CTX_INCLUDES])
includes := context[constants.CTX_INCLUDES].([]string)
require.True(t, utils.SliceContains(includes, filepath.Join(buildPath, constants.FOLDER_SKETCH, "config.h")))
require.True(t, utils.SliceContains(includes, filepath.Join(buildPath, constants.FOLDER_SKETCH, "includes")+"/de bug.h"))
require.True(t, utils.SliceContains(includes, "Bridge.h"))
importedLibraries := context[constants.CTX_IMPORTED_LIBRARIES].([]*types.Library)
require.Equal(t, 1, len(importedLibraries))
require.Equal(t, "Bridge", importedLibraries[0].Name)
}
作者:spiderkey
项目:arduino-builde
func (s *CollectCTagsFromSketchFiles) Run(context map[string]interface{}) error {
sketch := context[constants.CTX_SKETCH].(*types.Sketch)
sketchFileNames := collectSketchFileNamesFrom(sketch)
allCtags := context[constants.CTX_CTAGS_OF_PREPROC_SOURCE].([]*types.CTag)
ctagsOfSketch := []*types.CTag{}
for _, ctag := range allCtags {
if utils.SliceContains(sketchFileNames, strings.Replace(ctag.Filename, "\\\\", "\\", -1)) {
ctagsOfSketch = append(ctagsOfSketch, ctag)
}
}
作者:ricklo
项目:arduino-builde
func appendPathToLibrariesFolders(librariesFolders []string, newLibrariesFolder string) []string {
if stat, err := os.Stat(newLibrariesFolder); os.IsNotExist(err) || !stat.IsDir() {
return librariesFolders
}
if utils.SliceContains(librariesFolders, newLibrariesFolder) {
return librariesFolders
}
return append(librariesFolders, newLibrariesFolder)
}
作者:ricklo
项目:arduino-builde
func (s *ComparePrototypesFromSourceAndPreprocSource) Run(context map[string]interface{}) error {
prototypesOfSource := context[constants.CTX_PROTOTYPES_OF_SOURCE].([]string)
prototypesOfPreprocSource := context[constants.CTX_PROTOTYPES_OF_PREPROC_SOURCE].([]string)
var actualPrototypes []string
for _, prototypeOfSource := range prototypesOfSource {
if utils.SliceContains(prototypesOfPreprocSource, prototypeOfSource) {
actualPrototypes = append(actualPrototypes, prototypeOfSource)
}
}
context[constants.CTX_PROTOTYPES] = actualPrototypes
return nil
}
作者:facchin
项目:arduino-builde
func (s *SketchLoader) Run(ctx *types.Context) error {
if ctx.SketchLocation == "" {
return nil
}
sketchLocation := ctx.SketchLocation
sketchLocation, err := filepath.Abs(sketchLocation)
if err != nil {
return i18n.WrapError(err)
}
mainSketchStat, err := os.Stat(sketchLocation)
if err != nil {
return i18n.WrapError(err)
}
if mainSketchStat.IsDir() {
sketchLocation = filepath.Join(sketchLocation, mainSketchStat.Name()+".ino")
}
ctx.SketchLocation = sketchLocation
allSketchFilePaths, err := collectAllSketchFiles(filepath.Dir(sketchLocation))
if err != nil {
return i18n.WrapError(err)
}
logger := ctx.GetLogger()
if !utils.SliceContains(allSketchFilePaths, sketchLocation) {
return i18n.ErrorfWithLogger(logger, constants.MSG_CANT_FIND_SKETCH_IN_PATH, sketchLocation, filepath.Dir(sketchLocation))
}
sketch, err := makeSketch(sketchLocation, allSketchFilePaths, logger)
if err != nil {
return i18n.WrapError(err)
}
ctx.SketchLocation = sketchLocation
ctx.Sketch = sketch
return nil
}
作者:stevemarpl
项目:arduino-builde
func (s *SketchLoader) Run(context map[string]interface{}) error {
if !utils.MapHas(context, constants.CTX_SKETCH_LOCATION) {
return nil
}
sketchLocation := context[constants.CTX_SKETCH_LOCATION].(string)
sketchLocation, err := filepath.Abs(sketchLocation)
if err != nil {
return utils.WrapError(err)
}
mainSketchStat, err := os.Stat(sketchLocation)
if err != nil {
return utils.WrapError(err)
}
if mainSketchStat.IsDir() {
sketchLocation = filepath.Join(sketchLocation, mainSketchStat.Name()+".ino")
}
context[constants.CTX_SKETCH_LOCATION] = sketchLocation
allSketchFilePaths, err := collectAllSketchFiles(filepath.Dir(sketchLocation))
if err != nil {
return utils.WrapError(err)
}
if !utils.SliceContains(allSketchFilePaths, sketchLocation) {
return utils.Errorf(context, constants.MSG_CANT_FIND_SKETCH_IN_PATH, sketchLocation, filepath.Dir(sketchLocation))
}
logger := context[constants.CTX_LOGGER].(i18n.Logger)
sketch, err := makeSketch(sketchLocation, allSketchFilePaths, logger)
if err != nil {
return utils.WrapError(err)
}
context[constants.CTX_SKETCH_LOCATION] = sketchLocation
context[constants.CTX_SKETCH] = sketch
return nil
}
作者:me-no-de
项目:arduino-builde
func TestIncludesFinderWithGCCSketchWithConfig(t *testing.T) {
DownloadCoresAndToolsAndLibraries(t)
ctx := &types.Context{
HardwareFolders: []string{filepath.Join("..", "hardware"), "hardware", "downloaded_hardware"},
ToolsFolders: []string{"downloaded_tools"},
BuiltInLibrariesFolders: []string{"downloaded_libraries"},
OtherLibrariesFolders: []string{"dependent_libraries", "libraries"},
SketchLocation: filepath.Join("sketch_with_config", "sketch_with_config.ino"),
FQBN: "arduino:avr:leonardo",
ArduinoAPIVersion: "10600",
Verbose: true,
}
buildPath := SetupBuildPath(t, ctx)
defer os.RemoveAll(buildPath)
commands := []types.Command{
&builder.ContainerSetupHardwareToolsLibsSketchAndProps{},
&builder.ContainerMergeCopySketchFiles{},
&builder.ContainerFindIncludes{},
}
for _, command := range commands {
err := command.Run(ctx)
NoError(t, err)
}
includes := ctx.Includes
require.Equal(t, 1, len(includes))
require.True(t, utils.SliceContains(includes, "Bridge.h"))
importedLibraries := ctx.ImportedLibraries
require.Equal(t, 1, len(importedLibraries))
require.Equal(t, "Bridge", importedLibraries[0].Name)
}
作者:me-no-de
项目:arduino-builde
func libraryCompatibleWithAllPlatforms(library *types.Library) bool {
if utils.SliceContains(library.Archs, constants.LIBRARY_ALL_ARCHS) {
return true
}
return false
}