-#include "pch.h"\r
-#include <assert.h>\r
-\r
-#include "rbuild.h"\r
-\r
-using std::string;\r
-\r
-Bootstrap::Bootstrap ( const Project& project_,\r
- const Module* module_,\r
- const XMLElement& bootstrapNode )\r
- : project(project_),\r
- module(module_),\r
- node(bootstrapNode)\r
-{\r
- Initialize();\r
-}\r
-\r
-Bootstrap::~Bootstrap ()\r
-{\r
-}\r
-\r
-bool\r
-Bootstrap::IsSupportedModuleType ( ModuleType type )\r
-{\r
- switch ( type )\r
- {\r
- case Kernel:\r
- case KernelModeDLL:\r
- case NativeDLL:\r
- case NativeCUI:\r
- case Win32DLL:\r
- case Win32CUI:\r
- case Win32GUI:\r
- case KernelModeDriver:\r
- case BootSector:\r
- case BootLoader:\r
- return true;\r
- case BuildTool:\r
- case StaticLibrary:\r
- case ObjectLibrary:\r
- case Iso:\r
- case LiveIso:\r
- case Test:\r
- case RpcServer:\r
- case RpcClient:\r
- return false;\r
- }\r
- throw InvalidOperationException ( __FILE__,\r
- __LINE__ );\r
-}\r
-\r
-void\r
-Bootstrap::Initialize ()\r
-{\r
- if ( !IsSupportedModuleType ( module->type ) )\r
- {\r
- throw InvalidBuildFileException (\r
- node.location,\r
- "<bootstrap> is not applicable for this module type." );\r
- }\r
-\r
- const XMLAttribute* att = node.GetAttribute ( "base", false );\r
- if ( att != NULL )\r
- base = att->value;\r
- else\r
- base = "";\r
-\r
- att = node.GetAttribute ( "nameoncd", false );\r
- if ( att != NULL )\r
- nameoncd = att->value;\r
- else\r
- nameoncd = module->GetTargetName ();\r
-}\r
-\r
-void\r
-Bootstrap::ProcessXML()\r
-{\r
-}\r
+/*
+ * Copyright (C) 2005 Casper S. Hornstrup
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * 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.
+ */
+#include "pch.h"
+#include <assert.h>
+
+#include "rbuild.h"
+
+using std::string;
+
+Bootstrap::Bootstrap ( const Project& project_,
+ const Module* module_,
+ const XMLElement& bootstrapNode )
+ : project(project_),
+ module(module_),
+ node(bootstrapNode)
+{
+ Initialize();
+}
+
+Bootstrap::~Bootstrap ()
+{
+}
+
+bool
+Bootstrap::IsSupportedModuleType ( ModuleType type )
+{
+ switch ( type )
+ {
+ case Kernel:
+ case KernelModeDLL:
+ case NativeDLL:
+ case NativeCUI:
+ case Win32DLL:
+ case Win32OCX:
+ case Win32CUI:
+ case Win32SCR:
+ case Win32GUI:
+ case KernelModeDriver:
+ case BootSector:
+ case BootLoader:
+ case BootProgram:
+ case Cabinet:
+ return true;
+ case BuildTool:
+ case StaticLibrary:
+ case HostStaticLibrary:
+ case ObjectLibrary:
+ case Iso:
+ case LiveIso:
+ case IsoRegTest:
+ case LiveIsoRegTest:
+ case Test:
+ case RpcServer:
+ case RpcClient:
+ case RpcProxy:
+ case Alias:
+ case IdlHeader:
+ case EmbeddedTypeLib:
+ case ElfExecutable:
+ return false;
+ case TypeDontCare:
+ break;
+ }
+ throw InvalidOperationException ( __FILE__,
+ __LINE__ );
+}
+
+string
+Bootstrap::ReplaceVariable ( const string& name,
+ const string& value,
+ string path )
+{
+ size_t i = path.find ( name );
+ if ( i != string::npos )
+ return path.replace ( i, name.length (), value );
+ else
+ return path;
+}
+
+void
+Bootstrap::Initialize ()
+{
+ if ( !IsSupportedModuleType ( module->type ) )
+ {
+ throw XMLInvalidBuildFileException (
+ node.location,
+ "<bootstrap> is not applicable for this module type." );
+ }
+
+ const XMLAttribute* att = node.GetAttribute ( "installbase", false );
+ if ( att != NULL )
+ base = ReplaceVariable ( "$(CDOUTPUT)", Environment::GetCdOutputPath (), att->value );
+ else
+ base = "";
+
+ att = node.GetAttribute ( "nameoncd", false );
+ if ( att != NULL )
+ nameoncd = att->value;
+ else
+ nameoncd = module->output->name;
+}
+
+void
+Bootstrap::ProcessXML()
+{
+}