From 3b743880503248235f319bd3e59e534ea26383f6 Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Mon, 24 Jul 2006 11:27:07 -0400 Subject: [PATCH] ENH: allow for source tree to be in root directory --- Source/cmLocalVisualStudio7Generator.cxx | 1 + Source/kwsys/SystemTools.cxx | 24 ++++++++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 4466e8d1b..8e5c59890 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -176,6 +176,7 @@ void cmLocalVisualStudio7Generator::AddVCProjBuildRule(cmTarget& tgt) std::string makefileIn = this->Makefile->GetStartDirectory(); makefileIn += "/"; makefileIn += "CMakeLists.txt"; + makefileIn = cmSystemTools::CollapseFullPath(makefileIn.c_str()); std::string comment = "Building Custom Rule "; comment += makefileIn; std::string args; diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx index e4efe3980..172ce497f 100644 --- a/Source/kwsys/SystemTools.cxx +++ b/Source/kwsys/SystemTools.cxx @@ -1339,13 +1339,17 @@ void SystemTools::ConvertToUnixSlashes(kwsys_stl::string& path) path.replace(0,1,homeEnv); } } - + // remove trailing slash if the path is more than + // a single / pathCString = path.c_str(); - if (*(pathCString+(path.size()-1)) == '/') + if(path.size() > 1 && *(pathCString+(path.size()-1)) == '/') { - path = path.substr(0, path.size()-1); + // if it is c:/ then do not remove the trailing slash + if(!((path.size() == 3 && pathCString[1] == ':'))) + { + path = path.substr(0, path.size()-1); + } } - } } @@ -2503,7 +2507,6 @@ kwsys_stl::string SystemTools::CollapseFullPath(const char* in_path, // Split the input path components. kwsys_stl::vector path_components; SystemTools::SplitPath(in_path, path_components); - // If the input path is relative, start with a base path. if(path_components[0].length() == 0) { @@ -2891,7 +2894,16 @@ kwsys_stl::string SystemTools::GetFilenamePath(const kwsys_stl::string& filename kwsys_stl::string::size_type slash_pos = fn.rfind("/"); if(slash_pos != kwsys_stl::string::npos) { - return fn.substr(0, slash_pos); + kwsys_stl::string ret = fn.substr(0, slash_pos); + if(ret.size() == 2 && ret[1] == ':') + { + return ret + '/'; + } + if(ret.size() == 0) + { + return "/"; + } + return ret; } else {