Browse Source

BUG: fix 7669, cpack did not work with symlinks

Bill Hoffman 17 năm trước cách đây
mục cha
commit
52e6733fbc
1 tập tin đã thay đổi với 18 bổ sung154 xóa
  1. 18 154
      Source/CPack/cmCPackGenerator.cxx

+ 18 - 154
Source/CPack/cmCPackGenerator.cxx

@@ -944,163 +944,27 @@ const char* cmCPackGenerator::GetOption(const char* op)
 //----------------------------------------------------------------------
 int cmCPackGenerator::FindRunningCMake(const char* arg0)
 {
-  int found = 0;
-  // Find our own executable.
-  std::vector<cmStdString> failures;
-  this->CPackSelf = arg0;
-  cmSystemTools::ConvertToUnixSlashes(this->CPackSelf);
-  failures.push_back(this->CPackSelf);
-  this->CPackSelf = cmSystemTools::FindProgram(this->CPackSelf.c_str());
-  if(!cmSystemTools::FileExists(this->CPackSelf.c_str()))
-    {
-    failures.push_back(this->CPackSelf);
-    this->CPackSelf =  "/usr/local/bin/ctest";
-    }
-  if(!cmSystemTools::FileExists(this->CPackSelf.c_str()))
-    {
-    failures.push_back(this->CPackSelf);
-    cmOStringStream msg;
-    msg << "CPack can not find the command line program ctest.\n";
-    msg << "  argv[0] = \"" << arg0 << "\"\n";
-    msg << "  Attempted paths:\n";
-    std::vector<cmStdString>::iterator i;
-    for(i=failures.begin(); i != failures.end(); ++i)
-      {
-      msg << "    \"" << i->c_str() << "\"\n";
-      }
-    cmCPackLogger(cmCPackLog::LOG_ERROR, msg.str().c_str()
-      << std::endl);
-    return 0;
-    }
-  std::string dir;
-  std::string file;
-  if(cmSystemTools::SplitProgramPath(this->CPackSelf.c_str(),
-      dir, file, true))
-    {
-    this->CMakeSelf = dir += "/cmake";
-    this->CMakeSelf += cmSystemTools::GetExecutableExtension();
-    if(cmSystemTools::FileExists(this->CMakeSelf.c_str()))
-      {
-      found = 1;
-      }
-    }
-  if ( !found )
-    {
-    failures.push_back(this->CMakeSelf);
-#ifdef CMAKE_BUILD_DIR
-    std::string intdir = ".";
-#ifdef  CMAKE_INTDIR
-    intdir = CMAKE_INTDIR;
-#endif
-    this->CMakeSelf = CMAKE_BUILD_DIR;
-    this->CMakeSelf += "/bin/";
-    this->CMakeSelf += intdir;
-    this->CMakeSelf += "/cmake";
-    this->CMakeSelf += cmSystemTools::GetExecutableExtension();
-#endif
-    if(!cmSystemTools::FileExists(this->CMakeSelf.c_str()))
-      {
-      failures.push_back(this->CMakeSelf);
-      cmOStringStream msg;
-      msg << "CPack can not find the command line program cmake.\n";
-      msg << "  argv[0] = \"" << arg0 << "\"\n";
-      msg << "  Attempted paths:\n";
-      std::vector<cmStdString>::iterator i;
-      for(i=failures.begin(); i != failures.end(); ++i)
-        {
-        msg << "    \"" << i->c_str() << "\"\n";
-        }
-      cmCPackLogger(cmCPackLog::LOG_ERROR, msg.str().c_str()
-        << std::endl);
-      return 0;
-      }
-    }
-  // do CMAKE_ROOT, look for the environment variable first
-  std::string cMakeRoot;
-  std::string modules;
-  cmCPackLogger(cmCPackLog::LOG_DEBUG, "Looking for CMAKE_ROOT" << std::endl);
-  if (getenv("CMAKE_ROOT"))
-    {
-    cMakeRoot = getenv("CMAKE_ROOT");
-    modules = cMakeRoot + "/Modules/CMake.cmake";
-    }
-  if(modules.empty() || !cmSystemTools::FileExists(modules.c_str()))
-    {
-    // next try exe/..
-    cMakeRoot  = cmSystemTools::GetProgramPath(this->CMakeSelf.c_str());
-    std::string::size_type slashPos = cMakeRoot.rfind("/");
-    if(slashPos != std::string::npos)
-      {
-      cMakeRoot = cMakeRoot.substr(0, slashPos);
-      }
-    // is there no Modules direcory there?
-    modules = cMakeRoot + "/Modules/CMake.cmake";
-    cmCPackLogger(cmCPackLog::LOG_DEBUG, "Looking for CMAKE_ROOT: "
-      << modules.c_str() << std::endl);
-    }
+  // use the CMAKE_ROOT from cmake which should have been
+  // found by now
+  const char* root=
+    this->MakefileMap->GetDefinition("CMAKE_ROOT");
 
-  if (!cmSystemTools::FileExists(modules.c_str()))
-    {
-    // try exe/../share/cmake
-    cMakeRoot += CMAKE_DATA_DIR;
-    modules = cMakeRoot + "/Modules/CMake.cmake";
-    cmCPackLogger(cmCPackLog::LOG_DEBUG, "Looking for CMAKE_ROOT: "
-      << modules.c_str() << std::endl);
-    }
-#ifdef CMAKE_ROOT_DIR
-  if (!cmSystemTools::FileExists(modules.c_str()))
-    {
-    // try compiled in root directory
-    cMakeRoot = CMAKE_ROOT_DIR;
-    modules = cMakeRoot + "/Modules/CMake.cmake";
-    cmCPackLogger(cmCPackLog::LOG_DEBUG, "Looking for CMAKE_ROOT: "
-      << modules.c_str() << std::endl);
-    }
-#endif
-#ifdef CMAKE_PREFIX
-  if (!cmSystemTools::FileExists(modules.c_str()))
+  if(root)
     {
-    // try compiled in install prefix
-    cMakeRoot = CMAKE_PREFIX CMAKE_DATA_DIR;
-    modules = cMakeRoot + "/Modules/CMake.cmake";
-    cmCPackLogger(cmCPackLog::LOG_DEBUG, "Looking for CMAKE_ROOT: "
-      << modules.c_str() << std::endl);
+      this->CMakeRoot = root;
+      cmCPackLogger(cmCPackLog::LOG_DEBUG, "Looking for CMAKE_ROOT: "
+                    << this->CMakeRoot.c_str() << std::endl);
+      this->SetOption("CMAKE_ROOT", this->CMakeRoot.c_str());
+      return 1;
     }
-#endif
-  if (!cmSystemTools::FileExists(modules.c_str()))
-    {
-    // try
-    cMakeRoot  = cmSystemTools::GetProgramPath(this->CMakeSelf.c_str());
-    cMakeRoot += CMAKE_DATA_DIR;
-    modules = cMakeRoot +  "/Modules/CMake.cmake";
-    cmCPackLogger(cmCPackLog::LOG_DEBUG, "Looking for CMAKE_ROOT: "
-      << modules.c_str() << std::endl);
-    }
-  if(!cmSystemTools::FileExists(modules.c_str()))
-    {
-    // next try exe
-    cMakeRoot  = cmSystemTools::GetProgramPath(this->CMakeSelf.c_str());
-    // is there no Modules direcory there?
-    modules = cMakeRoot + "/Modules/CMake.cmake";
-    cmCPackLogger(cmCPackLog::LOG_DEBUG, "Looking for CMAKE_ROOT: "
-      << modules.c_str() << std::endl);
-    }
-  if (!cmSystemTools::FileExists(modules.c_str()))
-    {
-    // couldn't find modules
-    cmCPackLogger(cmCPackLog::LOG_ERROR,
-      "Could not find CMAKE_ROOT !!!" << std::endl
-      << "CMake has most likely not been installed correctly." << std::endl
-      <<"Modules directory not found in" << std::endl
-      << cMakeRoot.c_str()
-      << std::endl);
-    return 0;
-    }
-  this->CMakeRoot = cMakeRoot;
-  cmCPackLogger(cmCPackLog::LOG_DEBUG, "Looking for CMAKE_ROOT: "
-    << this->CMakeRoot.c_str() << std::endl);
-  this->SetOption("CMAKE_ROOT", this->CMakeRoot.c_str());
-  return 1;
+  cmCPackLogger(cmCPackLog::LOG_ERROR,
+                "Could not find CMAKE_ROOT !!!" 
+                << std::endl
+                << "CMake has most likely not been installed correctly."
+                << std::endl
+                <<"Modules directory not found in"
+                << std::endl);
+  return 0;
 }
 
 //----------------------------------------------------------------------