Quellcode durchsuchen

ENH: Merged use of kwsys library.

Brad King vor 22 Jahren
Ursprung
Commit
dc3fd5c267

+ 9 - 0
CMakeLists.txt

@@ -29,6 +29,15 @@ IF(CMAKE_SYSTEM MATCHES "OSF1-V.*")
      SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -timplicit_local -no_implicit_include ")
   ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX)
 ENDIF(CMAKE_SYSTEM MATCHES "OSF1-V.*")
+
+#-----------------------------------------------------------------------------
+# Create the kwsys library for CMake.
+SET(KWSYS_NAMESPACE cmsys)
+SET(KWSYS_USE_SystemTools 1)
+SET(KWSYS_USE_Directory 1)
+SET(KWSYS_HEADER_ROOT ${CMake_BINARY_DIR}/Source)
+SUBDIRS(Source/kwsys)
+
 SUBDIRS(Source Modules Templates Utilities)
 ENABLE_TESTING()
 

+ 1 - 2
Source/CMakeLists.txt

@@ -8,7 +8,6 @@ cmMakefile.cxx
 cmRegularExpression.cxx
 cmSourceFile.cxx
 cmSystemTools.cxx
-cmDirectory.cxx
 cmDocumentation.cxx
 cmDynamicLoader.cxx
 cmCommands.cxx
@@ -30,7 +29,6 @@ cmRegularExpression.h
 cmSourceFile.h
 cmSystemTools.h
 cmDynamicLoader.h
-cmDirectory.h
 cmCommands.h
 cmTarget.h
 cmCustomCommand.h
@@ -96,6 +94,7 @@ ENDIF (WIN32)
 # create a library used by the command line and the GUI
 ADD_LIBRARY(CMakeLib ${SRCS})
 
+TARGET_LINK_LIBRARIES(CMakeLib cmsys)
 
 # always link in the library
 # the library is found here

+ 0 - 1
Source/CursesDialog/cmCursesPathWidget.cxx

@@ -18,7 +18,6 @@
 
 #include "cmCursesMainForm.h"
 #include "cmSystemTools.h"
-#include "cmDirectory.h"
 
 cmCursesPathWidget::cmCursesPathWidget(int width, int height, 
                                            int left, int top) :

+ 3 - 2
Source/cmAuxSourceDirectoryCommand.cxx

@@ -15,9 +15,10 @@
 
 =========================================================================*/
 #include "cmAuxSourceDirectoryCommand.h"
-#include "cmDirectory.h"
 #include "cmSourceFile.h"
 
