Exemple #1
0
static void addTargets(Package Pkgs)
{
    char *platform = rpmExpand("%{_target_platform}", NULL);
    char *arch = rpmExpand("%{_target_cpu}", NULL);
    char *os = rpmExpand("%{_target_os}", NULL);
    char *optflags = rpmExpand("%{optflags}", NULL);

    for (Package pkg = Pkgs; pkg != NULL; pkg = pkg->next) {
        headerPutString(pkg->header, RPMTAG_OS, os);
        /* noarch subpackages already have arch set here, leave it alone */
        if (!headerIsEntry(pkg->header, RPMTAG_ARCH)) {
            headerPutString(pkg->header, RPMTAG_ARCH, arch);
        }
        headerPutString(pkg->header, RPMTAG_PLATFORM, platform);
        headerPutString(pkg->header, RPMTAG_OPTFLAGS, optflags);

        /* Add manual dependencies early for rpmspec etc to look at */
        addPackageProvides(pkg);
        for (int i=0; i<PACKAGE_NUM_DEPS; i++) {
            rpmdsPutToHeader(pkg->dependencies[i], pkg->header);
        }

        pkg->ds = rpmdsThis(pkg->header, RPMTAG_REQUIRENAME, RPMSENSE_EQUAL);
    }
    free(platform);
    free(arch);
    free(os);
    free(optflags);
}
Exemple #2
0
static void initSourceHeader(rpmSpec spec)
{
    Package sourcePkg = spec->sourcePackage;
    struct Source *srcPtr;

    if (headerIsEntry(sourcePkg->header, RPMTAG_NAME))
        return;

    /* Only specific tags are added to the source package header */
    headerCopyTags(spec->packages->header, sourcePkg->header, sourceTags);

    /* Add the build restrictions */
    for (int i=0; i<PACKAGE_NUM_DEPS; i++) {
        rpmdsPutToHeader(sourcePkg->dependencies[i], sourcePkg->header);
    }

    {
        HeaderIterator hi = headerInitIterator(spec->buildRestrictions);
        struct rpmtd_s td;
        while (headerNext(hi, &td)) {
            if (rpmtdCount(&td) > 0) {
                (void) headerPut(sourcePkg->header, &td, HEADERPUT_DEFAULT);
            }
            rpmtdFreeData(&td);
        }
        headerFreeIterator(hi);
    }

    if (spec->BANames && spec->BACount > 0) {
        headerPutStringArray(sourcePkg->header, RPMTAG_BUILDARCHS,
                             spec->BANames, spec->BACount);
    }

    /* Add tags for sources and patches */
    for (srcPtr = spec->sources; srcPtr != NULL; srcPtr = srcPtr->next) {
        if (srcPtr->flags & RPMBUILD_ISSOURCE) {
            headerPutString(sourcePkg->header, RPMTAG_SOURCE, srcPtr->source);
            if (srcPtr->flags & RPMBUILD_ISNO) {
                headerPutUint32(sourcePkg->header, RPMTAG_NOSOURCE,
                                &srcPtr->num, 1);
            }
        }
        if (srcPtr->flags & RPMBUILD_ISPATCH) {
            headerPutString(sourcePkg->header, RPMTAG_PATCH, srcPtr->source);
            if (srcPtr->flags & RPMBUILD_ISNO) {
                headerPutUint32(sourcePkg->header, RPMTAG_NOPATCH,
                                &srcPtr->num, 1);
            }
        }
    }
}
Exemple #3
0
static void finalizeDeps(Package pkg)
{
    /* check if the package has a dependency with a '~' */
    if (haveTildeDep(pkg))
	(void) rpmlibNeedsFeature(pkg, "TildeInVersions", "4.10.0-1");

    /* check if the package has a rich dependency */
    if (haveRichDep(pkg))
	(void) rpmlibNeedsFeature(pkg, "RichDependencies", "4.12.0-1");

    /* All dependencies added finally, write them into the header */
    for (int i = 0; i < PACKAGE_NUM_DEPS; i++) {
	/* Nuke any previously added dependencies from the header */
	headerDel(pkg->header, rpmdsTagN(pkg->dependencies[i]));
	headerDel(pkg->header, rpmdsTagEVR(pkg->dependencies[i]));
	headerDel(pkg->header, rpmdsTagF(pkg->dependencies[i]));
	headerDel(pkg->header, rpmdsTagTi(pkg->dependencies[i]));
	/* ...and add again, now with automatic dependencies included */
	rpmdsPutToHeader(pkg->dependencies[i], pkg->header);
    }
}