Generate registry hives on 'make install'
[reactos.git] / reactos / tools / rbuild / backend / mingw / mingw.cpp
index bd50e02..cb1af81 100644 (file)
@@ -680,7 +680,7 @@ MingwBackend::OutputInstallTarget ( const string& installDirectory,
        fprintf ( fMakefile,\r
                  "\t$(ECHO_CP)\n" );\r
        fprintf ( fMakefile,\r
-                 "\t${cp} %s %s\n",\r
+                 "\t${cp} %s %s 1>$(NUL)\n",\r
                  sourceFilename.c_str (),\r
                  normalizedTargetFilename.c_str () );\r
 }\r
@@ -717,6 +717,55 @@ MingwBackend::OutputModuleInstallTargets ( const string& installDirectory )
        }\r
 }\r
 \r
+string\r
+MingwBackend::GetRegistrySourceFiles ()\r
+{\r
+       return "bootdata" SSEP "hivecls.inf "\r
+               "bootdata" SSEP "hivedef.inf "\r
+               "bootdata" SSEP "hiveinst.inf "\r
+               "bootdata" SSEP "hivesft.inf "\r
+               "bootdata" SSEP "hivesys.inf";\r
+}\r
+\r
+string\r
+MingwBackend::GetRegistryTargetFiles ( const string& installDirectory )\r
+{\r
+       string system32ConfigDirectory = MingwModuleHandler::PassThruCacheDirectory (\r
+               NormalizeFilename ( installDirectory + SSEP + "system32" + SSEP "config" ),\r
+               true );\r
+       return system32ConfigDirectory + SSEP "default " +\r
+               system32ConfigDirectory + SSEP "sam " +\r
+               system32ConfigDirectory + SSEP "security " +\r
+               system32ConfigDirectory + SSEP "software " +\r
+               system32ConfigDirectory + SSEP "system";\r
+}\r
+\r
+void\r
+MingwBackend::OutputRegistryInstallTarget ( const string& installDirectory )\r
+{\r
+       string system32ConfigDirectory = MingwModuleHandler::PassThruCacheDirectory (\r
+               NormalizeFilename ( installDirectory + SSEP + "system32" + SSEP "config" ),\r
+               true );\r
+\r
+       string registrySourceFiles = GetRegistrySourceFiles ();\r
+       string registryTargetFiles = GetRegistryTargetFiles ( installDirectory );\r
+       fprintf ( fMakefile,\r
+                 "install_registry: %s\n",\r
+                 registryTargetFiles.c_str () );\r
+       fprintf ( fMakefile,\r
+                 "%s: %s %s $(MKHIVE_TARGET)\n",\r
+                 registryTargetFiles.c_str (),\r
+                 registrySourceFiles.c_str (),\r
+                 system32ConfigDirectory.c_str () );\r
+       fprintf ( fMakefile,\r
+                 "\t$(ECHO_MKHIVE)\n" );\r
+       fprintf ( fMakefile,\r
+                 "\t$(MKHIVE_TARGET) bootdata %s bootdata" SSEP "hiveinst.inf\n",\r
+                 system32ConfigDirectory.c_str () );\r
+       fprintf ( fMakefile,\r
+                 "\n" );\r
+}\r
+\r
 void\r
 MingwBackend::GenerateInstallTarget ()\r
 {\r
@@ -730,11 +779,12 @@ MingwBackend::GenerateInstallTarget ()
        string installTargetFiles = v2s ( vInstallTargetFiles, 5 );\r
 \r
        fprintf ( fMakefile,\r
-                 "install: %s %s\n",\r
+                 "install: %s %s install_registry\n",\r
                  installDirectory.c_str (),\r
                  installTargetFiles.c_str () );\r
        OutputNonModuleInstallTargets ( installDirectoryNoFixup );\r
        OutputModuleInstallTargets ( installDirectoryNoFixup );\r
+       OutputRegistryInstallTarget ( installDirectoryNoFixup );\r
        fprintf ( fMakefile,\r
                  "\n" );\r
 }\r