net.sf.antcontrib.cpptasks.compiler
Class CommandLineLinker

java.lang.Object
  |
  +--net.sf.antcontrib.cpptasks.compiler.AbstractProcessor
        |
        +--net.sf.antcontrib.cpptasks.compiler.AbstractLinker
              |
              +--net.sf.antcontrib.cpptasks.compiler.CommandLineLinker
Direct Known Subclasses:
AbstractArLibrarian, AbstractLdLinker, BorlandLibrarian, BorlandLinker, C89Linker, CompaqVisualFortranLibrarian, DevStudioCompatibleLibrarian, DevStudioCompatibleLinker, IccLinker, OS390Linker

public abstract class CommandLineLinker
extends AbstractLinker

An abstract Linker implementation that performs the link via an external command.

Author:
Adam Murdoch

Constructor Summary
CommandLineLinker(java.lang.String command, java.lang.String identifierArg, java.lang.String[] extensions, java.lang.String[] ignoredExtensions, java.lang.String outputSuffix, boolean isLibtool, CommandLineLinker libtoolLinker)
          Creates a comand line linker invocation
 
Method Summary
protected abstract  void addBase(long base, java.util.Vector args)
           
protected abstract  void addFixed(java.lang.Boolean fixed, java.util.Vector args)
           
protected abstract  void addImpliedArgs(boolean debug, LinkType linkType, java.util.Vector args)
           
protected abstract  void addIncremental(boolean incremental, java.util.Vector args)
           
protected  java.lang.String[] addLibrarySets(CCTask task, LibrarySet[] libsets, java.util.Vector preargs, java.util.Vector midargs, java.util.Vector endargs)
           
protected abstract  void addMap(boolean map, java.util.Vector args)
           
protected abstract  void addStack(int stack, java.util.Vector args)
           
protected  LinkerConfiguration createConfiguration(CCTask task, LinkType linkType, ProcessorDef[] baseDefs, LinkerDef specificDef)
           
protected  java.lang.String decorateLinkerOption(java.lang.StringBuffer buf, java.lang.String arg)
          Allows drived linker to decorate linker option.
protected  java.lang.String getCommand()
           
protected abstract  java.lang.String getCommandFileSwitch(java.lang.String commandFile)
           
 java.lang.String getIdentifier()
          Retrieve an identifier that identifies the specific version of the compiler.
 CommandLineLinker getLibtoolLinker()
           
protected abstract  int getMaximumCommandLength()
           
 java.lang.String getOutputFileName(java.lang.String baseName)
          Output file name (no path components) corresponding to source file
protected  java.lang.String[] getOutputFileSwitch(CCTask task, java.lang.String outputFile)
           
protected abstract  java.lang.String[] getOutputFileSwitch(java.lang.String outputFile)
           
protected  java.lang.String getStartupObject(LinkType linkType)
           
 void link(CCTask task, java.io.File outputFile, java.lang.String[] sourceFiles, CommandLineLinkerConfiguration config)
          Performs a link using a command line linker
protected  java.lang.String[] prepareArguments(CCTask task, java.lang.String outputDir, java.lang.String outputFile, java.lang.String[] sourceFiles, CommandLineLinkerConfiguration config)
          Prepares argument list for exec command.
protected  java.lang.String prepareFilename(java.lang.StringBuffer buf, java.lang.String outputDir, java.lang.String sourceFile)
          Processes filename into argument form
protected  java.lang.String[] prepareResponseFile(java.io.File outputFile, java.lang.String[] args)
          Prepares argument list to execute the linker using a response file.
protected  java.lang.String quoteFilename(java.lang.StringBuffer buf, java.lang.String filename)
           
protected  int runCommand(CCTask task, java.io.File workingDir, java.lang.String[] cmdline)
          This method is exposed so test classes can overload and test the arguments without actually spawning the compiler
 
Methods inherited from class net.sf.antcontrib.cpptasks.compiler.AbstractLinker
bid, createConfiguration, getLibraryKey
 
Methods inherited from class net.sf.antcontrib.cpptasks.compiler.AbstractProcessor
getIdentifier, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

CommandLineLinker

public CommandLineLinker(java.lang.String command,
                         java.lang.String identifierArg,
                         java.lang.String[] extensions,
                         java.lang.String[] ignoredExtensions,
                         java.lang.String outputSuffix,
                         boolean isLibtool,
                         CommandLineLinker libtoolLinker)
