# HG changeset patch # User J. Ali Harlow # Date 1594746206 -3600 # Node ID 55ae076f393c56e3ea02b9a213730ec6f016c096 # Parent d2d88f14283eae55b74200fd02b4bd1e985113c9 pre-inst should install 'installer' group rather than the hardcoded plover-gtkui diff -r d2d88f14283e -r 55ae076f393c pre-inst/pre-inst.c --- a/pre-inst/pre-inst.c Wed Jul 15 11:54:06 2020 +0100 +++ b/pre-inst/pre-inst.c Tue Jul 14 18:03:26 2020 +0100 @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -90,10 +91,16 @@ #endif unsigned pre_install_thread(void *data) { + gboolean changed; int retval; const char *repository=data; gchar *s,*uri; char *install[]={"plover-gtkui",NULL}; + char **pkgs=install; + struct comps *comps; + struct comps_group *group; + struct comps_requirement *pkg; + struct plover_vector *packages=NULL; GError *error=NULL; plover__uri_handler_init(); prefix=plover_pre_install_prefix(); @@ -110,9 +117,44 @@ g_free(prefix); return -1; } - retval=!plover_install_uri(repository,prefix,install,&error); + s=g_strconcat(repository,"/repodata/comps.xml",NULL); + comps=plover_comps_new_from_uri(s,&error); + retval=!comps; + g_free(s); + if (!retval) + { + group=plover_comps_lookup_group(comps,"installer"); + if (group) + { + packages=plover_vector_new(); + do + { + changed=FALSE; + for(pkg=group->packages;pkg;pkg=pkg->next) + { + if (plover_vector_contains(packages,pkg->name)) + continue; + if (pkg->type==COMPS_REQUIREMENT_DEFAULT || + pkg->type==COMPS_REQUIREMENT_MANDATORY || + pkg->type==COMPS_REQUIREMENT_CONDITIONAL && + plover_vector_contains(packages,pkg->requires)) + { + changed=TRUE; + plover_vector_append(packages,pkg->name); + } + } + } while(changed); + pkgs=packages->strings; + } + } + if (!retval) + retval=!plover_install_uri(repository,prefix,pkgs,&error); if (!retval) retval=!plover_update_uri(repository,prefix,NULL,&error); + if (packages) + plover_vector_free(packages); + if (comps) + plover_comps_free(comps); if (error) { fprintf(stderr,"%s\n",error->message);