[Cmake-commits] [cmake-commits] king committed cmComputeLinkInformation.cxx 1.35 1.36

cmake-commits at cmake.org cmake-commits at cmake.org
Mon Jul 21 10:07:58 EDT 2008


Update of /cvsroot/CMake/CMake/Source
In directory public:/mounts/ram/cvs-serv29743/Source

Modified Files:
	cmComputeLinkInformation.cxx 
Log Message:
ENH: Support full-path libs w/out extension in VS IDE.

  - This case worked accidentally in CMake 2.4, though not in Makefiles.
  - Some projects build only with the VS IDE on windows and have this
    mistake.
  - Support them when 2.4 compatibility is enabled by adding the extension.


Index: cmComputeLinkInformation.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmComputeLinkInformation.cxx,v
retrieving revision 1.35
retrieving revision 1.36
diff -C 2 -d -r1.35 -r1.36
*** cmComputeLinkInformation.cxx	30 Apr 2008 22:04:48 -0000	1.35
--- cmComputeLinkInformation.cxx	21 Jul 2008 14:07:56 -0000	1.36
***************
*** 1079,1084 ****
      }
  
    // Now add the full path to the library.
!   this->Items.push_back(Item(item, true));
  }
  
--- 1079,1123 ----
      }
  
+   // Full path libraries should have an extension.  CMake 2.4 would
+   // add the extension after splitting the file off of the directory.
+   // Some existing projects depended on this to build correctly
+   // because they left off the extension of an otherwise full-path
+   // library.  This worked with CMake 2.4 but only for VS IDE builds
+   // because the file-level dependency added to the Makefile would not
+   // be found.  Nevertheless, some projects have this mistake but work
+   // because they build only with the VS IDE.  We need to support them
+   // here by adding the missing extension.
+   std::string final_item = item;
+   if(strstr(this->GlobalGenerator->GetName(), "Visual Studio") &&
+      this->Makefile->NeedBackwardsCompatibility(2,4) &&
+      !cmSystemTools::ComparePath(
+        cmSystemTools::GetFilenameLastExtension(item).c_str(),
+        this->LibLinkSuffix.c_str()))
+     {
+     // Issue the warning at most once.
+     std::string wid = "VSIDE-LINK-EXT-";
+     wid += item;
+     if(!this->Target->GetPropertyAsBool(wid.c_str()))
+       {
+       this->Target->SetProperty(wid.c_str(), "1");
+       cmOStringStream w;
+       w << "Target \"" << this->Target->GetName() << "\" links to "
+         << "full-path item\n"
+         << "  " << item << "\n"
+         << "which does not have the proper link extension \""
+         << this->LibLinkSuffix << "\".  "
+         << "CMake is adding the missing extension because compatibility "
+         << "with CMake 2.4 is currently enabled and this case worked "
+         << "accidentally in that version.  "
+         << "The link extension should be added by the project developer.";
+       this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, w.str());
+       }
+ 
+     // Add the missing extension.
+     final_item += this->LibLinkSuffix;
+     }
+ 
    // Now add the full path to the library.
!   this->Items.push_back(Item(final_item, true));
  }
  



More information about the Cmake-commits mailing list