]> git.tdb.fi Git - builder.git/blobdiff - source/datatransform.cpp
Refactor transitive dependencies to work on all targets
[builder.git] / source / datatransform.cpp
diff --git a/source/datatransform.cpp b/source/datatransform.cpp
deleted file mode 100644 (file)
index e45c80a..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-#include <msp/fs/dir.h>
-#include <msp/fs/utils.h>
-#include <msp/strings/format.h>
-#include <msp/strings/regex.h>
-#include "builder.h"
-#include "cache.h"
-#include "component.h"
-#include "datatransform.h"
-#include "file.h"
-#include "sourcepackage.h"
-
-using namespace std;
-using namespace Msp;
-
-DataTransform::DataTransform(Builder &b, const Component &c, const FS::Path &p):
-       FileTarget(b, c.get_package(), p)
-{
-       component = &c;
-}
-
-void DataTransform::find_dependencies()
-{
-       list<string> files;
-       Cache &cache = component->get_package().get_cache();
-       // XXX Should check directory mtime as well
-       if(mtime<cache.get_mtime() && cache.has_key(this, "files"))
-               files = cache.get_values(this, "files");
-       else
-       {
-               builder.get_logger().log("files", format("Reading imports from %s", path.str()));
-               IO::File in(path.str());
-               DataFile::Parser parser(in, path.str());
-
-               list<string> dir_files;
-               while(!in.eof())
-               {
-                       DataFile::Statement st = parser.parse();
-                       if(st.keyword=="for_each")
-                       {
-                               // There's bound to be at least one file: the transform itself
-                               if(dir_files.empty())
-                               {
-                                       FS::Path dir = FS::dirname(path);
-                                       builder.get_logger().log("files", format("Traversing %s", dir.str()));
-                                       dir_files = list_files(dir);
-                               }
-
-                               for(DataFile::Statement::Arguments::const_iterator i=st.args.begin(); i!=st.args.end(); ++i)
-                               {
-                                       Regex re(i->get<string>());
-                                       for(list<string>::const_iterator j=dir_files.begin(); j!=dir_files.end(); ++j)
-                                               if(re.match(*j))
-                                                       files.push_back(*j);
-                               }
-                       }
-                       else if(st.keyword=="file" && st.args.size()==1)
-                               files.push_back(st.args.front().get<string>());
-               }
-
-               cache.set_values(this, "files", files);
-       }
-
-       for(list<string>::iterator i=files.begin(); i!=files.end(); ++i)
-       {
-               FS::Path file_path = FS::dirname(path)/ *i;
-               if(Target *tgt = builder.get_vfs().get_target(file_path))
-                       add_transitive_dependency(*tgt);
-               else
-                       add_transitive_dependency(*new File(builder, *package, file_path));
-       }
-}