Don't generate intermediate archives
[reactos.git] / reactos / tools / rbuild / backend / mingw / modulehandler.cpp
index 9a82bff..03aa066 100644 (file)
@@ -24,7 +24,7 @@ MingwModuleHandler::fMakefile = NULL;
 \r
 string\r
 ReplaceExtension ( const string& filename,\r
-                      const string& newExtension )\r
+                   const string& newExtension )\r
 {\r
        size_t index = filename.find_last_of ( '/' );\r
        if (index == string::npos) index = 0;\r
@@ -481,7 +481,7 @@ MingwModuleHandler::GenerateMacros (
 {\r
        size_t i;\r
 \r
-       if ( includes.size() || defines.size() )\r
+       if ( includes.size () > 0 || defines.size () > 0 )\r
        {\r
                GenerateMacro ( assignmentOperation,\r
                                cflags_macro,\r
@@ -509,9 +509,9 @@ MingwModuleHandler::GenerateMacros (
                }\r
        }\r
        \r
-       if ( files.size() )\r
+       if ( files.size () > 0 )\r
        {\r
-               for ( i = 0; i < files.size(); i++ )\r
+               for ( i = 0; i < files.size (); i++ )\r
                {\r
                        if ( files[i]->first )\r
                        {\r
@@ -525,14 +525,11 @@ MingwModuleHandler::GenerateMacros (
                fprintf (\r
                        fMakefile,\r
                        "%s %s",\r
-                       objs_macro.c_str(),\r
+                       objs_macro.c_str (),\r
                        assignmentOperation );\r
                for ( i = 0; i < files.size(); i++ )\r
                {\r
-                       string extension = GetExtension ( files[i]->name );\r
-                       if ( extension != ".spec"\r
-                         && extension != ".SPEC"\r
-                         && !files[i]->first )\r
+                       if ( !files[i]->first )\r
                        {\r
                                fprintf (\r
                                        fMakefile,\r
@@ -676,16 +673,34 @@ MingwModuleHandler::GenerateWindresCommand ( const Module& module,
                                              const string& windresflagsMacro ) const\r
 {\r
        string objectFilename = PassThruCacheDirectory ( MingwModuleHandler::GetObjectFilename ( sourceFilename ) );\r
+  string rciFilename = ReplaceExtension ( sourceFilename,\r
+                                          ".rci" );\r
+  string resFilename = ReplaceExtension ( sourceFilename,\r
+                                          ".res" );\r
        fprintf ( fMakefile,\r
                  "%s: %s\n",\r
                  objectFilename.c_str (),\r
                  sourceFilename.c_str () );\r
        fprintf ( fMakefile,\r
-                "\t%s %s -o %s ${%s}\n",\r
-                "${windres}",\r
+                "\t${gcc} -xc -E -DRC_INVOKED ${%s} %s > %s\n",\r
+                windresflagsMacro.c_str (),\r
                 sourceFilename.c_str (),\r
-                objectFilename.c_str (),\r
-                windresflagsMacro.c_str () );\r
+                rciFilename.c_str () );\r
+       fprintf ( fMakefile,\r
+                "\t${wrc} ${%s} %s %s\n",\r
+           windresflagsMacro.c_str (),\r
+                rciFilename.c_str (),\r
+                resFilename.c_str () );\r
+       fprintf ( fMakefile,\r
+                "\t${rm} %s\n",\r
+                rciFilename.c_str () );\r
+       fprintf ( fMakefile,\r
+                "\t${windres} %s -o %s\n",\r
+                resFilename.c_str (),\r
+                objectFilename.c_str () );\r
+       fprintf ( fMakefile,\r
+                "\t${rm} %s\n",\r
+                resFilename.c_str () );\r
 }\r
 \r
 void\r
@@ -1290,7 +1305,7 @@ void
 MingwBuildToolModuleHandler::GenerateBuildToolModuleTarget ( const Module& module )\r
 {\r
        string target ( FixupTargetFilename ( module.GetPath () ) );\r
-       string archiveFilename = GetModuleArchiveFilename ( module );\r
+       string objectsMacro = GetObjectsMacro ( module );\r
        string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
 \r
        GenerateMacrosAndTargetsHost ( module );\r
@@ -1303,14 +1318,14 @@ MingwBuildToolModuleHandler::GenerateBuildToolModuleTarget ( const Module& modul
        \r
        fprintf ( fMakefile, "%s: %s %s\n",\r
                  target.c_str (),\r
-                 archiveFilename.c_str (),\r
+                 objectsMacro.c_str (),\r
                  importLibraryDependencies.c_str () );\r
        fprintf ( fMakefile,\r
                  "\t%s %s -o %s %s %s\n\n",\r
                  linker.c_str (),\r
                  GetLinkerMacro ( module ).c_str (),\r
                  target.c_str (),\r
-                 archiveFilename.c_str (),\r
+                 objectsMacro.c_str (),\r
                  importLibraryDependencies.c_str () );\r
 }\r
 \r
@@ -1455,7 +1470,7 @@ MingwKernelModeDLLModuleHandler::GenerateKernelModeDLLModuleTarget ( const Modul
        static string ros_junk ( "$(ROS_TEMPORARY)" );\r
        string target ( FixupTargetFilename ( module.GetPath () ) );\r
        string workingDirectory = GetWorkingDirectory ( );\r
-       string archiveFilename = GetModuleArchiveFilename ( module );\r
+       string objectsMacro = GetObjectsMacro ( module );\r
        string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
 \r
        GenerateImportLibraryTargetIfNeeded ( module );\r
@@ -1466,7 +1481,7 @@ MingwKernelModeDLLModuleHandler::GenerateKernelModeDLLModuleTarget ( const Modul
 \r
                fprintf ( fMakefile, "%s: %s %s\n",\r
                          target.c_str (),\r
-                         archiveFilename.c_str (),\r
+                         objectsMacro.c_str (),\r
                          importLibraryDependencies.c_str () );\r
 \r
                string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll",\r
@@ -1475,7 +1490,7 @@ MingwKernelModeDLLModuleHandler::GenerateKernelModeDLLModuleTarget ( const Modul
                GenerateLinkerCommand ( module,\r
                                        "${gcc}",\r
                                        linkerParameters,\r
-                                       archiveFilename );\r
+                                       objectsMacro );\r
        }\r
        else\r
        {\r
@@ -1508,8 +1523,8 @@ MingwKernelModeDriverModuleHandler::GenerateKernelModeDriverModuleTarget ( const
 {\r
        static string ros_junk ( "$(ROS_TEMPORARY)" );\r
        string target ( PassThruCacheDirectory( FixupTargetFilename ( module.GetPath () ) ) );\r
-       string workingDirectory = GetWorkingDirectory ( );\r
-       string archiveFilename = GetModuleArchiveFilename ( module );\r
+       string workingDirectory = GetWorkingDirectory ();\r
+       string objectsMacro = GetObjectsMacro ( module );\r
        string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
 \r
        GenerateImportLibraryTargetIfNeeded ( module );\r
@@ -1524,7 +1539,7 @@ MingwKernelModeDriverModuleHandler::GenerateKernelModeDriverModuleTarget ( const
 \r
                fprintf ( fMakefile, "%s: %s %s\n",\r
                          target.c_str (),\r
-                         archiveFilename.c_str (),\r
+                         objectsMacro.c_str (),\r
                          importLibraryDependencies.c_str () );\r
 \r
                string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll",\r
@@ -1533,7 +1548,7 @@ MingwKernelModeDriverModuleHandler::GenerateKernelModeDriverModuleTarget ( const
                GenerateLinkerCommand ( module,\r
                                        "${gcc}",\r
                                        linkerParameters,\r
-                                       archiveFilename );\r
+                                       objectsMacro );\r
        }\r
        else\r
        {\r
@@ -1566,8 +1581,7 @@ MingwNativeDLLModuleHandler::GenerateNativeDLLModuleTarget ( const Module& modul
        static string ros_junk ( "$(ROS_TEMPORARY)" );\r
        string target ( FixupTargetFilename ( module.GetPath () ) );\r
        string workingDirectory = GetWorkingDirectory ( );\r
-       string objectFilenames = GetObjectFilenames ( module );\r
-       string archiveFilename = GetModuleArchiveFilename ( module );\r
+       string objectsMacro = GetObjectsMacro ( module );\r
        string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
        \r
        GenerateImportLibraryTargetIfNeeded ( module );\r
@@ -1578,7 +1592,7 @@ MingwNativeDLLModuleHandler::GenerateNativeDLLModuleTarget ( const Module& modul
 \r
                fprintf ( fMakefile, "%s: %s %s\n",\r
                          target.c_str (),\r
-                         archiveFilename.c_str (),\r
+                         objectsMacro.c_str (),\r
                          importLibraryDependencies.c_str () );\r
 \r
                string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -nostdlib -mdll",\r
@@ -1587,7 +1601,7 @@ MingwNativeDLLModuleHandler::GenerateNativeDLLModuleTarget ( const Module& modul
                GenerateLinkerCommand ( module,\r
                                        "${gcc}",\r
                                        linkerParameters,\r
-                                       objectFilenames );\r
+                                       objectsMacro );\r
        }\r
        else\r
        {\r
@@ -1620,8 +1634,7 @@ MingwNativeCUIModuleHandler::GenerateNativeCUIModuleTarget ( const Module& modul
        static string ros_junk ( "$(ROS_TEMPORARY)" );\r
        string target ( FixupTargetFilename ( module.GetPath () ) );\r
        string workingDirectory = GetWorkingDirectory ( );\r
-       string objectFilenames = GetObjectFilenames ( module );\r
-       string archiveFilename = GetModuleArchiveFilename ( module );\r
+       string objectsMacro = GetObjectsMacro ( module );\r
        string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
        \r
        GenerateImportLibraryTargetIfNeeded ( module );\r
@@ -1636,7 +1649,7 @@ MingwNativeCUIModuleHandler::GenerateNativeCUIModuleTarget ( const Module& modul
 \r
                fprintf ( fMakefile, "%s: %s %s\n",\r
                          target.c_str (),\r
-                         archiveFilename.c_str (),\r
+                         objectsMacro.c_str (),\r
                          importLibraryDependencies.c_str () );\r
 \r
                string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -nostdlib",\r
@@ -1645,7 +1658,7 @@ MingwNativeCUIModuleHandler::GenerateNativeCUIModuleTarget ( const Module& modul
                GenerateLinkerCommand ( module,\r
                                        "${gcc}",\r
                                        linkerParameters,\r
-                                       objectFilenames );\r
+                                       objectsMacro );\r
        }\r
        else\r
        {\r
@@ -1700,7 +1713,7 @@ MingwWin32DLLModuleHandler::GenerateWin32DLLModuleTarget ( const Module& module
        static string ros_junk ( "$(ROS_TEMPORARY)" );\r
        string target ( FixupTargetFilename ( module.GetPath () ) );\r
        string workingDirectory = GetWorkingDirectory ( );\r
-       string objectFilenames = GetObjectFilenames ( module );\r
+       string objectsMacro = GetObjectsMacro ( module );\r
        string linkingDependencies = GetLinkingDependencies ( module );\r
 \r
        GenerateImportLibraryTargetIfNeeded ( module );\r
@@ -1710,7 +1723,7 @@ MingwWin32DLLModuleHandler::GenerateWin32DLLModuleTarget ( const Module& module
        \r
                fprintf ( fMakefile, "%s: %s %s\n",\r
                          target.c_str (),\r
-                         objectFilenames.c_str (),\r
+                         objectsMacro.c_str (),\r
                          linkingDependencies.c_str () );\r
 \r
                string linker;\r
@@ -1725,7 +1738,7 @@ MingwWin32DLLModuleHandler::GenerateWin32DLLModuleTarget ( const Module& module
                GenerateLinkerCommand ( module,\r
                                        linker,\r
                                        linkerParameters,\r
-                                       objectFilenames );\r
+                                       objectsMacro );\r
        }\r
        else\r
        {\r
@@ -1758,7 +1771,7 @@ MingwWin32CUIModuleHandler::GenerateWin32CUIModuleTarget ( const Module& module
        static string ros_junk ( "$(ROS_TEMPORARY)" );\r
        string target ( FixupTargetFilename ( module.GetPath () ) );\r
        string workingDirectory = GetWorkingDirectory ( );\r
-       string objectFilenames = GetObjectFilenames ( module );\r
+       string objectsMacro = GetObjectsMacro ( module );\r
        string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
 \r
        GenerateImportLibraryTargetIfNeeded ( module );\r
@@ -1769,7 +1782,7 @@ MingwWin32CUIModuleHandler::GenerateWin32CUIModuleTarget ( const Module& module
 \r
                fprintf ( fMakefile, "%s: %s %s\n",\r
                          target.c_str (),\r
-                         objectFilenames.c_str (),\r
+                         objectsMacro.c_str (),\r
                          importLibraryDependencies.c_str () );\r
 \r
                string linker;\r
@@ -1784,7 +1797,7 @@ MingwWin32CUIModuleHandler::GenerateWin32CUIModuleTarget ( const Module& module
                GenerateLinkerCommand ( module,\r
                                        linker,\r
                                        linkerParameters,\r
-                                       objectFilenames );\r
+                                       objectsMacro );\r
        }\r
        else\r
        {\r
@@ -1817,7 +1830,7 @@ MingwWin32GUIModuleHandler::GenerateWin32GUIModuleTarget ( const Module& module
        static string ros_junk ( "$(ROS_TEMPORARY)" );\r
        string target ( FixupTargetFilename ( module.GetPath () ) );\r
        string workingDirectory = GetWorkingDirectory ( );\r
-       string objectFilenames = GetObjectFilenames ( module );\r
+       string objectsMacro = GetObjectsMacro ( module );\r
        string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
 \r
        GenerateImportLibraryTargetIfNeeded ( module );\r
@@ -1828,7 +1841,7 @@ MingwWin32GUIModuleHandler::GenerateWin32GUIModuleTarget ( const Module& module
 \r
                fprintf ( fMakefile, "%s: %s %s\n",\r
                          target.c_str (),\r
-                         objectFilenames.c_str (),\r
+                         objectsMacro.c_str (),\r
                          importLibraryDependencies.c_str () );\r
 \r
                string linker;\r
@@ -1843,7 +1856,7 @@ MingwWin32GUIModuleHandler::GenerateWin32GUIModuleTarget ( const Module& module
                GenerateLinkerCommand ( module,\r
                                        linker,\r
                                        linkerParameters,\r
-                                       objectFilenames );\r
+                                       objectsMacro );\r
        }\r
        else\r
        {\r