comparison src/share/tools/ProjectCreator/WinGammaPlatformVC6.java @ 1972:f95d63e2154a

6989984: Use standard include model for Hospot Summary: Replaced MakeDeps and the includeDB files with more standardized solutions. Reviewed-by: coleenp, kvn, kamg
author stefank
date Tue, 23 Nov 2010 13:22:55 -0800
parents src/share/tools/MakeDeps/WinGammaPlatformVC6.java@c18cbe5936b8
children aa6e219afbf1
comparison
equal deleted inserted replaced
1971:e33f46fc48ed 1972:f95d63e2154a
1 /*
2 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 import java.io.*;
26 import java.util.*;
27
28 public class WinGammaPlatformVC6 extends WinGammaPlatform {
29 public void writeProjectFile(String projectFileName, String projectName,
30 Vector allConfigs) throws IOException {
31 Vector allConfigNames = new Vector();
32
33 printWriter = new PrintWriter(new FileWriter(projectFileName));
34 String cfg = ((BuildConfig)allConfigs.get(0)).get("Name");
35
36 printWriter.println("# Microsoft Developer Studio Project File - Name=\"" + projectName + "\" - Package Owner=<4>");
37 printWriter.println("# Microsoft Developer Studio Generated Build File, Format Version 6.00");
38 printWriter.println("# ** DO NOT EDIT **");
39 printWriter.println("");
40 printWriter.println("# TARGTYPE \"Win32 (x86) Dynamic-Link Library\" 0x0102");
41 printWriter.println("CFG=" + cfg);
42 printWriter.println("");
43
44 printWriter.println("!MESSAGE This is not a valid makefile. To build this project using NMAKE,");
45 printWriter.println("!MESSAGE use the Export Makefile command and run");
46 printWriter.println("!MESSAGE ");
47 printWriter.println("!MESSAGE NMAKE /f \"" + projectName + ".mak\".");
48 printWriter.println("!MESSAGE ");
49 printWriter.println("!MESSAGE You can specify a configuration when running NMAKE");
50 printWriter.println("!MESSAGE by defining the macro CFG on the command line. For example:");
51 printWriter.println("!MESSAGE ");
52 printWriter.println("!MESSAGE NMAKE /f \"" + projectName + ".mak\" CFG=\"" + cfg + "\"");
53 printWriter.println("!MESSAGE ");
54 printWriter.println("!MESSAGE Possible choices for configuration are:");
55 printWriter.println("!MESSAGE ");
56 for (Iterator i = allConfigs.iterator(); i.hasNext(); ) {
57 String name = ((BuildConfig)i.next()).get("Name");
58 printWriter.println("!MESSAGE \""+ name + "\" (based on \"Win32 (x86) Dynamic-Link Library\")");
59 allConfigNames.add(name);
60 }
61 printWriter.println("!MESSAGE ");
62 printWriter.println("");
63
64 printWriter.println("# Begin Project");
65 printWriter.println("# PROP AllowPerConfigDependencies 0");
66 printWriter.println("# PROP Scc_ProjName \"\"");
67 printWriter.println("# PROP Scc_LocalPath \"\"");
68 printWriter.println("CPP=cl.exe");
69 printWriter.println("MTL=midl.exe");
70 printWriter.println("RSC=rc.exe");
71
72
73 String keyword = "!IF";
74 for (Iterator i = allConfigs.iterator(); i.hasNext(); ) {
75 BuildConfig bcfg = (BuildConfig)i.next();
76 printWriter.println(keyword + " \"$(CFG)\" == \"" + bcfg.get("Name") + "\"");
77 writeConfigHeader(bcfg);
78 keyword = "!ELSEIF";
79 if (!i.hasNext()) printWriter.println("!ENDIF");
80 }
81
82
83 TreeSet sortedFiles = sortFiles(computeAttributedFiles(allConfigs));
84
85 printWriter.println("# Begin Target");
86
87 for (Iterator i = allConfigs.iterator(); i.hasNext(); ) {
88 printWriter.println("# Name \"" + ((BuildConfig)i.next()).get("Name") + "\"");
89 }
90 printWriter.println("# Begin Group \"Header Files\"");
91 printWriter.println("# PROP Default_Filter \"h;hpp;hxx;hm;inl;fi;fd\"");
92
93 Iterator i = sortedFiles.iterator();
94
95 while (i.hasNext()) {
96 FileInfo fi = (FileInfo)i.next();
97
98 // skip sources
99 if (!fi.isHeader()) {
100 continue;
101 }
102
103 printFile(fi, allConfigNames);
104 }
105 printWriter.println("# End Group");
106 printWriter.println("");
107
108 printWriter.println("# Begin Group \"Source Files\"");
109 printWriter.println("# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90\"");
110
111 i = sortedFiles.iterator();
112 while (i.hasNext()) {
113 FileInfo fi = (FileInfo)i.next();
114
115 // skip headers
116 if (fi.isHeader()) {
117 continue;
118 }
119
120 printFile(fi, allConfigNames);
121 }
122 printWriter.println("# End Group");
123 printWriter.println("");
124
125
126 printWriter.println("# Begin Group \"Resource Files\"");
127 printWriter.println("# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe\"");
128 printWriter.println("# End Group");
129 printWriter.println("");
130 printWriter.println("# End Target");
131
132 printWriter.println("# End Project");
133
134 printWriter.close();
135 }
136
137
138 void printFile(FileInfo fi, Vector allConfigNames) {
139 printWriter.println("# Begin Source File");
140 printWriter.println("");
141 printWriter.println("SOURCE=\"" + fi.full + "\"");
142 FileAttribute attr = fi.attr;
143
144 if (attr.noPch) {
145 printWriter.println("# SUBTRACT CPP /YX /Yc /Yu");
146 }
147
148 if (attr.pchRoot) {
149 printWriter.println("# ADD CPP /Yc\"incls/_precompiled.incl\"");
150 }
151 if (attr.configs != null) {
152 String keyword = "!IF";
153 for (Iterator j=allConfigNames.iterator(); j.hasNext();) {
154 String cfg = (String)j.next();
155 if (!attr.configs.contains(cfg)) {
156 printWriter.println(keyword+" \"$(CFG)\" == \"" + cfg +"\"");
157 printWriter.println("# PROP BASE Exclude_From_Build 1");
158 printWriter.println("# PROP Exclude_From_Build 1");
159 keyword = "!ELSEIF";
160 }
161 }
162 printWriter.println("!ENDIF");
163 }
164
165 printWriter.println("# End Source File");
166 }
167
168 void writeConfigHeader(BuildConfig cfg) {
169 printWriter.println("# Begin Special Build Tool");
170 printWriter.println("SOURCE=\"$(InputPath)\"");
171 printWriter.println("PreLink_Desc=" + BuildConfig.getFieldString(null, "PrelinkDescription"));
172 printWriter.println("PreLink_Cmds=" +
173 cfg.expandFormat(BuildConfig.getFieldString(null, "PrelinkCommand")));
174 printWriter.println("# End Special Build Tool");
175 printWriter.println("");
176
177 for (Iterator i = cfg.getV("CompilerFlags").iterator(); i.hasNext(); ) {
178 printWriter.println("# "+(String)i.next());
179 }
180
181
182 printWriter.println("LINK32=link.exe");
183
184 for (Iterator i = cfg.getV("LinkerFlags").iterator(); i.hasNext(); ) {
185 printWriter.println("# "+(String)i.next());
186 }
187
188 printWriter.println("ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32");
189 printWriter.println("ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32");
190 printWriter.println("ADD BASE RSC /l 0x409 /d \"_DEBUG\"");
191 printWriter.println("ADD RSC /l 0x409 /d \"_DEBUG\"");
192 printWriter.println("BSC32=bscmake.exe");
193 printWriter.println("ADD BASE BSC32 /nologo");
194 printWriter.println("ADD BSC32 /nologo");
195 printWriter.println("");
196 }
197
198 protected String getProjectExt() {
199 return ".dsp";
200 }
201 }
202
203
204 class CompilerInterfaceVC6 extends CompilerInterface {
205 Vector getBaseCompilerFlags(Vector defines, Vector includes, String outDir) {
206 Vector rv = new Vector();
207
208 rv.add("PROP BASE Use_MFC 0");
209 rv.add("PROP Use_MFC 0");
210 rv.add("ADD CPP /nologo /MT /W3 /WX /GX /YX /Fr /FD /c");
211 rv.add("PROP BASE Output_Dir \""+outDir+"\"");
212 rv.add("PROP Output_Dir \""+outDir+"\"");
213 rv.add("PROP BASE Intermediate_Dir \""+outDir+"\"");
214 rv.add("PROP Intermediate_Dir \""+outDir+"\"");
215 rv.add("PROP BASE Target_Dir \"\"");
216 rv.add("PROP Target_Dir \"\"");
217 rv.add("ADD BASE CPP "+Util.prefixed_join(" /I ", includes, true));
218 rv.add("ADD CPP "+Util.prefixed_join(" /I ", includes, true));
219 rv.add("ADD BASE CPP "+Util.prefixed_join(" /D ", defines, true));
220 rv.add("ADD CPP "+Util.prefixed_join(" /D ", defines, true));
221 rv.add("ADD CPP /Yu\"incls/_precompiled.incl\"");
222
223 return rv;
224 }
225
226 Vector getBaseLinkerFlags(String outDir, String outDll) {
227 Vector rv = new Vector();
228
229 rv.add("PROP Ignore_Export_Lib 0");
230 rv.add("ADD BASE CPP /MD");
231 rv.add("ADD CPP /MD");
232 rv.add("ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib " +
233 " advapi32.lib shell32.lib ole32.lib oleaut32.lib winmm.lib");
234 rv.add("ADD LINK32 /out:\""+outDll+"\" "+
235 " /nologo /subsystem:windows /machine:I386" +
236 " /nologo /base:\"0x8000000\" /subsystem:windows /dll" +
237 " /export:JNI_GetDefaultJavaVMInitArgs /export:JNI_CreateJavaVM /export:JNI_GetCreatedJavaVMs "+
238 " /export:jio_snprintf /export:jio_printf /export:jio_fprintf /export:jio_vfprintf "+
239 " /export:jio_vsnprintf ");
240 rv.add("SUBTRACT LINK32 /pdb:none /map");
241
242 return rv;
243 }
244
245 Vector getDebugCompilerFlags(String opt) {
246 Vector rv = new Vector();
247
248 rv.add("ADD BASE CPP /Gm /Zi /O"+opt);
249
250 return rv;
251 }
252
253 Vector getDebugLinkerFlags() {
254 Vector rv = new Vector();
255
256 rv.add("PROP BASE Use_Debug_Libraries 1");
257 rv.add("PROP Use_Debug_Libraries 1");
258 rv.add("ADD LINK32 /debug");
259
260 return rv;
261 }
262
263 Vector getProductCompilerFlags() {
264 Vector rv = new Vector();
265
266 rv.add("ADD CPP /O"+getOptFlag());
267
268 return rv;
269 }
270
271 Vector getProductLinkerFlags() {
272 Vector rv = new Vector();
273
274 rv.add("PROP BASE Use_Debug_Libraries 0");
275 rv.add("PROP Use_Debug_Libraries 0");
276
277 return rv;
278 }
279
280 String getOptFlag() {
281 return "2";
282 }
283
284 String getNoOptFlag() {
285 return "d";
286 }
287
288 String makeCfgName(String flavourBuild) {
289 return "vm - "+ Util.os + " " + flavourBuild;
290 }
291 }