Put .asm files at the end of the module
authorHervé Poussineau <hpoussin@reactos.org>
Tue, 9 Oct 2007 07:10:05 +0000 (07:10 +0000)
committerHervé Poussineau <hpoussin@reactos.org>
Tue, 9 Oct 2007 07:10:05 +0000 (07:10 +0000)
See issue #2702 for more details.

svn path=/trunk/; revision=29465

reactos/tools/rbuild/module.cpp
reactos/tools/rbuild/rbuild.h

index ae80bb9..31099cc 100644 (file)
@@ -183,6 +183,11 @@ ToLower ( string filename )
        return filename;
 }
 
+IfableData::IfableData( )
+       : asmFiles ( 0 )
+{
+}
+
 void IfableData::ExtractModules( std::vector<Module*> &modules )
 {
        size_t i;
@@ -582,11 +587,27 @@ Module::ProcessXMLSubElement ( const XMLElement& e,
                                parseContext.ifData->data.compilationUnits.push_back ( pCompilationUnit );
                        else
                        {
-                               string ext = GetExtension ( e.value );
-                               if ( !stricmp ( ext.c_str(), ".idl" ) )
-                                       non_if_data.compilationUnits.insert ( non_if_data.compilationUnits.begin(), pCompilationUnit );
-                               else
+                               string ext = ToLower ( GetExtension ( e.value ) );
+                               if ( ext == ".idl" )
+                               {
+                                       // put .idl files at the start of the module
+                                       non_if_data.compilationUnits.insert (
+                                               non_if_data.compilationUnits.begin(),
+                                               pCompilationUnit );
+                               }
+                               else if ( ext == ".asm" || ext == ".s" )
+                               {
+                                       // put .asm files at the end of the module
                                        non_if_data.compilationUnits.push_back ( pCompilationUnit );
+                                       non_if_data.asmFiles++;
+                               }
+                               else
+                               {
+                                       // put other files in the middle
+                                       non_if_data.compilationUnits.insert (
+                                               non_if_data.compilationUnits.end() - non_if_data.asmFiles,
+                                               pCompilationUnit );
+                               }
                        }
                }
                if ( parseContext.ifData )
index ba4785c..eeb0529 100644 (file)
@@ -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 );