Просмотр исходного кода

cmSystemTools: Re-order resource and tool finding logic

Consolidate `CMAKE_BOOTSTRAP` conditions.
Brad King 11 месяцев назад
Родитель
Сommit
cbee4eed0f
1 измененных файлов с 30 добавлено и 34 удалено
  1. 30 34
      Source/cmSystemTools.cxx

+ 30 - 34
Source/cmSystemTools.cxx

@@ -2691,16 +2691,14 @@ bool IsCMakeAppBundleExe(std::string const& exe)
 
 void cmSystemTools::FindCMakeResources(const char* argv0)
 {
-  std::string exe_dir;
 #if defined(_WIN32) && !defined(__CYGWIN__)
-  (void)argv0; // ignore this on windows
+  static_cast<void>(argv0);
   wchar_t modulepath[_MAX_PATH];
   ::GetModuleFileNameW(nullptr, modulepath, sizeof(modulepath));
   std::string exe = cmsys::Encoding::ToNarrow(modulepath);
   exe = cmSystemTools::GetRealPath(exe);
-  exe_dir = cmSystemTools::GetFilenamePath(exe);
 #elif defined(__APPLE__)
-  (void)argv0; // ignore this on OS X
+  static_cast<void>(argv0);
 #  define CM_EXE_PATH_LOCAL_SIZE 16384
   char exe_path_local[CM_EXE_PATH_LOCAL_SIZE];
 #  if defined(MAC_OS_X_VERSION_10_3) && !defined(MAC_OS_X_VERSION_10_4)
@@ -2732,7 +2730,6 @@ void cmSystemTools::FindCMakeResources(const char* argv0)
       exe = cmStrCat(dir, "/cmake-gui");
     }
   }
-  exe_dir = cmSystemTools::GetFilenamePath(exe);
 #else
   std::string errorMsg;
   std::string exe;
@@ -2740,36 +2737,10 @@ void cmSystemTools::FindCMakeResources(const char* argv0)
     // ???
   }
   exe = cmSystemTools::GetRealPath(exe);
-  exe_dir = cmSystemTools::GetFilenamePath(exe);
 #endif
-  cmSystemToolsCMakeCommand =
-    cmStrCat(exe_dir, "/cmake", cmSystemTools::GetExecutableExtension());
-#ifdef CMAKE_BOOTSTRAP
-  // The bootstrap cmake does not provide the other tools,
-  // so use the directory where they are about to be built.
-  exe_dir = CMAKE_BOOTSTRAP_BINARY_DIR "/bin";
-#endif
-  cmSystemToolsCTestCommand =
-    cmStrCat(exe_dir, "/ctest", cmSystemTools::GetExecutableExtension());
-  cmSystemToolsCPackCommand =
-    cmStrCat(exe_dir, "/cpack", cmSystemTools::GetExecutableExtension());
-  cmSystemToolsCMakeGUICommand =
-    cmStrCat(exe_dir, "/cmake-gui", cmSystemTools::GetExecutableExtension());
-  if (!cmSystemTools::FileExists(cmSystemToolsCMakeGUICommand)) {
-    cmSystemToolsCMakeGUICommand.clear();
-  }
-  cmSystemToolsCMakeCursesCommand =
-    cmStrCat(exe_dir, "/ccmake", cmSystemTools::GetExecutableExtension());
-  if (!cmSystemTools::FileExists(cmSystemToolsCMakeCursesCommand)) {
-    cmSystemToolsCMakeCursesCommand.clear();
-  }
-  cmSystemToolsCMClDepsCommand =
-    cmStrCat(exe_dir, "/cmcldeps", cmSystemTools::GetExecutableExtension());
-  if (!cmSystemTools::FileExists(cmSystemToolsCMClDepsCommand)) {
-    cmSystemToolsCMClDepsCommand.clear();
-  }
-
 #ifndef CMAKE_BOOTSTRAP
+  // Find resources relative to our own executable.
+  std::string exe_dir = cmSystemTools::GetFilenamePath(exe);
   // Install tree has
   // - "<prefix><CMAKE_BIN_DIR>/cmake"
   // - "<prefix><CMAKE_DATA_DIR>"
@@ -2810,10 +2781,35 @@ void cmSystemTools::FindCMakeResources(const char* argv0)
       cmSystemToolsHTMLDoc = cmStrCat(dir, "/Utilities/Sphinx/html");
     }
   }
+  cmSystemToolsCMakeCommand =
+    cmStrCat(exe_dir, "/cmake", cmSystemTools::GetExecutableExtension());
 #else
-  // Bootstrap build knows its source.
+  // The bootstrap cmake knows its resource locations.
   cmSystemToolsCMakeRoot = CMAKE_BOOTSTRAP_SOURCE_DIR;
+  cmSystemToolsCMakeCommand = exe;
+  // The bootstrap cmake does not provide the other tools,
+  // so use the directory where they are about to be built.
+  std::string exe_dir = CMAKE_BOOTSTRAP_BINARY_DIR "/bin";
 #endif
+  cmSystemToolsCTestCommand =
+    cmStrCat(exe_dir, "/ctest", cmSystemTools::GetExecutableExtension());
+  cmSystemToolsCPackCommand =
+    cmStrCat(exe_dir, "/cpack", cmSystemTools::GetExecutableExtension());
+  cmSystemToolsCMakeGUICommand =
+    cmStrCat(exe_dir, "/cmake-gui", cmSystemTools::GetExecutableExtension());
+  if (!cmSystemTools::FileExists(cmSystemToolsCMakeGUICommand)) {
+    cmSystemToolsCMakeGUICommand.clear();
+  }
+  cmSystemToolsCMakeCursesCommand =
+    cmStrCat(exe_dir, "/ccmake", cmSystemTools::GetExecutableExtension());
+  if (!cmSystemTools::FileExists(cmSystemToolsCMakeCursesCommand)) {
+    cmSystemToolsCMakeCursesCommand.clear();
+  }
+  cmSystemToolsCMClDepsCommand =
+    cmStrCat(exe_dir, "/cmcldeps", cmSystemTools::GetExecutableExtension());
+  if (!cmSystemTools::FileExists(cmSystemToolsCMClDepsCommand)) {
+    cmSystemToolsCMClDepsCommand.clear();
+  }
 }
 
 std::string const& cmSystemTools::GetCMakeCommand()