summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmExportLibraryDependenciesCommand.cxx10
-rw-r--r--Source/cmGlobalGenerator.h5
-rw-r--r--Source/cmGlobalVisualStudio6Generator.h2
-rw-r--r--Source/cmLocalVisualStudio6Generator.cxx3
-rw-r--r--Source/cmTarget.cxx91
-rw-r--r--Source/cmTarget.h45
6 files changed, 90 insertions, 66 deletions
diff --git a/Source/cmExportLibraryDependenciesCommand.cxx b/Source/cmExportLibraryDependenciesCommand.cxx
index 688d2eb..cb150a7 100644
--- a/Source/cmExportLibraryDependenciesCommand.cxx
+++ b/Source/cmExportLibraryDependenciesCommand.cxx
@@ -108,14 +108,12 @@ void cmExportLibraryDependenciesCommand::ConstFinalPass() const
std::string targetEntry = target.GetName();
targetEntry += "_LIB_DEPENDS";
- // Construct the dependency variable value. It is safe to use
- // the target GetLinkLibraries method here because this code is
- // called at the end of configure but before generate so library
- // dependencies have yet to be analyzed. Therefore the value
- // will be the direct link dependencies.
+ // Construct the dependency variable value with the direct link
+ // dependencies.
std::string valueOld;
std::string valueNew;
- cmTarget::LinkLibraryVectorType const& libs = target.GetLinkLibraries();
+ cmTarget::LinkLibraryVectorType const& libs =
+ target.GetOriginalLinkLibraries();
for(cmTarget::LinkLibraryVectorType::const_iterator li = libs.begin();
li != libs.end(); ++li)
{
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 6403429..5e6c03e 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -214,6 +214,11 @@ public:
*/
virtual void FindMakeProgram(cmMakefile*);
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ /** Is this the Visual Studio 6 generator? */
+ virtual bool IsForVS6() const { return false; }
+#endif
+
///! Find a target by name by searching the local generators.
cmTarget* FindTarget(const std::string& name,
bool excludeAliases = false) const;
diff --git a/Source/cmGlobalVisualStudio6Generator.h b/Source/cmGlobalVisualStudio6Generator.h
index 2797e11..b2fd28f 100644
--- a/Source/cmGlobalVisualStudio6Generator.h
+++ b/Source/cmGlobalVisualStudio6Generator.h
@@ -91,6 +91,8 @@ public:
virtual void FindMakeProgram(cmMakefile*);
+ virtual bool IsForVS6() const { return true; }
+
protected:
virtual const char* GetIDEVersion() { return "6.0"; }
private:
diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx
index 5db735f..c14fb2b 100644
--- a/Source/cmLocalVisualStudio6Generator.cxx
+++ b/Source/cmLocalVisualStudio6Generator.cxx
@@ -1101,7 +1101,8 @@ void cmLocalVisualStudio6Generator
}
}
// find link libraries
- const cmTarget::LinkLibraryVectorType& libs = target.GetLinkLibraries();
+ const cmTarget::LinkLibraryVectorType& libs =
+ target.GetLinkLibrariesForVS6();
cmTarget::LinkLibraryVectorType::const_iterator j;
for(j = libs.begin(); j != libs.end(); ++j)
{
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index a740bc3..aaae457 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -258,7 +258,9 @@ cmTarget::cmTarget()
#undef INITIALIZE_TARGET_POLICY_MEMBER
this->Makefile = 0;
- this->LinkLibrariesAnalyzed = false;
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ this->LinkLibrariesForVS6Analyzed = false;
+#endif
this->HaveInstallRule = false;
this->DLLPlatform = false;
this->IsApple = false;
@@ -517,8 +519,13 @@ void cmTarget::FinishConfigure()
// invalidation code in this source file is buggy.
this->ClearLinkMaps();
- // Do old-style link dependency analysis.
- this->AnalyzeLibDependencies(*this->Makefile);
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ // Do old-style link dependency analysis only for CM_USE_OLD_VS6.
+ if(this->Makefile->GetLocalGenerator()->GetGlobalGenerator()->IsForVS6())
+ {
+ this->AnalyzeLibDependenciesForVS6(*this->Makefile);
+ }
+#endif
}
//----------------------------------------------------------------------------
@@ -1332,7 +1339,9 @@ void cmTarget::AddLinkLibrary(cmMakefile& mf,
cmTarget::LibraryID tmp;
tmp.first = lib;
tmp.second = llt;
- this->LinkLibraries.push_back( tmp );
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ this->LinkLibrariesForVS6.push_back( tmp );
+#endif
this->OriginalLinkLibraries.push_back(tmp);
this->ClearLinkMaps();
@@ -1398,9 +1407,10 @@ cmTarget::AddSystemIncludeDirectories(const std::vector<std::string> &incs)
}
}
+#if defined(_WIN32) && !defined(__CYGWIN__)
//----------------------------------------------------------------------------
void
-cmTarget::AnalyzeLibDependencies( const cmMakefile& mf )
+cmTarget::AnalyzeLibDependenciesForVS6( const cmMakefile& mf )
{
// There are two key parts of the dependency analysis: (1)
// determining the libraries in the link line, and (2) constructing
@@ -1477,8 +1487,8 @@ cmTarget::AnalyzeLibDependencies( const cmMakefile& mf )
// eventually be removed. This code was moved here from the end of
// old source list processing code which was called just before this
// method.
- for(LinkLibraryVectorType::iterator p = this->LinkLibraries.begin();
- p != this->LinkLibraries.end(); ++p)
+ for(LinkLibraryVectorType::iterator p = this->LinkLibrariesForVS6.begin();
+ p != this->LinkLibrariesForVS6.end(); ++p)
{
this->Makefile->ExpandVariablesInString(p->first, true, true);
}
@@ -1490,22 +1500,22 @@ cmTarget::AnalyzeLibDependencies( const cmMakefile& mf )
// 1. Build the dependency graph
//
for(LinkLibraryVectorType::reverse_iterator lib
- = this->LinkLibraries.rbegin();
- lib != this->LinkLibraries.rend(); ++lib)
+ = this->LinkLibrariesForVS6.rbegin();
+ lib != this->LinkLibrariesForVS6.rend(); ++lib)
{
- this->GatherDependencies( mf, *lib, dep_map);
+ this->GatherDependenciesForVS6( mf, *lib, dep_map);
}
// 2. Remove any dependencies that are already satisfied in the original
// link line.
//
- for(LinkLibraryVectorType::iterator lib = this->LinkLibraries.begin();
- lib != this->LinkLibraries.end(); ++lib)
+ for(LinkLibraryVectorType::iterator lib = this->LinkLibrariesForVS6.begin();
+ lib != this->LinkLibrariesForVS6.end(); ++lib)
{
for( LinkLibraryVectorType::iterator lib2 = lib;
- lib2 != this->LinkLibraries.end(); ++lib2)
+ lib2 != this->LinkLibrariesForVS6.end(); ++lib2)
{
- this->DeleteDependency( dep_map, *lib, *lib2);
+ this->DeleteDependencyForVS6( dep_map, *lib, *lib2);
}
}
@@ -1514,43 +1524,43 @@ cmTarget::AnalyzeLibDependencies( const cmMakefile& mf )
// missing. Start from the back and keep adding.
//
std::set<DependencyMap::key_type> done, visited;
- std::vector<DependencyMap::key_type> newLinkLibraries;
+ std::vector<DependencyMap::key_type> newLinkLibrariesForVS6;
for(LinkLibraryVectorType::reverse_iterator lib =
- this->LinkLibraries.rbegin();
- lib != this->LinkLibraries.rend(); ++lib)
+ this->LinkLibrariesForVS6.rbegin();
+ lib != this->LinkLibrariesForVS6.rend(); ++lib)
{
// skip zero size library entries, this may happen
// if a variable expands to nothing.
if (lib->first.size() != 0)
{
- this->Emit( *lib, dep_map, done, visited, newLinkLibraries );
+ this->EmitForVS6( *lib, dep_map, done, visited, newLinkLibrariesForVS6 );
}
}
// 4. Add the new libraries to the link line.
//
for( std::vector<DependencyMap::key_type>::reverse_iterator k =
- newLinkLibraries.rbegin();
- k != newLinkLibraries.rend(); ++k )
+ newLinkLibrariesForVS6.rbegin();
+ k != newLinkLibrariesForVS6.rend(); ++k )
{
// get the llt from the dep_map
- this->LinkLibraries.push_back( std::make_pair(k->first,k->second) );
+ this->LinkLibrariesForVS6.push_back( std::make_pair(k->first,k->second) );
}
- this->LinkLibrariesAnalyzed = true;
+ this->LinkLibrariesForVS6Analyzed = true;
}
//----------------------------------------------------------------------------
-void cmTarget::InsertDependency( DependencyMap& depMap,
- const LibraryID& lib,
- const LibraryID& dep)
+void cmTarget::InsertDependencyForVS6( DependencyMap& depMap,
+ const LibraryID& lib,
+ const LibraryID& dep)
{
depMap[lib].push_back(dep);
}
//----------------------------------------------------------------------------
-void cmTarget::DeleteDependency( DependencyMap& depMap,
- const LibraryID& lib,
- const LibraryID& dep)
+void cmTarget::DeleteDependencyForVS6( DependencyMap& depMap,
+ const LibraryID& lib,
+ const LibraryID& dep)
{
// Make sure there is an entry in the map for lib. If so, delete all
// dependencies to dep. There may be repeated entries because of
@@ -1569,11 +1579,11 @@ void cmTarget::DeleteDependency( DependencyMap& depMap,
}
//----------------------------------------------------------------------------
-void cmTarget::Emit(const LibraryID lib,
- const DependencyMap& dep_map,
- std::set<LibraryID>& emitted,
- std::set<LibraryID>& visited,
- DependencyList& link_line )
+void cmTarget::EmitForVS6(const LibraryID lib,
+ const DependencyMap& dep_map,
+ std::set<LibraryID>& emitted,
+ std::set<LibraryID>& visited,
+ DependencyList& link_line )
{
// It's already been emitted
if( emitted.find(lib) != emitted.end() )
@@ -1619,7 +1629,7 @@ void cmTarget::Emit(const LibraryID lib,
if( emitted.find(*i) == emitted.end() )
{
// emit dependencies
- Emit( *i, dep_map, emitted, visited, link_line );
+ this->EmitForVS6( *i, dep_map, emitted, visited, link_line );
// emit self
emitted.insert(*i);
emitted_here.insert(*i);
@@ -1632,9 +1642,9 @@ void cmTarget::Emit(const LibraryID lib,
}
//----------------------------------------------------------------------------
-void cmTarget::GatherDependencies( const cmMakefile& mf,
- const LibraryID& lib,
- DependencyMap& dep_map)
+void cmTarget::GatherDependenciesForVS6( const cmMakefile& mf,
+ const LibraryID& lib,
+ DependencyMap& dep_map)
{
// If the library is already in the dependency map, then it has
// already been fully processed.
@@ -1678,8 +1688,8 @@ void cmTarget::GatherDependencies( const cmMakefile& mf,
else
{
LibraryID lib2(l,llt);
- this->InsertDependency( dep_map, lib, lib2);
- this->GatherDependencies( mf, lib2, dep_map);
+ this->InsertDependencyForVS6( dep_map, lib, lib2);
+ this->GatherDependenciesForVS6( mf, lib2, dep_map);
llt = cmTarget::GENERAL;
}
}
@@ -1687,9 +1697,10 @@ void cmTarget::GatherDependencies( const cmMakefile& mf,
end = depline.find( ";", start );
}
// cannot depend on itself
- this->DeleteDependency( dep_map, lib, lib);
+ this->DeleteDependencyForVS6( dep_map, lib, lib);
}
}
+#endif
//----------------------------------------------------------------------------
static bool whiteListedInterfaceProperty(const std::string& prop)
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index dc67f1e..c2efb14 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -179,8 +179,6 @@ public:
typedef std::pair<std::string, LinkLibraryType> LibraryID;
typedef std::vector<LibraryID > LinkLibraryVectorType;
- const LinkLibraryVectorType &GetLinkLibraries() const {
- return this->LinkLibraries;}
const LinkLibraryVectorType &GetOriginalLinkLibraries() const
{return this->OriginalLinkLibraries;}
@@ -613,6 +611,11 @@ public:
return this->MaxLanguageStandards;
}
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ const LinkLibraryVectorType &GetLinkLibrariesForVS6() const {
+ return this->LinkLibrariesForVS6;}
+#endif
+
private:
bool HandleLocationPropertyPolicy(cmMakefile* context) const;
@@ -622,6 +625,7 @@ private:
std::vector<std::pair<TLLSignature, cmListFileBacktrace> > TLLCommands;
+#if defined(_WIN32) && !defined(__CYGWIN__)
/**
* A list of direct dependencies. Use in conjunction with DependencyMap.
*/
@@ -638,16 +642,16 @@ private:
/**
* Inserts \a dep at the end of the dependency list of \a lib.
*/
- void InsertDependency( DependencyMap& depMap,
- const LibraryID& lib,
- const LibraryID& dep);
+ void InsertDependencyForVS6( DependencyMap& depMap,
+ const LibraryID& lib,
+ const LibraryID& dep);
/*
* Deletes \a dep from the dependency list of \a lib.
*/
- void DeleteDependency( DependencyMap& depMap,
- const LibraryID& lib,
- const LibraryID& dep);
+ void DeleteDependencyForVS6( DependencyMap& depMap,
+ const LibraryID& lib,
+ const LibraryID& dep);
/**
* Emits the library \a lib and all its dependencies into link_line.
@@ -657,21 +661,22 @@ private:
* link_line is in reverse order, in that the dependencies of a
* library are listed before the library itself.
*/
- void Emit( const LibraryID lib,
- const DependencyMap& dep_map,
- std::set<LibraryID>& emitted,
- std::set<LibraryID>& visited,
- DependencyList& link_line);
+ void EmitForVS6( const LibraryID lib,
+ const DependencyMap& dep_map,
+ std::set<LibraryID>& emitted,
+ std::set<LibraryID>& visited,
+ DependencyList& link_line);
/**
* Finds the dependencies for \a lib and inserts them into \a
* dep_map.
*/
- void GatherDependencies( const cmMakefile& mf,
- const LibraryID& lib,
- DependencyMap& dep_map);
+ void GatherDependenciesForVS6( const cmMakefile& mf,
+ const LibraryID& lib,
+ DependencyMap& dep_map);
- void AnalyzeLibDependencies( const cmMakefile& mf );
+ void AnalyzeLibDependenciesForVS6( const cmMakefile& mf );
+#endif
const char* GetSuffixVariableInternal(bool implib) const;
const char* GetPrefixVariableInternal(bool implib) const;
@@ -720,9 +725,11 @@ private:
std::vector<cmCustomCommand> PreLinkCommands;
std::vector<cmCustomCommand> PostBuildCommands;
TargetType TargetTypeValue;
- LinkLibraryVectorType LinkLibraries;
LinkLibraryVectorType PrevLinkedLibraries;
- bool LinkLibrariesAnalyzed;
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ LinkLibraryVectorType LinkLibrariesForVS6;
+ bool LinkLibrariesForVS6Analyzed;
+#endif
std::vector<std::string> LinkDirectories;
std::set<std::string> LinkDirectoriesEmmitted;
bool HaveInstallRule;