summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKWSys Robot <kwrobot@kitware.com>2015-12-03 18:19:37 (GMT)
committerBrad King <brad.king@kitware.com>2015-12-04 14:58:59 (GMT)
commitd5d90f5ec8792fafbe754e2c943825267f7aaff1 (patch)
tree4fd6e4190c66907f217141a75f86d737fcf154f6
parente25f294a0e0aa03da4516d0baa488ad02cece089 (diff)
downloadCMake-d5d90f5ec8792fafbe754e2c943825267f7aaff1.zip
CMake-d5d90f5ec8792fafbe754e2c943825267f7aaff1.tar.gz
CMake-d5d90f5ec8792fafbe754e2c943825267f7aaff1.tar.bz2
KWSys 2015-12-03 (6bfc1aef)
Extract upstream KWSys using the following shell commands. $ git archive --prefix=upstream-kwsys/ 6bfc1aef | tar x $ git shortlog --no-merges --abbrev=8 --format='%h %s' 9596e98d..6bfc1aef Rolf Eike Beer (6): 9e9c8ae3 SystemTools: extend test coverage of SystemTools::MakeDirectory() 3f3d9eb5 SystemTools: add basic tests for SystemTools::FindFile() 9ca5f108 SystemTools: entirely remove the extension code on non-Windows platforms 29f82f78 SystemTools: avoid needless copy of std::string ac667cdc SystemTools: remove 2 more explicit calls to FileIsDirectory() 6bfc1aef SystemTools: do not call FileExists() before calling FileIsDirectory()
-rw-r--r--SystemTools.cxx26
-rw-r--r--testSystemTools.cxx188
2 files changed, 197 insertions, 17 deletions
diff --git a/SystemTools.cxx b/SystemTools.cxx
index 37fe421..82087f0 100644
--- a/SystemTools.cxx
+++ b/SystemTools.cxx
@@ -2402,8 +2402,7 @@ bool SystemTools::CopyFileAlways(const std::string& source, const std::string& d
// name as the source in that directory.
std::string destination_dir;
- if(SystemTools::FileExists(destination) &&
- SystemTools::FileIsDirectory(destination))
+ if(SystemTools::FileIsDirectory(destination))
{
destination_dir = real_destination;
SystemTools::ConvertToUnixSlashes(real_destination);
@@ -2969,19 +2968,14 @@ std::string SystemTools::FindProgram(
const std::vector<std::string>& userPaths,
bool no_system_path)
{
- std::vector<std::string> extensions;
std::string tryPath;
#if defined (_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__)
- bool hasExtension = false;
+ std::vector<std::string> extensions;
// check to see if the name already has a .xxx at
// the end of it
- if(name.size() > 3 && name[name.size()-4] == '.')
- {
- hasExtension = true;
- }
// on windows try .com then .exe
- if(!hasExtension)
+ if(name.size() <= 3 || name[name.size()-4] != '.')
{
extensions.push_back(".com");
extensions.push_back(".exe");
@@ -2992,8 +2986,7 @@ std::string SystemTools::FindProgram(
{
tryPath = name;
tryPath += *i;
- if(SystemTools::FileExists(tryPath) &&
- !SystemTools::FileIsDirectory(tryPath))
+ if(SystemTools::FileExists(tryPath, true))
{
return SystemTools::CollapseFullPath(tryPath);
}
@@ -3002,11 +2995,9 @@ std::string SystemTools::FindProgram(
#endif
// now try just the name
- tryPath = name;
- if(SystemTools::FileExists(tryPath) &&
- !SystemTools::FileIsDirectory(tryPath))
+ if(SystemTools::FileExists(name, true))
{
- return SystemTools::CollapseFullPath(tryPath);
+ return SystemTools::CollapseFullPath(name);
}
// now construct the path
std::vector<std::string> path;
@@ -3043,6 +3034,7 @@ std::string SystemTools::FindProgram(
// Remove double quotes from the path on windows
SystemTools::ReplaceString(*p, "\"", "");
#endif
+#if defined (_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__)
// first try with extensions
for(std::vector<std::string>::iterator ext
= extensions.begin(); ext != extensions.end(); ++ext)
@@ -3055,6 +3047,7 @@ std::string SystemTools::FindProgram(
return SystemTools::CollapseFullPath(tryPath);
}
}
+#endif
// now try it without them
tryPath = *p;
tryPath += name;
@@ -3133,8 +3126,7 @@ std::string SystemTools
tryPath = *p;
tryPath += name;
tryPath += ".framework";
- if(SystemTools::FileExists(tryPath)
- && SystemTools::FileIsDirectory(tryPath))
+ if(SystemTools::FileIsDirectory(tryPath))
{
return SystemTools::CollapseFullPath(tryPath);
}
diff --git a/testSystemTools.cxx b/testSystemTools.cxx
index a0f904f..4d97688 100644
--- a/testSystemTools.cxx
+++ b/testSystemTools.cxx
@@ -172,6 +172,63 @@ static bool CheckFileOperations()
<< testNewDir << std::endl;
res = false;
}
+ // calling it again should just return true
+ if (!kwsys::SystemTools::MakeDirectory(testNewDir))
+ {
+ std::cerr
+ << "Problem with second call to MakeDirectory for: "
+ << testNewDir << std::endl;
+ res = false;
+ }
+ // calling with 0 pointer should return false
+ if (kwsys::SystemTools::MakeDirectory(0))
+ {
+ std::cerr
+ << "Problem with MakeDirectory(0)"
+ << std::endl;
+ res = false;
+ }
+ // calling with an empty string should return false
+ if (kwsys::SystemTools::MakeDirectory(std::string()))
+ {
+ std::cerr
+ << "Problem with MakeDirectory(std::string())"
+ << std::endl;
+ res = false;
+ }
+ // check existence
+ if (!kwsys::SystemTools::FileExists(testNewDir.c_str(), false))
+ {
+ std::cerr
+ << "Problem with FileExists as C string and not file for: "
+ << testNewDir << std::endl;
+ res = false;
+ }
+ // remove it
+ if (!kwsys::SystemTools::RemoveADirectory(testNewDir))
+ {
+ std::cerr
+ << "Problem with RemoveADirectory for: "
+ << testNewDir << std::endl;
+ res = false;
+ }
+ // check existence
+ if (kwsys::SystemTools::FileExists(testNewDir.c_str(), false))
+ {
+ std::cerr
+ << "After RemoveADirectory: "
+ << "Problem with FileExists as C string and not file for: "
+ << testNewDir << std::endl;
+ res = false;
+ }
+ // create it using the char* version
+ if (!kwsys::SystemTools::MakeDirectory(testNewDir.c_str()))
+ {
+ std::cerr
+ << "Problem with second call to MakeDirectory as C string for: "
+ << testNewDir << std::endl;
+ res = false;
+ }
if (!kwsys::SystemTools::Touch(testNewFile.c_str(), true))
{
@@ -180,6 +237,97 @@ static bool CheckFileOperations()
<< testNewFile << std::endl;
res = false;
}
+ // calling MakeDirectory with something that is no file should fail
+ if (kwsys::SystemTools::MakeDirectory(testNewFile))
+ {
+ std::cerr
+ << "Problem with to MakeDirectory for: "
+ << testNewFile << std::endl;
+ res = false;
+ }
+
+ // calling with 0 pointer should return false
+ if (kwsys::SystemTools::FileExists(0))
+ {
+ std::cerr
+ << "Problem with FileExists(0)"
+ << std::endl;
+ res = false;
+ }
+ if (kwsys::SystemTools::FileExists(0, true))
+ {
+ std::cerr
+ << "Problem with FileExists(0) as file"
+ << std::endl;
+ res = false;
+ }
+ // calling with an empty string should return false
+ if (kwsys::SystemTools::FileExists(std::string()))
+ {
+ std::cerr
+ << "Problem with FileExists(std::string())"
+ << std::endl;
+ res = false;
+ }
+ // FileExists(x, true) should return false on a directory
+ if (kwsys::SystemTools::FileExists(testNewDir, true))
+ {
+ std::cerr
+ << "Problem with FileExists as file for: "
+ << testNewDir << std::endl;
+ res = false;
+ }
+ if (kwsys::SystemTools::FileExists(testNewDir.c_str(), true))
+ {
+ std::cerr
+ << "Problem with FileExists as C string and file for: "
+ << testNewDir << std::endl;
+ res = false;
+ }
+ // FileExists(x, false) should return true even on a directory
+ if (!kwsys::SystemTools::FileExists(testNewDir, false))
+ {
+ std::cerr
+ << "Problem with FileExists as not file for: "
+ << testNewDir << std::endl;
+ res = false;
+ }
+ if (!kwsys::SystemTools::FileExists(testNewDir.c_str(), false))
+ {
+ std::cerr
+ << "Problem with FileExists as C string and not file for: "
+ << testNewDir << std::endl;
+ res = false;
+ }
+ // should work, was created as new file before
+ if (!kwsys::SystemTools::FileExists(testNewFile))
+ {
+ std::cerr
+ << "Problem with FileExists for: "
+ << testNewDir << std::endl;
+ res = false;
+ }
+ if (!kwsys::SystemTools::FileExists(testNewFile.c_str()))
+ {
+ std::cerr
+ << "Problem with FileExists as C string for: "
+ << testNewDir << std::endl;
+ res = false;
+ }
+ if (!kwsys::SystemTools::FileExists(testNewFile, true))
+ {
+ std::cerr
+ << "Problem with FileExists as file for: "
+ << testNewDir << std::endl;
+ res = false;
+ }
+ if (!kwsys::SystemTools::FileExists(testNewFile.c_str(), true))
+ {
+ std::cerr
+ << "Problem with FileExists as C string and file for: "
+ << testNewDir << std::endl;
+ res = false;
+ }
// Reset umask
#if defined(_WIN32) && !defined(__CYGWIN__)
@@ -851,6 +999,44 @@ static bool CheckGetPath()
return res;
}
+static bool CheckFind()
+{
+ bool res = true;
+ const std::string testFindFileName("testFindFile.txt");
+ const std::string testFindFile(TEST_SYSTEMTOOLS_BINARY_DIR "/"
+ + testFindFileName);
+
+ if (!kwsys::SystemTools::Touch(testFindFile.c_str(), true))
+ {
+ std::cerr
+ << "Problem with Touch for: "
+ << testFindFile << std::endl;
+ // abort here as the existence of the file only makes the test meaningful
+ return false;
+ }
+
+ std::vector<std::string> searchPaths;
+ searchPaths.push_back(TEST_SYSTEMTOOLS_BINARY_DIR);
+ if (kwsys::SystemTools::FindFile(testFindFileName,
+ searchPaths, true).empty())
+ {
+ std::cerr
+ << "Problem with FindFile without system paths for: "
+ << testFindFileName << std::endl;
+ res = false;
+ }
+ if (kwsys::SystemTools::FindFile(testFindFileName,
+ searchPaths, false).empty())
+ {
+ std::cerr
+ << "Problem with FindFile with system paths for: "
+ << testFindFileName << std::endl;
+ res = false;
+ }
+
+ return res;
+}
+
//----------------------------------------------------------------------------
int testSystemTools(int, char*[])
{
@@ -888,5 +1074,7 @@ int testSystemTools(int, char*[])
res &= CheckGetPath();
+ res &= CheckFind();
+
return res ? 0 : 1;
}