Merge trunk HEAD (r46369)
[reactos.git] / reactos / tools / rbuild / backend / mingw / mingw.h
index 45db183..e73973f 100644 (file)
  * 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, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
-#ifndef MINGW_H
-#define MINGW_H
+
+#pragma once
 
 #include "../backend.h"
 
@@ -29,6 +29,8 @@
 class Directory;
 class MingwModuleHandler;
 
+extern std::string
+v2s ( const Backend* backend, const std::vector<FileLocation>& files, int wrap_at );
 extern std::string
 v2s ( const string_list& v, int wrap_at );
 
@@ -43,51 +45,51 @@ public:
        std::string AddDirectoryTarget ( const std::string& directory,
                                         Directory* directoryTree );
        const Module& GetAliasedModuleOrModule ( const Module& module ) const;
+       bool compilerNeedsHelper;
        std::string compilerPrefix;
        std::string compilerCommand;
        std::string nasmCommand;
        std::string binutilsPrefix;
+       bool binutilsNeedsHelper;
        std::string binutilsCommand;
-       bool usePipe;
+       bool usePipe, manualBinutilsSetting;
        Directory* intermediateDirectory;
        Directory* outputDirectory;
        Directory* installDirectory;
+
+       std::string GetFullName ( const FileLocation& file ) const;
+       std::string GetFullPath ( const FileLocation& file ) const;
+
 private:
        void CreateMakefile ();
        void CloseMakefile () const;
        void GenerateHeader () const;
-       std::string GenerateIncludesAndDefines ( IfableData& data ) const;
-       void GenerateProjectCFlagsMacro ( const char* assignmentOperation,
-                                         IfableData& data ) const;
-       void GenerateGlobalCFlagsAndProperties ( const char* op,
-                                                IfableData& data ) const;
-       void GenerateProjectGccOptionsMacro ( const char* assignmentOperation,
-                                              IfableData& data ) const;
-       void GenerateProjectGccOptions ( const char* assignmentOperation,
-                                        IfableData& data ) const;
-       std::string GenerateProjectLFLAGS () const;
+       void GenerateGlobalProperties ( const char* assignmentOperation,
+                                                                         const IfableData& data ) const;
+       std::string GenerateProjectLDFLAGS () const;
        void GenerateDirectories ();
        void GenerateGlobalVariables () const;
        bool IncludeInAllTarget ( const Module& module ) const;
        void GenerateAllTarget ( const std::vector<MingwModuleHandler*>& handlers ) const;
-       std::string GetBuildToolDependencies () const;
-       void GenerateInitTarget () const;
        void GenerateRegTestsRunTarget () const;
        void GenerateXmlBuildFilesMacro() const;
-       std::string GetBin2ResExecutable ();
-       void UnpackWineResources ();
        void GenerateTestSupportCode ();
        void GenerateCompilationUnitSupportCode ();
+       void GenerateSysSetup ();
        std::string GetProxyMakefileTree () const;
        void GenerateProxyMakefiles ();
        void CheckAutomaticDependencies ();
-       bool IncludeDirectoryTarget ( const std::string& directory ) const;
        bool TryToDetectThisCompiler ( const std::string& compiler );
        void DetectCompiler ();
+       std::string GetCompilerVersion ( const std::string& compilerCommand );
+       bool IsSupportedCompilerVersion ( const std::string& compilerVersion );
        bool TryToDetectThisNetwideAssembler ( const std::string& assembler );
        bool TryToDetectThisBinutils ( const std::string& binutils );
        std::string GetBinutilsVersion ( const std::string& binutilsCommand );
+       std::string GetBinutilsVersionDate ( const std::string& binutilsCommand );
        bool IsSupportedBinutilsVersion ( const std::string& binutilsVersion );
+       std::string GetVersionString ( const std::string& versionCommand );
+       std::string GetNetwideAssemblerVersion ( const std::string& nasmCommand );
        void DetectBinutils ();
        void DetectNetwideAssembler ();
        void DetectPipeSupport ();
@@ -100,12 +102,10 @@ private:
        std::string GetInstallDirectories ( const std::string& installDirectory );
        void GetNonModuleInstallFiles ( std::vector<std::string>& out ) const;
        void GetInstallFiles ( std::vector<std::string>& out ) const;
-       void GetNonModuleInstallTargetFiles ( std::vector<std::string>& out ) const;
-       void GetModuleInstallTargetFiles ( std::vector<std::string>& out ) const;
-       void GetInstallTargetFiles ( std::vector<std::string>& out ) const;
-       void OutputInstallTarget ( const std::string& sourceFilename,
-                                  const std::string& targetFilename,
-                                  const std::string& targetDirectory );
+       void GetNonModuleInstallTargetFiles ( std::vector<FileLocation>& out ) const;
+       void GetModuleInstallTargetFiles ( std::vector<FileLocation>& out ) const;
+       void GetInstallTargetFiles ( std::vector<FileLocation>& out ) const;
+       void OutputInstallTarget ( const FileLocation& source, const FileLocation& target );
        void OutputNonModuleInstallTargets ();
        void OutputModuleInstallTargets ();
        std::string GetRegistrySourceFiles ();
@@ -117,6 +117,9 @@ private:
        void GenerateDirectoryTargets ();
        FILE* fMakefile;
        bool use_pch;
+       bool DetectMicrosoftCompiler ( std::string& version, std::string& path );
+       bool DetectMicrosoftLinker ( std::string& version, std::string& path );
+       void GenerateInstallerFileList();
 };
 
 
@@ -127,14 +130,23 @@ public:
        ~ProxyMakefile ();
        void GenerateProxyMakefiles ( bool verbose,
                                       std::string outputTree );
+       static bool GenerateProxyMakefile ( const Module& module );
+
 private:
        std::string GeneratePathToParentDirectory ( int numberOfParentDirectories );
        std::string GetPathToTopDirectory ( Module& module );
-       bool GenerateProxyMakefile ( Module& module );
        void GenerateProxyMakefileForModule ( Module& module,
                                               bool verbose,
                                               std::string outputTree );
        const Project& project;
 };
 
-#endif /* MINGW_H */
+struct ModuleHandlerInformations
+{
+       HostType DefaultHost;
+       const char* cflags;
+       const char* nasmflags;
+       const char* linkerflags;
+};
+
+extern const struct ModuleHandlerInformations ModuleHandlerInformations[];