< prev index next >

src/jdk.jextract/share/classes/com/sun/tools/jextract/Context.java

Print this page

        

*** 21,48 **** * questions. */ package com.sun.tools.jextract; import jdk.internal.clang.*; - import jdk.internal.foreign.LibrariesHelper; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.io.UncheckedIOException; import java.lang.invoke.MethodHandles; import java.foreign.Library; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.TreeSet; import java.util.function.Function; import java.util.function.Predicate; --- 21,51 ---- * questions. */ package com.sun.tools.jextract; import jdk.internal.clang.*; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.io.UncheckedIOException; import java.lang.invoke.MethodHandles; + import java.lang.invoke.MethodHandles.Lookup; import java.foreign.Library; + import java.foreign.Libraries; import java.nio.file.Files; import java.nio.file.Path; + import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; + import java.util.Optional; import java.util.Properties; import java.util.Set; import java.util.TreeSet; import java.util.function.Function; import java.util.function.Predicate;
*** 139,151 **** void addExcludeSymbols(String pattern) { excludeSymbols.add(Pattern.compile(pattern)); } private void initSymChecker() { if (!libraryNames.isEmpty() && !linkCheckPaths.isEmpty()) { ! Library[] libs = LibrariesHelper.loadLibraries(MethodHandles.lookup(), linkCheckPaths.toArray(new String[0]), libraryNames.toArray(new String[0])); // check if the given symbol is found in any of the libraries or not. // If not found, warn the user for the missing symbol. --- 142,185 ---- void addExcludeSymbols(String pattern) { excludeSymbols.add(Pattern.compile(pattern)); } + // return the absolute path of the library of given name by searching + // in the given array of paths. + private static Optional<Path> findLibraryPath(Path[] paths, String libName) { + return Arrays.stream(paths). + map(p -> p.resolve(System.mapLibraryName(libName))). + filter(Files::isRegularFile).map(Path::toAbsolutePath).findFirst(); + } + + /* + * Load the specified shared libraries from the specified paths. + * + * @param lookup Lookup object of the caller. + * @param pathStrs array of paths to load the shared libraries from. + * @param names array of shared library names. + */ + // used by jextract tool to load libraries for symbol checks. + public static Library[] loadLibraries(Lookup lookup, String[] pathStrs, String[] names) { + if (pathStrs == null || pathStrs.length == 0) { + return Arrays.stream(names).map( + name -> Libraries.loadLibrary(lookup, name)).toArray(Library[]::new); + } else { + Path[] paths = Arrays.stream(pathStrs).map(Paths::get).toArray(Path[]::new); + return Arrays.stream(names).map(libName -> { + Optional<Path> absPath = findLibraryPath(paths, libName); + return absPath.isPresent() ? + Libraries.load(lookup, absPath.get().toString()) : + Libraries.loadLibrary(lookup, libName); + }).toArray(Library[]::new); + } + } + private void initSymChecker() { if (!libraryNames.isEmpty() && !linkCheckPaths.isEmpty()) { ! Library[] libs = loadLibraries(MethodHandles.lookup(), linkCheckPaths.toArray(new String[0]), libraryNames.toArray(new String[0])); // check if the given symbol is found in any of the libraries or not. // If not found, warn the user for the missing symbol.
< prev index next >