4 #include "../backend.h"
9 #define NUL "/dev/null"
13 class MingwModuleHandler
;
16 v2s ( const string_list
& v
, int wrap_at
);
18 typedef std::map
<std::string
,Directory
*> directory_map
;
25 directory_map subdirs
;
26 Directory ( const std::string
& name
);
27 void Add ( const char* subdir
);
28 void GenerateTree ( const std::string
& parent
,
30 std::string
EscapeSpaces ( std::string path
);
31 void CreateRule ( FILE* f
,
32 const std::string
& parent
);
34 bool mkdir_p ( const char* path
);
35 std::string
ReplaceVariable ( std::string name
,
38 std::string
GetEnvironmentVariable ( const std::string
& name
);
39 void ResolveVariablesInPath ( char* buf
,
41 bool CreateDirectory ( std::string path
);
45 class MingwBackend
: public Backend
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
;
56 Directory
* intermediateDirectory
;
57 Directory
* outputDirectory
;
58 Directory
* installDirectory
;
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 ();
119 ProxyMakefile ( const Project
& project
);
121 void GenerateProxyMakefiles ( bool verbose
);
123 std::string
GeneratePathToParentDirectory ( int numberOfParentDirectories
);
124 std::string
GetPathToTopDirectory ( Module
& module
);
125 void GenerateProxyMakefileForModule ( Module
& module
,
127 const Project
& project
;