Generate registry hives on 'make install'
authorCasper Hornstrup <chorns@users.sourceforge.net>
Tue, 5 Apr 2005 17:22:02 +0000 (17:22 +0000)
committerCasper Hornstrup <chorns@users.sourceforge.net>
Tue, 5 Apr 2005 17:22:02 +0000 (17:22 +0000)
svn path=/branches/xmlbuildsystem/; revision=14507

reactos/Makefile
reactos/tools/mkhive/mkhive.mak [new file with mode: 0644]
reactos/tools/rbuild/backend/mingw/mingw.cpp
reactos/tools/rbuild/backend/mingw/mingw.h
reactos/tools/rbuild/backend/mingw/modulehandler.cpp
reactos/tools/tools.mak

index f214a4a..b05a0b9 100644 (file)
@@ -90,6 +90,7 @@ ifeq ($(HALFVERBOSEECHO),yes)
   ECHO_NCI     =@echo [NCI]      $@
   ECHO_CABMAN  =@echo [CABMAN]   $<
   ECHO_CDMAKE  =@echo [CDMAKE]   $@
+  ECHO_MKHIVE  =@echo [MKHIVE]   $@
   ECHO_REGTESTS=@echo [REGTESTS] $@
   ECHO_TEST    =@echo [TEST]     $@
 else
@@ -115,6 +116,7 @@ else
   ECHO_NCI     =
   ECHO_CABMAN  =
   ECHO_CDMAKE  =
+  ECHO_MKHIVE  =
   ECHO_REGTESTS=
   ECHO_TEST    =
 endif
@@ -139,7 +141,7 @@ ifeq ($(HOST),mingw32-linux)
        objcopy = $(Q)mingw32-objcopy
        dlltool = $(Q)mingw32-dlltool
        windres = $(Q)mingw32-windres
-       rm = rm -f
+       rm = $(Q)rm -f
        cp = $(Q)cp
        NUL = /dev/null
 else # mingw32-windows
@@ -157,7 +159,7 @@ else # mingw32-windows
        objcopy = $(Q)objcopy
        dlltool = $(Q)dlltool
        windres = $(Q)windres
-       rm = del /f /q
+       rm = $(Q)del /f /q
        cp = $(Q)copy /y
        NUL = NUL
 endif
