diff --git a/arpack/src/main/java/dev/ludovic/netlib/arpack/JNIARPACK.java b/arpack/src/main/java/dev/ludovic/netlib/arpack/JNIARPACK.java index fa84cdf6..9e206285 100644 --- a/arpack/src/main/java/dev/ludovic/netlib/arpack/JNIARPACK.java +++ b/arpack/src/main/java/dev/ludovic/netlib/arpack/JNIARPACK.java @@ -28,9 +28,11 @@ import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; +import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; +import java.nio.file.attribute.FileAttribute; import java.nio.file.attribute.PosixFilePermissions; final class JNIARPACK extends AbstractARPACK implements NativeARPACK { @@ -42,8 +44,11 @@ protected JNIARPACK() { if (osName == null || osName.isEmpty()) { throw new RuntimeException("Unable to load native implementation"); } + boolean isWindows = osName.startsWith("Windows"); if (osName.equals("Mac OS X")) { osName = "macos"; + } else if (isWindows) { + osName = "windows"; } String osArch = System.getProperty("os.arch"); if (osArch == null || osArch.isEmpty()) { @@ -51,15 +56,19 @@ protected JNIARPACK() { } String libPrefix = "libnetlibarpackjni"; - String libExtension = osName.equals("macos") ? ".dylib" : ".so"; + String libExtension = osName.equals("macos") ? ".dylib" : isWindows ? ".dll" : ".so"; String libName = libPrefix + libExtension; + FileAttribute[] attrs = FileSystems.getDefault() + .supportedFileAttributeViews().contains("posix") + ? new FileAttribute[]{ PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxr-x---")) } + : new FileAttribute[0]; + Path temp; try (InputStream resource = this.getClass().getClassLoader().getResourceAsStream( String.format("resources/native/%s-%s/%s", osName, osArch, libName))) { assert resource != null; - Files.copy(resource, temp = Files.createTempFile(libPrefix, libExtension, - PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxr-x---"))), + Files.copy(resource, temp = Files.createTempFile(libPrefix, libExtension, attrs), StandardCopyOption.REPLACE_EXISTING); temp.toFile().deleteOnExit(); } catch (IOException e) { diff --git a/blas/src/main/java/dev/ludovic/netlib/blas/JNIBLAS.java b/blas/src/main/java/dev/ludovic/netlib/blas/JNIBLAS.java index f0793c42..8c60c8eb 100644 --- a/blas/src/main/java/dev/ludovic/netlib/blas/JNIBLAS.java +++ b/blas/src/main/java/dev/ludovic/netlib/blas/JNIBLAS.java @@ -28,9 +28,11 @@ import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; +import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; +import java.nio.file.attribute.FileAttribute; import java.nio.file.attribute.PosixFilePermissions; import java.util.logging.Logger; @@ -45,8 +47,11 @@ protected JNIBLAS() { if (osName == null || osName.isEmpty()) { throw new RuntimeException("Unable to load native implementation"); } + boolean isWindows = osName.startsWith("Windows"); if (osName.equals("Mac OS X")) { osName = "macos"; + } else if (isWindows) { + osName = "windows"; } String osArch = System.getProperty("os.arch"); if (osArch == null || osArch.isEmpty()) { @@ -54,18 +59,20 @@ protected JNIBLAS() { } String libPrefix = "libnetlibblasjni"; - String libExtension = osName.equals("macos") ? ".dylib" : ".so"; + String libExtension = osName.equals("macos") ? ".dylib" : isWindows ? ".dll" : ".so"; String libName = libPrefix + libExtension; log.fine(String.format("Trying to load native implementation from resource: resources/native/%s-%s/%s", osName, osArch, libName)); + FileAttribute[] attrs = FileSystems.getDefault() + .supportedFileAttributeViews().contains("posix") + ? new FileAttribute[]{ PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxr-x---")) } + : new FileAttribute[0]; Path temp; try (InputStream resource = this.getClass().getClassLoader().getResourceAsStream( String.format("resources/native/%s-%s/%s", osName, osArch, libName))) { assert resource != null; - Files.copy(resource, temp = Files.createTempFile(libPrefix, libExtension, - PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxr-x---"))), - StandardCopyOption.REPLACE_EXISTING); + Files.copy(resource, temp = Files.createTempFile(libPrefix, libExtension, attrs), StandardCopyOption.REPLACE_EXISTING); temp.toFile().deleteOnExit(); } catch (IOException e) { throw new UncheckedIOException("Unable to load native implementation", e); diff --git a/lapack/src/main/java/dev/ludovic/netlib/lapack/JNILAPACK.java b/lapack/src/main/java/dev/ludovic/netlib/lapack/JNILAPACK.java index 1d6718ec..130a730f 100644 --- a/lapack/src/main/java/dev/ludovic/netlib/lapack/JNILAPACK.java +++ b/lapack/src/main/java/dev/ludovic/netlib/lapack/JNILAPACK.java @@ -28,9 +28,11 @@ import java.io.InputStream; import java.io.UncheckedIOException; import java.io.IOException; +import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; +import java.nio.file.attribute.FileAttribute; import java.nio.file.attribute.PosixFilePermissions; final class JNILAPACK extends AbstractLAPACK implements NativeLAPACK { @@ -42,8 +44,11 @@ protected JNILAPACK() { if (osName == null || osName.isEmpty()) { throw new RuntimeException("Unable to load native implementation"); } + boolean isWindows = osName.startsWith("Windows"); if (osName.equals("Mac OS X")) { osName = "macos"; + } else if (isWindows) { + osName = "windows"; } String osArch = System.getProperty("os.arch"); if (osArch == null || osArch.isEmpty()) { @@ -51,15 +56,19 @@ protected JNILAPACK() { } String libPrefix = "libnetliblapackjni"; - String libExtension = osName.equals("macos") ? ".dylib" : ".so"; + String libExtension = osName.equals("macos") ? ".dylib" : isWindows ? ".dll" : ".so"; String libName = libPrefix + libExtension; + FileAttribute[] attrs = FileSystems.getDefault() + .supportedFileAttributeViews().contains("posix") + ? new FileAttribute[]{ PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxr-x---")) } + : new FileAttribute[0]; + Path temp; try (InputStream resource = this.getClass().getClassLoader().getResourceAsStream( String.format("resources/native/%s-%s/%s", osName, osArch, libName))) { assert resource != null; - Files.copy(resource, temp = Files.createTempFile(libPrefix, libExtension, - PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxr-x---"))), + Files.copy(resource, temp = Files.createTempFile(libPrefix, libExtension, attrs), StandardCopyOption.REPLACE_EXISTING); temp.toFile().deleteOnExit(); } catch (IOException e) {