From c80f98594b47dd30a352511f951cbbbbc3105e81 Mon Sep 17 00:00:00 2001
From: Sean Evoy <sevoy@ca.ibm.com>
Date: Tue, 24 Feb 2004 21:25:12 +0000
Subject: [PATCH] 2004-02-24 Sean Evoy Changed the makefile generator to escape
 any whitespace it finds in a dependency path. Now it is possible to build a
 project in a location with spaces but you still cannot have internal folders
 with spaces in the name. *
 src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java

Tweaked the builder to put only the make command in invocation if there were no arguments spec'd. It seemed to be causing a fake error message to be reported on Linux even though make was successfully building the project.
* src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
---
 .../ChangeLog                                 | 11 +++++++
 .../core/GeneratedMakefileBuilder.java        |  8 +++--
 .../internal/core/MakefileGenerator.java      | 33 +++++++++++++++++--
 3 files changed, 46 insertions(+), 6 deletions(-)

diff --git a/build/org.eclipse.cdt.managedbuilder.core/ChangeLog b/build/org.eclipse.cdt.managedbuilder.core/ChangeLog
index cc251528f15..74d7347fba2 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/ChangeLog
+++ b/build/org.eclipse.cdt.managedbuilder.core/ChangeLog
@@ -1,3 +1,14 @@
+2004-02-24 Sean Evoy
+	Changed the makefile generator to escape any whitespace it finds in a dependency
+	path. Now it is possible to build a project in a location with spaces but 
+	you still cannot have internal folders with spaces in the name. 
+	* src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java
+	
+	Tweaked the builder to put only the make command in invocation if there were 
+	no arguments spec'd. It seemed to be causing a fake error message 
+	to be reported on Linux even though make was successfully building the project.
+	* src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
+	
 2004-02-23 Sean Evoy
 	Fix for bug 52647.
 	In 1.2, the target stored the raw, overridden build command the user 
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
index c5ad9ddcd34..d3301eeb2a6 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
@@ -336,9 +336,11 @@ public class GeneratedMakefileBuilder extends ACBuilder {
 				// Get the arguments to be passed to make from build model
 				ArrayList makeArgs = new ArrayList();
 				String arg = info.getMakeArguments();
-				String[] args = arg.split("\\s");
-				for (int i = 0; i < args.length; ++i) {
-					makeArgs.add(args[i]);
+				if (arg.length() > 0) {
+					String[] args = arg.split("\\s");
+					for (int i = 0; i < args.length; ++i) {
+						makeArgs.add(args[i]);
+					}
 				}
 				makeArgs.addAll(Arrays.asList(getMakeTargets(fullBuild)));
 				String[] makeTargets = (String[]) makeArgs.toArray(new String[makeArgs.size()]);
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java
index 23d43a6c8fc..6b790935fdc 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java
@@ -339,7 +339,7 @@ public class MakefileGenerator {
 					if (outputExt != null) {
 						fileName += DOT + outputExt;
 					}
-					// ASk the dep generator to find all the deps for this resource
+					// Ask the dep generator to find all the deps for this resource
 					ArrayList dependencies = new ArrayList();
 					try {
 						indexManager.performConcurrentJob(new DependencyQueryJob(project, (IFile)resource, indexManager, dependencies), ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, null, null);
@@ -351,8 +351,13 @@ public class MakefileGenerator {
 					Iterator iter = dependencies.listIterator();
 					while (iter.hasNext()) {
 						buffer.append(LINEBREAK + NEWLINE);
-						String path = (String)iter.next();
-						buffer.append(path + WHITESPACE);
+						String rawPath = (String)iter.next();
+						// TODO Convert to relative if possible
+						String path = escapeWhitespaces(rawPath);
+						buffer.append(path);
+						if (iter.hasNext()) {
+							buffer.append(WHITESPACE);
+						}
 					}
 					buffer.append(NEWLINE);
 				}
@@ -361,6 +366,28 @@ public class MakefileGenerator {
 		return buffer;
 	}
 
+	/* (non-Javadoc)
+	 * Answers the argument with all whitespaces replaced with an escape sequence.
+	 * 
+	 * @param path
+	 */
+	private String escapeWhitespaces(String path) {
+		// Escape the spaces in the path/filename if it has any
+		String[] segments = path.split("\\s");
+		if (segments.length > 1) {
+			StringBuffer escapedPath = new StringBuffer();
+			for (int index = 0; index < segments.length; ++index) {
+				escapedPath.append(segments[index]);
+				if (index + 1 < segments.length) {
+					escapedPath.append("\\ ");
+				}
+			}
+			return escapedPath.toString().trim();
+		} else {
+			return path;
+		}
+	}
+
 	/* (non-javadoc)
 	 * @param buffer
 	 * @param info