summaryrefslogtreecommitdiffstats
path: root/Source/cmAuxSourceDirectoryRule.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmAuxSourceDirectoryRule.cxx')
-rw-r--r--Source/cmAuxSourceDirectoryRule.cxx46
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;
+}
+