[rbuild] Remove distinction between Iso/IsoRegTest, and LiveIso/LiveIsoRegTest module...
[reactos.git] / reactos / tools / rbuild / bootstrap.cpp
index 9b8e6b7..f71e095 100644 (file)
@@ -1,3 +1,20 @@
+/*
+ * 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>
 
@@ -6,8 +23,8 @@
 using std::string;
 
 Bootstrap::Bootstrap ( const Project& project_,
-                          const Module* module_,
-                          const XMLElement& bootstrapNode )
+                       const Module* module_,
+                       const XMLElement& bootstrapNode )
        : project(project_),
          module(module_),
          node(bootstrapNode)
@@ -26,42 +43,69 @@ Bootstrap::IsSupportedModuleType ( ModuleType type )
        {
                case Kernel:
                case KernelModeDLL:
+               case KeyboardLayout:
                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 Test:
                case RpcServer:
                case RpcClient:
+               case RpcProxy:
+               case Alias:
+               case IdlHeader:
+               case IdlInterface:
+               case MessageHeader:
+               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 InvalidBuildFileException (
+               throw XMLInvalidBuildFileException (
                        node.location,
                        "<bootstrap> is not applicable for this module type." );
        }
 
-       const XMLAttribute* att = node.GetAttribute ( "base", false );
+       const XMLAttribute* att = node.GetAttribute ( "installbase", false );
        if ( att != NULL )
-               base = att->value;
+               base = ReplaceVariable ( "$(CDOUTPUT)", Environment::GetCdOutputPath (), att->value );
        else
                base = "";
 
@@ -69,7 +113,7 @@ Bootstrap::Initialize ()
        if ( att != NULL )
                nameoncd = att->value;
        else
-               nameoncd = module->GetTargetName ();
+               nameoncd = module->output->name;
 }
 
 void