-
Notifications
You must be signed in to change notification settings - Fork 157
Expand file tree
/
Copy pathMsvcMIDLCompiler.java
More file actions
170 lines (148 loc) · 5.43 KB
/
MsvcMIDLCompiler.java
File metadata and controls
170 lines (148 loc) · 5.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/*
* #%L
* Native ARchive plugin for Maven
* %%
* Copyright (C) 2002 - 2014 NAR Maven Plugin developers.
* %%
* 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.
* #L%
*/
package com.github.maven_nar.cpptasks.msvc;
import java.io.File;
import java.util.Vector;
import org.apache.tools.ant.types.Environment;
import com.github.maven_nar.cpptasks.CCTask;
import com.github.maven_nar.cpptasks.CUtil;
import com.github.maven_nar.cpptasks.CompilerDef;
import com.github.maven_nar.cpptasks.OptimizationEnum;
import com.github.maven_nar.cpptasks.ProcessorDef;
import com.github.maven_nar.cpptasks.TargetDef;
import com.github.maven_nar.cpptasks.VersionInfo;
import com.github.maven_nar.cpptasks.compiler.CommandLineCompiler;
import com.github.maven_nar.cpptasks.compiler.CommandLineCompilerConfiguration;
import com.github.maven_nar.cpptasks.compiler.CompilerConfiguration;
import com.github.maven_nar.cpptasks.compiler.LinkType;
import com.github.maven_nar.cpptasks.compiler.Linker;
import com.github.maven_nar.cpptasks.compiler.Processor;
import com.github.maven_nar.cpptasks.parser.CParser;
import com.github.maven_nar.cpptasks.parser.Parser;
/**
* Adapter for the Microsoft (r) MIDL Compiler
*
* @author Curt Arnold
*/
public final class MsvcMIDLCompiler extends CommandLineCompiler {
private static final MsvcMIDLCompiler instance = new MsvcMIDLCompiler(false, null);
public static MsvcMIDLCompiler getInstance() {
return instance;
}
private MsvcMIDLCompiler(final boolean newEnvironment, final Environment env) {
super("midl", null, new String[] {
".idl", ".odl"
}, new String[] {}, ".tlb", false, null, newEnvironment, env);
}
@Override
protected void addImpliedArgs(final Vector<String> args, final boolean debug, final boolean multithreaded,
final boolean exceptions, final LinkType linkType, final Boolean rtti, final OptimizationEnum optimization) {
}
@Override
protected void addWarningSwitch(final Vector<String> args, final int level) {
MsvcProcessor.addWarningSwitch(args, level);
}
@Override
public Processor changeEnvironment(final boolean newEnvironment, final Environment env) {
if (newEnvironment || env != null) {
return new MsvcMIDLCompiler(newEnvironment, env);
}
return this;
}
@Override
protected CompilerConfiguration createConfiguration(final CCTask task, final LinkType linkType,
final ProcessorDef[] baseDefs, final CompilerDef specificDef, final TargetDef targetPlatform,
final VersionInfo versionInfo) {
return new CommandLineCompilerConfiguration((CommandLineCompilerConfiguration)super.createConfiguration(task, linkType, baseDefs, specificDef, targetPlatform, versionInfo), null, null, true);
}
/**
* The include parser for C will work just fine, but we didn't want to
* inherit from CommandLineCCompiler
*/
@Override
protected Parser createParser(final File source) {
return new CParser();
}
@Override
protected int getArgumentCountPerInputFile() {
return 3;
}
@Override
protected void getDefineSwitch(final StringBuffer buffer, final String define, final String value) {
MsvcProcessor.getDefineSwitch(buffer, define, value);
}
@Override
protected File[] getEnvironmentIncludePath() {
return CUtil.getPathFromEnvironment("INCLUDE", ";");
}
@Override
protected String getIncludeDirSwitch(final String includeDir) {
return MsvcProcessor.getIncludeDirSwitch(includeDir);
}
@Override
public String[] getOutputFileNames(final String inputFile, final VersionInfo versionInfo) {
//
// if a recognized input file
//
if (bid(inputFile) > 1) {
final String baseName = getBaseOutputName(inputFile);
return new String[] {
baseName + getOutputSuffix()
};
}
return new String[0];
}
@Override
protected String getInputFileArgument(final File outputDir, final String filename, final int index) {
switch (index) {
case 0:
return "/tlb";
case 1:
return new File(outputDir, getOutputFileNames(filename, null)[0]).getAbsolutePath();
default:
break;
}
return filename;
}
@Override
public Linker getLinker(final LinkType type) {
return MsvcLinker.getInstance().getLinker(type);
}
@Override
public int getMaximumCommandLength() {
// FREEHEP stay on the safe side
return 32000; // 32767;
}
@Override
protected int getMaximumInputFilesPerCommand() {
return 1;
}
@Override
protected int getTotalArgumentLengthForInputFile(final File outputDir, final String inputFile) {
final String arg1 = getInputFileArgument(outputDir, inputFile, 0);
final String arg2 = getInputFileArgument(outputDir, inputFile, 1);
final String arg3 = getInputFileArgument(outputDir, inputFile, 2);
return arg1.length() + arg2.length() + arg3.length() + 3;
}
@Override
protected void getUndefineSwitch(final StringBuffer buffer, final String define) {
MsvcProcessor.getUndefineSwitch(buffer, define);
}
}