- Add specific properties to the keyboardlayout module type. They will assist us...
[reactos.git] / reactos / tools / rbuild / rbuild.h
index 49290cc..cac006b 100644 (file)
@@ -89,7 +89,6 @@ class LinkerFlag;
 class LinkerScript;
 class Property;
 class TestSupportCode;
-class WineResource;
 class AutomaticDependency;
 class Bootstrap;
 class CDFile;
@@ -135,6 +134,7 @@ public:
        std::string name;
        directory_map subdirs;
        Directory ( const std::string& name );
+       ~Directory();
        void Add ( const char* subdir );
        void GenerateTree ( DirectoryLocation root,
                            bool verbose );
@@ -214,7 +214,9 @@ public:
        std::vector<Module*> modules;
        std::vector<CompilerFlag*> compilerFlags;
        std::vector<If*> ifs;
+       int asmFiles; // number of .asm files in compilationUnits
 
+       IfableData();
        ~IfableData();
        void ProcessXML();
        void ExtractModules( std::vector<Module*> &modules );
@@ -251,11 +253,11 @@ public:
        const std::string& GetProjectFilename () const;
        std::string ResolveProperties ( const std::string& s ) const;
 private:
-       std::string ResolveNextProperty ( std::string& s ) const;
+       std::string ResolveNextProperty ( const std::string& s ) const;
        const Property* LookupProperty ( const std::string& name ) const;
        void SetConfigurationOption ( char* s,
                                      std::string name,
-                                     std::string* alternativeName );
+                                     std::string alternativeName );
        void SetConfigurationOption ( char* s,
                                      std::string name );
        void ReadXml ();
@@ -297,14 +299,27 @@ enum ModuleType
        IsoRegTest = 24,
        LiveIsoRegTest = 25,
        EmbeddedTypeLib = 26,
-       ElfExecutable = 27
+       ElfExecutable = 27,
+       RpcProxy,
+       HostStaticLibrary,
+       TypeDontCare,
+       Cabinet,
+       KeyboardLayout
 };
 
 enum HostType
 {
        HostFalse,
        HostDefault,
-       HostTrue
+       HostTrue,
+       HostDontCare,
+};
+
+enum CompilerType
+{
+       CompilerTypeDontCare,
+       CompilerTypeCC,
+       CompilerTypeCPP,
 };
 
 class FileLocation
@@ -316,7 +331,8 @@ public:
 
        FileLocation ( const DirectoryLocation directory,
                       const std::string& relative_path,
-                      const std::string& name );
+                      const std::string& name,
+                      const XMLElement *node = NULL );
 
        FileLocation ( const FileLocation& other );
 };
@@ -354,13 +370,16 @@ public:
        std::string prefix;
        HostType host;
        std::string aliasedModuleName;
-       bool useWRC;
        bool allowWarnings;
        bool enabled;
        bool isStartupLib;
        FileLocation *output; // "path/foo.exe"
        FileLocation *dependency; // "path/foo.exe" or "path/libfoo.a"
        FileLocation *install;
+       std::string description;
+       std::string lcid;
+       std::string layoutId;
+       std::string layoutNameResId;
 
        Module ( const Project& project,
                 const XMLElement& moduleNode,
@@ -424,6 +443,7 @@ public:
        std::string name;
        std::string value;
        std::string backend;
+       bool overridable;
 
        Define ( const Project& project,
                 const XMLElement& defineNode );
@@ -432,8 +452,8 @@ public:
                 const XMLElement& defineNode );
        Define ( const Project& project,
                 const Module* module,
-                const std::string name_,
-                const std::string backend_ = "" );
+                const std::string& name_,
+                const std::string& backend_ = "" );
        ~Define();
        void ProcessXML();
 private:
@@ -557,6 +577,7 @@ public:
        ImportLibrary ( const Project& project,
                        const XMLElement& node,
                        const Module& module );
+       ~ImportLibrary ();
 };
 
 
@@ -587,6 +608,7 @@ public:
        const Module* module;
        const XMLElement& node;
        std::string flag;
+       CompilerType compiler;
 
        CompilerFlag ( const Project& project,
                       const XMLElement& compilerFlagNode );
@@ -623,16 +645,13 @@ private:
 class LinkerScript
 {
 public:
-       const Project& project;
-       const Module* module;
        const XMLElement& node;
-       const Module* baseModule;
-       std::string directory;
-       std::string basePath;
+       const Module& module;
+       const FileLocation *file;
 
-       LinkerScript ( const Project& project,
-                      const Module* module,
-                      const XMLElement& node );
+       LinkerScript ( const XMLElement& node,
+                      const Module& module,
+                      const FileLocation *file );
        ~LinkerScript ();
        void ProcessXML();
 };
@@ -644,6 +663,7 @@ public:
        const Project& project;
        const Module* module;
        std::string name, value;
+       bool isInternal;
 
        Property ( const XMLElement& node_,
                   const Project& project_,
@@ -700,60 +720,32 @@ private:
 };
 
 
-class WineResource
-{
-public:
-       const Project& project;
-       std::string bin2res;
-
-       WineResource ( const Project& project,
-                      std::string bin2res );
-       ~WineResource ();
-       void UnpackResources ( bool verbose );
-private:
-       bool IsSpecFile ( const File& file );
-       bool IsWineModule ( const Module& module );
-       bool IsResourceFile ( const File& file );
-       std::string GetResourceFilename ( const Module& module );
-       void UnpackResourcesInModule ( Module& module,
-                                      bool verbose );
-};
-
-
 class SourceFile
 {
 public:
        SourceFile ( AutomaticDependency* automaticDependency,
                     const Module& module,
-                    const std::string& filename,
-                    SourceFile* parent,
-                    bool isNonAutomaticDependency );
-       SourceFile* ParseFile ( const std::string& normalizedFilename );
+                    const File& file,
+                    SourceFile* parent );
        void Parse ();