+#include <cmsys/Directory.hxx>
+
 // cmAuxSourceDirectoryCommand
 bool cmAuxSourceDirectoryCommand::InitialPass(std::vector<std::string> const& args)
 {
@@ -42,7 +43,7 @@ bool cmAuxSourceDirectoryCommand::InitialPass(std::vector<std::string> const& ar
     }
   
   // Load all the files in the directory
-  cmDirectory dir;
+  cmsys::Directory dir;
   if(dir.Load(tdir.c_str()))
     {
     size_t numfiles = dir.GetNumberOfFiles();

+ 0 - 121
Source/cmDirectory.cxx

@@ -1,121 +0,0 @@
-/*=========================================================================
-
-  Program:   CMake - Cross-Platform Makefile Generator
-  Module:    $RCSfile$
-  Language:  C++
-  Date:      $Date$
-  Version:   $Revision$
-
-  Copyright (c) 2002 Kitware, Inc., Insight Consortium.  All rights reserved.
-  See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
-
-     This software is distributed WITHOUT ANY WARRANTY; without even 
-     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
-     PURPOSE.  See the above copyright notices for more information.
-
-=========================================================================*/
-#include "cmDirectory.h"
-
-
-
-// First microsoft compilers
-
-#ifdef _MSC_VER
-#include <windows.h>
-#include <io.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-  
-/**
- *
- */
-bool 
-cmDirectory
-::Load(const char* name)
-{
-  char* buf;
-  size_t n = strlen(name);
-  if ( name[n - 1] == '/' ) 
-    {
-    buf = new char[n + 1 + 1];
-    sprintf(buf, "%s*", name);
-    } 
-  else
-    {
-    buf = new char[n + 2 + 1];
-    sprintf(buf, "%s/*", name);
-    }
-  struct _finddata_t data;      // data of current file
-  
-  // Now put them into the file array
-  size_t srchHandle = _findfirst(buf, &data);
-  delete [] buf;
-  
-  if ( srchHandle == -1 )
-    {
-    return 0;
-    }
-  
-  // Loop through names
-  do 
-    {
-    m_Files.push_back(data.name);
-    } 
-  while ( _findnext(srchHandle, &data) != -1 );
-  m_Path = name;
-  return _findclose(srchHandle) != -1;
-}
-
-#else
-
-// Now the POSIX style directory access
-
-#include <sys/types.h>
-#include <dirent.h>
-  
-/**
- *
- */
-bool 
-cmDirectory
-::Load(const char* name)
-{
-  DIR* dir = opendir(name);
-
-  if (!dir)
-    {
-    return 0;
-    }
-
-  for (dirent* d = readdir(dir); d; d = readdir(dir) )
-    {
-    m_Files.push_back(d->d_name);
-    }
-  m_Path = name;
-  closedir(dir);
-  return 1;
-}
-
-#endif
-
-  
-/**
- *
- */
-const char* 
-cmDirectory
-::GetFile(size_t dindex)
-{
-  if ( dindex >= m_Files.size() )
-    {
-    cmSystemTools::Error("Bad index for GetFile on cmDirectory\n", 0);
-    return 0;
-    }
-  return m_Files[dindex].c_str();
-}
-

+ 0 - 58
Source/cmDirectory.h

@@ -1,58 +0,0 @@
-/*=========================================================================
-
-  Program:   CMake - Cross-Platform Makefile Generator
-  Module:    $RCSfile$
-  Language:  C++
-  Date:      $Date$
-  Version:   $Revision$
-
-  Copyright (c) 2002 Kitware, Inc., Insight Consortium.  All rights reserved.
-  See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
-
-     This software is distributed WITHOUT ANY WARRANTY; without even 
-     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
-     PURPOSE.  See the above copyright notices for more information.
-
-=========================================================================*/
-#ifndef __cmDirectory_h
-#define __cmDirectory_h
-
-#include "cmStandardIncludes.h"
-#include "cmSystemTools.h"
-
-/** \class cmDirectory
- * \brief Portable directory/filename traversal.
- * 
- * cmDirectory provides a portable way of finding the names of the files
- * in a system directory.
- *
- * cmDirectory currently works with Windows and Unix operating systems.
- */
-
-class cmDirectory 
-{
-public:
-  /**
-   * Load the specified directory and load the names of the files
-   * in that directory. 0 is returned if the directory can not be 
-   * opened, 1 if it is opened.   
-   */
-  bool Load(const char* dir);
-
-  /**
-   * Return the number of files in the current directory.
-   */
-  size_t GetNumberOfFiles() { return m_Files.size();}
-
-  /**
-   * Return the file at the given index, the indexing is 0 based
-   */
-  const char* GetFile(size_t );
-
-private:
-  std::vector<std::string> m_Files; // Array of Files
-  std::string m_Path;               // Path to Open'ed directory
-
-}; // End Class: cmDirectory
-  
-#endif

+ 0 - 1
Source/cmMakeDirectoryCommand.cxx

@@ -15,7 +15,6 @@
 
 =========================================================================*/
 #include "cmMakeDirectoryCommand.h"
-#include "cmDirectory.h"
 
 // cmMakeDirectoryCommand
 bool cmMakeDirectoryCommand::InitialPass(std::vector<std::string> const& args)

+ 0 - 1
Source/cmMakefile.cxx

@@ -18,7 +18,6 @@
 #include "cmCommand.h"
 #include "cmStandardIncludes.h"
 #include "cmSourceFile.h"
-#include "cmDirectory.h"
 #include "cmSystemTools.h"
 #include "cmGlobalGenerator.h"
 #include "cmLocalGenerator.h"

Datei-Diff unterdrückt, da er zu groß ist
+ 402 - 1844
Source/cmSystemTools.cxx


+ 9 - 206
Source/cmSystemTools.h

@@ -19,47 +19,17 @@
 
 #include "cmStandardIncludes.h"
 
+#include <cmsys/SystemTools.hxx>
+
 /** \class cmSystemTools
  * \brief A collection of useful functions for CMake.
  *
  * cmSystemTools is a class that provides helper functions
  * for the CMake build system.
  */
-class cmSystemTools
+class cmSystemTools: public cmsys::SystemTools
 {
 public:
-  /**
-   * Replace symbols in str that are not valid in C identifiers as
-   * defined by the 1999 standard, ie. anything except [A-Za-z0-9_].
-   * They are replaced with `_' and if the first character is a digit
-   * then an underscore is prepended.  Note that this can produce
-   * identifiers that the standard reserves (_[A-Z].* and __.*).
-   */
-  static std::string MakeCindentifier(const char* s);
-  
-  /**
-   * Make a new directory if it is not there.  This function
-   * can make a full path even if none of the directories existed
-   * prior to calling this function.  
-   */
-  static bool MakeDirectory(const char* path);
-
-  /**
-   * Get current time as a double. On certain platforms this will
-   * return higher resolution than seconds:
-   * (1) gettimeofday() -- resolution in microseconds
-   * (2) ftime() -- resolution in milliseconds
-   * (3) time() -- resolution in seconds
-   */
-  static double GetTime();
-
-  /**
-   * Replace replace all occurances of the string in
-   * the source string.
-   */
-  static void ReplaceString(std::string& source,
-                            const char* replace,
-                            const char* with);
 
   /** Expand out any arguements in the vector that have ; separated
    *  strings into multiple arguements.  A new vector is created 
@@ -70,47 +40,11 @@ public:
   static void ExpandListArgument(const std::string& arg,
                                  std::vector<std::string>& argsOut);
 
-  /**
-   * Read a registry value
-   */
-  static bool ReadRegistryValue(const char *key, std::string &value);
-
-  /**
-   * Write a registry value
-   */
-  static bool WriteRegistryValue(const char *key, const char *value);
-
-  /**
-   * Delete a registry value
-   */
-  static bool DeleteRegistryValue(const char *key);
-
   /**
    * Look for and replace registry values in a string
    */
   static void ExpandRegistryValues(std::string& source);
 
-  /**
-   * Return a capitalized string (i.e the first letter is uppercased, all other
-   * are lowercased).
-   */
-  static std::string Capitalized(const std::string&);
-  
-  /**
-   * Return a lower case string
-   */
-  static std::string LowerCase(const std::string&);
-  
-  /**
-   * Return a lower case string
-   */
-  static std::string UpperCase(const std::string&);
-  
-  /**
-   * Replace Windows file system slashes with Unix-style slashes.
-   */
-  static void ConvertToUnixSlashes(std::string& path);
-  
   /**
    * Platform independent escape spaces, unix uses backslash,
    * windows double quotes the string.
@@ -119,15 +53,6 @@ public:
 
   ///! Escape quotes in a string.
   static std::string EscapeQuotes(const char* str);
-
-  /**
-   * For windows this calles ConvertToWindowsOutputPath and for unix
-   * it calls ConvertToUnixOutputPath
-   */
-  static std::string ConvertToOutputPath(const char*);
-  
-  ///! Return true if a file exists in the current directory.
-  static bool FileExists(const char* filename);
   
   /**
    * Given a string, replace any escape sequences with the corresponding
@@ -135,19 +60,6 @@ public:
    */
   static std::string RemoveEscapes(const char*);
   
-
-  /**
-   *  Add the paths from the environment variable PATH to the 
-   *  string vector passed in.
-   */
-  static void GetPath(std::vector<std::string>& path);
-
-  /**
-   *  Get the file extension (including ".") needed for an executable
-   *  on the current platform ("" for unix, ".exe" for Windows).
-   */
-  static const char* GetExecutableExtension();
-
   typedef  void (*ErrorCallback)(const char*, const char*, bool&, void*);
   /**
    *  Set the function used by GUI's to display error messages
@@ -191,26 +103,6 @@ public:
       cmSystemTools::s_ErrorOccured = false;
     }
   
-  /**
-   * Copy the source file to the destination file only
-   * if the two files differ.  
-   */
-  static bool CopyFileIfDifferent(const char* source,
-                                  const char* destination);
-  
-  ///! Compare the contents of two files.  Return true if different.
-  static bool FilesDiffer(const char* source,
-                          const char* destination);
-  ///! return true if the two files are the same file
-  static bool SameFile(const char* file1, const char* file2);
-
-  ///! Copy a file.
-  static void cmCopyFile(const char* source,
-                       const char* destination);
-  
-  ///! Remove a file.
-  static bool RemoveFile(const char* source);
-  
   /** 
    * does a string indicate a true or on value ? This is not the same
    * as ifdef. 
@@ -229,22 +121,6 @@ public:
   ///! Return true if value is NOTFOUND or ends in -NOTFOUND.
   static bool IsNOTFOUND(const char* value);
   
-  ///! Find a file in the system PATH, with optional extra paths.
-  static std::string FindFile(const char* name,
-                                 const std::vector<std::string>& path= std::vector<std::string>());
-
-  ///! Find an executable in the system PATH, with optional extra paths.
-  static std::string FindProgram(const char* name,
-                                 const std::vector<std::string>& path = std::vector<std::string>(),
-                                 bool no_system_path = false);
-
-  ///! Find a library in the system PATH, with optional extra paths.
-  static std::string FindLibrary(const char* name,
-                                 const std::vector<std::string>& path);
-
-  ///! return true if the file is a directory.
-  static bool FileIsDirectory(const char* name);
-
   static bool DoesFileExistWithExtensions(
     const char *name,
     const std::vector<std::string>& sourceExts);
@@ -265,43 +141,8 @@ public:
   static bool SimpleGlob(const std::string& glob, std::vector<std::string>& files, 
                          int type = 0);
   
-  static std::string GetCurrentWorkingDirectory();
-  static std::string GetProgramPath(const char*);
-  static void SplitProgramPath(const char* in_name, 
-                               std::string& dir, 
-                               std::string& file,
-                               bool errorReport = true);
-  static std::string CollapseFullPath(const char* in_relative);
-  static std::string CollapseFullPath(const char* in_relative,
-                                      const char* in_base);
-  
-  ///! return path of a full filename (no trailing slashes).
-  static std::string GetFilenamePath(const std::string&);
-
-  
-  ///! return file name of a full filename (i.e. file name without path).
-  static std::string GetFilenameName(const std::string&);
-  
-  ///! Split a program from its arguments and handle spaces in the paths.
-  static void SplitProgramFromArgs(const char* path, 
-                                   std::string& program, std::string& args);
-  
-  ///! return file extension of a full filename (dot included).
-  static std::string GetFilenameExtension(const std::string&);
-  
-  ///! return file extension of a full filename (dot included).
-  static std::string GetFilenameLastExtension(const std::string&);
-
-  ///! return file name without extension of a full filename.
-  static std::string GetFilenameWithoutExtension(const std::string&);
-  
-  ///! return file name without its last (shortest) extension.
-  static std::string GetFilenameWithoutLastExtension(const std::string&);
-  
-  /** Return whether the path represents a full path (not relative).  */
-  static bool FileIsFullPath(const char*);
-  
-  static long int ModifiedTime(const char* filename);
+  ///! Copy a file.
+  static bool cmCopyFile(const char* source, const char* destination);
 
   /**
    * Run an executable command and put the stdout in output.
@@ -319,13 +160,7 @@ public:
                          bool verbose = true, int timeout = 0);
   static bool RunCommand(const char* command, std::string& output,
                          int &retVal, const char* directory = 0, 
-                         bool verbose = true, int timeout = 0);
-  
-  ///! for windows return the short path for the given path, unix just a pass through
-  static bool GetShortPath(const char* path, std::string& result);
-  
-  ///! change directory the the directory specified
-  static int ChangeDirectory(const char* dir);
+                         bool verbose = true, int timeout = 0);  
     
   static void EnableMessages() { s_DisableMessages = false; }
   static void DisableMessages() { s_DisableMessages = true; }
@@ -333,10 +168,6 @@ public:
   static void EnableRunCommandOutput() {s_DisableRunCommandOutput = false; }
   static bool GetRunCommandOutput() { return s_DisableRunCommandOutput; }
 
-  /** Split a string on its newlines into multiple lines.  Returns
-      false only if the last line stored had no newline.  */
-  static bool Split(const char* s, std::vector<cmStdString>& l);
-  
   /**
    * Come constants for different file formats.
    */
@@ -360,8 +191,6 @@ public:
    */
   static FileFormat GetFileFormat(const char* ext);
 
-  static std::string GetCurrentDateTime(const char* format);
-
   /**
    * On Windows 9x we need a comspec (command.com) substitute to run
    * programs correctly. This string has to be constant available
@@ -380,35 +209,9 @@ public:
    */
   static void ReportLastSystemError(const char* m);
   
-  /** When building DEBUG with MSVC, this enables a hook that prevents
-   * error dialogs from popping up if the program is being run from
-   * DART.
-   */
-  static void EnableMSVCDebugHook();
-
-  /**
-   * Read line from file. Make sure to get everything. Due to a buggy stream
-   * library on the HP and another on Mac OSX, we need this very carefully
-   * written version of getline. Returns true if any data were read before the
-   * end-of-file was reached.
-   */
-  static bool GetLineFromStream(std::istream& istr, std::string& line);
-  
-protected:
-  // these two functions can be called from ConvertToOutputPath
-  /**
-   * Convert the path to a string that can be used in a unix makefile.
-   * double slashes are removed, and spaces are escaped.
-   */
-  static std::string ConvertToUnixOutputPath(const char*);
-  
-  /**
-   * Convert the path to string that can be used in a windows project or
-   * makefile.   Double slashes are removed if they are not at the start of
-   * the string, the slashes are converted to windows style backslashes, and
-   * if there are spaces in the string it is double quoted.
-   */
-  static std::string ConvertToWindowsOutputPath(const char*);
+  /** Split a string on its newlines into multiple lines.  Returns
+      false only if the last line stored had no newline.  */
+  static bool Split(const char* s, std::vector<cmStdString>& l);  
 
 private:
   static bool s_RunCommandHideConsole;

+ 3 - 1
Source/cmTryCompileCommand.cxx

@@ -18,6 +18,8 @@
 #include "cmCacheManager.h"
 #include "cmListFileCache.h"
 
+#include <cmsys/Directory.hxx>
+
 int cmTryCompileCommand::CoreTryCompileCode(
   cmMakefile *mf, std::vector<std::string> const& argv, bool clean)
 {
@@ -263,7 +265,7 @@ void cmTryCompileCommand::CleanupFiles(const char* binDir)
     return;
     }
   
-  cmDirectory dir;
+  cmsys::Directory dir;
   dir.Load(binDir);
   size_t fileNum;
   for (fileNum = 0; fileNum <  dir.GetNumberOfFiles(); ++fileNum)

+ 3 - 2
Tests/Complex/Executable/CMakeLists.txt

@@ -6,6 +6,7 @@ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTEST_CXX_FLAGS")
 
 # Link to CMake lib
 LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source)
+LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source/kwsys)
 # Use LINK_LIBRARIES instead of TARGET_LINK_LIBRARIES to 
 SET(COMPLEX_LIBS CMakeTestLibrary;CMakeTestLibraryShared;CMakeTestCLibraryShared)
 LINK_LIBRARIES(${COMPLEX_LIBS})
@@ -13,9 +14,9 @@ LINK_LIBRARIES(${COMPLEX_LIBS})
 
 ADD_EXECUTABLE(complex complex)
 IF (UNIX)
-  TARGET_LINK_LIBRARIES(complex CMakeLib ${CMAKE_DL_LIBS})
+  TARGET_LINK_LIBRARIES(complex CMakeLib cmsys ${CMAKE_DL_LIBS})
 ELSE(UNIX)
-  TARGET_LINK_LIBRARIES(complex CMakeLib) 
+  TARGET_LINK_LIBRARIES(complex CMakeLib cmsys)
   IF (NOT BORLAND)
     TARGET_LINK_LIBRARIES(complex rpcrt4.lib)
   ENDIF(NOT BORLAND)

+ 3 - 2
Tests/ComplexOneConfig/Executable/CMakeLists.txt

@@ -6,6 +6,7 @@ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTEST_CXX_FLAGS")
 
 # Link to CMake lib
 LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source)
+LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source/kwsys)
 # Use LINK_LIBRARIES instead of TARGET_LINK_LIBRARIES to 
 SET(COMPLEX_LIBS CMakeTestLibrary;CMakeTestLibraryShared;CMakeTestCLibraryShared)
 LINK_LIBRARIES(${COMPLEX_LIBS})
@@ -13,9 +14,9 @@ LINK_LIBRARIES(${COMPLEX_LIBS})
 
 ADD_EXECUTABLE(complex complex)
 IF (UNIX)
-  TARGET_LINK_LIBRARIES(complex CMakeLib ${CMAKE_DL_LIBS})
+  TARGET_LINK_LIBRARIES(complex CMakeLib cmsys ${CMAKE_DL_LIBS})
 ELSE(UNIX)
-  TARGET_LINK_LIBRARIES(complex CMakeLib) 
+  TARGET_LINK_LIBRARIES(complex CMakeLib cmsys)
   IF (NOT BORLAND)
     TARGET_LINK_LIBRARIES(complex rpcrt4.lib)
   ENDIF(NOT BORLAND)

+ 3 - 2
Tests/ComplexRelativePaths/Executable/CMakeLists.txt

@@ -6,6 +6,7 @@ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTEST_CXX_FLAGS")
 
 # Link to CMake lib
 LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source)
+LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source/kwsys)
 # Use LINK_LIBRARIES instead of TARGET_LINK_LIBRARIES to 
 SET(COMPLEX_LIBS CMakeTestLibrary;CMakeTestLibraryShared;CMakeTestCLibraryShared)
 LINK_LIBRARIES(${COMPLEX_LIBS})
@@ -13,9 +14,9 @@ LINK_LIBRARIES(${COMPLEX_LIBS})
 
 ADD_EXECUTABLE(complex complex)
 IF (UNIX)
-  TARGET_LINK_LIBRARIES(complex CMakeLib ${CMAKE_DL_LIBS})
+  TARGET_LINK_LIBRARIES(complex CMakeLib cmsys ${CMAKE_DL_LIBS})
 ELSE(UNIX)
-  TARGET_LINK_LIBRARIES(complex CMakeLib) 
+  TARGET_LINK_LIBRARIES(complex CMakeLib cmsys)
   IF (NOT BORLAND)
     TARGET_LINK_LIBRARIES(complex rpcrt4.lib)
   ENDIF(NOT BORLAND)

+ 65 - 2
bootstrap

@@ -33,7 +33,6 @@ CMAKE_SOURCES="\
   cmRegularExpression \
   cmSourceFile \
   cmSystemTools \
-  cmDirectory \
   cmGlobalUnixMakefileGenerator \
   cmLocalUnixMakefileGenerator \
   cmCommands \
@@ -44,6 +43,24 @@ CMAKE_SOURCES="\
   cmVariableWatch \
   cmSourceGroup"
 
