From ecde17b6e2bd2baff8f4c975747b9383d55dba30 Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Mon, 30 Mar 2015 16:18:08 +0200 Subject: [PATCH] Platform.txt in-memory rewrite rules: whenever loaded, if a property is set to a value known to be wrong/old, that property is replaced with the current/right value. This happens in-memory, no platform.txt file were harmed during rewriting Mitigate #2838 --- .../app/debug/LegacyTargetPlatform.java | 43 +++++++++++++++++-- build/build.xml | 2 + hardware/platform.keys.rewrite.txt | 17 ++++++++ 3 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 hardware/platform.keys.rewrite.txt diff --git a/arduino-core/src/processing/app/debug/LegacyTargetPlatform.java b/arduino-core/src/processing/app/debug/LegacyTargetPlatform.java index cbc5d16c1..493ba5147 100644 --- a/arduino-core/src/processing/app/debug/LegacyTargetPlatform.java +++ b/arduino-core/src/processing/app/debug/LegacyTargetPlatform.java @@ -20,8 +20,9 @@ */ package processing.app.debug; -import static processing.app.I18n._; -import static processing.app.I18n.format; +import processing.app.BaseNoGui; +import processing.app.I18n; +import processing.app.helpers.PreferencesMap; import java.io.File; import java.io.IOException; @@ -29,7 +30,8 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; -import processing.app.helpers.PreferencesMap; +import static processing.app.I18n._; +import static processing.app.I18n.format; public class LegacyTargetPlatform implements TargetPlatform { @@ -117,6 +119,12 @@ public class LegacyTargetPlatform implements TargetPlatform { format(_("Error loading {0}"), localPlatformsFile.getAbsolutePath()), e); } + try { + rewriteKeysOfOldPlatformsTxtAndWarnAboutIt(); + } catch (IOException e) { + throw new TargetPlatformException(e); + } + File progFile = new File(folder, "programmers.txt"); try { if (progFile.exists() && progFile.canRead()) { @@ -130,6 +138,35 @@ public class LegacyTargetPlatform implements TargetPlatform { } } + private void rewriteKeysOfOldPlatformsTxtAndWarnAboutIt() throws IOException { + File platformRewrite = new File(BaseNoGui.getHardwareFolder(), "platform.keys.rewrite.txt"); + PreferencesMap platformRewriteProps = new PreferencesMap(platformRewrite); + + PreferencesMap oldProps = platformRewriteProps.subTree("old"); + PreferencesMap newProps = platformRewriteProps.subTree("new"); + + String platformName = preferences.get("name"); + if (platformName == null) { + platformName = folder.getAbsolutePath(); + } + + for (Map.Entry entry : oldProps.entrySet()) { + String preferencesKey = entry.getKey().substring(entry.getKey().indexOf(".") + 1); + if (preferences.containsKey(preferencesKey) && entry.getValue().equals(preferences.get(preferencesKey))) { + System.err.println(I18n.format(_("Warning: platform.txt from core '{0}' contains deprecated {1}, automatically converted to {2}. Consider upgrading this core."), platformName, preferencesKey + "=" + entry.getValue(), preferencesKey + "=" + newProps.get(entry.getKey()))); + preferences.put(preferencesKey, newProps.get(entry.getKey())); + } + } + + PreferencesMap addedProps = platformRewriteProps.subTree("added"); + for (Map.Entry entry : addedProps.entrySet()) { + if (!preferences.containsKey(entry.getKey())) { + System.err.println(I18n.format(_("Warning: platform.txt from core '{0}' misses property {1}, automatically set to {2}. Consider upgrading this core."), platformName, entry.getKey(), entry.getValue())); + preferences.put(entry.getKey(), entry.getValue()); + } + } + } + @Override public String getId() { return id; diff --git a/build/build.xml b/build/build.xml index 4c4eab576..62ad948e3 100644 --- a/build/build.xml +++ b/build/build.xml @@ -113,6 +113,8 @@ + + diff --git a/hardware/platform.keys.rewrite.txt b/hardware/platform.keys.rewrite.txt new file mode 100644 index 000000000..e14de1e6d --- /dev/null +++ b/hardware/platform.keys.rewrite.txt @@ -0,0 +1,17 @@ +old.0.compiler.path={runtime.ide.path}/hardware/tools/avr/bin/ +new.0.compiler.path={runtime.tools.avr-gcc.path}/bin/ + +added.tools.avrdude.path={runtime.tools.avrdude.path} + +old.1.tools.avrdude.cmd.path={runtime.ide.path}/hardware/tools/avr/bin/avrdude +new.1.tools.avrdude.cmd.path={path}/bin/avrdude + +old.2.tools.avrdude.config.path={runtime.ide.path}/hardware/tools/avr/etc/avrdude.conf +new.2.tools.avrdude.config.path={path}/etc/avrdude.conf + +old.3.compiler.path={runtime.ide.path}/hardware/tools/gcc-arm-none-eabi-4.8.3-2014q1/bin/ +new.3.compiler.path={runtime.tools.arm-none-eabi-gcc.path}/bin/ + +old.4.tools.bossac.path={runtime.ide.path}/hardware/tools +new.4.tools.bossac.path={runtime.tools.bossac.path} +