29
29
import org .python .google .common .base .Joiner ;
30
30
import org .python .util .InteractiveConsole ;
31
31
32
+ import processing .app .Platform ;
32
33
import processing .core .PApplet ;
33
34
34
35
/**
@@ -128,19 +129,63 @@ protected void addLibrary(final String libName) {
128
129
if (libDir == null ) {
129
130
interp .exec ("raise Exception('This sketch requires the \" " + libName + "\" library.')" );
130
131
}
132
+
131
133
final File contentsDir = new File (libDir , "library" );
132
134
if (!contentsDir .exists ()) {
133
135
interp .exec ("raise Exception('The library " + libName + " is malformed and won't import.')" );
134
136
}
135
137
final File mainJar = new File (contentsDir , libName + ".jar" );
136
138
137
- recursivelyAddToClasspath (contentsDir );
139
+ log ("mainJar: " + mainJar );
140
+ log ("Adding dir: " + contentsDir );
141
+ if (Platform .isWindows ()) {
142
+ final File nativeDir = new File (libDir , "library/windows" + Platform .getVariant ());
143
+ recursivelyAddJarsToClasspath (contentsDir );
144
+ recursivelyLoadNativeLibraryies (nativeDir );
145
+ } else {
146
+ recursivelyAddToClasspath (contentsDir );
147
+ }
138
148
139
149
if (mainJar .exists ()) {
150
+ log ("adding mainJar" );
140
151
importPublicClassesFromJar (mainJar );
141
152
}
142
153
}
143
154
155
+ private void recursivelyAddJarsToClasspath (final File contentsDir ) {
156
+ final List <File > resources = findResources (contentsDir );
157
+ final PySystemState sys = Py .getSystemState ();
158
+ for (final File resource : resources ) {
159
+ final String name = resource .getName ();
160
+ if (name .endsWith (".jar" ) || name .endsWith (".zip" )) {
161
+ // Contains stuff we want
162
+ addJarToClassLoader (resource .getAbsoluteFile ());
163
+
164
+ log ("Appending " + resource .getAbsolutePath () + " to sys.path." );
165
+ sys .path .append (Py .newStringUTF8 (resource .getAbsolutePath ()));
166
+ } else if (resource .isDirectory ()) {
167
+ recursivelyAddToClasspath (resource );
168
+ }
169
+ }
170
+ }
171
+
172
+ private void recursivelyLoadNativeLibraryies (final File contentsDir ) {
173
+ final List <File > resources = findResources (contentsDir );
174
+ final PySystemState sys = Py .getSystemState ();
175
+ for (final File resource : resources ) {
176
+ final String name = resource .getName ();
177
+ if (name .matches ("^.*\\ .(so|dll|dylib|jnilib)$" )) {
178
+ // Add *containing directory* to native search path
179
+ log ("addDirectoryToNativeSearchPath: " + resource .getAbsoluteFile ().getParentFile ().getAbsolutePath ());
180
+ addDirectoryToNativeSearchPath (resource .getAbsoluteFile ().getParentFile ());
181
+ log ("Loading library: " + resource .getAbsoluteFile ().getName ());
182
+ System .load (resource .getAbsolutePath ());
183
+ } else if (resource .isDirectory ()) {
184
+ recursivelyAddToClasspath (resource );
185
+ }
186
+ }
187
+ }
188
+
144
189
private void recursivelyAddToClasspath (final File contentsDir ) {
145
190
final List <File > resources = findResources (contentsDir );
146
191
final PySystemState sys = Py .getSystemState ();
@@ -154,6 +199,7 @@ private void recursivelyAddToClasspath(final File contentsDir) {
154
199
sys .path .append (Py .newStringUTF8 (resource .getAbsolutePath ()));
155
200
} else if (name .matches ("^.*\\ .(so|dll|dylib|jnilib)$" )) {
156
201
// Add *containing directory* to native search path
202
+ log ("addDirectoryToNativeSearchPath: " + resource .getAbsoluteFile ().getParentFile ().getName ());
157
203
addDirectoryToNativeSearchPath (resource .getAbsoluteFile ().getParentFile ());
158
204
} else if (resource .isDirectory ()) {
159
205
recursivelyAddToClasspath (resource );
0 commit comments