package com.haskforce.jps;
/*
* Downloaded from https://github.com/Atsky/haskell-idea-plugin on 7 May
* 2014.
*/
import com.haskforce.jps.model.HaskellBuildOptions;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.configurations.GeneralCommandLine;
import com.intellij.execution.configurations.ParametersList;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
/**
* Simple cabal interface.
*/
public class CabalJspInterface {
@NotNull
private File myCabalFile;
@NotNull
private HaskellBuildOptions myBuildOptions;
CabalJspInterface(@NotNull File cabalFile, @NotNull HaskellBuildOptions buildOptions) {
myCabalFile = cabalFile;
myBuildOptions = buildOptions;
}
private Process runCommand(String command, String... args) throws IOException, ExecutionException {
return getCommandLine(command, args).createProcess();
}
private GeneralCommandLine getCommandLine(String command, String... args) throws IOException, ExecutionException {
GeneralCommandLine commandLine = new GeneralCommandLine();
commandLine.setWorkDirectory(myCabalFile.getParentFile().getCanonicalPath());
commandLine.setExePath(myBuildOptions.myCabalPath);
ParametersList parametersList = commandLine.getParametersList();
parametersList.add("--with-ghc=" + myBuildOptions.myGhcPath);
parametersList.add(command);
if (command.equals("install") || command.equals("configure")) {
if (myBuildOptions.myEnableTests) {
parametersList.add("--enable-tests");
}
if (!myBuildOptions.myProfilingBuild) {
parametersList.add("--disable-library-profiling");
}
}
parametersList.addAll(args);
commandLine.setRedirectErrorStream(true);
return commandLine;
}
public Process sandboxInit() throws IOException, ExecutionException {
return runCommand("sandbox", "init");
}
public Process installDependencies(boolean dryRun) throws IOException, ExecutionException {
if (dryRun) {
return runCommand("install", "--only-dependencies", "--dry-run");
}
return runCommand("install", "--only-dependencies");
}
public Process installDependencies() throws IOException, ExecutionException {
return installDependencies(false);
}
public Process configure() throws IOException, ExecutionException {
GeneralCommandLine commandLine = getCommandLine("configure");
ParametersList parametersList = commandLine.getParametersList();
parametersList.addParametersString(myBuildOptions.myCabalFlags);
return commandLine.createProcess();
}
public Process build() throws IOException, ExecutionException {
return runCommand("build");
}
public Process clean() throws IOException, ExecutionException {
return runCommand("clean");
}
}