From d4c5a06e09465d494a6fab120c00244a0e1c8c97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Guillemet?= Date: Fri, 17 Feb 2023 23:44:56 +0100 Subject: [PATCH 1/3] Fix output path when provided classes have same length --- src/main/java/org/bytedeco/javacpp/tools/Builder.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/bytedeco/javacpp/tools/Builder.java b/src/main/java/org/bytedeco/javacpp/tools/Builder.java index b8b9624f..39f6d230 100644 --- a/src/main/java/org/bytedeco/javacpp/tools/Builder.java +++ b/src/main/java/org/bytedeco/javacpp/tools/Builder.java @@ -449,7 +449,7 @@ int compile(String[] sourceFilenames, String outputFilename, ClassProperties pro /** * Creates and returns the directory where output files should be placed. * Uses {@link #outputDirectory} as is when available, but falls back - * on the shortest common path to the classes as well as the platform + * on the longest common path to the classes as well as the platform * specific library path when available, or the platform name itself * and the user provided extension when not. * @@ -476,13 +476,14 @@ File getOutputPath(Class[] classes, String[] sourcePrefixes) throws IOException String resourceURL = Loader.findResource(classes[0], resourceName).toString(); String packageURI = resourceURL.substring(0, resourceURL.lastIndexOf('/') + 1); for (int i = 1; i < classes.length; i++) { - // Use shortest common package name among all classes as default output path + // Use the longest common package name among all classes as default output path String resourceName2 = '/' + classes[i].getName().replace('.', '/') + ".class"; String resourceURL2 = Loader.findResource(classes[i], resourceName2).toString(); String packageURI2 = resourceURL2.substring(0, resourceURL2.lastIndexOf('/') + 1); - String longest = packageURI2.length() > packageURI.length() ? packageURI2 : packageURI; - String shortest = packageURI2.length() < packageURI.length() ? packageURI2 : packageURI; + String longest, shortest; + if (packageURI2.length() > packageURI.length()) { longest = packageURI2; shortest = packageURI; } + else { longest = packageURI; shortest = packageURI2; } while (!longest.startsWith(shortest) && shortest.lastIndexOf('/') > 0) { shortest = shortest.substring(0, shortest.lastIndexOf('/')); } From 162589dda052d2083b353e6f20d7f7d85eec2926 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Guillemet?= Date: Mon, 20 Feb 2023 18:46:35 +0100 Subject: [PATCH 2/3] Same effect with fewer changes. --- src/main/java/org/bytedeco/javacpp/tools/Builder.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/bytedeco/javacpp/tools/Builder.java b/src/main/java/org/bytedeco/javacpp/tools/Builder.java index 39f6d230..84ac2bfc 100644 --- a/src/main/java/org/bytedeco/javacpp/tools/Builder.java +++ b/src/main/java/org/bytedeco/javacpp/tools/Builder.java @@ -481,9 +481,8 @@ File getOutputPath(Class[] classes, String[] sourcePrefixes) throws IOException String resourceURL2 = Loader.findResource(classes[i], resourceName2).toString(); String packageURI2 = resourceURL2.substring(0, resourceURL2.lastIndexOf('/') + 1); - String longest, shortest; - if (packageURI2.length() > packageURI.length()) { longest = packageURI2; shortest = packageURI; } - else { longest = packageURI; shortest = packageURI2; } + String longest = packageURI2.length() >= packageURI.length() ? packageURI2 : packageURI; + String shortest = packageURI2.length() < packageURI.length() ? packageURI2 : packageURI; while (!longest.startsWith(shortest) && shortest.lastIndexOf('/') > 0) { shortest = shortest.substring(0, shortest.lastIndexOf('/')); } From 51c99f25a8f07de806e2514e43e40d6238270049 Mon Sep 17 00:00:00 2001 From: Samuel Audet Date: Wed, 22 Feb 2023 22:35:37 +0900 Subject: [PATCH 3/3] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 30f7b8b1..1c310c85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ + * Fix `Builder` default output path for class names with the same length ([pull #654](https://github.com/bytedeco/javacpp/pull/654)) * Add `Info.friendly` to have `Parser` map some `friend` functions to Java methods ([pull #649](https://github.com/bytedeco/javacpp/pull/649)) * Add `Loader.loadProperties(boolean forceReload)` to reset platform properties ([issue deepjavalibrary/djl#2318](https://github.com/deepjavalibrary/djl/issues/2318)) * Prevent `TokenIndexer` from recursively expanding macros