summaryrefslogtreecommitdiffstats
path: root/src/net/sf/antcontrib/cpptasks/ide
diff options
context:
space:
mode:
authormattinger <[email protected]>2006-11-07 21:16:39 +0000
committermattinger <[email protected]>2006-11-07 21:16:39 +0000
commitc8da7ec534c959db815f272819dafaf61e49a9bd (patch)
tree16dfe231dadf33c0829ca23efe8a0021502d99eb /src/net/sf/antcontrib/cpptasks/ide
parent93d3419f7217a29d266acf2884c6327f1953cb3f (diff)
Initial import of cpptasks code
git-svn-id: file:///home/sven/projects/JOGL/temp/ant-contrib/svn/ant-contrib-code/trunk/cpptasks@62 32d7a393-a5a9-423c-abd3-5d954feb1f2f
Diffstat (limited to 'src/net/sf/antcontrib/cpptasks/ide')
-rw-r--r--src/net/sf/antcontrib/cpptasks/ide/DebugDef.java127
-rw-r--r--src/net/sf/antcontrib/cpptasks/ide/ProjectDef.java330
-rw-r--r--src/net/sf/antcontrib/cpptasks/ide/ProjectWriter.java53
-rw-r--r--src/net/sf/antcontrib/cpptasks/ide/ProjectWriterEnum.java100
-rw-r--r--src/net/sf/antcontrib/cpptasks/ide/package.html27
5 files changed, 637 insertions, 0 deletions
diff --git a/src/net/sf/antcontrib/cpptasks/ide/DebugDef.java b/src/net/sf/antcontrib/cpptasks/ide/DebugDef.java
new file mode 100644
index 0000000..8ddd04e
--- /dev/null
+++ b/src/net/sf/antcontrib/cpptasks/ide/DebugDef.java
@@ -0,0 +1,127 @@
+/*
+*
+* Copyright 2004-2005 The Ant-Contrib project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package net.sf.antcontrib.cpptasks.ide;
+
+import java.io.File;
+
+import org.apache.tools.ant.types.Commandline;
+import org.apache.tools.ant.types.Environment;
+import org.apache.tools.ant.types.DataType;
+
+
+/**
+* Specifies a debugging configuration for a project.
+*
+* @author Curt Arnold
+*/
+public final class DebugDef
+ extends DataType {
+
+ /**
+ * Working directory for debug runs.
+ */
+ private File dir;
+ /**
+ * Name of executable.
+ */
+ private String executable;
+ /**
+ * Environment used to hold environment variables.
+ */
+ private Environment env = new Environment();
+ /**
+ * Command line used to hold command line arguments.
+ */
+ private Commandline cmdl = new Commandline();
+
+ /**
+ * Constructor.
+ *
+ */
+ public DebugDef() {
+ }
+
+
+ /**
+ * Set the name of the executable program.
+ * @param value the name of the executable program
+ */
+ public void setExecutable(final String value) {
+ this.executable = value;
+ }
+
+ /**
+ * Get the name of the executable program.
+ * @return the name of the executable program, may be null.
+ */
+ public String getExecutable() {
+ return executable;
+ }
+
+ /**
+ * Set the working directory of the process.
+ * @param d the working directory of the process
+ */
+ public void setDir(final File d) {
+ this.dir = d;
+ }
+
+ /**
+ * Get the working directory of the process.
+ * @return the working directory of the process, may be null.
+ */
+ public File getDir() {
+ return dir;
+ }
+
+ /**
+ * Add an environment variable.
+ *
+ * @param var new environment variable
+ */
+ public void addEnv(final Environment.Variable var) {
+ env.addVariable(var);
+ }
+
+ /**
+ * Get the variable list as an array.
+ * @return array of key=value assignment strings
+ */
+ public String[] getVariables() {
+ return env.getVariables();
+ }
+
+
+ /**
+ * Adds a command-line argument.
+ *
+ * @return new command line argument created
+ */
+ public Commandline.Argument createArg() {
+ return cmdl.createArgument();
+ }
+
+ /**
+ * Returns all arguments defined by <code>addLine</code>,
+ * <code>addValue</code> or the argument object.
+ * @return array of command line arguments, may be zero-length.
+ */
+ public String[] getArguments() {
+ return cmdl.getArguments();
+ }
+
+}
diff --git a/src/net/sf/antcontrib/cpptasks/ide/ProjectDef.java b/src/net/sf/antcontrib/cpptasks/ide/ProjectDef.java
new file mode 100644
index 0000000..df0177c
--- /dev/null
+++ b/src/net/sf/antcontrib/cpptasks/ide/ProjectDef.java
@@ -0,0 +1,330 @@
+/*
+ *
+ * Copyright 2004-2006 The Ant-Contrib project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package net.sf.antcontrib.cpptasks.ide;
+
+import net.sf.antcontrib.cpptasks.CCTask;
+import net.sf.antcontrib.cpptasks.CUtil;
+import net.sf.antcontrib.cpptasks.TargetInfo;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.DataType;
+
+import java.io.File;
+import java.lang.reflect.Method;
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Requests the creation of an IDE project file. Experimental.
+ *
+ * Implementation status: msdev5, msdev6 and cbuilderx
+ * generate reasonable project files for simple projects,
+ * xcode and msdev7 and msdev71 capture source file lists and
+ * a few settings.
+ *
+ * @author Curt Arnold
+ */
+public final class ProjectDef
+ extends DataType {
+ /**
+ * Name of property that must be present or definition will be ignored. May
+ * be null.
+ */
+ private String ifProp;
+
+ /**
+ * Name of property that must be absent or definition will be ignored. May
+ * be null.
+ */
+ private String unlessProp;
+
+ /**
+ * Project file name.
+ */
+ private File outFile;
+
+ /**
+ * Project name.
+ */
+ private String name;
+
+ /**
+ * Fail on error.
+ */
+ private boolean failOnError = true;
+
+ /**
+ * Overwrite existing project file.
+ */
+ private boolean overwrite = true;
+
+ /**
+ * Project writer.
+ */
+ private ProjectWriter projectWriter;
+
+ /**
+ * Object directory.
+ *
+ */
+ private File objDir;
+
+ /**
+ * Constructor.
+ *
+ */
+ public ProjectDef() {
+ }
+
+ /**
+ * Set project type.
+ *
+ *
+ * <table width="100%" border="1"> <thead>Supported project formats </thead>
+ * <tr>
+ * <td>cbuilderx</td>
+ * <td>Borland C++BuilderX</td>
+ * </tr>
+ * <tr>
+ * <td>msvc5</td>
+ * <td>Microsoft Visual C++ 97</td>
+ * </tr>
+ * <tr>
+ * <td>msvc6</td>
+ * <td>Microsoft Visual C++ 6</td>
+ * </tr>
+ * <tr>
+ * <td>msvc7</td>
+ * <td>Microsoft Visual C++.NET</td>
+ * </tr>
+ * <tr>
+ * <td>msvc71</td>
+ * <td>Microsoft Visual C++.NET 2003</td>
+ * </tr>
+ * <tr>
+ * <td>msvc8</td>
+ * <td>Microsoft Visual C++ 2005</td>
+ * </tr>
+ * <tr>
+ * <td>xcode</td>
+ * <td>Apple Xcode</td>
+ * </tr>
+ * </table>
+ *
+ * @param value new value
+ */
+ public void setType(final ProjectWriterEnum value) {
+ projectWriter = value.getProjectWriter();
+ }
+
+ /**
+ * Sets the name for the generated project file.
+ *
+ * @param outfile
+ * output file name
+ */
+ public void setOutfile(final File outfile) {
+ //
+ // if file name was empty, skip link step
+ //
+ if (outfile == null || outfile.toString().length() > 0) {
+ outFile = outfile;
+ }
+ }
+
+ /**
+ * Sets whether a failure to write the project file should cause the
+ * task to fail. Default is true.
+ *
+ * @param value new value
+ */
+ public void setFailonerror(final boolean value) {
+ failOnError = value;
+ }
+
+ /**
+ * Sets whether an existing project file should be overwritten,
+ * default is true. If false and the project file exists,
+ * the value of failonerror will determine if the task fails.
+ *
+ * @param value new value
+ */
+ public void setOverwrite(final boolean value) {
+ overwrite = value;
+ }
+
+ /**
+ * Gets whether an existing project file should be overwritten,
+ * default is true. If false and the project file exists,
+ * the value of failonerror will determine if the task fails.
+ *
+ * @return value
+ */
+ public boolean getOverwrite() {
+ return overwrite;
+ }
+
+ /**
+ * Determine if this def should be used.
+ *
+ * Definition will be active if the "if" variable (if specified) is set and
+ * the "unless" variable (if specified) is not set and that all reference
+ * or extended definitions are active
+ *
+ * @return true if processor is active
+ */
+ public boolean isActive() {
+ Project project = getProject();
+ if (!CUtil.isActive(project, ifProp, unlessProp)) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Class name for a user-supplied project writer. Use the "type"
+ * attribute to specify built-in project writer implementations.
+ *
+ * @param className
+ * full class name
+ *
+ */
+ public void setClassname(final String className) {
+ Object proc = null;
+ try {
+ Class implClass = ProjectDef.class.getClassLoader().loadClass(
+ className);
+ try {
+ Method getInstance = implClass.getMethod("getInstance",
+ new Class[0]);
+ proc = getInstance.invoke(null, new Object[0]);
+ } catch (Exception ex) {
+ proc = implClass.newInstance();
+ }
+ } catch (Exception ex) {
+ throw new BuildException(ex);
+ }
+ projectWriter = (ProjectWriter) proc;
+ }
+
+ /**
+ * Sets the property name for the 'if' condition.
+ *
+ * The configuration will be ignored unless the property is defined.
+ *
+ * The value of the property is insignificant, but values that would imply
+ * misinterpretation ("false", "no") will throw an exception when
+ * evaluated.
+ *
+ * @param propName
+ * name of property
+ */
+ public void setIf(final String propName) {
+ ifProp = propName;
+ }
+
+ /**
+ * Set the property name for the 'unless' condition.
+ *
+ * If named property is set, the configuration will be ignored.
+ *
+ * The value of the property is insignificant, but values that would imply
+ * misinterpretation ("false", "no") of the behavior will throw an
+ * exception when evaluated.
+ *
+ * @param propName
+ * name of property
+ */
+ public void setUnless(final String propName) {
+ unlessProp = propName;
+ }
+
+ /**
+ * Get name.
+ * @return String name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Set name.
+ * @param value String name
+ */
+ public void setName(final String value) {
+ name = value;
+ }
+
+ /**
+ * Executes the task. Compiles the given files.
+ *
+ * @param task cc task
+ * @param sources source files (includes headers)
+ * @param targets compilation targets
+ * @param linkTarget link target
+ */
+ public void execute(final CCTask task,
+ final List sources,
+ final Hashtable targets,
+ final TargetInfo linkTarget) {
+ try {
+ projectWriter.writeProject(outFile,
+ task,
+ this,
+ sources,
+ targets,
+ linkTarget);
+ } catch (BuildException ex) {
+ if (failOnError) {
+ throw ex;
+ } else {
+ task.log(ex.toString());
+ }
+ } catch (Exception ex) {
+ if (failOnError) {
+ throw new BuildException(ex);
+ } else {
+ task.log(ex.toString());
+ }
+ }
+ }
+
+ /**
+ * Gets the object files directory.
+ * @return directory, may be null.
+ */
+ public File getObjdir() {
+ return objDir;
+ }
+ /**
+ * Sets the directory used for object files. If not specified,
+ * the object files directory from cc task will be used.
+ * @param oDir object file directory.
+ */
+ public void getObjdir(final File oDir) {
+ this.objDir = oDir;
+ }
+
+ /**
+ * Required by documentation generator.
+ */
+ public void execute() {
+ throw new org.apache.tools.ant.BuildException(
+ "Not an actual task, but looks like one for documentation purposes");
+ }
+
+}
diff --git a/src/net/sf/antcontrib/cpptasks/ide/ProjectWriter.java b/src/net/sf/antcontrib/cpptasks/ide/ProjectWriter.java
new file mode 100644
index 0000000..c4c144d
--- /dev/null
+++ b/src/net/sf/antcontrib/cpptasks/ide/ProjectWriter.java
@@ -0,0 +1,53 @@
+/*
+ *
+ * Copyright 2002-2004 The Ant-Contrib project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package net.sf.antcontrib.cpptasks.ide;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Hashtable;
+import java.util.List;
+
+import net.sf.antcontrib.cpptasks.CCTask;
+import net.sf.antcontrib.cpptasks.TargetInfo;
+import org.xml.sax.SAXException;
+
+/**
+ * Project writer interface.
+ *
+ * @author curta
+ *
+ */
+public interface ProjectWriter {
+ /**
+ * Write project definition file.
+ * @param baseName File name base, writer may append appropriate extension
+ * @param task task
+ * @param projectDef project element
+ * @param files source and header files
+ * @param targets compilation targets
+ * @param linkTarget link target
+ * @throws IOException if I/O error is encountered
+ * @throws SAXException if I/O error during XML serialization
+ */
+ void writeProject(final File baseName,
+ final CCTask task,
+ final ProjectDef projectDef,
+ final List files,
+ final Hashtable targets,
+ final TargetInfo linkTarget)
+ throws IOException, SAXException;
+}
diff --git a/src/net/sf/antcontrib/cpptasks/ide/ProjectWriterEnum.java b/src/net/sf/antcontrib/cpptasks/ide/ProjectWriterEnum.java
new file mode 100644
index 0000000..e100dbc
--- /dev/null
+++ b/src/net/sf/antcontrib/cpptasks/ide/ProjectWriterEnum.java
@@ -0,0 +1,100 @@
+/*
+ *
+ * Copyright 2004-2006 The Ant-Contrib project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package net.sf.antcontrib.cpptasks.ide;
+
+import net.sf.antcontrib.cpptasks.apple.XcodeProjectWriter;
+import net.sf.antcontrib.cpptasks.borland.CBuilderXProjectWriter;
+import net.sf.antcontrib.cpptasks.devstudio.DevStudioProjectWriter;
+import net.sf.antcontrib.cpptasks.devstudio.VisualStudioNETProjectWriter;
+import org.apache.tools.ant.types.EnumeratedAttribute;
+
+/**
+ * Enumeration of supported project file generators.
+ *
+ * <table width="100%" border="1"> <thead>Supported project generators </thead>
+ * <tr>
+ * <td>cbuilderx</td>
+ * <td>Borland C++BuilderX</td>
+ * </tr>
+ * <tr>
+ * <td>msvc5</td>
+ * <td>Microsoft Visual C++ 97</td>
+ * </tr>
+ * <tr>
+ * <td>msvc6</td>
+ * <td>Microsoft Visual C++ 6</td>
+ * </tr>
+ * <tr>
+ * <td>msvc7</td>
+ * <td>Microsoft Visual C++.NET</td>
+ * </tr>
+ * <tr>
+ * <td>msvc71</td>
+ * <td>Microsoft Visual C++.NET 2003</td>
+ * </tr>
+ * <tr>
+ * <td>msvc8</td>
+ * <td>Microsoft Visual C++ 2005</td>
+ * </tr>
+ * <tr>
+ * <td>xcode</td>
+ * <td>Apple Xcode</td>
+ * </tr>
+ * </table>
+ *
+ * @author Curt Arnold
+ *
+ */
+public final class ProjectWriterEnum
+ extends EnumeratedAttribute {
+ /**
+ * Enumeration values.
+ */
+ private static String[] values = new String[] {
+ "cbuilderx", "msvc5",
+ "msvc6", "msvc7", "msvc71", "msvc8", "xcode"};
+
+ /**
+ * Project writers associated with enumeration values.
+ */
+ private static ProjectWriter[] writers = new ProjectWriter[] {
+ new CBuilderXProjectWriter(), new DevStudioProjectWriter("5.00"),
+ new DevStudioProjectWriter("6.00"),
+ new VisualStudioNETProjectWriter("7.00", "TRUE", "FALSE"),
+ new VisualStudioNETProjectWriter("7.10", "TRUE", "FALSE"),
+ new VisualStudioNETProjectWriter("8.00", "true", "false"),
+ new XcodeProjectWriter()};
+
+ /**
+ * Gets ProjectWriter associated with enumeration value.
+ *
+ * @return project writer
+ */
+ public ProjectWriter getProjectWriter() {
+ return writers[this.getIndex()];
+ }
+
+ /**
+ * Gets acceptible values for enumeration.
+ *
+ * @return acceptible values
+ */
+ public String[] getValues() {
+ return (String[]) values.clone();
+ }
+}
+
diff --git a/src/net/sf/antcontrib/cpptasks/ide/package.html b/src/net/sf/antcontrib/cpptasks/ide/package.html
new file mode 100644
index 0000000..ed0de56
--- /dev/null
+++ b/src/net/sf/antcontrib/cpptasks/ide/package.html
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+<!--
+
+Copyright 2004 The Ant-Contrib project
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ use this file except in compliance with the License. You may obtain a copy of
+ the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations under
+ the License.
+
+-->
+</head>
+<body bgcolor="white">
+
+IDE project file generation.
+</body>
+</html>
+