/*=========================================================================
Program: CMake - Cross-Platform Makefile Generator
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#include "cmGlobalCodeWarriorGenerator.h"
#include "cmLocalCodeWarriorGenerator.h"
#include "cmMakefile.h"
#include "cmSystemTools.h"
#include "cmSourceFile.h"
#include "cmCacheManager.h"
cmLocalCodeWarriorGenerator::cmLocalCodeWarriorGenerator()
{
}
cmLocalCodeWarriorGenerator::~cmLocalCodeWarriorGenerator()
{
}
void cmLocalCodeWarriorGenerator::Generate(bool /* fromTheTop */)
{
}
void cmLocalCodeWarriorGenerator::WriteTargets(std::ostream& fout)
{
cmTargets &tgts = m_Makefile->GetTargets();
for(cmTargets::iterator l = tgts.begin();
l != tgts.end(); l++)
{
this->WriteTarget(fout,l->first.c_str(),&(l->second));
}
}
void cmLocalCodeWarriorGenerator::WriteTarget(std::ostream& fout,
const char *tgtName,
cmTarget const *l)
{
fout << "\n";
fout << "" << tgtName << "\n";
this->WriteSettingList(fout, tgtName,l);
this->WriteFileList(fout, tgtName,l);
this->WriteLinkOrder(fout, tgtName, l);
// this->WriteSubTargetList(fout,l);
fout << "\n";
}
void cmLocalCodeWarriorGenerator::AddFileMapping(std::ostream& fout,
const char *ftype,
const char *ext,
const char *comp,
const char *edit,
bool precomp,
bool launch,
bool res,
bool ignored)
{
fout << "\n";
fout << "FileType" << ftype <<
"\n";
fout << "FileExtension" << ext <<
"\n";
fout << "Compiler" << comp <<
"\n";
fout << "EditLanguage" << edit <<
"\n";
fout << "Precompile"
<< (precomp ? "true" : "false") << "\n";
fout << "Launchable"
<< (launch ? "true" : "false") << "\n";
fout << "ResourceFile"
<< (res ? "true" : "false") << "\n";
fout << "IgnoredByMake"
<< (ignored ? "true" : "false") << "\n";
fout << "\n";
}
void cmLocalCodeWarriorGenerator::WriteSettingList(std::ostream& fout,
const char *tgtName,
cmTarget const *l)
{
fout << "\n";
fout << "UserSourceTrees\n";
fout << "AlwaysSearchUserPathsfalse\n";
fout << "InterpretDOSAndUnixPathsfalse\n";
fout << "RequireFrameworkStyleIncludesfalse\n";
// list the include paths
fout << "UserSearchPaths\n";
std::vector& includes = m_Makefile->GetIncludeDirectories();
std::vector::iterator i = includes.begin();
for(;i != includes.end(); ++i)
{
fout << "\n";
fout << "SearchPath\n";
fout << "Path" << i->c_str() << "\n";
fout << "PathFormatGeneric\n";
fout << "PathRootAbsolute\n";
fout << "\n";
fout << "Recursivefalse\n";
fout << "FrameworkPathfalse\n";
fout << "HostFlagsAll\n";
fout << "\n";
}
fout << "\n";
fout << "SystemSearchPaths\n";
fout << "\n";
fout << "SearchPath\n";
fout << "Path:MSL:\n";
fout << "PathFormatMacOS\n";
fout << "PathRootCodeWarrior\n";
fout << "\n";
fout << "Recursivetrue\n";
fout << "FrameworkPathfalse\n";
fout << "HostFlagsAll\n";
fout << "\n";
fout << "\n";
fout << "SearchPath\n";
fout << "Path:MacOS Support:\n";
fout << "PathFormatMacOS\n";
fout << "PathRootCodeWarrior\n";
fout << "\n";
fout << "Recursivetrue\n";
fout << "FrameworkPathfalse\n";
fout << "HostFlagsAll\n";
fout << "\n";
fout << "\n";
fout << "MWRuntimeSettings_WorkingDirectory\n";
fout << "MWRuntimeSettings_CommandLine\n";
fout << "MWRuntimeSettings_HostApplication\n";
fout << "Path\n";
fout << "PathFormatGeneric\n";
fout << "PathRootAbsolute\n";
fout << "\n";
fout << "MWRuntimeSettings_EnvVars\n";
//
fout << "LinkerMacOS PPC Linker\n";
fout << "PreLinker\n";
fout << "PostLinker\n";
fout << "Targetname" << tgtName
<< "\n";
fout << "OutputDirectory\n";
fout << "Path:\n";
fout << "PathFormatMacOS\n";
fout << "PathRootProject\n";
fout << "\n";
fout << "SaveEntriesUsingRelativePathsfalse\n";
// add the cxx file type
fout << "FileMappings\n";
this->AddFileMapping(fout,"TEXT",".cxx","MW C/C++ PPC","C/C++",
false,false,false,false);
this->AddFileMapping(fout,"TEXT",".cpp","MW C/C++ PPC","C/C++",
false,false,false,false);
this->AddFileMapping(fout,"TEXT",".c","MW C/C++ PPC","C/C++",
false,false,false,false);
this->AddFileMapping(fout,"TEXT",".cc","MW C/C++ PPC","C/C++",
false,false,false,false);
this->AddFileMapping(fout,"TEXT",".cp","MW C/C++ PPC","C/C++",
false,false,false,false);
this->AddFileMapping(fout,"TEXT",".cpp","MW C/C++ PPC","C/C++",
false,false,false,false);
this->AddFileMapping(fout,"TEXT",".h","MW C/C++ PPC","C/C++",
false,false,false,true);
this->AddFileMapping(fout,"TEXT",".hpp","MW C/C++ PPC","C/C++",
false,false,false,true);
this->AddFileMapping(fout,"TEXT",".m","MW C/C++ PPC","C/C++",
false,false,false,false);
this->AddFileMapping(fout,"TEXT",".mm","MW C/C++ PPC","C/C++",
false,false,false,false);
fout << "\n";
//
fout << "MWProject_PPC_type";
switch (l->GetType())
{
case cmTarget::STATIC_LIBRARY:
fout << "Library" << "\n";
fout << "MWProject_PPC_outfile";
fout << tgtName << ".lib";
fout << "\n";
break;
case cmTarget::SHARED_LIBRARY:
case cmTarget::MODULE_LIBRARY:
// m_Makefile->GetDefinition("CMAKE_MODULE_SUFFIX");
fout << "Shared Library" << "\n";
fout << "MWProject_PPC_outfile";
fout << tgtName << ".dylib";
fout << "\n";
break;
case cmTarget::EXECUTABLE:
case cmTarget::WIN32_EXECUTABLE:
fout << "Application" << "\n";
fout << "MWProject_PPC_outfile";
fout << tgtName << cmSystemTools::GetExecutableExtension();
fout << "\n";
break;
default:;
}
fout << "MWProject_PPC_filecreator????" << "\n";
fout << "MWProject_PPC_filetypeAPPL\n";
fout << "MWProject_PPC_size384\n";
fout << "MWProject_PPC_minsize384\n";
fout << "MWProject_PPC_stacksize64\n";
fout << "MWProject_PPC_flags22720\n";
fout << "MWProject_PPC_symfilename\n";
fout << "MWProject_PPC_rsrcname\n";
fout << "MWProject_PPC_rsrcheaderNative\n";
fout << "MWProject_PPC_rsrctype????" << "\n";
fout << "MWProject_PPC_rsrcid0\n";
fout << "MWProject_PPC_rsrcflags0\n";
fout << "MWProject_PPC_rsrcstore0\n";
fout << "MWProject_PPC_rsrcmerge0\n";
fout << "MWProject_PPC_flatrsrc0\n";
fout << "MWProject_PPC_flatrsrcoutputdir\n";
fout << "Path:\n";
fout << "PathFormatMacOS\n";
fout << "PathRootProject\n";
fout << "\n";
fout << "MWProject_PPC_flatrsrcfilename\n";
/*
fout << "MWMerge_MacOS_outputCreator????\n";
fout << "MWMerge_MacOS_outputTypeAPPL\n";
fout << "MWMerge_MacOS_suppressWarning0\n";
fout << "MWMerge_MacOS_copyFragments1\n";
fout << "MWMerge_MacOS_copyResources1\n";
fout << "MWMerge_MacOS_flattenResource0\n";
fout << "MWMerge_MacOS_flatFileNamea.rsrc\n";
fout << "MWMerge_MacOS_flatFileOutputPath\n";
fout << "Path:\n";
fout << "PathFormatMacOS\n";
fout << "PathRootProject\n";
fout << "\n";
fout << "MWMerge_MacOS_skipResources\n";
*/
fout << "\n";
}
void cmLocalCodeWarriorGenerator::WriteFileList(std::ostream& fout,
const char* /*tgtName*/,
cmTarget const *l)
{
fout << "\n";
// for each file
std::vector const& classes = l->GetSourceFiles();
for(std::vector::const_iterator i = classes.begin();
i != classes.end(); i++)
{
// Add the file to the list of sources.
std::string source = (*i)->GetFullPath();
fout << "\n";
fout << "Absolute\n";
fout << "Absolute\n";
//fout << "common\n";
fout << "" << source << "\n";
fout << "Generic\n";
fout << "Text\n";
fout << "Debug\n";
fout << "\n";
}
// now add in the libraries we depend on
// now add in the system libs (for an executable)
if (l->GetType() == cmTarget::EXECUTABLE)
{
fout << "\n";
fout << "Name\n";
fout << "MSL RuntimePPC.Lib\n";
fout << "MacOS\n";
fout << "Library\n";
fout << "Debug\n";
fout << "\n";
}
fout << "\n";
}
void cmLocalCodeWarriorGenerator::WriteLinkOrder(std::ostream& fout,
const char* /*tgtName*/,
cmTarget const *l)
{
fout << "\n";
// for each file
std::vector const& classes = l->GetSourceFiles();
for(std::vector::const_iterator i = classes.begin();
i != classes.end(); i++)
{
// Add the file to the list of sources.
std::string source = (*i)->GetFullPath();
fout << "\n";
fout << "Absolute\n";
fout << "Absolute\n";
//fout << "common\n";
fout << "" << source << "\n";
fout << "Generic\n";
fout << "\n";
}
// now add in the system libs (for an executable)
if (l->GetType() == cmTarget::EXECUTABLE)
{
fout << "\n";
fout << "Name\n";
fout << "MSL RuntimePPC.Lib\n";
fout << "MacOS\n";
fout << "\n";
}
fout << "\n";
}
void cmLocalCodeWarriorGenerator::WriteGroups(std::ostream& fout)
{
cmTargets &tgts = m_Makefile->GetTargets();
for(cmTargets::iterator l = tgts.begin();
l != tgts.end(); l++)
{
this->WriteGroup(fout,l->first.c_str(),&(l->second));
}
}
void cmLocalCodeWarriorGenerator::WriteGroup(std::ostream& fout,
const char *tgtName,
cmTarget const *l)
{
fout << "" << tgtName << "\n";
// for each file
std::vector const& classes = l->GetSourceFiles();
for(std::vector::const_iterator i = classes.begin();
i != classes.end(); i++)
{
std::string source = (*i)->GetFullPath();
fout << "\n";
fout << "" << tgtName << "\n";
fout << "Absolute\n";
fout << "Absolute\n";
fout << "" << source << "\n";
fout << "Generic\n";
fout << "\n";
}
// write out the libraries groups
/*
Classic Release
Name
console.stubs.c
MacOS
*/
if (l->GetType() == cmTarget::EXECUTABLE)
{
fout << "\n";
fout << "" << tgtName << "\n";
fout << "Name\n";
fout << "MSL RuntimePPC.Lib\n";
fout << "MacOS\n";
fout << "\n";
}
/*
Classic Release
Name
MSL C++.PPC.Lib
MacOS
Classic Release
Name
MSL C.PPC.Lib
MacOS
Carbon Debug
Name
MSL C.CARBON.Lib
MacOS
*/
fout << "\n";
}