123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367 |
- ##
- ## rpm-4.0.2.patch.feature -- Annotated patch file
- ## Copyright (c) 2000-2001 Cable & Wireless Deutschland GmbH
- ## Copyright (c) 2000-2001 Ralf S. Engelschall <rse.com>
- ##
- ## This file assembles changes to existing RPM source files between
- ## the original RedHat RPM and the OpenPKG RPM variant. It can be
- ## automatically applied to a vanilla RedHat RPM source tree with the
- ## 'patch' tool to upgrade those files. Each patch snippet is annotated
- ## with a short description.
- ##
- ## Created on: 23-Sep-2001
- ##
- +---------------------------------------------------------------------------
- | In OpenPKG, the RPM package contains own local versions of the
- | "patch" and "tar" tools, so we cannot accept hard-coded names here.
- | Instead we expand a variable to allow us to direct RPM to our tools.
- | Also we allow %setup and %patch macros whitespace-indented in %prep,
- | because both in OpenPKG we both have all scripts indented and this
- | way it is more flexible and clean.
- | Additionally add support for splitted source directories, i.e.,
- | source files alternatively can be placed into the spec directory and
- | are picked up there, too.
- +---------------------------------------------------------------------------
- Index: build/parsePrep.c
- --- build/parsePrep.c 2001/01/15 23:10:04 1.1.1.7
- +++ build/parsePrep.c 2001/09/21 12:24:12 1.4
- @@ -65,6 +65,7 @@
- struct Source *sp;
- rpmCompressedMagic compressed = COMPRESSED_NOT;
- int urltype;
- + const char *patcher;
-
- for (sp = spec->sources; sp != NULL; sp = sp->next) {
- if ((sp->flags & RPMBUILD_ISPATCH) && (sp->num == c)) {
- @@ -76,7 +77,15 @@
- return NULL;
- }
-
- +#ifndef OPENPKG
- fn = urlfn = rpmGetPath("%{_sourcedir}/", sp->source, NULL);
- +#else
- + fn = urlfn = rpmGetPath("%{_specdir}/", sp->source, NULL);
- + if (access(fn, F_OK) == -1) {
- + free(fn);
- + fn = urlfn = rpmGetPath("%{_sourcedir}/", sp->source, NULL);
- + }
- +#endif
-
- args[0] = '\0';
- if (db) {
- @@ -112,6 +121,9 @@
- /*@notreached@*/ break;
- }
-
- + patcher = rpmGetPath("%{_patchbin}", NULL);
- + if (strcmp(patcher, "%{_patchbin}") == 0)
- + patcher = "patch";
- if (compressed) {
- const char *zipper = rpmGetPath(
- (compressed == COMPRESSED_BZIP2 ? "%{_bzip2bin}" : "%{_gzipbin}"),
- @@ -119,20 +131,20 @@
-
- sprintf(buf,
- "echo \"Patch #%d (%s):\"\n"
- - "%s -d < %s | patch -p%d %s -s\n"
- + "%s -d < %s | %s -p%d %s -s\n"
- "STATUS=$?\n"
- "if [ $STATUS -ne 0 ]; then\n"
- " exit $STATUS\n"
- "fi",
- c, (const char *) basename(fn),
- zipper,
- - fn, strip, args);
- + fn, patcher, strip, args);
- free((void *)zipper);
- } else {
- sprintf(buf,
- "echo \"Patch #%d (%s):\"\n"
- - "patch -p%d %s -s < %s", c, (const char *) basename(fn),
- - strip, args, fn);
- + "%s -p%d %s -s < %s", c, (const char *) basename(fn),
- + patcher, strip, args, fn);
- }
-
- free((void *)urlfn);
- @@ -155,6 +167,7 @@
- struct Source *sp;
- rpmCompressedMagic compressed = COMPRESSED_NOT;
- int urltype;
- + const char *tar;
-
- for (sp = spec->sources; sp != NULL; sp = sp->next) {
- if ((sp->flags & RPMBUILD_ISSOURCE) && (sp->num == c)) {
- @@ -166,7 +179,19 @@
- return NULL;
- }
-
- +#ifndef OPENPKG
- fn = urlfn = rpmGetPath("%{_sourcedir}/", sp->source, NULL);
- +#else
- + fn = urlfn = rpmGetPath("%{_specdir}/", sp->source, NULL);
- + if (access(fn, F_OK) == -1) {
- + free(fn);
- + fn = urlfn = rpmGetPath("%{_sourcedir}/", sp->source, NULL);
- + }
- +#endif
- +
- + tar = rpmGetPath("%{_tarbin}", NULL);
- + if (strcmp(tar, "%{_tarbin}") == 0)
- + tar = "tar";
-
- taropts = ((rpmIsVerbose() && !quietly) ? "-xvvf" : "-xf");
-
- @@ -232,8 +257,13 @@
- free((void *)zipper);
- *t++ = ' ';
- t = stpcpy(t, fn);
- - if (needtar)
- - t = stpcpy( stpcpy( stpcpy(t, " | tar "), taropts), " -");
- + if (needtar) {
- + t = stpcpy(t, " | ");
- + t = stpcpy(t, tar);
- + t = stpcpy(t, " ");
- + t = stpcpy(t, taropts);
- + t = stpcpy(t, " -");
- + }
- t = stpcpy(t,
- "\n"
- "STATUS=$?\n"
- @@ -242,7 +272,7 @@
- "fi");
- } else {
- buf[0] = '\0';
- - t = stpcpy( stpcpy(buf, "tar "), taropts);
- + t = stpcpy( stpcpy(stpcpy(buf, tar), " "), taropts);
- *t++ = ' ';
- t = stpcpy(t, fn);
- }
- @@ -549,11 +579,14 @@
-
- saveLines = splitString(getStringBuf(buf), strlen(getStringBuf(buf)), '\n');
- for (lines = saveLines; *lines; lines++) {
- + char *cp;
- + for (cp = *lines; *cp == ' ' || *cp == '\t'; cp++)
- + ;
- res = 0;
- - if (! strncmp(*lines, "%setup", sizeof("%setup")-1)) {
- - res = doSetupMacro(spec, *lines);
- - } else if (! strncmp(*lines, "%patch", sizeof("%patch")-1)) {
- - res = doPatchMacro(spec, *lines);
- + if (! strncmp(cp, "%setup", sizeof("%setup")-1)) {
- + res = doSetupMacro(spec, cp);
- + } else if (! strncmp(cp, "%patch", sizeof("%patch")-1)) {
- + res = doPatchMacro(spec, cp);
- } else {
- appendLineStringBuf(spec->prep, *lines);
- }
- +---------------------------------------------------------------------------
- | Not everything on a system is RPM based (for instance OpenPKG is
- | just an add-on to the system), so do not assume we can just require
- | a package to provide "/bin/sh".
- +---------------------------------------------------------------------------
- Index: build/parseScript.c
- --- build/parseScript.c 2001/01/15 23:10:04 1.1.1.9
- +++ build/parseScript.c 2001/06/25 19:31:13 1.2
- @@ -246,6 +246,7 @@
- stripTrailingBlanksStringBuf(sb);
- p = getStringBuf(sb);
-
- + if (progArgv[0] != NULL && strcmp(progArgv[0], "/bin/sh") != 0)
- addReqProv(spec, pkg->header, (tagflags | RPMSENSE_INTERP), progArgv[0], NULL, 0);
-
- /* Trigger script insertion is always delayed in order to */
- +---------------------------------------------------------------------------
- | RPM has two platform id canonicalizations: hard-coded ones in the
- | "rpm" program and defined ones in the rpmrc files. The hard-coded
- | ones make the defined ones inconsistent. Additionally in OpenPKG we
- | know exactly what we do. So disable the hard-coded canonicalizations
- | and use only the defined ones. The only thing we do inside "rpm" is
- | to reduce the platform version to major and minor version numbers in
- | order to simplify the "rpmrc" files.
- +---------------------------------------------------------------------------
- Index: lib/rpmrc.c
- --- lib/rpmrc.c 2001/03/13 12:55:25 1.1.1.20
- +++ lib/rpmrc.c 2001/09/23 08:15:32 1.3
- @@ -931,6 +931,26 @@
- if (!gotDefaults) {
- uname(&un);
-
- +#ifdef OPENPKG
- + {
- + char *cp;
- + char *cpR;
- + int n;
- + cpR = un.release;
- + if ((n = strcspn(cpR, "0123456789")) > 0)
- + cpR += n;
- + if ((n = strspn(cpR, "0123456789.")) > 0) {
- + /* terminate after "N.N.N...." prefix */
- + cpR[n] = '\0';
- + /* shorten to "N.N" if longer */
- + if ((cp = strchr(cpR, '.')) != NULL) {
- + if ((cp = strchr(cp+1, '.')) != NULL)
- + *cp = '\0';
- + }
- + strcat(un.sysname, cpR);
- + }
- + }
- +#else /* OPENPKG */
- #if !defined(__linux__)
- #ifdef SNI
- /* USUALLY un.sysname on sinix does start with the word "SINIX"
- @@ -1114,6 +1134,7 @@
- un.machine[1] = class;
- }
- # endif
- +#endif /* OPENPKG */
-
- /* the uname() result goes through the arch_canon table */
- canon = lookupInCanonTable(un.machine,
- +---------------------------------------------------------------------------
- | Add support for splitted source directories, i.e., source files
- | alternatively can be placed into the spec directory and are picked
- | up there, too.
- +---------------------------------------------------------------------------
- Index: build/build.c
- --- build/build.c 2001/01/15 23:10:04 1.1.1.16
- +++ build/build.c 2001/09/17 11:09:23 1.2
- @@ -25,7 +25,15 @@
-
- for (p = spec->sources; p != NULL; p = p->next) {
- if (! (p->flags & RPMBUILD_ISNO)) {
- +#ifndef OPENPKG
- const char *fn = rpmGetPath("%{_sourcedir}/", p->source, NULL);
- +#else
- + const char *fn = rpmGetPath("%{_specdir}/", p->source, NULL);
- + if (access(fn, F_OK) == -1) {
- + free(fn);
- + fn = rpmGetPath("%{_sourcedir}/", p->source, NULL);
- + }
- +#endif
- unlink(fn);
- free((void *)fn);
- }
- @@ -34,7 +42,15 @@
- for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
- for (p = pkg->icon; p != NULL; p = p->next) {
- if (! (p->flags & RPMBUILD_ISNO)) {
- +#ifndef OPENPKG
- const char *fn = rpmGetPath("%{_sourcedir}/", p->source, NULL);
- +#else
- + const char *fn = rpmGetPath("%{_specdir}/", p->source, NULL);
- + if (access(fn, F_OK) == -1) {
- + free(fn);
- + fn = rpmGetPath("%{_sourcedir}/", p->source, NULL);
- + }
- +#endif
- unlink(fn);
- free((void *)fn);
- }
- +---------------------------------------------------------------------------
- | Add support for splitted source directories, i.e., source files
- | alternatively can be placed into the spec directory and are picked
- | up there, too.
- +---------------------------------------------------------------------------
- Index: build/files.c
- --- build/files.c 2001/01/19 01:47:25 1.1.1.15
- +++ build/files.c 2001/09/17 11:09:23 1.2
- @@ -1655,8 +1655,20 @@
- }
-
- { const char *s;
- +#ifndef OPENPKG
- s = rpmGetPath( ((srcPtr->flags & RPMBUILD_ISNO) ? "!" : ""),
- "%{_sourcedir}/", srcPtr->source, NULL);
- +#else
- + const char *s2;
- + s2 = rpmGetPath("%{_specdir}/", srcPtr->source, NULL);
- + if (access(s2, F_OK) == 0)
- + s = rpmGetPath( ((srcPtr->flags & RPMBUILD_ISNO) ? "!" : ""),
- + "%{_specdir}/", srcPtr->source, NULL);
- + else
- + s = rpmGetPath( ((srcPtr->flags & RPMBUILD_ISNO) ? "!" : ""),
- + "%{_sourcedir}/", srcPtr->source, NULL);
- + free(s2);
- +#endif
- appendLineStringBuf(sourceFiles, s);
- free((void *)s);
- }
- @@ -1665,8 +1677,20 @@
- for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
- for (srcPtr = pkg->icon; srcPtr != NULL; srcPtr = srcPtr->next) {
- const char *s;
- +#ifndef OPENPKG
- s = rpmGetPath( ((srcPtr->flags & RPMBUILD_ISNO) ? "!" : ""),
- "%{_sourcedir}/", srcPtr->source, NULL);
- +#else
- + const char *s2;
- + s2 = rpmGetPath("%{_specdir}/", srcPtr->source, NULL);
- + if (access(s2, F_OK) == 0)
- + s = rpmGetPath( ((srcPtr->flags & RPMBUILD_ISNO) ? "!" : ""),
- + "%{_specdir}/", srcPtr->source, NULL);
- + else
- + s = rpmGetPath( ((srcPtr->flags & RPMBUILD_ISNO) ? "!" : ""),
- + "%{_sourcedir}/", srcPtr->source, NULL);
- + free(s2);
- +#endif
- appendLineStringBuf(sourceFiles, s);
- free((void *)s);
- }
- +---------------------------------------------------------------------------
- | Add support for splitted source directories, i.e., source files
- | alternatively can be placed into the spec directory and are picked
- | up there, too.
- +---------------------------------------------------------------------------
- Index: build/parsePreamble.c
- --- build/parsePreamble.c 2001/01/15 23:10:04 1.1.1.9
- +++ build/parsePreamble.c 2001/09/17 11:09:23 1.2
- @@ -317,7 +317,15 @@
- size_t nb, iconsize;
-
- /* XXX use rpmGenPath(rootdir, "%{_sourcedir}/", file) for icon path. */
- +#ifndef OPENPKG
- fn = rpmGetPath("%{_sourcedir}/", file, NULL);
- +#else
- + fn = rpmGetPath("%{_specdir}/", file, NULL);
- + if (access(fn, F_OK) == -1) {
- + free(fn);
- + fn = rpmGetPath("%{_sourcedir}/", file, NULL);
- + }
- +#endif
-
- fd = Fopen(fn, "r.ufdio");
- if (fd == NULL || Ferror(fd)) {
- +---------------------------------------------------------------------------
- | Add support for splitted source directories, i.e., source files
- | alternatively can be placed into the spec directory and are picked
- | up there, too.
- +---------------------------------------------------------------------------
- Index: build/spec.c
- --- build/spec.c 2001/01/15 23:10:04 1.1.1.16
- +++ build/spec.c 2001/09/17 11:09:23 1.2
- @@ -319,7 +319,15 @@
- spec->numSources++;
-
- if (tag != RPMTAG_ICON) {
- +#ifndef OPENPKG
- const char *body = rpmGetPath("%{_sourcedir}/", p->source, NULL);
- +#else
- + const char *body = rpmGetPath("%{_specdir}/", p->source, NULL);
- + if (access(body, F_OK) == -1) {
- + free(body);
- + body = rpmGetPath("%{_sourcedir}/", p->source, NULL);
- + }
- +#endif
-
- sprintf(buf, "%s%d",
- (flag & RPMBUILD_ISPATCH) ? "PATCH" : "SOURCE", num);
|