package org.geogebra.desktop.cas.giac;
import org.geogebra.common.cas.CASparser;
import org.geogebra.common.jre.cas.giac.CASgiacJre;
import org.geogebra.common.main.App;
import org.geogebra.common.util.debug.Log;
import org.geogebra.desktop.main.AppD;
/**
* @author michael
*
*/
public class CASgiacD extends CASgiacJre {
/**
* @param casParser
* casParser
*/
public CASgiacD(CASparser casParser) {
super(casParser);
}
private static boolean giacLoaded = false;
static {
try {
Log.debug("Loading Giac dynamic library");
String file;
if (AppD.MAC_OS) {
// Architecture on OSX seems to be x86_64, but let's make sure
file = "javagiac";
} else if ("AMD64".equals(System.getenv("PROCESSOR_ARCHITECTURE"))
// System.getenv("PROCESSOR_ARCHITECTURE") can return null
// (seems to
// happen on linux)
|| "amd64".equals(System.getProperty("os.arch"))) {
file = "javagiac64";
} else {
file = "javagiac";
}
Log.debug("Loading Giac dynamic library: " + file);
// When running from local jars we can load the library files from
// inside a jar like this
MyClassPathLoader loader = new MyClassPathLoader();
giacLoaded = loader.loadLibrary(file);
if (!giacLoaded) {
// "classic" method
// for Webstart, eg loading
// javagiac.dll from javagiac-win32.jar
// javagiac64.dll from javagiac-win64.jar
// libjavagiac.so from javagiac-linux32.jar
// libjavagiac64.so from javagiac-linux64.jar
// libjavagiac.jnilib from javagiac-mac.jar
Log.debug("Trying to load Giac library (alternative method)");
System.loadLibrary(file);
giacLoaded = true;
}
} catch (Exception e) {
e.printStackTrace();
} catch (Throwable e) {
e.printStackTrace();
}
if (giacLoaded) {
Log.debug("Giac dynamic library loaded");
App.setCASVersionString("Giac/JNI");
} else {
Log.debug("Failed to load Giac dynamic library");
App.setCASVersionString("Giac");
}
}
@Override
final protected boolean useThread() {
return !AppD.LINUX;
}
@SuppressWarnings("deprecation")
@Override
final protected void stopThread(Thread thread) {
// thread.interrupt() doesn't seem to stop it, so add this for
// good measure:
thread.stop();
}
}