270 lines
7.6 KiB
Java
270 lines
7.6 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.tools;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.net.URL;
|
|
import java.util.logging.Logger;
|
|
|
|
import org.eclipse.core.runtime.FileLocator;
|
|
import org.eclipse.core.runtime.IPath;
|
|
import org.eclipse.core.runtime.Path;
|
|
import org.eclipse.core.runtime.Platform;
|
|
import org.eclipse.jdt.core.IAccessRule;
|
|
import org.eclipse.jdt.core.IClasspathAttribute;
|
|
import org.eclipse.jdt.core.IClasspathEntry;
|
|
import org.eclipse.jdt.core.JavaCore;
|
|
import org.eclipse.jdt.launching.JavaRuntime;
|
|
import org.lwjgl.LibraryPathUtil;
|
|
import org.lwjgl.OSNotSupportedException;
|
|
import org.osgi.framework.Bundle;
|
|
import org.osgi.framework.Constants;
|
|
|
|
/**
|
|
* This class resolves the actual LWJGL library path, that is the location
|
|
* of the jars in the org.lwjgl plugin.
|
|
*
|
|
* Following the "monkey sees, monkey does"-rule, this code was copied and
|
|
* modified from the plugin org.eclipse.jdt.junit . This code is published
|
|
* under the EPL and (c) by IBM and others.
|
|
*
|
|
* @see org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathSupport
|
|
* @see org.eclipse.jdt.internal.junit.buildpath.BuildPathSupport
|
|
*/
|
|
public class BuildPathSupport {
|
|
/**
|
|
* Logger for this class
|
|
*/
|
|
private static final Logger log = Logger.getLogger(BuildPathSupport.class.getName());
|
|
|
|
public static class LWJGLPluginDescription {
|
|
private final String strBundleId;
|
|
|
|
private Bundle bundle = null;
|
|
|
|
public LWJGLPluginDescription(String bundleId) {
|
|
strBundleId = bundleId;
|
|
|
|
}
|
|
|
|
public Bundle getBundle() {
|
|
if (bundle == null)
|
|
bundle = Platform.getBundle(strBundleId);
|
|
return bundle;
|
|
}
|
|
|
|
public String getBundleId() {
|
|
return strBundleId;
|
|
}
|
|
|
|
}
|
|
|
|
public static final LWJGLPluginDescription LWJGL_PLUGIN = new LWJGLPluginDescription(
|
|
"org.lwjgl"); //$NON-NLS-1$
|
|
|
|
public static final LWJGLPluginDescription LWJGL_SRC_PLUGIN = new LWJGLPluginDescription(
|
|
"org.lwjgl.source"); //$NON-NLS-1$
|
|
|
|
public static final LWJGLPluginDescription LWJGL_DOC_PLUGIN = new LWJGLPluginDescription(
|
|
"org.lwjgl.doc"); //$NON-NLS-1$
|
|
|
|
public static final String[] JAR_FILES = { "lwjgl.jar", "lwjgl_util.jar",
|
|
"lwjgl_util_applet.jar", "jinput.jar" };
|
|
|
|
public static final String[] SRC_FILES = { "lwjglsrc.zip",
|
|
"lwjgl_utilsrc.zip", "lwjgl_util_applet.zip", null };
|
|
|
|
public static final String[] DOC_FILES = { "doc.zip", "doc.zip", "doc.zip",
|
|
"doc.zip" };
|
|
|
|
public static String[] NATIVEPATH = new String[] { "windows", "macosx",
|
|
"linux", "solaris" };
|
|
|
|
|
|
|
|
public static IPath getBundleLocation(LWJGLPluginDescription pluginDesc) {
|
|
Bundle bundle = pluginDesc.getBundle();
|
|
if (bundle == null)
|
|
return null;
|
|
|
|
URL local = null;
|
|
try {
|
|
local = FileLocator.toFileURL(bundle.getEntry("/")); //$NON-NLS-1$
|
|
} catch (IOException e) {
|
|
return null;
|
|
}
|
|
String fullPath = new File(local.getPath()).getAbsolutePath();
|
|
return Path.fromOSString(fullPath);
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
*
|
|
* /Devel/Applications/Eclipse3.4/plugins/org.lwjgl.source_2.0.1/src/org.lwjgl_2.0.1/lwjglsrc.zip
|
|
* /Devel/Applications/Eclipse3.4/plugins/org.lwjgl.source_2.0.1/src/org.lwjgl_2.0.1/lwjgl_utilsrc.zip
|
|
* /Devel/Applications/Eclipse3.4/plugins/org.lwjgl.source_2.0.1/src/org.lwjgl_2.0.1/lwjgl_util_applet.zip
|
|
*
|
|
*
|
|
* @param pluginDesc
|
|
* @return
|
|
*/
|
|
public static IPath getSourceLocation(String filename) {
|
|
if (filename==null)
|
|
return null;
|
|
Bundle bundleSrc = LWJGL_SRC_PLUGIN.getBundle();
|
|
if (bundleSrc == null)
|
|
return null;
|
|
|
|
String version = (String) bundleSrc.getHeaders().get(
|
|
Constants.BUNDLE_VERSION);
|
|
if (version == null) {
|
|
return null;
|
|
}
|
|
|
|
String bundlePath = getURL(bundleSrc);
|
|
if (bundlePath == null) {
|
|
return null;
|
|
}
|
|
|
|
File bundleLoc = new File(bundlePath);
|
|
if (bundleLoc.isDirectory()) {
|
|
String fullPath = bundleLoc.getAbsolutePath() + File.separator
|
|
+ "src" + File.separator + LWJGL_PLUGIN.getBundleId() + '_'
|
|
+ version + File.separator + filename;
|
|
return Path.fromOSString(fullPath);
|
|
} else if (bundleLoc.isFile()) {
|
|
return Path.fromOSString(bundleLoc.getAbsolutePath());
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* jar:file:/Devel/Applications/Eclipse3.4/plugins/org.lwjgl.doc_2.0.1/doc.zip!/javadoc
|
|
*
|
|
* @param pluginDesc
|
|
* @param filename
|
|
* @return
|
|
*/
|
|
public static String getJavadocLocation(String filename) {
|
|
if (filename==null)
|
|
return null;
|
|
|
|
Bundle bundleDoc = LWJGL_DOC_PLUGIN.getBundle();
|
|
if (bundleDoc == null)
|
|
return null;
|
|
|
|
String version = (String) bundleDoc.getHeaders().get(
|
|
Constants.BUNDLE_VERSION);
|
|
if (version == null) {
|
|
return null;
|
|
}
|
|
|
|
String bundlePath = getURL(bundleDoc);
|
|
if (bundlePath == null) {
|
|
return null;
|
|
}
|
|
|
|
File bundleLoc = new File(bundlePath);
|
|
if (bundleLoc.isDirectory()) {
|
|
String fullPath = "jar:file:" + bundleLoc.getAbsolutePath()
|
|
+ File.separator + filename + "!"
|
|
+ File.separator + "javadoc" + File.separator;
|
|
return fullPath;
|
|
} else if (bundleLoc.isFile()) {
|
|
return bundleLoc.getAbsolutePath();
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public static String getNativeLocation() {
|
|
|
|
String basePath;
|
|
try {
|
|
basePath = LibraryPathUtil.getRelativeLWJGLLibraryPath();
|
|
} catch (OSNotSupportedException ex) {
|
|
log.warning(ex.toString()); //$NON-NLS-1$
|
|
return null;
|
|
}
|
|
|
|
Bundle bundle = LWJGL_PLUGIN.getBundle();
|
|
if (bundle == null)
|
|
return null;
|
|
|
|
String bundlePath = getURL(bundle);
|
|
if (bundlePath == null) {
|
|
return null;
|
|
}
|
|
|
|
File bundleLoc = new File(bundlePath);
|
|
if (bundleLoc.isDirectory()) {
|
|
String fullPath = bundleLoc.getAbsolutePath()
|
|
+ File.separator + basePath;
|
|
return fullPath;
|
|
} else if (bundleLoc.isFile()) {
|
|
return null;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private static String getURL(Bundle bundle) {
|
|
try {
|
|
URL fileURL = FileLocator.toFileURL(bundle.getEntry("/")); //$NON-NLS-1$
|
|
if (fileURL != null) {
|
|
return fileURL.getFile();
|
|
}
|
|
return null;
|
|
} catch (IOException e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public static IClasspathEntry getLWJGLClasspathEntry() {
|
|
return JavaCore
|
|
.newContainerEntry(LWJGLClasspathContainerInitializer.LWJGL_LIBRARY_PATH);
|
|
}
|
|
|
|
public static IClasspathEntry[] getLWJGLLibraryEntries() {
|
|
IPath bundleBase = getBundleLocation(LWJGL_PLUGIN);
|
|
if (bundleBase != null) {
|
|
IClasspathEntry[] entries = new IClasspathEntry[JAR_FILES.length];
|
|
for (int i = 0; i < JAR_FILES.length; i++) {
|
|
IPath jarLocation = bundleBase.append(JAR_FILES[i]); //$NON-NLS-1$
|
|
IPath srcLocation = getSourceLocation(SRC_FILES[i]);
|
|
String nativeLocation = getNativeLocation();
|
|
String javadocLocation = getJavadocLocation(DOC_FILES[i]);
|
|
IAccessRule[] accessRules = {};
|
|
IClasspathAttribute[] attributes = { //
|
|
JavaCore
|
|
.newClasspathAttribute(
|
|
IClasspathAttribute.JAVADOC_LOCATION_ATTRIBUTE_NAME,
|
|
javadocLocation),
|
|
JavaCore.newClasspathAttribute(
|
|
JavaRuntime.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY,
|
|
nativeLocation) };
|
|
|
|
// return JavaCore.newClasspathAttribute(JavaRuntime.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY, dialog.getNativeLibraryPath());
|
|
|
|
entries[i] = JavaCore.newLibraryEntry(jarLocation, srcLocation,
|
|
null, accessRules, attributes, false);
|
|
}
|
|
return entries;
|
|
|
|
}
|
|
return null;
|
|
}
|
|
}
|