Don't add underscore prefix to amd64 symbols
[reactos.git] / reactos / tools / rbuild / backend / backend.cpp
index c898ed3..61d467e 100644 (file)
@@ -1,4 +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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
 #include "../pch.h"
 
 #include "../rbuild.h"
@@ -13,13 +29,15 @@ Backend::Factory::factories = NULL;
 int
 Backend::Factory::ref = 0;
 
-Backend::Factory::Factory ( const std::string& name_ )
+Backend::Factory::Factory ( const std::string& name_, const std::string& description_ )
 {
        string name(name_);
        strlwr ( &name[0] );
        if ( !ref++ )
                factories = new map<string,Factory*>;
        (*factories)[name] = this;
+       m_name = name;
+       m_description = description_;
 }
 
 Backend::Factory::~Factory ()
@@ -34,8 +52,7 @@ Backend::Factory::~Factory ()
 /*static*/ Backend*
 Backend::Factory::Create ( const string& name,
                            Project& project,
-                           bool verbose,
-                           bool cleanAsYouGo )
+                           Configuration& configuration )
 {
        string sname ( name );
        strlwr ( &sname[0] );
@@ -49,14 +66,61 @@ Backend::Factory::Create ( const string& name,
                throw UnknownBackendException ( sname );
                return NULL;
        }
-       return (*f) ( project, verbose, cleanAsYouGo );
+       return (*f) ( project, configuration );
 }
 
 Backend::Backend ( Project& project,
-                   bool verbose,
-                   bool cleanAsYouGo )
+                   Configuration& configuration )
        : ProjectNode ( project ),
-         verbose ( verbose ),
-         cleanAsYouGo ( cleanAsYouGo )
+         configuration ( configuration )
 {
 }
+
+Backend::~Backend()
+{
+}
+
+string
+Backend::GetFullPath ( const FileLocation& file ) const
+{
+       string directory;
+       switch ( file.directory )
+       {
+               case SourceDirectory:
+                       directory = "";
+                       break;
+               case IntermediateDirectory:
+                       directory = Environment::GetIntermediatePath ();
+                       break;
+               case OutputDirectory:
+                       directory = Environment::GetOutputPath ();
+                       break;
+               case InstallDirectory:
+                       directory = Environment::GetInstallPath ();
+                       break;
+               default:
+                       throw InvalidOperationException ( __FILE__,
+                                                         __LINE__,
+                                                         "Invalid directory %d.",
+                                                         file.directory );
+       }
+
+       if ( file.relative_path.length () > 0 )
+       {
+               if ( directory.length () > 0 )
+                       directory += sSep;
+               directory += file.relative_path;
+       }
+       return directory;
+}
+
+string
+Backend::GetFullName ( const FileLocation& file ) const
+{
+       string directory = GetFullPath ( file );
+
+       if ( directory.length () > 0 )
+               directory += sSep;
+
+       return directory + file.name;
+}