Creates a comand line linker invocation
Method Detail

getCommand

protected final java.lang.String getCommand()

addImpliedArgs

protected abstract void addImpliedArgs(boolean debug,
                                       LinkType linkType,
                                       java.util.Vector args)

addFixed

protected abstract void addFixed(java.lang.Boolean fixed,
                                 java.util.Vector args)

addMap

protected abstract void addMap(boolean map,
                               java.util.Vector args)

addIncremental

protected abstract void addIncremental(boolean incremental,
                                       java.util.Vector args)

addBase

protected abstract void addBase(long base,
                                java.util.Vector args)

addStack

protected abstract void addStack(int stack,
                                 java.util.Vector args)

getOutputFileSwitch

protected java.lang.String[] getOutputFileSwitch(CCTask task,
                                                 java.lang.String outputFile)

getOutputFileSwitch

protected abstract java.lang.String[] getOutputFileSwitch(java.lang.String outputFile)

getMaximumCommandLength

protected abstract int getMaximumCommandLength()

getCommandFileSwitch

protected abstract java.lang.String getCommandFileSwitch(java.lang.String commandFile)

getLibtoolLinker

public final CommandLineLinker getLibtoolLinker()

getStartupObject

protected java.lang.String getStartupObject(LinkType linkType)

addLibrarySets

protected java.lang.String[] addLibrarySets(CCTask task,
                                            LibrarySet[] libsets,
                                            java.util.Vector preargs,
                                            java.util.Vector midargs,
                                            java.util.Vector endargs)

getOutputFileName

public java.lang.String getOutputFileName(java.lang.String baseName)
Description copied from interface: Processor
Output file name (no path components) corresponding to source file
Overrides:
getOutputFileName in class AbstractLinker
Tags copied from interface: Processor
Parameters:
inputFile - input file
Returns:
output file name or null if no output file or name not determined by input file

createConfiguration

protected LinkerConfiguration createConfiguration(CCTask task,
                                                  LinkType linkType,
                                                  ProcessorDef[] baseDefs,
                                                  LinkerDef specificDef)
Overrides:
createConfiguration in class AbstractLinker

quoteFilename

protected java.lang.String quoteFilename(java.lang.StringBuffer buf,
                                         java.lang.String filename)

prepareArguments

protected java.lang.String[] prepareArguments(CCTask task,
                                              java.lang.String outputDir,
                                              java.lang.String outputFile,
                                              java.lang.String[] sourceFiles,
                                              CommandLineLinkerConfiguration config)
Prepares argument list for exec command. Will return null if command line would exceed allowable command line buffer.
Parameters:
outputFile - linker output file
sourceFiles - linker input files (.obj, .o, .res)
args - linker arguments
Returns:
arguments for runTask

prepareFilename

protected java.lang.String prepareFilename(java.lang.StringBuffer buf,
                                           java.lang.String outputDir,
                                           java.lang.String sourceFile)
Processes filename into argument form

prepareResponseFile

protected java.lang.String[] prepareResponseFile(java.io.File outputFile,
                                                 java.lang.String[] args)
                                          throws java.io.IOException
Prepares argument list to execute the linker using a response file.
Parameters:
outputFile - linker output file
args - output of prepareArguments
Returns:
arguments for runTask

decorateLinkerOption

protected java.lang.String decorateLinkerOption(java.lang.StringBuffer buf,
                                                java.lang.String arg)
Allows drived linker to decorate linker option. Override by GccLinker to prepend a "-Wl," to pass option to through gcc to linker.
Parameters:
buf - buffer that may be used and abused in the decoration process, must not be null.
arg - linker argument

link

public void link(CCTask task,
                 java.io.File outputFile,
                 java.lang.String[] sourceFiles,
                 CommandLineLinkerConfiguration config)
          throws org.apache.tools.ant.BuildException
Performs a link using a command line linker

runCommand

protected int runCommand(CCTask task,
                         java.io.File workingDir,
                         java.lang.String[] cmdline)
                  throws org.apache.tools.ant.BuildException
This method is exposed so test classes can overload and test the arguments without actually spawning the compiler

getIdentifier

public java.lang.String getIdentifier()
Description copied from interface: Processor
Retrieve an identifier that identifies the specific version of the compiler. Compilers with the same identifier should produce the same output files for the same input files and command line switches.
Overrides:
getIdentifier in class AbstractProcessor


Copyright © 2001-2002 Ant-Contrib project. All Rights Reserved.