+
+ const char *flavor = findKernelFlavor(pd);
+ if (flavor)
+ {
+ char *cflavor = strdup(flavor);
+
+ Id npr = 0;
+ Id pid, *pidp;
+
+ /* this is either a kernel package or a kmp */
+ fprintf(stderr, "flavor %s\n", flavor);
+
+ for (pidp = pd->source->idarraydata + pd->deps[pd->pack].provides; pidp && (pid = *pidp++) != 0; )
+ {
+ const char *depname = 0;
+ Reldep *prd = 0;
+
+ if (ISRELDEP(pid))
+ {
+ prd = GETRELDEP(pool, pid);
+ depname = id2str(pool, prd->name);
+ }
+ else
+ {
+ depname = id2str(pool, pid);
+ }
+
+ if (!strncmp(depname, "kernel(", strlen("kernel(")) && !strchr(depname, ':'))
+ {
+ char newdep[100];
+ strcpy(newdep, "kernel(");
+ strncat(newdep, cflavor, sizeof(newdep));
+ strncat(newdep, ":", sizeof(newdep));
+ strncat(newdep, depname + strlen("kernel("), 100);
+ // fprintf(stderr, "dep %s %s\n", depname, newdep);
+ Id newid = str2id(pool, newdep, 1);
+ if (prd)
+ newid = rel2id(pool, newid, prd->evr, prd->flags, 1);
+ npr = source_addid_dep(pd->source, npr, newid, 0);
+ }
+ }
+ pd->deps[pd->pack].provides = npr;
+
+ npr = 0;
+ fprintf(stderr, "dd %d\n", pd->deps[pd->pack].requires);
+ for (pidp = pd->source->idarraydata + pd->deps[pd->pack].requires; pidp && (pid = *pidp++) != 0; )
+ {
+ const char *depname = 0;
+ Reldep *prd = 0;
+
+ if (ISRELDEP(pid))
+ {
+ prd = GETRELDEP(pool, pid);
+ depname = id2str(pool, prd->name);
+ }
+ else
+ {
+ depname = id2str(pool, pid);
+ }
+
+ if (!strncmp(depname, "kernel(", strlen("kernel(")) && !strchr(depname, ':'))
+ {
+ char newdep[100];
+ strcpy(newdep, "kernel(");
+ strncat(newdep, cflavor, sizeof(newdep));
+ strncat(newdep, ":", sizeof(newdep));
+ strncat(newdep, depname + strlen("kernel("), 100);
+ fprintf(stderr, "dep %s %s\n", depname, newdep);
+ source_reserve_ids(pd->source, 0, 1);
+ Id newid = str2id(pool, newdep, 1);
+ if (prd)
+ newid = rel2id(pool, newid, prd->evr, prd->flags, 1);
+ npr = source_addid_dep(pd->source, npr, newid, 0);
+ }
+ else
+ {
+ npr = source_addid_dep(pd->source, npr, pid, 0);
+ }
+ pd->deps[pd->pack].requires = npr;
+ }
+ free(cflavor);
+ }
+