Merge branch 'upstream-kwsys' into update-kwsys

This commit is contained in:
Brad King 2015-12-04 09:59:04 -05:00
commit 306e2016bb
2 changed files with 197 additions and 17 deletions

View File

@ -2402,8 +2402,7 @@ bool SystemTools::CopyFileAlways(const std::string& source, const std::string& d
// name as the source in that directory. // name as the source in that directory.
std::string destination_dir; std::string destination_dir;
if(SystemTools::FileExists(destination) && if(SystemTools::FileIsDirectory(destination))
SystemTools::FileIsDirectory(destination))
{ {
destination_dir = real_destination; destination_dir = real_destination;
SystemTools::ConvertToUnixSlashes(real_destination); SystemTools::ConvertToUnixSlashes(real_destination);
@ -2969,19 +2968,14 @@ std::string SystemTools::FindProgram(
const std::vector<std::string>& userPaths, const std::vector<std::string>& userPaths,
bool no_system_path) bool no_system_path)
{ {
std::vector<std::string> extensions;
std::string tryPath; std::string tryPath;
#if defined (_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) #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 // check to see if the name already has a .xxx at
// the end of it // the end of it
if(name.size() > 3 && name[name.size()-4] == '.')
{
hasExtension = true;
}
// on windows try .com then .exe // on windows try .com then .exe
if(!hasExtension) if(name.size() <= 3 || name[name.size()-4] != '.')
{ {
extensions.push_back(".com"); extensions.push_back(".com");
extensions.push_back(".exe"); extensions.push_back(".exe");
@ -2992,8 +2986,7 @@ std::string SystemTools::FindProgram(
{ {
tryPath = name; tryPath = name;
tryPath += *i; tryPath += *i;
if(SystemTools::FileExists(tryPath) && if(SystemTools::FileExists(tryPath, true))
!SystemTools::FileIsDirectory(tryPath))
{ {
return SystemTools::CollapseFullPath(tryPath); return SystemTools::CollapseFullPath(tryPath);
} }
@ -3002,11 +2995,9 @@ std::string SystemTools::FindProgram(
#endif #endif
// now try just the name // now try just the name
tryPath = name; if(SystemTools::FileExists(name, true))
if(SystemTools::FileExists(tryPath) &&
!SystemTools::FileIsDirectory(tryPath))
{ {
return SystemTools::CollapseFullPath(tryPath); return SystemTools::CollapseFullPath(name);
} }
// now construct the path // now construct the path
std::vector<std::string> path; std::vector<std::string> path;
@ -3043,6 +3034,7 @@ std::string SystemTools::FindProgram(
// Remove double quotes from the path on windows // Remove double quotes from the path on windows
SystemTools::ReplaceString(*p, "\"", ""); SystemTools::ReplaceString(*p, "\"", "");
#endif #endif
#if defined (_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__)
// first try with extensions // first try with extensions
for(std::vector<std::string>::iterator ext for(std::vector<std::string>::iterator ext
= extensions.begin(); ext != extensions.end(); ++ext) = extensions.begin(); ext != extensions.end(); ++ext)
@ -3055,6 +3047,7 @@ std::string SystemTools::FindProgram(
return SystemTools::CollapseFullPath(tryPath); return SystemTools::CollapseFullPath(tryPath);
} }
} }
#endif
// now try it without them // now try it without them
tryPath = *p; tryPath = *p;
tryPath += name; tryPath += name;
@ -3133,8 +3126,7 @@ std::string SystemTools
tryPath = *p; tryPath = *p;
tryPath += name; tryPath += name;
tryPath += ".framework"; tryPath += ".framework";
if(SystemTools::FileExists(tryPath) if(SystemTools::FileIsDirectory(tryPath))
&& SystemTools::FileIsDirectory(tryPath))
{ {
return SystemTools::CollapseFullPath(tryPath); return SystemTools::CollapseFullPath(tryPath);
} }

View File

@ -172,6 +172,63 @@ static bool CheckFileOperations()
<< testNewDir << std::endl; << testNewDir << std::endl;
res = false; 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)) if (!kwsys::SystemTools::Touch(testNewFile.c_str(), true))
{ {
@ -180,6 +237,97 @@ static bool CheckFileOperations()
<< testNewFile << std::endl; << testNewFile << std::endl;
res = false; 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 // Reset umask
#if defined(_WIN32) && !defined(__CYGWIN__) #if defined(_WIN32) && !defined(__CYGWIN__)
@ -851,6 +999,44 @@ static bool CheckGetPath()
return res; 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*[]) int testSystemTools(int, char*[])
{ {
@ -888,5 +1074,7 @@ int testSystemTools(int, char*[])
res &= CheckGetPath(); res &= CheckGetPath();
res &= CheckFind();
return res ? 0 : 1; return res ? 0 : 1;
} }