46
48
rpmds provides; /*!< (no. provides) package provides */
47
49
rpmds requires; /*!< (no. requires) package requires */
49
StringBuf sb_java; /*!< concatenated list of java colored files. */
50
StringBuf sb_perl; /*!< concatenated list of perl colored files. */
51
StringBuf sb_python;/*!< concatenated list of python colored files. */
353
351
if (fc->skipProv)
355
rasprintf(&buf, "%%{?__%s_provides}", nsdep);
353
mname = rstrscat(NULL, "__", nsdep, "_provides", NULL);
356
354
depsp = &fc->provides;
357
355
dsContext = RPMSENSE_FIND_PROVIDES;
358
356
tagN = RPMTAG_PROVIDENAME;
363
rasprintf(&buf, "%%{?__%s_requires}", nsdep);
361
mname = rstrscat(NULL, "__", nsdep, "_requires", NULL);
364
362
depsp = &fc->requires;
365
363
dsContext = RPMSENSE_FIND_REQUIRES;
366
364
tagN = RPMTAG_REQUIRENAME;
367
rasprintf(&buf, "%%{?%s:%%{%s} %%{?%s_opts}}", mname, mname, mname);
471
471
{ "libtool library ", RPMFC_LIBTOOL|RPMFC_INCLUDE },
472
472
{ "pkgconfig ", RPMFC_PKGCONFIG|RPMFC_INCLUDE },
474
{ "Objective caml ", RPMFC_OCAML|RPMFC_INCLUDE },
474
476
/* XXX .NET executables and libraries. file(1) cannot differ from win32
475
477
* executables unfortunately :( */
476
478
{ "Mono/.Net assembly", RPMFC_MONO|RPMFC_INCLUDE },
484
486
{ "RPM v4", RPMFC_ARCHIVE|RPMFC_INCLUDE },
486
488
{ " image", RPMFC_IMAGE|RPMFC_INCLUDE },
489
{ " font metrics", RPMFC_WHITE|RPMFC_INCLUDE },
487
490
{ " font", RPMFC_FONT|RPMFC_INCLUDE },
488
491
{ " Font", RPMFC_FONT|RPMFC_INCLUDE },
496
499
{ "SGML", RPMFC_WHITE|RPMFC_INCLUDE },
497
500
{ "XML", RPMFC_WHITE|RPMFC_INCLUDE },
499
{ " program text", RPMFC_WHITE|RPMFC_INCLUDE },
500
502
{ " source", RPMFC_WHITE|RPMFC_INCLUDE },
501
503
{ "GLS_BINARY_LSB_FIRST", RPMFC_WHITE|RPMFC_INCLUDE },
502
504
{ " DB ", RPMFC_WHITE|RPMFC_INCLUDE },
504
{ "ASCII English text", RPMFC_WHITE|RPMFC_INCLUDE },
505
{ "ASCII text", RPMFC_WHITE|RPMFC_INCLUDE },
506
{ "ISO-8859 text", RPMFC_WHITE|RPMFC_INCLUDE },
508
506
{ "symbolic link to", RPMFC_SYMLINK },
509
507
{ "socket", RPMFC_DEVICE },
510
508
{ "special", RPMFC_DEVICE },
511
{ " text", RPMFC_TEXT },
509
{ " text", RPMFC_TEXT|RPMFC_INCLUDE },
513
511
{ "ASCII", RPMFC_WHITE },
514
512
{ "ISO-8859", RPMFC_WHITE },
640
638
fc->provides = rpmdsFree(fc->provides);
641
639
fc->requires = rpmdsFree(fc->requires);
643
fc->sb_java = freeStringBuf(fc->sb_java);
644
fc->sb_perl = freeStringBuf(fc->sb_perl);
645
fc->sb_python = freeStringBuf(fc->sb_python);
734
727
/* Set color based on interpreter name. */
735
728
bn = basename(s);
736
if (!strcmp(bn, "perl"))
729
if (rstreq(bn, "perl"))
737
730
fc->fcolor->vals[fc->ix] |= RPMFC_PERL;
738
else if (!strncmp(bn, "python", sizeof("python")-1))
731
else if (rstreqn(bn, "python", sizeof("python")-1))
739
732
fc->fcolor->vals[fc->ix] |= RPMFC_PYTHON;
774
767
xx = rpmfcHelper(fc, 'P', "mono");
775
768
if (is_executable)
776
769
xx = rpmfcHelper(fc, 'R', "mono");
771
if (fc->fcolor->vals[fc->ix] & RPMFC_OCAML) {
772
xx = rpmfcHelper(fc, 'P', "ocaml");
773
xx = rpmfcHelper(fc, 'R', "ocaml");
884
881
if (soname != NULL
885
882
&& !(filter_GLIBC_PRIVATE != 0
886
&& !strcmp(s, "GLIBC_PRIVATE")))
883
&& rstreq(s, "GLIBC_PRIVATE")))
888
885
rasprintf(&buf, "%s(%s)%s", soname, s,
889
886
#if !defined(__alpha__)
940
937
/* Filter dependencies that contain GLIBC_PRIVATE */
941
938
if (soname != NULL
942
939
&& !(filter_GLIBC_PRIVATE != 0
943
&& !strcmp(s, "GLIBC_PRIVATE")))
940
&& rstreq(s, "GLIBC_PRIVATE")))
945
942
rasprintf(&buf, "%s(%s)%s", soname, s,
946
943
#if !defined(__alpha__)
1084
static int rpmfcMISC(rpmfc fc)
1088
const char *what = NULL;
1089
const char * fn = fc->fn[fc->ix];
1090
/* this part is enumerated, compare equality not bit flags */
1091
int ftype = fc->fcolor->vals[fc->ix] & 0x000F0000;
1093
if (ftype == RPMFC_FONT) {
1094
what = "fontconfig";
1095
} else if (ftype == RPMFC_TEXT && rpmFileHasSuffix(fn, ".desktop")) {
1099
if (what == NULL || stat(fn, &st) < 0 || !S_ISREG(st.st_mode)) {
1103
(void) rpmfcHelper(fc, 'P', what);
1088
1109
typedef const struct rpmfcApplyTbl_s {
1089
1110
int (*func) (rpmfc fc);
1095
1116
static const struct rpmfcApplyTbl_s const rpmfcApplyTable[] = {
1096
1117
{ rpmfcELF, RPMFC_ELF },
1097
1118
{ rpmfcSCRIPT, (RPMFC_SCRIPT|RPMFC_BOURNE|
1098
RPMFC_PERL|RPMFC_PYTHON|RPMFC_MONO|
1119
RPMFC_PERL|RPMFC_PYTHON|RPMFC_MONO|RPMFC_OCAML|
1099
1120
RPMFC_PKGCONFIG|RPMFC_LIBTOOL) },
1121
{ rpmfcMISC, RPMFC_FONT|RPMFC_TEXT },
1128
1150
fn += sizeof("/usr/lib")-1;
1129
1151
if (fn[0] == '6' && fn[1] == '4')
1131
if (!strncmp(fn, "/python", sizeof("/python")-1))
1153
if (rstreqn(fn, "/python", sizeof("/python")-1))
1132
1154
fc->fcolor->vals[fc->ix] |= RPMFC_PYTHON;
1271
1294
ftype = "pkgconfig file";
1273
1296
/* XXX skip all files in /dev/ which are (or should be) %dev dummies. */
1274
else if (slen >= fc->brlen+sizeof("/dev/") && !strncmp(s+fc->brlen, "/dev/", sizeof("/dev/")-1))
1297
else if (slen >= fc->brlen+sizeof("/dev/") && rstreqn(s+fc->brlen, "/dev/", sizeof("/dev/")-1))
1277
1300
ftype = magic_file(ms, s);
1279
1302
if (ftype == NULL) {
1303
rpmlog(is_executable ? RPMLOG_ERR : RPMLOG_WARNING,
1281
1304
_("Recognition of file \"%s\" failed: mode %06o %s\n"),
1282
1305
s, mode, magic_error(ms));
1306
/* only executable files are critical to dep extraction */
1307
if (is_executable) {
1311
/* unrecognized non-executables get treated as "data" */
1445
1473
appendLineStringBuf(sb_stdin, rpmfiFN(fi));
1447
1475
for (dm = DepMsgs; dm->msg != NULL; dm++) {
1476
rpmTag tag = (dm->ftag > 0) ? dm->ftag : dm->ntag;
1449
1477
rpmsenseFlags tagflags;
1453
tag = (dm->ftag > 0) ? dm->ftag : dm->ntag;
1458
1481
case RPMTAG_PROVIDEFLAGS:
1475
xx = rpmfcExec(dm->argv, sb_stdin, &sb_stdout, failnonzero);
1498
if (rpmfcExec(dm->argv, sb_stdin, &sb_stdout, failnonzero) == -1)
1479
1501
s = rpmExpand(dm->argv[0], NULL);
1480
rpmlog(RPMLOG_NOTICE, _("Finding %s: %s\n"), dm->msg,
1502
rpmlog(RPMLOG_NOTICE, _("Finding %s: %s\n"), dm->msg, (s ? s : ""));
1484
1505
if (sb_stdout == NULL) {
1485
1506
rc = RPMRC_FAIL;
1669
1689
/* Add Provides: */
1670
if (fc->provides != NULL && (c = rpmdsCount(fc->provides)) > 0 && !fc->skipProv) {
1690
if (fc->provides != NULL && rpmdsCount(fc->provides) > 0 && !fc->skipProv) {
1671
1691
rpmds pi = rpmdsInit(fc->provides);
1672
1692
while (rpmdsNext(pi) >= 0) {
1673
1693
const char *name = rpmdsN(pi);
1683
1703
/* Add Requires: */
1684
if (fc->requires != NULL && (c = rpmdsCount(fc->requires)) > 0 && !fc->skipReq) {
1704
if (fc->requires != NULL && rpmdsCount(fc->requires) > 0 && !fc->skipReq) {
1685
1705
rpmds pi = rpmdsInit(fc->requires);
1686
1706
while (rpmdsNext(pi) >= 0) {
1687
1707
const char *name = rpmdsN(pi);