package net.sourceforge.phpdt.internal.launching; import java.io.File; import java.io.IOException; import org.eclipse.core.boot.BootLoader; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.model.IProcess; public class InterpreterRunner { public InterpreterRunner() { } public IProcess run(InterpreterRunnerConfiguration configuration, ILaunch launch) { String commandLine = renderCommandLine(configuration); File workingDirectory = configuration.getAbsoluteWorkingDirectory(); Process nativePHPProcess = null; try { nativePHPProcess = configuration.getInterpreter().exec(commandLine, workingDirectory); } catch (IOException e) { throw new RuntimeException("Unable to execute interpreter: " + commandLine + workingDirectory); } IProcess process = DebugPlugin.getDefault().newProcess(launch, nativePHPProcess, renderLabel(configuration)); process.setAttribute(PHPLaunchingPlugin.PLUGIN_ID + ".launcher.cmdline", commandLine); return process ; } protected String renderLabel(InterpreterRunnerConfiguration configuration) { StringBuffer buffer = new StringBuffer(); PHPInterpreter interpreter = configuration.getInterpreter(); buffer.append("PHP "); buffer.append(interpreter.getCommand()); buffer.append(" : "); buffer.append(configuration.getFileName()); return buffer.toString(); } protected String renderCommandLine(InterpreterRunnerConfiguration configuration) { PHPInterpreter interpreter = configuration.getInterpreter(); StringBuffer buffer = new StringBuffer(); buffer.append(this.getDebugCommandLineArgument()); // buffer.append(renderLoadPath(configuration)); buffer.append(" " + configuration.getInterpreterArguments()); // buffer.append(interpreter.endOfOptionsDelimeter); buffer.append(" " + osDependentPath(configuration.getAbsoluteFileName())); buffer.append(" " + configuration.getProgramArguments()); return buffer.toString(); } // protected String renderLoadPath(InterpreterRunnerConfiguration configuration) { // StringBuffer loadPath = new StringBuffer(); // // PHPProject project = configuration.getProject(); // addToLoadPath(loadPath, project.getProject()); // // Iterator referencedProjects = project.getReferencedProjects().iterator(); // while (referencedProjects.hasNext()) // addToLoadPath(loadPath, (IProject) referencedProjects.next()); // // return loadPath.toString(); // } // protected void addToLoadPath(StringBuffer loadPath, IProject project) { // // loadPath.append(" -I " + osDependentPath(project.getLocation().toOSString())); // } protected String osDependentPath(String aPath) { if (BootLoader.getOS().equals(BootLoader.OS_WIN32)) aPath = "\"" + aPath + "\""; return aPath; } protected String getDebugCommandLineArgument() { return "" ; } }