Merge branch 'fix-tools'

This commit is contained in:
Cristian Maglie 2016-08-03 16:27:09 +02:00
commit 910c602546
4 changed files with 77 additions and 5 deletions

View File

@ -51,6 +51,7 @@ import java.nio.file.StandardCopyOption;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@ -235,6 +236,12 @@ public class Compiler implements MessageConsumer {
commandLine.addArgument("-prefs=build.warn_data_percentage=" + PreferencesData.get("build.warn_data_percentage")); commandLine.addArgument("-prefs=build.warn_data_percentage=" + PreferencesData.get("build.warn_data_percentage"));
for (Map.Entry<String, String> entry : BaseNoGui.getBoardPreferences().entrySet()) {
if (entry.getKey().startsWith("runtime.tools")) {
commandLine.addArgument("-prefs=" + entry.getKey() + "=" + entry.getValue());
}
}
//commandLine.addArgument("-debug-level=10", false); //commandLine.addArgument("-debug-level=10", false);
if (verbose) { if (verbose) {

View File

@ -42,6 +42,20 @@ public abstract class ContributedTool {
public abstract List<HostDependentDownloadableContribution> getSystems(); public abstract List<HostDependentDownloadableContribution> getSystems();
private ContributedPackage contributedPackage;
public ContributedPackage getPackage() {
return contributedPackage;
}
public void setPackage(ContributedPackage pack) {
contributedPackage = pack;
}
public String getPackager() {
return contributedPackage.getName();
}
public DownloadableContribution getDownloadableContribution(Platform platform) { public DownloadableContribution getDownloadableContribution(Platform platform) {
for (HostDependentDownloadableContribution c : getSystems()) { for (HostDependentDownloadableContribution c : getSystems()) {
if (c.isCompatible(platform)) if (c.isCompatible(platform))

View File

@ -104,6 +104,11 @@ public class ContributionsIndexer {
.collect(Collectors.toList()); .collect(Collectors.toList());
for (ContributedPackage pack : packages) { for (ContributedPackage pack : packages) {
// Fill references to package in tools
for (ContributedTool tool : pack.getTools()) {
tool.setPackage(pack);
}
for (ContributedPlatform platform : pack.getPlatforms()) { for (ContributedPlatform platform : pack.getPlatforms()) {
// Set a reference to parent packages // Set a reference to parent packages
platform.setParentPackage(pack); platform.setParentPackage(pack);
@ -434,4 +439,12 @@ public class ContributionsIndexer {
return platformOptional.orElse(null); return platformOptional.orElse(null);
} }
public ContributedPlatform getContributedPlaform(TargetPlatform targetPlatform) {
for (ContributedPlatform plat : getInstalledPlatforms()) {
if (plat.getInstalledFolder().equals(targetPlatform.getFolder()))
return plat;
}
return null;
}
} }

View File

@ -5,7 +5,9 @@ import cc.arduino.Constants;
import cc.arduino.UploaderUtils; import cc.arduino.UploaderUtils;
import cc.arduino.contributions.GPGDetachedSignatureVerifier; import cc.arduino.contributions.GPGDetachedSignatureVerifier;
import cc.arduino.contributions.SignatureVerificationFailedException; import cc.arduino.contributions.SignatureVerificationFailedException;
import cc.arduino.contributions.VersionComparator;
import cc.arduino.contributions.libraries.LibrariesIndexer; import cc.arduino.contributions.libraries.LibrariesIndexer;
import cc.arduino.contributions.packages.ContributedPlatform;
import cc.arduino.contributions.packages.ContributedTool; import cc.arduino.contributions.packages.ContributedTool;
import cc.arduino.contributions.packages.ContributionsIndexer; import cc.arduino.contributions.packages.ContributionsIndexer;
import cc.arduino.files.DeleteFilesOnShutdown; import cc.arduino.files.DeleteFilesOnShutdown;
@ -160,6 +162,33 @@ public class BaseNoGui {
} }
} }
prefs.put("name", extendedName); prefs.put("name", extendedName);
// Resolve tools needed for this board
List<ContributedTool> requiredTools = new ArrayList<>();
// Add all tools dependencies specified in package index
ContributedPlatform platform = indexer.getContributedPlaform(getTargetPlatform());
if (platform != null)
requiredTools.addAll(platform.getResolvedTools());
// Add all tools dependencies from the (possibily) referenced core
String core = prefs.get("build.core");
if (core.contains(":")) {
String split[] = core.split(":");
TargetPlatform referenced = BaseNoGui.getCurrentTargetPlatformFromPackage(split[0]);
ContributedPlatform referencedPlatform = indexer.getContributedPlaform(referenced);
if (referencedPlatform != null)
requiredTools.addAll(referencedPlatform.getResolvedTools());
}
String prefix = "runtime.tools.";
for (ContributedTool tool : requiredTools) {
File folder = tool.getDownloadableContribution(getPlatform()).getInstalledFolder();
String toolPath = folder.getAbsolutePath();
prefs.put(prefix + tool.getName() + ".path", toolPath);
PreferencesData.set(prefix + tool.getName() + ".path", toolPath);
PreferencesData.set(prefix + tool.getName() + "-" + tool.getVersion() + ".path", toolPath);
}
return prefs; return prefs;
} }
@ -852,16 +881,25 @@ public class BaseNoGui {
PreferencesData.removeAllKeysWithPrefix(prefix); PreferencesData.removeAllKeysWithPrefix(prefix);
} }
Map<String, String> latestVersions = new HashMap<>();
VersionComparator comparator = new VersionComparator();
for (ContributedTool tool : installedTools) { for (ContributedTool tool : installedTools) {
File installedFolder = tool.getDownloadableContribution(getPlatform()).getInstalledFolder(); File installedFolder = tool.getDownloadableContribution(getPlatform()).getInstalledFolder();
String absolutePath; String toolPath;
if (installedFolder != null) { if (installedFolder != null) {
absolutePath = installedFolder.getAbsolutePath(); toolPath = installedFolder.getAbsolutePath();
} else { } else {
absolutePath = Constants.PREF_REMOVE_PLACEHOLDER; toolPath = Constants.PREF_REMOVE_PLACEHOLDER;
}
String toolName = tool.getName();
String toolVersion = tool.getVersion();
PreferencesData.set(prefix + toolName + "-" + toolVersion + ".path", toolPath);
PreferencesData.set(prefix + tool.getPackager() + "-" + toolName + "-" + toolVersion + ".path", toolPath);
// In the generic tool property put the path of the latest version if more are available
if (!latestVersions.containsKey(toolName) || comparator.greaterThan(toolVersion, latestVersions.get(toolName))) {
latestVersions.put(toolName, toolVersion);
PreferencesData.set(prefix + toolName + ".path", toolPath);
} }
PreferencesData.set(prefix + tool.getName() + ".path", absolutePath);
PreferencesData.set(prefix + tool.getName() + "-" + tool.getVersion() + ".path", absolutePath);
} }
} }