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
,ADSLibrarian
,ADSLinker
,BorlandLibrarian
,BorlandLinker
,C89Linker
,ClxxLibrarian
,ClxxLinker
,CompaqVisualFortranLibrarian
,DevStudioCompatibleLibrarian
,DevStudioCompatibleLinker
,IccLinker
,OpenWatcomLibrarian
,OpenWatcomLinker
,OS390Linker
public abstract class CommandLineLinker extends AbstractLinker
An abstract Linker implementation that performs the link via an external command.
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.String
command
private org.apache.tools.ant.types.Environment
env
private java.lang.String
identifier
private java.lang.String
identifierArg
private boolean
isLibtool
private java.lang.String[]
librarySets
private CommandLineLinker
libtoolLinker
private boolean
newEnvironment
private java.lang.String
outputSuffix
-
Fields inherited from class net.sf.antcontrib.cpptasks.compiler.AbstractProcessor
DEFAULT_DISCARD_BID, DEFAULT_PROCESS_BID
-
-
Constructor Summary
Constructors Constructor Description 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
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract void
addBase(long base, java.util.Vector args)
protected abstract void
addEntry(java.lang.String entry, 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, TargetDef targetPlatform, VersionInfo versionInfo)
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[]
getOutputFileNames(java.lang.String baseName, VersionInfo versionInfo)
Output file name (no path components) corresponding to source fileprotected abstract java.lang.String[]
getOutputFileSwitch(java.lang.String outputFile)
protected java.lang.String[]
getOutputFileSwitch(CCTask task, 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 linkerprotected 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 formprotected 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 compilerprotected void
setCommand(java.lang.String command)
-
Methods inherited from class net.sf.antcontrib.cpptasks.compiler.AbstractLinker
addVersionFiles, bid, changeEnvironment, createConfiguration, getLibraryKey
-
Methods inherited from class net.sf.antcontrib.cpptasks.compiler.AbstractProcessor
clone, getHeaderExtensions, getIdentifier, getOSArch, getOSName, getSourceExtensions, isDarwin, toString
-
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface net.sf.antcontrib.cpptasks.compiler.Linker
getLibraryPath, getLibraryPatterns, getLinker, isCaseSensitive
-
-
-
-
Field Detail
-
command
private java.lang.String command
-
env
private org.apache.tools.ant.types.Environment env
-
identifier
private java.lang.String identifier
-
identifierArg
private java.lang.String identifierArg
-
isLibtool
private boolean isLibtool
-
librarySets
private java.lang.String[] librarySets
-
libtoolLinker
private CommandLineLinker libtoolLinker
-
newEnvironment
private boolean newEnvironment
-
outputSuffix
private java.lang.String outputSuffix
-
-
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
-
addBase
protected abstract void addBase(long base, java.util.Vector args)
-
addFixed
protected abstract void addFixed(java.lang.Boolean fixed, java.util.Vector args)
-
addImpliedArgs
protected abstract void addImpliedArgs(boolean debug, LinkType linkType, java.util.Vector args)
-
addIncremental
protected abstract void addIncremental(boolean incremental, java.util.Vector args)
-
addLibrarySets
protected java.lang.String[] addLibrarySets(CCTask task, LibrarySet[] libsets, java.util.Vector preargs, java.util.Vector midargs, java.util.Vector endargs)
-
addMap
protected abstract void addMap(boolean map, java.util.Vector args)
-
addStack
protected abstract void addStack(int stack, java.util.Vector args)
-
addEntry
protected abstract void addEntry(java.lang.String entry, java.util.Vector args)
-
createConfiguration
protected LinkerConfiguration createConfiguration(CCTask task, LinkType linkType, ProcessorDef[] baseDefs, LinkerDef specificDef, TargetDef targetPlatform, VersionInfo versionInfo)
- Specified by:
createConfiguration
in classAbstractLinker
-
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
-
getCommand
protected final java.lang.String getCommand()
-
getCommandFileSwitch
protected abstract java.lang.String getCommandFileSwitch(java.lang.String commandFile)
-
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.- Specified by:
getIdentifier
in interfaceProcessor
- Specified by:
getIdentifier
in classAbstractProcessor
-
getLibtoolLinker
public final CommandLineLinker getLibtoolLinker()
-
getMaximumCommandLength
protected abstract int getMaximumCommandLength()
-
getOutputFileNames
public java.lang.String[] getOutputFileNames(java.lang.String baseName, VersionInfo versionInfo)
Description copied from interface:Processor
Output file name (no path components) corresponding to source file- Specified by:
getOutputFileNames
in interfaceProcessor
- Specified by:
getOutputFileNames
in classAbstractLinker
- Parameters:
baseName
- input file- Returns:
- output file name or null if no output file or name not determined by input file
-
getOutputFileSwitch
protected java.lang.String[] getOutputFileSwitch(CCTask task, java.lang.String outputFile)
-
getOutputFileSwitch
protected abstract java.lang.String[] getOutputFileSwitch(java.lang.String outputFile)
-
getStartupObject
protected java.lang.String getStartupObject(LinkType linkType)
-
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- Throws:
org.apache.tools.ant.BuildException
-
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:
task
- compilation task.outputFile
- linker output filesourceFiles
- linker input files (.obj, .o, .res)config
- linker configuration- 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 fileargs
- output of prepareArguments- Returns:
- arguments for runTask
- Throws:
java.io.IOException
-
quoteFilename
protected java.lang.String quoteFilename(java.lang.StringBuffer buf, java.lang.String filename)
-
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- Throws:
org.apache.tools.ant.BuildException
-
setCommand
protected final void setCommand(java.lang.String command)
-
-