-diff -urN rpm-4.0.2/build/parseChangelog.c rpm-4.0.2.patched/build/parseChangelog.c
---- rpm-4.0.2/build/parseChangelog.c Tue Jan 16 00:10:04 2001
-+++ rpm-4.0.2.patched/build/parseChangelog.c Sat Sep 1 15:11:55 2001
-@@ -213,7 +213,7 @@
-
- while (! (nextPart = isPart(spec->line))) {
+--- rpm-5.0.1.noexpand/build/parseChangelog.c 2008-01-31 01:18:18.506330692 +0200
++++ rpm-5.0.1/build/parseChangelog.c 2008-01-31 01:20:45.467027848 +0200
+@@ -318,7 +318,7 @@
+ line = xstrtolocale(line);
appendStringBuf(sb, spec->line);
+ line = _free(line);
- if ((rc = readLine(spec, STRIP_COMMENTS)) > 0) {
+ if ((rc = readLine(spec, STRIP_COMMENTS | STRIP_NOEXPAND)) > 0) {
nextPart = PART_NONE;
break;
}
-diff -urN rpm-4.0.2/build/parseSpec.c rpm-4.0.2.patched/build/parseSpec.c
---- rpm-4.0.2/build/parseSpec.c Tue Jan 16 14:08:55 2001
-+++ rpm-4.0.2.patched/build/parseSpec.c Sat Sep 1 15:36:00 2001
-@@ -131,12 +131,16 @@
- ofi->readPtr = from;
+--- rpm-5.0.1.noexpand/build/parseSpec.c 2008-01-31 01:18:18.509664191 +0200
++++ rpm-5.0.1/build/parseSpec.c 2008-01-31 01:20:45.073674806 +0200
+@@ -168,7 +168,7 @@
+
+ /**
+ */
+-static int copyNextLineFromOFI(Spec spec, OFI_t * ofi)
++static int copyNextLineFromOFI(Spec spec, OFI_t * ofi, int strip)
+ /*@globals rpmGlobalMacroContext, h_errno,
+ fileSystem @*/
+ /*@modifies spec->nextline, spec->nextpeekc, spec->lbuf, spec->line,
+@@ -230,12 +230,16 @@
+ /*@=mods@*/
/* Don't expand macros (eg. %define) in false branch of %if clause */
-- if (spec->readStack->reading &&
-- expandMacros(spec, spec->macros, spec->lbuf, sizeof(spec->lbuf))) {
-- rpmError(RPMERR_BADSPEC, _("line %d: %s\n"),
-- spec->lineNum, spec->lbuf);
-- return RPMERR_BADSPEC;
-- }
+ /* Also don't expand macros in %changelog where we set STRIP_NOEXPAND flag */
+ /* (first line is ommited, so if there is e.g. %date macro, it will be expanded */
+ if (!(strip & STRIP_NOEXPAND)) {
-+ if (spec->readStack->reading &&
-+ expandMacros(spec, spec->macros, spec->lbuf, sizeof(spec->lbuf))) {
-+ rpmError(RPMERR_BADSPEC, _("line %d: %s\n"),
-+ spec->lineNum, spec->lbuf);
-+ return RPMERR_BADSPEC;
-+ }
-+ }
+ if (spec->readStack->reading &&
+ expandMacros(spec, spec->macros, spec->lbuf, spec->lbuf_len)) {
+ rpmlog(RPMLOG_ERR, _("line %d: %s\n"),
+ spec->lineNum, spec->lbuf);
+ return RPMRC_FAIL;
+ }
++ }
spec->nextline = spec->lbuf;
}
+ return 0;
+@@ -347,7 +351,7 @@
+
+ /* Copy next file line into the spec line buffer */
-@@ -241,86 +245,88 @@
+- if ((rc = copyNextLineFromOFI(spec, ofi)) != 0) {
++ if ((rc = copyNextLineFromOFI(spec, ofi, strip)) != 0) {
+ if (rc == RPMRC_FAIL)
+ goto retry;
+ return rc;
+@@ -360,6 +364,7 @@
SKIPSPACE(s);
match = -1;
-- if (! strncmp("%ifarch", s, sizeof("%ifarch")-1)) {
-- const char *arch = rpmExpand("%{_target_cpu}", NULL);
-- s += 7;
-- match = matchTok(arch, s);
-- free((void *)arch);
-- } else if (! strncmp("%ifnarch", s, sizeof("%ifnarch")-1)) {
-- const char *arch = rpmExpand("%{_target_cpu}", NULL);
-- s += 8;
-- match = !matchTok(arch, s);
-- free((void *)arch);
-- } else if (! strncmp("%ifos", s, sizeof("%ifos")-1)) {
-- const char *os = rpmExpand("%{_target_os}", NULL);
-- s += 5;
-- match = matchTok(os, s);
-- free((void *)os);
-- } else if (! strncmp("%ifnos", s, sizeof("%ifnos")-1)) {
-- const char *os = rpmExpand("%{_target_os}", NULL);
-- s += 6;
-- match = !matchTok(os, s);
-- free((void *)os);
-- } else if (! strncmp("%if", s, sizeof("%if")-1)) {
-- s += 3;
-- match = parseExpressionBoolean(spec, s);
-- if (match < 0) {
-- rpmError(RPMERR_UNMATCHEDIF,
-- _("%s:%d: parseExpressionBoolean returns %d\n"),
-- ofi->fileName, ofi->lineNum, match);
-- return RPMERR_BADSPEC;
-- }
-- } else if (! strncmp("%else", s, sizeof("%else")-1)) {
-- s += 5;
-- if (! spec->readStack->next) {
-- /* Got an else with no %if ! */
-- rpmError(RPMERR_UNMATCHEDIF,
-- _("%s:%d: Got a %%else with no %%if\n"),
-- ofi->fileName, ofi->lineNum);
-- return RPMERR_UNMATCHEDIF;
-- }
-- spec->readStack->reading =
-- spec->readStack->next->reading && ! spec->readStack->reading;
-- spec->line[0] = '\0';
-- } else if (! strncmp("%endif", s, sizeof("%endif")-1)) {
-- s += 6;
-- if (! spec->readStack->next) {
-- /* Got an end with no %if ! */
-- rpmError(RPMERR_UNMATCHEDIF,
-- _("%s:%d: Got a %%endif with no %%if\n"),
-- ofi->fileName, ofi->lineNum);
-- return RPMERR_UNMATCHEDIF;
-- }
-- rl = spec->readStack;
-- spec->readStack = spec->readStack->next;
-- free(rl);
-- spec->line[0] = '\0';
-- } else if (! strncmp("%include", s, sizeof("%include")-1)) {
-- char *fileName, *endFileName, *p;
--
-- s += 8;
-- fileName = s;
-- if (! isspace(*fileName)) {
-- rpmError(RPMERR_BADSPEC, _("malformed %%include statement\n"));
-- return RPMERR_BADSPEC;
-- }
-- SKIPSPACE(fileName);
-- endFileName = fileName;
-- SKIPNONSPACE(endFileName);
-- p = endFileName;
-- SKIPSPACE(p);
-- if (*p != '\0') {
-- rpmError(RPMERR_BADSPEC, _("malformed %%include statement\n"));
-- return RPMERR_BADSPEC;
-- }
-- *endFileName = '\0';
+ if (! (strip & STRIP_NOEXPAND)) {
-+ if (! strncmp("%ifarch", s, sizeof("%ifarch")-1)) {
-+ const char *arch = rpmExpand("%{_target_cpu}", NULL);
-+ s += 7;
-+ match = matchTok(arch, s);
-+ free((void *)arch);
-+ } else if (! strncmp("%ifnarch", s, sizeof("%ifnarch")-1)) {
-+ const char *arch = rpmExpand("%{_target_cpu}", NULL);
-+ s += 8;
-+ match = !matchTok(arch, s);
-+ free((void *)arch);
-+ } else if (! strncmp("%ifos", s, sizeof("%ifos")-1)) {
-+ const char *os = rpmExpand("%{_target_os}", NULL);
-+ s += 5;
-+ match = matchTok(os, s);
-+ free((void *)os);
-+ } else if (! strncmp("%ifnos", s, sizeof("%ifnos")-1)) {
-+ const char *os = rpmExpand("%{_target_os}", NULL);
-+ s += 6;
-+ match = !matchTok(os, s);
-+ free((void *)os);
-+ } else if (! strncmp("%if", s, sizeof("%if")-1)) {
-+ s += 3;
-+ match = parseExpressionBoolean(spec, s);
-+ if (match < 0) {
-+ rpmError(RPMERR_UNMATCHEDIF,
-+ _("%s:%d: parseExpressionBoolean returns %d\n"),
-+ ofi->fileName, ofi->lineNum, match);
-+ return RPMERR_BADSPEC;
-+ }
-+ } else if (! strncmp("%else", s, sizeof("%else")-1)) {
-+ s += 5;
-+ if (! spec->readStack->next) {
-+ /* Got an else with no %if ! */
-+ rpmError(RPMERR_UNMATCHEDIF,
-+ _("%s:%d: Got a %%else with no %%if\n"),
-+ ofi->fileName, ofi->lineNum);
-+ return RPMERR_UNMATCHEDIF;
-+ }
-+ spec->readStack->reading =
-+ spec->readStack->next->reading && ! spec->readStack->reading;
-+ spec->line[0] = '\0';
-+ } else if (! strncmp("%endif", s, sizeof("%endif")-1)) {
-+ s += 6;
-+ if (! spec->readStack->next) {
-+ /* Got an end with no %if ! */
-+ rpmError(RPMERR_UNMATCHEDIF,
-+ _("%s:%d: Got a %%endif with no %%if\n"),
-+ ofi->fileName, ofi->lineNum);
-+ return RPMERR_UNMATCHEDIF;
-+ }
-+ rl = spec->readStack;
-+ spec->readStack = spec->readStack->next;
-+ free(rl);
-+ spec->line[0] = '\0';
-+ } else if (! strncmp("%include", s, sizeof("%include")-1)) {
-+ char *fileName, *endFileName, *p;
-+
-+ s += 8;
-+ fileName = s;
-+ if (! isspace(*fileName)) {
-+ rpmError(RPMERR_BADSPEC, _("malformed %%include statement\n"));
-+ return RPMERR_BADSPEC;
-+ }
-+ SKIPSPACE(fileName);
-+ endFileName = fileName;
-+ SKIPNONSPACE(endFileName);
-+ p = endFileName;
-+ SKIPSPACE(p);
-+ if (*p != '\0') {
-+ rpmError(RPMERR_BADSPEC, _("malformed %%include statement\n"));
-+ return RPMERR_BADSPEC;
-+ }
-+ *endFileName = '\0';
-
-- forceIncludeFile(spec, fileName);
-+ forceIncludeFile(spec, fileName);
-
-- ofi = spec->fileStack;
-- goto retry;
-+ ofi = spec->fileStack;
-+ goto retry;
-+ }
+ if (!spec->readStack->reading && !strncmp("%if", s, sizeof("%if")-1)) {
+ match = 0;
+ } else if (! strncmp("%ifarch", s, sizeof("%ifarch")-1)) {
+@@ -441,6 +446,7 @@
+ ofi = spec->fileStack;
+ goto retry;
}
--
-+
++ }
+
if (match != -1) {
- rl = xmalloc(sizeof(struct ReadLevelEntry));
- rl->reading = spec->readStack->reading && match;
-diff -urN rpm-4.0.2/build/rpmbuild.h rpm-4.0.2.patched/build/rpmbuild.h
---- rpm-4.0.2/build/rpmbuild.h Thu Jan 11 15:15:15 2001
-+++ rpm-4.0.2.patched/build/rpmbuild.h Sat Sep 1 15:11:55 2001
-@@ -69,6 +69,7 @@
+ rl = xmalloc(sizeof(*rl));
+--- rpm-5.0.1.noexpand/build/rpmbuild.h 2008-01-31 01:18:18.509664191 +0200
++++ rpm-5.0.1/build/rpmbuild.h 2008-01-31 01:20:45.073674806 +0200
+@@ -83,6 +83,7 @@
#define STRIP_NOTHING 0
#define STRIP_TRAILINGSPACE (1 << 0)
#define STRIP_COMMENTS (1 << 1)
+#define STRIP_NOEXPAND (1 << 2)
- #ifdef __cplusplus
- extern "C" {
+ /*@unchecked@*/
+ extern int _rpmbuildFlags;