+KWSYS_SOURCES="\
+  Directory \
+  RegularExpression \
+  SystemTools"
+
+KWSYS_FILES="\
+  Directory.hxx \
+  Process.h \
+  RegularExpression.hxx \
+  StandardIncludes.hxx \
+  SystemTools.hxx"
+
+KWSYS_STD_FILES="
+  fstream \
+  iosfwd \
+  iostream \
+  sstream"
+
 cmake_system=`uname`
 
 cmake_source_dir=`echo $0 | sed -n '/\//{s/\/[^\/]*$//;p;}'`
@@ -117,6 +134,8 @@ cmake_replace_string ()
         mv -f "${OUTFILE}.tmp" "${OUTFILE}"
       fi
     fi
+  else
+    cmake_error "Cannot find file ${INFILE}"
   fi
 }
 
@@ -251,6 +270,16 @@ if [ ! -d "${cmake_bootstrap_dir}" ]; then
 fi
 cd "${cmake_bootstrap_dir}"
 
+[ -d "cmsys" ] || mkdir "cmsys"
+if [ ! -d "cmsys" ]; then
+  cmake_error "Cannot create directory ${cmake_bootstrap_dir}/cmsys"
+fi
+
+[ -d "cmsys/std" ] || mkdir "cmsys/std"
+if [ ! -d "cmsys/std" ]; then
+  cmake_error "Cannot create directory ${cmake_bootstrap_dir}/cmsys/std"
+fi
+
 # Delete all the bootstrap files
 rm -f "${cmake_bootstrap_dir}/cmake_bootstrap.log"
 
