} else {
fprintf(script->file, "RPM_ROOT_DIR=\"\"\n");
}
+ if (getVar(RPMVAR_BUILDPREFIX)) {
+ fprintf(script->file, "RPM_BUILD_PREFIX=\"%s\"\n",
+ getVar(RPMVAR_BUILDPREFIX));
+ } else {
+ fprintf(script->file, "RPM_BUILD_PREFIX=\"\"\n");
+ }
fprintf(script->file, "RPM_PACKAGE_NAME=\"%s\"\n", spec->name);
getEntry(main_package->header, RPMTAG_VERSION, &foo, (void **)&s, &foo);
FREE(s->noSource);
FREE(s->noPatch);
FREE(s->prefix);
+ FREE(s->buildprefix);
freeSources(s);
freeStringBuf(s->prep);
freeStringBuf(s->build);
{RPMTAG_REQUIREFLAGS, 0, "requires"},
{RPMTAG_CONFLICTFLAGS, 0, "conflicts"},
{RPMTAG_DEFAULTPREFIX, 0, "prefix"},
+ {RPMTAG_BUILDPREFIX, 0, "buildprefix"},
{0, 0, 0}
};
/* */
/**********************************************************************/
-Spec parseSpec(FILE *f, char *specfile)
+Spec parseSpec(FILE *f, char *specfile, char *prefixOverride)
{
char buf[LINE_BUF_SIZE]; /* read buffer */
char buf2[LINE_BUF_SIZE];
StringBuf sb;
char *s = NULL;
char *s1, *s2;
+ int gotBuildPrefix = 0;
+ int gotRoot = 0;
struct PackageRec *cur_package = NULL;
Spec spec = (struct SpecRec *) malloc(sizeof(struct SpecRec));
case RPMTAG_URL:
addEntry(cur_package->header, tag, STRING_TYPE, s, 1);
break;
+ case RPMTAG_BUILDPREFIX:
+ gotBuildPrefix = 1;
+ spec->buildprefix = strdup(s);
+ break;
case RPMTAG_DEFAULTPREFIX:
spec->prefix = strdup(s);
addEntry(cur_package->header, tag, STRING_TYPE, s, 1);
STRING_TYPE, getStringBuf(sb), 1);
break;
case RPMTAG_ROOT:
- /* special case */
- message(MESS_DEBUG, "Got root: %s\n", s);
- setVar(RPMVAR_ROOT, s);
- break;
+ /* special case */
+ gotRoot = 1;
+ message(MESS_DEBUG, "Got root: %s\n", s);
+ setVar(RPMVAR_ROOT, s);
+ break;
case RPMTAG_ICON:
cur_package->icon = strdup(s);
break;
return NULL;
}
+ if (gotRoot && gotBuildPrefix) {
+ freeSpec(spec);
+ error(RPMERR_BADSPEC,
+ "Spec file can not have both Root: and Buildprefix:");
+ return NULL;
+ }
+ if (spec->buildprefix) {
+ /* This package can do build prefixes */
+ if (prefixOverride) {
+ setVar(RPMVAR_ROOT, prefixOverride);
+ setVar(RPMVAR_BUILDPREFIX, prefixOverride);
+ } else {
+ if ((s = getVar(RPMVAR_BUILDPREFIX))) {
+ /* Take build prefix from rpmrc */
+ setVar(RPMVAR_ROOT, s);
+ } else {
+ /* Use default */
+ setVar(RPMVAR_ROOT, spec->buildprefix);
+ setVar(RPMVAR_BUILDPREFIX, spec->buildprefix);
+ }
+ }
+ } else {
+ /* Package can not do build prefixes */
+ if (prefixOverride) {
+ freeSpec(spec);
+ error(RPMERR_BADARG, "Package can not do build prefixes");
+ return NULL;
+ }
+ }
+
generateNamesAndDocScript(spec);
return spec;
}