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
);
51 virtual void Process ();
52 std::string
AddDirectoryTarget ( const std::string
& directory
,
53 Directory
* directoryTree
);
54 std::string compilerPrefix
;
55 std::string compilerCommand
;
56 std::string nasmCommand
;
58 Directory
* intermediateDirectory
;
59 Directory
* outputDirectory
;
60 Directory
* installDirectory
;
62 void CreateMakefile ();
63 void CloseMakefile () const;
64 void GenerateHeader () const;
65 std::string
GenerateIncludesAndDefines ( IfableData
& data
) const;
66 void GenerateProjectCFlagsMacro ( const char* assignmentOperation
,
67 IfableData
& data
) const;
68 void GenerateGlobalCFlagsAndProperties ( const char* op
,
69 IfableData
& data
) const;
70 void GenerateProjectGccOptionsMacro ( const char* assignmentOperation
,
71 IfableData
& data
) const;
72 void GenerateProjectGccOptions ( const char* assignmentOperation
,
73 IfableData
& data
) const;
74 std::string
GenerateProjectLFLAGS () const;
75 void GenerateDirectories ();
76 void GenerateGlobalVariables () const;
77 bool IncludeInAllTarget ( const Module
& module
) const;
78 void GenerateAllTarget ( const std::vector
<MingwModuleHandler
*>& handlers
) const;
79 std::string
GetBuildToolDependencies () const;
80 void GenerateInitTarget () const;
81 void GenerateRegTestsRunTarget () const;
82 void GenerateXmlBuildFilesMacro() const;
83 std::string
GetBin2ResExecutable ();
84 void UnpackWineResources ();
85 void GenerateTestSupportCode ();
86 void GenerateProxyMakefiles ();
87 void CheckAutomaticDependencies ();
88 bool IncludeDirectoryTarget ( const std::string
& directory
) const;
89 bool TryToDetectThisCompiler ( const std::string
& compiler
);
90 void DetectCompiler ();
91 bool TryToDetectThisNetwideAssembler ( const std::string
& assembler
);
92 void DetectNetwideAssembler ();
93 void DetectPipeSupport ();
94 void DetectPCHSupport ();
95 void ProcessModules ();
96 std::string
GetNonModuleInstallDirectories ( const std::string
& installDirectory
);
97 std::string
GetInstallDirectories ( const std::string
& installDirectory
);
98 void GetNonModuleInstallFiles ( std::vector
<std::string
>& out
) const;
99 void GetInstallFiles ( std::vector
<std::string
>& out
) const;
100 void GetNonModuleInstallTargetFiles ( std::vector
<std::string
>& out
) const;
101 void GetModuleInstallTargetFiles ( std::vector
<std::string
>& out
) const;
102 void GetInstallTargetFiles ( std::vector
<std::string
>& out
) const;
103 void OutputInstallTarget ( const std::string
& sourceFilename
,
104 const std::string
& targetFilename
,
105 const std::string
& targetDirectory
);
106 void OutputNonModuleInstallTargets ();
107 void OutputModuleInstallTargets ();
108 std::string
GetRegistrySourceFiles ();
109 std::string
GetRegistryTargetFiles ();
110 void OutputRegistryInstallTarget ();
111 void GenerateInstallTarget ();
112 void GetModuleTestTargets ( std::vector
<std::string
>& out
) const;
113 void GenerateTestTarget ();
114 void GenerateDirectoryTargets ();
123 ProxyMakefile ( const Project
& project
);
125 void GenerateProxyMakefiles ( bool verbose
);
127 std::string
GeneratePathToParentDirectory ( int numberOfParentDirectories
);
128 std::string
GetPathToTopDirectory ( Module
& module
);
129 void GenerateProxyMakefileForModule ( Module
& module
,
131 const Project
& project
;