Replace with nmake subclassed generator
This commit is contained in:
parent
5b251bde7e
commit
e9d0ad180f
|
@ -1,826 +0,0 @@
|
||||||
#include "cmBorlandMakefileGenerator.h"
|
|
||||||
#include "cmMakefile.h"
|
|
||||||
#include "cmStandardIncludes.h"
|
|
||||||
#include "cmSystemTools.h"
|
|
||||||
#include "cmSourceFile.h"
|
|
||||||
#include "cmMakeDepend.h"
|
|
||||||
#include "cmCacheManager.h"
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
cmBorlandMakefileGenerator::cmBorlandMakefileGenerator()
|
|
||||||
{
|
|
||||||
m_CacheOnly = false;
|
|
||||||
m_Recurse = false;
|
|
||||||
}
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
void cmBorlandMakefileGenerator::GenerateMakefile()
|
|
||||||
{
|
|
||||||
// support override in output directories
|
|
||||||
if (m_Makefile->GetDefinition("LIBRARY_OUTPUT_PATH"))
|
|
||||||
{
|
|
||||||
m_LibraryOutputPath = m_Makefile->GetDefinition("LIBRARY_OUTPUT_PATH");
|
|
||||||
if(m_LibraryOutputPath.size())
|
|
||||||
{
|
|
||||||
std::string tempLibraryOutputPath = m_LibraryOutputPath;
|
|
||||||
if(tempLibraryOutputPath[tempLibraryOutputPath.size() -1] != '/')
|
|
||||||
{
|
|
||||||
tempLibraryOutputPath += "/";
|
|
||||||
}
|
|
||||||
if(!cmSystemTools::MakeDirectory(tempLibraryOutputPath.c_str()))
|
|
||||||
{
|
|
||||||
cmSystemTools::Error("Error failed create "
|
|
||||||
"LIBRARY_OUTPUT_PATH directory:",
|
|
||||||
tempLibraryOutputPath.c_str());
|
|
||||||
}
|
|
||||||
m_Makefile->AddLinkDirectory(m_LibraryOutputPath.c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (m_Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH"))
|
|
||||||
{
|
|
||||||
m_ExecutableOutputPath =
|
|
||||||
m_Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH");
|
|
||||||
if(m_ExecutableOutputPath.size())
|
|
||||||
{
|
|
||||||
std::string tempExecutableOutputPath = m_ExecutableOutputPath;
|
|
||||||
if(tempExecutableOutputPath[tempExecutableOutputPath.size() -1] != '/')
|
|
||||||
{
|
|
||||||
tempExecutableOutputPath += "/";
|
|
||||||
}
|
|
||||||
if(!cmSystemTools::MakeDirectory(tempExecutableOutputPath.c_str()))
|
|
||||||
{
|
|
||||||
cmSystemTools::Error("Error failed to create "
|
|
||||||
"EXECUTABLE_OUTPUT_PATH directory:",
|
|
||||||
tempExecutableOutputPath.c_str());
|
|
||||||
}
|
|
||||||
m_Makefile->AddLinkDirectory(m_ExecutableOutputPath.c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(m_ExecutableOutputPath.size() == 0)
|
|
||||||
{
|
|
||||||
m_ExecutableOutputPath = ".";
|
|
||||||
}
|
|
||||||
if(m_LibraryOutputPath.size() == 0)
|
|
||||||
{
|
|
||||||
m_LibraryOutputPath = ".";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_CacheOnly)
|
|
||||||
{
|
|
||||||
// Generate the cache only stuff
|
|
||||||
this->GenerateCacheOnly();
|
|
||||||
// if recurse then generate for all sub- makefiles
|
|
||||||
if (m_Recurse)
|
|
||||||
{
|
|
||||||
this->RecursiveGenerateCacheOnly();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
void cmBorlandMakefileGenerator::GenerateCacheOnly()
|
|
||||||
{
|
|
||||||
cmSystemTools::MakeDirectory(m_Makefile->GetStartOutputDirectory());
|
|
||||||
std::string dest = m_Makefile->GetStartOutputDirectory();
|
|
||||||
dest += "/makefile.mak";
|
|
||||||
this->OutputMakefile(dest.c_str());
|
|
||||||
}
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
void cmBorlandMakefileGenerator::RecursiveGenerateCacheOnly()
|
|
||||||
{
|
|
||||||
std::vector<cmMakefile*> makefiles;
|
|
||||||
m_Makefile->FindSubDirectoryCMakeListsFiles(makefiles);
|
|
||||||
for (std::vector<cmMakefile*>::iterator i=makefiles.begin();
|
|
||||||
i!=makefiles.end(); ++i)
|
|
||||||
{
|
|
||||||
cmMakefile* mf = *i;
|
|
||||||
cmBorlandMakefileGenerator* gen = new cmBorlandMakefileGenerator;
|
|
||||||
gen->SetCacheOnlyOn();
|
|
||||||
gen->SetRecurseOff();
|
|
||||||
mf->SetMakefileGenerator(gen);
|
|
||||||
mf->GenerateMakefile();
|
|
||||||
}
|
|
||||||
// CLEAN up the makefiles created
|
|
||||||
for (unsigned int i=0; i<makefiles.size(); ++i)
|
|
||||||
{
|
|
||||||
delete makefiles[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
// Add quotes regardless of spaces in the string
|
|
||||||
std::string cmBorlandMakefileGenerator::EscapeSpaces(const char* str)
|
|
||||||
{
|
|
||||||
std::string temp = "\"";;
|
|
||||||
temp += str;
|
|
||||||
temp += "\"";
|
|
||||||
return cmSystemTools::EscapeSpaces(temp.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
void cmBorlandMakefileGenerator::OutputMakefile(const char* file)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Create sub directories for aux source directories
|
|
||||||
//
|
|
||||||
std::vector<std::string>& auxSourceDirs =
|
|
||||||
m_Makefile->GetAuxSourceDirectories();
|
|
||||||
if ( auxSourceDirs.size() )
|
|
||||||
{
|
|
||||||
// For the case when this is running as a remote build
|
|
||||||
// on unix, make the directory
|
|
||||||
for (std::vector<std::string>::iterator i=auxSourceDirs.begin();
|
|
||||||
i!=auxSourceDirs.end(); ++i)
|
|
||||||
{
|
|
||||||
cmSystemTools::MakeDirectory(i->c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//
|
|
||||||
std::ofstream fout(file);
|
|
||||||
//
|
|
||||||
// Begin writing to makefile.mak
|
|
||||||
//
|
|
||||||
fout << "# CMAKE Borland (win32) makefile : Edit with Caution \n\n";
|
|
||||||
//
|
|
||||||
// Turn on Autodependency checking
|
|
||||||
//
|
|
||||||
fout << ".autodepend \n\n";
|
|
||||||
//
|
|
||||||
// Define all our compile and make flags/variables
|
|
||||||
//
|
|
||||||
std::string replace;
|
|
||||||
// Careful with these directory paths....\ vs /
|
|
||||||
replace = "BCBBINPATH = @BCB_BIN_PATH@ \n";
|
|
||||||
fout << m_Makefile->ExpandVariablesInString(replace);
|
|
||||||
replace = "BCB = $(BCBBINPATH)/.. \n";
|
|
||||||
fout << m_Makefile->ExpandVariablesInString(replace);
|
|
||||||
replace = "OUTDIRLIB = ";
|
|
||||||
replace += m_LibraryOutputPath;
|
|
||||||
replace += "\n";
|
|
||||||
fout << cmSystemTools::ConvertToWindowsSlashes(replace);
|
|
||||||
replace = "OUTDIREXE = ";
|
|
||||||
replace += m_ExecutableOutputPath;
|
|
||||||
replace += "\n";
|
|
||||||
fout << cmSystemTools::ConvertToWindowsSlashes(replace);
|
|
||||||
replace = "USERDEFINES = @DEFS_USER@ \n";
|
|
||||||
fout << m_Makefile->ExpandVariablesInString(replace);
|
|
||||||
replace = "SYSDEFINES = @DEFS_SYS@ \n";
|
|
||||||
fout << m_Makefile->ExpandVariablesInString(replace);
|
|
||||||
replace = "CMAKE_COMMAND = ${CMAKE_COMMAND} \n";
|
|
||||||
fout << m_Makefile->ExpandVariablesInString(replace);
|
|
||||||
replace = "CPP = \"$(BCBBINPATH)/BCC32.exe\" +CPP_PROJ.CFG \n";
|
|
||||||
fout << m_Makefile->ExpandVariablesInString(replace);
|
|
||||||
replace =
|
|
||||||
"CPPFLAGS_DEBUG = @FLAGS_CPP_DEBUG@ \n"
|
|
||||||
"CPPFLAGS_RELEASE = @FLAGS_CPP_RELEASE@ \n"
|
|
||||||
"CPPFLAGS_WARNING = @FLAGS_CPP_WARNING@ \n"
|
|
||||||
"LINKFLAGS_DLL = @FLAGS_LINK_DLL@ \n"
|
|
||||||
"LINKFLAGS_BPL = @FLAGS_LINK_BPL@ \n"
|
|
||||||
"LINKFLAGS_EXE = @FLAGS_LINK_EXE@ \n"
|
|
||||||
"LINKFLAGS_DEBUG = @FLAGS_LINK_DEBUG@ \n";
|
|
||||||
fout << m_Makefile->ExpandVariablesInString(replace);
|
|
||||||
replace = "LINKFLAGS_STATIC = @FLAGS_LINK_STATIC@ \n";
|
|
||||||
fout << m_Makefile->ExpandVariablesInString(replace);
|
|
||||||
fout << "CMAKE_CURRENT_SOURCE = " << m_Makefile->GetStartDirectory() << "\n";
|
|
||||||
fout << "CMAKE_CURRENT_BINARY = " << m_Makefile->GetStartOutputDirectory() << "\n";
|
|
||||||
fout << "OBJDIR = " << m_Makefile->GetStartOutputDirectory() << "\n";
|
|
||||||
fout << "CMAKEDEFINES = " << m_Makefile->GetDefineFlags() << "\n";
|
|
||||||
//
|
|
||||||
// create a make variable with all of the sources for this makefile for depend purposes.
|
|
||||||
//
|
|
||||||
std::vector<std::string> lfiles = m_Makefile->GetListFiles();
|
|
||||||
// sort the array
|
|
||||||
std::sort(lfiles.begin(), lfiles.end(), std::less<std::string>());
|
|
||||||
// remove duplicates
|
|
||||||
std::vector<std::string>::iterator new_end =
|
|
||||||
std::unique(lfiles.begin(), lfiles.end());
|
|
||||||
lfiles.erase(new_end, lfiles.end());
|
|
||||||
fout << "CMAKE_MAKEFILE_SOURCES = \\ \n";
|
|
||||||
std::string dir;
|
|
||||||
for (std::vector<std::string>::const_iterator i=lfiles.begin();
|
|
||||||
i!=lfiles.end(); ++i)
|
|
||||||
{
|
|
||||||
fout << " " << *i << " \\\n";
|
|
||||||
}
|
|
||||||
dir = m_Makefile->GetHomeOutputDirectory();
|
|
||||||
dir += "/CMakeCache.txt";
|
|
||||||
fout << " " << dir << "\n\n";
|
|
||||||
//
|
|
||||||
// Output Include paths
|
|
||||||
//
|
|
||||||
std::vector<std::string>& includes = m_Makefile->GetIncludeDirectories();
|
|
||||||
fout << "INCLUDEPATH =";
|
|
||||||
for (std::vector<std::string>::iterator i=includes.begin();
|
|
||||||
i!=includes.end(); ++i)
|
|
||||||
{
|
|
||||||
std::string include = *i;
|
|
||||||
fout << "-I" << cmBorlandMakefileGenerator::EscapeSpaces(i->c_str()) << "; \\\n ";
|
|
||||||
}
|
|
||||||
fout << "-I" <<
|
|
||||||
cmBorlandMakefileGenerator::EscapeSpaces(m_Makefile->GetStartDirectory()) << "\n\n";
|
|
||||||
//
|
|
||||||
// for each target add to the list of targets
|
|
||||||
//
|
|
||||||
fout << "TARGETS = ";
|
|
||||||
const cmTargets &tgts = m_Makefile->GetTargets();
|
|
||||||
// list libraries first
|
|
||||||
for (cmTargets::const_iterator l=tgts.begin();
|
|
||||||
l!=tgts.end(); ++l)
|
|
||||||
{
|
|
||||||
if ((l->second.GetType() == cmTarget::STATIC_LIBRARY)
|
|
||||||
&& l->second.IsInAll())
|
|
||||||
{
|
|
||||||
fout << " \\\n $(OUTDIRLIB)\\" << l->first.c_str() << ".lib";
|
|
||||||
}
|
|
||||||
if ((l->second.GetType() == cmTarget::SHARED_LIBRARY) && l->second.IsInAll())
|
|
||||||
{
|
|
||||||
fout << " \\\n $(OUTDIRLIB)\\" << l->first.c_str() << ".dll";
|
|
||||||
}
|
|
||||||
if ((l->second.GetType() == cmTarget::MODULE_LIBRARY) && l->second.IsInAll())
|
|
||||||
{
|
|
||||||
fout << " \\\n $(OUTDIRLIB)\\" << l->first.c_str() << ".bpl";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// executables
|
|
||||||
for (cmTargets::const_iterator l=tgts.begin(); l!=tgts.end(); l++)
|
|
||||||
{
|
|
||||||
if ((l->second.GetType() == cmTarget::EXECUTABLE
|
|
||||||
|| l->second.GetType() == cmTarget::WIN32_EXECUTABLE) && l->second.IsInAll())
|
|
||||||
{
|
|
||||||
fout << " \\\n " << l->first.c_str() << ".exe";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// list utilities last
|
|
||||||
for (cmTargets::const_iterator l=tgts.begin(); l!=tgts.end(); l++)
|
|
||||||
{
|
|
||||||
if (l->second.GetType() == cmTarget::UTILITY && l->second.IsInAll())
|
|
||||||
{
|
|
||||||
fout << " \\\n " << l->first.c_str();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fout << "\n\n";
|
|
||||||
//
|
|
||||||
// Now create the source file groups for each target
|
|
||||||
//
|
|
||||||
for (cmTargets::const_iterator l=tgts.begin(); l!=tgts.end(); l++)
|
|
||||||
{
|
|
||||||
std::vector<cmSourceFile> classes = l->second.GetSourceFiles();
|
|
||||||
if (classes.begin() != classes.end())
|
|
||||||
{
|
|
||||||
fout << l->first << "_SRC_OBJS = ";
|
|
||||||
for (std::vector<cmSourceFile>::iterator i=classes.begin(); i!=classes.end(); i++)
|
|
||||||
{
|
|
||||||
std::string ext = i->GetSourceExtension();
|
|
||||||
if (!i->IsAHeaderFileOnly() && (ext!="def" && ext!="rc"))
|
|
||||||
{
|
|
||||||
std::string sourceName = i->GetSourceName();
|
|
||||||
cmSystemTools::ConvertToWindowsSlashes(sourceName);
|
|
||||||
fout << " \\\n " <<
|
|
||||||
sourceName
|
|
||||||
<< ".obj ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fout << "\n\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// Create the link dir list - use same for all targets
|
|
||||||
//
|
|
||||||
std::vector<std::string> linkdirs = m_Makefile->GetLinkDirectories();
|
|
||||||
replace = "@BCB_BIN_PATH@/../lib";
|
|
||||||
m_Makefile->ExpandVariablesInString(replace);
|
|
||||||
linkdirs.push_back(replace);
|
|
||||||
replace = "@BCB_BIN_PATH@/../lib/debug";
|
|
||||||
m_Makefile->ExpandVariablesInString(replace);
|
|
||||||
linkdirs.push_back(replace);
|
|
||||||
fout << "LINK_DIR =";
|
|
||||||
for (std::vector<std::string>::const_iterator d=linkdirs.begin(); d!=linkdirs.end(); d++)
|
|
||||||
{
|
|
||||||
std::string temp = cmBorlandMakefileGenerator::EscapeSpaces(d->c_str());
|
|
||||||
fout << temp << ";";
|
|
||||||
}
|
|
||||||
fout << "\n\n";
|
|
||||||
//
|
|
||||||
// Create the link lib list for each target
|
|
||||||
// We also want to make all of these lib/bpi dependencies of the
|
|
||||||
// target, but Borland MAKE is very annoying and insists on the full
|
|
||||||
// path being used on the dependency line.
|
|
||||||
// If lib is a target add OUTDIRLIB
|
|
||||||
// otherwise try to find full path....
|
|
||||||
//
|
|
||||||
// do .lib files
|
|
||||||
std::string libname;
|
|
||||||
for (cmTargets::const_iterator t=tgts.begin(); t!=tgts.end(); t++)
|
|
||||||
{
|
|
||||||
cmTarget::LinkLibraries const& libs = t->second.GetLinkLibraries();
|
|
||||||
|
|
||||||
if ((t->second.GetType() == cmTarget::STATIC_LIBRARY) ||
|
|
||||||
(t->second.GetType() == cmTarget::SHARED_LIBRARY) ||
|
|
||||||
(t->second.GetType() == cmTarget::MODULE_LIBRARY) ||
|
|
||||||
(t->second.GetType() == cmTarget::EXECUTABLE) ||
|
|
||||||
(t->second.GetType() == cmTarget::WIN32_EXECUTABLE))
|
|
||||||
{
|
|
||||||
fout << t->first << "_LINK_LIB = ";
|
|
||||||
for (cmTarget::LinkLibraries::const_iterator l=libs.begin();
|
|
||||||
l!=libs.end(); l++)
|
|
||||||
{
|
|
||||||
if ((t->first!=l->first) &&
|
|
||||||
(t->second.GetType()!=cmTarget::INSTALL_FILES
|
|
||||||
|| t->second.GetType()!=cmTarget::INSTALL_PROGRAMS))
|
|
||||||
{
|
|
||||||
// Get the lib name
|
|
||||||
libname = l->first;
|
|
||||||
// reject any bpi files
|
|
||||||
if (l->first.find(".bpi")!=std::string::npos) continue;
|
|
||||||
// make sure it has .lib extension
|
|
||||||
cmSystemTools::ReplaceString(libname, ".lib", "");
|
|
||||||
libname += ".lib";
|
|
||||||
// if this lib is not a target then don't add OUTDIRLIB to it
|
|
||||||
// but do try to find complete path
|
|
||||||
if (tgts.find(l->first)==tgts.end())
|
|
||||||
{
|
|
||||||
std::string path = cmSystemTools::FindFile(libname.c_str(),linkdirs);
|
|
||||||
if (path.size())
|
|
||||||
{
|
|
||||||
libname = path;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
// if we can't find it - and it's not a target - and it has no path
|
|
||||||
// already specified, it must be in OUTDIRLIB from another
|
|
||||||
// makefile in the same project !
|
|
||||||
{
|
|
||||||
std::string path = cmSystemTools::GetFilenamePath(libname);
|
|
||||||
if (path.size()==0)
|
|
||||||
{
|
|
||||||
libname = "$(OUTDIRLIB)\\" + libname;
|
|
||||||
}
|
|
||||||
// otherwise just leave it alone
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
libname = "$(OUTDIRLIB)\\" + libname;
|
|
||||||
}
|
|
||||||
fout << " \\\n " << cmBorlandMakefileGenerator::EscapeSpaces(libname.c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fout << "\n\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Create the link bpi list for each target : see notes above for lib files
|
|
||||||
for (cmTargets::const_iterator t=tgts.begin(); t!=tgts.end(); t++)
|
|
||||||
{
|
|
||||||
cmTarget::LinkLibraries const& libs = t->second.GetLinkLibraries();
|
|
||||||
|
|
||||||
if ((t->second.GetType() == cmTarget::STATIC_LIBRARY) ||
|
|
||||||
(t->second.GetType() == cmTarget::SHARED_LIBRARY) ||
|
|
||||||
(t->second.GetType() == cmTarget::MODULE_LIBRARY) ||
|
|
||||||
(t->second.GetType() == cmTarget::EXECUTABLE) ||
|
|
||||||
(t->second.GetType() == cmTarget::WIN32_EXECUTABLE))
|
|
||||||
{
|
|
||||||
fout << t->first << "_LINK_BPI = ";
|
|
||||||
for (cmTarget::LinkLibraries::const_iterator l=libs.begin();
|
|
||||||
l!=libs.end(); l++)
|
|
||||||
{
|
|
||||||
if ((t->first!=l->first) &&
|
|
||||||
(t->second.GetType()!=cmTarget::INSTALL_FILES
|
|
||||||
|| t->second.GetType()!=cmTarget::INSTALL_PROGRAMS))
|
|
||||||
{
|
|
||||||
// Get the lib name
|
|
||||||
libname = l->first;
|
|
||||||
// only allow bpi files
|
|
||||||
if (l->first.find(".bpi")==std::string::npos) continue;
|
|
||||||
// if this bpi is not a target then don't add OUTDIRLIB to it
|
|
||||||
// but do try to find complete path
|
|
||||||
if (tgts.find(l->first)==tgts.end())
|
|
||||||
{
|
|
||||||
std::string path = cmSystemTools::FindFile(libname.c_str(),linkdirs);
|
|
||||||
if (path.size())
|
|
||||||
{
|
|
||||||
libname = path;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
// if we can't find it - and it's not a target - and it has no path
|
|
||||||
// already specified, it must be in OUTDIRLIB from another
|
|
||||||
// makefile in the same project !
|
|
||||||
{
|
|
||||||
std::string path = cmSystemTools::GetFilenamePath(libname);
|
|
||||||
if (path.size()==0)
|
|
||||||
{
|
|
||||||
libname = "$(OUTDIRLIB)\\" + libname;
|
|
||||||
}
|
|
||||||
// otherwise just leave it alone
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
libname = "$(OUTDIRLIB)\\" + libname;
|
|
||||||
}
|
|
||||||
fout << " \\\n " << cmBorlandMakefileGenerator::EscapeSpaces(libname.c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fout << "\n\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// The project rule - Build All targets
|
|
||||||
//
|
|
||||||
fout << "DEFAULT : \n";
|
|
||||||
fout << " @$(MAKE) makefile.mak \n";
|
|
||||||
fout << " @$(MAKE) ALL \n\n";
|
|
||||||
//
|
|
||||||
// Create a rule to allow us to setup the compiler and output dir
|
|
||||||
//
|
|
||||||
fout << "PREPARE : \n";
|
|
||||||
fout << " @if not exist \"$(OBJDIR)/.\" md \"$(OBJDIR)\" \n";
|
|
||||||
fout << " @copy &&| \n";
|
|
||||||
fout << " $(SYSDEFINES) $(CMAKEDEFINES) $(USERDEFINES)\n";
|
|
||||||
fout << " $(CPPFLAGS_DEBUG) $(CPPFLAGS_WARNING) \n";
|
|
||||||
fout << " $(INCLUDEPATH) \n";
|
|
||||||
fout << " -I\"$(BCB)/include\";\"$(BCB)/include/rw\";\"$(BCB)/include/vcl\"; \n";
|
|
||||||
fout << "| CPP_PROJ.CFG \n\n";
|
|
||||||
//
|
|
||||||
this->OutputDependencies(fout);
|
|
||||||
this->OutputTargets(fout);
|
|
||||||
this->OutputSubDirectoryRules(fout);
|
|
||||||
//
|
|
||||||
this->OutputCustomRules(fout);
|
|
||||||
this->OutputMakeRules(fout);
|
|
||||||
//
|
|
||||||
// We'll omit current dir in path where possible
|
|
||||||
std::string fullname, outpath = m_Makefile->GetStartOutputDirectory();
|
|
||||||
outpath += "/";
|
|
||||||
//
|
|
||||||
for (cmTargets::const_iterator l=tgts.begin(); l!=tgts.end(); l++)
|
|
||||||
{
|
|
||||||
std::vector<cmSourceFile> classes = l->second.GetSourceFiles();
|
|
||||||
if (classes.begin() != classes.end())
|
|
||||||
{
|
|
||||||
for (std::vector<cmSourceFile>::iterator i=classes.begin(); i!=classes.end(); i++)
|
|
||||||
{
|
|
||||||
if (!i->IsAHeaderFileOnly())
|
|
||||||
{
|
|
||||||
fullname = i->GetFullPath();
|
|
||||||
cmSystemTools::ReplaceString(fullname, outpath.c_str(), "");
|
|
||||||
std::string sourceName = i->GetSourceName();
|
|
||||||
cmSystemTools::ConvertToWindowsSlashes(sourceName);
|
|
||||||
fout << ""
|
|
||||||
<< sourceName
|
|
||||||
<< ".obj : " << fullname << "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//
|
|
||||||
//
|
|
||||||
fout << "\n# End of File\n";
|
|
||||||
}
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
// output the list of libraries that the executables in this makefile will depend on.
|
|
||||||
void cmBorlandMakefileGenerator::OutputDependencies(std::ostream& fout)
|
|
||||||
{
|
|
||||||
// not required with the Borland generator
|
|
||||||
// .autodepend
|
|
||||||
// is added to the start of the makefile to enable automatic dependency
|
|
||||||
// checking of source files
|
|
||||||
}
|
|
||||||
|
|
||||||
void cmBorlandMakefileGenerator::OutputTargets(std::ostream& fout)
|
|
||||||
{
|
|
||||||
// Do Libraries first as executables may depend on them
|
|
||||||
const cmTargets &tgts = m_Makefile->GetTargets();
|
|
||||||
for (cmTargets::const_iterator l=tgts.begin(); l!=tgts.end(); l++)
|
|
||||||
{
|
|
||||||
if (l->second.GetType() == cmTarget::STATIC_LIBRARY)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// WARNING. TLIB fails with Unix style Forward slashes - use $(OUTDIRLIB)\\
|
|
||||||
//
|
|
||||||
fout << "# this should be a static library \n";
|
|
||||||
fout << "$(OUTDIRLIB)\\" << l->first << ".lib : ${" << l->first << "_SRC_OBJS} ${" << l->first << "_LINK_LIB} ${" << l->first << "_LINK_BPI} \n";
|
|
||||||
std::string Libname = "$(OUTDIRLIB)\\" + l->first + ".lib";
|
|
||||||
fout << " TLib.exe $(LINKFLAGS_STATIC) /u " << Libname.c_str() << " @&&| \n";
|
|
||||||
fout << " $? \n";
|
|
||||||
fout << "| \n\n";
|
|
||||||
}
|
|
||||||
if (l->second.GetType() == cmTarget::SHARED_LIBRARY)
|
|
||||||
{
|
|
||||||
fout << "# this should be a shared (DLL) library \n";
|
|
||||||
fout << "$(OUTDIRLIB)\\" << l->first << ".dll : ${" << l->first << "_SRC_OBJS} ${" << l->first << "_LINK_LIB} ${" << l->first << "_LINK_BPI} \n";
|
|
||||||
fout << " @ilink32.exe @&&| \n";
|
|
||||||
fout << " -L$(LINK_DIR) $(LINKFLAGS_DLL) $(LINKFLAGS_DEBUG) \"$(BCB)/lib/c0d32.obj\" ";
|
|
||||||
fout << "$(" << l->first << "_LINK_BPI) ";
|
|
||||||
fout << "$(" << l->first << "_SRC_OBJS) , $<, $*, ";
|
|
||||||
fout << "$(" << l->first << "_LINK_LIB) import32.lib cw32mti.lib \n";
|
|
||||||
fout << "| \n";
|
|
||||||
fout << " @implib -w " << "$(OUTDIRLIB)\\" << l->first << ".lib " << "$(OUTDIRLIB)\\" << l->first << ".dll \n\n";
|
|
||||||
}
|
|
||||||
if (l->second.GetType() == cmTarget::MODULE_LIBRARY)
|
|
||||||
{
|
|
||||||
fout << "# this should be a Borland Package library \n";
|
|
||||||
fout << "$(OUTDIRLIB)\\" << l->first << ".bpl : ${" << l->first << "_SRC_OBJS} ${" << l->first << "_LINK_LIB} ${" << l->first << "_LINK_BPI} \n";
|
|
||||||
fout << " @ilink32.exe @&&| \n";
|
|
||||||
fout << " -L\"$(BCB)/lib\" -L$(LINK_DIR) $(LINKFLAGS_BPL) $(LINKFLAGS_DEBUG) \"$(BCB)/lib/c0pkg32.obj \" ";
|
|
||||||
fout << "$(" << l->first << "_LINK_BPI) Memmgr.lib sysinit.obj ";
|
|
||||||
fout << "$(" << l->first << "_SRC_OBJS) , $<, $*, ";
|
|
||||||
fout << "$(" << l->first << "_LINK_LIB) import32.lib cp32mti.lib \n";
|
|
||||||
fout << "| \n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Do Executables
|
|
||||||
for (cmTargets::const_iterator l=tgts.begin(); l!=tgts.end(); l++)
|
|
||||||
{
|
|
||||||
if (l->second.GetType()==cmTarget::WIN32_EXECUTABLE)
|
|
||||||
{
|
|
||||||
fout << l->first << ".exe : ${" << l->first << "_SRC_OBJS} ${" << l->first << "_LINK_LIB} ${" << l->first << "_LINK_BPI} \n";
|
|
||||||
fout << " @ilink32.exe @&&| \n";
|
|
||||||
fout << " -L\"$(BCB)/lib\" -L$(LINK_DIR) $(LINKFLAGS_EXE) $(LINKFLAGS_DEBUG) \"$(BCB)/lib/c0w32.obj\" ";
|
|
||||||
fout << "$(" << l->first << "_LINK_BPI) Memmgr.lib sysinit.obj ";
|
|
||||||
fout << "$(" << l->first << "_SRC_OBJS) , $<, $*, ";
|
|
||||||
fout << "$(" << l->first << "_LINK_LIB) import32.lib cp32mti.lib \n";
|
|
||||||
fout << "| \n\n";
|
|
||||||
}
|
|
||||||
else if (l->second.GetType()==cmTarget::EXECUTABLE)
|
|
||||||
{
|
|
||||||
fout << l->first << ".exe : ${" << l->first << "_SRC_OBJS} ${" << l->first << "_LINK_LIB} ${" << l->first << "_LINK_BPI} \n";
|
|
||||||
fout << " @ilink32.exe @&&| \n";
|
|
||||||
fout << " -L\"$(BCB)/lib\" -L$(LINK_DIR) $(LINKFLAGS_EXE) $(LINKFLAGS_DEBUG) \"$(BCB)/lib/c0x32.obj\" ";
|
|
||||||
fout << "$(" << l->first << "_SRC_OBJS) , $<, $*, ";
|
|
||||||
fout << "$(" << l->first << "_LINK_LIB) import32.lib cw32mti.lib \n";
|
|
||||||
fout << "| \n\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
void cmBorlandMakefileGenerator::OutputSubDirectoryRules(std::ostream& fout)
|
|
||||||
{
|
|
||||||
// output rules for decending into sub directories
|
|
||||||
const std::vector<std::string>& SubDirectories = m_Makefile->GetSubDirectories();
|
|
||||||
//
|
|
||||||
if ( SubDirectories.size() == 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
this->OutputSubDirectoryVars(fout, "SUBDIR_BUILD", "build",
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
SubDirectories);
|
|
||||||
}
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
// fix up names of directories so they can be used
|
|
||||||
// as targets in makefiles.
|
|
||||||
inline std::string FixDirectoryName(const char* dir)
|
|
||||||
{
|
|
||||||
std::string s = dir;
|
|
||||||
// replace ../ with 3 under bars
|
|
||||||
size_t pos = s.find("../");
|
|
||||||
if (pos != std::string::npos)
|
|
||||||
{
|
|
||||||
s.replace(pos, 3, "___");
|
|
||||||
}
|
|
||||||
// replace / directory separators with a single under bar
|
|
||||||
pos = s.find("/");
|
|
||||||
while(pos != std::string::npos)
|
|
||||||
{
|
|
||||||
s.replace(pos, 1, "_");
|
|
||||||
pos = s.find("/");
|
|
||||||
}
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
void cmBorlandMakefileGenerator::OutputSubDirectoryVars(std::ostream& fout,
|
|
||||||
const char* var,
|
|
||||||
const char* target,
|
|
||||||
const char* target1,
|
|
||||||
const char* target2,
|
|
||||||
const std::vector<std::string>& SubDirectories)
|
|
||||||
{
|
|
||||||
if (!SubDirectories.size()) return;
|
|
||||||
//
|
|
||||||
fout << "# Variable for making " << target << " in subdirectories.\n";
|
|
||||||
fout << var << " = \\\n";
|
|
||||||
unsigned int i;
|
|
||||||
for (i =0; i < SubDirectories.size(); i++)
|
|
||||||
{
|
|
||||||
std::string subdir = FixDirectoryName(SubDirectories[i].c_str());
|
|
||||||
fout << " " << target << "_" << subdir.c_str();
|
|
||||||
if (i == SubDirectories.size()-1)
|
|
||||||
{
|
|
||||||
fout << " \n\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fout << " \\\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//
|
|
||||||
fout << "# Targets for making " << target << " in subdirectories.\n";
|
|
||||||
for (unsigned int i=0; i<SubDirectories.size(); i++)
|
|
||||||
{
|
|
||||||
std::string subdir = FixDirectoryName(SubDirectories[i].c_str());
|
|
||||||
fout << target << "_" << subdir.c_str() << ":\n";
|
|
||||||
fout << " cd " << m_Makefile->GetStartOutputDirectory() << "/" << SubDirectories[i] << " \n";
|
|
||||||
fout << " make makefile.mak\n";
|
|
||||||
fout << " make \n\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Output each custom rule in the following format:
|
|
||||||
// output: source depends...
|
|
||||||
// (tab) command...
|
|
||||||
|
|
||||||
// This routine is copied direct from unix makefile generator
|
|
||||||
void cmBorlandMakefileGenerator::OutputCustomRules(std::ostream& fout)
|
|
||||||
{
|
|
||||||
// We may be modifying the source groups temporarily, so make a copy.
|
|
||||||
std::vector<cmSourceGroup> sourceGroups = m_Makefile->GetSourceGroups();
|
|
||||||
|
|
||||||
const cmTargets &tgts = m_Makefile->GetTargets();
|
|
||||||
for(cmTargets::const_iterator tgt = tgts.begin();
|
|
||||||
tgt != tgts.end(); ++tgt)
|
|
||||||
{
|
|
||||||
// add any custom rules to the source groups
|
|
||||||
for (std::vector<cmCustomCommand>::const_iterator cr =
|
|
||||||
tgt->second.GetCustomCommands().begin();
|
|
||||||
cr != tgt->second.GetCustomCommands().end(); ++cr)
|
|
||||||
{
|
|
||||||
cmSourceGroup& sourceGroup =
|
|
||||||
m_Makefile->FindSourceGroup(cr->GetSourceName().c_str(),
|
|
||||||
sourceGroups);
|
|
||||||
cmCustomCommand cc(*cr);
|
|
||||||
cc.ExpandVariables(*m_Makefile);
|
|
||||||
sourceGroup.AddCustomCommand(cc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Loop through every source group.
|
|
||||||
for(std::vector<cmSourceGroup>::const_iterator sg =
|
|
||||||
sourceGroups.begin(); sg != sourceGroups.end(); ++sg)
|
|
||||||
{
|
|
||||||
const cmSourceGroup::BuildRules& buildRules = sg->GetBuildRules();
|
|
||||||
if(buildRules.empty())
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string name = sg->GetName();
|
|
||||||
if(name != "")
|
|
||||||
{
|
|
||||||
fout << "# Start of source group \"" << name.c_str() << "\"\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Loop through each source in the source group.
|
|
||||||
for(cmSourceGroup::BuildRules::const_iterator cc =
|
|
||||||
buildRules.begin(); cc != buildRules.end(); ++ cc)
|
|
||||||
{
|
|
||||||
std::string source = cc->first;
|
|
||||||
const cmSourceGroup::Commands& commands = cc->second;
|
|
||||||
// Loop through every command generating code from the current source.
|
|
||||||
for(cmSourceGroup::Commands::const_iterator c = commands.begin();
|
|
||||||
c != commands.end(); ++c)
|
|
||||||
{
|
|
||||||
std::string command = c->first;
|
|
||||||
const cmSourceGroup::CommandFiles& commandFiles = c->second;
|
|
||||||
// if the command has no outputs, then it is a utility command
|
|
||||||
// with no outputs
|
|
||||||
if(commandFiles.m_Outputs.size() == 0)
|
|
||||||
{
|
|
||||||
fout << source.c_str() << ": ";
|
|
||||||
// Write out all the dependencies for this rule.
|
|
||||||
for(std::set<std::string>::const_iterator d =
|
|
||||||
commandFiles.m_Depends.begin();
|
|
||||||
d != commandFiles.m_Depends.end(); ++d)
|
|
||||||
{
|
|
||||||
std::string dep = cmBorlandMakefileGenerator::EscapeSpaces(d->c_str());
|
|
||||||
fout << " " << dep.c_str();
|
|
||||||
}
|
|
||||||
fout << "\n\t" << command.c_str() << "\n\n";
|
|
||||||
}
|
|
||||||
// Write a rule for every output generated by this command.
|
|
||||||
for(std::set<std::string>::const_iterator output =
|
|
||||||
commandFiles.m_Outputs.begin();
|
|
||||||
output != commandFiles.m_Outputs.end(); ++output)
|
|
||||||
{
|
|
||||||
std::string src = cmBorlandMakefileGenerator::EscapeSpaces(source.c_str());
|
|
||||||
fout << output->c_str() << ": " << src.c_str();
|
|
||||||
// Write out all the dependencies for this rule.
|
|
||||||
for(std::set<std::string>::const_iterator d =
|
|
||||||
commandFiles.m_Depends.begin();
|
|
||||||
d != commandFiles.m_Depends.end(); ++d)
|
|
||||||
{
|
|
||||||
std::string dep = cmBorlandMakefileGenerator::EscapeSpaces(d->c_str());
|
|
||||||
fout << " " << dep.c_str();
|
|
||||||
}
|
|
||||||
fout << "\n\t" << command.c_str() << "\n\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(name != "")
|
|
||||||
{
|
|
||||||
fout << "# End of source group \"" << name.c_str() << "\"\n\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void cmBorlandMakefileGenerator::OutputMakeRules(std::ostream& fout)
|
|
||||||
{
|
|
||||||
this->OutputMakeRule(fout,
|
|
||||||
"Rule to build c file(s)",
|
|
||||||
".c.obj",
|
|
||||||
0,
|
|
||||||
"$(CPP) -n$(OBJDIR) {$< }");
|
|
||||||
this->OutputMakeRule(fout,
|
|
||||||
"Rule to build cpp file(s)",
|
|
||||||
".cpp.obj",
|
|
||||||
0,
|
|
||||||
"$(CPP) -n$(OBJDIR) {$< }");
|
|
||||||
this->OutputMakeRule(fout,
|
|
||||||
"Rule to build cxx file(s)",
|
|
||||||
".cxx.obj",
|
|
||||||
0,
|
|
||||||
"$(CPP) -Pcxx -n$(OBJDIR) {$< }");
|
|
||||||
this->OutputMakeRule(fout,
|
|
||||||
"The project ALL rule",
|
|
||||||
"ALL",
|
|
||||||
"PREPARE ${TARGETS} ${SUBDIR_BUILD} ${CMAKE_COMMAND}",
|
|
||||||
0);
|
|
||||||
this->OutputMakeRule(fout,
|
|
||||||
"Rule to build the makefile",
|
|
||||||
"makefile.mak",
|
|
||||||
"${CMAKE_COMMAND} ${CMAKE_MAKEFILE_SOURCES} ",
|
|
||||||
"${CMAKE_COMMAND} "
|
|
||||||
"-H${CMAKE_SOURCE_DIR} -B${CMAKE_BINARY_DIR}");
|
|
||||||
this->OutputMakeRule(fout,
|
|
||||||
"Rebuild the cache",
|
|
||||||
"${CMAKE_BINARY_DIR}/CMakeCache.txt",
|
|
||||||
0,
|
|
||||||
"${CMAKE_COMMAND} "
|
|
||||||
"-H${CMAKE_SOURCE_DIR} -B${CMAKE_BINARY_DIR}");
|
|
||||||
this->OutputMakeRule(fout,
|
|
||||||
"Rebuild cmake dummy rule",
|
|
||||||
"${CMAKE_COMMAND}",
|
|
||||||
0,
|
|
||||||
"echo \"cmake might be out of date\"");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void cmBorlandMakefileGenerator::OutputMakeRule(std::ostream& fout,
|
|
||||||
const char* comment,
|
|
||||||
const char* target,
|
|
||||||
const char* depends,
|
|
||||||
const char* command)
|
|
||||||
{
|
|
||||||
std::string replace;
|
|
||||||
if (comment)
|
|
||||||
{
|
|
||||||
replace = comment;
|
|
||||||
m_Makefile->ExpandVariablesInString(replace);
|
|
||||||
fout << "# " << comment << " \n";
|
|
||||||
}
|
|
||||||
//
|
|
||||||
replace = target;
|
|
||||||
m_Makefile->ExpandVariablesInString(replace);
|
|
||||||
fout << replace.c_str() << ": ";
|
|
||||||
if (depends)
|
|
||||||
{
|
|
||||||
replace = depends;
|
|
||||||
m_Makefile->ExpandVariablesInString(replace);
|
|
||||||
fout << replace.c_str();
|
|
||||||
}
|
|
||||||
fout << "\n";
|
|
||||||
//
|
|
||||||
if (command)
|
|
||||||
{
|
|
||||||
replace = command;
|
|
||||||
m_Makefile->ExpandVariablesInString(replace);
|
|
||||||
fout << " " << replace.c_str() << " \n";
|
|
||||||
}
|
|
||||||
fout << "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void cmBorlandMakefileGenerator::SetLocal (bool local)
|
|
||||||
{
|
|
||||||
if (local)
|
|
||||||
{
|
|
||||||
m_CacheOnly = false;
|
|
||||||
m_Recurse = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_CacheOnly = true;
|
|
||||||
m_Recurse = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void cmBorlandMakefileGenerator::ComputeSystemInfo()
|
|
||||||
{
|
|
||||||
// now load the settings
|
|
||||||
if (!m_Makefile->GetDefinition("CMAKE_ROOT"))
|
|
||||||
{
|
|
||||||
cmSystemTools::Error("CMAKE_ROOT has not been defined, bad GUI or driver program");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
std::string fpath = m_Makefile->GetDefinition("CMAKE_ROOT");
|
|
||||||
fpath += "/Templates/CMakeWindowsBorlandConfig.cmake";
|
|
||||||
m_Makefile->ReadListFile(NULL,fpath.c_str());
|
|
||||||
}
|
|
|
@ -1,92 +0,0 @@
|
||||||
#ifndef cmBorlandMakefileGenerator_h
|
|
||||||
#define cmBorlandMakefileGenerator_h
|
|
||||||
|
|
||||||
#include "cmMakefile.h"
|
|
||||||
#include "cmMakefileGenerator.h"
|
|
||||||
|
|
||||||
/** \class cmBorlandMakefileGenerator
|
|
||||||
* \brief Write Borland BCB5 compatible makefiles.
|
|
||||||
*
|
|
||||||
* cmBorlandMakefileGenerator produces Borland BCB5 compatible makefiles
|
|
||||||
*/
|
|
||||||
class cmBorlandMakefileGenerator : public cmMakefileGenerator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
///! Set cache only and recurse to false by default.
|
|
||||||
cmBorlandMakefileGenerator();
|
|
||||||
|
|
||||||
///! Get the name for the generator.
|
|
||||||
virtual const char* GetName() {return "Borland Makefiles";}
|
|
||||||
|
|
||||||
///! virtual copy constructor
|
|
||||||
virtual cmMakefileGenerator* CreateObject()
|
|
||||||
{ return new cmBorlandMakefileGenerator;}
|
|
||||||
|
|
||||||
//! just sets the Cache Only and Recurse flags
|
|
||||||
virtual void SetLocal(bool local);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If cache only is on.
|
|
||||||
* Only stub makefiles are generated, and no depends, for speed.
|
|
||||||
* The default is OFF.
|
|
||||||
**/
|
|
||||||
void SetCacheOnlyOn() {m_CacheOnly = true;}
|
|
||||||
void SetCacheOnlyOff() {m_CacheOnly = false;}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If recurse is on, then all the makefiles below this one are parsed as well.
|
|
||||||
*/
|
|
||||||
void SetRecurseOn() {m_Recurse = true;}
|
|
||||||
void SetRecurseOff() {m_Recurse = false;}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Produce the makefile (in this case a Unix makefile).
|
|
||||||
*/
|
|
||||||
virtual void GenerateMakefile();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Output the depend information for all the classes
|
|
||||||
* in the makefile. These would have been generated
|
|
||||||
* by the class cmMakeDepend.
|
|
||||||
*/
|
|
||||||
void OutputObjectDepends(std::ostream&);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Try to determine system infomation such as shared library
|
|
||||||
* extension, pthreads, byte order etc.
|
|
||||||
*/
|
|
||||||
virtual void ComputeSystemInfo();
|
|
||||||
|
|
||||||
private:
|
|
||||||
void RecursiveGenerateCacheOnly();
|
|
||||||
void GenerateCacheOnly();
|
|
||||||
void OutputMakefile(const char* file);
|
|
||||||
void OutputTargetRules(std::ostream& fout);
|
|
||||||
void OutputTargets(std::ostream&);
|
|
||||||
void OutputSubDirectoryRules(std::ostream&);
|
|
||||||
void OutputDependInformation(std::ostream&);
|
|
||||||
void OutputDependencies(std::ostream&);
|
|
||||||
void OutputCustomRules(std::ostream&);
|
|
||||||
void OutputMakeVariables(std::ostream&);
|
|
||||||
void OutputMakeRules(std::ostream&);
|
|
||||||
void OutputSubDirectoryVars(std::ostream& fout,
|
|
||||||
const char* var,
|
|
||||||
const char* target,
|
|
||||||
const char* target1,
|
|
||||||
const char* target2,
|
|
||||||
const std::vector<std::string>& SubDirectories);
|
|
||||||
void OutputMakeRule(std::ostream&,
|
|
||||||
const char* comment,
|
|
||||||
const char* target,
|
|
||||||
const char* depends,
|
|
||||||
const char* command);
|
|
||||||
|
|
||||||
std::string EscapeSpaces(const char* str);
|
|
||||||
private:
|
|
||||||
bool m_CacheOnly;
|
|
||||||
bool m_Recurse;
|
|
||||||
std::string m_ExecutableOutputPath;
|
|
||||||
std::string m_LibraryOutputPath;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue