Here is another suggestion on how to change the frontend from the main
menu.  The idea is that all cdebconf frontend udebs will include a
postinst script and a menu entry setting the frontend as the default
frontend.  The udeb will also provide the virtual package
debconf-frontend.

When main-menu detects that a package implementing debconf-udeb, it
will exit, knowing that init will restart main-menu using
/sbin/debian-installer.  We should change rootskel to only set
debconf/frontend the first time it is executed (instead of setting
DEBIAN_FRONTEND).  This will make sure the new default frontend is
used when main-menu is started again after it exited because a new
debconf-frontend was selected.

Here is a patch for main-menu to get it to exit on command.  We might
want to change 'debconf-frontend' to something more generic, like
'exit-main-menu'.

Index: main-menu.c
===================================================================
RCS file: /cvs/debian-boot/debian-installer/main-menu/main-menu.c,v
retrieving revision 1.60
diff -u -3 -p -u -r1.60 main-menu.c
--- main-menu.c 22 Jan 2003 11:23:29 -0000      1.60
+++ main-menu.c 10 Mar 2003 21:50:04 -0000
@@ -376,6 +376,15 @@ static void update_language (void) {
        debconfclient_delete(debconf);
 }

+static int
+is_package_providing(struct package_t p, const char *name)
+{
+       for (i = 0; p->provides[i] != NULL; i++)
+               if (strcmp(p->provides[i]->name, name) == 0) {
+                 return 1; /* TRUE */
+               }
+}
+
 int main (int argc, char **argv) {
        struct package_t *p;
        int i;
@@ -394,11 +403,17 @@ int main (int argc, char **argv) {
                 * package 'language-selected'.
                 * The LANGUAGE environment variable must be updated
                 */
-               for (i = 0; p->provides[i] != NULL; i++)
-                       if (strcmp(p->provides[i]->name, "language-selected") == 0) {
-                               update_language();
-                               break;
-                       }
+               if (is_package_providing(p, "language-selected")) {
+                       update_language();
+
+               /*
+                * A new frontend package might change the default /
+                * current frontend.  Exit main-menu to let it restart
+                * from init with the new frontend.
+                */
+               if (is_package_providing(p, "debconf-frontend")) {
+                       return (0);
+
                di_list_free(packages, di_pkg_free);
                packages = status_read();
        }


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to