Removed the Uniquification of the include and link directory list in FinalPass,

and achieved the same effect by makein m_LinkDirectores and m_IncludeDirectories
a set rather than vector
This commit is contained in:
Ian Scott 2001-07-30 07:18:38 -04:00
parent 8bad4180c7
commit b24861d895
7 changed files with 50 additions and 56 deletions

View File

@ -644,11 +644,11 @@ void ElementCombinationGenerator::FindTagSource()
} }
// Get the makefile's include path. // Get the makefile's include path.
const std::vector<std::string>& includePath = const std::set<std::string>& includePath =
m_Makefile->GetIncludeDirectories(); m_Makefile->GetIncludeDirectories();
// Search the path for a file called "(m_Tag).h". // Search the path for a file called "(m_Tag).h".
for(std::vector<std::string>::const_iterator dir = includePath.begin(); for(std::set<std::string>::const_iterator dir = includePath.begin();
dir != includePath.end(); ++dir) dir != includePath.end(); ++dir)
{ {
std::string filePath = *dir; std::string filePath = *dir;

View File

@ -298,9 +298,9 @@ void cmCableWrapTclCommand::GenerateCableClassFiles(const char* name,
commandArgs += m_Makefile->GetStartDirectory(); commandArgs += m_Makefile->GetStartDirectory();
commandArgs += "\""; commandArgs += "\"";
const std::vector<std::string>& includes = const std::set<std::string>& includes =
m_Makefile->GetIncludeDirectories(); m_Makefile->GetIncludeDirectories();
for(std::vector<std::string>::const_iterator i = includes.begin(); for(std::set<std::string>::const_iterator i = includes.begin();
i != includes.end(); ++i) i != includes.end(); ++i)
{ {
commandArgs += " -I"; commandArgs += " -I";

View File

@ -68,8 +68,8 @@ void cmDSPWriter::OutputDSPFile()
} }
// Setup /I and /LIBPATH options for the resulting DSP file // Setup /I and /LIBPATH options for the resulting DSP file
std::vector<std::string>& includes = m_Makefile->GetIncludeDirectories(); std::set<std::string>& includes = m_Makefile->GetIncludeDirectories();
std::vector<std::string>::iterator i; std::set<std::string>::iterator i;
for(i = includes.begin(); i != includes.end(); ++i) for(i = includes.begin(); i != includes.end(); ++i)
{ {
m_IncludeOptions += "/I \""; m_IncludeOptions += "/I \"";
@ -504,8 +504,8 @@ void cmDSPWriter::WriteDSPHeader(std::ostream& fout, const char *libName,
libMultiLineOptions += exePath; libMultiLineOptions += exePath;
libMultiLineOptions += "\" \n"; libMultiLineOptions += "\" \n";
} }
std::vector<std::string>::iterator i; std::set<std::string>::iterator i;
std::vector<std::string>& libdirs = m_Makefile->GetLinkDirectories(); std::set<std::string>& libdirs = m_Makefile->GetLinkDirectories();
for(i = libdirs.begin(); i != libdirs.end(); ++i) for(i = libdirs.begin(); i != libdirs.end(); ++i)
{ {
libOptions += " /LIBPATH:\""; libOptions += " /LIBPATH:\"";

View File

@ -90,9 +90,9 @@ void cmMakeDepend::SetMakefile(const cmMakefile* makefile)
m_Makefile->m_ComplainFileRegularExpression.c_str()); m_Makefile->m_ComplainFileRegularExpression.c_str());
// Now extract any include paths from the makefile flags // Now extract any include paths from the makefile flags
const std::vector<std::string>& includes = const std::set<std::string>& includes =
m_Makefile->GetIncludeDirectories(); m_Makefile->GetIncludeDirectories();
for(std::vector<std::string>::const_iterator j = includes.begin(); for(std::set<std::string>::const_iterator j = includes.begin();
j != includes.end(); ++j) j != includes.end(); ++j)
{ {
std::string path = *j; std::string path = *j;

View File

@ -170,6 +170,17 @@ void cmMakefile::PrintStringVector(const char* s, const std::vector<std::string>
std::cout << " )\n"; std::cout << " )\n";
} }
void cmMakefile::PrintStringVector(const char* s, const std::set<std::string>& v) const
{
std::cout << s << ": ( \n";
for(std::set<std::string>::const_iterator i = v.begin();
i != v.end(); ++i)
{
std::cout << (*i).c_str() << " ";
}
std::cout << " )\n";
}
// call print on all the classes in the makefile // call print on all the classes in the makefile
void cmMakefile::Print() const void cmMakefile::Print() const
@ -409,8 +420,6 @@ void cmMakefile::FinalPass()
// do all the variable expansions here // do all the variable expansions here
this->ExpandVariables(); this->ExpandVariables();
this->StripDuplicateDirectories();
// give all the commands a chance to do something // give all the commands a chance to do something
// after the file has been parsed before generation // after the file has been parsed before generation
for(std::vector<cmCommand*>::iterator i = m_UsedCommands.begin(); for(std::vector<cmCommand*>::iterator i = m_UsedCommands.begin();
@ -536,7 +545,7 @@ void cmMakefile::AddLinkLibrary(const char* lib)
void cmMakefile::AddLinkDirectory(const char* dir) void cmMakefile::AddLinkDirectory(const char* dir)
{ {
m_LinkDirectories.push_back(dir); m_LinkDirectories.insert(dir);
} }
void cmMakefile::AddSubDirectory(const char* sub) void cmMakefile::AddSubDirectory(const char* sub)
@ -546,7 +555,7 @@ void cmMakefile::AddSubDirectory(const char* sub)
void cmMakefile::AddIncludeDirectory(const char* inc) void cmMakefile::AddIncludeDirectory(const char* inc)
{ {
m_IncludeDirectories.push_back(inc); m_IncludeDirectories.insert(inc);
} }
void cmMakefile::AddDefinition(const char* name, const char* value) void cmMakefile::AddDefinition(const char* name, const char* value)
@ -730,19 +739,31 @@ std::string cmMakefile::GetParentListFileName(const char *currentFileName)
void cmMakefile::ExpandVariables() void cmMakefile::ExpandVariables()
{ {
// Now expand varibles in the include and link strings // Now expand varibles in the include and link strings
std::vector<std::string>::iterator j, begin, end; std::set<std::string>::iterator j, begin, end;
begin = m_IncludeDirectories.begin(); begin = m_IncludeDirectories.begin();
end = m_IncludeDirectories.end(); end = m_IncludeDirectories.end();
std::set<std::string> new_set;
std::string x;
for(j = begin; j != end; ++j) for(j = begin; j != end; ++j)
{ {
this->ExpandVariablesInString(*j); x= *j;
this->ExpandVariablesInString(x);
new_set.insert(x);
} }
m_IncludeDirectories = new_set;
new_set.clear();
begin = m_LinkDirectories.begin(); begin = m_LinkDirectories.begin();
end = m_LinkDirectories.end(); end = m_LinkDirectories.end();
for(j = begin; j != end; ++j) for(j = begin; j != end; ++j)
{ {
this->ExpandVariablesInString(*j); x = *j;
this->ExpandVariablesInString(x);
new_set.insert(x);
} }
m_LinkDirectories = new_set;
cmTarget::LinkLibraries::iterator j2, end2; cmTarget::LinkLibraries::iterator j2, end2;
j2 = m_LinkLibraries.begin(); j2 = m_LinkLibraries.begin();
end2 = m_LinkLibraries.end(); end2 = m_LinkLibraries.end();
@ -793,29 +814,6 @@ int cmMakefile::DumpDocumentationToFile(const char *fileName)
} }
// Remove duplicate directories from the library and include paths.
void cmMakefile::StripDuplicateDirectories()
{
std::vector<std::string>::iterator begin, end;
// remove duplicates from m_IncludeDirectories
begin = m_IncludeDirectories.begin();
end = m_IncludeDirectories.end();
std::list<std::string> tmp1(begin, end);
tmp1.sort();
m_IncludeDirectories.clear();
std::unique_copy(tmp1.begin(), tmp1.end(), std::back_inserter(m_IncludeDirectories));
// remove duplicates from m_LinkDirectories
begin = m_LinkDirectories.begin();
end = m_LinkDirectories.end();
std::list<std::string> tmp2(begin, end);
tmp2.sort();
m_LinkDirectories.clear();
std::unique_copy(tmp2.begin(), tmp2.end(), std::back_inserter(m_LinkDirectories));
}
void cmMakefile::ExpandVariablesInString(std::string& source) const void cmMakefile::ExpandVariablesInString(std::string& source) const
{ {
this->ExpandVariablesInString(source, false); this->ExpandVariablesInString(source, false);

View File

@ -383,11 +383,11 @@ public:
/** /**
* Get a list of include directories in the build. * Get a list of include directories in the build.
*/ */
std::vector<std::string>& GetIncludeDirectories() std::set<std::string>& GetIncludeDirectories()
{ {
return m_IncludeDirectories; return m_IncludeDirectories;
} }
const std::vector<std::string>& GetIncludeDirectories() const const std::set<std::string>& GetIncludeDirectories() const
{ {
return m_IncludeDirectories; return m_IncludeDirectories;
} }
@ -395,7 +395,7 @@ public:
/** /**
* Get a list of link directories in the build. * Get a list of link directories in the build.
*/ */
std::vector<std::string>& GetLinkDirectories() std::set<std::string>& GetLinkDirectories()
{ {
return m_LinkDirectories; return m_LinkDirectories;
} }
@ -481,11 +481,6 @@ public:
*/ */
void ExpandVariables(); void ExpandVariables();
/**
* Strip Duplicate directories from Library and Include paths
*/
void cmMakefile::StripDuplicateDirectories();
/** Recursivly read and create a cmMakefile object for /** Recursivly read and create a cmMakefile object for
* all CMakeLists.txt files in the GetSubDirectories list. * all CMakeLists.txt files in the GetSubDirectories list.
* Once the file is found, it ReadListFile is called on * Once the file is found, it ReadListFile is called on
@ -528,8 +523,8 @@ protected:
SourceMap m_Sources; SourceMap m_Sources;
std::vector<std::string> m_SubDirectories; // list of sub directories std::vector<std::string> m_SubDirectories; // list of sub directories
std::vector<std::string> m_IncludeDirectories; std::set<std::string> m_IncludeDirectories;
std::vector<std::string> m_LinkDirectories; std::set<std::string> m_LinkDirectories;
std::vector<std::string> m_ListFiles; // list of command files loaded std::vector<std::string> m_ListFiles; // list of command files loaded
@ -560,6 +555,7 @@ private:
friend class cmMakeDepend; // make depend needs direct access friend class cmMakeDepend; // make depend needs direct access
// to the m_Sources array // to the m_Sources array
void PrintStringVector(const char* s, const std::vector<std::string>& v) const; void PrintStringVector(const char* s, const std::vector<std::string>& v) const;
void PrintStringVector(const char* s, const std::set<std::string>& v) const;
void AddDefaultCommands(); void AddDefaultCommands();
void AddDefaultDefinitions(); void AddDefaultDefinitions();
std::set<cmFunctionBlocker *> m_FunctionBlockers; std::set<cmFunctionBlocker *> m_FunctionBlockers;

View File

@ -65,7 +65,7 @@ void cmUnixMakefileGenerator::GenerateMakefile()
m_LibraryOutputPath += "/"; m_LibraryOutputPath += "/";
} }
cmSystemTools::MakeDirectory(m_LibraryOutputPath.c_str()); cmSystemTools::MakeDirectory(m_LibraryOutputPath.c_str());
m_Makefile->GetLinkDirectories().push_back(m_LibraryOutputPath); m_Makefile->GetLinkDirectories().insert(m_LibraryOutputPath);
} }
if (m_Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH")) if (m_Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH"))
{ {
@ -76,7 +76,7 @@ void cmUnixMakefileGenerator::GenerateMakefile()
m_ExecutableOutputPath += "/"; m_ExecutableOutputPath += "/";
} }
cmSystemTools::MakeDirectory(m_ExecutableOutputPath.c_str()); cmSystemTools::MakeDirectory(m_ExecutableOutputPath.c_str());
m_Makefile->GetLinkDirectories().push_back(m_ExecutableOutputPath); m_Makefile->GetLinkDirectories().insert(m_ExecutableOutputPath);
} }
if(m_CacheOnly) if(m_CacheOnly)
@ -362,8 +362,8 @@ void cmUnixMakefileGenerator::OutputLinkLibraries(std::ostream& fout,
// collect all the flags needed for linking libraries // collect all the flags needed for linking libraries
std::string linkLibs; std::string linkLibs;
std::vector<std::string>& libdirs = m_Makefile->GetLinkDirectories(); std::set<std::string>& libdirs = m_Makefile->GetLinkDirectories();
for(std::vector<std::string>::iterator libDir = libdirs.begin(); for(std::set<std::string>::iterator libDir = libdirs.begin();
libDir != libdirs.end(); ++libDir) libDir != libdirs.end(); ++libDir)
{ {
std::string libpath = cmSystemTools::EscapeSpaces(libDir->c_str()); std::string libpath = cmSystemTools::EscapeSpaces(libDir->c_str());
@ -653,8 +653,8 @@ void cmUnixMakefileGenerator::OutputMakeFlags(std::ostream& fout)
{ {
// Output Include paths // Output Include paths
fout << "INCLUDE_FLAGS = "; fout << "INCLUDE_FLAGS = ";
std::vector<std::string>& includes = m_Makefile->GetIncludeDirectories(); std::set<std::string>& includes = m_Makefile->GetIncludeDirectories();
std::vector<std::string>::iterator i; std::set<std::string>::iterator i;
fout << "-I" << m_Makefile->GetStartDirectory() << " "; fout << "-I" << m_Makefile->GetStartDirectory() << " ";
for(i = includes.begin(); i != includes.end(); ++i) for(i = includes.begin(); i != includes.end(); ++i)
{ {