SF.net SVN: ant-contrib: [145] cpptasks/trunk/src
[email protected] Fri, 21 Sep 2007 10:57:00 -0700
| Newsgroups | gmane.comp.java.ant-contrib.devel |
|---|---|
| Message-ID | <[email protected]> |
Revision: 145
http://ant-contrib.svn.sourceforge.net/ant-contrib/?rev=145&view=rev
Author: darius42
Date: 2007-09-21 10:57:00 -0700 (Fri, 21 Sep 2007)
Log Message:
-----------
Fix for bug 1794867 - LinkerDef wasn't correctly handling references.
Refactored code so that it relies on the correct behavior in ProcessorDef.
Modified Paths:
--------------
cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/LinkerDef.java
cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/ProcessorDef.java
cpptasks/trunk/src/test/java/net/sf/antcontrib/cpptasks/TestLinkerDef.java
Modified: cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/LinkerDef.java
===================================================================
--- cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/LinkerDef.java 2007-09-11 08:52:26 UTC (rev 144)
+++ cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/LinkerDef.java 2007-09-21 17:57:00 UTC (rev 145)
@@ -115,30 +115,6 @@
sysLibrarySets.addElement(libset);
}
-
- public ProcessorConfiguration createConfiguration(CCTask task,
- LinkType linkType, ProcessorDef baseDef,
- TargetDef targetPlatform,
- VersionInfo versionInfo) {
- //
- // must combine some local context (the linkType)
- // with the referenced element
- //
- // get a pointer to the definition (either local or referenced)
- ProcessorDef thisDef = this;
- if (isReference()) {
- thisDef = ((ProcessorDef) getCheckedRef(ProcessorDef.class,
- "ProcessorDef"));
- }
- //
- // find the appropriate processor (combines local linkType
- // with possibly remote linker name)
- Processor proc = getProcessor();
- proc = proc.getLinker(linkType);
- ProcessorDef[] defaultProviders = getDefaultProviders(baseDef);
- return proc.createConfiguration(task, linkType, defaultProviders,
- thisDef, targetPlatform, versionInfo);
- }
public void execute() throws org.apache.tools.ant.BuildException {
throw new org.apache.tools.ant.BuildException(
"Not an actual task, but looks like one for documentation purposes");
@@ -281,6 +257,12 @@
}
return linker;
}
+
+ public Processor getProcessor(LinkType linkType) {
+ Processor proc = getProcessor();
+ return proc.getLinker(linkType);
+ }
+
public int getStack(LinkerDef[] defaultProviders, int index) {
if (isReference()) {
return ((LinkerDef) getCheckedRef(LinkerDef.class, "LinkerDef"))
Modified: cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/ProcessorDef.java
===================================================================
--- cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/ProcessorDef.java 2007-09-11 08:52:26 UTC (rev 144)
+++ cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/ProcessorDef.java 2007-09-21 17:57:00 UTC (rev 145)
@@ -188,7 +188,7 @@
baseDef, targetPlatform, versionInfo);
}
ProcessorDef[] defaultProviders = getDefaultProviders(baseDef);
- Processor proc = getProcessor();
+ Processor proc = getProcessor(linkType);
return proc.createConfiguration(task, linkType, defaultProviders, this, targetPlatform, versionInfo);
}
/**
@@ -358,7 +358,18 @@
}
return processor;
}
+
/**
+ * Obtains the appropriate processor (compiler, linker) based on the
+ * LinkType.
+ *
+ * @return processor
+ */
+ protected Processor getProcessor(LinkType linkType) {
+ // by default ignore the linkType.
+ return getProcessor();
+ }
+ /**
* Gets a boolean value indicating whether all targets must be rebuilt
* regardless of dependency analysis.
*
Modified: cpptasks/trunk/src/test/java/net/sf/antcontrib/cpptasks/TestLinkerDef.java
===================================================================
--- cpptasks/trunk/src/test/java/net/sf/antcontrib/cpptasks/TestLinkerDef.java 2007-09-11 08:52:26 UTC (rev 144)
+++ cpptasks/trunk/src/test/java/net/sf/antcontrib/cpptasks/TestLinkerDef.java 2007-09-21 17:57:00 UTC (rev 145)
@@ -26,8 +26,10 @@
import net.sf.antcontrib.cpptasks.types.LibrarySet;
import net.sf.antcontrib.cpptasks.types.LinkerArgument;
import net.sf.antcontrib.cpptasks.types.SystemLibrarySet;
+import org.apache.tools.ant.Project;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.types.FlexInteger;
+import org.apache.tools.ant.types.Reference;
/**
* Tests for LinkerDef class.
@@ -152,6 +154,35 @@
}
/**
+ * Verify linkerarg's that appear in the base linker are effective when
+ * creating the command line for a linker that extends it, even if the
+ * linker is brought in through a reference.
+ */
+ public void testExtendsLinkerArgsViaReference() {
+ Project project = new Project();
+ LinkerDef baseLinker = new LinkerDef();
+ baseLinker.setProject(project);
+ baseLinker.setId("base");
+ project.addReference("base", baseLinker);
+ LinkerArgument linkerArg = new LinkerArgument();
+ linkerArg.setValue("/base");
+ baseLinker.addConfiguredLinkerArg(linkerArg);
+
+ LinkerDef extendedLinker = (LinkerDef) createExtendedProcessorDef(
+ baseLinker);
+ extendedLinker.setProject(project);
+ extendedLinker.setId("extended");
+ project.addReference("extended", extendedLinker);
+
+ LinkerDef linkerRef = new LinkerDef();
+ linkerRef.setProject(project);
+ linkerRef.setRefid(new Reference(project, "extended"));
+ String[] preArgs = getPreArguments(linkerRef);
+ assertEquals(1, preArgs.length);
+ assertEquals("/base", preArgs[0]);
+ }
+
+ /**
* Tests that fileset's that appear in the base linker are effective when
* creating the command line for a linker that extends it.
* @throws IOException if unable to create or delete temporary file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/