blob: e759581b15db152530351c97700fc73cd6e573d7 [file] [log] [blame]
package org.eclipse.cdt.msw.build;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IManagedProject;
import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable;
import org.eclipse.cdt.managedbuilder.envvar.IConfigurationEnvironmentVariableSupplier;
import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider;
import org.eclipse.cdt.managedbuilder.envvar.IProjectEnvironmentVariableSupplier;
import org.eclipse.cdt.utils.WindowsRegistry;
/**
* @author DSchaefer
*
*/
public class WinEnvironmentVariableSupplier
implements IConfigurationEnvironmentVariableSupplier, IProjectEnvironmentVariableSupplier {
private Map<String, IBuildEnvironmentVariable> envvars;
private static class WindowsBuildEnvironmentVariable implements IBuildEnvironmentVariable {
private final String name;
private final String value;
private final int operation;
public WindowsBuildEnvironmentVariable(String name, String value, int operation) {
this.name = name;
this.value = value;
this.operation = operation;
}
public String getDelimiter() {
return ";";
}
public String getName() {
return name;
}
public String getValue() {
return value;
}
public int getOperation() {
return operation;
}
}
public IBuildEnvironmentVariable getVariable(String variableName,
IManagedProject project, IEnvironmentVariableProvider provider) {
if (envvars == null)
initvars();
return envvars.get(variableName);
}
public IBuildEnvironmentVariable getVariable(String variableName,
IConfiguration configuration, IEnvironmentVariableProvider provider) {
if (envvars == null)
initvars();
return envvars.get(variableName);
}
public IBuildEnvironmentVariable[] getVariables(IManagedProject project,
IEnvironmentVariableProvider provider) {
if (envvars == null)
initvars();
return envvars.values().toArray(new IBuildEnvironmentVariable[envvars.size()]);
}
public IBuildEnvironmentVariable[] getVariables(
IConfiguration configuration, IEnvironmentVariableProvider provider) {
if (envvars == null)
initvars();
return envvars.values().toArray(new IBuildEnvironmentVariable[envvars.size()]);
}
private void addvar(IBuildEnvironmentVariable var) {
envvars.put(var.getName(), var);
}
public static String getSDKDir() {
WindowsRegistry reg = WindowsRegistry.getRegistry();
String[] keys = {
"SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v6.1",
"SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v6.0A",
"SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v6.0",
};
for (int i = 0; i < keys.length; ++i) {
String sdkDir = reg.getLocalMachineValue(keys[i], "InstallationFolder");
if (sdkDir != null)
return sdkDir;
}
return null;
}
public static String getVCDir() {
WindowsRegistry reg = WindowsRegistry.getRegistry();
String vcDir = reg.getLocalMachineValue("SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7", "9.0");
if (vcDir != null)
return vcDir;
// Try full SDK with compiler
String sdkDir = getSDKDir();
if (sdkDir != null)
return sdkDir.concat("VC\\");
return null;
}
public static String getVSDir() {
WindowsRegistry reg = WindowsRegistry.getRegistry();
return reg.getLocalMachineValue("SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VS7", "9.0");
}
private void initvars() {
envvars = new HashMap<String, IBuildEnvironmentVariable>();
// The SDK Location
String sdkDir = getSDKDir();
if (sdkDir == null)
return;
String vcDir = getVCDir();
// INCLUDE
StringBuffer buff = new StringBuffer();
buff.append(vcDir).append("Include;");
buff.append(vcDir).append("Include\\Sys;");
buff.append(sdkDir).append("Include;");
buff.append(sdkDir).append("Include\\gl;");
addvar(new WindowsBuildEnvironmentVariable("INCLUDE", buff.toString(), IBuildEnvironmentVariable.ENVVAR_PREPEND));
// LIB
buff = new StringBuffer();
buff.append(vcDir).append("Lib;");
buff.append(sdkDir).append("Lib;");
addvar(new WindowsBuildEnvironmentVariable("LIB", buff.toString(), IBuildEnvironmentVariable.ENVVAR_PREPEND));
// PATH
buff = new StringBuffer();
String vsDir = getVSDir();
if (vsDir != null)
buff.append(vsDir).append("Common7\\IDE;");
buff.append(vcDir).append("Bin;");
buff.append(sdkDir).append("Bin;");
addvar(new WindowsBuildEnvironmentVariable("PATH", buff.toString(), IBuildEnvironmentVariable.ENVVAR_PREPEND));
}
}