Copy rpoolmgr.h from trunk
[reactos.git] / reactos / tools / rbuild / backend / mingw / mingw.h
1 #ifndef MINGW_H
2 #define MINGW_H
3
4 #include "../backend.h"
5
6 #ifdef WIN32
7 #define NUL "NUL"
8 #else
9 #define NUL "/dev/null"
10 #endif
11
12 class Directory;
13 class MingwModuleHandler;
14
15 extern std::string
16 v2s ( const string_list& v, int wrap_at );
17
18 typedef std::map<std::string,Directory*> directory_map;
19
20
21 class Directory
22 {
23 public:
24 std::string name;
25 directory_map subdirs;
26 Directory ( const std::string& name );
27 void Add ( const char* subdir );
28 void GenerateTree ( const std::string& parent,
29 bool verbose );
30 std::string EscapeSpaces ( std::string path );
31 void CreateRule ( FILE* f,
32 const std::string& parent );
33 private:
34 bool mkdir_p ( const char* path );
35 std::string ReplaceVariable ( std::string name,
36 std::string value,
37 std::string path );
38 std::string GetEnvironmentVariable ( const std::string& name );
39 void ResolveVariablesInPath ( char* buf,
40 std::string path );
41 bool CreateDirectory ( std::string path );
42 };
43
44
45 class MingwBackend : public Backend
46 {
47 public:
48 MingwBackend ( Project& project,
49 Configuration& configuration );
50 virtual ~MingwBackend ();
51 virtual void Process ();
52 std::string AddDirectoryTarget ( const std::string& directory,
53 Directory* directoryTree );
54 std::string compilerCommand;
55 bool usePipe;
56 Directory* intermediateDirectory;
57 Directory* outputDirectory;
58 Directory* installDirectory;
59 private:
60 void CreateMakefile ();
61 void CloseMakefile () const;
62 void GenerateHeader () const;
63 std::string GenerateIncludesAndDefines ( IfableData& data ) const;
64 void GenerateProjectCFlagsMacro ( const char* assignmentOperation,
65 IfableData& data ) const;
66 void GenerateGlobalCFlagsAndProperties ( const char* op,
67 IfableData& data ) const;
68 void GenerateProjectGccOptionsMacro ( const char* assignmentOperation,
69 IfableData& data ) const;
70 void GenerateProjectGccOptions ( const char* assignmentOperation,
71 IfableData& data ) const;
72 std::string GenerateProjectLFLAGS () const;
73 void GenerateDirectories ();
74 void GenerateGlobalVariables () const;
75 bool IncludeInAllTarget ( const Module& module ) const;
76 void GenerateAllTarget ( const std::vector<MingwModuleHandler*>& handlers ) const;
77 std::string GetBuildToolDependencies () const;
78 void GenerateInitTarget () const;
79 void GenerateRegTestsRunTarget () const;
80 void GenerateXmlBuildFilesMacro() const;
81 std::string GetBin2ResExecutable ();
82 void UnpackWineResources ();
83 void GenerateTestSupportCode ();
84 void GenerateProxyMakefiles ();
85 void CheckAutomaticDependencies ();
86 bool IncludeDirectoryTarget ( const std::string& directory ) const;
87 bool TryToDetectThisCompiler ( const std::string& compiler );
88 void DetectCompiler ();
89 void DetectPipeSupport ();
90 void DetectPCHSupport ();
91 void ProcessModules ();
92 std::string GetNonModuleInstallDirectories ( const std::string& installDirectory );
93 std::string GetInstallDirectories ( const std::string& installDirectory );
94 void GetNonModuleInstallFiles ( std::vector<std::string>& out ) const;
95 void GetInstallFiles ( std::vector<std::string>& out ) const;
96 void GetNonModuleInstallTargetFiles ( std::vector<std::string>& out ) const;
97 void GetModuleInstallTargetFiles ( std::vector<std::string>& out ) const;
98 void GetInstallTargetFiles ( std::vector<std::string>& out ) const;
99 void OutputInstallTarget ( const std::string& sourceFilename,
100 const std::string& targetFilename,
101 const std::string& targetDirectory );
102 void OutputNonModuleInstallTargets ();
103 void OutputModuleInstallTargets ();
104 std::string GetRegistrySourceFiles ();
105 std::string GetRegistryTargetFiles ();
106 void OutputRegistryInstallTarget ();
107 void GenerateInstallTarget ();
108 void GetModuleTestTargets ( std::vector<std::string>& out ) const;
109 void GenerateTestTarget ();
110 void GenerateDirectoryTargets ();
111 FILE* fMakefile;
112 bool use_pch;
113 };
114
115
116 class ProxyMakefile
117 {
118 public:
119 ProxyMakefile ( const Project& project );
120 ~ProxyMakefile ();
121 void GenerateProxyMakefiles ( bool verbose );
122 private:
123 std::string GeneratePathToParentDirectory ( int numberOfParentDirectories );
124 std::string GetPathToTopDirectory ( Module& module );
125 void GenerateProxyMakefileForModule ( Module& module,
126 bool verbose );
127 const Project& project;
128 };
129
130 #endif /* MINGW_H */