summaryrefslogtreecommitdiffabout
path: root/include/sitecing/component_factory.h
Side-by-side diff
Diffstat (limited to 'include/sitecing/component_factory.h') (more/less context) (ignore whitespace changes)
-rw-r--r--include/sitecing/component_factory.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/include/sitecing/component_factory.h b/include/sitecing/component_factory.h
new file mode 100644
index 0000000..a208ed1
--- a/dev/null
+++ b/include/sitecing/component_factory.h
@@ -0,0 +1,84 @@
+#ifndef __SITECING_COMPONENT_FACTORY_H
+#define __SITECING_COMPONENT_FACTORY_H
+
+#include <string>
+#include <list>
+#include <stdexcept>
+#include "sitecing/file_factory.h"
+#include "sitecing/configuration.h"
+
+/**
+ * @file
+ * @brief The component_factory class declaration.
+ */
+
+namespace sitecing {
+ using namespace std;
+
+ /**
+ * @brief The components builder.
+ */
+ class component_factory : public file_factory {
+ public:
+ /**
+ * Path to the source files root.
+ */
+ string root_source;
+ /**
+ * Path to the root of the intermediate files storage.
+ */
+ string root_intermediate;
+ /**
+ * Output path for .so components.
+ */
+ string root_so;
+ /**
+ * Reference to the configuration container.
+ */
+ configuration& config;
+
+ /**
+ * @param c reference to the configuration container.
+ */
+ component_factory(configuration& c);
+
+ /**
+ * @overload file_factory::get_dependencies()
+ */
+ virtual void get_dependencies(const string& dst,file_list_t& deps);
+ /**
+ * @overload file_factory::is_uptodate()
+ */
+ virtual bool is_uptodate(const string& dst,file_list_t *deps=NULL);
+ /**
+ * @overload file_factory::build()
+ */
+ virtual void build(const string& dst);
+
+ /**
+ * Helper function for executing external command.
+ * @param cmd the command to execute.
+ * @param args the command line arguments.
+ * @param stdo stdout for the child process.
+ * @param stde stderr for the child process.
+ * @return exit code.
+ */
+ int execute(const string& cmd,const list<string>& args,int stdo,int stde);
+ /**
+ * Fetch the class name of the component.
+ * @param component the component.
+ * @return the class name.
+ */
+ string get_classname(const string& component);
+ /**
+ * Get the components from which the target component has been
+ * derived.
+ * @param component the target component
+ * @param rv where to store the list of ancestors.
+ */
+ void get_ancestors(const string& component,file_list_t &rv);
+ };
+
+}
+
+#endif /* __SITECING_COMPONENT_FACTORY_H */