@@ -406,9 +435,12 @@ cmake_report cmConfigure.h.tmp " */"
 # Test for STD namespace
 if cmake_try_run "${cmake_cxx_compiler}" "${cmake_cxx_flags}" "${cmake_source_dir}/Modules/TestForSTDNamespace.cxx" >> cmake_bootstrap.log 2>&1; then
   cmake_report cmConfigure.h.tmp "/* #undef CMAKE_NO_STD_NAMESPACE */"
+  cmake_report cmConfigure.h.tmp "#define cmsys_std std"
   echo "${cmake_cxx_compiler} has STD namespace"
 else
   cmake_report cmConfigure.h.tmp "#define CMAKE_NO_STD_NAMESPACE 1"
+  cmake_report cmConfigure.h.tmp "#define KWSYS_NO_STD_NAMESPACE"
+  cmake_report cmConfigure.h.tmp "#define cmsys_std"
   echo "${cmake_cxx_compiler} does not have STD namespace"
 fi
 
@@ -418,6 +450,8 @@ if cmake_try_run "${cmake_cxx_compiler}" "${cmake_cxx_flags}" "${cmake_source_di
   echo "${cmake_cxx_compiler} has ANSI stream headers"
 else
   cmake_report cmConfigure.h.tmp "#define CMAKE_NO_ANSI_STREAM_HEADERS 1"
