Subversion Repositories Programming Utils

Rev

Rev 79 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
45 rm5248 1
#ifndef MAKEFILE_H
2
#define MAKEFILE_H
3
 
4
#include <set>
5
#include <string>
49 rm5248 6
#include <map>
85 rm5248 7
#include <list>
45 rm5248 8
 
49 rm5248 9
#include "dirlist.h"
10
 
45 rm5248 11
/**
12
 * Represents a makefile
13
 */
14
class Makefile{
15
 
16
        public:
17
                /**
18
                 * Parse an already existing makefile
19
                 */
67 rm5248 20
                Makefile( const char* filename, std::map<std::string, std::string>* conf );
45 rm5248 21
 
22
                /**
46 rm5248 23
                 * Create a new Makefile
45 rm5248 24
                 */
78 rm5248 25
                Makefile( std::map<std::string, std::string>* conf, DirList* dirList  );
45 rm5248 26
 
46 rm5248 27
                ~Makefile();
28
 
45 rm5248 29
                /**
30
                 * Output a Makefile
31
                 */
32
                void writeMakefile();
33
 
49 rm5248 34
                /**
35
                 * Add files to the makefile
36
                 */
37
                void addFiles( DirList* dirlist );
38
 
45 rm5248 39
        private:
46 rm5248 40
                void write_header();
45 rm5248 41
 
49 rm5248 42
                void write_variables();
43
 
46 rm5248 44
                void write_lists();
45
 
46
                void write_main_targets();
47
 
48
                void write_main_target_list( const std::set<std::string>&, std::string, std::string );
49
 
50
                void write_dependencies();
51
 
52
                void doFork(int);
53
 
47 rm5248 54
                void findMainPrograms();
55
 
49 rm5248 56
                void findLibraries();
57
 
47 rm5248 58
                void write_install_targets();
59
 
48 rm5248 60
                void remove_old_files();
61
 
62
                void write_trailer( bool );
63
 
67 rm5248 64
                /**
65
                 * Initialize the makefile variables to their default values
66
                 */
67
                void initializeMakefileVariables();
68
 
85 rm5248 69
                /**
70
                 * Write out any custom targets that the user has specified
71
                 */
72
                void writeCustomTargets();
73
 
74
                /**
75
                 * Parse the given file for makefile variables
76
                 */
77
                void parseMakefileVariables( std::ifstream* file );
78
 
46 rm5248 79
        private:
80
 
45 rm5248 81
                //Lists of files
46 rm5248 82
                std::set<std::string> cpp_files; //all C++ files
83
                std::set<std::string> cpp_main;  //all C++ files with main
84
                std::set<std::string> cpp_other; //all C++ files with no main
85
                std::set<std::string> h_files;   //all header files
86
                std::set<std::string> c_files;   //all C files
87
                std::set<std::string> c_main;    //all C files with main
88
                std::set<std::string> c_other;   //all C files with no main
89
                std::set<std::string> ps_files;  //preprocessed assembly
90
                std::set<std::string> ps_main;   //preprocessed assembly with main
91
                std::set<std::string> ps_other;  //preprocessed assembly with no main
92
                std::set<std::string> s_files;   //assembly
93
                std::set<std::string> s_main;    //assembly files with main
94
                std::set<std::string> s_other;   //assembly files with no main
49 rm5248 95
                std::set<std::string> lib_files; //library files(those that start with 'lib')
45 rm5248 96
 
46 rm5248 97
                std::set<std::string> archive;   //all archive files
98
 
99
                std::set<std::string> products;
100
 
101
                std::string cpp_flags;           //preprocessor flags
102
                std::string c_flags;             // c flags
103
                std::string cxx_flags;           // c++ flags
104
                std::string clib_flags;          //c library flags
105
                std::string cxxlib_flags;        //c++ library flags
106
 
49 rm5248 107
                std::map<std::string, std::string> makefileVariables; //Variables that were defined
108
                                                                        //in the makefile.  These may be
109
                                                                        //standard variables, or they 
110
                                                                        //may be custom
85 rm5248 111
 
112
                std::map<std::string, std::list<std::string> > makefileTargets; //custom targets that we should keep
49 rm5248 113
 
46 rm5248 114
                std::map<std::string, std::string>* configuration;
115
 
79 rm5248 116
                std::set<std::string> standardVariables; //standard variables in the makefile
117
 
45 rm5248 118
};
119
 
120
#endif