Commit 65ef8532 authored by Brad King's avatar Brad King

ENH: Added cmSystemTools::GlobDirs function to allow wildcards in paths (like /foo/bar/*).

parent ee86c59c
......@@ -76,7 +76,8 @@ bool cmFindFileCommand::InitialPass(std::vector<std::string>& args)
// expand variables
std::string exp = args[j];
m_Makefile->ExpandVariablesInString(exp);
path.push_back(exp);
// Glob the entry in case of wildcards.
cmSystemTools::GlobDirs(exp.c_str(), path);
}
// add the standard path
......
......@@ -77,7 +77,8 @@ bool cmFindLibraryCommand::InitialPass(std::vector<std::string>& args)
else
{
cmSystemTools::ExpandRegistryValues(args[j]);
path.push_back(args[j]);
// Glob the entry in case of wildcards.
cmSystemTools::GlobDirs(args[j].c_str(), path);
}
}
}
......@@ -94,7 +95,9 @@ bool cmFindLibraryCommand::InitialPass(std::vector<std::string>& args)
std::string exp = args[j];
m_Makefile->ExpandVariablesInString(exp);
cmSystemTools::ExpandRegistryValues(exp);
path.push_back(exp);
// Glob the entry in case of wildcards.
cmSystemTools::GlobDirs(exp.c_str(), path);
}
}
......
......@@ -68,8 +68,10 @@ bool cmFindPathCommand::InitialPass(std::vector<std::string>& args)
// expand variables
std::string exp = args[j];
m_Makefile->ExpandVariablesInString(exp);
cmSystemTools::ExpandRegistryValues(exp);
path.push_back(exp);
cmSystemTools::ExpandRegistryValues(exp);
// Glob the entry in case of wildcards.
cmSystemTools::GlobDirs(exp.c_str(), path);
}
// add the standard path
......
......@@ -91,7 +91,8 @@ bool cmFindProgramCommand::InitialPass(std::vector<std::string>& args)
else
{
cmSystemTools::ExpandRegistryValues(args[j]);
path.push_back(args[j]);
// Glob the entry in case of wildcards.
cmSystemTools::GlobDirs(args[j].c_str(), path);
}
}
}
......@@ -108,7 +109,9 @@ bool cmFindProgramCommand::InitialPass(std::vector<std::string>& args)
std::string exp = args[j];
m_Makefile->ExpandVariablesInString(exp);
cmSystemTools::ExpandRegistryValues(exp);
path.push_back(exp);
// Glob the entry in case of wildcards.
cmSystemTools::GlobDirs(exp.c_str(), path);
}
}
for(std::vector<std::string>::iterator i = names.begin();
......
......@@ -1305,3 +1305,37 @@ void cmSystemTools::Glob(const char *directory, const char *regexp,
}
}
void cmSystemTools::GlobDirs(const char *fullPath,
std::vector<std::string>& files)
{
std::string path = fullPath;
int pos = path.find("/*");
if(pos == std::string::npos)
{
files.push_back(fullPath);
return;
}
std::string startPath = path.substr(0, pos);
std::string finishPath = path.substr(pos+2);
cmDirectory d;
if (d.Load(startPath.c_str()))
{
for (int i = 0; i < d.GetNumberOfFiles(); ++i)
{
if((std::string(d.GetFile(i)) != ".")
&& (std::string(d.GetFile(i)) != ".."))
{
std::string fname = startPath;
fname +="/";
fname += d.GetFile(i);
if(cmSystemTools::FileIsDirectory(fname.c_str()))
{
fname += finishPath;
cmSystemTools::GlobDirs(fname.c_str(), files);
}
}
}
}
}
......@@ -226,6 +226,7 @@ public:
static bool FileIsDirectory(const char* name);
static void Glob(const char *directory, const char *regexp,
std::vector<std::string>& files);
static void GlobDirs(const char *fullPath, std::vector<std::string>& files);
static std::string GetCurrentWorkingDirectory();
static std::string GetProgramPath(const char*);
......
Markdown is supported
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