Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Apple renamed all their OSes
[simgrid.git] / src / bindings / java / org / simgrid / NativeLib.java
index 6739dba..d358a02 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2014-2017. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2014-2018. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -13,9 +13,9 @@ import java.io.File;
 import java.nio.file.Files;
 import java.nio.file.Path;
 
-/** Helper class loading the native functions of SimGrid that we use for downcalls 
- * 
- * Almost all org.simgrid.msg.* classes contain a static bloc (thus executed when the class is loaded) 
+/** Helper class loading the native functions of SimGrid that we use for downcalls
+ *
+ * Almost all org.simgrid.msg.* classes contain a static bloc (thus executed when the class is loaded)
  * containing a call to this.
  */
 public final class NativeLib {
@@ -27,8 +27,8 @@ public final class NativeLib {
                throw new IllegalAccessError("Utility class");
        }
 
-       /** Hidden debug main() function 
-        * 
+       /** Hidden debug main() function
+        *
         * It is not the Main-Class defined in src/bindings/java/MANIFEST.in (org.simgrid.msg.Msg is),
         * so it won't get executed by default. But that's helpful to debug linkage errors, if you
         * know that it exists. It's used by cmake during the configure, to inform the user.
@@ -79,7 +79,7 @@ public final class NativeLib {
                        System.err.println();
                        cause.printStackTrace();
                } else {
-                       System.err.println("This jar file does not seem to fit your system, and no usable SimGrid installation found on disk.");
+                       System.err.println("This jar file does not seem to fit your system, and no usable SimGrid installation found on disk for "+name+".");
                }
                System.exit(1);
        }
@@ -96,34 +96,33 @@ public final class NativeLib {
                }
                
                /* For each possible filename of the given library on all possible OSes, try it */
-               for (String filename : new String[] 
-                  { name, 
+               for (String filename : new String[]
+                  { name,
                     "lib"+name+".so",               /* linux */
                     name+".dll", "lib"+name+".dll", /* windows (pure and mingw) */
-                    "lib"+name+".dylib"             /* mac osx */}) {
+                    "lib"+name+".dylib"             /* macOS */}) {
                                                
                        File fileOut = new File(tempDir.toFile().getAbsolutePath() + File.separator + filename);
+                       boolean done = false;
                        try ( // Try-with-resources. These stream will be autoclosed when needed.
                                InputStream in = NativeLib.class.getClassLoader().getResourceAsStream(path+filename);
                                OutputStream out = new FileOutputStream(fileOut);
                        ) {
-                               if (in == null)
-                                       continue; // Try the next name: no such file found
-                               
-                               /* copy the library in position */  
-                               byte[] buffer = new byte[4096]; 
-                               int bytesRead; 
-                               while ((bytesRead = in.read(buffer)) != -1)     // Read until EOF
-                                       out.write(buffer, 0, bytesRead); 
-                               
-                               out.close(); // Windows cannot open it twice, so close it first. Shame.
-                               
-                               /* load that shit */
+                               if (in != null) {
+                                       /* copy the library in position */
+                                       byte[] buffer = new byte[4096];
+                                       int bytesRead;
+                                       while ((bytesRead = in.read(buffer)) != -1)     // Read until EOF
+                                               out.write(buffer, 0, bytesRead);
+                                       done = true;
+                               }
+                       }
+                       if (done) {
+                               /* load that library */
                                System.load(fileOut.getAbsolutePath());
-                               
+
                                /* It loaded! we're good */
                                return true;
-                               
                        }
                }
                
@@ -143,11 +142,11 @@ public final class NativeLib {
                else if ("x86_64".equalsIgnoreCase(arch) || "AMD64".equalsIgnoreCase(arch))
                        arch = "amd64";
 
-               if (os.toLowerCase().startsWith("win")){
+               if (os.toLowerCase().startsWith("win")) {
                        os = "Windows";
-               } else if (os.contains("OS X"))
+               } else if (os.contains("OS X")) {
                        os = "Darwin";
-
+               }
                os = os.replace(' ', '_');
                arch = arch.replace(' ', '_');
 
@@ -169,7 +168,7 @@ public final class NativeLib {
                                if (! dir.delete() && !dir.getAbsolutePath().contains("appveyor") )
                                        System.out.println("Unable to clean temporary file "+dir.getAbsolutePath()+" during shutdown.");                                
                        } catch(Exception e) {
-                               System.out.println("Unable to clean temporary file "+dir.getAbsolutePath()+" during shutdown: "+e.getCause());
+                               System.out.println("Error while cleaning temporary file "+dir.getAbsolutePath()+" during shutdown: "+e.getCause());
                                e.printStackTrace();
                        }
                }