]> git.tdb.fi Git - builder.git/blobdiff - source/binarycomponent.cpp
Support source generators that combine multiple files into one
[builder.git] / source / binarycomponent.cpp
index 565e8bc1759ad6fb3bffdda89e3626fbde021012..74ac0baf5c550ce3a349581da8a730d52a64d054 100644 (file)
@@ -64,12 +64,30 @@ void BinaryComponent::create_targets() const
                Tool *gen = pkg_tools.get_tool_for_suffix(ext);
                if(gen)
                {
-                       Target *tmpl = gen->create_source(*this, *i);
-                       if(tmpl)
+                       list<Target *> templates;
+                       templates.push_back(gen->create_source(*this, *i));
+
+                       Tool::ProcessingUnit processing_unit = gen->get_processing_unit();
+                       if(processing_unit!=Tool::ONE_FILE)
                        {
-                               src = gen->create_target(*tmpl);
-                               ext = FS::extpart(FS::basename(dynamic_cast<FileTarget &>(*src).get_path()));
+                               FS::Path source_dir = FS::dirname(*i);
+                               SourceList::const_iterator j = i;
+                               for(++j; j!=source_filenames.end(); )
+                               {
+                                       if((processing_unit!=Tool::DIRECTORY || FS::dirname(*j)==source_dir) &&
+                                               pkg_tools.get_tool_for_suffix(FS::extpart(FS::basename(*j)))==gen)
+                                       {
+                                               templates.push_back(gen->create_source(*this, *j));
+                                               // Remove additional files so they won't get processed again
+                                               source_filenames.erase(j++);
+                                       }
+                                       else
+                                               ++j;
+                               }
                        }
+
+                       src = gen->create_target(templates);
+                       ext = FS::extpart(FS::basename(dynamic_cast<FileTarget &>(*src).get_path()));
                }
 
                Tool *tool = toolchain.get_tool_for_suffix(ext, true);