summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorcarnold <[email protected]>2008-02-12 16:16:47 +0000
committercarnold <[email protected]>2008-02-12 16:16:47 +0000
commit741dee308a276d1d9725b4e95d3a9018af348756 (patch)
tree433c86cc95cbf79f6bbc359413520b9de560060d /src
parent77601bd19b2aa119c0ba42e7452f16297fc9a5fd (diff)
Bug 980130: Improvements to generated IDE files, more to come
git-svn-id: file:///home/sven/projects/JOGL/temp/ant-contrib/svn/ant-contrib-code/cpptasks/trunk@151 32d7a393-a5a9-423c-abd3-5d954feb1f2f
Diffstat (limited to 'src')
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/CUtil.java26
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/apple/PropertyListSerialization.java6
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/apple/XcodeProjectWriter.java97
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioProjectWriter.java62
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/devstudio/VisualStudioNETProjectWriter.java33
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/ide/CommentDef.java12
-rw-r--r--src/test/java/net/sf/antcontrib/cpptasks/TestTargetHistoryTable.java2
7 files changed, 142 insertions, 96 deletions
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/CUtil.java b/src/main/java/net/sf/antcontrib/cpptasks/CUtil.java
index 4681e95..c41c99e 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/CUtil.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/CUtil.java
@@ -493,7 +493,31 @@ public class CUtil {
return StringUtils.replace(path, File.separator, "\\");
}
return path;
- }
+ }
+ public static String toUnixPath(final String path) {
+ if (File.separatorChar != '/' && path.indexOf(File.separatorChar) != -1) {
+ return StringUtils.replace(path, File.separator, "/");
+ }
+ return path;
+ }
+
+ /**
+ * Determines if source file has a system path,
+ * that is part of the compiler or platform.
+ * @param source source, may not be null.
+ * @return true is source file appears to be system library
+ * and its path should be discarded.
+ */
+ public static boolean isSystemPath(final File source) {
+ String lcPath = source.getAbsolutePath().toLowerCase(java.util.Locale.US);
+ return lcPath.indexOf("platformsdk") != -1
+ || lcPath.indexOf("microsoft") != -1 ||
+ lcPath == "/usr/include" ||
+ lcPath == "/usr/lib" ||
+ lcPath == "/usr/local/include" ||
+ lcPath == "/usr/local/lib";
+ }
+
}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/apple/PropertyListSerialization.java b/src/main/java/net/sf/antcontrib/cpptasks/apple/PropertyListSerialization.java
index 207d52f..c3a6807 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/apple/PropertyListSerialization.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/apple/PropertyListSerialization.java
@@ -50,10 +50,12 @@ public final class PropertyListSerialization {
* Serializes a property list into a Cocoa XML Property List document.
* @param propertyList property list.
* @param file destination.
+ * @param comments comments to insert into document.
* @throws SAXException if exception during serialization.
* @throws TransformerConfigurationException if exception creating serializer.
*/
public static void serialize(final Map propertyList,
+ final List comments,
final File file)
throws IOException, SAXException,
TransformerConfigurationException {
@@ -66,6 +68,10 @@ public final class PropertyListSerialization {
handler.setResult(result);
handler.startDocument();
+ for(Iterator iter = comments.iterator(); iter.hasNext();) {
+ char[] comment = String.valueOf(iter.next()).toCharArray();
+ handler.comment(comment, 0, comment.length);
+ }
AttributesImpl attributes = new AttributesImpl();
handler.startElement(null, "plist", "plist", attributes);
serializeMap(propertyList, handler);
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/apple/XcodeProjectWriter.java b/src/main/java/net/sf/antcontrib/cpptasks/apple/XcodeProjectWriter.java
index 1d77c29..fbab766 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/apple/XcodeProjectWriter.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/apple/XcodeProjectWriter.java
@@ -88,6 +88,12 @@ public final class XcodeProjectWriter
"Unable to find compilation target using GNU C++ compiler");
}
+
+ CommandLineLinkerConfiguration linkerConfig = null;
+ if (linkTarget.getConfiguration() instanceof CommandLineLinkerConfiguration) {
+ linkerConfig = (CommandLineLinkerConfiguration) linkTarget.getConfiguration();
+ }
+
String projectName = projectDef.getName();
if (projectName == null) {
projectName = fileName.getName();
@@ -118,6 +124,9 @@ public final class XcodeProjectWriter
createPBXGroup("Source", sourceTree, sourceGroupChildren);
objects.put(sourceGroup.getID(), sourceGroup.getProperties());
+
+
+
//
// add product to property list
//
@@ -141,6 +150,13 @@ public final class XcodeProjectWriter
groups.add(documentationGroup);
groups.add(productsGroup);
PBXObjectRef mainGroup = createPBXGroup(projectName, sourceTree, groups);
+ StringBuffer comments = new StringBuffer();
+ for(Iterator iter = projectDef.getComments().iterator(); iter.hasNext();) {
+ comments.append(iter.next());
+ }
+ if (comments.length() > 0) {
+ mainGroup.getProperties().put("comments", comments.toString());
+ }
objects.put(mainGroup.getID(), mainGroup.getProperties());
//
@@ -150,8 +166,7 @@ public final class XcodeProjectWriter
addProjectConfigurationList(objects,
basePath,
compilerConfig,
- (CommandLineLinkerConfiguration)
- linkTarget.getConfiguration());
+ linkerConfig);
String projectDirPath = "";
List projectTargets = new ArrayList();
@@ -173,7 +188,8 @@ public final class XcodeProjectWriter
// Calculate path (typically several ../..) of the root directory
// (where build.xml lives) relative to the XCode project directory.
// XCode 3.0 will now prompt user to supply the value if not specified.
- String projectRoot = CUtil.getRelativePath(basePath, projectDef.getProject().getBaseDir());
+ String projectRoot = CUtil.toUnixPath(
+ CUtil.getRelativePath(basePath, projectDef.getProject().getBaseDir()));
PBXObjectRef project = createPBXProject(compilerConfigurations, mainGroup,
projectDirPath, projectRoot, projectTargets);
objects.put(project.getID(), project.getProperties());
@@ -190,7 +206,8 @@ public final class XcodeProjectWriter
// write property list out to XML file
//
try {
- PropertyListSerialization.serialize(propertyList, xcodeProj);
+ PropertyListSerialization.serialize(propertyList,
+ projectDef.getComments(), xcodeProj);
} catch (TransformerConfigurationException ex) {
throw new IOException(ex.toString());
} catch (SAXException ex) {
@@ -296,6 +313,7 @@ public final class XcodeProjectWriter
*/
private PBXObjectRef addNativeTargetConfigurationList(final Map objects,
final String projectName) {
+
//
// Create a configuration list with
// two stock configurations: Debug and Release
@@ -334,12 +352,13 @@ public final class XcodeProjectWriter
return configurationList;
}
+
+
/**
* Add project configuration list.
* @param objects map of objects.
* @param baseDir base directory.
* @param compilerConfig compiler configuration.
- * @param linkerConfig linker configuration.
* @return project configuration object.
*/
private PBXObjectRef addProjectConfigurationList(final Map objects,
@@ -356,6 +375,8 @@ public final class XcodeProjectWriter
debugSettings.put("GCC_WARN_UNUSED_VARIABLE", "YES");
debugSettings.put("PREBINDING", "NO");
debugSettings.put("SDKROOT", "/Developer/SDKs/MacOSX10.4u.sdk");
+
+
PBXObjectRef debugConfig = createXCBuildConfiguration("Debug", debugSettings);
objects.put(debugConfig.getID(), debugConfig.getProperties());
configurations.add(debugConfig);
@@ -381,12 +402,20 @@ public final class XcodeProjectWriter
File[] includeDirs = compilerConfig.getIncludePath();
if (includeDirs.length > 0) {
ArrayList includePaths = new ArrayList();
+ Map includePathMap = new HashMap();
for (int i = 0; i < includeDirs.length; i++) {
- String relPath = CUtil.getRelativePath(baseDir, includeDirs[i]);
- if (relPath.startsWith("..")) {
- includePaths.add(includeDirs[i].getPath());
- } else {
- includePaths.add(relPath);
+ if(!CUtil.isSystemPath(includeDirs[i])) {
+ String absPath = includeDirs[i].getAbsolutePath();
+ if (!includePathMap.containsKey(absPath)) {
+ if(absPath.startsWith("/usr/")) {
+ includePaths.add(CUtil.toUnixPath(absPath));
+ } else {
+ String relPath = CUtil.toUnixPath(
+ CUtil.getRelativePath(baseDir, includeDirs[i]));
+ includePaths.add(relPath);
+ }
+ includePathMap.put(absPath, absPath);
+ }
}
}
includePaths.add("${inherited)");
@@ -411,26 +440,33 @@ public final class XcodeProjectWriter
releaseSettings.put("GCC_PREPROCESSOR_DEFINITIONS", defines);
}
- String[] linkerArgs = linkerConfig.getPreArguments();
- List librarySearchPaths = new ArrayList();
- List libNames = new ArrayList();
- for (int i = 0; i < linkerArgs.length; i++) {
- if (linkerArgs[i].startsWith("-L")) {
- librarySearchPaths.add(linkerArgs[i].substring(2));
- } else if (linkerArgs[i].startsWith("-l")) {
- libNames.add(linkerArgs[i]);
+
+ if (linkerConfig != null) {
+ Map librarySearchMap = new HashMap();
+ List librarySearchPaths = new ArrayList();
+ List otherLdFlags = new ArrayList();
+ String[] linkerArgs = linkerConfig.getEndArguments();
+ for (int i = 0; i < linkerArgs.length; i++) {
+ if (linkerArgs[i].startsWith("-L")) {
+ String libName = linkerArgs[i].substring(2);
+ if (!librarySearchMap.containsKey(libName)) {
+ if (!libName.equals("/usr/lib")) {
+ librarySearchPaths.add(libName);
+ }
+ librarySearchMap.put(libName, libName);
+
+ }
+ } else if (linkerArgs[i].startsWith("-l")) {
+ otherLdFlags.add(linkerArgs[i]);
+ }
}
- }
- if (librarySearchPaths.size() > 0) {
- librarySearchPaths.add("\"$(inherited)\"");
+
+
debugSettings.put("LIBRARY_SEARCH_PATHS", librarySearchPaths);
+ debugSettings.put("OTHER_LDFLAGS", otherLdFlags);
releaseSettings.put("LIBRARY_SEARCH_PATHS", librarySearchPaths);
- }
- if (libNames.size() > 0) {
- libNames.add("$(inherited)");
- debugSettings.put("OTHER_LDFLAGS", libNames);
- releaseSettings.put("OTHER_LDFLAGS", libNames);
- }
+ releaseSettings.put("OTHER_LDFLAGS", otherLdFlags);
+ }
return configurationList;
}
@@ -473,9 +509,11 @@ public final class XcodeProjectWriter
buildPhases.add(sourcesBuildPhase);
+ List frameworkBuildFiles = new ArrayList();
+ buildActionMask = 8;
PBXObjectRef frameworksBuildPhase =
createPBXFrameworksBuildPhase(buildActionMask,
- new ArrayList(), false);
+ frameworkBuildFiles, false);
objects.put(frameworksBuildPhase.getID(), frameworksBuildPhase.getProperties());
buildPhases.add(frameworksBuildPhase);
@@ -539,8 +577,9 @@ public final class XcodeProjectWriter
Map map = new HashMap();
map.put("isa", "PBXFileReference");
- String relPath = CUtil.getRelativePath(baseDir, file);
+ String relPath = CUtil.toUnixPath(CUtil.getRelativePath(baseDir, file));
map.put("path", relPath);
+ map.put("name", file.getName());
map.put("sourceTree", sourceTree);
return new PBXObjectRef(map);
}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioProjectWriter.java b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioProjectWriter.java
index d70ad23..475005d 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioProjectWriter.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioProjectWriter.java
@@ -25,9 +25,8 @@ import net.sf.antcontrib.cpptasks.compiler.ProcessorConfiguration;
import net.sf.antcontrib.cpptasks.ide.DependencyDef;
import net.sf.antcontrib.cpptasks.ide.ProjectDef;
import net.sf.antcontrib.cpptasks.ide.ProjectWriter;
-import net.sf.antcontrib.cpptasks.ide.CommentDef;
+import net.sf.antcontrib.cpptasks.ide.CommentDef;
import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.util.StringUtils;
import java.io.BufferedWriter;
import java.io.File;
@@ -40,7 +39,6 @@ import java.util.Comparator;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
-import java.util.Vector;
/**
* Writes a Microsoft Visual Studio 97 or Visual Studio 6 project file.
@@ -141,9 +139,9 @@ public final class DevStudioProjectWriter
writer.write(this.version);
writer.write("\r\n");
writer.write("# ** DO NOT EDIT **\r\n\r\n");
-
- writeComments(writer, projectDef.getComments());
-
+
+ writeComments(writer, projectDef.getComments());
+
String outputType = task.getOuttype();
String subsystem = task.getSubsystem();
String configName = projectName;
@@ -333,9 +331,9 @@ public final class DevStudioProjectWriter
writer.write("\r\n");
writer.write("# WARNING: DO NOT EDIT OR DELETE");
writer.write(" THIS WORKSPACE FILE!\r\n\r\n");
-
- writeComments(writer, project.getComments());
-
+
+ writeComments(writer, project.getComments());
+
List dependencies = project.getDependencies();
List projectDeps = new ArrayList();
@@ -557,18 +555,6 @@ public final class DevStudioProjectWriter
- /**
- * Determines if source file has a system path,
- * that is part of the compiler or platform.
- * @param source source, may not be null.
- * @return true is source file appears to be system library
- * and its path should be discarded.
- */
- private static boolean isSystemPath(final File source) {
- String lcPath = source.toString().toLowerCase(java.util.Locale.US);
- return lcPath.indexOf("platformsdk") != -1
- || lcPath.indexOf("microsoft") != -1;
- }
/**
* Writes link options.
@@ -605,7 +591,7 @@ public final class DevStudioProjectWriter
// otherwise construct a relative path.
//
String relPath = linkSources[i].getName();
- if (!isSystemPath(linkSources[i])) {
+ if (!CUtil.isSystemPath(linkSources[i])) {
relPath = CUtil.getRelativePath(basePath, linkSources[i]);
}
//
@@ -640,21 +626,21 @@ public final class DevStudioProjectWriter
options.append("\r\n");
writer.write(baseOptions.toString());
writer.write(options.toString());
- }
-
- private static void writeComments(final Writer writer,
- final List comments) throws IOException {
- for(Iterator iter = comments.iterator();iter.hasNext();) {
- String comment = ((CommentDef) iter.next()).getText();
- if (comment != null) {
- int start = 0;
- for(int end = comment.indexOf('\n');
- end != -1;
- end = comment.indexOf('\n', start)) {
- writer.write("#" + comment.substring(start, end) + "\r\n");
- start = end + 1;
- }
- }
- }
+ }
+
+ private static void writeComments(final Writer writer,
+ final List comments) throws IOException {
+ for(Iterator iter = comments.iterator();iter.hasNext();) {
+ String comment = ((CommentDef) iter.next()).getText();
+ if (comment != null) {
+ int start = 0;
+ for(int end = comment.indexOf('\n');
+ end != -1;
+ end = comment.indexOf('\n', start)) {
+ writer.write("#" + comment.substring(start, end) + "\r\n");
+ start = end + 1;
+ }
+ }
+ }
}
}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/VisualStudioNETProjectWriter.java b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/VisualStudioNETProjectWriter.java
index 3115640..0afeebc 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/VisualStudioNETProjectWriter.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/VisualStudioNETProjectWriter.java
@@ -26,8 +26,8 @@ import net.sf.antcontrib.cpptasks.ide.ProjectDef;
import net.sf.antcontrib.cpptasks.ide.CommentDef;
import net.sf.antcontrib.cpptasks.ide.ProjectWriter;
import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.util.StringUtils;
import org.apache.xml.serialize.OutputFormat;
-import org.apache.xml.serialize.Serializer;
import org.apache.xml.serialize.XMLSerializer;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
@@ -90,18 +90,6 @@ public final class VisualStudioNETProjectWriter
this.falseLiteral = falseArg;
}
- /**
- * Determines if source file has a system path,
- * that is part of the compiler or platform.
- * @param source source, may not be null.
- * @return true is source file appears to be system library
- * and its path should be discarded.
- */
- private static boolean isSystemPath(final File source) {
- String lcPath = source.toString().toLowerCase(java.util.Locale.US);
- return lcPath.indexOf("platformsdk") != -1
- || lcPath.indexOf("microsoft") != -1;
- }
/**
* Get configuration name.
@@ -132,6 +120,7 @@ public final class VisualStudioNETProjectWriter
return targtype;
}
+
/**
* Get output directory.
* @param basePath path to parent of project file.
@@ -238,19 +227,17 @@ public final class VisualStudioNETProjectWriter
* @return value of AdditionalIncludeDirectories property.
*/
private String getAdditionalIncludeDirectories(
- final String basePath,
+ final String baseDir,
final CommandLineCompilerConfiguration compilerConfig) {
+ File[] includePath = compilerConfig.getIncludePath();
StringBuffer includeDirs = new StringBuffer();
- String[] args = compilerConfig.getPreArguments();
- for (int i = 0; i < args.length; i++) {
- if (args[i].startsWith("/I")) {
- includeDirs.append(CUtil.toWindowsPath(
- CUtil.getRelativePath(basePath,
- new File(args[i].substring(2)))));
- includeDirs.append(';');
- }
+ for (int i = 0; i < includePath.length; i++) {
+ String relPath = CUtil.getRelativePath(baseDir, includePath[i]);
+ includeDirs.append(CUtil.toWindowsPath(relPath));
+ includeDirs.append(';');
}
+
if (includeDirs.length() > 0) {
includeDirs.setLength(includeDirs.length() - 1);
}
@@ -583,7 +570,7 @@ public final class VisualStudioNETProjectWriter
// otherwise construct a relative path.
//
String relPath = linkSources[i].getName();
- if (!isSystemPath(linkSources[i])) {
+ if (!CUtil.isSystemPath(linkSources[i])) {
relPath = CUtil.getRelativePath(basePath, linkSources[i]);
}
//
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/ide/CommentDef.java b/src/main/java/net/sf/antcontrib/cpptasks/ide/CommentDef.java
index c87261a..2221aba 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/ide/CommentDef.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/ide/CommentDef.java
@@ -34,10 +34,14 @@ public final class CommentDef {
}
- public String getText() {
+ public String getText() {
return text;
- }
- public void addText(final String newText) {
- text += newText;
+ }
+ public void addText(final String newText) {
+ text += newText;
}
+
+ public String toString() {
+ return text;
+ }
}
diff --git a/src/test/java/net/sf/antcontrib/cpptasks/TestTargetHistoryTable.java b/src/test/java/net/sf/antcontrib/cpptasks/TestTargetHistoryTable.java
index 3aed27e..b105eb6 100644
--- a/src/test/java/net/sf/antcontrib/cpptasks/TestTargetHistoryTable.java
+++ b/src/test/java/net/sf/antcontrib/cpptasks/TestTargetHistoryTable.java
@@ -27,7 +27,7 @@ import net.sf.antcontrib.cpptasks.VersionInfo;
* @author CurtA
*/
public class TestTargetHistoryTable extends TestXMLConsumer {
- private static class MockProcessorConfiguration
+ public static class MockProcessorConfiguration
implements
ProcessorConfiguration {
public MockProcessorConfiguration() {