diff --git a/windows/org.eclipse.cdt.msw.build/plugin.xml b/windows/org.eclipse.cdt.msw.build/plugin.xml index 3c63de507e4..bb86d18c93b 100644 --- a/windows/org.eclipse.cdt.msw.build/plugin.xml +++ b/windows/org.eclipse.cdt.msw.build/plugin.xml @@ -8,6 +8,7 @@ archList="all" configurationEnvironmentSupplier="org.eclipse.cdt.msw.build.WinEnvironmentVariableSupplier" id="org.eclipse.cdt.msvc.toolchain.base" + isAbstract="true" name="%toolchain.name" osList="win32" targetTool="org.eclipse.cdt.msvc.link;org.eclipse.cdt.msvc.lib"> @@ -259,7 +260,7 @@ symbols = new HashMap(); public WinDiscoveredPathInfo() { - WindowsRegistry reg = WindowsRegistry.getRegistry(); - // Include paths - String sdkDir = reg.getLocalMachineValue("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v6.0", "InstallationFolder"); - if (sdkDir == null) - sdkDir = reg.getLocalMachineValue("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v6.1", "InstallationFolder"); - - paths = new IPath[] { - new Path(sdkDir.concat("\\VC\\Include")), - new Path(sdkDir.concat("\\VC\\Include\\Sys")), - new Path(sdkDir.concat("\\Include")), - new Path(sdkDir.concat("\\Include\\gl")) - }; - + String sdkDir = WinEnvironmentVariableSupplier.getSDKDir(); + if (sdkDir != null) { + String vcDir = WinEnvironmentVariableSupplier.getVCDir(); + paths = new IPath[] { + new Path(vcDir.concat("Include")), + new Path(vcDir.concat("Include\\Sys")), + new Path(sdkDir.concat("Include")), + new Path(sdkDir.concat("Include\\gl")) + }; + } else + paths = new IPath[0]; + symbols.put("_M_IX86", "600"); symbols.put("_WIN32", "1"); symbols.put("_MSC_VER", "1400"); diff --git a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinEnvironmentVariableSupplier.java b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinEnvironmentVariableSupplier.java index 25ed330d7a6..e759581b15d 100644 --- a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinEnvironmentVariableSupplier.java +++ b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinEnvironmentVariableSupplier.java @@ -83,34 +83,76 @@ public class WinEnvironmentVariableSupplier 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(); - StringBuffer buff; - WindowsRegistry reg = WindowsRegistry.getRegistry(); - // The SDK Location - String sdkDir = reg.getLocalMachineValue("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v6.0", "InstallationFolder"); + String sdkDir = getSDKDir(); if (sdkDir == null) - sdkDir = reg.getLocalMachineValue("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v6.1", "InstallationFolder"); + return; + + String vcDir = getVCDir(); // INCLUDE - buff = new StringBuffer(); - buff.append(sdkDir).append("VC\\Include;"); - buff.append(sdkDir).append("VC\\Include\\Sys;"); + 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(sdkDir).append("VC\\Lib;"); + buff.append(vcDir).append("Lib;"); buff.append(sdkDir).append("Lib;"); addvar(new WindowsBuildEnvironmentVariable("LIB", buff.toString(), IBuildEnvironmentVariable.ENVVAR_PREPEND)); // PATH buff = new StringBuffer(); - buff.append(sdkDir).append("VC\\Bin;"); + + 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)); }