diff --git a/windows/org.eclipse.cdt.msw.build/.classpath b/windows/org.eclipse.cdt.msw.build/.classpath
new file mode 100644
index 00000000000..751c8f2e504
--- /dev/null
+++ b/windows/org.eclipse.cdt.msw.build/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/windows/org.eclipse.cdt.msw.build/.project b/windows/org.eclipse.cdt.msw.build/.project
new file mode 100644
index 00000000000..e97910dcff7
--- /dev/null
+++ b/windows/org.eclipse.cdt.msw.build/.project
@@ -0,0 +1,28 @@
+
+
+ org.eclipse.cdt.msw.build
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/windows/org.eclipse.cdt.msw.build/.settings/org.eclipse.jdt.core.prefs b/windows/org.eclipse.cdt.msw.build/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..0f0eb3002b3
--- /dev/null
+++ b/windows/org.eclipse.cdt.msw.build/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Mon Jul 23 15:38:07 EDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/windows/org.eclipse.cdt.msw.build/META-INF/MANIFEST.MF b/windows/org.eclipse.cdt.msw.build/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..492bcb702be
--- /dev/null
+++ b/windows/org.eclipse.cdt.msw.build/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: MSVC Build Integration Plug-in
+Bundle-SymbolicName: org.eclipse.cdt.msw.build;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.cdt.msw.build.Activator
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.cdt.core,
+ org.eclipse.cdt.managedbuilder.core
+Eclipse-LazyStart: true
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/windows/org.eclipse.cdt.msw.build/build.properties b/windows/org.eclipse.cdt.msw.build/build.properties
new file mode 100644
index 00000000000..30b2fc40bd8
--- /dev/null
+++ b/windows/org.eclipse.cdt.msw.build/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.properties,\
+ plugin.xml
diff --git a/windows/org.eclipse.cdt.msw.build/plugin.properties b/windows/org.eclipse.cdt.msw.build/plugin.properties
new file mode 100644
index 00000000000..05150db9042
--- /dev/null
+++ b/windows/org.eclipse.cdt.msw.build/plugin.properties
@@ -0,0 +1,9 @@
+toolchain.name=Microsoft Visual C++
+
+compiler.name=C/C++ Compiler (cl)
+rc.name=Resource Compiler (rc)
+linker.name=Linker (link)
+lib.name=Library Manager (lib)
+
+config.debug=Debug
+config.release=Release
\ No newline at end of file
diff --git a/windows/org.eclipse.cdt.msw.build/plugin.xml b/windows/org.eclipse.cdt.msw.build/plugin.xml
new file mode 100644
index 00000000000..3c63de507e4
--- /dev/null
+++ b/windows/org.eclipse.cdt.msw.build/plugin.xml
@@ -0,0 +1,647 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/Activator.java b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/Activator.java
new file mode 100644
index 00000000000..c9e6ca453fb
--- /dev/null
+++ b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/Activator.java
@@ -0,0 +1,50 @@
+package org.eclipse.cdt.msw.build;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "net.sf.wascana.msvc.build";
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinDiscoveredPathInfo.java b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinDiscoveredPathInfo.java
new file mode 100644
index 00000000000..f873465c221
--- /dev/null
+++ b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinDiscoveredPathInfo.java
@@ -0,0 +1,59 @@
+package org.eclipse.cdt.msw.build;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredPathInfo;
+import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredScannerInfoSerializable;
+import org.eclipse.cdt.utils.WindowsRegistry;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+
+/**
+ * @author Doug Schaefer
+ *
+ */
+public class WinDiscoveredPathInfo implements IDiscoveredPathInfo {
+
+ private final IPath[] paths;
+ private final Map 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"))
+ };
+
+ symbols.put("_M_IX86", "600");
+ symbols.put("_WIN32", "1");
+ symbols.put("_MSC_VER", "1400");
+ }
+
+ public IPath[] getIncludePaths() {
+ return paths;
+ }
+
+ public IProject getProject() {
+ return null;
+ }
+
+ public IDiscoveredScannerInfoSerializable getSerializable() {
+ return null;
+ }
+
+ public Map getSymbols() {
+ return symbols;
+ }
+
+}
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
new file mode 100644
index 00000000000..25ed330d7a6
--- /dev/null
+++ b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinEnvironmentVariableSupplier.java
@@ -0,0 +1,118 @@
+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 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);
+ }
+
+ 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");
+ if (sdkDir == null)
+ sdkDir = reg.getLocalMachineValue("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v6.1", "InstallationFolder");
+
+ // INCLUDE
+ buff = new StringBuffer();
+ buff.append(sdkDir).append("VC\\Include;");
+ buff.append(sdkDir).append("VC\\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(sdkDir).append("Lib;");
+ addvar(new WindowsBuildEnvironmentVariable("LIB", buff.toString(), IBuildEnvironmentVariable.ENVVAR_PREPEND));
+
+ // PATH
+ buff = new StringBuffer();
+ buff.append(sdkDir).append("VC\\Bin;");
+ buff.append(sdkDir).append("Bin;");
+ addvar(new WindowsBuildEnvironmentVariable("PATH", buff.toString(), IBuildEnvironmentVariable.ENVVAR_PREPEND));
+ }
+
+}
diff --git a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinScannerInfoCollector.java b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinScannerInfoCollector.java
new file mode 100644
index 00000000000..e955c512026
--- /dev/null
+++ b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinScannerInfoCollector.java
@@ -0,0 +1,41 @@
+package org.eclipse.cdt.msw.build;
+
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector3;
+import org.eclipse.cdt.make.core.scannerconfig.InfoContext;
+import org.eclipse.cdt.make.core.scannerconfig.ScannerInfoTypes;
+import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredPathInfo;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+/**
+ * @author Doug Schaefer
+ *
+ */
+public class WinScannerInfoCollector implements IScannerInfoCollector3 {
+
+ public void contributeToScannerConfig(Object resource, Map scannerInfo) {
+ }
+
+ public List getCollectedScannerInfo(Object resource, ScannerInfoTypes type) {
+ return null;
+ }
+
+ public IDiscoveredPathInfo createPathInfoObject() {
+ return new WinDiscoveredPathInfo();
+ }
+
+ public void setInfoContext(InfoContext context) {
+ }
+
+ public void setProject(IProject project) {
+ }
+
+ public void updateScannerConfiguration(IProgressMonitor monitor) throws CoreException {
+ }
+
+}