As suggested by Marco, I adapted the framework to generate grub_init_all
/ grub_fini_all functions from grub-emu to also be used on grub-probe and
grub-setup.

Any comments on the patch?

-- 
Robert Millan

My spam trap is [EMAIL PROTECTED]  Note: this address is only intended
for spam harvesters.  Writing to it will get you added to my black list.
2007-06-27  Robert Millan  <[EMAIL PROTECTED]>

	* geninitheader.sh: Process file specified in first parameter rather
	than hardcoding grub_modules_init.lst.
	* geninit.sh: Likewise.  Also, construct header name dynamicaly rather
	than hardcoding grub_modules_init.h.

	* conf/common.rmk: Rename grub_modules_init.[ch] files associated with
	grub-emu to grub_emu_init.[ch].  Add rules to build analogous
	grub_probe_init.[ch] and grub_setup_init.[ch].

	* conf/powerpc-ieee1275.rmk (grub_emu_DEPENDENCIES): Replace
	grub_modules_init.h with grub_emu_init.h.
	(grub_probe_*): Add new grub_probe_init.[ch] files.
	* conf/i386-efi.rmk: Likewise.
	* conf/i386-pc.rmk: Likewise.
	(grub_setup_*): Add new grub_setup_init.[ch] files.

	* util/grub-emu.c: Replace grub_modules_init.h with grub_emu_init.h.
	* util/grub-probe.c: Include grub_probe_init.h.  Use grub_init_all()
	to initialize modules rather than a list of hardcoded functions.
	* util/i386/pc/grub-setup.c: Include grub_setup_init.h.  Use
	grub_init_all() to initialize modules rather than a list of hardcoded
	functions.

diff -ur -x common.mk -x i386-pc.mk -x i386-efi.mk -x powerpc-ieee1275.mk grub2-1.95+20070626.old/conf/common.rmk grub2-1.95+20070626/conf/common.rmk
--- grub2-1.95+20070626.old/conf/common.rmk	2007-05-20 11:10:06.000000000 +0200
+++ grub2-1.95+20070626/conf/common.rmk	2007-06-27 21:49:57.000000000 +0200
@@ -6,18 +6,44 @@
 DISTCLEANFILES += grub_script.tab.c grub_script.tab.h
 
 # For grub-emu.
-grub_modules_init.lst: geninit.sh $(filter-out grub_emu_init.c,$(grub_emu_SOURCES))
+grub_emu_init.lst: geninit.sh $(filter-out grub_emu_init.c,$(grub_emu_SOURCES))
 	rm -f $@; grep GRUB_MOD_INIT $(filter %.c,$^) /dev/null > $@
-DISTCLEANFILES += grub_modules_init.lst
+DISTCLEANFILES += grub_emu_init.lst
 
-grub_modules_init.h: $(filter-out grub_emu_init.c,$(grub_emu_SOURCES)) geninitheader.sh grub_modules_init.lst
-	rm -f $@; sh $(srcdir)/geninitheader.sh > $@
-DISTCLEANFILES += grub_modules_init.h
+grub_emu_init.h: grub_emu_init.lst $(filter-out grub_emu_init.c,$(grub_emu_SOURCES)) geninitheader.sh
+	rm -f $@; sh $(srcdir)/geninitheader.sh $< > $@
+DISTCLEANFILES += grub_emu_init.h
 
-grub_emu_init.c: $(filter-out grub_emu_init.c,$(grub_emu_SOURCES)) geninit.sh grub_modules_init.lst grub_modules_init.h
-	rm -f $@; sh $(srcdir)/geninit.sh $(filter %.c,$^) > $@
+grub_emu_init.c: grub_emu_init.lst $(filter-out grub_emu_init.c,$(grub_emu_SOURCES)) geninit.sh grub_emu_init.h
+	rm -f $@; sh $(srcdir)/geninit.sh $< $(filter %.c,$^) > $@
 DISTCLEANFILES += grub_emu_init.c
 
