1 diff -durN rpm-4.3.orig/build/rpmfc.c rpm-4.3/build/rpmfc.c
2 --- rpm-4.3.orig/build/rpmfc.c 2004-01-04 13:53:29.000000000 +0100
3 +++ rpm-4.3/build/rpmfc.c 2004-01-04 15:13:18.227262716 +0100
5 #define _RPMDS_INTERNAL
13 @@ -1058,6 +1060,116 @@
17 +int rpmfcFindRequiredPackages(rpmfc fc)
26 + unsigned char deptype;
37 + rpmdbMatchIterator it;
39 + ARGV_t noautoreqdep=NULL;
42 + s=rpmExpand("%{_noautoreqdep}",NULL);
44 + poptParseArgvString(s,&noautoreqdep_c,(const char ***)&noautoreqdep);
47 + if (noautoreqdep==NULL) noautoreqdep_c=0;
49 + ts = rpmtsCreate(); /* XXX ts created in main() should be used */
51 + rpmMessage(RPMMESS_NORMAL, "Searching for required packages....\n");
53 + nddict = argvCount(fc->ddict);
55 + for (i = 0; i < nddict; i++) {
58 + /* Parse out (file#,deptype,N,EVR,Flags) */
59 + ix = strtol(s, &se, 10);
64 + while (*se && *se != ' ')
68 + while (*se && *se != ' ')
71 + Flags = strtol(se, NULL, 16);
73 + if (deptype!='R') continue;
75 + rpmMessage(RPMMESS_DEBUG, "#%i requires: %s,%s,%i\n",ix,N,EVR,Flags);
76 + if (EVR && EVR[0]) {
77 + rpmMessage(RPMMESS_DEBUG, "skipping #%i require\n");
80 + for(j=0;j<noautoreqdep_c;j++)
81 + if (fnmatch(noautoreqdep[j],N,0)==0) {
82 + rpmMessage(RPMMESS_NORMAL,
83 + "skipping %s requirement processing (matches noautoreqdep pattern: %s)\n",
87 + if (j<noautoreqdep_c) continue;
89 + rpmMessage(RPMMESS_DEBUG, "skipping #%i require (is file requirement)\n");
92 + it=rpmtsInitIterator(ts, RPMTAG_PROVIDENAME, N, 0);
94 + rpmMessage(RPMMESS_DEBUG, "%s -> not found\n",N);
97 + rpmMessage(RPMMESS_DEBUG, "Iterator: %p\n",it);
98 + if (rpmdbGetIteratorCount(it)>1) {
99 + rpmMessage(RPMMESS_DEBUG, "%s -> multiple (skipping)\n",N);
100 + rpmdbFreeIterator(it);
103 + hdr=rpmdbNextIterator(it);
105 + r=rpmHeaderGetEntry(hdr,RPMTAG_NAME,NULL,(void **)&hname, NULL);
107 + if (!strcmp(hname,N)) {
108 + rpmMessage(RPMMESS_DEBUG, "%s -> %s (skipping)\n",N,hname);
109 + rpmdbFreeIterator(it);
113 + rpmMessage(RPMMESS_DEBUG, "%s -> %s\n",N,hname);
115 + ds = rpmdsSingle(RPMTAG_REQUIRENAME, hname, "", RPMSENSE_FIND_REQUIRES);
116 + xx = rpmdsMerge(&fc->requires, ds);
117 + ds = rpmdsFree(ds);
119 + rpmdbFreeIterator(it);
122 + noautoreqdep=_free(noautoreqdep);
123 + ts = rpmtsFree(ts);
127 int rpmfcApply(rpmfc fc)
130 @@ -1086,6 +1198,8 @@
134 + rpmfcFindRequiredPackages(fc);
137 /* Generate per-file indices into package dependencies. */
138 nddict = argvCount(fc->ddict);