]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.msvc.runtime.x86_64/org.simantics.msvc.runtime/src/org/simantics/msvc/runtime/Runtimes.java
Added missing plug-ins from old SVN repository trunk
[simantics/platform.git] / bundles / org.simantics.msvc.runtime.x86_64 / org.simantics.msvc.runtime / src / org / simantics / msvc / runtime / Runtimes.java
diff --git a/bundles/org.simantics.msvc.runtime.x86_64/org.simantics.msvc.runtime/src/org/simantics/msvc/runtime/Runtimes.java b/bundles/org.simantics.msvc.runtime.x86_64/org.simantics.msvc.runtime/src/org/simantics/msvc/runtime/Runtimes.java
new file mode 100644 (file)
index 0000000..31702fd
--- /dev/null
@@ -0,0 +1,92 @@
+package org.simantics.msvc.runtime;
+
+import java.io.File;
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.net.URLDecoder;
+
+import org.eclipse.core.runtime.Path;
+
+/**
+ * @author Tuukka Lehtonen
+ */
+public final class Runtimes {
+
+    public static final String VC_2010 = "vc2010";
+
+    static boolean vc100Initialized = false;
+
+    public static void initialize(String vc) {
+        OSType os = OSType.calculate();
+        if (os == OSType.WINDOWS) {
+            if (VC_2010.equals(vc) && !vc100Initialized) {
+                initializeVC100();
+            }
+        }
+    }
+
+    static synchronized void initializeVC100() {
+        try {
+            // Works in OSGi environment.
+            System.loadLibrary("msvcr100");
+            System.loadLibrary("msvcp100");
+            vc100Initialized = true;
+        } catch (UnsatisfiedLinkError e) {
+            // Try to load from a workspace in POJO environment.
+            try {
+                String archStr = ARCHType.calculate().toString().toLowerCase();
+                URL url = Runtimes.class.getResource(".");
+                File dir = new File(URLDecoder.decode(url.getPath(), "UTF-8") + "../../../../../../org.simantics.msvc.runtime." + archStr);
+                dir = new Path(dir.getAbsolutePath()).toFile();
+                String vcr = new File(dir, "msvcr100.dll").getAbsolutePath();
+                String vcp = new File(dir, "msvcp100.dll").getAbsolutePath();
+                System.load(vcr);
+                System.load(vcp);
+                vc100Initialized = true;
+            } catch (UnsupportedEncodingException e1) {
+                throw new Error("UTF-8 not supported, impossible");
+            }
+        }
+    }
+
+    public enum ARCHType {
+        PPC, PPC_64, SPARC, X86, X86_64, UNKNOWN;
+
+        public static ARCHType calculate() {
+            String osArch = System.getProperty("os.arch");
+            assert osArch != null;
+            osArch = osArch.toLowerCase();
+            if (osArch.equals("i386") || osArch.equals("i586") || osArch.equals("i686") || osArch.equals("x86"))
+                return X86;
+            if (osArch.startsWith("amd64") || osArch.startsWith("x86_64"))
+                return X86_64;
+            if (osArch.equals("ppc"))
+                return PPC;
+            if (osArch.startsWith("ppc"))
+                return PPC_64;
+            if (osArch.startsWith("sparc"))
+                return SPARC;
+            return UNKNOWN;
+        }
+    }
+
+    public enum OSType {
+        APPLE, LINUX, SUN, WINDOWS, UNKNOWN;
+
+        public static OSType calculate() {
+            String osName = System.getProperty("os.name");
+            assert osName != null;
+            osName = osName.toLowerCase();
+            if (osName.startsWith("mac os x"))
+                return APPLE;
+            if (osName.startsWith("windows"))
+                return WINDOWS;
+            if (osName.startsWith("linux"))
+                return LINUX;
+            if (osName.startsWith("sun"))
+                return SUN;
+            return UNKNOWN;
+        }
+    }
+
+}