summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmLocalGenerator.cxx8
-rw-r--r--Source/cmOrderLinkDirectories.cxx22
2 files changed, 24 insertions, 6 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index fb5b020..14205b4 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -1392,7 +1392,13 @@ cmLocalGenerator::ComputeLinkInformation(cmTarget& target,
if(tgt)
{
// This is a CMake target. Ask the target for its real name.
- linkLibraries.push_back(tgt->GetFullName(config));
+ // Pass the full path to the target file but purposely leave
+ // off the per-configuration subdirectory. The link directory
+ // ordering knows how to deal with this.
+ std::string linkItem = tgt->GetDirectory(0);
+ linkItem += "/";
+ linkItem += tgt->GetFullName(config);
+ linkLibraries.push_back(linkItem);
if(fullPathLibs)
{
fullPathLibs->push_back(tgt->GetFullPath(config));
diff --git a/Source/cmOrderLinkDirectories.cxx b/Source/cmOrderLinkDirectories.cxx
index 5a3b405..1572827 100644
--- a/Source/cmOrderLinkDirectories.cxx
+++ b/Source/cmOrderLinkDirectories.cxx
@@ -258,12 +258,24 @@ void cmOrderLinkDirectories::SetLinkInformation(
for(std::vector<std::string>::const_iterator p = linkDirectories.begin();
p != linkDirectories.end(); ++p)
{
- if(this->DirectoryToAfterListEmitted.insert(*p).second)
+#ifdef _WIN32
+ std::string dir = *p;
+ // Avoid case problems for windows paths.
+ if(dir.size() > 2 && dir[1] == ':')
+ {
+ if(dir[0] >= 'A' && dir[0] <= 'Z')
+ {
+ dir[0] += 'a' - 'A';
+ }
+ }
+ dir = cmSystemTools::GetActualCaseForPath(dir.c_str());
+#endif
+ if(this->DirectoryToAfterListEmitted.insert(dir).second)
{
std::pair<cmStdString, std::vector<cmStdString> > dp;
- dp.first = *p;
+ dp.first = dir;
this->DirectoryToAfterList.push_back(dp);
- this->LinkPathSet.insert(*p);
+ this->LinkPathSet.insert(dir);
}
}
@@ -336,8 +348,8 @@ bool cmOrderLinkDirectories::DetermineLibraryPathOrder()
}
if(!framework)
{
- cmSystemTools::SplitProgramPath(this->RawLinkItems[i].c_str(),
- dir, file);
+ dir = cmSystemTools::GetFilenamePath(this->RawLinkItems[i]);
+ file = cmSystemTools::GetFilenameName(this->RawLinkItems[i]);
#ifdef _WIN32
// Avoid case problems for windows paths.
if(dir.size() > 2 && dir[1] == ':')