| /* | |
| * | |
| * 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.compiler; | |
| import net.sf.antcontrib.cpptasks.CCTask; | |
| import net.sf.antcontrib.cpptasks.LinkerParam; | |
| import net.sf.antcontrib.cpptasks.ProcessorParam; | |
| import net.sf.antcontrib.cpptasks.TargetInfo; | |
| import org.apache.tools.ant.BuildException; | |
| /** | |
| * A configuration for a command line linker | |
| * | |
| * @author Curt Arnold | |
| */ | |
| public final class CommandLineLinkerConfiguration | |
| implements | |
| LinkerConfiguration { | |
| private/* final */String[][] args; | |
| private/* final */String identifier; | |
| private String[] libraryNames; | |
| private/* final */CommandLineLinker linker; | |
| private/* final */boolean map; | |
| private/* final */ProcessorParam[] params; | |
| private/* final */boolean rebuild; | |
| private String startupObject; | |
| public CommandLineLinkerConfiguration(CommandLineLinker linker, | |
| String identifier, String[][] args, ProcessorParam[] params, | |
| boolean rebuild, boolean map, String[] libraryNames, | |
| String startupObject) { | |
| if (linker == null) { | |
| throw new NullPointerException("linker"); | |
| } | |
| if (args == null) { | |
| throw new NullPointerException("args"); | |
| } else { | |
| this.args = (String[][]) args.clone(); | |
| } | |
| this.linker = linker; | |
| this.params = (ProcessorParam[]) params.clone(); | |
| this.rebuild = rebuild; | |
| this.identifier = identifier; | |
| this.map = map; | |
| if (libraryNames == null) { | |
| this.libraryNames = new String[0]; | |
| } else { | |
| this.libraryNames = (String[]) libraryNames.clone(); | |
| } | |
| this.startupObject = startupObject; | |
| } | |
| public int bid(String filename) { | |
| return linker.bid(filename); | |
| } | |
| public String[] getEndArguments() { | |
| String[] clone = (String[]) args[1].clone(); | |
| return clone; | |
| } | |
| /** | |
| * Returns a string representation of this configuration. Should be | |
| * canonical so that equivalent configurations will have equivalent string | |
| * representations | |
| */ | |
| public String getIdentifier() { | |
| return identifier; | |
| } | |
| public String[] getLibraryNames() { | |
| String[] clone = (String[]) libraryNames.clone(); | |
| return clone; | |
| } | |
| public boolean getMap() { | |
| return map; | |
| } | |
| public String getOutputFileName(String inputFile) { | |
| return linker.getOutputFileName(inputFile); | |
| } | |
| public LinkerParam getParam(String name) { | |
| for (int i = 0; i < params.length; i++) { | |
| if (name.equals(params[i].getName())) | |
| return (LinkerParam) params[i]; | |
| } | |
| return null; | |
| } | |
| public ProcessorParam[] getParams() { | |
| return params; | |
| } | |
| public String[] getPreArguments() { | |
| String[] clone = (String[]) args[0].clone(); | |
| return clone; | |
| } | |
| public boolean getRebuild() { | |
| return rebuild; | |
| } | |
| public String getStartupObject() { | |
| return startupObject; | |
| } | |
| public void link(CCTask task, TargetInfo linkTarget) throws BuildException { | |
| // | |
| // AllSourcePath's include any syslibsets | |
| // | |
| String[] sourcePaths = linkTarget.getAllSourcePaths(); | |
| linker.link(task, linkTarget.getOutput(), sourcePaths, this); | |
| } | |
| public String toString() { | |
| return identifier; | |
| } | |
| } |