1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  package com.github.maven_nar.cpptasks.compiler;
21  
22  import java.io.File;
23  import java.io.IOException;
24  
25  import org.apache.tools.ant.types.Environment;
26  
27  import com.github.maven_nar.cpptasks.CCTask;
28  import com.github.maven_nar.cpptasks.LinkerDef;
29  import com.github.maven_nar.cpptasks.ProcessorDef;
30  import com.github.maven_nar.cpptasks.TargetDef;
31  import com.github.maven_nar.cpptasks.TargetMatcher;
32  import com.github.maven_nar.cpptasks.VersionInfo;
33  
34  
35  
36  
37  
38  
39  public abstract class AbstractLinker extends AbstractProcessor implements Linker {
40    public AbstractLinker(final String[] objExtensions, final String[] ignoredExtensions) {
41      super(objExtensions, ignoredExtensions);
42    }
43  
44    
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61    @Override
62    public void addVersionFiles(final VersionInfo versionInfo, final LinkType linkType, final File outputFile,
63        final boolean isDebug, final File objDir, final TargetMatcher matcher) throws IOException {
64      if (versionInfo == null) {
65        throw new NullPointerException("versionInfo");
66      }
67      if (linkType == null) {
68        throw new NullPointerException("linkType");
69      }
70      if (outputFile == null) {
71        throw new NullPointerException("outputFile");
72      }
73      if (objDir == null) {
74        throw new NullPointerException("objDir");
75      }
76    }
77  
78    
79  
80  
81  
82  
83  
84  
85  
86  
87  
88  
89    @Override
90    public int bid(final String inputFile) {
91      final int bid = super.bid(inputFile);
92      switch (bid) {
93      
94      
95      
96        case 0:
97          return 1;
98          
99          
100         
101       case 1:
102         return 0;
103     }
104     return bid;
105   }
106 
107   @Override
108   public Processor changeEnvironment(final boolean newEnvironment, final Environment env) {
109     return this;
110   }
111 
112   abstract protected LinkerConfiguration createConfiguration(CCTask task, LinkType linkType,
113       ProcessorDef[] baseConfigs, LinkerDef specificConfig, TargetDef targetPlatform, VersionInfo versionInfo);
114 
115   @Override
116   public ProcessorConfiguration createConfiguration(final CCTask task, final LinkType linkType,
117       final ProcessorDef[] baseConfigs, final ProcessorDef specificConfig, final TargetDef targetPlatform,
118       final VersionInfo versionInfo) {
119     if (specificConfig == null) {
120       throw new NullPointerException("specificConfig");
121     }
122     return createConfiguration(task, linkType, baseConfigs, (LinkerDef) specificConfig, targetPlatform, versionInfo);
123   }
124 
125   @Override
126   public String getLibraryKey(final File libfile) {
127     return libfile.getName();
128   }
129 
130   @Override
131   public abstract String[] getOutputFileNames(String fileName, VersionInfo versionInfo);
132 
133 }