add post install configurable dependency checking.
CVS patchset: 3202 CVS date: 1999/07/23 19:19:15
This commit is contained in:
parent
22dad3f4ce
commit
5ddfcc2f6a
1
CHANGES
1
CHANGES
|
@ -16,6 +16,7 @@
|
|||
- print all dependencies for each package at end of build.
|
||||
- the death of RPMSENSE_SERIAL, use [epoch:]version[-release] instead.
|
||||
- add _mandir/_infodir macro expansions to docdirs (Tomasz Kloczko).
|
||||
- add post install configurable dependency checking.
|
||||
|
||||
3.0.1 -> 3.0.2
|
||||
- eliminate armv4 entries from rpmrc (Andrew E. Mileski).
|
||||
|
|
186
build/files.c
186
build/files.c
|
@ -1490,7 +1490,7 @@ int processSourceFiles(Spec spec)
|
|||
}
|
||||
|
||||
static StringBuf getOutputFrom(char *dir, char *argv[],
|
||||
char *writePtr, int writeBytesLeft,
|
||||
const char *writePtr, int writeBytesLeft,
|
||||
int failNonZero)
|
||||
{
|
||||
int progPID;
|
||||
|
@ -1615,22 +1615,50 @@ top:
|
|||
return readBuff;
|
||||
}
|
||||
|
||||
static int generateAutoReqProv(Spec spec, Package pkg,
|
||||
typedef struct {
|
||||
const char *msg;
|
||||
const char *argv[4];
|
||||
int ntag;
|
||||
int vtag;
|
||||
int ftag;
|
||||
int mask;
|
||||
int xor;
|
||||
} DepMsg_t;
|
||||
|
||||
DepMsg_t depMsgs[] = {
|
||||
{ "Provides", { "%{__find_provides}", NULL, NULL, NULL },
|
||||
RPMTAG_PROVIDENAME, RPMTAG_PROVIDEVERSION, RPMTAG_PROVIDEFLAGS,
|
||||
0, -1 },
|
||||
{ "PreReq", { "%{__find_prereq}", NULL, NULL, NULL },
|
||||
RPMTAG_REQUIRENAME, RPMTAG_REQUIREVERSION, RPMTAG_REQUIREFLAGS,
|
||||
RPMSENSE_PREREQ, 0 },
|
||||
{ "Requires", { "%{__find_requires}", NULL, NULL, NULL },
|
||||
-1, -1, RPMTAG_REQUIREFLAGS, /* XXX inherit name/version arrays */
|
||||
RPMSENSE_PREREQ, RPMSENSE_PREREQ },
|
||||
{ "Conflicts", { "%{__find_conflicts}", NULL, NULL, NULL },
|
||||
RPMTAG_CONFLICTNAME, RPMTAG_CONFLICTVERSION, RPMTAG_CONFLICTFLAGS,
|
||||
0, -1 },
|
||||
{ "Obsoletes", { "%{__find_obsoletes}", NULL, NULL, NULL },
|
||||
RPMTAG_OBSOLETENAME, RPMTAG_OBSOLETEVERSION, RPMTAG_OBSOLETEFLAGS,
|
||||
0, -1 },
|
||||
{ NULL, { NULL, NULL, NULL, NULL }, 0, 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
static int generateDepends(Spec spec, Package pkg,
|
||||
struct cpioFileMapping *cpioList, int cpioCount)
|
||||
{
|
||||
StringBuf writeBuf;
|
||||
int writeBytes;
|
||||
StringBuf readBuf;
|
||||
char *argv[2];
|
||||
char **f, **fsave;
|
||||
DepMsg_t *dm;
|
||||
char *myargv[4];
|
||||
int rc = 0;
|
||||
|
||||
if (!cpioCount) {
|
||||
if (cpioCount <= 0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (! (pkg->autoReq || pkg->autoProv)) {
|
||||
if (! (pkg->autoReq || pkg->autoProv))
|
||||
return 0;
|
||||
}
|
||||
|
||||
writeBuf = newStringBuf();
|
||||
writeBytes = 0;
|
||||
|
@ -1640,93 +1668,79 @@ static int generateAutoReqProv(Spec spec, Package pkg,
|
|||
cpioList++;
|
||||
}
|
||||
|
||||
/*** Do Provides ***/
|
||||
for (dm = depMsgs; dm->msg != NULL; dm++) {
|
||||
int i, tag, failnonzero;
|
||||
|
||||
tag = (dm->ftag > 0) ? dm->ftag : dm->ntag;
|
||||
|
||||
switch(tag) {
|
||||
case RPMTAG_PROVIDEFLAGS:
|
||||
if (!pkg->autoProv)
|
||||
continue;
|
||||
failnonzero = 1;
|
||||
break;
|
||||
case RPMTAG_REQUIREFLAGS:
|
||||
if (!pkg->autoReq)
|
||||
continue;
|
||||
failnonzero = 0;
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Get the script name to run */
|
||||
myargv[0] = rpmExpand(dm->argv[0], NULL);
|
||||
|
||||
if (!(myargv[0] && *myargv[0] != '%'))
|
||||
continue;
|
||||
|
||||
rpmMessage(RPMMESS_NORMAL, _("Finding %s: (using %s)...\n"),
|
||||
dm->msg, myargv[0]);
|
||||
|
||||
#if 0
|
||||
if (*myargv[0] != '/') { /* XXX FIXME: stat script here */
|
||||
free(myargv[0]);
|
||||
myargv[0] = NULL;
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Expand rest of script arguments (if any) */
|
||||
for (i = 1; i < 4; i++) {
|
||||
myargv[i] = dm->argv[i] ? rpmExpand(dm->argv[i], NULL) : NULL;
|
||||
}
|
||||
|
||||
readBuf = getOutputFrom(NULL, myargv,
|
||||
getStringBuf(writeBuf), writeBytes, failnonzero);
|
||||
|
||||
/* Free expanded args */
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (myargv[i] == NULL) continue;
|
||||
free(myargv[i]);
|
||||
myargv[i] = NULL;
|
||||
}
|
||||
|
||||
if (pkg->autoProv) {
|
||||
rpmMessage(RPMMESS_NORMAL, _("Finding provides...\n"));
|
||||
|
||||
argv[0] = FINDPROVIDES;
|
||||
argv[1] = NULL;
|
||||
readBuf = getOutputFrom(NULL, argv,
|
||||
getStringBuf(writeBuf), writeBytes, 1);
|
||||
if (readBuf == NULL) {
|
||||
rpmError(RPMERR_EXEC, _("Failed to find provides"));
|
||||
freeStringBuf(writeBuf);
|
||||
return RPMERR_EXEC;
|
||||
rc = RPMERR_EXEC;
|
||||
rpmError(rc, _("Failed to find %s:"), dm->msg);
|
||||
break;
|
||||
}
|
||||
|
||||
fsave = splitString(getStringBuf(readBuf),
|
||||
strlen(getStringBuf(readBuf)), '\n');
|
||||
|
||||
/* Parse dependencies into header */
|
||||
rc = parseRCPOT(spec, pkg, getStringBuf(readBuf), tag, 0);
|
||||
freeStringBuf(readBuf);
|
||||
for (f = fsave; *f != NULL; f++) {
|
||||
if (**f) {
|
||||
addReqProv(spec, pkg->header, RPMSENSE_PROVIDES, *f, NULL, 0);
|
||||
}
|
||||
|
||||
if (rc) {
|
||||
rpmError(rc, _("Failed to find %s:"), dm->msg);
|
||||
break;
|
||||
}
|
||||
freeSplitString(fsave);
|
||||
}
|
||||
|
||||
/*** Do Requires ***/
|
||||
|
||||
if (pkg->autoReq) {
|
||||
rpmMessage(RPMMESS_NORMAL, _("Finding requires...\n"));
|
||||
|
||||
argv[0] = FINDREQUIRES;
|
||||
argv[1] = NULL;
|
||||
readBuf = getOutputFrom(NULL, argv,
|
||||
getStringBuf(writeBuf), writeBytes, 0);
|
||||
if (readBuf == NULL) {
|
||||
rpmError(RPMERR_EXEC, _("Failed to find requires"));
|
||||
freeStringBuf(writeBuf);
|
||||
return RPMERR_EXEC;
|
||||
}
|
||||
|
||||
fsave = splitString(getStringBuf(readBuf),
|
||||
strlen(getStringBuf(readBuf)), '\n');
|
||||
freeStringBuf(readBuf);
|
||||
for (f = fsave; *f != NULL; f++) {
|
||||
if (**f) {
|
||||
addReqProv(spec, pkg->header, RPMSENSE_ANY, *f, NULL, 0);
|
||||
}
|
||||
}
|
||||
freeSplitString(fsave);
|
||||
}
|
||||
|
||||
/*** Clean Up ***/
|
||||
|
||||
freeStringBuf(writeBuf);
|
||||
|
||||
return 0;
|
||||
return rc;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
const char *msg;
|
||||
int ntag;
|
||||
int vtag;
|
||||
int ftag;
|
||||
int mask;
|
||||
int xor;
|
||||
} DepMsg_t;
|
||||
|
||||
DepMsg_t depMsgs[] = {
|
||||
{ "Provides",
|
||||
RPMTAG_PROVIDENAME, RPMTAG_PROVIDEVERSION, RPMTAG_PROVIDEFLAGS,
|
||||
0, -1 },
|
||||
{ "PreReq",
|
||||
RPMTAG_REQUIRENAME, RPMTAG_REQUIREVERSION, RPMTAG_REQUIREFLAGS,
|
||||
RPMSENSE_PREREQ, 0 },
|
||||
{ "Requires",
|
||||
-1, -1, -1, /* XXX inherit previous arrays */
|
||||
RPMSENSE_PREREQ, RPMSENSE_PREREQ },
|
||||
{ "Conflicts",
|
||||
RPMTAG_CONFLICTNAME, RPMTAG_CONFLICTVERSION, RPMTAG_CONFLICTFLAGS,
|
||||
0, -1 },
|
||||
{ "Obsoletes",
|
||||
RPMTAG_OBSOLETENAME, RPMTAG_OBSOLETEVERSION, RPMTAG_OBSOLETEFLAGS,
|
||||
0, -1 },
|
||||
{ NULL, 0, 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
static void printDepMsg(DepMsg_t *dm, int count, const char **names,
|
||||
const char **versions, int *flags)
|
||||
{
|
||||
|
@ -1830,7 +1844,7 @@ int processBinaryFiles(Spec spec, int installSpecialDoc, int test)
|
|||
res = rc;
|
||||
}
|
||||
|
||||
generateAutoReqProv(spec, pkg, pkg->cpioList, pkg->cpioCount);
|
||||
generateDepends(spec, pkg, pkg->cpioList, pkg->cpioCount);
|
||||
printDeps(pkg->header);
|
||||
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $Id: macros.in,v 1.31 1999/05/14 18:59:43 jbj Exp $
|
||||
# $Id: macros.in,v 1.32 1999/07/23 19:19:15 jbj Exp $
|
||||
#==============================================================================
|
||||
# Macro naming conventions (preliminary):
|
||||
#
|
||||
|
@ -63,6 +63,12 @@
|
|||
%_dbpath %{_var}/lib/rpm
|
||||
%_defaultdocdir %{_usr}/doc
|
||||
#
|
||||
%__find_provides @FINDPROVIDES@
|
||||
%__find_requires @FINDREQUIRES@
|
||||
#%__find_prereq ???
|
||||
#%__find_conflicts ???
|
||||
#%__find_obsoletes ???
|
||||
#
|
||||
# XXX fixowner, fixgroup, and fixperms are run at the end of hardcoded setup
|
||||
%_fixowner [ `%{__id} -u` = '0' ] && %{__chown} -Rf root
|
||||
%_fixgroup [ `%{__id} -u` = '0' ] && %{__chgrp} -Rf @ROOT_GROUP@
|
||||
|
|
32
po/rpm.pot
32
po/rpm.pot
|
@ -6,7 +6,7 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 1999-07-22 18:58-0400\n"
|
||||
"POT-Creation-Date: 1999-07-23 15:16-0400\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -1411,48 +1411,42 @@ msgstr ""
|
|||
msgid "line: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../build/files.c:1470 ../build/parsePrep.c:31
|
||||
#: ../build/files.c:1472 ../build/parsePrep.c:31
|
||||
#, c-format
|
||||
msgid "Bad owner/group: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../build/files.c:1523
|
||||
#: ../build/files.c:1525
|
||||
#, c-format
|
||||
msgid "Couldn't exec %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../build/files.c:1527
|
||||
#: ../build/files.c:1529
|
||||
#, c-format
|
||||
msgid "Couldn't fork %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../build/files.c:1606
|
||||
#: ../build/files.c:1608
|
||||
#, c-format
|
||||
msgid "%s failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../build/files.c:1610
|
||||
#: ../build/files.c:1612
|
||||
#, c-format
|
||||
msgid "failed to write all data to %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../build/files.c:1644
|
||||
msgid "Finding provides...\n"
|
||||
#: ../build/files.c:1698
|
||||
#, c-format
|
||||
msgid "Finding %s: (using %s)...\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../build/files.c:1651
|
||||
msgid "Failed to find provides"
|
||||
#: ../build/files.c:1726 ../build/files.c:1735
|
||||
#, c-format
|
||||
msgid "Failed to find %s:"
|
||||
msgstr ""
|
||||
|
||||
#: ../build/files.c:1670
|
||||
msgid "Finding requires...\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../build/files.c:1677
|
||||
msgid "Failed to find requires"
|
||||
msgstr ""
|
||||
|
||||
#: ../build/files.c:1825
|
||||
#: ../build/files.c:1841
|
||||
#, c-format
|
||||
msgid "Processing files: %s\n"
|
||||
msgstr ""
|
||||
|
|
Loading…
Reference in New Issue