// // 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_MAKEFILE_H #define MAKEGEN_TARGET_MAKEFILE_H #include #include /** * The target_makefile class is used to represent the processing * necessary to produce a Makefile.in file for this project. */ class target_makefile: public target { public: /** * The destructor. */ virtual ~target_makefile(); /** * The default constructor. */ target_makefile(); protected: // See base class for documentation. void preprocess(const nstring &filename); // See base class for documentation. void begin(); // See base class for documentation. void process(const nstring &filename, bool is_a_script); // See base class for documentation. void end(); /** * The c_include_dependencies method is used to scan C++ source * files for include dependencies. * * @param filename * The name of the file to be scanned. * @returns * a space separated list of file names. */ nstring c_include_dependencies(const nstring &filename); /** * The c_include_dependencies method is used to scan a C++ source * file for include dependencies. * * @param filename * The name of the file to be scanned. * @param result * Where to put the names of discovered include files */ void c_include_dependencies(nstring_list &result, const nstring &filename); void c_directive(const char *line, nstring_list &result); private: bool seen_c; bool seen_c_plus_plus; symtab dir_table; nstring_list clean_files; nstring_list dist_clean_files; nstring_list programs; nstring_list test_files; nstring_list man_files; /** * The all_bin instance variable is used to remember the list of * executable files to be constructed by the "all" target. */ nstring_list all_bin; /** * The all_doc instance variable is used to remember the list of * documentation files to be constructed by the "all" target. */ nstring_list all_doc; nstring_list install_bin; symtab object_list; /** * The have_groff instance variable is used to remember whether or * not we have seen GROFF mentioned in the configure.ac file. If * this is the case, we emit more rules which use groff. */ bool have_groff; /** * The have_soelim instance variable is used to remember whether or * not we have seen SOELIM mentioned in the configure.ac file. If * this is the case, we emit rules which use soelim to pre-process * the man files before installing them, otherwise man files are * install as-is. */ bool have_soelim; nstring objext; nstring libext; nstring exeext; bool seen_datadir; nstring_list install_datadir; bool seen_libdir; nstring_list install_libdir; bool seen_yacc; /** * The install_script instance variable is used to remember whether * or not a script has been seen. */ bool install_script; void recursive_mkdir(const nstring &a_src_dir, const nstring &a_dst_dir, const nstring &flavor = "datadir"); void remember_program(const nstring &name); void remember_object_file(const nstring &name); void process_configure_dot_ac(const nstring &fn); /** * The copy constructor. Do not use. */ target_makefile(const target_makefile &); /** * The assignment operator. Do not use. */ target_makefile &operator=(const target_makefile &); }; #endif // MAKEGEN_TARGET_MAKEFILE_H