diff --git a/reactos/tools/mkhive/mkhive.mak b/reactos/tools/mkhive/mkhive.mak
new file mode 100644 (file)
index 0000000..57804b4
--- /dev/null
@@ -0,0 +1,66 @@
+MKHIVE_BASE = $(TOOLS_BASE_)mkhive\r
+MKHIVE_BASE_ = $(MKHIVE_BASE)$(SEP)\r
+MKHIVE_INT = $(INTERMEDIATE_)$(MKHIVE_BASE)\r
+MKHIVE_INT_ = $(MKHIVE_INT)$(SEP)\r
+MKHIVE_OUT = $(OUTPUT_)$(MKHIVE_BASE)\r
+MKHIVE_OUT_ = $(MKHIVE_OUT)$(SEP)\r
+\r
+$(MKHIVE_INT): $(TOOLS_INT)\r
+       $(ECHO_MKDIR)\r
+       ${mkdir} $@\r
+\r
+ifneq ($(INTERMEDIATE),$(OUTPUT))\r
+$(MKHIVE_OUT): $(TOOLS_OUT)\r
+       $(ECHO_MKDIR)\r
+       ${mkdir} $@\r
+endif\r
+\r
+MKHIVE_TARGET = \\r
+       $(EXEPREFIX)$(MKHIVE_OUT_)mkhive$(EXEPOSTFIX)\r
+\r
+MKHIVE_SOURCES = $(addprefix $(MKHIVE_BASE_), \\r
+       binhive.c \\r
+       infcache.c \\r
+       mkhive.c \\r
+       reginf.c \\r
+       registry.c \\r
+       )\r
+\r
+MKHIVE_OBJECTS = \\r
+       $(addprefix $(INTERMEDIATE_), $(MKHIVE_SOURCES:.c=.o))\r
+\r
+MKHIVE_HOST_CFLAGS = -g -Werror -Wall\r
+\r
+MKHIVE_HOST_LFLAGS = -g\r
+\r
+.PHONY: mkhive\r
+mkhive: $(MKHIVE_TARGET)\r
+\r
+$(MKHIVE_TARGET): $(MKHIVE_OBJECTS) $(MKHIVE_OUT)\r
+       $(ECHO_LD)\r
+       ${host_gcc} $(MKHIVE_OBJECTS) $(MKHIVE_HOST_LFLAGS) -o $@\r
+\r
+$(MKHIVE_INT_)binhive.o: $(MKHIVE_BASE_)binhive.c $(MKHIVE_INT)\r
+       $(ECHO_CC)\r
+       ${host_gcc} $(MKHIVE_HOST_CFLAGS) -c $< -o $@\r
+\r
+$(MKHIVE_INT_)infcache.o: $(MKHIVE_BASE_)infcache.c $(MKHIVE_INT)\r
+       $(ECHO_CC)\r
+       ${host_gcc} $(MKHIVE_HOST_CFLAGS) -c $< -o $@\r
+\r
+$(MKHIVE_INT_)mkhive.o: $(MKHIVE_BASE_)mkhive.c $(MKHIVE_INT)\r
+       $(ECHO_CC)\r
+       ${host_gcc} $(MKHIVE_HOST_CFLAGS) -c $< -o $@\r
+\r
+$(MKHIVE_INT_)reginf.o: $(MKHIVE_BASE_)reginf.c $(MKHIVE_INT)\r
+       $(ECHO_CC)\r
+       ${host_gcc} $(MKHIVE_HOST_CFLAGS) -c $< -o $@\r
+\r
+$(MKHIVE_INT_)registry.o: $(MKHIVE_BASE_)registry.c $(MKHIVE_INT)\r
+       $(ECHO_CC)\r
+       ${host_gcc} $(MKHIVE_HOST_CFLAGS) -c $< -o $@\r
+\r
+.PHONY: mkhive_clean\r
+mkhive_clean: $(MKHIVE_TARGET)\r
+       -@$(rm) $(MKHIVE_TARGET) $(MKHIVE_OBJECTS) 2>$(NUL)\r
+clean: mkhive_clean\r
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
index d8581b4..c526dfe 100644 (file)
@@ -60,6 +60,9 @@ private:
                                   const std::string& targetDirectory );\r
        void OutputNonModuleInstallTargets ( const std::string& installDirectory );\r
        void OutputModuleInstallTargets ( const std::string& installDirectory );\r
+       std::string GetRegistrySourceFiles ();\r
+       std::string GetRegistryTargetFiles ( const std::string& installDirectory );\r
+       void OutputRegistryInstallTarget ( const std::string& installDirectory );\r
        void GenerateInstallTarget ();\r
        FILE* fMakefile;\r
        bool use_pch;\r
index 86eeaf5..3ad8a09 100644 (file)
@@ -2189,7 +2189,7 @@ MingwIsoModuleHandler::OutputBootstrapfileCopyCommands (
                        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
                                  m.GetPath ().c_str (),\r
                                  targetFilename.c_str () );\r
                }\r
@@ -2210,7 +2210,7 @@ MingwIsoModuleHandler::OutputCdfileCopyCommands (
                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
                          cdfile.GetPath ().c_str (),\r
                          targetFilename.c_str () );\r
        }\r
index faf972f..f9137e4 100644 (file)
@@ -57,6 +57,7 @@ include tools/bin2res/bin2res.mak
 include tools/buildno/buildno.mak
 include tools/cabman/cabman.mak
 include tools/cdmake/cdmake.mak
+include tools/mkhive/mkhive.mak
 include tools/nci/nci.mak
 include tools/rbuild/rbuild.mak
 include tools/unicode/unicode.mak