Skip to content

Recursive library compilation #1152

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 4 commits 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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,7 @@ hardware/arduino/bootloaders/caterina_LUFA/.dep/
.gitignore
build/windows/work/
build/linux/work/
build/linux/dist/*.tar.gz
build/linux/*.tgz
test-bin
*.iml
Empty file modified app/.classpath_vista
100755 → 100644
Empty file.
Empty file modified app/lib/apple.jar
100755 → 100644
Empty file.
5 changes: 0 additions & 5 deletions app/src/processing/app/Base.java
Original file line number Diff line number Diff line change
Expand Up @@ -2716,11 +2716,6 @@ public void handleAddLibrary(Editor editor) {
editor.statusError(mess);
return;
}
String[] headerFiles = headerListFromIncludePath(libFolder);
if (headerFiles == null || headerFiles.length == 0) {
editor.statusError(_("Not a valid library: no header files found"));
return;
}

// copy folder
File destinationFolder = new File(getSketchbookLibrariesFolder(), sourceFile.getName());
Expand Down
12 changes: 6 additions & 6 deletions app/src/processing/app/Resources_it.properties
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Italian translations for PACKAGE package.
# Copyright (C) 2012 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Sara Gallo, Simone Majocchi, Michele Michielin <>, 2012.
#
# Italian translations for PACKAGE package.
# Copyright (C) 2012 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Sara Gallo, Simone Majocchi, Michele Michielin <>, 2012.
#
!=Project-Id-Version\: PACKAGE VERSION\nReport-Msgid-Bugs-To\: \nPOT-Creation-Date\: 2012-03-29 10\:24-0400\nPO-Revision-Date\: 2012-04-08 12\:00+0200\nLast-Translator\: Sara Gallo, Simone Majocchi, Michele Michielin\nLanguage-Team\: Italian\nLanguage\: IT\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n

#: Editor.java:366
Expand Down Expand Up @@ -221,7 +221,7 @@ OK=OK

#: Editor.java:2100
#, java-format
The\ file\ "{0}"\ needs\ to\ be\ inside\na\ sketch\ folder\ named\ "{1}".\nCreate\ this\ folder,\ move\ the\ file,\ and\ continue?=Il file "{0}" deve essere all'interno\ndi una cartella sketch di nome "{1}".\nCreare questa cartella, spostare il file e continuare?
The\ file\ "{0}"\ needs\ to\ be\ inside\na\ sketch\ folder\ named\ "{1}".\nCreate\ this\ folder,\ move\ the\ file,\ and\ continue?=Il file "{0}" deve essere all''interno\ndi una cartella sketch di nome "{1}".\nCreare questa cartella, spostare il file e continuare?

#: Editor.java:2109
Moving=Sto spostando
Expand Down
Empty file modified app/src/processing/app/Serial.java
100755 → 100644
Empty file.
56 changes: 39 additions & 17 deletions app/src/processing/app/debug/Compiler.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import processing.app.SketchCode;
import processing.app.helpers.PreferencesMap;
import processing.app.helpers.StringReplacer;
import processing.app.helpers.filefilters.OnlyDirs;
import processing.core.PApplet;

public class Compiler implements MessageConsumer {
Expand Down Expand Up @@ -578,26 +579,47 @@ void compileSketch(List<String> includePaths) throws RunnerException {
// 2. compile the libraries, outputting .o files to:
// <buildPath>/<library>/
void compileLibraries(List<String> includePaths) throws RunnerException {

File outputPath = new File(prefs.get("build.path"));
for (File libraryFolder : sketch.getImportedLibraries()) {
String outputPath = prefs.get("build.path");
File outputFolder = new File(outputPath, libraryFolder.getName());
File utilityFolder = new File(libraryFolder, "utility");
createFolder(outputFolder);
// this library can use includes in its utility/ folder
includePaths.add(utilityFolder.getAbsolutePath());

objectFiles.addAll(compileFiles(outputFolder.getAbsolutePath(),
libraryFolder, false, includePaths));
outputFolder = new File(outputFolder, "utility");
createFolder(outputFolder);
objectFiles.addAll(compileFiles(outputFolder.getAbsolutePath(),
utilityFolder, false, includePaths));
// other libraries should not see this library's utility/ folder
includePaths.remove(includePaths.size() - 1);
if (new File(libraryFolder.getParentFile(), "library.properties").exists()) {
recursiveCompileLibrary(outputPath, libraryFolder, includePaths);
} else {
compileLibrary(outputPath, libraryFolder, includePaths);
}
}
}


private void recursiveCompileLibrary(File outputPath, File libraryFolder, List<String> includePaths) throws RunnerException {
File newOutputPath = compileFilesInFolder(outputPath, libraryFolder, includePaths);
for (File subFolder : libraryFolder.listFiles(new OnlyDirs())) {
recursiveCompileLibrary(newOutputPath, subFolder, includePaths);
}
}

private File compileFilesInFolder(File outputPath, File libraryFolder, List<String> includePaths) throws RunnerException {
File outputFolder = new File(outputPath, libraryFolder.getName());
createFolder(outputFolder);
objectFiles.addAll(compileFiles(outputFolder.getAbsolutePath(), libraryFolder, false, includePaths));
return outputFolder;
}

private void compileLibrary(File outputPath, File libraryFolder, List<String> includePaths) throws RunnerException {
File outputFolder = new File(outputPath, libraryFolder.getName());
File utilityFolder = new File(libraryFolder, "utility");
createFolder(outputFolder);
// this library can use includes in its utility/ folder
includePaths.add(utilityFolder.getAbsolutePath());

objectFiles.addAll(compileFiles(outputFolder.getAbsolutePath(),
libraryFolder, false, includePaths));
outputFolder = new File(outputFolder, "utility");
createFolder(outputFolder);
objectFiles.addAll(compileFiles(outputFolder.getAbsolutePath(),
utilityFolder, false, includePaths));
// other libraries should not see this library's utility/ folder
includePaths.remove(includePaths.size() - 1);
}

// 3. compile the core, outputting .o files to <buildPath> and then
// collecting them into the core.a library file.
void compileCore()
Expand Down
Empty file modified app/src/processing/app/tools/Archiver.java
100755 → 100644
Empty file.
Empty file modified build/howto.txt
100755 → 100644
Empty file.
Empty file modified build/shared/lib/preferences.txt
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/atmega/ATmegaBOOT_168.c
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/atmega/Makefile
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/atmega8/ATmegaBOOT.c
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/bt/Makefile
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/caterina-LilyPadUSB/Caterina.c
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/caterina-LilyPadUSB/Caterina.h
100755 → 100644
Empty file.
Empty file.
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/caterina-LilyPadUSB/Makefile
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/caterina-LilyPadUSB/Readme.txt
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/caterina/Caterina.c
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/caterina/Caterina.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/caterina/Descriptors.c
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/caterina/Descriptors.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/caterina/Makefile
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/stk500v2/License.txt
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/stk500v2/Makefile
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/stk500v2/command.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/bootloaders/stk500v2/stk500boot.c
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/cores/arduino/Arduino.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/cores/arduino/Print.cpp
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/cores/arduino/Print.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/cores/arduino/Tone.cpp
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/cores/arduino/wiring_private.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/cores/arduino/wiring_pulse.c
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/cores/arduino/wiring_shift.c
100755 → 100644
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file modified hardware/arduino/avr/libraries/EEPROM/EEPROM.cpp
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/EEPROM/EEPROM.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/Ethernet/Dhcp.cpp
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/Ethernet/Dhcp.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/Ethernet/utility/socket.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/Ethernet/utility/w5100.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/Servo/Servo.cpp
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/Servo/Servo.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/Servo/keywords.txt
100755 → 100644
Empty file.
Empty file.
Empty file modified hardware/arduino/avr/libraries/SoftwareSerial/SoftwareSerial.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/SoftwareSerial/keywords.txt
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/WiFi/WiFi.cpp
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/WiFi/WiFi.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/WiFi/WiFiClient.cpp
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/WiFi/WiFiClient.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/WiFi/WiFiServer.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/WiFi/keywords.txt
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/Wire/Wire.cpp
100755 → 100644
Empty file.
Empty file modified hardware/arduino/avr/libraries/Wire/Wire.h
100755 → 100644
Empty file.
Empty file.
Empty file modified hardware/arduino/avr/libraries/Wire/utility/twi.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/sam/libraries/Ethernet/Dhcp.cpp
100755 → 100644
Empty file.
Empty file modified hardware/arduino/sam/libraries/Ethernet/Dhcp.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/sam/libraries/Ethernet/utility/socket.h
100755 → 100644
Empty file.
Empty file modified hardware/arduino/sam/libraries/Ethernet/utility/w5100.h
100755 → 100644
Empty file.
Empty file modified libraries/LiquidCrystal/LiquidCrystal.h
100755 → 100644
Empty file.
Empty file modified libraries/LiquidCrystal/keywords.txt
100755 → 100644
Empty file.