@Override
  public String[] prepareArguments(final CCTask task, final String outputDir, final String outputFile,
      final String[] sourceFiles, final CommandLineLinkerConfiguration config) {
    //
    // need to suppress sources that correspond to
    // library set entries since they are already
    // in the argument list
    final String[] libnames = config.getLibraryNames();
    if (libnames == null || libnames.length == 0) {
      return super.prepareArguments(task, outputDir, outputFile, sourceFiles, config);
    }
    //
    //
    // null out any sources that correspond to library names
    //
    final String[] localSources = sourceFiles.clone();
    int extra = 0;
    for (final String libname : libnames) {
      for (int j = 0; j < localSources.length; j++) {
        if (localSources[j] != null && localSources[j].indexOf(libname) > 0 && localSources[j].indexOf("lib") > 0) {
          final String filename = new File(localSources[j]).getName();
          if (filename.startsWith("lib") && filename.substring(3).startsWith(libname)) {
            final String extension = filename.substring(libname.length() + 3);
            if (extension.equals(".a") || extension.equals(".so") || extension.equals(".sl")) {
              localSources[j] = null;
              extra++;
            }
          }
        }
      }
    }
    if (extra == 0) {
      return super.prepareArguments(task, outputDir, outputFile, sourceFiles, config);
    }
    final String[] finalSources = new String[localSources.length - extra];
    int index = 0;
    for (final String localSource : localSources) {
      if (localSource != null) {
        finalSources[index++] = localSource;
      }
    }
    return super.prepareArguments(task, outputDir, outputFile, finalSources, config);
  }
@ Override public String [ ] prepareArguments ( final CCTask task , final String outputDir , final String outputFile , final String [ ] sourceFiles , final CommandLineLinkerConfiguration config ) { final String [ ] libnames = config . getLibraryNames ( ) ; if ( libnames == null || libnames . length == 0 ) { return super . prepareArguments ( task , outputDir , outputFile , sourceFiles , config ) ; } final String [ ] localSources = sourceFiles . clone ( ) ; int extra = 0 ; for ( final String libname : libnames ) { for ( int j = 0 ; j < localSources . length ; j ++ ) { if ( localSources [ j ] != null && localSources [ j ] . indexOf ( libname ) > 0 && localSources [ j ] . indexOf ( "lib" ) > 0 ) { final String filename = new File ( localSources [ j ] ) . getName ( ) ; if ( filename . startsWith ( "lib" ) && filename . substring ( 3 ) . startsWith ( libname ) ) { final String extension = filename . substring ( libname . length ( ) + 3 ) ; if ( extension . equals ( ".a" ) || extension . equals ( ".so" ) || extension . equals ( ".sl" ) ) { localSources [ j ] = null ; extra ++ ; } } } } } if ( extra == 0 ) { return super . prepareArguments ( task , outputDir , outputFile , sourceFiles , config ) ; } final String [ ] finalSources = new String [ localSources . length - extra ] ; int index = 0 ; for ( final String localSource : localSources ) { if ( localSource != null ) { finalSources [ index ++ ] = localSource ; } } return super . prepareArguments ( task , outputDir , outputFile , finalSources , config ) ; }
Prepares argument list for exec command. Will return null if command
line would exceed allowable command line buffer.

@param outputFile
linker output file
@param sourceFiles
linker input files (.obj, .o, .res)
@param config
linker configuration
@return arguments for runTask