+  cmake_report cmConfigure.h.tmp "#define KWSYS_NO_ANSI_STREAM_HEADERS 1"
+  cmake_report cmConfigure.h.tmp "#define cmsys_NO_ANSI_STREAM_HEADERS"
   echo "${cmake_cxx_compiler} does not have ANSI stream headers"
 fi
 
@@ -432,6 +466,8 @@ if cmake_try_run "${cmake_cxx_compiler}" "${cmake_cxx_flags}" "${TMPFILE}.cxx" >
   echo "${cmake_cxx_compiler} has ANSI string streams"
 else
   cmake_report cmConfigure.h.tmp "#define CMAKE_NO_ANSI_STRING_STREAM 1"
+  cmake_report cmConfigure.h.tmp "#define KWSYS_NO_ANSI_STRING_STREAM 1"
+  cmake_report cmConfigure.h.tmp "#define cmsys_NO_ANSI_STRING_STREAM 1"
   echo "${cmake_cxx_compiler} does not have ANSI string streams"
 fi
 rm -f "${TMPFILE}.cxx"
@@ -444,6 +480,11 @@ else
   cmake_report cmConfigure.h.tmp "#define CMAKE_NO_ANSI_FOR_SCOPE 1"
   echo "${cmake_cxx_compiler} does not have ANSI for scoping"
 fi
