// // aegis - project change supervisor // Copyright (C) 2006-2008 Peter Miller; // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License, // version 3, as published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see // . // #ifndef MAKEGEN_TARGET_H #define MAKEGEN_TARGET_H #include /** * The abstract target base class is used to represent an abstract * output target content. This generalises all source file waking into * the one place, leaving the derived classes to implement specific * operations. */ class target { public: /** * The destructor. */ virtual ~target(); /** * The create class method is used to manufacture a new instance of * a target processor by name. * * @param name * The name of the target class. */ static target *create(const nstring &name); /** * The process method is used to process the list of files. * It may only be called once. */ void process(const nstring_list &filenames); /** * The vpath method is used to append another directory to the * viewpath used to search for files. * * @param dirnam * The path of a directory to add to the view path. */ static void vpath(const nstring &dirnam); /** * The script method is used to append another file to the list of * extra script files to build. * * @param file_name * The path of a script source file. */ static void script(const nstring &file_name); /** * The resolve method is used to take a relative path and locate * the actual path of the file by looking down the view path. The * first hit is returned. * * If the file is not found, the relpath is returned. * * @param relpath * file name to search for * @returns * path to the file */ static nstring resolve(const nstring &relpath); protected: /** * The default constructor. * Thou shalt derive from this class. */ target(); /** * The preprocess method is called by the process(nstring_list) for * each file name in the list before the begin() method is * called. Do not generate any output from this method. * * @param filename * The name of the file to be processed. * @note * The file name has not been resolved to an absolute path via * the vpath. Use the resolve method for that. */ virtual void preprocess(const nstring &filename); /** * The begin method is called by the process(nstring_list) method * immediately before it starts calling process(nstring) for each * file name. */ virtual void begin() = 0; /** * The process method is called by the process(nstring_list) for * each file name in the list. * * @param filename * The name of the file to be processed. * @param is_a_script * true if file is a script to be built * @note * The file name has not been resolved to an absolute path via * the vpath. Use the resolve method for that. */ virtual void process(const nstring &filename, bool is_a_script) = 0; /** * The end method is called by the process(nstring_list) method * immediately after it finishes calling process(nstring) for each * file name. */ virtual void end() = 0; /** * The exists method is used to determine if the given path exists * in the filer systems. No particular type (file, drectory, etc) * is implied. * * @param path * The path to test. * @returns * bool; true if exists, false if not */ static bool exists(const nstring &path); /** * The trim_script_suffix method is used to determine whether or * not script file need to have their file extension removed when * they are "built". */ bool trim_script_suffix() const; private: /** * The view_path instance variable is used to remember the list of * directories to search for source files. */ static nstring_list view_path; /** * The scripts instance variable is used to remember this set of * script sources that are to be built. */ static nstring_list scripts; /** * The copy constructor. Do not use. */ target(const target &); /** * The assignment operator. Do not use. */ target &operator=(const target &); }; #endif // MAKEGEN_TARGET_H