3 * Copyright 2002-2004 The Ant-Contrib project
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 package net
.sf
.antcontrib
.cpptasks
.gcc
.cross
;
20 import net
.sf
.antcontrib
.cpptasks
.CCTask
;
21 import net
.sf
.antcontrib
.cpptasks
.LinkerParam
;
22 import net
.sf
.antcontrib
.cpptasks
.compiler
.CommandLineLinkerConfiguration
;
23 import net
.sf
.antcontrib
.cpptasks
.compiler
.LinkType
;
24 import net
.sf
.antcontrib
.cpptasks
.compiler
.Linker
;
25 import net
.sf
.antcontrib
.cpptasks
.gcc
.AbstractArLibrarian
;
27 import org
.apache
.tools
.ant
.BuildException
;
29 * Adapter for the 'ar' archiver
31 * @author Adam Murdoch
33 public final class GccLibrarian
extends AbstractArLibrarian
{
34 private static String
[] objFileExtensions
= new String
[]{".o"};
35 private static GccLibrarian instance
= new GccLibrarian("ar",
36 objFileExtensions
, false, new GccLibrarian("ar", objFileExtensions
,
38 public static GccLibrarian
getInstance() {
41 private GccLibrarian(String command
, String
[] inputExtensions
,
42 boolean isLibtool
, GccLibrarian libtoolLibrarian
) {
43 super(command
, "V", inputExtensions
, new String
[0], "lib", ".a",
44 isLibtool
, libtoolLibrarian
);
46 protected Object
clone() throws CloneNotSupportedException
{
47 GccLibrarian clone
= (GccLibrarian
) super.clone();
50 public Linker
getLinker(LinkType type
) {
51 return GccLinker
.getInstance().getLinker(type
);
53 public void link(CCTask task
, File outputFile
, String
[] sourceFiles
,
54 CommandLineLinkerConfiguration config
) throws BuildException
{
56 GccLibrarian clone
= (GccLibrarian
) this.clone();
57 LinkerParam param
= config
.getParam("target");
59 clone
.setCommand(param
.getValue() + "-" + this.getCommand());
60 clone
.superlink(task
, outputFile
, sourceFiles
, config
);
61 } catch (CloneNotSupportedException e
) {
62 superlink(task
, outputFile
, sourceFiles
, config
);
65 private void superlink(CCTask task
, File outputFile
, String
[] sourceFiles
,
66 CommandLineLinkerConfiguration config
) throws BuildException
{
67 super.link(task
, outputFile
, sourceFiles
, config
);