+# For grub-probe.
+grub_probe_init.lst: geninit.sh $(filter-out grub_probe_init.c,$(grub_probe_SOURCES))
+	rm -f $@; grep GRUB_MOD_INIT $(filter %.c,$^) /dev/null > $@
+DISTCLEANFILES += grub_probe_init.lst
+
+grub_probe_init.h: grub_probe_init.lst $(filter-out grub_probe_init.c,$(grub_probe_SOURCES)) geninitheader.sh
+	rm -f $@; sh $(srcdir)/geninitheader.sh $< > $@
+DISTCLEANFILES += grub_probe_init.h
+
+grub_probe_init.c: grub_probe_init.lst $(filter-out grub_probe_init.c,$(grub_probe_SOURCES)) geninit.sh grub_probe_init.h
+	rm -f $@; sh $(srcdir)/geninit.sh $< $(filter %.c,$^) > $@
+DISTCLEANFILES += grub_probe_init.c
+
+# For grub-setup.
+grub_setup_init.lst: geninit.sh $(filter-out grub_setup_init.c,$(grub_setup_SOURCES))
+	rm -f $@; grep GRUB_MOD_INIT $(filter %.c,$^) /dev/null > $@
+DISTCLEANFILES += grub_setup_init.lst
+
+grub_setup_init.h: grub_setup_init.lst $(filter-out grub_setup_init.c,$(grub_setup_SOURCES)) geninitheader.sh
+	rm -f $@; sh $(srcdir)/geninitheader.sh $< > $@
+DISTCLEANFILES += grub_setup_init.h
+
+grub_setup_init.c: grub_setup_init.lst $(filter-out grub_setup_init.c,$(grub_setup_SOURCES)) geninit.sh grub_setup_init.h
+	rm -f $@; sh $(srcdir)/geninit.sh $< $(filter %.c,$^) > $@
+DISTCLEANFILES += grub_setup_init.c
+
 # For update-grub
 update-grub: util/update-grub.in config.status
 	./config.status --file=$@:$<
diff -ur -x common.mk -x i386-pc.mk -x i386-efi.mk -x powerpc-ieee1275.mk grub2-1.95+20070626.old/conf/i386-efi.rmk grub2-1.95+20070626/conf/i386-efi.rmk
--- grub2-1.95+20070626.old/conf/i386-efi.rmk	2007-06-26 08:54:53.000000000 +0200
+++ grub2-1.95+20070626/conf/i386-efi.rmk	2007-06-27 21:36:59.000000000 +0200
@@ -27,6 +27,7 @@
 grub_mkdevicemap_SOURCES = util/grub-mkdevicemap.c util/misc.c
 
 # For grub-probe.
+grub_probe_DEPENDENCIES = grub_probe_init.h
 grub_probe_SOURCES = util/grub-probe.c	\
 	util/biosdisk.c	util/misc.c util/getroot.c	\
 	kern/device.c kern/disk.c kern/err.c kern/misc.c fs/fat.c	\
@@ -34,11 +35,11 @@
 	partmap/pc.c partmap/apple.c partmap/gpt.c 			\
 	fs/ufs.c fs/minix.c fs/hfs.c fs/jfs.c kern/fs.c	\
 	kern/env.c fs/fshelp.c fs/xfs.c fs/affs.c fs/sfs.c fs/hfsplus.c	\
-	disk/lvm.c disk/raid.c
+	disk/lvm.c disk/raid.c grub_probe_init.c
 
 # For grub-emu.
 grub_emu_DEPENDENCIES = grub_script.tab.c grub_script.tab.h		\
-	grub_modules_init.h
+	grub_emu_init.h
 grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c 	\
 	commands/configfile.c commands/help.c				\
 	commands/terminal.c commands/ls.c commands/test.c 		\
diff -ur -x common.mk -x i386-pc.mk -x i386-efi.mk -x powerpc-ieee1275.mk grub2-1.95+20070626.old/conf/i386-pc.rmk grub2-1.95+20070626/conf/i386-pc.rmk
--- grub2-1.95+20070626.old/conf/i386-pc.rmk	2007-06-26 08:54:53.000000000 +0200
+++ grub2-1.95+20070626/conf/i386-pc.rmk	2007-06-27 21:36:52.000000000 +0200
@@ -62,18 +62,20 @@
 grub_mkimage_LDFLAGS = $(LIBLZO)
 
 # For grub-setup.
