Commit bc669730 authored by Andy Cedilnik's avatar Andy Cedilnik
Browse files

ENH: Add method to find file in parent directories if it exists

parent 9a92c429
......@@ -2071,6 +2071,29 @@ bool SystemTools::IsSubDirectory(const char* cSubdir, const char* cDir)
return false;
}
kwsys_stl::string SystemTools::FileExistsInParentDirectories(const char* fname,
const char* directory, const char* toplevel)
{
kwsys_stl::string file = fname;
SystemTools::ConvertToUnixSlashes(file);
kwsys_stl::string dir = directory;
SystemTools::ConvertToUnixSlashes(dir);
while ( 1 )
{
kwsys_stl::string path = dir + "/" + file;
if ( SystemTools::FileExists(path.c_str()) )
{
return path;
}
if ( dir.size() < strlen(toplevel) )
{
break;
}
dir = SystemTools::GetParentDirectory(dir.c_str());
}
return "";
}
// These must NOT be initialized. Default initialization to zero is
// necessary.
unsigned int SystemToolsManagerCount;
......
......@@ -322,6 +322,12 @@ public:
/** Check if the given file or directory is in subdirectory of dir */
static bool IsSubDirectory(const char* fileOrDir, const char* dir);
/** Check if the given file exists in one of the parent directory of the
* given file or directory and if it does, return the name of the file.
* Toplevel specifies the top-most directory to where it will look.*/
static kwsys_stl::string FileExistsInParentDirectories(const char* fname,
const char* directory, const char* toplevel);
protected:
// these two functions can be called from ConvertToOutputPath
/**
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment