1
0
mirror of https://github.com/arduino/Arduino.git synced 2024-12-01 12:24:14 +01:00

Bundled core is again inside the hardware folder.

Fixed a handful of glitches when dealing with multiple installed cores
This commit is contained in:
Federico Fissore 2015-03-31 17:00:01 +02:00
parent 98f364ea38
commit 29cb42eb50
27 changed files with 359 additions and 285 deletions

Binary file not shown.

View File

View File

@ -1,17 +0,0 @@
package cc.arduino.contributions.libraries.filters;
import cc.arduino.contributions.libraries.ContributedLibrary;
import com.google.common.base.Predicate;
public class BuiltInPredicate implements Predicate<ContributedLibrary> {
@Override
public boolean apply(ContributedLibrary input) {
return input.isReadOnly();
}
@Override
public boolean equals(Object obj) {
return obj instanceof BuiltInPredicate;
}
}

View File

@ -29,15 +29,16 @@
package cc.arduino.contributions.libraries.ui; package cc.arduino.contributions.libraries.ui;
import cc.arduino.contributions.VersionComparator; import cc.arduino.contributions.VersionComparator;
import cc.arduino.contributions.VersionHelper;
import cc.arduino.contributions.filters.InstalledPredicate; import cc.arduino.contributions.filters.InstalledPredicate;
import cc.arduino.contributions.libraries.ContributedLibrary; import cc.arduino.contributions.libraries.ContributedLibrary;
import cc.arduino.contributions.libraries.ContributedLibraryComparator; import cc.arduino.contributions.libraries.ContributedLibraryComparator;
import cc.arduino.contributions.libraries.filters.BuiltInPredicate; import cc.arduino.contributions.filters.BuiltInPredicate;
import cc.arduino.contributions.libraries.filters.InstalledLibraryPredicate;
import cc.arduino.contributions.libraries.filters.OnlyUpstreamReleasePredicate; import cc.arduino.contributions.libraries.filters.OnlyUpstreamReleasePredicate;
import cc.arduino.contributions.ui.InstallerTableCell; import cc.arduino.contributions.ui.InstallerTableCell;
import cc.arduino.contributions.ui.listeners.DelegatingKeyListener; import cc.arduino.contributions.ui.listeners.DelegatingKeyListener;
import cc.arduino.utils.ReverseComparator; import cc.arduino.utils.ReverseComparator;
import com.github.zafarkhaja.semver.Version;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.google.common.collect.Collections2; import com.google.common.collect.Collections2;
@ -66,7 +67,6 @@ import static processing.app.I18n.format;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class ContributedLibraryTableCell extends InstallerTableCell { public class ContributedLibraryTableCell extends InstallerTableCell {
private final LibraryManagerUI indexer;
private JPanel panel; private JPanel panel;
private JButton installButton; private JButton installButton;
private Component installButtonPlaceholder; private Component installButtonPlaceholder;
@ -77,9 +77,7 @@ public class ContributedLibraryTableCell extends InstallerTableCell {
private JPanel inactiveButtonsPanel; private JPanel inactiveButtonsPanel;
private JLabel statusLabel; private JLabel statusLabel;
public ContributedLibraryTableCell(LibraryManagerUI indexer) { public ContributedLibraryTableCell() {
this.indexer = indexer;
{ {
installButton = new JButton(_("Install")); installButton = new JButton(_("Install"));
installButton.addActionListener(new ActionListener() { installButton.addActionListener(new ActionListener() {
@ -359,7 +357,7 @@ public class ContributedLibraryTableCell extends InstallerTableCell {
// ...version. // ...version.
if (installed != null) { if (installed != null) {
String installedVer = installed.getVersion(); Version installedVer = VersionHelper.valueOf(installed.getVersion());
if (installedVer == null) { if (installedVer == null) {
desc += " " + _("Version unknown"); desc += " " + _("Version unknown");
} else { } else {

View File

@ -1,20 +1,20 @@
package cc.arduino.contributions.libraries.ui; package cc.arduino.contributions.libraries.ui;
import cc.arduino.contributions.libraries.ContributedLibrary; import cc.arduino.contributions.filters.BuiltInPredicate;
import cc.arduino.contributions.libraries.filters.BuiltInPredicate; import cc.arduino.contributions.packages.DownloadableContribution;
import cc.arduino.contributions.ui.DropdownItem; import cc.arduino.contributions.ui.DropdownItem;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import static processing.app.I18n._; import static processing.app.I18n._;
public class DropdownBuiltInLibrariesItem implements DropdownItem<ContributedLibrary> { public class DropdownBuiltInLibrariesItem implements DropdownItem<DownloadableContribution> {
public String toString() { public String toString() {
return _("Built-in"); return _("Built-in");
} }
@Override @Override
public Predicate<ContributedLibrary> getFilterPredicate() { public Predicate<DownloadableContribution> getFilterPredicate() {
return new BuiltInPredicate(); return new BuiltInPredicate();
} }
} }

View File

@ -28,16 +28,22 @@
*/ */
package cc.arduino.contributions.libraries.ui; package cc.arduino.contributions.libraries.ui;
import cc.arduino.contributions.VersionComparator; import cc.arduino.contributions.DownloadableContributionBuiltInAtTheBottomComparator;
import cc.arduino.contributions.VersionHelper;
import cc.arduino.contributions.filters.InstalledPredicate;
import cc.arduino.contributions.libraries.ContributedLibrary; import cc.arduino.contributions.libraries.ContributedLibrary;
import cc.arduino.contributions.libraries.LibrariesIndexer; import cc.arduino.contributions.libraries.LibrariesIndexer;
import cc.arduino.contributions.packages.ContributedPlatform; import cc.arduino.contributions.packages.ContributedPlatform;
import cc.arduino.contributions.ui.FilteredAbstractTableModel; import cc.arduino.contributions.ui.FilteredAbstractTableModel;
import com.github.zafarkhaja.semver.Version;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.google.common.collect.Collections2; import com.google.common.collect.Collections2;
import java.util.*; import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class LibrariesIndexTableModel extends FilteredAbstractTableModel<ContributedLibrary> { public class LibrariesIndexTableModel extends FilteredAbstractTableModel<ContributedLibrary> {
@ -45,13 +51,18 @@ public class LibrariesIndexTableModel extends FilteredAbstractTableModel<Contrib
public final static int DESCRIPTION_COL = 0; public final static int DESCRIPTION_COL = 0;
public static class ContributedLibraryReleases implements Comparable<ContributedLibraryReleases> { public static class ContributedLibraryReleases implements Comparable<ContributedLibraryReleases> {
public final String name; public final String name;
public final List<ContributedLibrary> releases = new ArrayList<ContributedLibrary>(); public final List<ContributedLibrary> releases;
public final List<String> versions = new ArrayList<String>(); public final List<Version> versions;
public ContributedLibrary selected = null;
public ContributedLibrary selected;
public ContributedLibraryReleases(ContributedLibrary library) { public ContributedLibraryReleases(ContributedLibrary library) {
name = library.getName(); this.name = library.getName();
this.versions = new LinkedList<Version>();
this.releases = new LinkedList<ContributedLibrary>();
this.selected = null;
add(library); add(library);
} }
@ -61,40 +72,28 @@ public class LibrariesIndexTableModel extends FilteredAbstractTableModel<Contrib
public void add(ContributedLibrary library) { public void add(ContributedLibrary library) {
releases.add(library); releases.add(library);
versions.add(library.getVersion()); Version version = VersionHelper.valueOf(library.getVersion());
if (version != null) {
versions.add(version);
}
selected = getLatest(); selected = getLatest();
} }
public ContributedLibrary getInstalled() { public ContributedLibrary getInstalled() {
List<ContributedLibrary> installedReleases = new LinkedList<ContributedLibrary>(Collections2.filter(releases, new Predicate<ContributedLibrary>() { List<ContributedLibrary> installedReleases = new LinkedList<ContributedLibrary>(Collections2.filter(releases, new InstalledPredicate()));
@Override Collections.sort(installedReleases, new DownloadableContributionBuiltInAtTheBottomComparator());
public boolean apply(ContributedLibrary contributedLibrary) {
return contributedLibrary.isInstalled();
}
}));
return getLatestOf(installedReleases); if (installedReleases.isEmpty()) {
return null;
}
return installedReleases.get(0);
} }
public ContributedLibrary getLatest() { public ContributedLibrary getLatest() {
return getLatestOf(releases); return getLatestOf(releases);
} }
private ContributedLibrary getLatestOf(List<ContributedLibrary> libs) {
Collections.sort(new LinkedList<ContributedLibrary>(libs), new Comparator<ContributedLibrary>() {
@Override
public int compare(ContributedLibrary lib1, ContributedLibrary lib2) {
return VersionComparator.VERSION_COMPARATOR.compare(lib1.getVersion(), lib2.getVersion());
}
});
if (libs.isEmpty()) {
return null;
}
return libs.get(libs.size() - 1);
}
public ContributedLibrary getSelected() { public ContributedLibrary getSelected() {
return selected; return selected;
} }
@ -223,7 +222,7 @@ public class LibrariesIndexTableModel extends FilteredAbstractTableModel<Contrib
return col == DESCRIPTION_COL; return col == DESCRIPTION_COL;
} }
public List<String> getReleasesVersions(int row) { public List<Version> getReleasesVersions(int row) {
return contributions.get(row).versions; return contributions.get(row).versions;
} }

View File

@ -61,12 +61,12 @@ public class LibraryManagerUI extends InstallerJDialog<ContributedLibrary> {
@Override @Override
protected InstallerTableCell createCellRenderer() { protected InstallerTableCell createCellRenderer() {
return new ContributedLibraryTableCell(this); return new ContributedLibraryTableCell();
} }
@Override @Override
protected InstallerTableCell createCellEditor() { protected InstallerTableCell createCellEditor() {
return new ContributedLibraryTableCell(this) { return new ContributedLibraryTableCell() {
@Override @Override
protected void onInstall(ContributedLibrary selectedLibrary, ContributedLibrary installedLibrary) { protected void onInstall(ContributedLibrary selectedLibrary, ContributedLibrary installedLibrary) {
if (selectedLibrary.isReadOnly()) { if (selectedLibrary.isReadOnly()) {

View File

@ -29,7 +29,9 @@
package cc.arduino.contributions.packages.ui; package cc.arduino.contributions.packages.ui;
import cc.arduino.contributions.VersionComparator; import cc.arduino.contributions.VersionComparator;
import cc.arduino.contributions.VersionHelper;
import cc.arduino.contributions.filters.InstalledPredicate; import cc.arduino.contributions.filters.InstalledPredicate;
import cc.arduino.contributions.filters.BuiltInPredicate;
import cc.arduino.contributions.packages.ContributedBoard; import cc.arduino.contributions.packages.ContributedBoard;
import cc.arduino.contributions.packages.ContributedPlatform; import cc.arduino.contributions.packages.ContributedPlatform;
import cc.arduino.contributions.packages.ContributedPlatformComparator; import cc.arduino.contributions.packages.ContributedPlatformComparator;
@ -263,7 +265,7 @@ public class ContributedPlatformTableCell extends InstallerTableCell {
java.util.List<ContributedPlatform> releases = new LinkedList<ContributedPlatform>(editorValue.releases); java.util.List<ContributedPlatform> releases = new LinkedList<ContributedPlatform>(editorValue.releases);
java.util.List<ContributedPlatform> uninstalledReleases = new LinkedList<ContributedPlatform>(Collections2.filter(releases, Predicates.not(new InstalledPredicate()))); java.util.List<ContributedPlatform> uninstalledReleases = new LinkedList<ContributedPlatform>(Collections2.filter(releases, Predicates.not(new InstalledPredicate())));
java.util.List<ContributedPlatform> installedBuiltIn = new LinkedList<ContributedPlatform>(); java.util.List<ContributedPlatform> installedBuiltIn = new LinkedList<ContributedPlatform>(Collections2.filter(releases, Predicates.and(new InstalledPredicate(), new BuiltInPredicate())));
if (installed != null && !installedBuiltIn.contains(installed)) { if (installed != null && !installedBuiltIn.contains(installed)) {
uninstalledReleases.addAll(installedBuiltIn); uninstalledReleases.addAll(installedBuiltIn);
@ -330,8 +332,7 @@ public class ContributedPlatformTableCell extends InstallerTableCell {
upgradable = false; upgradable = false;
} else { } else {
installable = false; installable = false;
//removable = !installed.isReadOnly() && !hasBuiltInRelease; removable = !installed.isReadOnly() && !hasBuiltInRelease;
removable = !hasBuiltInRelease;
upgradable = new ContributedPlatformComparator().compare(selected, installed) > 0; upgradable = new ContributedPlatformComparator().compare(selected, installed) > 0;
} }
if (installable) { if (installable) {
@ -352,17 +353,18 @@ public class ContributedPlatformTableCell extends InstallerTableCell {
if (author != null && !author.isEmpty()) { if (author != null && !author.isEmpty()) {
desc += " " + format("by <b>{0}</b>", author); desc += " " + format("by <b>{0}</b>", author);
} }
if (removable) { if (installed != null) {
desc += " " + format(_("version <b>{0}</b>"), installed.getVersion()) + " <strong><font color=\"#00979D\">INSTALLED</font></strong>"; desc += " " + format(_("version <b>{0}</b>"), VersionHelper.valueOf(installed.getVersion())) + " <strong><font color=\"#00979D\">INSTALLED</font></strong>";
} }
desc += "<br />"; desc += "<br />";
desc += _("Boards included in this package:") + "<br />"; desc += _("Boards included in this package:") + "<br />";
for (ContributedBoard board : selected.getBoards()) for (ContributedBoard board : selected.getBoards()) {
desc += format("{0}, ", board.getName()); desc += board.getName() + ", ";
}
desc = desc.substring(0, desc.lastIndexOf(',')) + ".<br />"; desc = desc.substring(0, desc.lastIndexOf(',')) + ".<br />";
if (author != null && !author.isEmpty()) { if (url != null && !url.isEmpty()) {
desc += " " + format("<a href=\"{0}\">More info</a>", url); desc += " " + format("<a href=\"{0}\">More info</a>", url);
} }

View File

@ -28,34 +28,40 @@
*/ */
package cc.arduino.contributions.packages.ui; package cc.arduino.contributions.packages.ui;
import cc.arduino.contributions.DownloadableContributionBuiltInAtTheBottomComparator;
import cc.arduino.contributions.VersionHelper;
import cc.arduino.contributions.filters.InstalledPredicate;
import cc.arduino.contributions.packages.ContributedPackage; import cc.arduino.contributions.packages.ContributedPackage;
import cc.arduino.contributions.packages.ContributedPlatform; import cc.arduino.contributions.packages.ContributedPlatform;
import cc.arduino.contributions.packages.ContributionsIndex; import cc.arduino.contributions.packages.ContributionsIndex;
import cc.arduino.contributions.ui.FilteredAbstractTableModel; import cc.arduino.contributions.ui.FilteredAbstractTableModel;
import com.github.zafarkhaja.semver.Version;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.google.common.collect.Collections2;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import static processing.app.I18n._;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class ContributionIndexTableModel extends FilteredAbstractTableModel<ContributedPlatform> { public class ContributionIndexTableModel extends FilteredAbstractTableModel<ContributedPlatform> {
public final static int DESCRIPTION_COL = 0; public final static int DESCRIPTION_COL = 0;
public static class ContributedPlatformReleases { public static class ContributedPlatformReleases {
public ContributedPackage packager; public final ContributedPackage packager;
public String arch; public final String arch;
public List<ContributedPlatform> releases = new ArrayList<ContributedPlatform>(); public final List<ContributedPlatform> releases;
public List<String> versions = new ArrayList<String>(); public final List<Version> versions;
public ContributedPlatform selected = null; public ContributedPlatform selected = null;
public ContributedPlatformReleases(ContributedPlatform platform) { public ContributedPlatformReleases(ContributedPlatform platform) {
packager = platform.getParentPackage(); this.packager = platform.getParentPackage();
arch = platform.getArchitecture(); this.arch = platform.getArchitecture();
this.releases = new LinkedList<ContributedPlatform>();
this.versions = new LinkedList<Version>();
add(platform); add(platform);
} }
@ -67,39 +73,26 @@ public class ContributionIndexTableModel extends FilteredAbstractTableModel<Cont
public void add(ContributedPlatform platform) { public void add(ContributedPlatform platform) {
releases.add(platform); releases.add(platform);
versions.add(platform.getVersion()); Version version = VersionHelper.valueOf(platform.getVersion());
if (version != null) {
versions.add(version);
}
selected = getLatest(); selected = getLatest();
} }
public ContributedPlatform getInstalled() { public ContributedPlatform getInstalled() {
List<ContributedPlatform> installedPlatforms = new LinkedList<ContributedPlatform>(); List<ContributedPlatform> installedReleases = new LinkedList<ContributedPlatform>(Collections2.filter(releases, new InstalledPredicate()));
for (ContributedPlatform platform : releases) { Collections.sort(installedReleases, new DownloadableContributionBuiltInAtTheBottomComparator());
if (platform.isInstalled()) {
installedPlatforms.add(platform);
}
}
if (installedPlatforms.size() > 1) {
throw new IllegalStateException(_("More than one platform is currently installed! Only one can be installed at any given time"));
}
if (!installedPlatforms.isEmpty()) {
return installedPlatforms.get(0);
}
if (installedReleases.isEmpty()) {
return null; return null;
} }
public ContributedPlatform getLatest() { return installedReleases.get(0);
ContributedPlatform latest = null;
for (ContributedPlatform plat : releases) {
if (latest == null)
latest = plat;
// TODO a better version compare
if (plat.getVersion().compareTo(latest.getVersion()) > 0)
latest = plat;
} }
return latest;
public ContributedPlatform getLatest() {
return getLatestOf(releases);
} }
public ContributedPlatform getSelected() { public ContributedPlatform getSelected() {
@ -224,7 +217,7 @@ public class ContributionIndexTableModel extends FilteredAbstractTableModel<Cont
return col == DESCRIPTION_COL; return col == DESCRIPTION_COL;
} }
public List<String> getReleasesVersions(int row) { public List<Version> getReleasesVersions(int row) {
return contributions.get(row).versions; return contributions.get(row).versions;
} }

View File

@ -66,13 +66,17 @@ public class ContributionManagerUI extends InstallerJDialog {
protected InstallerTableCell createCellEditor() { protected InstallerTableCell createCellEditor() {
return new ContributedPlatformTableCell() { return new ContributedPlatformTableCell() {
@Override @Override
protected void onInstall(ContributedPlatform selectedPlatform, ContributedPlatform installed) { protected void onInstall(ContributedPlatform selected, ContributedPlatform installed) {
onInstallPressed(selectedPlatform, installed); if (selected.isReadOnly()) {
onRemovePressed(installed, false);
} else {
onInstallPressed(selected, installed);
}
} }
@Override @Override
protected void onRemove(ContributedPlatform installedPlatform) { protected void onRemove(ContributedPlatform installedPlatform) {
onRemovePressed(installedPlatform); onRemovePressed(installedPlatform, true);
} }
}; };
} }
@ -157,7 +161,7 @@ public class ContributionManagerUI extends InstallerJDialog {
try { try {
setProgressVisible(true, _("Installing...")); setProgressVisible(true, _("Installing..."));
installer.install(platformToInstall); installer.install(platformToInstall);
if (platformToRemove != null) { if (platformToRemove != null && !platformToRemove.isReadOnly()) {
installer.remove(platformToRemove); installer.remove(platformToRemove);
} }
onIndexesUpdated(); onIndexesUpdated();
@ -172,13 +176,15 @@ public class ContributionManagerUI extends InstallerJDialog {
installerThread.start(); installerThread.start();
} }
public void onRemovePressed(final ContributedPlatform platform) { public void onRemovePressed(final ContributedPlatform platform, boolean showWarning) {
clearErrorMessage(); clearErrorMessage();
if (showWarning) {
int chosenOption = JOptionPane.showConfirmDialog(getParent(), I18n.format(_("Do you want to remove {0}?\nIf you do so you won't be able to use {0} any more."), platform.getName()), _("Please confirm boards deletion"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); int chosenOption = JOptionPane.showConfirmDialog(getParent(), I18n.format(_("Do you want to remove {0}?\nIf you do so you won't be able to use {0} any more."), platform.getName()), _("Please confirm boards deletion"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (chosenOption != JOptionPane.YES_OPTION) { if (chosenOption != JOptionPane.YES_OPTION) {
return; return;
} }
}
installerThread = new Thread(new Runnable() { installerThread = new Thread(new Runnable() {
@Override @Override

View File

@ -28,12 +28,34 @@
*/ */
package cc.arduino.contributions.ui; package cc.arduino.contributions.ui;
import cc.arduino.contributions.VersionComparator;
import cc.arduino.contributions.packages.DownloadableContribution;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import javax.swing.table.AbstractTableModel; import javax.swing.table.AbstractTableModel;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
public abstract class FilteredAbstractTableModel<T> extends AbstractTableModel { public abstract class FilteredAbstractTableModel<T> extends AbstractTableModel {
abstract public void updateIndexFilter(String[] filters, Predicate<T>... additionalFilters); abstract public void updateIndexFilter(String[] filters, Predicate<T>... additionalFilters);
protected static <T extends DownloadableContribution> T getLatestOf(List<T> contribs) {
contribs = new LinkedList<T>(contribs);
Collections.sort(contribs, new Comparator<T>() {
@Override
public int compare(T contrib1, T contrib2) {
return VersionComparator.VERSION_COMPARATOR.compare(contrib1.getVersion(), contrib2.getVersion());
}
});
if (contribs.isEmpty()) {
return null;
}
return contribs.get(contribs.size() - 1);
}
} }

View File

@ -30,4 +30,9 @@ public class TargetPackageStub implements TargetPackage {
public TargetPlatform get(String platform) { public TargetPlatform get(String platform) {
return null; return null;
} }
@Override
public boolean hasPlatform(TargetPlatform platform) {
return false;
}
} }

View File

@ -3,6 +3,12 @@ package cc.arduino.packages.contributions;
import cc.arduino.contributions.packages.HostDependentDownloadableContribution; import cc.arduino.contributions.packages.HostDependentDownloadableContribution;
public class HostDependentDownloadableContributionStub extends HostDependentDownloadableContribution { public class HostDependentDownloadableContributionStub extends HostDependentDownloadableContribution {
@Override
public String getVersion() {
return null;
}
@Override @Override
public String getHost() { public String getHost() {
return null; return null;

View File

@ -0,0 +1,16 @@
package cc.arduino.contributions;
import cc.arduino.contributions.packages.DownloadableContribution;
import java.util.Comparator;
public class DownloadableContributionBuiltInAtTheBottomComparator implements Comparator<DownloadableContribution> {
@Override
public int compare(DownloadableContribution p1, DownloadableContribution p2) {
if (p1.isReadOnly() == p2.isReadOnly()) {
return 0;
}
return p1.isReadOnly() ? 1 : -1;
}
}

View File

@ -47,8 +47,8 @@ public class VersionComparator implements Comparator<String> {
if (b == null) if (b == null)
return 1; return 1;
Version versionA = valueOf(a); Version versionA = VersionHelper.valueOf(a);
Version versionB = valueOf(b); Version versionB = VersionHelper.valueOf(b);
return versionA.compareTo(versionB); return versionA.compareTo(versionB);
} }
@ -65,26 +65,10 @@ public class VersionComparator implements Comparator<String> {
return true; return true;
} }
Version versionA = valueOf(a); Version versionA = VersionHelper.valueOf(a);
Version versionB = valueOf(b); Version versionB = VersionHelper.valueOf(b);
return versionA.greaterThan(versionB); return versionA.greaterThan(versionB);
} }
private Version valueOf(String ver) {
if (ver.endsWith("b")) {
ver = ver.substring(0, ver.lastIndexOf("b")) + ".1";
}
String[] verParts = ver.split("\\.");
if (verParts.length < 3) {
if (verParts.length == 2) {
return Version.forIntegers(Integer.valueOf(verParts[0]), Integer.valueOf(verParts[1]));
} else {
return Version.forIntegers(Integer.valueOf(verParts[0]));
}
} else {
return Version.valueOf(ver);
}
}
} }

View File

@ -0,0 +1,23 @@
package cc.arduino.contributions;
import com.github.zafarkhaja.semver.Version;
public class VersionHelper {
public static Version valueOf(String ver) {
if (ver == null) {
return null;
}
String[] verParts = ver.split("\\.");
if (verParts.length < 3) {
if (verParts.length == 2) {
return Version.forIntegers(Integer.valueOf(verParts[0]), Integer.valueOf(verParts[1]));
} else {
return Version.forIntegers(Integer.valueOf(verParts[0]));
}
} else {
return Version.valueOf(ver);
}
}
}

View File

@ -0,0 +1,17 @@
package cc.arduino.contributions.filters;
import cc.arduino.contributions.packages.DownloadableContribution;
import com.google.common.base.Predicate;
public class BuiltInPredicate implements Predicate<DownloadableContribution> {
@Override
public boolean apply(DownloadableContribution input) {
return input.isReadOnly();
}
@Override
public boolean equals(Object obj) {
return obj instanceof BuiltInPredicate;
}
}

View File

@ -40,8 +40,6 @@ public abstract class ContributedLibrary extends DownloadableContribution {
public abstract String getName(); public abstract String getName();
public abstract String getVersion();
public abstract String getMaintainer(); public abstract String getMaintainer();
public abstract String getAuthor(); public abstract String getAuthor();
@ -64,16 +62,6 @@ public abstract class ContributedLibrary extends DownloadableContribution {
public abstract List<ContributedLibraryReference> getRequires(); public abstract List<ContributedLibraryReference> getRequires();
private boolean readOnly;
public boolean isReadOnly() {
return readOnly;
}
public void setReadOnly(boolean readOnly) {
this.readOnly = readOnly;
}
public static final Comparator<ContributedLibrary> CASE_INSENSITIVE_ORDER = new Comparator<ContributedLibrary>() { public static final Comparator<ContributedLibrary> CASE_INSENSITIVE_ORDER = new Comparator<ContributedLibrary>() {
@Override @Override
public int compare(ContributedLibrary o1, ContributedLibrary o2) { public int compare(ContributedLibrary o1, ContributedLibrary o2) {

View File

@ -37,8 +37,6 @@ public abstract class ContributedPlatform extends DownloadableContribution {
public abstract String getName(); public abstract String getName();
public abstract String getVersion();
public abstract String getCategory(); public abstract String getCategory();
public abstract String getArchitecture(); public abstract String getArchitecture();

View File

@ -73,6 +73,11 @@ public class ContributedTargetPackage implements TargetPackage {
return platforms.get(platform); return platforms.get(platform);
} }
@Override
public boolean hasPlatform(TargetPlatform platform) {
return platforms.containsKey(platform.getId());
}
@Override @Override
public String toString() { public String toString() {
return "TargetPackage: " + getId(); return "TargetPackage: " + getId();

View File

@ -28,21 +28,27 @@
*/ */
package cc.arduino.contributions.packages; package cc.arduino.contributions.packages;
import cc.arduino.contributions.DownloadableContributionBuiltInAtTheBottomComparator;
import cc.arduino.contributions.filters.BuiltInPredicate;
import cc.arduino.contributions.filters.InstalledPredicate;
import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.mrbean.MrBeanModule; import com.fasterxml.jackson.module.mrbean.MrBeanModule;
import com.google.common.base.Function;
import com.google.common.base.Predicates;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.Multimaps;
import processing.app.debug.TargetPackage; import processing.app.debug.TargetPackage;
import processing.app.debug.TargetPlatform; import processing.app.debug.TargetPlatform;
import processing.app.debug.TargetPlatformException; import processing.app.debug.TargetPlatformException;
import processing.app.helpers.PreferencesMap;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.*;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static processing.app.helpers.filefilters.OnlyDirs.ONLY_DIRS; import static processing.app.helpers.filefilters.OnlyDirs.ONLY_DIRS;
@ -102,7 +108,47 @@ public class ContributionsIndexer {
index = mapper.readValue(indexIn, ContributionsIndex.class); index = mapper.readValue(indexIn, ContributionsIndex.class);
} }
public void syncWithFilesystem() { public void syncWithFilesystem(File hardwareFolder) throws IOException {
syncBuiltInHardwareFolder(hardwareFolder);
syncLocalPackagesFolder();
}
public void syncBuiltInHardwareFolder(File hardwareFolder) throws IOException {
for (File folder : hardwareFolder.listFiles(ONLY_DIRS)) {
ContributedPackage pack = index.findPackage(folder.getName());
if (pack != null) {
syncBuiltInPackageWithFilesystem(pack, folder);
File toolsFolder = new File(hardwareFolder, "tools");
if (toolsFolder.isDirectory()) {
for (File toolFolder : toolsFolder.listFiles(ONLY_DIRS)) {
File builtInToolsMetadata = new File(toolFolder, "builtin_tools_versions.txt");
if (builtInToolsMetadata.isFile()) {
PreferencesMap toolsMetadata = new PreferencesMap(builtInToolsMetadata).subTree(pack.getName());
for (Map.Entry<String, String> toolMetadata : toolsMetadata.entrySet()) {
syncToolWithFilesystem(pack, toolFolder, toolMetadata.getKey(), toolMetadata.getValue());
}
}
}
}
}
}
}
private void syncBuiltInPackageWithFilesystem(ContributedPackage pack, File hardwareFolder) throws IOException {
// Scan all hardware folders and mark as installed all the tools found.
for (File platformFolder : hardwareFolder.listFiles(ONLY_DIRS)) {
File platformTxt = new File(platformFolder, "platform.txt");
String version = new PreferencesMap(platformTxt).get("version");
ContributedPlatform platform = syncHardwareWithFilesystem(pack, platformFolder, platformFolder.getName(), version);
if (platform != null) {
platform.setReadOnly(true);
}
}
}
public void syncLocalPackagesFolder() {
if (!packagesFolder.isDirectory()) if (!packagesFolder.isDirectory())
return; return;
@ -110,18 +156,20 @@ public class ContributionsIndexer {
// platforms found. // platforms found.
for (File folder : packagesFolder.listFiles(ONLY_DIRS)) { for (File folder : packagesFolder.listFiles(ONLY_DIRS)) {
ContributedPackage pack = index.findPackage(folder.getName()); ContributedPackage pack = index.findPackage(folder.getName());
if (pack != null) if (pack != null) {
syncPackageWithFilesystem(pack, folder); syncPackageWithFilesystem(pack, folder);
} }
} }
}
private void syncPackageWithFilesystem(ContributedPackage pack, File root) { private void syncPackageWithFilesystem(ContributedPackage pack, File root) {
// Scan all hardware folders and mark as installed all the tools found. // Scan all hardware folders and mark as installed all the tools found.
File hardwareFolder = new File(root, "hardware"); File hardwareFolder = new File(root, "hardware");
if (hardwareFolder.isDirectory()) { if (hardwareFolder.isDirectory()) {
for (File platformFolder : hardwareFolder.listFiles(ONLY_DIRS)) { for (File platformFolder : hardwareFolder.listFiles(ONLY_DIRS)) {
for (File versionFolder : platformFolder.listFiles(ONLY_DIRS)) for (File versionFolder : platformFolder.listFiles(ONLY_DIRS)) {
syncHardwareWithFilesystem(pack, platformFolder, versionFolder); syncHardwareWithFilesystem(pack, versionFolder, platformFolder.getName(), versionFolder.getName());
}
} }
} }
@ -129,39 +177,35 @@ public class ContributionsIndexer {
File toolsFolder = new File(root, "tools"); File toolsFolder = new File(root, "tools");
if (toolsFolder.isDirectory()) { if (toolsFolder.isDirectory()) {
for (File toolFolder : toolsFolder.listFiles(ONLY_DIRS)) { for (File toolFolder : toolsFolder.listFiles(ONLY_DIRS)) {
for (File versionFolder : toolFolder.listFiles(ONLY_DIRS)) for (File versionFolder : toolFolder.listFiles(ONLY_DIRS)) {
syncToolWithFilesystem(pack, toolFolder, versionFolder); syncToolWithFilesystem(pack, versionFolder, toolFolder.getName(), versionFolder.getName());
}
} }
} }
} }
private void syncToolWithFilesystem(ContributedPackage pack, File toolFolder, private void syncToolWithFilesystem(ContributedPackage pack, File installationFolder, String toolName, String version) {
File versionFolder) { ContributedTool tool = pack.findTool(toolName, version);
ContributedTool tool = pack.findTool(toolFolder.getName(), if (tool == null) {
versionFolder.getName());
if (tool == null)
return; return;
}
DownloadableContribution contrib = tool.getDownloadableContribution(); DownloadableContribution contrib = tool.getDownloadableContribution();
if (contrib == null) { if (contrib == null) {
System.err.println(tool + System.err.println(tool + " seems to have no downloadable contributions for your operating system, but it is installed in\n" + installationFolder);
" seems to have no downloadable contributions for your " +
"operating system, but it is installed in\n" + versionFolder);
return; return;
} }
contrib.setInstalled(true); contrib.setInstalled(true);
contrib.setInstalledFolder(versionFolder); contrib.setInstalledFolder(installationFolder);
} }
private void syncHardwareWithFilesystem(ContributedPackage pack, private ContributedPlatform syncHardwareWithFilesystem(ContributedPackage pack, File installationFolder, String architecture, String version) {
File platformFolder,
File versionFolder) {
String architecture = platformFolder.getName();
String version = versionFolder.getName();
ContributedPlatform platform = pack.findPlatform(architecture, version); ContributedPlatform platform = pack.findPlatform(architecture, version);
if (platform != null) { if (platform != null) {
platform.setInstalled(true); platform.setInstalled(true);
platform.setInstalledFolder(versionFolder); platform.setReadOnly(false);
platform.setInstalledFolder(installationFolder);
} }
return platform;
} }
@Override @Override
@ -170,28 +214,29 @@ public class ContributionsIndexer {
} }
public List<TargetPackage> createTargetPackages() throws TargetPlatformException { public List<TargetPackage> createTargetPackages() throws TargetPlatformException {
List<TargetPackage> res = new ArrayList<TargetPackage>(); List<TargetPackage> packages = new ArrayList<TargetPackage>();
for (ContributedPackage pack : index.getPackages()) { for (ContributedPackage aPackage : index.getPackages()) {
ContributedTargetPackage targetPackage; ContributedTargetPackage targetPackage = new ContributedTargetPackage(aPackage.getName());
targetPackage = new ContributedTargetPackage(pack.getName());
for (ContributedPlatform platform : pack.getPlatforms()) { List<ContributedPlatform> platforms = new LinkedList<ContributedPlatform>(Collections2.filter(aPackage.getPlatforms(), new InstalledPredicate()));
if (!platform.isInstalled()) Collections.sort(platforms, new DownloadableContributionBuiltInAtTheBottomComparator());
continue;
for (ContributedPlatform platform : platforms) {
String arch = platform.getArchitecture(); String arch = platform.getArchitecture();
File folder = platform.getInstalledFolder(); File folder = platform.getInstalledFolder();
TargetPlatform targetPlatform; TargetPlatform targetPlatform = new ContributedTargetPlatform(arch, folder, targetPackage, index);
targetPlatform = new ContributedTargetPlatform(arch, folder, targetPackage, index); if (!targetPackage.hasPlatform(targetPlatform)) {
targetPackage.addPlatform(targetPlatform); targetPackage.addPlatform(targetPlatform);
} }
if (targetPackage.hasPlatforms())
res.add(targetPackage);
} }
return res;
if (targetPackage.hasPlatforms()) {
packages.add(targetPackage);
}
}
return packages;
} }
/** /**
@ -217,11 +262,21 @@ public class ContributionsIndexer {
public Set<ContributedTool> getInstalledTools() { public Set<ContributedTool> getInstalledTools() {
Set<ContributedTool> tools = new HashSet<ContributedTool>(); Set<ContributedTool> tools = new HashSet<ContributedTool>();
for (ContributedPackage pack : index.getPackages()) { for (ContributedPackage pack : index.getPackages()) {
for (ContributedPlatform platform : pack.getPlatforms()) { Collection<ContributedPlatform> platforms = Collections2.filter(pack.getPlatforms(), new InstalledPredicate());
if (!platform.isInstalled()) ImmutableListMultimap<String, ContributedPlatform> platformsByName = Multimaps.index(platforms, new Function<ContributedPlatform, String>() {
continue; @Override
for (ContributedTool tool : platform.getResolvedTools()) { public String apply(ContributedPlatform contributedPlatform) {
tools.add(tool); return contributedPlatform.getName();
}
});
for (Map.Entry<String, Collection<ContributedPlatform>> entry : platformsByName.asMap().entrySet()) {
Collection<ContributedPlatform> platformsWithName = entry.getValue();
if (platformsWithName.size() > 1) {
platformsWithName = Collections2.filter(platformsWithName, Predicates.not(new BuiltInPredicate()));
}
for (ContributedPlatform platform : platformsWithName) {
tools.addAll(platform.getResolvedTools());
} }
} }
} }

View File

@ -40,6 +40,8 @@ public abstract class DownloadableContribution {
public abstract String getUrl(); public abstract String getUrl();
public abstract String getVersion();
public abstract String getChecksum(); public abstract String getChecksum();
public abstract long getSize(); public abstract long getSize();
@ -78,6 +80,16 @@ public abstract class DownloadableContribution {
this.installedFolder = installedFolder; this.installedFolder = installedFolder;
} }
private boolean readOnly;
public boolean isReadOnly() {
return readOnly;
}
public void setReadOnly(boolean readOnly) {
this.readOnly = readOnly;
}
@Override @Override
public String toString() { public String toString() {
String res = ""; String res = "";

View File

@ -578,12 +578,11 @@ public class BaseNoGui {
static public void initPackages() throws Exception { static public void initPackages() throws Exception {
indexer = new ContributionsIndexer(BaseNoGui.getSettingsFolder()); indexer = new ContributionsIndexer(BaseNoGui.getSettingsFolder());
File indexFile = indexer.getIndexFile(); File indexFile = indexer.getIndexFile();
File avrCoreFolder = FileUtils.newFile(indexFile.getParentFile(), "packages", "arduino", "hardware", "avr"); if (!indexFile.isFile()) {
if (!indexFile.isFile() || !(avrCoreFolder.exists() && avrCoreFolder.isDirectory())) { File defaultPackageJsonFile = new File(getContentFile("dist"), "package_index.json");
File distFile = findDefaultPackageFile(); if (defaultPackageJsonFile.isFile()) {
if (distFile != null) { FileUtils.copyFile(defaultPackageJsonFile, indexFile);
new ArchiveExtractor(getPlatform()).extract(distFile, BaseNoGui.getSettingsFolder(), 0, true); } else {
} else if (!indexFile.isFile()) {
// Otherwise create an empty packages index // Otherwise create an empty packages index
FileOutputStream out = null; FileOutputStream out = null;
try { try {
@ -598,7 +597,7 @@ public class BaseNoGui {
} }
} }
indexer.parseIndex(); indexer.parseIndex();
indexer.syncWithFilesystem(); indexer.syncWithFilesystem(getHardwareFolder());
packages = new HashMap<String, TargetPackage>(); packages = new HashMap<String, TargetPackage>();
loadHardware(getHardwareFolder()); loadHardware(getHardwareFolder());
@ -626,18 +625,6 @@ public class BaseNoGui {
librariesIndexer.parseIndex(); librariesIndexer.parseIndex();
} }
private static File findDefaultPackageFile() {
File distFolder = getContentFile("dist");
if (!distFolder.exists()) {
return null;
}
File[] files = distFolder.listFiles(new OnlyFilesWithExtension("tar.bz2", "zip", "tar.gz", "tar"));
if (files.length > 1) {
throw new IllegalStateException("More than one file in " + distFolder);
}
return files[0];
}
static protected void initPlatform() { static protected void initPlatform() {
try { try {
Class<?> platformClass = Class.forName("processing.app.Platform"); Class<?> platformClass = Class.forName("processing.app.Platform");
@ -697,7 +684,7 @@ public class BaseNoGui {
try { try {
packages.put(target, new LegacyTargetPackage(target, subfolder)); packages.put(target, new LegacyTargetPackage(target, subfolder));
} catch (TargetPlatformException e) { } catch (TargetPlatformException e) {
System.out.println("WARNING: Error loading hardware folder " + target); System.out.println("WARNING: Error loading hardware folder " + new File(folder, target));
System.out.println(" " + e.getMessage()); System.out.println(" " + e.getMessage());
} }
} }
@ -777,12 +764,9 @@ public class BaseNoGui {
PreferencesData.removeAllKeysWithPrefix(prefix); PreferencesData.removeAllKeysWithPrefix(prefix);
for (ContributedTool tool : indexer.getInstalledTools()) { for (ContributedTool tool : indexer.getInstalledTools()) {
String path = tool.getDownloadableContribution().getInstalledFolder() String path = tool.getDownloadableContribution().getInstalledFolder().getAbsolutePath();
.getAbsolutePath(); PreferencesData.set(prefix + tool.getName() + ".path", path);
String toolId = tool.getName(); PreferencesData.set(prefix + tool.getName() + "-" + tool.getVersion() + ".path", path);
PreferencesData.set(prefix + toolId + ".path", path);
toolId += "-" + tool.getVersion();
PreferencesData.set(prefix + toolId + ".path", path);
} }
} }

View File

@ -77,6 +77,11 @@ public class LegacyTargetPackage implements TargetPackage {
return platforms.get(platform); return platforms.get(platform);
} }
@Override
public boolean hasPlatform(TargetPlatform platform) {
return platforms.containsKey(platform.getId());
}
@Override @Override
public String getId() { public String getId() {
return id; return id;

View File

@ -25,12 +25,13 @@ import java.util.Map;
public interface TargetPackage { public interface TargetPackage {
public String getId(); String getId();
public Map<String, TargetPlatform> getPlatforms(); Map<String, TargetPlatform> getPlatforms();
public Collection<TargetPlatform> platforms(); Collection<TargetPlatform> platforms();
public TargetPlatform get(String platform); TargetPlatform get(String platform);
boolean hasPlatform(TargetPlatform platform);
} }

View File

@ -160,9 +160,10 @@
<!-- copy hardware folder --> <!-- copy hardware folder -->
<target name="assemble-hardware" unless="light_bundle"> <target name="assemble-hardware" unless="light_bundle">
<mkdir dir="${staging_folder}/work/dist/bundled_package/packages/arduino/hardware/avr/1.6.3/"/> <copy todir="${target.path}/hardware">
<copy todir="${staging_folder}/work/dist/bundled_package/packages/arduino/hardware/avr/1.6.3/"> <fileset dir="../hardware">
<fileset dir="../hardware/arduino/avr/"/> <exclude name="arduino/sam/**"/>
</fileset>
</copy> </copy>
</target> </target>
@ -348,8 +349,6 @@
<param name="target.path" value="${staging_folder}/work/${staging_hardware_folder}/.." /> <param name="target.path" value="${staging_folder}/work/${staging_hardware_folder}/.." />
</antcall> </antcall>
<antcall target="macosx-assemble-bundled-toolchain"/>
<antcall target="unzip"> <antcall target="unzip">
<param name="archive_file" value="./libastylej-2.05.zip" /> <param name="archive_file" value="./libastylej-2.05.zip" />
<param name="archive_url" value="http://arduino.cc/download.php?f=/libastylej-2.05.zip" /> <param name="archive_url" value="http://arduino.cc/download.php?f=/libastylej-2.05.zip" />
@ -368,33 +367,17 @@
<antcall target="avr-toolchain-bundle"> <antcall target="avr-toolchain-bundle">
<param name="unpack_target" value="untar"/> <param name="unpack_target" value="untar"/>
<param name="gcc_archive_file" value="avr-gcc-4.8.1-arduino3-i386-apple-darwin11.tar.bz2"/> <param name="gcc_archive_file" value="avr-gcc-4.8.1-arduino3-i386-apple-darwin11.tar.bz2"/>
<param name="gcc_version" value="4.8.1-arduino3/"/> <param name="gcc_version" value="4.8.1-arduino3"/>
<param name="avrdude_archive_file" value="avrdude-6.0.1-arduino3-i386-apple-darwin11.tar.bz2"/> <param name="avrdude_archive_file" value="avrdude-6.0.1-arduino3-i386-apple-darwin11.tar.bz2"/>
<param name="avrdude_version" value="6.0.1-arduino3"/> <param name="avrdude_version" value="6.0.1-arduino3"/>
</antcall> </antcall>
<chmod perm="+x"> <chmod perm="+x">
<fileset dir="${staging_folder}/work/dist/bundled_package/packages/arduino/tools/" includes="**/bin/*"/> <fileset dir="${staging_folder}/work/${staging_hardware_folder}/tools" includes="**/bin/*"/>
<fileset dir="${staging_folder}/work/dist/bundled_package/packages/arduino/tools/" includes="**/libexec/gcc/avr/4.8.1/*"/> <fileset dir="${staging_folder}/work/${staging_hardware_folder}/tools" includes="**/libexec/gcc/avr/4.8.1/*"/>
</chmod> </chmod>
</target> </target>
<target name="macosx-assemble-bundled-toolchain" unless="light_bundle">
<exec executable="tar" dir="${staging_folder}/work/dist/bundled_package/">
<arg value="-c"/>
<arg value="-z"/>
<arg value="-f"/>
<arg value="../default_package.tar.gz"/>
<arg value="./"/>
</exec>
<mkdir dir="macosx/work/${staging_hardware_folder}/../dist"/>
<move file="${staging_folder}/work/dist/default_package.tar.gz" todir="macosx/work/${staging_hardware_folder}/../dist"/>
<move file="${staging_folder}/work/dist/library_index.json" todir="macosx/work/${staging_hardware_folder}/../dist"/>
<delete dir="${staging_folder}/work/dist/"/>
</target>
<target name="macosx-old-run" depends="macosx-old-build" description="Run Mac OS X version"> <target name="macosx-old-run" depends="macosx-old-build" description="Run Mac OS X version">
<antcall target="macosx-run-common"/> <antcall target="macosx-run-common"/>
</target> </target>
@ -629,40 +612,20 @@
<antcall target="avr-toolchain-bundle"> <antcall target="avr-toolchain-bundle">
<param name="unpack_target" value="untar"/> <param name="unpack_target" value="untar"/>
<param name="gcc_archive_file" value="avr-gcc-4.8.1-arduino3-i686-pc-linux-gnu.tar.bz2"/> <param name="gcc_archive_file" value="avr-gcc-4.8.1-arduino3-i686-pc-linux-gnu.tar.bz2"/>
<param name="gcc_version" value="4.8.1-arduino3/"/> <param name="gcc_version" value="4.8.1-arduino3"/>
<param name="avrdude_archive_file" value="avrdude-6.0.1-arduino3-i686-pc-linux-gnu.tar.bz2"/> <param name="avrdude_archive_file" value="avrdude-6.0.1-arduino3-i686-pc-linux-gnu.tar.bz2"/>
<param name="avrdude_version" value="6.0.1-arduino3"/> <param name="avrdude_version" value="6.0.1-arduino3"/>
</antcall> </antcall>
<exec executable="tar" dir="${staging_folder}/work/dist/bundled_package/">
<arg value="-c"/>
<arg value="-z"/>
<arg value="-f"/>
<arg value="../default_package.tar.gz"/>
<arg value="./"/>
</exec>
<delete dir="${staging_folder}/work/dist/bundled_package/"/>
</target> </target>
<target name="linux64-build" depends="linux-build" unless="light_bundle" description="Build linux (64-bit) version"> <target name="linux64-build" depends="linux-build" unless="light_bundle" description="Build linux (64-bit) version">
<antcall target="avr-toolchain-bundle"> <antcall target="avr-toolchain-bundle">
<param name="unpack_target" value="untar"/> <param name="unpack_target" value="untar"/>
<param name="gcc_archive_file" value="avr-gcc-4.8.1-arduino3-x86_64-pc-linux-gnu.tar.bz2"/> <param name="gcc_archive_file" value="avr-gcc-4.8.1-arduino3-x86_64-pc-linux-gnu.tar.bz2"/>
<param name="gcc_version" value="4.8.1-arduino3/"/> <param name="gcc_version" value="4.8.1-arduino3"/>
<param name="avrdude_archive_file" value="avrdude-6.0.1-arduino3-x86_64-pc-linux-gnu.tar.bz2"/> <param name="avrdude_archive_file" value="avrdude-6.0.1-arduino3-x86_64-pc-linux-gnu.tar.bz2"/>
<param name="avrdude_version" value="6.0.1-arduino3"/> <param name="avrdude_version" value="6.0.1-arduino3"/>
</antcall> </antcall>
<exec executable="tar" dir="${staging_folder}/work/dist/bundled_package/">
<arg value="-c"/>
<arg value="-z"/>
<arg value="-f"/>
<arg value="../default_package.tar.gz"/>
<arg value="./"/>
</exec>
<delete dir="${staging_folder}/work/dist/bundled_package/"/>
</target> </target>
<target name="linux32-run" depends="linux32-build" description="Run Linux (32-bit) version"> <target name="linux32-run" depends="linux32-build" description="Run Linux (32-bit) version">
@ -875,8 +838,6 @@
<param name="target.path" value="windows/work" /> <param name="target.path" value="windows/work" />
</antcall> </antcall>
<antcall target="windows-assemble-bundled-toolchain"/>
<delete dir="windows/launcher/launch4j"/> <delete dir="windows/launcher/launch4j"/>
<antcall target="download-${launch4j-download-unpack-target-name}" /> <antcall target="download-${launch4j-download-unpack-target-name}" />
@ -904,20 +865,12 @@
<antcall target="avr-toolchain-bundle"> <antcall target="avr-toolchain-bundle">
<param name="unpack_target" value="unzip"/> <param name="unpack_target" value="unzip"/>
<param name="gcc_archive_file" value="avr-gcc-4.8.1-arduino3-i686-mingw32.zip"/> <param name="gcc_archive_file" value="avr-gcc-4.8.1-arduino3-i686-mingw32.zip"/>
<param name="gcc_version" value="4.8.1-arduino3/"/> <param name="gcc_version" value="4.8.1-arduino3"/>
<param name="avrdude_archive_file" value="avrdude-6.0.1-arduino3-i686-mingw32.zip"/> <param name="avrdude_archive_file" value="avrdude-6.0.1-arduino3-i686-mingw32.zip"/>
<param name="avrdude_version" value="6.0.1-arduino3"/> <param name="avrdude_version" value="6.0.1-arduino3"/>
</antcall> </antcall>
</target> </target>
<target name="windows-assemble-bundled-toolchain" unless="light_bundle">
<exec executable="zip" dir="${staging_folder}/work/dist/bundled_package/">
<arg line="-q -r ../default_package.zip ." />
</exec>
<delete dir="${staging_folder}/work/dist/bundled_package/"/>
</target>
<target name="windows-run" depends="windows-build" <target name="windows-run" depends="windows-build"
description="Run windows version"> description="Run windows version">
<exec executable="windows/work/arduino.exe" <exec executable="windows/work/arduino.exe"
@ -991,27 +944,46 @@
<target name="avr-toolchain-bundle" unless="light_bundle"> <target name="avr-toolchain-bundle" unless="light_bundle">
<!-- Unzip AVR tools --> <!-- Unzip AVR tools -->
<mkdir dir="${staging_folder}/work/dist/bundled_package/packages/arduino/tools/avr-gcc/"/> <mkdir dir="${staging_folder}/work/${staging_hardware_folder}/tmp/gcc"/>
<mkdir dir="${staging_folder}/work/dist/bundled_package/packages/arduino/tools/avrdude/"/>
<antcall target="${unpack_target}"> <antcall target="${unpack_target}">
<param name="archive_file" value="${staging_folder}/${gcc_archive_file}"/> <param name="archive_file" value="${staging_folder}/${gcc_archive_file}"/>
<param name="archive_url" value="http://arduino.cc/download.php?f=/tools/${gcc_archive_file}"/> <param name="archive_url" value="http://arduino.cc/download.php?f=/tools/${gcc_archive_file}"/>
<param name="final_folder" value="${staging_folder}/work/dist/bundled_package/packages/arduino/tools/avr-gcc/${gcc_version}/"/> <param name="final_folder" value="${staging_folder}/work/${staging_hardware_folder}/tmp/gcc/${gcc_version}/"/>
<param name="dest_folder" value="${staging_folder}/work/dist/bundled_package/packages/arduino/tools/avr-gcc/"/> <param name="dest_folder" value="${staging_folder}/work/${staging_hardware_folder}/tmp/gcc/"/>
</antcall> </antcall>
<move file="${staging_folder}/work/dist/bundled_package/packages/arduino/tools/avr-gcc/avr" tofile="${staging_folder}/work/dist/bundled_package/packages/arduino/tools/avr-gcc/${gcc_version}"/>
<mkdir dir="${staging_folder}/work/${staging_hardware_folder}/tmp/avrdude"/>
<antcall target="${unpack_target}"> <antcall target="${unpack_target}">
<param name="archive_file" value="${staging_folder}/${avrdude_archive_file}"/> <param name="archive_file" value="${staging_folder}/${avrdude_archive_file}"/>
<param name="archive_url" value="http://arduino.cc/download.php?f=/tools/${avrdude_archive_file}"/> <param name="archive_url" value="http://arduino.cc/download.php?f=/tools/${avrdude_archive_file}"/>
<param name="final_folder" value="${staging_folder}/work/dist/bundled_package/packages/arduino/tools/avrdude/${avrdude_version}"/> <param name="final_folder" value="${staging_folder}/work/${staging_hardware_folder}/tmp/avrdude/${avrdude_version}"/>
<param name="dest_folder" value="${staging_folder}/work/dist/bundled_package/packages/arduino/tools/avrdude/"/> <param name="dest_folder" value="${staging_folder}/work/${staging_hardware_folder}/tmp/avrdude/"/>
</antcall> </antcall>
<move file="${staging_folder}/work/dist/bundled_package/packages/arduino/tools/avrdude/avrdude-6.0.1" tofile="${staging_folder}/work/dist/bundled_package/packages/arduino/tools/avrdude/${avrdude_version}"/>
<copy file="shared/bundled_package_index.json" tofile="${staging_folder}/work/dist/bundled_package/package_index.json"/> <move file="${staging_folder}/work/${staging_hardware_folder}/tmp/gcc/avr" tofile="${staging_folder}/work/${staging_hardware_folder}/tools/avr"/>
<copy file="shared/bundled_library_index.json" tofile="${staging_folder}/work/dist/library_index.json"/> <move file="${staging_folder}/work/${staging_hardware_folder}/tmp/avrdude/avrdude-6.0.1" tofile="${staging_folder}/work/${staging_hardware_folder}/tools/avr"/>
<antcall target="macosx-fix-bundled-toolchain-missing-symlinks"/>
<echo append="true" file="${staging_folder}/work/${staging_hardware_folder}/tools/avr/builtin_tools_versions.txt" message="arduino.avrdude=${avrdude_version}${line.separator}"/>
<echo append="true" file="${staging_folder}/work/${staging_hardware_folder}/tools/avr/builtin_tools_versions.txt" message="arduino.avr-gcc=${gcc_version}${line.separator}"/>
<copy file="shared/bundled_package_index.json" tofile="${staging_folder}/work/${staging_hardware_folder}/../dist/package_index.json"/>
<copy file="shared/bundled_library_index.json" tofile="${staging_folder}/work/${staging_hardware_folder}/../dist/library_index.json"/>
<delete dir="${staging_folder}/work/${staging_hardware_folder}/tmp"/>
</target>
<target name="macosx-fix-bundled-toolchain-missing-symlinks" if="macosx">
<exec executable="mv">
<arg value="${staging_folder}/work/${staging_hardware_folder}/tmp/avrdude/avrdude-6.0.1/lib/libusb.dylib"/>
<arg value="${staging_folder}/work/${staging_hardware_folder}/tools/avr/lib/"/>
</exec>
<exec executable="mv">
<arg value="${staging_folder}/work/${staging_hardware_folder}/tmp/avrdude/avrdude-6.0.1/lib/libusb-1.0.dylib"/>
<arg value="${staging_folder}/work/${staging_hardware_folder}/tools/avr/lib/"/>
</exec>
</target> </target>
</project> </project>