+grub_setup_DEPENDENCIES = grub_setup_init.h
 grub_setup_SOURCES = util/i386/pc/grub-setup.c util/biosdisk.c	\
 	util/misc.c util/getroot.c kern/device.c kern/disk.c	\
 	kern/err.c kern/misc.c fs/fat.c fs/ext2.c fs/xfs.c fs/affs.c	\
 	fs/sfs.c kern/parser.c kern/partition.c	partmap/pc.c		\
 	partmap/gpt.c fs/ufs.c fs/minix.c fs/hfs.c fs/jfs.c		\
 	fs/hfsplus.c kern/file.c kern/fs.c kern/env.c fs/fshelp.c	\
-	util/raid.c util/lvm.c
+	util/raid.c util/lvm.c grub_setup_init.c
 
 # For grub-mkdevicemap.
 grub_mkdevicemap_SOURCES = util/grub-mkdevicemap.c util/misc.c
 
 # For grub-probe.
+grub_probe_DEPENDENCIES = grub_probe_init.h
 grub_probe_SOURCES = util/grub-probe.c	\
 	util/biosdisk.c	util/misc.c util/getroot.c	\
 	kern/device.c kern/disk.c kern/err.c kern/misc.c fs/fat.c	\
@@ -81,11 +83,11 @@
 	partmap/pc.c partmap/apple.c partmap/gpt.c 			\
 	fs/ufs.c fs/minix.c fs/hfs.c fs/jfs.c kern/fs.c	\
 	kern/env.c fs/fshelp.c fs/xfs.c fs/affs.c fs/sfs.c fs/hfsplus.c	\
-	disk/lvm.c disk/raid.c
+	disk/lvm.c disk/raid.c grub_probe_init.c
 
 # For grub-emu.
 grub_emu_DEPENDENCIES = grub_script.tab.c grub_script.tab.h		\
-	grub_modules_init.h
+	grub_emu_init.h
 grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c	\
 	commands/configfile.c commands/echo.c commands/help.c		\
 	commands/terminal.c commands/ls.c commands/test.c 		\
diff -ur -x common.mk -x i386-pc.mk -x i386-efi.mk -x powerpc-ieee1275.mk grub2-1.95+20070626.old/conf/powerpc-ieee1275.rmk grub2-1.95+20070626/conf/powerpc-ieee1275.rmk
--- grub2-1.95+20070626.old/conf/powerpc-ieee1275.rmk	2007-06-26 08:54:53.000000000 +0200
+++ grub2-1.95+20070626/conf/powerpc-ieee1275.rmk	2007-06-27 21:36:39.000000000 +0200
@@ -39,6 +39,7 @@
 grub_mkdevicemap_SOURCES = util/grub-mkdevicemap.c util/misc.c
 
 # For grub-probe.
+grub_probe_DEPENDENCIES = grub_probe_init.h
 grub_probe_SOURCES = util/grub-probe.c	\
 	util/biosdisk.c	util/misc.c util/getroot.c	\
 	kern/device.c kern/disk.c kern/err.c kern/misc.c fs/fat.c	\
@@ -46,11 +47,11 @@
 	partmap/pc.c partmap/apple.c partmap/gpt.c 			\
 	fs/ufs.c fs/minix.c fs/hfs.c fs/jfs.c kern/fs.c	\
 	kern/env.c fs/fshelp.c fs/xfs.c fs/affs.c fs/sfs.c fs/hfsplus.c	\
-	disk/lvm.c disk/raid.c
+	disk/lvm.c disk/raid.c grub_probe_init.c
 
 # For grub-emu
 grub_emu_DEPENDENCIES = grub_script.tab.c grub_script.tab.h		\
-	grub_modules_init.h
+	grub_emu_init.h
 grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c 	\
 	commands/configfile.c commands/help.c				\
 	commands/search.c commands/terminal.c commands/test.c 		\
diff -ur -x common.mk -x i386-pc.mk -x i386-efi.mk -x powerpc-ieee1275.mk grub2-1.95+20070626.old/geninitheader.sh grub2-1.95+20070626/geninitheader.sh
--- grub2-1.95+20070626.old/geninitheader.sh	2005-11-13 16:47:08.000000000 +0100
+++ grub2-1.95+20070626/geninitheader.sh	2007-06-27 21:52:55.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 #
-# Copyright (C) 2005  Free Software Foundation, Inc.
+# Copyright (C) 2005, 2007  Free Software Foundation, Inc.
 #
 # This gensymlist.sh is free software; the author
 # gives unlimited permission to copy and/or distribute it,
