Skip to content

Adding support of "additional library directories" to IDE & compilation #8221

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 1 commit into from
Closed
Show file tree
Hide file tree
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
23 changes: 23 additions & 0 deletions arduino-core/src/cc/arduino/Compiler.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,10 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
Expand Down Expand Up @@ -249,6 +251,18 @@ private void callArduinoBuilder(TargetBoard board, TargetPlatform platform, Targ
addPathFlagIfPathExists(cmd, "-built-in-libraries", BaseNoGui.getContentFile("libraries"));
addPathFlagIfPathExists(cmd, "-libraries", BaseNoGui.getSketchbookLibrariesFolder().folder);

// adding several additional library directories, taken from preferences.txt
// additional_library_directories=path1[;path2[;...]]
Collection<String> additional_library_directories = splitAndTrim(PreferencesData.get("additional_library_directories"), ";");
for (String path : additional_library_directories) {
File fpath = new File(path);
addPathFlagIfPathExists(cmd, "-libraries", fpath);

if (!fpath.isDirectory()) {
System.err.println(I18n.format(tr("Warning: additional_library_directories: directory '{0}' not found"), path));
}
}

String fqbn = Stream.of(aPackage.getId(), platform.getId(), board.getId(), boardOptions(board)).filter(s -> !s.isEmpty()).collect(Collectors.joining(":"));
cmd.add("-fqbn=" + fqbn);

Expand Down Expand Up @@ -623,4 +637,13 @@ private RunnerException placeException(String message, String fileName, int line
}
return null;
}

private Collection<String> splitAndTrim(String text, String separator) {
if ((text == null) || (text.length() == 0)) {
return Collections.emptyList() ;
}

Collection<String> parts = Arrays.asList(text.split(separator));
return parts.stream().map(String::trim).filter(part -> !part.isEmpty()).collect(Collectors.toList());
}
}
23 changes: 23 additions & 0 deletions arduino-core/src/processing/app/BaseNoGui.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;

import cc.arduino.packages.BoardPort;

Expand Down Expand Up @@ -672,6 +673,19 @@ static public void onBoardOrPortChange() {
// Add libraries folder for the sketchbook
librariesFolders.add(getSketchbookLibrariesFolder());

// Adding several additional library directories, taken from preferences.txt
// additional_library_directories=path1[;path2[;...]]
Collection<String> additional_library_directories = splitAndTrim(PreferencesData.get("additional_library_directories"), ";");
for (String path : additional_library_directories) {
File fpath = new File(path);

if (fpath.isDirectory()) {
librariesFolders.add(new UserLibraryFolder(fpath, Location.ADDITIONAL));
} else {
System.err.println(I18n.format(tr("Warning: additional_library_directories: directory '{0}' not found"), path));
}
}

// Scan for libraries in each library folder.
// Libraries located in the latest folders on the list can override
// other libraries with the same name.
Expand Down Expand Up @@ -949,6 +963,15 @@ static public void showError(String title, String message, Throwable e) {
notifier.showError(title, message, e, 1);
}

static private Collection<String> splitAndTrim(String text, String separator) {
if ((text == null) || (text.length() == 0)) {
return Collections.emptyList() ;
}

Collection<String> parts = Arrays.asList(text.split(separator));
return parts.stream().map(String::trim).filter(part -> !part.isEmpty()).collect(Collectors.toList());
}

/**
* Show an error message that's actually fatal to the program.
* This is an error that can't be recovered. Use showWarning()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
public class UserLibraryFolder {

public enum Location {
SKETCHBOOK, CORE, REFERENCED_CORE, IDE_BUILTIN,
SKETCHBOOK, CORE, REFERENCED_CORE, IDE_BUILTIN, ADDITIONAL,
}

public File folder;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ public class UserLibraryPriorityComparator implements Comparator<UserLibrary> {

private final static Map<Location, Integer> priorities = new HashMap<>();
static {
priorities.put(Location.SKETCHBOOK, 4);
priorities.put(Location.SKETCHBOOK, 5);
priorities.put(Location.ADDITIONAL, 4);
priorities.put(Location.CORE, 3);
priorities.put(Location.REFERENCED_CORE, 2);
priorities.put(Location.IDE_BUILTIN, 1);
Expand Down