From c80f98594b47dd30a352511f951cbbbbc3105e81 Mon Sep 17 00:00:00 2001 From: Sean Evoy 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