@@ -11,11 +11,14 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
+lst="$1"
+shift
+
 cat <<EOF
 /* This file is automatically generated by gensymlist.sh. DO NOT EDIT! */
 /*
  *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2005  Free Software Foundation, Inc.
+ *  Copyright (C) 2005, 2007  Free Software Foundation, Inc.
  *
  *  GRUB is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -39,5 +42,5 @@
 void grub_fini_all (void);
 EOF
 
-cat grub_modules_init.lst | grep -v '^#' | sed -n '/GRUB_MOD_INIT *([a-zA-Z0-9_]*)/{s/.*GRUB_MOD_INIT *(\([a-zA-Z0-9_]*\)).*/void grub_\1_init (void);/;p;}'
-cat grub_modules_init.lst | grep -v '^#' | sed -n '/GRUB_MOD_INIT *([a-zA-Z0-9_]*)/{s/.*GRUB_MOD_INIT *(\([a-zA-Z0-9_]*\)).*/void grub_\1_fini (void);/;p;}'
+grep -v '^#' "${lst}" | sed -n '/GRUB_MOD_INIT *([a-zA-Z0-9_]*)/{s/.*GRUB_MOD_INIT *(\([a-zA-Z0-9_]*\)).*/void grub_\1_init (void);/;p;}'
+grep -v '^#' "${lst}" | sed -n '/GRUB_MOD_INIT *([a-zA-Z0-9_]*)/{s/.*GRUB_MOD_INIT *(\([a-zA-Z0-9_]*\)).*/void grub_\1_fini (void);/;p;}'
diff -ur -x common.mk -x i386-pc.mk -x i386-efi.mk -x powerpc-ieee1275.mk grub2-1.95+20070626.old/geninit.sh grub2-1.95+20070626/geninit.sh
--- grub2-1.95+20070626.old/geninit.sh	2005-12-25 18:04:32.000000000 +0100
+++ grub2-1.95+20070626/geninit.sh	2007-06-27 21:52:44.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 #
-# Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2002, 2005, 2007  Free Software Foundation, Inc.
 #
 # This gensymlist.sh is free software; the author
 # gives unlimited permission to copy and/or distribute it,
@@ -11,11 +11,16 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
+lst="$1"
+shift
+
+header=`echo "${lst}" | sed -e "s/\.lst$/.h/g"`
+
 cat <<EOF
 /* This file is automatically generated by geninit.sh. DO NOT EDIT! */
 /*
  *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2002, 2005  Free Software Foundation, Inc.
+ *  Copyright (C) 2002, 2005, 2007  Free Software Foundation, Inc.
  *
  *  GRUB is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -32,7 +37,7 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-#include <grub_modules_init.h>
+#include <$header>
 
 EOF
 
@@ -47,7 +52,7 @@
   if echo $@ | grep $file >/dev/null; then
     echo $line | sed -e 's/.*GRUB_MOD_INIT *(\([a-zA-Z0-9_]*\)).*/  grub_\1_init ();/'
   fi
-done < grub_modules_init.lst
+done < ${lst}
 
 cat <<EOF
 }
@@ -64,7 +69,7 @@
   if echo $@ | grep $file >/dev/null; then
     echo $line | sed -e 's/.*GRUB_MOD_INIT *(\([a-zA-Z0-9_]*\)).*/  grub_\1_fini ();/'
   fi
-done < grub_modules_init.lst
+done < ${lst}
 
 cat <<EOF
 }
diff -ur -x common.mk -x i386-pc.mk -x i386-efi.mk -x powerpc-ieee1275.mk grub2-1.95+20070626.old/util/grub-emu.c grub2-1.95+20070626/util/grub-emu.c
--- grub2-1.95+20070626.old/util/grub-emu.c	2007-06-13 18:53:54.000000000 +0200
+++ grub2-1.95+20070626/util/grub-emu.c	2007-06-27 21:39:35.000000000 +0200
@@ -38,7 +38,7 @@
 #include <grub/env.h>
 #include <grub/partition.h>
 
-#include <grub_modules_init.h>
+#include <grub_emu_init.h>
 
 /* Used for going back to the main function.  */
 jmp_buf main_env;