-       std::string Location () const;
-       std::vector<SourceFile*> files;
+       std::vector<SourceFile*> files; /* List of files included in this file */
+       const File& file;
        AutomaticDependency* automaticDependency;
        const Module& module;
-       std::string filename;
-       std::string filenamePart;
-       std::string directoryPart;
        std::vector<SourceFile*> parents; /* List of files, this file is included from */
-       bool isNonAutomaticDependency;
-       std::string cachedDependencies;
        time_t lastWriteTime;
        time_t youngestLastWriteTime; /* Youngest last write time of this file and all children */
        SourceFile* youngestFile;
 private:
-       void GetDirectoryAndFilenameParts ();
        void Close ();
        void Open ();
        void SkipWhitespace ();
        bool ReadInclude ( std::string& filename,
                           bool& searchCurrentDirectory,
                           bool& includeNext );
-       bool IsIncludedFrom ( const std::string& normalizedFilename );
-       SourceFile* GetParentSourceFile ();
-       bool CanProcessFile ( const std::string& extension );
+       bool IsIncludedFrom ( const File& file );
+       SourceFile* ParseFile(const File& file);
+       bool CanProcessFile ( const File& file );
        bool IsParentOf ( const SourceFile* parent,
                          const SourceFile* child );
        std::string buf;
@@ -771,18 +763,17 @@ public:
        AutomaticDependency ( const Project& project );
        ~AutomaticDependency ();
        bool LocateIncludedFile ( const FileLocation& directory,
-                                 const std::string& includedFilename,
-                                 std::string& resolvedFilename );
+                                 const std::string& includedFilename );
        bool LocateIncludedFile ( SourceFile* sourceFile,
                                  const Module& module,
                                  const std::string& includedFilename,
                                  bool searchCurrentDirectory,
                                  bool includeNext,
-                                 std::string& resolvedFilename );
+                                 File& resolvedFile );
        SourceFile* RetrieveFromCacheOrParse ( const Module& module,
-                                              const std::string& filename,
+                                              const File& file,
                                               SourceFile* parentSourceFile );
-       SourceFile* RetrieveFromCache ( const std::string& filename );
+       SourceFile* RetrieveFromCache ( const File& file );
        void CheckAutomaticDependencies ( bool verbose );
        void CheckAutomaticDependenciesForModule ( Module& module,
                                                   bool verbose );
@@ -792,19 +783,13 @@ private:
                                          bool verbose );
        void CheckAutomaticDependenciesForFile ( SourceFile* sourceFile );
        void GetIncludeDirectories ( std::vector<Include*>& includes,
-                                    const Module& module,
-                                    Include& currentDirectory,
-                                    bool searchCurrentDirectory );
+                                    const Module& module );
        void GetModuleFiles ( const Module& module,
                                  std::vector<File*>& files ) const;
        void ParseFiles ();
        void ParseFiles ( const Module& module );
        void ParseFile ( const Module& module,
                         const File& file );
-       std::string ReplaceVariable ( const std::string& name,
-                                     const std::string& value,
-                                     std::string path );
-       std::string ResolveVariablesInPath ( const std::string& path );
        std::map<std::string, SourceFile*> sourcefile_map;
 };
 
@@ -841,6 +826,7 @@ public:
        CDFile ( const Project& project,
                 const XMLElement& bootstrapNode,
                 const std::string& path );
+       ~CDFile ();
 private:
        static std::string ReplaceVariable ( const std::string& name,
                                             const std::string& value,
@@ -857,6 +843,7 @@ public:
        InstallFile ( const Project& project,
                      const XMLElement& bootstrapNode,
                      const std::string& path );
+       ~InstallFile ();
 };
 
 
@@ -865,12 +852,13 @@ class PchFile
 public:
        const XMLElement& node;
        const Module& module;
-       FileLocation file;
+       const FileLocation *file;
 
        PchFile (
                const XMLElement& node,
                const Module& module,
-               const FileLocation& file );
+               const FileLocation *file );
+       ~PchFile();
        void ProcessXML();
 };
 
@@ -910,13 +898,9 @@ private:
 class CompilationUnit
 {
 public:
-       const Project* project;
-       const Module* module;
-       const XMLElement* node;
        std::string name;
-       std::vector<File*> files;
 
-       CompilationUnit ( File* file );
+       CompilationUnit ( const File* file );
        CompilationUnit ( const Project* project,
                          const Module* module,
                          const XMLElement* node );
@@ -925,10 +909,16 @@ public:
        bool IsGeneratedFile () const;
        bool HasFileWithExtension ( const std::string& extension ) const;
        bool IsFirstFile () const;
-       const FileLocation* GetFilename () const;
-       std::string GetSwitches () const;
+       const FileLocation& GetFilename () const;
+       const std::string& GetSwitches () const;
+       void AddFile ( const File * file );
+       const std::vector<const File*> GetFiles () const;
 private:
-       std::string local_name;
+       const Project* project;
+       const Module* module;
+       const XMLElement* node;
+       std::vector<const File*> files;
+       FileLocation *default_name;
 };