Skip to content

Commit 5e7ff25

Browse files
committed
* Iterate extensions of libraries or executables on Loader.load() in reverse to be consistent with properties overriding
1 parent 130afac commit 5e7ff25

File tree

4 files changed

+17
-9
lines changed

4 files changed

+17
-9
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
* Iterate extensions of libraries or executables on `Loader.load()` in reverse to be consistent with properties overriding
23
* Allow prefixing library names with `:` to have `Loader` consider them as filenames with prefix and suffix already included
34
* Add `Loader.loadGlobal()` to load symbols globally as often required by Python libraries ([issue ContinuumIO/anaconda-issues#6401](https://github.com/ContinuumIO/anaconda-issues/issues/6401))
45

src/main/java/org/bytedeco/javacpp/ClassProperties.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,10 @@ public void load(Class cls, boolean inherit) {
296296
addAll("platform.preload", preload);
297297
addAll("platform.resourcepath", resourcepath);
298298
addAll("platform.resource", resource);
299-
addAll("platform.extension", extension);
299+
if (platformExtension == null || platformExtension.length() == 0) {
300+
// don't override the platform extension when found outside the class
301+
addAll("platform.extension", extension);
302+
}
300303
addAll("platform.executablepath", executablepath);
301304
setProperty("platform.executable", executable);
302305
setProperty("platform.library", library);

src/main/java/org/bytedeco/javacpp/Loader.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,7 +1061,9 @@ public static String load(Class cls, Properties properties, boolean pathsFirst)
10611061
String suffix = p.getProperty("platform.executable.suffix", "");
10621062
String filename = prefix + executable + suffix;
10631063
try {
1064-
for (String extension : Arrays.copyOf(extensions, extensions.length + 1)) {
1064+
for (int i = extensions.length - 1; i >= -1; i--) {
1065+
// iterate extensions in reverse to be consistent with the overriding of properties
1066+
String extension = i >= 0 ? extensions[i] : "";
10651067
String subdir = platform + (extension == null ? "" : extension) + "/";
10661068
File f = cacheResource(cls, subdir + filename);
10671069
if (f != null) {
@@ -1199,7 +1201,9 @@ public static URL[] findLibrary(Class cls, ClassProperties properties, String li
11991201
ArrayList<URL> urls = new ArrayList<URL>(styles.length * (1 + paths.size()));
12001202
for (int i = 0; cls != null && i < styles.length; i++) {
12011203
// ... then find it from in our resources ...
1202-
for (String extension : Arrays.copyOf(extensions, extensions.length + 1)) {
1204+
for (int j = extensions.length - 1; j >= -1; j--) {
1205+
// iterate extensions in reverse to be consistent with the overriding of properties
1206+
String extension = j >= 0 ? extensions[j] : "";
12031207
for (String resource : Arrays.copyOf(resources, resources.length + 1)) {
12041208
if (resource != null && !resource.endsWith("/")) {
12051209
resource += "/";

src/test/java/org/bytedeco/javacpp/BuilderTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public class BuilderTest implements BuildEnabled, LoadEnabled {
7272
assertEquals(0, outputFiles0.length);
7373

7474
System.out.println("Builder");
75-
Builder builder = new Builder().property("platform.extension", "-ext2").classesOrPackages(c.getName());
75+
Builder builder = new Builder().property("platform.extension", "-ext1").classesOrPackages(c.getName());
7676
File[] outputFiles = builder.build();
7777

7878
System.out.println("Loader");
@@ -86,24 +86,24 @@ public class BuilderTest implements BuildEnabled, LoadEnabled {
8686
Loader.loadProperties().remove("platform.extension");
8787
String filename = Loader.load(c);
8888
Loader.loadGlobal(filename);
89-
assertTrue(Loader.getLoadedLibraries().get("jniBuilderTest").contains("-ext2"));
89+
assertTrue(Loader.getLoadedLibraries().get("jniBuilderTest").contains("-ext1"));
9090
Loader.loadedLibraries.clear();
9191

9292
System.out.println("Builder");
93-
Builder builder2 = new Builder().property("platform.extension", "-ext1").classesOrPackages(c.getName());
93+
Builder builder2 = new Builder().property("platform.extension", "-ext2").classesOrPackages(c.getName());
9494
File[] outputFiles2 = builder2.build();
9595

9696
System.out.println("Loader");
9797
Loader.loadProperties().remove("platform.extension");
9898
filename = Loader.load(c);
9999
Loader.loadGlobal(filename);
100-
assertTrue(Loader.getLoadedLibraries().get("jniBuilderTest").contains("-ext1"));
100+
assertTrue(Loader.getLoadedLibraries().get("jniBuilderTest").contains("-ext2"));
101101
Loader.loadedLibraries.clear();
102102

103-
Loader.loadProperties().put("platform.extension", "-ext2");
103+
Loader.loadProperties().put("platform.extension", "-ext1");
104104
filename = Loader.load(c);
105105
Loader.loadGlobal(filename);
106-
assertTrue(Loader.getLoadedLibraries().get("jniBuilderTest").contains("-ext2"));
106+
assertTrue(Loader.getLoadedLibraries().get("jniBuilderTest").contains("-ext1"));
107107

108108
System.out.println(initCount);
109109
assertTrue(initCount >= 6);

0 commit comments

Comments
 (0)