* Run build tools after parsing build files
[reactos.git] / reactos / tools / rbuild / backend / mingw / mingw.cpp
index db03679..bc9c258 100644 (file)
@@ -30,6 +30,7 @@ MingwBackend::Process ()
        GenerateHeader ();\r
        GenerateGlobalVariables ();\r
        GenerateAllTarget ();\r
+       GenerateInitTarget ();\r
        for ( size_t i = 0; i < ProjectNode.modules.size (); i++ )\r
        {\r
                Module& module = *ProjectNode.modules[i];\r
@@ -167,6 +168,7 @@ MingwBackend::GenerateGlobalVariables () const
        fprintf ( fMakefile, "host_ar = ar\n" );\r
        fprintf ( fMakefile, "host_objcopy = objcopy\n" );\r
 #ifdef WIN32\r
+       fprintf ( fMakefile, "nmkdir = mkdir\n" );\r
        fprintf ( fMakefile, "rm = del /f /q\n" );\r
        fprintf ( fMakefile, "gcc = gcc\n" );\r
        fprintf ( fMakefile, "gpp = g++\n" );\r
@@ -176,6 +178,7 @@ MingwBackend::GenerateGlobalVariables () const
        fprintf ( fMakefile, "dlltool = dlltool\n" );\r
        fprintf ( fMakefile, "windres = windres\n" );\r
 #else\r
+       fprintf ( fMakefile, "nmkdir = mkdir -p\n" );\r
        fprintf ( fMakefile, "rm = rm -f\n" );\r
        fprintf ( fMakefile, "gcc = mingw32-gcc\n" );\r
        fprintf ( fMakefile, "gpp = mingw32-g++\n" );\r
@@ -235,6 +238,53 @@ MingwBackend::GenerateAllTarget () const
        fprintf ( fMakefile, "\n\t\n\n" );\r
 }\r
 \r
+string\r
+MingwBackend::GetBuildToolDependencies () const\r
+{\r
+       string dependencies;\r
+       for ( size_t i = 0; i < ProjectNode.modules.size (); i++ )\r
+       {\r
+               Module& module = *ProjectNode.modules[i];\r
+               if ( module.type == BuildTool )\r
+               {\r
+                       if ( dependencies.length () > 0 )\r
+                               dependencies += " ";\r
+                       dependencies += module.GetDependencyPath ();\r
+               }\r
+       }\r
+       return dependencies;\r
+}\r
+       \r
+void\r
+MingwBackend::GenerateInitTarget () const\r
+{\r
+       fprintf ( fMakefile,\r
+                 "init:");\r
+       fprintf ( fMakefile,\r
+                 " $(ROS_INTERMEDIATE)." SSEP "tools" );\r
+       fprintf ( fMakefile,\r
+                 " %s",\r
+                 GetBuildToolDependencies ().c_str () );\r
+       fprintf ( fMakefile,\r
+                 " %s",\r
+                 "include" SSEP "reactos" SSEP "buildno.h" );\r
+       fprintf ( fMakefile,\r
+                 "\n\t\n\n" );\r
+\r
+       fprintf ( fMakefile,\r
+                 "$(ROS_INTERMEDIATE)." SSEP "tools:\n" );\r
+       fprintf ( fMakefile,\r
+                 "ifneq ($(ROS_INTERMEDIATE),)\n" );\r
+       fprintf ( fMakefile,\r
+                 "\t${nmkdir} $(ROS_INTERMEDIATE)\n" );\r
+       fprintf ( fMakefile,\r
+                 "endif\n" );\r
+       fprintf ( fMakefile,\r
+                 "\t${nmkdir} $(ROS_INTERMEDIATE)." SSEP "tools\n" );\r
+       fprintf ( fMakefile,\r
+                 "\n" );\r
+}\r
+\r
 void\r
 MingwBackend::CheckAutomaticDependencies ()\r
 {\r