#ifndef __SITECING_COMPONENT_FACTORY_H #define __SITECING_COMPONENT_FACTORY_H #include #include #include #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); virtual void get_dependencies(const string& dst,file_list_t& deps); virtual bool is_uptodate(const string& dst,file_list_t *deps=0); virtual void build(const string& dst); virtual void make(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& 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 */