* Natives will now get extracted only if they were actually updated (last modified date changed)
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7866 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
a5d00fd003
commit
7f96a82b77
@ -40,6 +40,7 @@ import java.io.InputStream;
|
|||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.net.URLConnection;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
@ -52,7 +53,7 @@ public class Natives {
|
|||||||
private static final Logger logger = Logger.getLogger(Natives.class.getName());
|
private static final Logger logger = Logger.getLogger(Natives.class.getName());
|
||||||
private static final byte[] buf = new byte[1024];
|
private static final byte[] buf = new byte[1024];
|
||||||
private static File workingDir = new File("").getAbsoluteFile();
|
private static File workingDir = new File("").getAbsoluteFile();
|
||||||
|
|
||||||
public static void setExtractionDir(String name) {
|
public static void setExtractionDir(String name) {
|
||||||
workingDir = new File(name).getAbsoluteFile();
|
workingDir = new File(name).getAbsoluteFile();
|
||||||
}
|
}
|
||||||
@ -69,16 +70,31 @@ public class Natives {
|
|||||||
String fullname = System.mapLibraryName(name);
|
String fullname = System.mapLibraryName(name);
|
||||||
|
|
||||||
String path = "native/" + sysName + "/" + fullname;
|
String path = "native/" + sysName + "/" + fullname;
|
||||||
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(path);
|
URL url = Thread.currentThread().getContextClassLoader().getResource(path);
|
||||||
//InputStream in = Natives.class.getResourceAsStream();
|
|
||||||
if (in == null) {
|
if (url == null) {
|
||||||
if (!warning) {
|
if (!warning) {
|
||||||
logger.log(Level.WARNING, "Cannot locate native library: {0}/{1}",
|
logger.log(Level.WARNING, "Cannot locate native library: {0}/{1}",
|
||||||
new String[]{sysName, fullname});
|
new String[]{sysName, fullname});
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
URLConnection conn = url.openConnection();
|
||||||
|
InputStream in = conn.getInputStream();
|
||||||
File targetFile = new File(workingDir, fullname);
|
File targetFile = new File(workingDir, fullname);
|
||||||
|
if (targetFile.exists()){
|
||||||
|
// OK, compare last modified date of this file to
|
||||||
|
// file in jar
|
||||||
|
long targetLastModified = targetFile.lastModified();
|
||||||
|
long sourceLastModified = conn.getLastModified();
|
||||||
|
|
||||||
|
// Allow ~1 second range for OSes that only support low precision
|
||||||
|
if (targetLastModified + 1000 > sourceLastModified){
|
||||||
|
logger.log(Level.FINE, "Not copying library {0}. Latest already extracted.", fullname);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
OutputStream out = new FileOutputStream(targetFile);
|
OutputStream out = new FileOutputStream(targetFile);
|
||||||
int len;
|
int len;
|
||||||
@ -87,6 +103,11 @@ public class Natives {
|
|||||||
}
|
}
|
||||||
in.close();
|
in.close();
|
||||||
out.close();
|
out.close();
|
||||||
|
|
||||||
|
// NOTE: On OSes that support "Date Created" property,
|
||||||
|
// this will cause the last modified date to be lower than
|
||||||
|
// date created which makes no sense
|
||||||
|
targetFile.setLastModified(conn.getLastModified());
|
||||||
} catch (FileNotFoundException ex) {
|
} catch (FileNotFoundException ex) {
|
||||||
if (ex.getMessage().contains("used by another process")) {
|
if (ex.getMessage().contains("used by another process")) {
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user