diff options
Diffstat (limited to 'Source/cmAuxSourceDirectoryRule.cxx')
-rw-r--r-- | Source/cmAuxSourceDirectoryRule.cxx | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/Source/cmAuxSourceDirectoryRule.cxx b/Source/cmAuxSourceDirectoryRule.cxx new file mode 100644 index 0000000..e7c5211 --- /dev/null +++ b/Source/cmAuxSourceDirectoryRule.cxx @@ -0,0 +1,46 @@ +#include "cmAuxSourceDirectoryRule.h" +#include "cmDirectory.h" + +// cmAuxSourceDirectoryRule +bool cmAuxSourceDirectoryRule::Invoke(std::vector<std::string>& args) +{ + if(args.size() < 1 || args.size() > 1) + { + this->SetError("PROJECT called with incorrect number of arguments"); + return false; + } + + std::string templateDirectory = args[0]; + m_Makefile->AddExtraDirectory(templateDirectory.c_str()); + std::string tdir = m_Makefile->GetCurrentDirectory(); + tdir += "/"; + tdir += templateDirectory; + // Load all the files in the directory + cmDirectory dir; + if(dir.Load(tdir.c_str())) + { + int numfiles = dir.GetNumberOfFiles(); + for(int i =0; i < numfiles; ++i) + { + std::string file = dir.GetFile(i); + // ignore files less than f.cxx in length + if(file.size() > 4) + { + // Remove the extension + std::string::size_type dotpos = file.rfind("."); + file = file.substr(0, dotpos); + std::string fullname = templateDirectory; + fullname += "/"; + fullname += file; + // add the file as a class file so + // depends can be done + cmClassFile cmfile; + cmfile.SetName(fullname.c_str(), m_Makefile->GetCurrentDirectory()); + cmfile.m_AbstractClass = false; + m_Makefile->AddClass(cmfile); + } + } + } + return true; +} + |