On Wed, 10 Apr 2024 16:46:30 GMT, Suchismith Roy <s...@openjdk.org> wrote:

>> Allow support for both .a and .so files in AIX.
>> If .so file is not found, allow fallback to .a extension.
>> JBS Issue: [JDK-8319516](https://bugs.openjdk.org/browse/JDK-8319516)
>
> Suchismith Roy has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Files copy method

Hello Martin,

> Maybe using that directory is easier. Does anybody else have a suggestion?

Each jtreg test, when it is run, will be run in a "scratch" directory. Details 
about that are explained here 
https://openjdk.org/jtreg/faq.html#scratch-directory. That directory can be 
used to create test specific content.

As for the test, I think what you will need is something like this (I don't 
know or have access to AIX, so this obviously isn't tested)


import java.nio.file.Files;
import java.nio.file.Path;

import jdk.test.lib.process.ProcessTools;

/**
 * @test
 * @bug 8319516
 * @summary verify that System.loadLibrary on AIX is able to load libraries 
from ".a" (archive) file
 * @requires os.family == "aix"
 * @library /test/lib/
 * @build jdk.test.lib.process.ProcessTools
 * @run driver AIXLoadLibraryDriver
 */
public class AIXLoadLibraryDriver {

    private static final String TEST_LIBRARY_NAME = "foobar";

    // creates a ".a" archive file in a test specific directory and then
    // launches a java application passing this directory through 
"-Djava.library.path".
    // the java application then attempts to load the library using 
System.loadLibrary()
    public static void main(final String[] args) throws Exception {
        final String javaHome = System.getProperty("java.home");
        final Path libawtSo = Path.of(javaHome).resolve("lib", "libawt.so");
        if (!Files.exists(libawtSo)) {
            throw new AssertionError(libawtSo + " is missing");
        }
        final String archiveFileName = "lib" + TEST_LIBRARY_NAME + ".a";
        // copy over libawt.so as an archive file to test specific scratch dir
        final Path testNativeLibDir = Path.of("native").toAbsolutePath();
        Files.createDirectories(testNativeLibDir);
        final Path libDummyArchive = testNativeLibDir.resolve(archiveFileName);
        Files.copy(libawtSo, libDummyArchive);

        // launch a java application which calls System.loadLibrary and is 
passed
        // the directory containing the native library archive file, through
        // -Djava.library.path
        System.out.println("Launching application with library path " + 
testNativeLibDir);
        final ProcessBuilder processBuilder = 
ProcessTools.createTestJavaProcessBuilder(
                "-Djava.library.path=" + testNativeLibDir,
                AIXLoadLibraryDriver.LoadLibraryApp.class.getName());
        ProcessTools.executeCommand(processBuilder).shouldHaveExitValue(0);
    }

    static class LoadLibraryApp {
        public static void main(final String[] args) throws Exception {
            System.out.println("attempting to load library " + 
TEST_LIBRARY_NAME);
            System.loadLibrary(TEST_LIBRARY_NAME);
            System.out.println(TEST_LIBRARY_NAME + " successfully loaded");
        }
    }
}

-------------

PR Comment: https://git.openjdk.org/jdk/pull/17945#issuecomment-2049416575

Reply via email to