+cmake_report cmConfigure.h.tmp "/* Defined if std namespace is the GCC hack.  */"
+cmake_report cmConfigure.h.tmp "#if defined(__GNUC__) && (__GNUC__ < 3)"
+cmake_report cmConfigure.h.tmp "# define cmsys_FAKE_STD_NAMESPACE"
+cmake_report cmConfigure.h.tmp "#endif"
+cmake_report cmConfigure.h.tmp "#define kwsys_std cmsys_std"
 
 # Write CMake version
 for a in MAJOR MINOR PATCH; do
@@ -458,12 +499,29 @@ if diff cmConfigure.h cmConfigure.h.tmp > /dev/null 2> /dev/null; then
   rm -f cmConfigure.h.tmp
 else
   mv -f cmConfigure.h.tmp cmConfigure.h
+  cp cmConfigure.h cmsys/Configure.hxx
 fi
 
+# Prepare KWSYS
+for a in ${KWSYS_FILES}; do 
+  cmake_replace_string "${cmake_source_dir}/Source/kwsys/${a}.in" \
+     "${cmake_bootstrap_dir}/cmsys/${a}" KWSYS_NAMESPACE cmsys
+done
+for a in ${KWSYS_STD_FILES}; do 
+  cmake_replace_string "${cmake_source_dir}/Source/kwsys/kwsys_std_${a}.h.in" \
+     "${cmake_bootstrap_dir}/cmsys/std/${a}" KWSYS_NAMESPACE cmsys
+done
+cmake_replace_string "${cmake_source_dir}/Source/kwsys/kwsys_std.h.in" \
+   "${cmake_bootstrap_dir}/cmsys/std/stl.h.in" KWSYS_NAMESPACE cmsys
+for a in string vector; do
+  cmake_replace_string "${cmake_bootstrap_dir}/cmsys/std/stl.h.in" \
+    "${cmake_bootstrap_dir}/cmsys/std/${a}" KWSYS_STL_HEADER ${a}
+done
+
 # Generate Makefile
 dep="cmConfigure.h `cmake_escape \"${cmake_source_dir}\"`/Source/*.h"
 objs=""
-for a in ${CMAKE_SOURCES}; do
+for a in ${CMAKE_SOURCES} ${KWSYS_SOURCES}; do
   objs="${objs} ${a}.o"
 done
 
@@ -483,6 +541,11 @@ for a in ${CMAKE_SOURCES}; do
   echo "${a}.o : ${src} ${dep}" >> "${cmake_bootstrap_dir}/Makefile"
   echo "	${cmake_cxx_compiler} ${cmake_cxx_flags} -c ${src} -o ${a}.o" >> "${cmake_bootstrap_dir}/Makefile"
 done
+for a in ${KWSYS_SOURCES}; do
+  src=`cmake_escape "${cmake_source_dir}/Source/kwsys/${a}.cxx"`
+  echo "${a}.o : ${src} ${dep}" >> "${cmake_bootstrap_dir}/Makefile"
+  echo "	${cmake_cxx_compiler} ${cmake_cxx_flags} -I`cmake_escape \"${cmake_bootstrap_dir}/cmsys\"` -DKWSYS_NAMESPACE=cmsys -c ${src} -o ${a}.o" >> "${cmake_bootstrap_dir}/Makefile"
+done
 
 # Write prefix to Bootstrap.cmk/InitialConfigureFlags.cmake
 echo "SET (CMAKE_CONFIGURE_INSTALL_PREFIX \"${cmake_prefix_dir}\" CACHE PATH \"Install path prefix, prepended onto install directories, For CMake this will always override CMAKE_INSTALL_PREFIX in the cache.\")" > "${cmake_bootstrap_dir}/InitialConfigureFlags.cmake"

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.