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 }