/*
* Copyright (c) 2013-2016 Chris Newland.
* Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD
* Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki
*/
package org.adoptopenjdk.jitwatch.process.compiler;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.S_EMPTY;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.adoptopenjdk.jitwatch.logger.ILogListener;
import org.adoptopenjdk.jitwatch.process.AbstractProcess;
public class CompilerJRuby extends AbstractProcess implements ICompiler
{
// TODO this is broken. Not sure if possible with ProcessBuilder
// http://blog.headius.com/2013/06/the-pain-of-broken-subprocess.html
private Path compilerPath;
private final String COMPILER_NAME = "jrubyc" + (isWindows() ? ".bat" : S_EMPTY);
public CompilerJRuby(String languageHomeDir) throws FileNotFoundException
{
super();
compilerPath = Paths.get(languageHomeDir, "bin", COMPILER_NAME);
if (!compilerPath.toFile().exists())
{
throw new FileNotFoundException("Could not find " + COMPILER_NAME);
}
compilerPath = compilerPath.normalize();
}
@Override
public boolean compile(List<File> sourceFiles, List<String> classpathEntries, File outputDir, ILogListener logListener)
throws IOException
{
List<String> commands = new ArrayList<>();
String outputDirPath = outputDir.getAbsolutePath().toString();
Set<String> uniqueCPSet = new HashSet<>(classpathEntries);
uniqueCPSet.add(outputDirPath);
commands.add(compilerPath.toString());
// List<String> compileOptions = Arrays.asList(new String[] { "-g",
// "-d", outputDirPath });
//
// commands.addAll(compileOptions);
//
if (classpathEntries.size() > 0)
{
commands.add("-cp");
commands.add(makeClassPath(classpathEntries));
}
for (File sourceFile : sourceFiles)
{
commands.add(sourceFile.getAbsolutePath());
}
return runCommands(commands, logListener);
}
}