pre-inst should install 'installer' group rather than the hardcoded plover-gtkui
1.1 --- a/pre-inst/pre-inst.c Wed Jul 15 11:54:06 2020 +0100
1.2 +++ b/pre-inst/pre-inst.c Tue Jul 14 18:03:26 2020 +0100
1.3 @@ -26,6 +26,7 @@
1.4 #include <stdlib.h>
1.5 #include <stdio.h>
1.6 #include <string.h>
1.7 +#include <errno.h>
1.8 #include <lua.h>
1.9 #include <razor.h>
1.10 #include <plover/plover.h>
1.11 @@ -90,10 +91,16 @@
1.12 #endif
1.13 unsigned pre_install_thread(void *data)
1.14 {
1.15 + gboolean changed;
1.16 int retval;
1.17 const char *repository=data;
1.18 gchar *s,*uri;
1.19 char *install[]={"plover-gtkui",NULL};
1.20 + char **pkgs=install;
1.21 + struct comps *comps;
1.22 + struct comps_group *group;
1.23 + struct comps_requirement *pkg;
1.24 + struct plover_vector *packages=NULL;
1.25 GError *error=NULL;
1.26 plover__uri_handler_init();
1.27 prefix=plover_pre_install_prefix();
1.28 @@ -110,9 +117,44 @@
1.29 g_free(prefix);
1.30 return -1;
1.31 }
1.32 - retval=!plover_install_uri(repository,prefix,install,&error);
1.33 + s=g_strconcat(repository,"/repodata/comps.xml",NULL);
1.34 + comps=plover_comps_new_from_uri(s,&error);
1.35 + retval=!comps;
1.36 + g_free(s);
1.37 + if (!retval)
1.38 + {
1.39 + group=plover_comps_lookup_group(comps,"installer");
1.40 + if (group)
1.41 + {
1.42 + packages=plover_vector_new();
1.43 + do
1.44 + {
1.45 + changed=FALSE;
1.46 + for(pkg=group->packages;pkg;pkg=pkg->next)
1.47 + {
1.48 + if (plover_vector_contains(packages,pkg->name))
1.49 + continue;
1.50 + if (pkg->type==COMPS_REQUIREMENT_DEFAULT ||
1.51 + pkg->type==COMPS_REQUIREMENT_MANDATORY ||
1.52 + pkg->type==COMPS_REQUIREMENT_CONDITIONAL &&
1.53 + plover_vector_contains(packages,pkg->requires))
1.54 + {
1.55 + changed=TRUE;
1.56 + plover_vector_append(packages,pkg->name);
1.57 + }
1.58 + }
1.59 + } while(changed);
1.60 + pkgs=packages->strings;
1.61 + }
1.62 + }
1.63 + if (!retval)
1.64 + retval=!plover_install_uri(repository,prefix,pkgs,&error);
1.65 if (!retval)
1.66 retval=!plover_update_uri(repository,prefix,NULL,&error);
1.67 + if (packages)
1.68 + plover_vector_free(packages);
1.69 + if (comps)
1.70 + plover_comps_free(comps);
1.71 if (error)
1.72 {
1.73 fprintf(stderr,"%s\n",error->message);