lwjgl/eclipse-update/org.lwjgl/src/java/org/lwjgl/LibraryPathUtil.java

93 lines
2.8 KiB
Java

/*******************************************************************************
* Copyright (c) 2011 LWJGL Project and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html, and under the terms of the
* BSD license, see http://lwjgl.org/license.php for details.
*
* Contributors:
* Jens von Pilgrim - initial implementation
******************************************************************************/
package org.lwjgl;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import org.eclipse.core.runtime.FileLocator;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
/**
* Helper class for retrieving plugin relative path of native LWJGL
* libraries and setting the path in the system properties.
*
* @author Jens von Pilgrim
* @since Jan 30, 2011
*/
public class LibraryPathUtil {
public static final String LWJGL_SYSTEM_PROPERTY = "org.lwjgl.librarypath";
public static String[] NATIVEPATH = new String[] { "windows", "macosx",
"linux", "solaris" };
/**
* Returns plugin relative path to native libraries according to
* current operating system.
*
* @return
* @throws OSNotSupportedException
*/
public static String getRelativeLWJGLLibraryPath()
throws OSNotSupportedException {
int iOS = -1;
String osname = System.getProperty("os.name").toLowerCase();
String osarch = System.getProperty("os.arch").toLowerCase();
// applied patch by Carlo Salinari: ignore osarch on windows
// see http://lwjgl.org/forum/index.php/topic,3726.0.html
if (osname.startsWith("windows")) {
iOS = 0;
} else if (osname.startsWith("mac")) {
iOS = 1;
} else if (osname.startsWith("linux")) {
iOS = 2;
} else if (osname.startsWith("solaris")) {
iOS = 3;
}
if (iOS >= 0 && iOS < NATIVEPATH.length) {
String base = "native" + File.separator + NATIVEPATH[iOS];
return base;
} else {
throw new OSNotSupportedException(osname, osarch);
}
}
/**
* Returns absolute path of native LWJGL libraries according to
* current operating system, this path is also set as
* system property.
*
* @param context
* @return
* @throws OSNotSupportedException
* @throws IOException
*/
public static String getLWJGLLibraryPath(BundleContext context)
throws OSNotSupportedException, IOException {
String base = getRelativeLWJGLLibraryPath();
Bundle fragment = context.getBundle();
URL url = FileLocator.resolve(fragment.getEntry(base));
File fileDir = new File(url.getPath());
String path = fileDir.getPath();
System.setProperty(LWJGL_SYSTEM_PROPERTY, path);
return path;
}
}