blob: 3a296fef9edce2cba3af3985408afedf8f43cb6c [file] [log] [blame]
/*
* Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*
*/
import java.io.*;
import java.util.*;
public class WinGammaPlatformVC6 extends WinGammaPlatform {
public void writeProjectFile(String projectFileName, String projectName,
Vector allConfigs) throws IOException {
Vector allConfigNames = new Vector();
printWriter = new PrintWriter(new FileWriter(projectFileName));
String cfg = ((BuildConfig)allConfigs.get(0)).get("Name");
printWriter.println("# Microsoft Developer Studio Project File - Name=\"" + projectName + "\" - Package Owner=<4>");
printWriter.println("# Microsoft Developer Studio Generated Build File, Format Version 6.00");
printWriter.println("# ** DO NOT EDIT **");
printWriter.println("");
printWriter.println("# TARGTYPE \"Win32 (x86) Dynamic-Link Library\" 0x0102");
printWriter.println("CFG=" + cfg);
printWriter.println("");
printWriter.println("!MESSAGE This is not a valid makefile. To build this project using NMAKE,");
printWriter.println("!MESSAGE use the Export Makefile command and run");
printWriter.println("!MESSAGE ");
printWriter.println("!MESSAGE NMAKE /f \"" + projectName + ".mak\".");
printWriter.println("!MESSAGE ");
printWriter.println("!MESSAGE You can specify a configuration when running NMAKE");
printWriter.println("!MESSAGE by defining the macro CFG on the command line. For example:");
printWriter.println("!MESSAGE ");
printWriter.println("!MESSAGE NMAKE /f \"" + projectName + ".mak\" CFG=\"" + cfg + "\"");
printWriter.println("!MESSAGE ");
printWriter.println("!MESSAGE Possible choices for configuration are:");
printWriter.println("!MESSAGE ");
for (Iterator i = allConfigs.iterator(); i.hasNext(); ) {
String name = ((BuildConfig)i.next()).get("Name");
printWriter.println("!MESSAGE \""+ name + "\" (based on \"Win32 (x86) Dynamic-Link Library\")");
allConfigNames.add(name);
}
printWriter.println("!MESSAGE ");
printWriter.println("");
printWriter.println("# Begin Project");
printWriter.println("# PROP AllowPerConfigDependencies 0");
printWriter.println("# PROP Scc_ProjName \"\"");
printWriter.println("# PROP Scc_LocalPath \"\"");
printWriter.println("CPP=cl.exe");
printWriter.println("MTL=midl.exe");
printWriter.println("RSC=rc.exe");
String keyword = "!IF";
for (Iterator i = allConfigs.iterator(); i.hasNext(); ) {
BuildConfig bcfg = (BuildConfig)i.next();
printWriter.println(keyword + " \"$(CFG)\" == \"" + bcfg.get("Name") + "\"");
writeConfigHeader(bcfg);
keyword = "!ELSEIF";
if (!i.hasNext()) printWriter.println("!ENDIF");
}
TreeSet sortedFiles = sortFiles(computeAttributedFiles(allConfigs));
printWriter.println("# Begin Target");
for (Iterator i = allConfigs.iterator(); i.hasNext(); ) {
printWriter.println("# Name \"" + ((BuildConfig)i.next()).get("Name") + "\"");
}
printWriter.println("# Begin Group \"Header Files\"");
printWriter.println("# PROP Default_Filter \"h;hpp;hxx;hm;inl;fi;fd\"");
Iterator i = sortedFiles.iterator();
while (i.hasNext()) {
FileInfo fi = (FileInfo)i.next();
// skip sources
if (!fi.isHeader()) {
continue;
}
printFile(fi, allConfigNames);
}
printWriter.println("# End Group");
printWriter.println("");
printWriter.println("# Begin Group \"Source Files\"");
printWriter.println("# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90\"");
i = sortedFiles.iterator();
while (i.hasNext()) {
FileInfo fi = (FileInfo)i.next();
// skip headers
if (fi.isHeader()) {
continue;
}
printFile(fi, allConfigNames);
}
printWriter.println("# End Group");
printWriter.println("");
printWriter.println("# Begin Group \"Resource Files\"");
printWriter.println("# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe\"");
printWriter.println("# End Group");
printWriter.println("");
printWriter.println("# End Target");
printWriter.println("# End Project");
printWriter.close();
}
void printFile(FileInfo fi, Vector allConfigNames) {
printWriter.println("# Begin Source File");
printWriter.println("");
printWriter.println("SOURCE=\"" + fi.full + "\"");
FileAttribute attr = fi.attr;
if (attr.noPch) {
printWriter.println("# SUBTRACT CPP /YX /Yc /Yu");
}
if (attr.pchRoot) {
printWriter.println("# ADD CPP /Yc\"incls/_precompiled.incl\"");
}
if (attr.configs != null) {
String keyword = "!IF";
for (Iterator j=allConfigNames.iterator(); j.hasNext();) {
String cfg = (String)j.next();
if (!attr.configs.contains(cfg)) {
printWriter.println(keyword+" \"$(CFG)\" == \"" + cfg +"\"");
printWriter.println("# PROP BASE Exclude_From_Build 1");
printWriter.println("# PROP Exclude_From_Build 1");
keyword = "!ELSEIF";
}
}
printWriter.println("!ENDIF");
}
printWriter.println("# End Source File");
}
void writeConfigHeader(BuildConfig cfg) {
printWriter.println("# Begin Special Build Tool");
printWriter.println("SOURCE=\"$(InputPath)\"");
printWriter.println("PreLink_Desc=" + BuildConfig.getFieldString(null, "PrelinkDescription"));
printWriter.println("PreLink_Cmds=" +
cfg.expandFormat(BuildConfig.getFieldString(null, "PrelinkCommand")));
printWriter.println("# End Special Build Tool");
printWriter.println("");
for (Iterator i = cfg.getV("CompilerFlags").iterator(); i.hasNext(); ) {
printWriter.println("# "+(String)i.next());
}
printWriter.println("LINK32=link.exe");
for (Iterator i = cfg.getV("LinkerFlags").iterator(); i.hasNext(); ) {
printWriter.println("# "+(String)i.next());
}
printWriter.println("ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32");
printWriter.println("ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32");
printWriter.println("ADD BASE RSC /l 0x409 /d \"_DEBUG\"");
printWriter.println("ADD RSC /l 0x409 /d \"_DEBUG\"");
printWriter.println("BSC32=bscmake.exe");
printWriter.println("ADD BASE BSC32 /nologo");
printWriter.println("ADD BSC32 /nologo");
printWriter.println("");
}
protected String getProjectExt() {
return ".dsp";
}
}
class CompilerInterfaceVC6 extends CompilerInterface {
Vector getBaseCompilerFlags(Vector defines, Vector includes, String outDir) {
Vector rv = new Vector();
rv.add("PROP BASE Use_MFC 0");
rv.add("PROP Use_MFC 0");
rv.add("ADD CPP /nologo /MT /W3 /WX /GX /YX /Fr /FD /c");
rv.add("PROP BASE Output_Dir \""+outDir+"\"");
rv.add("PROP Output_Dir \""+outDir+"\"");
rv.add("PROP BASE Intermediate_Dir \""+outDir+"\"");
rv.add("PROP Intermediate_Dir \""+outDir+"\"");
rv.add("PROP BASE Target_Dir \"\"");
rv.add("PROP Target_Dir \"\"");
rv.add("ADD BASE CPP "+Util.prefixed_join(" /I ", includes, true));
rv.add("ADD CPP "+Util.prefixed_join(" /I ", includes, true));
rv.add("ADD BASE CPP "+Util.prefixed_join(" /D ", defines, true));
rv.add("ADD CPP "+Util.prefixed_join(" /D ", defines, true));
rv.add("ADD CPP /Yu\"incls/_precompiled.incl\"");
return rv;
}
Vector getBaseLinkerFlags(String outDir, String outDll) {
Vector rv = new Vector();
rv.add("PROP Ignore_Export_Lib 0");
rv.add("ADD BASE CPP /MD");
rv.add("ADD CPP /MD");
rv.add("ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib " +
" advapi32.lib shell32.lib ole32.lib oleaut32.lib winmm.lib");
rv.add("ADD LINK32 /out:\""+outDll+"\" "+
" /nologo /subsystem:windows /machine:I386" +
" /nologo /base:\"0x8000000\" /subsystem:windows /dll" +
" /export:JNI_GetDefaultJavaVMInitArgs /export:JNI_CreateJavaVM /export:JNI_GetCreatedJavaVMs "+
" /export:jio_snprintf /export:jio_printf /export:jio_fprintf /export:jio_vfprintf "+
" /export:jio_vsnprintf ");
rv.add("SUBTRACT LINK32 /pdb:none /map");
return rv;
}
Vector getDebugCompilerFlags(String opt) {
Vector rv = new Vector();
rv.add("ADD BASE CPP /Gm /Zi /O"+opt);
return rv;
}
Vector getDebugLinkerFlags() {
Vector rv = new Vector();
rv.add("PROP BASE Use_Debug_Libraries 1");
rv.add("PROP Use_Debug_Libraries 1");
rv.add("ADD LINK32 /debug");
return rv;
}
Vector getProductCompilerFlags() {
Vector rv = new Vector();
rv.add("ADD CPP /O"+getOptFlag());
return rv;
}
Vector getProductLinkerFlags() {
Vector rv = new Vector();
rv.add("PROP BASE Use_Debug_Libraries 0");
rv.add("PROP Use_Debug_Libraries 0");
return rv;
}
String getOptFlag() {
return "2";
}
String getNoOptFlag() {
return "d";
}
String makeCfgName(String flavourBuild) {
return "vm - "+ Util.os + " " + flavourBuild;
}
}