rpmbuild-nonroot %{version} interpreted incorrectly

Leonard den Ottolander leonard at den.ottolander.nl
Mon Jun 21 00:13:56 UTC 2004


Hi,

I wrote:

> When using Mike Harris' rpmbuild-nonroot setup (except for the no archs
> hack) I have a problem building rpm. See
> https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=124364 .
> 
> rpmbuild -bp rpm.spec fails:
> error: File /data/rpmbuild-fc1/rpm-1.8.1/rpm-4.2.1.tar.gz: No such
> file or directory
> 
> It looks like the last "Version:" (popt's) is being used in the path
> expansion for %setup.

I've come up with a patch that fixes the macros %{PACKAGE_VERSION} and
%{PACKAGE_RELEASE} so one can use

%_sourcedir	%{_topdir}/%{name}-%{PACKAGE_VERSION}

Fixing the preferred macros %{version} and %{release} via
headerAddEntry() is much more intrusive, so I'm not sure if creating
such a patch is worth the time spent (not even sure if inclusion would
be considered as the above bug is a WONTFIX).

I hope this patch is of use to those who use the non root rpm build
setup.

Inlining it here for reference, it's also attached to the above bug
report. Note the line wraps.

--- rpm-4.2.1/build/parsePreamble.c.000	2002-12-21 18:26:43.000000000
+0100
+++ rpm-4.2.1/build/parsePreamble.c	2004-06-21 00:56:37.000000000 +0200
@@ -459,7 +459,7 @@
  */
 /*@-boundswrite@*/
 static int handlePreambleTag(Spec spec, Package pkg, int tag, const
char *macro,
-			     const char *lang)
+			     const char *lang, const int initialPackage)
 	/*@globals rpmGlobalMacroContext, fileSystem, internalState @*/
 	/*@modifies spec->macros, spec->st, spec->buildRootURL,
 		spec->sources, spec->numSources, spec->noSource,
@@ -521,14 +521,16 @@
 		    spec->lineNum, "version", spec->line);
 		return RPMERR_BADSPEC;
 	    }
-	    addMacro(spec->macros, "PACKAGE_VERSION", NULL, field,
RMIL_OLDSPEC);
+	    if (initialPackage)
+		addMacro(spec->macros, "PACKAGE_VERSION", NULL, field, RMIL_OLDSPEC);
 	} else if (tag == RPMTAG_RELEASE) {
 	    if (strchr(field, '-') != NULL) {
 		rpmError(RPMERR_BADSPEC, _("line %d: Illegal char '-' in %s: %s\n"),
 		    spec->lineNum, "release", spec->line);
 		return RPMERR_BADSPEC;
 	    }
-	    addMacro(spec->macros, "PACKAGE_RELEASE", NULL, field,
RMIL_OLDSPEC-1);
+	    if (initialPackage)
+		addMacro(spec->macros, "PACKAGE_RELEASE", NULL, field,
RMIL_OLDSPEC-1);
 	}
 	(void) headerAddEntry(pkg->header, tag, RPM_STRING_TYPE, field, 1);
 	break;
@@ -906,7 +908,7 @@
 				spec->lineNum, spec->line);
 		    return RPMERR_BADSPEC;
 		}
-		if (handlePreambleTag(spec, pkg, tag, macro, lang))
+		if (handlePreambleTag(spec, pkg, tag, macro, lang, initialPackage))
 		    return RPMERR_BADSPEC;
 		if (spec->BANames && !spec->recursing)
 		    return PART_BUILDARCHITECTURES;

Leonard.

-- 
mount -t life -o ro /dev/dna /genetic/research






More information about the fedora-devel-list mailing list