generate clean rules
[reactos.git] / reactos / tools / rbuild / backend / mingw / mingw.cpp
index b526cee..4c9e01b 100644 (file)
@@ -59,31 +59,74 @@ MingwBackend::GenerateHeader ()
        fprintf ( fMakefile, "# THIS FILE IS AUTOMATICALLY GENERATED, EDIT 'ReactOS.xml' INSTEAD\n\n" );\r
 }\r
 \r
-string\r
-MingwBackend::GenerateProjectCFLAGS ()\r
+void\r
+MingwBackend::GenerateGlobalCFlagsAndProperties (\r
+       const char* op,\r
+       const vector<Property*>& properties,\r
+       const vector<Include*>& includes,\r
+       const vector<Define*>& defines,\r
+       const vector<If*>& ifs )\r
 {\r
-       string clags;\r
-       for ( size_t i = 0; i < ProjectNode.includes.size (); i++ )\r
+       size_t i;\r
+\r
+       for ( i = 0; i < properties.size(); i++ )\r
+       {\r
+               Property& prop = *properties[i];\r
+               fprintf ( fMakefile, "%s := %s\n",\r
+                       prop.name.c_str(),\r
+                       prop.value.c_str() );\r
+       }\r
+\r
+       if ( includes.size() || defines.size() )\r
        {\r
-               Include& include = *ProjectNode.includes[i];\r
-               if (clags.length () > 0)\r
-                       clags += " ";\r
-               clags += "-I" + include.directory;\r
+               fprintf (\r
+                       fMakefile,\r
+                       "PROJECT_CFLAGS %s",\r
+                       op );\r
+               for ( i = 0; i < includes.size(); i++ )\r
+               {\r
+                       fprintf (\r
+                               fMakefile,\r
+                               " -I%s",\r
+                               includes[i]->directory.c_str() );\r
+               }\r
+               for ( i = 0; i < defines.size(); i++ )\r
+               {\r
+                       Define& d = *defines[i];\r
+                       fprintf (\r
+                               fMakefile,\r
+                               " -D%s",\r
+                               d.name.c_str() );\r
+                       if ( d.value.size() )\r
+                               fprintf (\r
+                                       fMakefile,\r
+                                       "=%s",\r
+                                       d.value.c_str() );\r
+               }\r
+               fprintf ( fMakefile, "\n" );\r
        }\r
-       \r
-       for ( size_t i = 0; i < ProjectNode.defines.size (); i++ )\r
+\r
+       for ( i = 0; i < ifs.size(); i++ )\r
        {\r
-               Define& define = *ProjectNode.defines[i];\r
-               if ( clags.length () > 0 )\r
-                       clags += " ";\r
-               clags += "-D" + define.name;\r
-               if ( define.value.size() > 0 )\r
+               If& rIf = *ifs[i];\r
+               if ( rIf.defines.size() || rIf.includes.size() || rIf.ifs.size() )\r
                {\r
-                       clags += "=";\r
-                       clags += define.value;\r
+                       fprintf (\r
+                               fMakefile,\r
+                               "ifeq (\"$(%s)\",\"%s\")\n",\r
+                               rIf.property.c_str(),\r
+                               rIf.value.c_str() );\r
+                       GenerateGlobalCFlagsAndProperties (\r
+                               "+=",\r
+                               rIf.properties,\r
+                               rIf.includes,\r
+                               rIf.defines,\r
+                               rIf.ifs );\r
+                       fprintf ( \r
+                               fMakefile,\r
+                               "endif\n\n" );\r
                }\r
        }\r
-       return clags;\r
 }\r
 \r
 void\r
@@ -96,9 +139,17 @@ MingwBackend::GenerateGlobalVariables ()
        fprintf ( fMakefile, "gcc = gcc\n" );\r
        fprintf ( fMakefile, "ld = ld\n" );\r
        fprintf ( fMakefile, "ar = ar\n" );\r
-       fprintf ( fMakefile, "dlltool = dlltool\n" );\r
-       fprintf ( fMakefile, "PROJECT_CFLAGS = %s\n", GenerateProjectCFLAGS ().c_str () );\r
+       fprintf ( fMakefile, "dlltool = dlltool\n\n" );\r
+       GenerateGlobalCFlagsAndProperties (\r
+               "=",\r
+               ProjectNode.properties,\r
+               ProjectNode.includes,\r
+               ProjectNode.defines,\r
+               ProjectNode.ifs );\r
        fprintf ( fMakefile, "\n" );\r
+\r
+       fprintf ( fMakefile, ".PHONY: clean\n\n" );\r
+       //fprintf ( fMakefile, "clean:\n\t-@${rm} $(PROJECT_CLEAN)\n\n" );\r
 }\r
 \r
 void\r