adjust newlines around rsym command
[reactos.git] / reactos / tools / rbuild / backend / mingw / modulehandler.cpp
index a9dc3a1..62f2891 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
@@ -842,7 +857,7 @@ MingwModuleHandler::GenerateLinkerCommand ( const Module& module,
        else\r
        {\r
                fprintf ( fMakefile,\r
-                         "\t%s %s -o %s %s %s %s\n\n",\r
+                         "\t%s %s -o %s %s %s %s\n",\r
                          linker.c_str (),\r
                          linkerParameters.c_str (),\r
                          target.c_str (),\r
@@ -850,6 +865,11 @@ MingwModuleHandler::GenerateLinkerCommand ( const Module& module,
                          importLibraryDependencies.c_str (),\r
                          GetLinkerMacro ( module ).c_str () );\r
        }\r
+\r
+       fprintf ( fMakefile,\r
+                     "\t${rsym} %s %s\n\n",\r
+                     target.c_str (),\r
+                     target.c_str () );\r
 }\r
 \r
 void\r
@@ -1029,14 +1049,16 @@ MingwModuleHandler::GenerateMacrosAndTargets (
        clean_files.push_back ( ar_target );\r
        GetCleanTargets ( clean_files, module.files, module.ifs );\r
 \r
-       fprintf ( fMakefile, "clean::\n\t-@$(rm)" );\r
+       fprintf ( fMakefile, ".PHONY: %s_clean\n", module.name.c_str() );\r
+       fprintf ( fMakefile, "%s_clean:\n\t-@$(rm)", module.name.c_str() );\r
        for ( size_t i = 0; i < clean_files.size(); i++ )\r
        {\r
                if ( 9==(i%10) )\r
                        fprintf ( fMakefile, " 2>$(NUL)\n\t-@$(rm)" );\r
                fprintf ( fMakefile, " %s", clean_files[i].c_str() );\r
        }\r
-       fprintf ( fMakefile, " 2>$(NUL)\n\n" );\r
+       fprintf ( fMakefile, " 2>$(NUL)\n" );\r
+       fprintf ( fMakefile, "clean: %s_clean\n\n", module.name.c_str() );\r
 }\r
 \r
 void\r
@@ -1288,7 +1310,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
@@ -1301,14 +1323,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
@@ -1340,9 +1362,10 @@ MingwKernelModuleHandler::GenerateKernelModuleTarget ( const Module& module )
        string base_tmp = ros_junk + module.name + ".base.tmp";\r
        string junk_tmp = ros_junk + module.name + ".junk.tmp";\r
        string temp_exp = ros_junk + module.name + ".temp.exp";\r
-       string gccOptions = ssprintf ("-Wl,-T,%s" SSEP "ntoskrnl.lnk -Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,0xC0000000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll",\r
+       string gccOptions = ssprintf ("-Wl,-T,%s" SSEP "ntoskrnl.lnk -Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll",\r
                                      module.GetBasePath ().c_str (),\r
-                                     module.entrypoint.c_str () );\r
+                                     module.entrypoint.c_str (),\r
+                                     module.baseaddress.c_str () );\r
 \r
        GenerateMacrosAndTargetsTarget ( module );\r
 \r
@@ -1382,8 +1405,12 @@ MingwKernelModuleHandler::GenerateKernelModuleTarget ( const Module& module )
                  objectsMacro.c_str (),\r
                  importLibraryDependencies.c_str () );\r
        fprintf ( fMakefile,\r
-                 "\t${rm} %s\n\n",\r
+                 "\t${rm} %s\n",\r
                  temp_exp.c_str () );\r
+       fprintf ( fMakefile,\r
+                     "\t${rsym} %s %s\n\n",\r
+                     target.c_str (),\r
+                     target.c_str () );\r
 }\r
 \r
 \r
