* 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 __RBUILD_H
-#define __RBUILD_H
+
+#pragma once
#include "pch.h"
#define DEF_SBAD_SEP "\\"
#endif
-#define MS_VS_DEF_VERSION "7.10"
+#define MS_VS_DEF_VERSION "9.00"
class XmlNode;
class Directory;
FullDependencies
};
+enum CompilerSet
+{
+ GnuGcc,
+ MicrosoftC
+};
+
+enum LinkerSet
+{
+ GnuLd,
+ MicrosoftLink
+};
+
+enum SpecFileType
+{
+ None,
+ Spec = 1,
+ PSpec = 2
+};
+
class Configuration
{
public:
bool MakeHandlesInstallDirectories;
bool GenerateProxyMakefilesInSourceTree;
bool InstallFiles;
+ CompilerSet Compiler;
+ LinkerSet Linker;
};
class Environment
static std::string GetArch ();
static std::string GetIntermediatePath ();
static std::string GetOutputPath ();
+ static std::string GetSourcePath ();
static std::string GetCdOutputPath ();
static std::string GetInstallPath ();
static std::string GetAutomakeFile ( const std::string& defaultFile );
const std::string& GetProjectFilename () const;
std::string ResolveProperties ( const std::string& s ) const;
const Property* LookupProperty ( const std::string& name ) const;
+ std::string GetCompilerSet () const;
+ std::string GetLinkerSet () const;
+ void GenerateInstallerFileList();
private:
std::string ResolveNextProperty ( const std::string& s ) const;
void ReadXml ();
BootProgram,
Win32SCR,
IdlHeader,
- IsoRegTest,
- LiveIsoRegTest,
+ IdlInterface,
EmbeddedTypeLib,
ElfExecutable,
RpcProxy,
enum CompilerType
{
- CompilerTypeDontCare,
CompilerTypeCC,
+ CompilerTypeCXX,
CompilerTypeCPP,
+ CompilerTypeAS,
+ CompilerTypeMIDL,
+ CompilerTypeRC,
+ CompilerTypeNASM,
+
+ CompilerTypesCount
};
class FileLocation
std::string buildtype;
ModuleType type;
ImportLibrary* importLibrary;
+ ImportLibrary* delayImportLibrary;
Metadata* metadata;
Bootsector* bootSector;
- bool mangledSymbols;
- bool underscoreSymbols;
bool isUnicode;
bool isDefaultEntryPoint;
Bootstrap* bootstrap;
std::vector<CompilerFlag*> compilerFlags;
std::vector<LinkerFlag*> linkerFlags;
std::vector<StubbedComponent*> stubbedComponents;
+ std::vector<CDFile*> cdfiles;
LinkerScript* linkerScript;
PchFile* pch;
bool cplusplus;
bool isCRT;
std::string CRT;
bool dynamicCRT;
+ std::string installbase;
FileLocation *output; // "path/foo.exe"
FileLocation *dependency; // "path/foo.exe" or "path/libfoo.a"
FileLocation *install;
bool IsDLL () const;
std::string GetPathWithPrefix ( const std::string& prefix ) const; // "path/prefixfoo.exe"
std::string GetPathToBaseDir() const; // "../" offset to rootdirectory
- std::string GetEntryPoint(bool leadingUnderscore) const;
+ std::string GetEntryPoint() const;
void GetTargets ( string_list& ) const;
std::string GetInvocationTarget ( const int index ) const;
bool HasFileWithExtension ( const IfableData&, const std::string& extension ) const;
void InvokeModule () const;
void ProcessXML ();
std::string GetDllName() const;
+ SpecFileType IsSpecDefinitionFile () const;
private:
void SetImportLibrary ( ImportLibrary* importLibrary );
+ void SetDelayImportLibrary ( ImportLibrary* importLibrary );
DirectoryLocation GetTargetDirectoryTree () const;
std::string GetDefaultModuleExtension () const;
std::string GetDefaultModuleEntrypoint () const;
bool default_value = false );
};
+class ToolsetDirective
+{
+private:
+ bool enabled;
+
+protected:
+ void ParseToolsets ( const Project& project, const XMLElement& node );
+
+public:
+ virtual ~ToolsetDirective() { }
+ bool IsEnabled () const;
+};
+
+class CompilerDirective
+{
+private:
+ std::bitset<CompilerTypesCount> compilersSet;
+ bool enabled;
+
+protected:
+ void ParseCompilers ( const XMLElement& node, const std::string& defaultValue );
+
+public:
+ CompilerDirective (): enabled ( true ) { }
+ virtual ~CompilerDirective() { }
+ void SetCompiler ( CompilerType compiler );
+ void UnsetCompiler ( CompilerType compiler );
+ void SetAllCompilers ();
+ void UnsetAllCompilers ();
+ bool IsCompilerSet ( CompilerType compiler ) const;
+};
-class Include
+class Include: public CompilerDirective, public ToolsetDirective
{
public:
FileLocation *directory;
const XMLElement* node;
const Module* module;
DirectoryLocation GetDefaultDirectoryTree ( const Module* module ) const;
+ void Initialize ();
};
-class Define
+class Define: public CompilerDirective, public ToolsetDirective
{
public:
const Project& project;
const Module* module;
const XMLElement* node;
std::string name;
+ std::string arguments;
std::string value;
std::string backend;
- bool overridable;
+ bool redefine;
Define ( const Project& project,
const XMLElement& defineNode );
Define ( const Project& project,
const Module* module,
const std::string& name_,
- const std::string& backend_ = "" );
+ const std::string& backend_ = "",
+ bool redefine_ = false );
~Define();
void ProcessXML();
private:
const Module& module;
std::string name;
const Module* importedModule;
+ bool delayimp;
Library ( const XMLElement& _node,
const Module& _module,
const Module* module;
std::string dllname;
FileLocation *source;
+ FileLocation *target;
ImportLibrary ( const Project& project,
const XMLElement& node,
- const Module* module );
+ const Module* module,
+ bool delayimp );
~ImportLibrary ();
};
-class CompilerFlag
+class CompilerFlag: public CompilerDirective, public ToolsetDirective
{
public:
const Project& project;
const Module* module;
const XMLElement& node;
std::string flag;
- CompilerType compiler;
CompilerFlag ( const Project& project,
const XMLElement& compilerFlagNode );
};
-class LinkerFlag
+class LinkerFlag: public ToolsetDirective
{
public:
const Project& project;
public:
FileLocation *source;
FileLocation *target;
+ std::string installbase;
InstallFile ( const Project& project,
const XMLElement& bootstrapNode,
extern std::string
ToLower ( std::string filename );
-
-#endif /* __RBUILD_H */