View Javadoc

1   /*
2    * #%L
3    * Native ARchive plugin for Maven
4    * %%
5    * Copyright (C) 2002 - 2014 NAR Maven Plugin developers.
6    * %%
7    * Licensed under the Apache License, Version 2.0 (the "License");
8    * you may not use this file except in compliance with the License.
9    * You may obtain a copy of the License at
10   * 
11   * http://www.apache.org/licenses/LICENSE-2.0
12   * 
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   * #L%
19   */
20  package com.github.maven_nar.cpptasks.gcc;
21  
22  import java.io.File;
23  
24  import com.github.maven_nar.cpptasks.compiler.LinkType;
25  import com.github.maven_nar.cpptasks.compiler.Linker;
26  
27  /**
28   * Adapter for the 'ld' linker
29   *
30   * @author Curt Arnold
31   */
32  public final class LdLinker extends AbstractLdLinker {
33    private static final String[] discardFiles = new String[0];
34    private static final String[] objFiles = new String[] {
35        ".o", ".a", ".lib", ".dll", ".so", ".sl"
36    };
37    private static final LdLinker dllLinker = new LdLinker("ld", objFiles, discardFiles, "lib", ".so", false,
38        new LdLinker("ld", objFiles, discardFiles, "lib", ".so", true, null));
39    private static final LdLinker instance = new LdLinker("ld", objFiles, discardFiles, "", "", false, null);
40    private static final String[] libtoolObjFiles = new String[] {
41        ".fo", ".a", ".lib", ".dll", ".so", ".sl"
42    };
43  
44    public static LdLinker getInstance() {
45      return instance;
46    }
47  
48    private File[] libDirs;
49  
50    private LdLinker(final String command, final String[] extensions, final String[] ignoredExtensions,
51        final String outputPrefix, final String outputSuffix, final boolean isLibtool, final LdLinker libtoolLinker) {
52      super(command, "-version", extensions, ignoredExtensions, outputPrefix, outputSuffix, isLibtool, libtoolLinker);
53    }
54  
55    @Override
56    public Linker getLinker(final LinkType type) {
57      if (type.isStaticLibrary()) {
58        return GccLibrarian.getInstance();
59      }
60      if (type.isSharedLibrary()) {
61        return dllLinker;
62      }
63      return instance;
64    }
65  }