@@ -1452,7 +1479,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
@@ -1463,15 +1490,16 @@ 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,0x10000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll",\r
-                                                    module.entrypoint.c_str () );\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
+                                                    module.entrypoint.c_str (),\r
+                                                    module.baseaddress.c_str () );\r
                GenerateLinkerCommand ( module,\r
                                        "${gcc}",\r
                                        linkerParameters,\r
-                                       archiveFilename );\r
+                                       objectsMacro );\r
        }\r
        else\r
        {\r
@@ -1504,8 +1532,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
@@ -1520,15 +1548,16 @@ 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,0x10000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll",\r
-                                                    module.entrypoint.c_str () );\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
+                                                    module.entrypoint.c_str (),\r
+                                                    module.baseaddress.c_str () );\r
                GenerateLinkerCommand ( module,\r
                                        "${gcc}",\r
                                        linkerParameters,\r
-                                       archiveFilename );\r
+                                       objectsMacro );\r
        }\r
        else\r
        {\r
@@ -1561,8 +1590,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
@@ -1573,15 +1601,16 @@ 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,0x10000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -nostdlib -mdll",\r
-                                                    module.entrypoint.c_str () );\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
+                                                    module.entrypoint.c_str (),\r
+                                                    module.baseaddress.c_str () );\r
                GenerateLinkerCommand ( module,\r
                                        "${gcc}",\r
                                        linkerParameters,\r
-                                       objectFilenames );\r
+                                       objectsMacro );\r
        }\r
        else\r
        {\r
@@ -1614,8 +1643,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
@@ -1630,15 +1658,16 @@ 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,0x10000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -nostdlib",\r
-                                                    module.entrypoint.c_str () );\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
+                                                    module.entrypoint.c_str (),\r
+                                                    module.baseaddress.c_str () );\r
                GenerateLinkerCommand ( module,\r
                                        "${gcc}",\r
                                        linkerParameters,\r
-                                       objectFilenames );\r
+                                       objectsMacro );\r
        }\r
        else\r
        {\r
@@ -1693,7 +1722,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
@@ -1703,7 +1732,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
@@ -1712,12 +1741,13 @@ MingwWin32DLLModuleHandler::GenerateWin32DLLModuleTarget ( const Module& module
                else\r
                        linker = "${gcc}";\r
 \r
-               string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,0x10000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -mdll",\r
-                                                   module.entrypoint.c_str () );\r
+               string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -mdll",\r
+                                                    module.entrypoint.c_str (),\r
+                                                    module.baseaddress.c_str () );\r
                GenerateLinkerCommand ( module,\r
                                        linker,\r
                                        linkerParameters,\r
-                                       objectFilenames );\r
+                                       objectsMacro );\r
        }\r
        else\r
        {\r
@@ -1750,7 +1780,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
@@ -1761,7 +1791,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
@@ -1770,12 +1800,13 @@ MingwWin32CUIModuleHandler::GenerateWin32CUIModuleTarget ( const Module& module
                else\r
                        linker = "${gcc}";\r
 \r
-               string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,0x00400000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000",\r
-                                                    module.entrypoint.c_str () );\r
+               string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000",\r
+                                                    module.entrypoint.c_str (),\r
+                                                    module.baseaddress.c_str () );\r
                GenerateLinkerCommand ( module,\r
                                        linker,\r
                                        linkerParameters,\r
-                                       objectFilenames );\r
+                                       objectsMacro );\r
        }\r
        else\r
        {\r
@@ -1808,7 +1839,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
@@ -1819,7 +1850,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
@@ -1828,12 +1859,13 @@ MingwWin32GUIModuleHandler::GenerateWin32GUIModuleTarget ( const Module& module
                else\r
                        linker = "${gcc}";\r
 \r
-               string linkerParameters = ssprintf ( "-Wl,--subsystem,windows -Wl,--entry,%s -Wl,--image-base,0x00400000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000",\r
-                                                    module.entrypoint.c_str () );\r
+               string linkerParameters = ssprintf ( "-Wl,--subsystem,windows -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000",\r
+                                                    module.entrypoint.c_str (),\r
+                                                    module.baseaddress.c_str () );\r
                GenerateLinkerCommand ( module,\r
                                        linker,\r
                                        linkerParameters,\r
-                                       objectFilenames );\r
+                                       objectsMacro );\r
        }\r
        else\r
        {\r
@@ -1865,7 +1897,7 @@ MingwBootLoaderModuleHandler::GenerateBootLoaderModuleTarget ( const Module& mod
 {\r
        static string ros_junk ( "$(ROS_TEMPORARY)" );\r
        string targetName ( module.GetTargetName () );\r
-       string target ( FixupTargetFilename (module.GetPath ()) );\r
+       string target ( FixupTargetFilename ( module.GetPath () ) );\r
        string workingDirectory = GetWorkingDirectory ();\r
        string junk_tmp = ros_junk + module.name + ".junk.tmp";\r
        string objectsMacro = GetObjectsMacro ( module );\r
@@ -1943,6 +1975,131 @@ MingwIsoModuleHandler::Process ( const Module& module )
        GenerateInvocations ( module );\r
 }\r
 \r
+void\r
+MingwIsoModuleHandler::OutputBootstrapfileCopyCommands ( const string bootcdDirectory,\r
+                                                            const Module& module ) const\r
+{\r
+       for ( size_t i = 0; i < module.project.modules.size (); i++ )\r
+       {\r
+               const Module& m = *module.project.modules[i];\r
+               if ( m.bootstrap != NULL )\r
+               {\r
+                       string targetFilenameNoFixup = bootcdDirectory + SSEP + m.bootstrap->base + SSEP + m.bootstrap->nameoncd;\r
+                       string targetFilename = PassThruCacheDirectory ( FixupTargetFilename ( targetFilenameNoFixup ) );\r
+                       fprintf ( fMakefile,\r
+                                 "\t${cp} %s %s\n",\r
+                                 m.GetPath ().c_str (),\r
+                                 targetFilename.c_str () );\r
+               }\r
+       }\r
+}\r
+\r
+void\r
+MingwIsoModuleHandler::OutputCdfileCopyCommands ( const string bootcdDirectory,\r
+                                                     const Module& module ) const\r
+{\r
+       for ( size_t i = 0; i < module.project.cdfiles.size (); i++ )\r
+       {\r
+               const CDFile& cdfile = *module.project.cdfiles[i];\r
+               string targetFilenameNoFixup = bootcdDirectory + SSEP + cdfile.base + SSEP + cdfile.nameoncd;\r
+               string targetFilename = PassThruCacheDirectory ( FixupTargetFilename ( targetFilenameNoFixup ) );\r
+               fprintf ( fMakefile,\r
+                         "\t${cp} %s %s\n",\r
+                         cdfile.GetPath ().c_str (),\r
+                         targetFilename.c_str () );\r
+       }\r
+}\r
+\r
+string\r
+MingwIsoModuleHandler::GetBootstrapCdDirectories ( const string bootcdDirectory,\r
+                                                      const Module& module ) const\r
+{\r
+       string directories;\r
+       for ( size_t i = 0; i < module.project.modules.size (); i++ )\r
+       {\r
+               const Module& m = *module.project.modules[i];\r
+               if ( m.bootstrap != NULL )\r
+               {\r
+                       string targetDirecctory = bootcdDirectory + SSEP + m.bootstrap->base;\r
+                       if ( directories.size () > 0 )\r
+                               directories += " ";\r
+                       directories += FixupTargetFilename ( targetDirecctory );\r
+               }\r
+       }\r
+       return directories;\r
+}\r
+\r
+string\r
+MingwIsoModuleHandler::GetNonModuleCdDirectories ( const string bootcdDirectory,\r
+                                                      const Module& module ) const\r
+{\r
+       string directories;\r
+       for ( size_t i = 0; i < module.project.cdfiles.size (); i++ )\r
+       {\r
+               const CDFile& cdfile = *module.project.cdfiles[i];\r
+               string targetDirecctory = bootcdDirectory + SSEP + cdfile.base;\r
+               if ( directories.size () > 0 )\r
+                       directories += " ";\r
+               directories += FixupTargetFilename ( targetDirecctory );\r
+       }\r
+       return directories;\r
+}\r
+\r
+string\r
+MingwIsoModuleHandler::GetCdDirectories ( const string bootcdDirectory,\r
+                                             const Module& module ) const\r
+{\r
+       string directories = GetBootstrapCdDirectories ( bootcdDirectory,\r
+                                                        module );\r
+       directories += " " + GetNonModuleCdDirectories ( bootcdDirectory,\r
+                                                        module );\r
+       return directories;\r
+}\r
+\r
+string\r
+MingwIsoModuleHandler::GetBootstrapCdFiles ( const string bootcdDirectory,\r
+                                                const Module& module ) const\r
+{\r
+       string cdfiles;\r
+       for ( size_t i = 0; i < module.project.modules.size (); i++ )\r
+       {\r
+               const Module& m = *module.project.modules[i];\r
+               if ( m.bootstrap != NULL )\r
+               {\r
+                       if ( cdfiles.size () > 0 )\r
+                               cdfiles += " ";\r
+                       cdfiles += FixupTargetFilename ( m.GetPath () );\r
+               }\r
+       }\r
+       return cdfiles;\r
+}\r
+\r
+string\r
+MingwIsoModuleHandler::GetNonModuleCdFiles ( const string bootcdDirectory,\r
+                                                const Module& module ) const\r
+{\r
+       string cdfiles;\r
+       for ( size_t i = 0; i < module.project.cdfiles.size (); i++ )\r
+       {\r
+               const CDFile& cdfile = *module.project.cdfiles[i];\r
+               if ( cdfiles.size () > 0 )\r
+                       cdfiles += " ";\r
+               cdfiles += NormalizeFilename ( cdfile.GetPath () );\r
+       }\r
+       return cdfiles;\r
+}\r
+\r
+string\r
+MingwIsoModuleHandler::GetCdFiles ( const string bootcdDirectory,\r
+                                       const Module& module ) const\r
+{\r
+       string cdfiles = GetBootstrapCdFiles ( bootcdDirectory,\r
+                                              module );\r
+       cdfiles += " " + GetNonModuleCdFiles ( bootcdDirectory,\r
+                                              module );\r
+       return cdfiles;\r
+}\r
+\r
 void\r
 MingwIsoModuleHandler::GenerateIsoModuleTarget ( const Module& module )\r
 {\r
@@ -1953,26 +2110,35 @@ MingwIsoModuleHandler::GenerateIsoModuleTarget ( const Module& module )
        PassThruCacheDirectory ( bootcdReactos + SSEP );\r
        string reactosInf = FixupTargetFilename ( bootcdReactosNoFixup + "/reactos.inf" );\r
        string reactosDff = NormalizeFilename ( "bootdata/packages/reactos.dff" );\r
+       string cdDirectories = bootcdReactos + " " + GetCdDirectories ( bootcdDirectory,\r
+                                                                       module );\r
+       string cdFiles = GetCdFiles ( bootcdDirectory,\r
+                                     module );\r
 \r
        fprintf ( fMakefile, ".PHONY: %s\n\n",\r
                      module.name.c_str ());\r
        fprintf ( fMakefile,\r
-                 "%s: all %s %s\n",\r
+                 "%s: all %s %s %s\n",\r
                  module.name.c_str (),\r
                  isoboot.c_str (),\r
-                 bootcdReactos.c_str () );\r
+                 cdDirectories.c_str (),\r
+                 cdFiles.c_str () );\r
        fprintf ( fMakefile,\r
-                 "\t${cabman} /C %s /L %s /I\n",\r
+                 "\t${cabman} -C %s -L %s -I\n",\r
                  reactosDff.c_str (),\r
                  bootcdReactos.c_str () );\r
        fprintf ( fMakefile,\r
-                 "\t${cabman} /C %s /RC %s /L %s /N\n",\r
+                 "\t${cabman} -C %s -RC %s -L %s -N\n",\r
                  reactosDff.c_str (),\r
                  reactosInf.c_str (),\r
                  bootcdReactos.c_str () );\r
        fprintf ( fMakefile,\r
                  "\t- ${rm} %s\n",\r
                  reactosInf.c_str () );\r
+       OutputBootstrapfileCopyCommands ( bootcdDirectory,\r
+                                         module );\r
+       OutputCdfileCopyCommands ( bootcdDirectory,\r
+                                  module );\r
        fprintf ( fMakefile,\r
                  "\t${cdmake} -v -m -b %s %s REACTOS ReactOS.iso\n",\r
                  isoboot.c_str (),\r