diff -ur -x common.mk -x i386-pc.mk -x i386-efi.mk -x powerpc-ieee1275.mk grub2-1.95+20070626.old/util/grub-probe.c grub2-1.95+20070626/util/grub-probe.c
--- grub2-1.95+20070626.old/util/grub-probe.c	2007-06-26 08:54:53.000000000 +0200
+++ grub2-1.95+20070626/util/grub-probe.c	2007-06-27 22:01:06.000000000 +0200
@@ -30,6 +30,8 @@
 #include <grub/util/getroot.h>
 #include <grub/term.h>
 
+#include <grub_probe_init.h>
+
 #include <stdio.h>
 #include <unistd.h>
 #include <string.h>
@@ -244,36 +246,15 @@
   
   /* Initialize the emulated biosdisk driver.  */
   grub_util_biosdisk_init (dev_map ? : DEFAULT_DEVICE_MAP);
-  grub_pc_partition_map_init ();
-  grub_gpt_partition_map_init ();
-  grub_apple_partition_map_init ();
-  grub_raid_init ();
-  grub_lvm_init ();
-  
-  /* Initialize filesystems.  */
-  grub_fat_init ();
-  grub_ext2_init ();
-  grub_ufs_init ();
-  grub_minix_init ();
-  grub_jfs_init ();
-  grub_xfs_init ();
+  
+  /* Initialize all modules. */
+  grub_init_all ();
 
   /* Do it.  */
   probe (path);
   
   /* Free resources.  */
-  grub_ext2_fini ();
-  grub_fat_fini ();
-  grub_ufs_fini ();
-  grub_minix_fini ();
-  grub_jfs_fini ();
-  grub_xfs_fini ();
-  
-  grub_lvm_fini ();
-  grub_raid_fini ();
-  grub_gpt_partition_map_fini ();
-  grub_apple_partition_map_fini ();
-  grub_pc_partition_map_fini ();
+  grub_fini_all ();
   grub_util_biosdisk_fini ();
   
   free (dev_map);
diff -ur -x common.mk -x i386-pc.mk -x i386-efi.mk -x powerpc-ieee1275.mk grub2-1.95+20070626.old/util/i386/pc/grub-setup.c grub2-1.95+20070626/util/i386/pc/grub-setup.c
--- grub2-1.95+20070626.old/util/i386/pc/grub-setup.c	2007-06-13 18:53:54.000000000 +0200
+++ grub2-1.95+20070626/util/i386/pc/grub-setup.c	2007-06-27 22:01:20.000000000 +0200
@@ -35,6 +35,8 @@
 #include <grub/util/raid.h>
 #include <grub/util/lvm.h>
 
+#include <grub_setup_init.h>
+
 #include <stdio.h>
 #include <unistd.h>
 #include <string.h>
@@ -653,9 +655,10 @@
 
   /* Initialize the emulated biosdisk driver.  */
   grub_util_biosdisk_init (dev_map ? : DEFAULT_DEVICE_MAP);
-  grub_pc_partition_map_init ();
-  grub_gpt_partition_map_init ();
 
+  /* Initialize all modules. */
+  grub_init_all ();
+  
   dest_dev = get_device_name (argv[optind]);
   if (! dest_dev)
     {
@@ -673,14 +676,6 @@
 
   prefix = grub_get_prefix (dir ? : DEFAULT_DIRECTORY);
   
-  /* Initialize filesystems.  */
-  grub_fat_init ();
-  grub_ext2_init ();
-  grub_ufs_init ();
-  grub_minix_init ();
-  grub_hfs_init ();
-  grub_jfs_init ();
-  
   if (root_dev)
     {
       char *tmp = get_device_name (root_dev);
@@ -749,15 +744,7 @@
 	   root_dev, dest_dev, must_embed);
 
   /* Free resources.  */
-  grub_ext2_fini ();
-  grub_fat_fini ();
-  grub_ufs_fini ();
-  grub_minix_fini ();
-  grub_hfs_fini ();
-  grub_jfs_fini ();
-  
-  grub_gpt_partition_map_fini ();
-  grub_pc_partition_map_fini ();
+  grub_fini_all ();
   grub_util_biosdisk_fini ();
   
   free (boot_file);
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to