package io.sloeber.core.api;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.envvar.EnvironmentVariable;
import org.eclipse.cdt.core.envvar.IContributedEnvironment;
import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
import org.eclipse.cdt.core.envvar.IEnvironmentVariableManager;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import io.sloeber.core.common.Common;
import io.sloeber.core.common.Const;
public class CompileOptions {
private Boolean myWarningLevel = new Boolean(true);
private boolean myAlternativeSizeCommand = false;
private String myAditional_CPP_CompileOptions = ""; //$NON-NLS-1$
private String myAditional_C_CompileOptions = ""; //$NON-NLS-1$
private String myAditional_C_andCPP_CompileOptions = ""; //$NON-NLS-1$
private static final String ENV_KEY_WARNING_LEVEL_OFF = "A.COMPILER.WARNING_FLAGS"; //$NON-NLS-1$
private static final String ENV_KEY_WARNING_LEVEL_ON = "${A.COMPILER.WARNING_FLAGS.ALL}"; //$NON-NLS-1$
private static final String ENV_KEY_JANTJE_WARNING_LEVEL = Const.ENV_KEY_JANTJE_START + "WARNING_LEVEL"; //$NON-NLS-1$
/**
* gets the compile options stored in this configuration description. if the
* configuration description is null the default compile options are
* returned.
*
* @param confDesc
* null for default or the configuration description you want the
* compile options for
*/
public CompileOptions(ICConfigurationDescription confDesc) {
if (confDesc != null) {
IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager();
IContributedEnvironment contribEnv = envManager.getContributedEnvironment();
IEnvironmentVariable var = contribEnv.getVariable(ENV_KEY_JANTJE_WARNING_LEVEL, confDesc);
if (var != null)
this.myWarningLevel = Boolean.valueOf(var.getValue());
var = contribEnv.getVariable(Const.ENV_KEY_JANTJE_SIZE_SWITCH, confDesc);
if (var != null)
this.myAlternativeSizeCommand = var.getValue().contains(Const.ENV_KEY_JANTJE_SIZE_COMMAND);
var = contribEnv.getVariable(Const.ENV_KEY_JANTJE_ADDITIONAL_COMPILE_OPTIONS, confDesc);
if (var != null)
this.myAditional_C_andCPP_CompileOptions = var.getValue();
var = contribEnv.getVariable(Const.ENV_KEY_JANTJE_ADDITIONAL_C_COMPILE_OPTIONS, confDesc);
if (var != null)
this.myAditional_C_CompileOptions = var.getValue();
var = contribEnv.getVariable(Const.ENV_KEY_JANTJE_ADDITIONAL_CPP_COMPILE_OPTIONS, confDesc);
if (var != null)
this.myAditional_CPP_CompileOptions = var.getValue();
}
}
public boolean isMyWarningLevel() {
return this.myWarningLevel.booleanValue();
}
public void setMyWarningLevel(boolean myWarningLevel) {
this.myWarningLevel = new Boolean(myWarningLevel);
}
public boolean isMyAlternativeSizeCommand() {
return this.myAlternativeSizeCommand;
}
public void setMyAlternativeSizeCommand(boolean alternativeSizeCommand) {
this.myAlternativeSizeCommand = alternativeSizeCommand;
}
public String getMyAditional_CPP_CompileOptions() {
return this.myAditional_CPP_CompileOptions;
}
public void setMyAditional_CPP_CompileOptions(String aditional_CPP_CompileOptions) {
this.myAditional_CPP_CompileOptions = aditional_CPP_CompileOptions;
}
public String getMyAditional_C_CompileOptions() {
return this.myAditional_C_CompileOptions;
}
public void setMyAditional_C_CompileOptions(String aditional_C_CompileOptions) {
this.myAditional_C_CompileOptions = aditional_C_CompileOptions;
}
public String getMyAditional_C_andCPP_CompileOptions() {
return this.myAditional_C_andCPP_CompileOptions;
}
public void setMyAditional_C_andCPP_CompileOptions(String myAditional_C_andCPP_CompileOptions) {
this.myAditional_C_andCPP_CompileOptions = myAditional_C_andCPP_CompileOptions;
}
/**
* save the compilation options in this configuration description.
*
* @param configuration
* must be a valid configuration description
*/
public void save(ICConfigurationDescription configuration) {
IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager();
IContributedEnvironment contribEnv = envManager.getContributedEnvironment();
IEnvironmentVariable var = new EnvironmentVariable(ENV_KEY_JANTJE_WARNING_LEVEL,
this.myWarningLevel.toString());
contribEnv.addVariable(var, configuration);
if (this.isMyWarningLevel()) {
var = new EnvironmentVariable(ENV_KEY_WARNING_LEVEL_OFF, ENV_KEY_WARNING_LEVEL_ON);
contribEnv.addVariable(var, configuration);
}
if (this.myAlternativeSizeCommand) {
var = new EnvironmentVariable(Const.ENV_KEY_JANTJE_SIZE_SWITCH, "${" //$NON-NLS-1$
+ Const.ENV_KEY_JANTJE_SIZE_COMMAND + "}"); //$NON-NLS-1$
contribEnv.addVariable(var, configuration);
} else {
var = new EnvironmentVariable(Const.ENV_KEY_JANTJE_SIZE_SWITCH, "${" //$NON-NLS-1$
+ Common.get_ENV_KEY_RECIPE(Const.ACTION_SIZE) + "}"); //$NON-NLS-1$
contribEnv.addVariable(var, configuration);
}
var = new EnvironmentVariable(Const.ENV_KEY_JANTJE_ADDITIONAL_COMPILE_OPTIONS,
this.myAditional_C_andCPP_CompileOptions);
contribEnv.addVariable(var, configuration);
var = new EnvironmentVariable(Const.ENV_KEY_JANTJE_ADDITIONAL_CPP_COMPILE_OPTIONS,
this.myAditional_CPP_CompileOptions);
contribEnv.addVariable(var, configuration);
var = new EnvironmentVariable(Const.ENV_KEY_JANTJE_ADDITIONAL_C_COMPILE_OPTIONS,
this.myAditional_C_CompileOptions);
contribEnv.addVariable(var, configuration);
}
}