csomh / source-git / rpm

Forked from source-git/rpm 4 years ago
Clone
2ff057
/** \ingroup rpmbuild
2ff057
 * \file build/reqprov.c
2ff057
 *  Add dependency tags to package header(s).
2ff057
 */
2ff057
2ff057
#include "system.h"
2ff057
2ff057
#include <rpm/header.h>
2ff057
#include <rpm/rpmstring.h>
2ff057
#include <rpm/rpmlog.h>
2ff057
#include "build/rpmbuild_internal.h"
2ff057
#include "debug.h"
2ff057
2ff057
int addReqProv(Package pkg, rpmTagVal tagN,
2ff057
		const char * N, const char * EVR, rpmsenseFlags Flags,
2ff057
		uint32_t index)
2ff057
{
2ff057
    rpmds newds, *dsp = NULL;
2ff057
2ff057
    dsp = packageDependencies(pkg, tagN);
2ff057
2ff057
    /* rpmlib() dependency sanity: only requires permitted, ensure sense bit */
2ff057
    if (rstreqn(N, "rpmlib(", sizeof("rpmlib(")-1)) {
2ff057
	if (tagN != RPMTAG_REQUIRENAME) return 1;
2ff057
	Flags |= RPMSENSE_RPMLIB;
2ff057
    }
2ff057
2ff057
    newds = rpmdsSinglePoolTix(pkg->pool, tagN, N, EVR,
2ff057
			       rpmSanitizeDSFlags(tagN, Flags), index);
2ff057
2ff057
    rpmdsMerge(dsp, newds);
2ff057
    rpmdsFree(newds);
2ff057
2ff057
    return 0;
2ff057
}
2ff057
2ff057
rpmRC addReqProvPkg(void *cbdata, rpmTagVal tagN,
2ff057
		    const char * N, const char *EVR, rpmsenseFlags Flags,
2ff057
		    int index)
2ff057
{
2ff057
    Package pkg = cbdata;
2ff057
    return addReqProv(pkg, tagN, N, EVR, Flags, index) ? RPMRC_FAIL : RPMRC_OK;
2ff057
}
2ff057
2ff057
int rpmlibNeedsFeature(Package pkg, const char * feature, const char * featureEVR)
2ff057
{
2ff057
    char *reqname = NULL;
2ff057
    int res;
2ff057
2ff057
    rasprintf(&reqname, "rpmlib(%s)", feature);
2ff057
2ff057
    res = addReqProv(pkg, RPMTAG_REQUIRENAME, reqname, featureEVR,
2ff057
		     RPMSENSE_RPMLIB|(RPMSENSE_LESS|RPMSENSE_EQUAL), 0);
2ff057
2ff057
    free(reqname);
2ff057
2ff057
    return res;
2ff057
}