## ## rpm.patch.feature -- Annotated OpenPKG RPM Patch file ## Copyright (c) 2000-2006 OpenPKG Foundation e.V. ## Copyright (c) 2000-2006 Ralf S. Engelschall ## ## 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: 13-Sep-2006 ## ## ATTENTION: THIS PATCH FILE WAS AUTO-GENERATED FROM AN OPENPKG ## RPM CVS REPOSITORY, HENCE DO NOT EDIT THIS FILE. ## +--------------------------------------------------------------------------- | Remove "tools" directory from sub-directory list because it contains | things we are not interested in and which cause some build trouble | anyway. | Use a plain "rpmpopt" file without any trailing version. | Adjust paths to conform to OpenPKG filesystem layout. | Do not run the "installplatform" script, because not needed for OpenPKG. +--------------------------------------------------------------------------- Index: Makefile.am --- Makefile.am 29 May 2003 18:20:28 -0000 1.1.1.17 +++ Makefile.am 22 Jan 2004 21:42:02 -0000 1.2 @@ -12,9 +12,9 @@ xmlspec/examples/*.sh xmlspec/examples/*.lst \ xmlspec/examples/*.xmlspec \ po/*.in po/*.po po/rpm.pot \ - rpm.magic rpmpopt-$(VERSION) rpmqv.c rpm.c + rpm.magic rpmpopt rpmqv.c rpm.c -SUBDIRS = intl po @WITH_ZLIB_SUBDIR@ @WITH_ELFUTILS_SUBDIR@ file @WITH_DB_SUBDIR@ popt @WITH_BEECRYPT_SUBDIR@ rpmio rpmdb lib build misc @WITH_PYTHON_SUBDIR@ tools scripts tests doc . +SUBDIRS = intl @WITH_ZLIB_SUBDIR@ @WITH_ELFUTILS_SUBDIR@ file @WITH_DB_SUBDIR@ popt @WITH_BEECRYPT_SUBDIR@ rpmio rpmdb lib build misc @WITH_PYTHON_SUBDIR@ scripts tests doc . INCLUDES = \ -I$(top_srcdir)/build \ @@ -47,13 +47,10 @@ pkglibdir = @RPMCONFIGDIR@ pkglib_PROGRAMS = rpmb rpmd rpmi rpmk rpmq -pkglib_DATA = rpmrc rpmpopt-$(VERSION) macros +pkglib_DATA = rpmrc rpmpopt macros pkglib_SCRIPTS = find-provides find-requires mkinstalldirs \ config.guess config.sub config.site -rpmpopt-$(VERSION): rpmpopt - cp rpmpopt $@ - noinst_HEADERS = build.h debug.h system.h rpm_SOURCES = @@ -124,32 +121,32 @@ pkgsrcdir = $(prefix)/src/$(RPMCANONVENDOR) install-data-local: - @$(mkinstalldirs) $(DESTDIR)$(varprefix)/lib/rpm + @$(mkinstalldirs) $(DESTDIR)$(varprefix)/lib/openpkg @rm -f $(DESTDIR)$(libdir)/rpmrc @@LN_S@ rpm/rpmrc $(DESTDIR)$(libdir)/rpmrc @rm -f $(DESTDIR)$(libdir)/rpmpopt @@LN_S@ rpm/rpmpopt $(DESTDIR)$(libdir)/rpmpopt @rm -f $(DESTDIR)$(libdir)/rpm/rpmt - @@LN_S@ rpmb $(DESTDIR)$(libdir)/rpm/rpmt - @rm -f $(DESTDIR)$(libdir)/rpm/rpme - @@LN_S@ rpmi $(DESTDIR)$(libdir)/rpm/rpme - @rm -f $(DESTDIR)$(libdir)/rpm/rpmu - @@LN_S@ rpmi $(DESTDIR)$(libdir)/rpm/rpmu - @rm -f $(DESTDIR)$(libdir)/rpm/rpmv - @@LN_S@ rpmq $(DESTDIR)$(libdir)/rpm/rpmv + @@LN_S@ rpmb $(DESTDIR)$(libdir)/openpkg/rpmt + @rm -f $(DESTDIR)$(libdir)/openpkg/rpme + @@LN_S@ rpmi $(DESTDIR)$(libdir)/openpkg/rpme + @rm -f $(DESTDIR)$(libdir)/openpkg/rpmu + @@LN_S@ rpmi $(DESTDIR)$(libdir)/openpkg/rpmu + @rm -f $(DESTDIR)$(libdir)/openpkg/rpmv + @@LN_S@ rpmq $(DESTDIR)$(libdir)/openpkg/rpmv rm -f $(DESTDIR)$(bindir)/rpmbuild - @LN_S@ ../lib/rpm/rpmb $(DESTDIR)$(bindir)/rpmbuild + @LN_S@ ../lib/openpkg/rpmb $(DESTDIR)$(bindir)/rpmbuild rm -f $(DESTDIR)$(bindir)/rpmquery - @LN_S@ ../lib/rpm/rpmq $(DESTDIR)$(bindir)/rpmquery + @LN_S@ ../lib/openpkg/rpmq $(DESTDIR)$(bindir)/rpmquery rm -f $(DESTDIR)$(bindir)/rpmverify - @LN_S@ ../lib/rpm/rpmv $(DESTDIR)$(bindir)/rpmverify + @LN_S@ ../lib/openpkg/rpmv $(DESTDIR)$(bindir)/rpmverify rm -f $(DESTDIR)$(bindir)/rpmsign - @LN_S@ ../lib/rpm/rpmk $(DESTDIR)$(bindir)/rpmsign + @LN_S@ ../lib/openpkg/rpmk $(DESTDIR)$(bindir)/rpmsign rm -f $(DESTDIR)$(bindir)/rpmdb ; \ - @LN_S@ ../lib/rpm/rpmd $(DESTDIR)$(bindir)/rpmdb ; \ + @LN_S@ ../lib/openpkg/rpmd $(DESTDIR)$(bindir)/rpmdb ; \ for bf in e i u ; do \ rm -f $(DESTDIR)$(bindir)/rpm$$bf ; \ - @LN_S@ ../lib/rpm/rpm$$bf $(DESTDIR)$(bindir)/rpm$$bf ; \ + @LN_S@ ../lib/openpkg/rpm$$bf $(DESTDIR)$(bindir)/rpm$$bf ; \ done @for dir in BUILD RPMS SOURCES SPECS SRPMS ; do\ $(mkinstalldirs) $(DESTDIR)$(pkgsrcdir)/$$dir;\ @@ -174,11 +171,6 @@ *) $(mkinstalldirs) $(DESTDIR)$(pkgsrcdir)/RPMS/@host_cpu@ ;;\ esac $(mkinstalldirs) $(DESTDIR)$(pkgsrcdir)/RPMS/noarch - @case "@host_os@" in \ - mint) $(mkinstalldirs) $(DESTDIR)$(pkgsrcdir)/RPMS/m68kmint ;;\ - solaris*|linux*) \ - chmod u+x ./installplatform; DESTDIR="$(DESTDIR)" pkglibdir="$(pkglibdir)" ./installplatform rpmrc macros platform ;; \ - esac @$(mkinstalldirs) $(DESTDIR)/var/tmp .PHONY: setperms @@ -198,10 +190,10 @@ $(__CHOWN) ${RPMUSER}.${RPMGROUP} $(DESTDIR)$(pkglibdir)/$$f ;\ done @$(__CHOWN) ${RPMUSER}.${RPMGROUP} $(DESTDIR)$(pkglibdir) - @$(__CHOWN) -R ${RPMUSER}.${RPMGROUP} $(DESTDIR)$(varprefix)/lib/rpm - -@$(__CHMOD) 0664 $(DESTDIR)$(varprefix)/lib/rpm/[A-Z]* - -@$(__CHMOD) 0775 $(DESTDIR)$(varprefix)/lib/rpm - -@$(__CHMOD) 0664 $(DESTDIR)$(varprefix)/lib/rpm/__db.* + @$(__CHOWN) -R ${RPMUSER}.${RPMGROUP} $(DESTDIR)$(varprefix)/lib/openpkg + -@$(__CHMOD) 0664 $(DESTDIR)$(varprefix)/lib/openpkg/[A-Z]* + -@$(__CHMOD) 0775 $(DESTDIR)$(varprefix)/lib/openpkg + -@$(__CHMOD) 0664 $(DESTDIR)$(varprefix)/lib/openpkg/__db.* .PHONY: unsetgid unsetgid: @@ -244,7 +236,7 @@ @sudo ./rpm -ta rpm-$(VERSION).tar.gz .PHONY: doxygen -doxygen @WITH_APIDOCS_TARGET@: Doxyfile rpmpopt-@VERSION@ +doxygen @WITH_APIDOCS_TARGET@: Doxyfile rpmpopt rm -rf $@ mkdir -p $@ - [ X"@__DOXYGEN@" != Xno ] && @__DOXYGEN@ +--------------------------------------------------------------------------- | Remove "tools" directory from sub-directory list because it contains | things we are not interested in and which cause some build trouble | anyway. | Use a plain "rpmpopt" file without any trailing version. | Adjust paths to conform to OpenPKG filesystem layout. | Do not run the "installplatform" script, because not needed for OpenPKG. +--------------------------------------------------------------------------- Index: Makefile.in --- Makefile.in 16 Jul 2003 17:05:42 -0000 1.1.1.23 +++ Makefile.in 22 Jan 2004 21:42:03 -0000 1.2 @@ -265,10 +265,10 @@ xmlspec/examples/*.sh xmlspec/examples/*.lst \ xmlspec/examples/*.xmlspec \ po/*.in po/*.po po/rpm.pot \ - rpm.magic rpmpopt-$(VERSION) rpmqv.c rpm.c + rpm.magic rpmpopt rpmqv.c rpm.c -SUBDIRS = intl po @WITH_ZLIB_SUBDIR@ @WITH_ELFUTILS_SUBDIR@ file @WITH_DB_SUBDIR@ popt @WITH_BEECRYPT_SUBDIR@ rpmio rpmdb lib build misc @WITH_PYTHON_SUBDIR@ tools scripts tests doc . +SUBDIRS = intl @WITH_ZLIB_SUBDIR@ @WITH_ELFUTILS_SUBDIR@ file @WITH_DB_SUBDIR@ popt @WITH_BEECRYPT_SUBDIR@ rpmio rpmdb lib build misc @WITH_PYTHON_SUBDIR@ scripts tests doc . INCLUDES = \ -I$(top_srcdir)/build \ @@ -301,7 +301,7 @@ bin_PROGRAMS = rpm2cpio bin_SCRIPTS = gendiff pkglib_PROGRAMS = rpmb rpmd rpmi rpmk rpmq -pkglib_DATA = rpmrc rpmpopt-$(VERSION) macros +pkglib_DATA = rpmrc rpmpopt macros pkglib_SCRIPTS = find-provides find-requires mkinstalldirs \ config.guess config.sub config.site @@ -1058,8 +1058,6 @@ uninstall-rpmbinPROGRAMS -rpmpopt-$(VERSION): rpmpopt - cp rpmpopt $@ rpm.o: rpmqv.c $(COMPILE) -DIAM_RPMDB -DIAM_RPMEIU -DIAM_RPMK -DIAM_RPMQV -o $@ -c rpmqv.c rpmb.o: rpmqv.c @@ -1097,32 +1095,32 @@ `make -s sources -C popt` install-data-local: - @$(mkinstalldirs) $(DESTDIR)$(varprefix)/lib/rpm + @$(mkinstalldirs) $(DESTDIR)$(varprefix)/lib/openpkg @rm -f $(DESTDIR)$(libdir)/rpmrc @@LN_S@ rpm/rpmrc $(DESTDIR)$(libdir)/rpmrc @rm -f $(DESTDIR)$(libdir)/rpmpopt @@LN_S@ rpm/rpmpopt $(DESTDIR)$(libdir)/rpmpopt - @rm -f $(DESTDIR)$(libdir)/rpm/rpmt - @@LN_S@ rpmb $(DESTDIR)$(libdir)/rpm/rpmt - @rm -f $(DESTDIR)$(libdir)/rpm/rpme - @@LN_S@ rpmi $(DESTDIR)$(libdir)/rpm/rpme - @rm -f $(DESTDIR)$(libdir)/rpm/rpmu - @@LN_S@ rpmi $(DESTDIR)$(libdir)/rpm/rpmu - @rm -f $(DESTDIR)$(libdir)/rpm/rpmv - @@LN_S@ rpmq $(DESTDIR)$(libdir)/rpm/rpmv + @rm -f $(DESTDIR)$(libdir)/openpkg/rpmt + @@LN_S@ rpmb $(DESTDIR)$(libdir)/openpkg/rpmt + @rm -f $(DESTDIR)$(libdir)/openpkg/rpme + @@LN_S@ rpmi $(DESTDIR)$(libdir)/openpkg/rpme + @rm -f $(DESTDIR)$(libdir)/openpkg/rpmu + @@LN_S@ rpmi $(DESTDIR)$(libdir)/openpkg/rpmu + @rm -f $(DESTDIR)$(libdir)/openpkg/rpmv + @@LN_S@ rpmq $(DESTDIR)$(libdir)/openpkg/rpmv rm -f $(DESTDIR)$(bindir)/rpmbuild - @LN_S@ ../lib/rpm/rpmb $(DESTDIR)$(bindir)/rpmbuild + @LN_S@ ../lib/openpkg/rpmb $(DESTDIR)$(bindir)/rpmbuild rm -f $(DESTDIR)$(bindir)/rpmquery - @LN_S@ ../lib/rpm/rpmq $(DESTDIR)$(bindir)/rpmquery + @LN_S@ ../lib/openpkg/rpmq $(DESTDIR)$(bindir)/rpmquery rm -f $(DESTDIR)$(bindir)/rpmverify - @LN_S@ ../lib/rpm/rpmv $(DESTDIR)$(bindir)/rpmverify + @LN_S@ ../lib/openpkg/rpmv $(DESTDIR)$(bindir)/rpmverify rm -f $(DESTDIR)$(bindir)/rpmsign - @LN_S@ ../lib/rpm/rpmk $(DESTDIR)$(bindir)/rpmsign + @LN_S@ ../lib/openpkg/rpmk $(DESTDIR)$(bindir)/rpmsign rm -f $(DESTDIR)$(bindir)/rpmdb ; \ - @LN_S@ ../lib/rpm/rpmd $(DESTDIR)$(bindir)/rpmdb ; \ + @LN_S@ ../lib/openpkg/rpmd $(DESTDIR)$(bindir)/rpmdb ; \ for bf in e i u ; do \ rm -f $(DESTDIR)$(bindir)/rpm$$bf ; \ - @LN_S@ ../lib/rpm/rpm$$bf $(DESTDIR)$(bindir)/rpm$$bf ; \ + @LN_S@ ../lib/openpkg/rpm$$bf $(DESTDIR)$(bindir)/rpm$$bf ; \ done @for dir in BUILD RPMS SOURCES SPECS SRPMS ; do\ $(mkinstalldirs) $(DESTDIR)$(pkgsrcdir)/$$dir;\ @@ -1147,11 +1145,6 @@ *) $(mkinstalldirs) $(DESTDIR)$(pkgsrcdir)/RPMS/@host_cpu@ ;;\ esac $(mkinstalldirs) $(DESTDIR)$(pkgsrcdir)/RPMS/noarch - @case "@host_os@" in \ - mint) $(mkinstalldirs) $(DESTDIR)$(pkgsrcdir)/RPMS/m68kmint ;;\ - solaris*|linux*) \ - chmod u+x ./installplatform; DESTDIR="$(DESTDIR)" pkglibdir="$(pkglibdir)" ./installplatform rpmrc macros platform ;; \ - esac @$(mkinstalldirs) $(DESTDIR)/var/tmp .PHONY: setperms @@ -1171,10 +1164,10 @@ $(__CHOWN) ${RPMUSER}.${RPMGROUP} $(DESTDIR)$(pkglibdir)/$$f ;\ done @$(__CHOWN) ${RPMUSER}.${RPMGROUP} $(DESTDIR)$(pkglibdir) - @$(__CHOWN) -R ${RPMUSER}.${RPMGROUP} $(DESTDIR)$(varprefix)/lib/rpm - -@$(__CHMOD) 0664 $(DESTDIR)$(varprefix)/lib/rpm/[A-Z]* - -@$(__CHMOD) 0775 $(DESTDIR)$(varprefix)/lib/rpm - -@$(__CHMOD) 0664 $(DESTDIR)$(varprefix)/lib/rpm/__db.* + @$(__CHOWN) -R ${RPMUSER}.${RPMGROUP} $(DESTDIR)$(varprefix)/lib/openpkg + -@$(__CHMOD) 0664 $(DESTDIR)$(varprefix)/lib/openpkg/[A-Z]* + -@$(__CHMOD) 0775 $(DESTDIR)$(varprefix)/lib/openpkg + -@$(__CHMOD) 0664 $(DESTDIR)$(varprefix)/lib/openpkg/__db.* .PHONY: unsetgid unsetgid: @@ -1217,7 +1210,7 @@ @sudo ./rpm -ta rpm-$(VERSION).tar.gz .PHONY: doxygen -doxygen @WITH_APIDOCS_TARGET@: Doxyfile rpmpopt-@VERSION@ +doxygen @WITH_APIDOCS_TARGET@: Doxyfile rpmpopt rm -rf $@ mkdir -p $@ - [ X"@__DOXYGEN@" != Xno ] && @__DOXYGEN@ +--------------------------------------------------------------------------- | 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 4 Mar 2003 15:27:33 -0000 1.1.1.20 +++ build/build.c 6 Feb 2004 15:37:57 -0000 1.4 @@ -33,7 +33,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) { + fn = _free(fn); + fn = rpmGetPath("%{_sourcedir}/", p->source, NULL); + } +#endif rc = Unlink(fn); fn = _free(fn); } @@ -42,7 +50,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) { + fn = _free(fn); + fn = rpmGetPath("%{_sourcedir}/", p->source, NULL); + } +#endif rc = Unlink(fn); fn = _free(fn); } +--------------------------------------------------------------------------- | Add support for the OpenPKG custom .spec file sections %track | (package build-time feature for performing vendor source tracking) | and %test (package install-time feature for performing package | run-time tests). +--------------------------------------------------------------------------- Index: build/build.c --- build/build.c 4 Mar 2003 15:27:33 -0000 1.1.1.20 +++ build/build.c 6 Feb 2004 15:37:57 -0000 1.4 @@ -113,6 +129,14 @@ mTemplate = "%{__spec_clean_template}"; mPost = "%{__spec_clean_post}"; break; +#ifdef OPENPKG + case RPMBUILD_TRACK: + name = "%track"; + sb = spec->track; + mTemplate = "%{__spec_track_template}"; + mPost = "%{__spec_track_post}"; + break; +#endif case RPMBUILD_STRINGBUF: default: mTemplate = "%{___build_template}"; @@ -169,7 +193,11 @@ (void) fputs(buildTemplate, fp); +#ifdef OPENPKG + if (what != RPMBUILD_PREP && what != RPMBUILD_RMBUILD && spec->buildSubdir && what != RPMBUILD_TRACK) +#else if (what != RPMBUILD_PREP && what != RPMBUILD_RMBUILD && spec->buildSubdir) +#endif fprintf(fp, "cd %s\n", spec->buildSubdir); if (what == RPMBUILD_RMBUILD) { @@ -215,6 +243,9 @@ buildCmd = rpmExpand("%{___build_cmd}", " ", buildScript, NULL); (void) poptParseArgvString(buildCmd, &argc, &argv); +#ifdef OPENPKG + if (what != RPMBUILD_TRACK) +#endif rpmMessage(RPMMESS_NORMAL, _("Executing(%s): %s\n"), name, buildCmd); if (!(child = fork())) { @@ -290,6 +323,12 @@ /*@=boundsread@*/ } } else { +#ifdef OPENPKG + if ((what & RPMBUILD_TRACK) && + (rc = doScript(spec, RPMBUILD_TRACK, NULL, NULL, test))) + goto exit; +#endif + if ((what & RPMBUILD_PREP) && (rc = doScript(spec, RPMBUILD_PREP, NULL, NULL, test))) goto exit; +--------------------------------------------------------------------------- | Unconditionally remove temporary files ("rpm-tmp.XXXXX") which | were generated for the executed scripts. In OpenPKG we run the | scripts in debug mode ("set -x") anyway, so we never need to | see the whole generated script -- not even if it breaks. Instead | we would just have temporary files staying around forever. +--------------------------------------------------------------------------- Index: build/build.c --- build/build.c 4 Mar 2003 15:27:33 -0000 1.1.1.20 +++ build/build.c 6 Feb 2004 15:37:57 -0000 1.4 @@ -242,7 +273,9 @@ exit: if (scriptName) { +#ifndef OPENPKG if (!rc) +#endif (void) Unlink(scriptName); scriptName = _free(scriptName); } +--------------------------------------------------------------------------- | In OpenPKG we use per-package %{_sourcedir} and %{_specdir} | definitions (macros have trailing ".../%{name}"). On removal | of source(s) and .spec file, this per-package directory would | be kept (usually /RPM/SRC//), because RPM does | not know about this OpenPKG convention. So, let RPM try(!) to | remove the two directories (if they are empty) and just ignore | removal failures (if they are still not empty). +--------------------------------------------------------------------------- Index: build/build.c --- build/build.c 4 Mar 2003 15:27:33 -0000 1.1.1.20 +++ build/build.c 6 Feb 2004 15:37:57 -0000 1.4 @@ -338,6 +377,21 @@ if (what & RPMBUILD_RMSPEC) (void) Unlink(spec->specFile); +#ifdef OPENPKG + if (what & RPMBUILD_RMSOURCE) { + const char *pn; + pn = rpmGetPath("%{_sourcedir}", NULL); + Rmdir(pn); /* ignore error, it is ok if it fails (usually with ENOTEMPTY) */ + pn = _free(pn); + } + if (what & RPMBUILD_RMSPEC) { + const char *pn; + pn = rpmGetPath("%{_specdir}", NULL); + Rmdir(pn); /* ignore error, it is ok if it fails (usually with ENOTEMPTY) */ + pn = _free(pn); + } +#endif + exit: if (rc && rpmlogGetNrecs() > 0) { rpmMessage(RPMMESS_NORMAL, _("\n\nRPM build errors:\n")); +--------------------------------------------------------------------------- | Do not declare any files as %doc files by default. +--------------------------------------------------------------------------- Index: build/files.c --- build/files.c 4 Mar 2003 17:04:13 -0000 1.1.1.20 +++ build/files.c 6 Feb 2004 15:37:57 -0000 1.3 @@ -1971,6 +1971,7 @@ fl.defSpecdFlags = 0; fl.docDirCount = 0; +#if 0 fl.docDirs[fl.docDirCount++] = xstrdup("/usr/doc"); fl.docDirs[fl.docDirCount++] = xstrdup("/usr/man"); fl.docDirs[fl.docDirCount++] = xstrdup("/usr/info"); @@ -1981,6 +1982,7 @@ fl.docDirs[fl.docDirCount++] = rpmGetPath("%{_docdir}", NULL); fl.docDirs[fl.docDirCount++] = rpmGetPath("%{_mandir}", NULL); fl.docDirs[fl.docDirCount++] = rpmGetPath("%{_infodir}", NULL); +#endif fl.fileList = NULL; fl.fileListRecsAlloced = 0; +--------------------------------------------------------------------------- | Make sure the "Provides" headers are available for querying from the | .src.rpm files. +--------------------------------------------------------------------------- Index: build/files.c --- build/files.c 4 Mar 2003 17:04:13 -0000 1.1.1.20 +++ build/files.c 6 Feb 2004 15:37:57 -0000 1.3 @@ -2183,6 +2185,12 @@ case RPMTAG_CHANGELOGTEXT: case RPMTAG_URL: case HEADER_I18NTABLE: +#ifdef OPENPKG + case RPMTAG_PROVIDENAME: + case RPMTAG_PROVIDEVERSION: + case RPMTAG_PROVIDEFLAGS: + case RPMTAG_CLASS: +#endif if (ptr) (void)headerAddEntry(spec->sourceHeader, tag, type, ptr, count); /*@switchbreak@*/ break; +--------------------------------------------------------------------------- | 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 4 Mar 2003 17:04:13 -0000 1.1.1.20 +++ build/files.c 6 Feb 2004 15:37:57 -0000 1.3 @@ -2253,8 +2261,20 @@ } { const char * sfn; +#ifndef OPENPKG sfn = rpmGetPath( ((srcPtr->flags & RPMBUILD_ISNO) ? "!" : ""), "%{_sourcedir}/", srcPtr->source, NULL); +#else + const char *sfn2; + sfn2 = rpmGetPath("%{_specdir}/", srcPtr->source, NULL); + if (access(sfn2, F_OK) == 0) + sfn = rpmGetPath( ((srcPtr->flags & RPMBUILD_ISNO) ? "!" : ""), + "%{_specdir}/", srcPtr->source, NULL); + else + sfn = rpmGetPath( ((srcPtr->flags & RPMBUILD_ISNO) ? "!" : ""), + "%{_sourcedir}/", srcPtr->source, NULL); + sfn2 = _free(sfn2); +#endif appendLineStringBuf(sourceFiles, sfn); sfn = _free(sfn); } @@ -2263,8 +2283,20 @@ for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) { for (srcPtr = pkg->icon; srcPtr != NULL; srcPtr = srcPtr->next) { const char * sfn; +#ifndef OPENPKG sfn = rpmGetPath( ((srcPtr->flags & RPMBUILD_ISNO) ? "!" : ""), "%{_sourcedir}/", srcPtr->source, NULL); +#else + const char *sfn2; + sfn2 = rpmGetPath("%{_specdir}/", srcPtr->source, NULL); + if (access(sfn2, F_OK) == 0) + sfn = rpmGetPath( ((srcPtr->flags & RPMBUILD_ISNO) ? "!" : ""), + "%{_specdir}/", srcPtr->source, NULL); + else + sfn = rpmGetPath( ((srcPtr->flags & RPMBUILD_ISNO) ? "!" : ""), + "%{_sourcedir}/", srcPtr->source, NULL); + sfn2 = _free(sfn2); +#endif appendLineStringBuf(sourceFiles, sfn); sfn = _free(sfn); } +--------------------------------------------------------------------------- | 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 3 Mar 2003 20:46:34 -0000 1.1.1.13 +++ build/parsePreamble.c 6 Feb 2004 15:37:58 -0000 1.3 @@ -366,7 +368,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) { + fn = _free(fn); + fn = rpmGetPath("%{_sourcedir}/", file, NULL); + } +#endif fd = Fopen(fn, "r.ufdio"); if (fd == NULL || Ferror(fd)) { +--------------------------------------------------------------------------- | 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. | Additionally, pass option "-b" to patch(1) so it creates original | files not only if a non-standard (not ".orig") suffix is used. | Finally, add support for the GNU patch "-d" option for convenient | changing into a subdirectory. | Remove "unzip" support, because in OpenPKG there are less than | a dozend packages requiring unpacking of .zip files. For these | it is fully sufficient to explicitly require the "infozip" | package (containing "unzip") and leaving the less portable | "unzip" out of the bootstrap package. +--------------------------------------------------------------------------- Index: build/parsePrep.c --- build/parsePrep.c 7 Aug 2002 14:20:45 -0000 1.1.1.10 +++ build/parsePrep.c 6 Jun 2005 15:53:04 -0000 1.4 @@ -66,7 +66,7 @@ */ /*@-boundswrite@*/ /*@observer@*/ static char *doPatch(Spec spec, int c, int strip, const char *db, - int reverse, int removeEmpties) + int reverse, int removeEmpties, const char *subdir) /*@globals rpmGlobalMacroContext, fileSystem, internalState @*/ /*@modifies rpmGlobalMacroContext, fileSystem, internalState @*/ { @@ -76,6 +76,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)) { @@ -97,6 +106,10 @@ strcat(args, "--suffix "); strcat(args, db); } + if (subdir) { + strcat(args, "-d "); + strcat(args, subdir); + } if (reverse) { strcat(args, " -R"); } @@ -124,6 +137,10 @@ /*@notreached@*/ break; } + patcher = rpmGetPath("%{_patchbin}", NULL); + if (strcmp(patcher, "%{_patchbin}") == 0) + patcher = "patch"; + if (compressed) { const char *zipper = rpmGetPath( (compressed == COMPRESSED_BZIP2 ? "%{_bzip2bin}" : "%{_gzipbin}"), @@ -131,22 +148,23 @@ sprintf(buf, "echo \"Patch #%d (%s):\"\n" - "%s -d < %s | patch -p%d %s -s\n" + "%s -d <%s | %s -p%d %s -s -b\n" "STATUS=$?\n" "if [ $STATUS -ne 0 ]; then\n" " exit $STATUS\n" "fi", - c, /*@-unrecog@*/ (const char *) basename(fn), /*@=unrecog@*/ + c, /*@-unrecog@*/ basename(fn), /*@=unrecog@*/ zipper, - fn, strip, args); + fn, patcher, strip, args); zipper = _free(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 -b <%s", c, basename(fn), + patcher, strip, args, fn); } + patcher = _free(patcher); urlfn = _free(urlfn); return buf; } @@ -171,6 +189,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)) { @@ -228,6 +255,10 @@ /*@notreached@*/ break; } + tar = rpmGetPath("%{_tarbin}", NULL); + if (strcmp(tar, "%{_tarbin}") == 0) + tar = "tar"; + if (compressed != COMPRESSED_NOT) { const char *zipper; int needtar = 1; @@ -240,6 +271,7 @@ case COMPRESSED_BZIP2: t = "%{_bzip2bin} -dc"; break; +#if 0 case COMPRESSED_ZIP: if (rpmIsVerbose() && !quietly) t = "%{_unzipbin}"; @@ -247,6 +279,7 @@ t = "%{_unzipbin} -qq"; needtar = 0; break; +#endif } zipper = rpmGetPath(t, NULL); buf[0] = '\0'; @@ -254,8 +287,13 @@ zipper = _free(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" @@ -264,11 +302,14 @@ "fi"); } else { buf[0] = '\0'; - t = stpcpy( stpcpy(buf, "tar "), taropts); - *t++ = ' '; + t = stpcpy(buf, tar); + t = stpcpy(t, " "); + t = stpcpy(t, taropts); + t = stpcpy(t, " "); t = stpcpy(t, fn); } + tar = _free(tar); urlfn = _free(urlfn); return buf; } @@ -443,7 +484,7 @@ /*@modifies spec->prep, rpmGlobalMacroContext, fileSystem, internalState @*/ { - char *opt_b; + char *opt_b, *opt_d; int opt_P, opt_p, opt_R, opt_E; char *s; char buf[BUFSIZ], *bp; @@ -453,6 +494,7 @@ memset(patch_nums, 0, sizeof(patch_nums)); opt_P = opt_p = opt_R = opt_E = 0; opt_b = NULL; + opt_d = NULL; patch_index = 0; if (! strchr(" \t\n", line[6])) { @@ -492,6 +534,15 @@ spec->lineNum, spec->line); return RPMERR_BADSPEC; } + } else if (!strcmp(s, "-d")) { + /* orig suffix */ + opt_d = strtok(NULL, " \t\n"); + if (! opt_d) { + rpmError(RPMERR_BADSPEC, + _("line %d: Need arg to %%patch -d: %s\n"), + spec->lineNum, spec->line); + return RPMERR_BADSPEC; + } } else if (!strncmp(s, "-p", sizeof("-p")-1)) { /* unfortunately, we must support -pX */ if (! strchr(" \t\n", s[2])) { @@ -530,14 +581,14 @@ /* All args processed */ if (! opt_P) { - s = doPatch(spec, 0, opt_p, opt_b, opt_R, opt_E); + s = doPatch(spec, 0, opt_p, opt_b, opt_R, opt_E, opt_d); if (s == NULL) return RPMERR_BADSPEC; appendLineStringBuf(spec->prep, s); } for (x = 0; x < patch_index; x++) { - s = doPatch(spec, patch_nums[x], opt_p, opt_b, opt_R, opt_E); + s = doPatch(spec, patch_nums[x], opt_p, opt_b, opt_R, opt_E, opt_d); if (s == NULL) return RPMERR_BADSPEC; appendLineStringBuf(spec->prep, 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/parsePrep.c --- build/parsePrep.c 7 Aug 2002 14:20:45 -0000 1.1.1.10 +++ build/parsePrep.c 6 Jun 2005 15:53:04 -0000 1.4 @@ -87,7 +88,15 @@ return NULL; } +#ifndef OPENPKG urlfn = rpmGetPath("%{_sourcedir}/", sp->source, NULL); +#else + urlfn = rpmGetPath("%{_specdir}/", sp->source, NULL); + if (access(urlfn, F_OK) == -1) { + urlfn = _free(urlfn); + urlfn = rpmGetPath("%{_sourcedir}/", sp->source, NULL); + } +#endif args[0] = '\0'; if (db) { @@ -182,7 +201,15 @@ return NULL; } +#ifndef OPENPKG urlfn = rpmGetPath("%{_sourcedir}/", sp->source, NULL); +#else + urlfn = rpmGetPath("%{_specdir}/", sp->source, NULL); + if (access(urlfn, F_OK) == -1) { + urlfn = _free(urlfn); + urlfn = rpmGetPath("%{_sourcedir}/", sp->source, NULL); + } +#endif /*@-internalglobs@*/ /* FIX: shrug */ taropts = ((rpmIsVerbose() && !quietly) ? "-xvvf" : "-xf"); +--------------------------------------------------------------------------- | 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 23 Jun 2002 19:47:12 -0000 1.1.1.12 +++ build/parseScript.c 30 Jan 2004 17:06:29 -0000 1.3 @@ -261,6 +269,7 @@ stripTrailingBlanksStringBuf(sb); p = getStringBuf(sb); + if (progArgv[0] != NULL && strcmp(progArgv[0], "/bin/sh") != 0) (void) addReqProv(spec, pkg->header, (tagflags | RPMSENSE_INTERP), progArgv[0], NULL, 0); /* Trigger script insertion is always delayed in order to */ +--------------------------------------------------------------------------- | 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 4 Mar 2003 15:25:51 -0000 1.1.1.21 +++ build/spec.c 30 Jan 2004 17:06:31 -0000 1.3 @@ -334,7 +337,15 @@ if (tag != RPMTAG_ICON) { /*@-nullpass@*/ /* LCL: varargs needs null annotate. */ +#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) { + body = _free(body); + body = rpmGetPath("%{_sourcedir}/", p->source, NULL); + } +#endif /*@=nullpass@*/ sprintf(buf, "%s%d", +--------------------------------------------------------------------------- | Do not build with warnings on, because we do no RPM development | (so warnings are useless here), they cause some confusion inside | Berkeley-DB and also slow down building. Instead, increase the | optimization level. Additionally, disable static linking of RPM | tools. Finally, use "shtool mkdir" as the "mkdir -p" fallback. +--------------------------------------------------------------------------- Index: configure.ac --- configure.ac 2 Jul 2003 19:20:52 -0000 1.1.1.4 +++ configure.ac 13 Sep 2006 13:39:07 -0000 @@ -53,7 +53,7 @@ AS=${AS-as} AC_SUBST(AS) if test "$ac_cv_prog_gcc" = yes; then - CFLAGS="$CFLAGS -D_GNU_SOURCE -D_REENTRANT -Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wno-char-subscripts" + CFLAGS="$CFLAGS -O2 -D_GNU_SOURCE -D_REENTRANT" fi export CFLAGS @@ -142,6 +142,7 @@ # just link it dynamically LDFLAGS_STATIC="" fi +LDFLAGS_STATIC="" # OpenPKG wants dynamically linked RPM tools LDFLAGS_STATIC="${LDFLAGS} ${LDFLAGS_STATIC}" # libtool format AC_MSG_RESULT($LDFLAGS_STATIC) AC_SUBST(LDFLAGS_STATIC) @@ -201,7 +202,7 @@ if test X"$MKDIR_P" = X0 ; then AC_MSG_RESULT(no) - MKDIR_P="`echo ${prefix}/lib/rpm/mkinstalldirs`" + MKDIR_P="@l_prefix@/lib/openpkg/shtool mkdir -f -p -m 755" else AC_MSG_RESULT(yes) fi +--------------------------------------------------------------------------- | Disable the use of the internal zlib library, because | we build against an external one. +--------------------------------------------------------------------------- Index: configure.ac --- configure.ac 2 Jul 2003 19:20:52 -0000 1.1.1.4 +++ configure.ac 13 Sep 2006 13:39:09 -0000 @@ -310,7 +311,7 @@ WITH_ZLIB_SUBDIR= WITH_ZLIB_INCLUDE= WITH_ZLIB_LIB= -if test -d zlib ; then +if false; then WITH_ZLIB_SUBDIR=zlib addlib \${top_builddir}/zlib WITH_ZLIB_INCLUDE="-I\${top_srcdir}/${WITH_ZLIB_SUBDIR}" +--------------------------------------------------------------------------- | Disable unnecessary INCPATH checks, because in OpenPKG the | externally used libraries are all explicitly given. And they just | would make RPM pick up things which we do not want to be picked up. +--------------------------------------------------------------------------- Index: configure.ac --- configure.ac 2 Jul 2003 19:20:52 -0000 1.1.1.4 +++ configure.ac 13 Sep 2006 13:39:11 -0000 @@ -324,38 +325,38 @@ localdone= -dirs=$prefix -if test "$cross_compiling" != "yes"; then - dirs="$dirs /usr/local" -fi -for dir in $dirs -do - case $dir in - NONE|/usr) continue;; - /usr/local) - if test X$localdone != X ; then continue; fi - localdone="$dir" - ;; - esac - - AC_MSG_CHECKING(for $dir/lib in LIBS) - if test -d $dir/lib 2> /dev/null ; then - addlib $dir/lib - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi - - AC_MSG_CHECKING(for $dir/include in INCPATH) - if test -d $dir/include 2>/dev/null ; then - if [ "$dir" != "/usr/local" ] ; then - INCPATH="$INCPATH -I$dir/include" - fi - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi -done +dnl dirs=$prefix +dnl if test "$cross_compiling" != "yes"; then +dnl dirs="$dirs /usr/local" +dnl fi +dnl for dir in $dirs +dnl do +dnl case $dir in +dnl NONE|/usr) continue;; +dnl /usr/local) +dnl if test X$localdone != X ; then continue; fi +dnl localdone="$dir" +dnl ;; +dnl esac +dnl +dnl AC_MSG_CHECKING(for $dir/lib in LIBS) +dnl if test -d $dir/lib 2> /dev/null ; then +dnl addlib $dir/lib +dnl AC_MSG_RESULT(yes) +dnl else +dnl AC_MSG_RESULT(no) +dnl fi +dnl +dnl AC_MSG_CHECKING(for $dir/include in INCPATH) +dnl if test -d $dir/include 2>/dev/null ; then +dnl if test "$dir" != "/usr/local"; then +dnl INCPATH="$INCPATH -I$dir/include" +dnl fi +dnl AC_MSG_RESULT(yes) +dnl else +dnl AC_MSG_RESULT(no) +dnl fi +dnl done AC_MSG_CHECKING(for /usr/ucblib in LIBS) if test -d /usr/ucblib ; then +--------------------------------------------------------------------------- | Adjust paths for OpenPKG filesystem layout. +--------------------------------------------------------------------------- Index: configure.ac --- configure.ac 2 Jul 2003 19:20:52 -0000 1.1.1.4 +++ configure.ac 13 Sep 2006 13:39:12 -0000 @@ -1200,12 +1202,12 @@ AC_SUBST(LOCALEDIR) LIBDIR="`echo $libdir | sed 's-/lib$-/%{_lib}-'`" AC_SUBST(LIBDIR) -RPMCONFIGDIR="`echo ${usrprefix}/lib/rpm`" +RPMCONFIGDIR="@l_prefix@/lib/openpkg" AC_DEFINE_UNQUOTED(RPMCONFIGDIR, "$RPMCONFIGDIR", [Full path to rpm global configuration directory (usually /usr/lib/rpm)]) AC_SUBST(RPMCONFIGDIR) -SYSCONFIGDIR="`echo /etc/rpm`" +SYSCONFIGDIR="@l_prefix@/etc/openpkg" AC_DEFINE_UNQUOTED(SYSCONFIGDIR, "$SYSCONFIGDIR", [Full path to rpm system configuration directory (usually /etc/rpm)]) AC_SUBST(SYSCONFIGDIR) @@ -1215,17 +1217,17 @@ [Colon separated paths of macro files to read.]) AC_SUBST(MACROFILES) -LIBRPMRC_FILENAME="${RPMCONFIGDIR}/rpmrc" +LIBRPMRC_FILENAME="${SYSCONFIGDIR}/rpmrc" AC_DEFINE_UNQUOTED(LIBRPMRC_FILENAME, "$LIBRPMRC_FILENAME", [Full path to rpmrc configuration file (usually /usr/lib/rpm/rpmrc)]) AC_SUBST(LIBRPMRC_FILENAME) -VENDORRPMRC_FILENAME="${RPMCONFIGDIR}/${RPMCANONVENDOR}/rpmrc" +VENDORRPMRC_FILENAME="${SYSCONFIGDIR}/${RPMCANONVENDOR}/rpmrc" AC_DEFINE_UNQUOTED(VENDORRPMRC_FILENAME, "$VENDORRPMRC_FILENAME", [Full path to vendor rpmrc configuration file (usually /usr/lib/rpm/vendor/rpmrc)]) AC_SUBST(VENDORRPMRC_FILENAME) -LIBRPMALIAS_FILENAME="${RPMCONFIGDIR}/rpmpopt-${VERSION}" +LIBRPMALIAS_FILENAME="${RPMCONFIGDIR}/rpmpopt" AC_DEFINE_UNQUOTED(LIBRPMALIAS_FILENAME, "$LIBRPMALIAS_FILENAME", [Full path to rpmpopt configuration file (usually /usr/lib/rpm/rpmpopt)]) AC_SUBST(LIBRPMALIAS_FILENAME) +--------------------------------------------------------------------------- | If running as "susr", do not unpack source RPM packages with "susr" | file ownerships as the OpenPKG Set-UID wrapper switches from "musr" | to "susr" on "openpkg rpm -Uvh *.src.rpm". As a result the installed | files could be never removed again by "musr". It is more consistent | to always unpack as "musr" if possible. +--------------------------------------------------------------------------- Index: lib/psm.c --- lib/psm.c 5 Jun 2003 12:43:18 -0000 1.1.1.6 +++ lib/psm.c 13 Sep 2006 13:39:15 -0000 @@ -314,6 +314,20 @@ fi->uid = getuid(); fi->gid = getgid(); +#ifdef OPENPKG + if (fi->uid == 0) { + char *muid_str; + char *mgid_str; + uid_t *muid; + gid_t *mgid; + if ((muid_str = rpmExpand("%{l_muid}", NULL)) != NULL) + if ((muid = (uid_t)strtol(muid_str, (char **)NULL, 10)) > 0) + fi->uid = muid; + if ((mgid_str = rpmExpand("%{l_mgid}", NULL)) != NULL) + if ((mgid = (gid_t)strtol(mgid_str, (char **)NULL, 10)) > 0) + fi->gid = mgid; + } +#endif fi->astriplen = 0; fi->striplen = 0; @@ -352,6 +366,9 @@ rpmrc = RPMRC_FAIL; goto exit; } +#ifdef OPENPKG + chown(_sourcedir, fi->uid, fi->gid); +#endif _specdir = rpmGenPath(rpmtsRootDir(ts), "%{_specdir}", ""); rpmrc = rpmMkdirPath(_specdir, "specdir"); @@ -359,6 +376,9 @@ rpmrc = RPMRC_FAIL; goto exit; } +#ifdef OPENPKG + chown(_specdir, fi->uid, fi->gid); +#endif /* Build dnl/dil with {_sourcedir, _specdir} as values. */ if (i < fi->fc) { +--------------------------------------------------------------------------- | 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. Then, RPM | allows to read the platform from an external program. Adjust the | hard-coded path to this program and allow it to be overridden with | the macro %{__platform}. Finally, change the default definition of | %{_host} to not contain the vendor stuff to more conform to what | %{_target} usually is defined to and what we are using throughout | OpenPKG, too. +--------------------------------------------------------------------------- Index: lib/rpmrc.c --- lib/rpmrc.c 4 Jun 2003 18:18:45 -0000 1.1.1.25 +++ lib/rpmrc.c 6 Jun 2005 15:53:06 -0000 1.3 @@ -27,7 +27,7 @@ const char * macrofiles = MACROFILES; /*@observer@*/ /*@unchecked@*/ -static const char * platform = "/etc/rpm/platform"; +static const char * platform = "@l_prefix@/etc/openpkg/platform"; /*@only@*/ /*@relnull@*/ /*@unchecked@*/ static const char ** platpat = NULL; /*@unchecked@*/ @@ -861,7 +861,11 @@ platpat = xrealloc(platpat, (nplatpat + 2) * sizeof(*platpat)); /*@-onlyunqglobaltrans@*/ +#ifdef OPENPKG + platpat[nplatpat] = rpmExpand("%{_host_cpu}-%{_host_os}", NULL); +#else platpat[nplatpat] = rpmExpand("%{_host_cpu}-%{_host_vendor}-%{_host_os}", (gnu && *gnu ? "-" : NULL), gnu, NULL); +#endif nplatpat++; platpat[nplatpat] = NULL; /*@=onlyunqglobaltrans@*/ @@ -1055,14 +1059,35 @@ /*@globals rpmGlobalMacroContext, fileSystem, internalState @*/ /*@modifies *arch, *os, rpmGlobalMacroContext, fileSystem, internalState @*/ { +#ifdef OPENPKG + static struct utsname un_real; + /* utsname fields on some platforms (like HP-UX) are very small + (about 8 characters). This is too small for OpenPKG, so cheat! */ + static struct { + char *sysname[32]; + char *nodename[32]; + char *release[32]; + char *version[32]; + char *machine[32]; + } un; +#else static struct utsname un; +#endif static int gotDefaults = 0; char * chptr; canonEntry canon; int rc; while (!gotDefaults) { +#ifdef OPENPKG + const char *cp; + cp = rpmExpand("%{?__platform}", NULL); + if (cp == NULL || cp[0] == '\0') + cp = platform; + if (!rpmPlatform(cp)) { +#else if (!rpmPlatform(platform)) { +#endif const char * s; s = rpmExpand("%{_host_cpu}", NULL); if (s) { @@ -1079,9 +1104,44 @@ gotDefaults = 1; break; } +#ifdef OPENPKG + rc = uname(&un_real); + strncpy(un.sysname, un_real.sysname, sizeof(un.sysname)); un.sysname [sizeof(un.sysname)-1] = '\0'; + strncpy(un.nodename, un_real.nodename, sizeof(un.nodename)); un.nodename[sizeof(un.nodename)-1] = '\0'; + strncpy(un.release, un_real.release, sizeof(un.release)); un.release [sizeof(un.release)-1] = '\0'; + strncpy(un.version, un_real.version, sizeof(un.version)); un.version [sizeof(un.version)-1] = '\0'; + strncpy(un.machine, un_real.machine, sizeof(un.machine)); un.machine [sizeof(un.machine)-1] = '\0'; +#else rc = uname(&un); +#endif if (rc < 0) return; +#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); + } + /* fix up machine hardware name containing white-space as it + * happens to be on Power Macs running MacOS X + */ + if (!strncmp(un.machine, "Power Macintosh", 15)) { + sprintf(un.machine, "powerpc"); + } + } +#else /* OPENPKG */ #if !defined(__linux__) #ifdef SNI /* USUALLY un.sysname on sinix does start with the word "SINIX" @@ -1298,6 +1358,7 @@ } } # endif +#endif /* OPENPKG */ /* the uname() result goes through the arch_canon table */ canon = lookupInCanonTable(un.machine, +--------------------------------------------------------------------------- | In verbose file listing output, give the owner and group fields more | width and at the same time reduce the nlink and size fields to more | typical sizes within OpenPKG. +--------------------------------------------------------------------------- Index: lib/query.c --- lib/query.c 4 Jun 2003 18:24:14 -0000 1.1.1.13 +++ lib/query.c 22 Jan 2004 21:42:24 -0000 1.2 @@ -33,7 +33,11 @@ /*@modifies *te @*/ { char sizefield[15]; +#ifdef OPENPKG + char ownerfield[13+1], groupfield[13+1]; +#else char ownerfield[8+1], groupfield[8+1]; +#endif char timefield[100]; time_t when = mtime; /* important if sizeof(int_32) ! sizeof(time_t) */ struct tm * tm; @@ -58,7 +62,11 @@ groupfield[sizeof(groupfield)-1] = '\0'; /* this is normally right */ +#ifdef OPENPKG + sprintf(sizefield, "%8u", size); +#else sprintf(sizefield, "%12u", size); +#endif /* this knows too much about dev_t */ @@ -98,7 +106,11 @@ (void)strftime(timefield, sizeof(timefield) - 1, fmt, tm); } +#ifdef OPENPKG + sprintf(te, "%s %d %-13s %-13s %8s %s %s", perms, +#else sprintf(te, "%s %4d %-8s%-8s %10s %s %s", perms, +#endif (int)nlink, ownerfield, groupfield, sizefield, timefield, namefield); perms = _free(perms); } +--------------------------------------------------------------------------- | Enable the exlusion of "%doc" files by default. | Disable "check-files" feature, because it is useless in OpenPKG | (we consistently use BuildRoot and our %files lists are fully | autogenerated) and just makes problems on bootstrapping. | Provide the possibility to optionally re-enable the old | RPM 4.0.2 way of RPM database operation by defining the | macro %{_rpmdb_private}. This is important for easily fixing | corrupted/hanging RPM database (on upgrades, etc) or if you | permanently have to operate RPM on a NFS filesystem where no | rpc.lockd(8) support is available. | Additionally, do not override the "_host_xx" macros because their | value (derived from /etc/openpkg/platform) is already | correctly set internally. | Additionally, provide default macros for the %track and %test | section expansion. | Finally, provide default for introduced variable | %{_force_oldpackage}, which, if non-zero, automatically enforces | --oldpackage on all upgrade operations (this is useful on | mass-upgrades from OpenPKG-CURRENT to OpenPKG-RELEASE). +--------------------------------------------------------------------------- Index: macros.in --- macros.in 2 Jul 2003 19:20:52 -0000 1.1.1.14 +++ macros.in 30 Jan 2004 17:06:27 -0000 1.3 @@ -1,7 +1,7 @@ #/*! \page config_macros Default configuration: @RPMCONFIGDIR@/macros # \verbatim # -# $Id: macros.in,v 1.138.2.1 2003/07/02 19:14:06 jbj Exp $ +# $Id: macros.in,v 1.2 2004/01/22 21:42:09 rse Exp $ # # This is a global RPM configuration file. All changes made here will # be lost when the rpm package is upgraded. Any per-system configuration @@ -206,7 +206,7 @@ # Boolean (i.e. 1 == "yes", 0 == "no") that controls whether files # marked as %doc should be installed. -#%_excludedocs +%_excludedocs 1 # The port and machine name of a FTP proxy host running TIS firewall. # @@ -305,7 +305,7 @@ # Returns list of unpackaged files, i.e. files in $RPM_BUILD_ROOT not packaged. # # Note: Disable (by commenting out) for legacy compatibility. -%__check_files @RPMCONFIGDIR@/check-files %{buildroot} +#%__check_files @RPMCONFIGDIR@/check-files %{buildroot} # # Should unpackaged files in a build root terminate a build? @@ -449,7 +449,7 @@ # Use a CDB database model for concurrent access. # XXX Add "private" here for legacy interoperation transiting to glibc+nptl. -%__dbi_cdb create cdb mpool mp_mmapsize=16Mb mp_size=1Mb +%__dbi_cdb create cdb mpool mp_mmapsize=16Mb mp_size=1Mb %{?_rpmdb_private:private} %__dbi_other %{?_tmppath:tmpdir=%{_tmppath}} %{?__dbi_cdb} @@ -618,6 +618,10 @@ # If non-zero, all erasures will be automagically repackaged. %_repackage_all_erasures 0 +# If non-zero, automatically enforce --oldpackage for all upgrade operations +# (useful on mass-upgrades from OpenPKG-CURRENT to OpenPKG-RELEASE) +%_force_oldpackage 0 + # Verify digest/signature flags for various rpm modes: # 1 --nohdrchk if set, don't check rpmdb headers # @@ -870,6 +874,26 @@ #%{__spec_clean_post}\ #%{nil} +%__spec_track_shell %{___build_shell} +%__spec_track_args %{___build_args} +%__spec_track_cmd %{___build_cmd} +%__spec_track_pre %{___build_pre} +%__spec_track_body %{___build_body} +%__spec_track_post %{___build_post} +%__spec_track_template #!%{__spec_track_shell}\ +%{__spec_track_pre}\ +%{nil} + +%__spec_test_shell %{___build_shell} +%__spec_test_args %{___build_args} +%__spec_test_cmd %{___build_cmd} +%__spec_test_pre %{___build_pre} +%__spec_test_body %{___build_body} +%__spec_test_post %{___build_post} +%__spec_test_template #!%{__spec_test_shell}\ +%{__spec_test_pre}\ +%{nil} + %__spec_rmbuild_shell %{___build_shell} %__spec_rmbuild_args %{___build_args} %__spec_rmbuild_cmd %{___build_cmd} @@ -929,11 +953,11 @@ %_build_cpu %{_host_cpu} %_build_vendor %{_host_vendor} %_build_os %{_host_os} -%_host @host@ -%_host_alias @host_alias@%{nil} -%_host_cpu @host_cpu@ -%_host_vendor @host_vendor@ -%_host_os @host_os@ +#%_host @host@ +#%_host_alias @host_alias@%{nil} +#%_host_cpu @host_cpu@ +#%_host_vendor @host_vendor@ +#%_host_os @host_os@ %_target %{_host} %_target_alias %{_host_alias} %_target_cpu %{_host_cpu} +--------------------------------------------------------------------------- | Adjust path for OpenPKG filesystem layout. +--------------------------------------------------------------------------- Index: scripts/Makefile.am --- scripts/Makefile.am 20 Jun 2003 19:04:49 -0000 1.1.1.11 +++ scripts/Makefile.am 22 Jan 2004 21:42:34 -0000 1.2 @@ -22,7 +22,7 @@ all: -configdir = ${prefix}/lib/rpm +configdir = ${prefix}/lib/openpkg config_SCRIPTS = \ brp-compress brp-python-bytecompile brp-redhat \ brp-strip brp-strip-comment-note \ +--------------------------------------------------------------------------- | Adjust path for OpenPKG filesystem layout. +--------------------------------------------------------------------------- Index: scripts/Makefile.in --- scripts/Makefile.in 16 Jul 2003 17:05:49 -0000 1.1.1.14 +++ scripts/Makefile.in 22 Jan 2004 21:42:34 -0000 1.2 @@ -273,7 +273,7 @@ installprefix = $(DESTDIR) -configdir = ${prefix}/lib/rpm +configdir = ${prefix}/lib/openpkg config_SCRIPTS = \ brp-compress brp-python-bytecompile brp-redhat \ brp-strip brp-strip-comment-note \ +--------------------------------------------------------------------------- | Use GNU libtool's weaker -static (link with own static libraries) | instead of the strong -all-static (link even with static libc, etc), | because OpenPKG does not need to be fully static. | Additionally, adjust the path to file(1)'s "magic" file. +--------------------------------------------------------------------------- Index: file/Makefile.am --- file/Makefile.am 24 Jan 2003 19:41:56 -0000 1.1.1.1 +++ file/Makefile.am 22 Jan 2004 21:42:21 -0000 1.2 @@ -36,7 +36,7 @@ #MAGIC = @datadir@/magic #data_DATA = magic magic.mime magic.mgc magic.mime.mgc -pkglibdir = @prefix@/lib/rpm +pkglibdir = @prefix@/lib/openpkg pkglib_DATA = magic magic.mime magic.mgc magic.mime.mgc MAGIC = $(pkglibdir)/magic CPPFLAGS = -DMAGIC='"$(MAGIC)"' +--------------------------------------------------------------------------- | Use GNU libtool's weaker -static (link with own static libraries) | instead of the strong -all-static (link even with static libc, etc), | because OpenPKG does not need to be fully static. | Additionally, adjust the path to file(1)'s "magic" file. +--------------------------------------------------------------------------- Index: file/Makefile.in --- file/Makefile.in 16 Jul 2003 17:05:23 -0000 1.1.1.2 +++ file/Makefile.in 22 Jan 2004 21:42:22 -0000 1.2 @@ -39,7 +39,7 @@ #MAGIC = @datadir@/magic #data_DATA = magic magic.mime magic.mgc magic.mime.mgc -pkglibdir = @prefix@/lib/rpm +pkglibdir = @prefix@/lib/openpkg ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ @@ -159,7 +159,7 @@ noinst_PROGRAMS = file file_SOURCES = file.c -file_LDFLAGS = -all-static +file_LDFLAGS = -static file_LDADD = libfmagic.la man_MAGIC = magic.@fsect@ +--------------------------------------------------------------------------- | Use GNU libtool's weaker -static (link with own static libraries) | instead of the strong -all-static (link even with static libc, etc), | because OpenPKG does not need to be fully static. | Additionally, disable the building of gettext stuff we don't need. +--------------------------------------------------------------------------- Index: popt/Makefile.am --- popt/Makefile.am 6 Mar 2003 23:16:43 -0000 1.1.1.9 +++ popt/Makefile.am 22 Jan 2004 21:42:28 -0000 1.2 @@ -9,7 +9,7 @@ po/*.in po/*.po po/popt.pot \ popt.ps -SUBDIRS = intl po +SUBDIRS = intl INCLUDES = -I. -I$(top_srcdir) @@ -17,13 +17,13 @@ noinst_PROGRAMS = test1 test2 test3 test1_SOURCES = test1.c -test1_LDFLAGS = -all-static +test1_LDFLAGS = -static test1_LDADD = $(usrlib_LTLIBRARIES) test2_SOURCES = test2.c -test2_LDFLAGS = -all-static +test2_LDFLAGS = -static test2_LDADD = $(usrlib_LTLIBRARIES) test3_SOURCES = test3.c -test3_LDFLAGS = -all-static +test3_LDFLAGS = -static test3_LDADD = $(usrlib_LTLIBRARIES) noinst_SCRIPTS = testit.sh +--------------------------------------------------------------------------- | Use GNU libtool's weaker -static (link with own static libraries) | instead of the strong -all-static (link even with static libc, etc), | because OpenPKG does not need to be fully static. | Additionally, disable the building of gettext stuff we don't need. +--------------------------------------------------------------------------- Index: popt/Makefile.in --- popt/Makefile.in 16 Jul 2003 17:04:49 -0000 1.1.1.14 +++ popt/Makefile.in 22 Jan 2004 21:42:28 -0000 1.2 @@ -163,7 +163,7 @@ popt.ps -SUBDIRS = intl po +SUBDIRS = intl INCLUDES = -I. -I$(top_srcdir) @@ -171,13 +171,13 @@ noinst_PROGRAMS = test1 test2 test3 test1_SOURCES = test1.c -test1_LDFLAGS = -all-static +test1_LDFLAGS = -static test1_LDADD = $(usrlib_LTLIBRARIES) test2_SOURCES = test2.c -test2_LDFLAGS = -all-static +test2_LDFLAGS = -static test2_LDADD = $(usrlib_LTLIBRARIES) test3_SOURCES = test3.c -test3_LDFLAGS = -all-static +test3_LDFLAGS = -static test3_LDADD = $(usrlib_LTLIBRARIES) noinst_SCRIPTS = testit.sh +--------------------------------------------------------------------------- | Revert back to the old behaviour of passing to "exec" programs an | extra "--" argument to separate options and arguments. Additionally, | allow the "!#:+" constructs to be used multiple times and then each | time eat another argument (instead of just eating an argument once | and expanding this multiple times). +--------------------------------------------------------------------------- Index: popt/popt.c --- popt/popt.c 22 Aug 2002 14:17:44 -0000 1.1.1.12 +++ popt/popt.c 22 Jan 2004 21:42:28 -0000 1.2 @@ -400,9 +400,7 @@ } if (con->leftovers != NULL && con->numLeftovers > 0) { -#if 0 argv[argc++] = "--"; -#endif memcpy(argv + argc, con->leftovers, sizeof(*argv) * con->numLeftovers); argc += con->numLeftovers; } @@ -580,10 +578,8 @@ if (!(s[0] == '#' && s[1] == ':' && s[2] == '+')) /*@switchbreak@*/ break; /* XXX Make sure that findNextArg deletes only next arg. */ - if (a == NULL) { if ((a = findNextArg(con, 1, 1)) == NULL) /*@switchbreak@*/ break; - } s += 3; alen = strlen(a); +--------------------------------------------------------------------------- | Dedefine the stdio variable BUFSIZ because it is usually just 1024 | on some platforms (on Linux it is 8192) and unfortunately RPM uses | it here for the macro expansion buffer. For OpenPKG the size 1024 is | definetely too small. So increase this to a 16KB buffer. +--------------------------------------------------------------------------- Index: rpmio/macro.c --- rpmio/macro.c 15 May 2003 13:42:01 -0000 1.1.1.7 +++ rpmio/macro.c 22 Jan 2004 21:42:32 -0000 1.2 @@ -50,6 +50,9 @@ #include "debug.h" +#undef BUFSIZ +#define BUFSIZ 16384 + #if defined(__LCLINT__) /*@-exportheader@*/ extern const unsigned short int **__ctype_b_loc (void) /*@*/; +--------------------------------------------------------------------------- | Remove "unzip" support, because in OpenPKG there are less than | a dozend packages requiring unpacking of .zip files. For these | it is fully sufficient to explicitly require the "infozip" | package (containing "unzip") and leaving the less portable | "unzip" out of the bootstrap package. +--------------------------------------------------------------------------- Index: rpmio/macro.c --- rpmio/macro.c 15 May 2003 13:42:01 -0000 1.1.1.7 +++ rpmio/macro.c 22 Jan 2004 21:42:32 -0000 1.2 @@ -1114,9 +1119,11 @@ case 2: /* COMPRESSED_BZIP2 */ sprintf(be, "%%_bzip2 %s", b); break; +#if 0 case 3: /* COMPRESSED_ZIP */ sprintf(be, "%%_unzip %s", b); break; +#endif } b = be; } else if (STREQ("S", f, fn)) { @@ -1717,9 +1725,11 @@ if ((magic[0] == 'B') && (magic[1] == 'Z')) { *compressed = COMPRESSED_BZIP2; +#if 0 } else if ((magic[0] == 0120) && (magic[1] == 0113) && (magic[2] == 0003) && (magic[3] == 0004)) { /* pkzip */ *compressed = COMPRESSED_ZIP; +#endif } else if (((magic[0] == 0037) && (magic[1] == 0213)) || /* gzip */ ((magic[0] == 0037) && (magic[1] == 0236)) || /* old gzip */ ((magic[0] == 0037) && (magic[1] == 0036)) || /* pack */ +--------------------------------------------------------------------------- | Make sure that an %{error:} macro really stops further | processing. Else it would be nothing more than a %{warn:}. +--------------------------------------------------------------------------- Index: rpmio/macro.c --- rpmio/macro.c 15 May 2003 13:42:01 -0000 1.1.1.7 +++ rpmio/macro.c 22 Jan 2004 21:42:32 -0000 1.2 @@ -1329,7 +1337,7 @@ STREQ("error", f, fn)) { int waserror = 0; if (STREQ("error", f, fn)) - waserror = 1; + waserror = 1, rc = 1; if (g < ge) doOutput(mb, waserror, g, gn); else +--------------------------------------------------------------------------- | Reactivate build mode aliases which were removed in rpm-4.1 | (and now should be available through "rpmbuild" only). +--------------------------------------------------------------------------- Index: rpmpopt.in --- rpmpopt.in 24 Jan 2003 14:56:30 -0000 1.1.1.7 +++ rpmpopt.in 22 Jan 2004 21:42:11 -0000 1.2 @@ -147,28 +147,28 @@ # Popt glue to preserve legacy CLI behavior. # # XXX popt exec parsing doesn't honor POPT_ARGFLAG_ONEDASH -# XXX Build mode aliases, removed in rpm-4.1. -#rpm exec --bp rpmb -bp -#rpm exec --bc rpmb -bc -#rpm exec --bi rpmb -bi -#rpm exec --bl rpmb -bl -#rpm exec --ba rpmb -ba -#rpm exec --bb rpmb -bb -#rpm exec --bs rpmb -bs -#rpm exec --tp rpmb -tp -#rpm exec --tc rpmb -tc -#rpm exec --ti rpmb -ti -#rpm exec --tl rpmb -tl -#rpm exec --ta rpmb -ta -#rpm exec --tb rpmb -tb -#rpm exec --ts rpmb -ts -#rpm exec --rebuild rpmb --rebuild -#rpm exec --recompile rpmb --recompile -#rpm exec --clean rpmb --clean -#rpm exec --rmsource rpmb --rmsource -#rpm exec --rmspec rpmb --rmspec -#rpm exec --target rpmb --target -#rpm exec --short-circuit rpmb --short-circuit +rpm exec --bp rpmb -bp +rpm exec --bc rpmb -bc +rpm exec --bi rpmb -bi +rpm exec --bl rpmb -bl +rpm exec --ba rpmb -ba +rpm exec --bb rpmb -bb +rpm exec --bs rpmb -bs +rpm exec --bt rpmb -bt +rpm exec --tp rpmb -tp +rpm exec --tc rpmb -tc +rpm exec --ti rpmb -ti +rpm exec --tl rpmb -tl +rpm exec --ta rpmb -ta +rpm exec --tb rpmb -tb +rpm exec --ts rpmb -ts +rpm exec --rebuild rpmb --rebuild +rpm exec --recompile rpmb --recompile +rpm exec --clean rpmb --clean +rpm exec --rmsource rpmb --rmsource +rpm exec --rmspec rpmb --rmspec +rpm exec --target rpmb --target +rpm exec --short-circuit rpmb --short-circuit rpm exec --initdb rpmd --initdb rpm exec --rebuilddb rpmd --rebuilddb +--------------------------------------------------------------------------- | Allow "-bb --short-circuit" for continuing building a binary package | after the %install step (usually previously fixed and repeated with | "-bi --short-circuit". +--------------------------------------------------------------------------- Index: rpmqv.c --- rpmqv.c 4 Mar 2003 15:32:57 -0000 1.1.1.8 +++ rpmqv.c 6 Feb 2004 15:37:56 -0000 1.4 @@ -682,6 +682,10 @@ case 'b': ba->buildAmount |= RPMBUILD_PACKAGEBINARY; ba->buildAmount |= RPMBUILD_CLEAN; +#ifdef OPENPKG + if ((ba->buildChar == 'b') && ba->shortCircuit) + /*@innerbreak@*/ break; +#endif /*@fallthrough@*/ case 'i': ba->buildAmount |= RPMBUILD_INSTALL; +--------------------------------------------------------------------------- | Because permissions and ownership on Berkeley-DB region files | __db.XXX have to be already fixed in advance and those files cannot | be created in advance on the command line with some reasonable | default (as it is the case for the other files which are created | with [rpm]db_load), so force Berkeley-DB to accept zero-sized files | and create them (instead of thinking another process is currently | creating them). +--------------------------------------------------------------------------- Index: db/env/env_region.c --- db/env/env_region.c 18 Jan 2003 14:05:01 -0000 1.1.1.5 +++ db/env/env_region.c 22 Jan 2004 21:42:17 -0000 1.2 @@ -184,6 +184,24 @@ } /* + * OpenPKG hack: because permissions and ownership on Berkeley-DB + * region files __db.XXX have to be already fixed in advance and + * those files cannot be created in advance on the command line + * with some reasonable default (as it is the case for the other + * files which are created with [rpm]db_load), so force Berkeley-DB + * to accept zero-sized files and create them (instead of thinking + * another process is currently creating them). + */ + if (mbytes == 0 && bytes == 0) { + if (F_ISSET(dbenv, DB_ENV_CREATE)) + goto creation; + else { + ret = ENOENT; + goto err; + } + } + + /* * !!! * A size_t is OK -- regions get mapped into memory, and so can't * be larger than a size_t. +--------------------------------------------------------------------------- | Make sure RPM passes DB_CREATE to Berkeley-DB also if file exists, | but is (still) zero-sized. +--------------------------------------------------------------------------- Index: rpmdb/db3.c --- rpmdb/db3.c 3 Mar 2003 16:18:29 -0000 1.1.1.5 +++ rpmdb/db3.c 22 Jan 2004 21:42:29 -0000 1.2 @@ -1019,9 +1019,13 @@ } else { /* dbhome is writable, check for persistent dbenv. */ /*@-mods@*/ const char * dbf = rpmGetPath(dbhome, "/__db.001", NULL); + struct stat sb; + long size = -1; /*@=mods@*/ - if (access(dbf, F_OK) == -1) { + if (stat(dbf, &sb) == 0) + size = (long)sb.st_size; + if (access(dbf, F_OK) == -1 || size == 0) { /* ... non-existent (or unwritable) DBENV, will create ... */ dbi->dbi_oeflags |= DB_CREATE; dbi->dbi_eflags &= ~DB_JOINENV; +--------------------------------------------------------------------------- | Add internal feature variable %{_force_oldpackage} which, if | non-zero, automatically enforces --oldpackage on all upgrade | operations (this is useful on mass-upgrades from OpenPKG-CURRENT to | OpenPKG-RELEASE). +--------------------------------------------------------------------------- Index: rpm.c --- rpm.c 16 May 2002 16:55:25 -0000 1.1.1.23 +++ rpm.c 22 Jan 2004 21:42:10 -0000 1.2 @@ -1016,6 +1016,10 @@ if (oldPackage && !upgrade) argerror(_("--oldpackage may only be used during upgrades")); +#ifdef OPENPKG + if (upgrade && rpmExpandNumeric("%{?_force_oldpackage}")) + probFilter |= RPMPROB_FILTER_OLDPACKAGE; +#endif if (noPgp && bigMode != MODE_CHECKSIG) argerror(_("--nopgp may only be used during signature checking")); +--------------------------------------------------------------------------- | Add OpenPKG branding to make sure people do not intermix | this RPM version with the stock RPM version. +--------------------------------------------------------------------------- Index: lib/poptALL.c --- lib/poptALL.c 25 Jun 2003 19:10:01 -0000 1.1.1.3 +++ lib/poptALL.c 22 Jan 2004 21:42:23 -0000 1.2 @@ -102,7 +102,7 @@ /*@globals rpmEVR, fileSystem @*/ /*@modifies *fp, fileSystem @*/ { - fprintf(fp, _("RPM version %s\n"), rpmEVR); + fprintf(fp, _("OpenPKG RPM %s\n"), rpmEVR); } /** +--------------------------------------------------------------------------- | Add OpenPKG branding to make sure people do not intermix | this RPM version with the stock RPM version. +--------------------------------------------------------------------------- Index: rpm.c --- rpm.c 16 May 2002 16:55:25 -0000 1.1.1.23 +++ rpm.c 22 Jan 2004 21:42:10 -0000 1.2 @@ -235,7 +235,7 @@ static void printHelpLine(char * prefix, char * help); static void printVersion(void) { - fprintf(stdout, _("RPM version %s\n"), rpmEVR); + fprintf(stdout, _("OpenPKG RPM %s\n"), rpmEVR); } static void printBanner(void) { +--------------------------------------------------------------------------- | Add OpenPKG branding to make sure people do not intermix | this RPM version with the stock RPM version. +--------------------------------------------------------------------------- Index: rpmqv.c --- rpmqv.c 4 Mar 2003 15:32:57 -0000 1.1.1.8 +++ rpmqv.c 6 Feb 2004 15:37:56 -0000 1.4 @@ -126,7 +126,7 @@ /*@globals rpmEVR, fileSystem @*/ /*@modifies *fp, fileSystem @*/ { - fprintf(fp, _("RPM version %s\n"), rpmEVR); + fprintf(fp, _("OpenPKG RPM %s\n"), rpmEVR); } static void printBanner(FILE * fp) +--------------------------------------------------------------------------- | Add support for the OpenPKG custom .spec file sections %track | (package build-time feature for performing vendor source tracking) | and %test (package install-time feature for performing package | run-time tests). +--------------------------------------------------------------------------- Index: rpmqv.c --- rpmqv.c 4 Mar 2003 15:32:57 -0000 1.1.1.8 +++ rpmqv.c 6 Feb 2004 15:37:56 -0000 1.4 @@ -703,7 +707,19 @@ /*@innerbreak@*/ break; case 's': ba->buildAmount |= RPMBUILD_PACKAGESOURCE; + /* enforce no dependency checking */ + ba->noDeps = 1; /*@innerbreak@*/ break; +#ifdef OPENPKG + case 't': + ba->buildAmount |= RPMBUILD_TRACK; + /* enforce no dependency checking and expansion of %setup, %patch and %prep macros */ + ba->noDeps = 1; + rpmDefineMacro(NULL, "setup #", RMIL_CMDLINE); + rpmDefineMacro(NULL, "patch #", RMIL_CMDLINE); + rpmDefineMacro(NULL, "prep %%prep", RMIL_CMDLINE); + /*@innerbreak@*/ break; +#endif } if (!poptPeekArg(optCon)) { +--------------------------------------------------------------------------- | Add support for the OpenPKG custom .spec file sections %track | (package build-time feature for performing vendor source tracking) | and %test (package install-time feature for performing package | run-time tests). +--------------------------------------------------------------------------- Index: build/pack.c --- build/pack.c 4 Mar 2003 17:03:17 -0000 1.1.1.20 +++ build/pack.c 30 Jan 2004 17:06:29 -0000 1.2 @@ -252,6 +252,15 @@ return RPMERR_BADFILENAME; } } +#ifdef OPENPKG + if (pkg->testFile) { + if (addFileToTag(spec, pkg->testFile, pkg->header, RPMTAG_TEST)) { + rpmError(RPMERR_BADFILENAME, + _("Could not open Test file: %s\n"), pkg->testFile); + return RPMERR_BADFILENAME; + } + } +#endif for (p = pkg->triggerFiles; p != NULL; p = p->next) { (void) headerAddOrAppendEntry(pkg->header, RPMTAG_TRIGGERSCRIPTPROG, +--------------------------------------------------------------------------- | Add support for the OpenPKG custom .spec file sections %track | (package build-time feature for performing vendor source tracking) | and %test (package install-time feature for performing package | run-time tests). +--------------------------------------------------------------------------- Index: build/parseBuildInstallClean.c --- build/parseBuildInstallClean.c 3 Mar 2003 20:43:30 -0000 1.1.1.9 +++ build/parseBuildInstallClean.c 30 Jan 2004 17:06:29 -0000 1.2 @@ -29,6 +29,11 @@ } else if (parsePart == PART_CLEAN) { sbp = &(spec->clean); name = "%clean"; +#ifdef OPENPKG + } else if (parsePart == PART_TRACK) { + sbp = &(spec->track); + name = "%track"; +#endif } /*@=branchstate@*/ +--------------------------------------------------------------------------- | Add support for the OpenPKG custom .spec file sections %track | (package build-time feature for performing vendor source tracking) | and %test (package install-time feature for performing package | run-time tests). +--------------------------------------------------------------------------- Index: build/parseScript.c --- build/parseScript.c 23 Jun 2002 19:47:12 -0000 1.1.1.12 +++ build/parseScript.c 30 Jan 2004 17:06:29 -0000 1.3 @@ -156,6 +156,14 @@ progtag = RPMTAG_TRIGGERSCRIPTPROG; partname = "%triggerpostun"; break; +#ifdef OPENPKG + case PART_TEST: + tag = RPMTAG_TEST; + tagflags = RPMSENSE_SCRIPT_TEST; + progtag = RPMTAG_TESTPROG; + partname = "%test"; + break; +#endif } /*@=branchstate@*/ @@ -303,6 +312,11 @@ case PART_VERIFYSCRIPT: pkg->verifyFile = xstrdup(file); break; +#ifdef OPENPKG + case PART_TEST: + pkg->testFile = xstrdup(file); + break; +#endif } } } +--------------------------------------------------------------------------- | Add support for the OpenPKG custom .spec file sections %track | (package build-time feature for performing vendor source tracking) | and %test (package install-time feature for performing package | run-time tests). +--------------------------------------------------------------------------- Index: build/parseSpec.c --- build/parseSpec.c 15 May 2003 13:38:57 -0000 1.1.1.15 +++ build/parseSpec.c 30 Jan 2004 17:06:30 -0000 1.2 @@ -43,6 +43,10 @@ { PART_TRIGGERIN, 0, "%triggerin"}, { PART_TRIGGERIN, 0, "%trigger"}, { PART_VERIFYSCRIPT, 0, "%verifyscript"}, +#ifdef OPENPKG + { PART_TRACK, 0, "%track"}, + { PART_TEST, 0, "%test"}, +#endif {0, 0, 0} }; @@ -489,6 +493,15 @@ parsePart = parseFiles(spec); /*@switchbreak@*/ break; +#ifdef OPENPKG + case PART_TRACK: + parsePart = parseBuildInstallClean(spec, parsePart); + /*@switchbreak@*/ break; + case PART_TEST: + parsePart = parseScript(spec, parsePart); + /*@switchbreak@*/ break; +#endif + case PART_NONE: /* XXX avoid gcc whining */ case PART_LAST: case PART_BUILDARCHITECTURES: +--------------------------------------------------------------------------- | Add support for the OpenPKG custom .spec file sections %track | (package build-time feature for performing vendor source tracking) | and %test (package install-time feature for performing package | run-time tests). +--------------------------------------------------------------------------- Index: build/poptBT.c --- build/poptBT.c 3 Mar 2003 20:04:12 -0000 1.1.1.3 +++ build/poptBT.c 30 Jan 2004 17:06:30 -0000 1.2 @@ -35,6 +35,9 @@ #define POPT_BL 0x626c #define POPT_BP 0x6270 #define POPT_BS 0x6273 +#ifdef OPENPKG +#define POPT_BT 0x6274 +#endif #define POPT_TA 0x7461 #define POPT_TB 0x7462 #define POPT_TC 0x7463 @@ -82,6 +85,9 @@ case POPT_BL: case POPT_BP: case POPT_BS: +#ifdef OPENPKG + case POPT_BT: +#endif case POPT_TA: case POPT_TB: case POPT_TC: @@ -177,6 +183,11 @@ { "bs", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BS, N_("build source package only from "), N_("") }, +#ifdef OPENPKG + { "bt", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BT, + N_("track versions of sources from "), + N_("") }, +#endif { "tp", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_TP, N_("build through %prep (unpack sources and apply patches) from "), +--------------------------------------------------------------------------- | Add support for the OpenPKG custom .spec file sections %track | (package build-time feature for performing vendor source tracking) | and %test (package install-time feature for performing package | run-time tests). +--------------------------------------------------------------------------- Index: build/rpmbuild.h --- build/rpmbuild.h 4 Mar 2003 17:03:07 -0000 1.1.1.13 +++ build/rpmbuild.h 30 Jan 2004 17:06:30 -0000 1.2 @@ -34,6 +34,9 @@ RPMBUILD_RMSOURCE = (1 << 8), /*!< Remove source(s) and patch(s). */ RPMBUILD_RMBUILD = (1 << 9), /*!< Remove build sub-tree. */ RPMBUILD_STRINGBUF = (1 << 10), /*!< only for doScript() */ +#ifdef OPENPKG + RPMBUILD_TRACK = (1 << 12), /*!< Execute %%track. */ +#endif RPMBUILD_RMSPEC = (1 << 11) /*!< Remove spec file. */ } rpmBuildFlags; /*@=typeuse@*/ @@ -69,7 +72,13 @@ PART_VERIFYSCRIPT = 16, /*!< */ PART_BUILDARCHITECTURES= 17,/*!< */ PART_TRIGGERPOSTUN = 18, /*!< */ +#ifdef OPENPKG + PART_TRACK = 19, /*!< */ + PART_TEST = 20, /*!< */ + PART_LAST = 21 /*!< */ +#else PART_LAST = 19 /*!< */ +#endif } rpmParseState; #define STRIP_NOTHING 0 +--------------------------------------------------------------------------- | Add support for the OpenPKG custom .spec file sections %track | (package build-time feature for performing vendor source tracking) | and %test (package install-time feature for performing package | run-time tests). +--------------------------------------------------------------------------- Index: build/rpmspec.h --- build/rpmspec.h 4 Mar 2003 15:30:23 -0000 1.1.1.11 +++ build/rpmspec.h 30 Jan 2004 17:06:30 -0000 1.2 @@ -164,6 +164,10 @@ StringBuf check; /*!< %check scriptlet. */ /*@only@*/ StringBuf clean; /*!< %clean scriptlet. */ +#ifdef OPENPKG +/*@only@*/ + StringBuf track; /*!< %track scriptlet. */ +#endif /*@owned@*/ Package packages; /*!< Package list. */ @@ -196,6 +200,10 @@ const char * postUnFile; /*!< %postun scriptlet. */ /*@only@*/ const char * verifyFile; /*!< %verifyscript scriptlet. */ +#ifdef OPENPKG +/*@only@*/ + const char * testFile; /*!< %test scriptlet. */ +#endif /*@only@*/ StringBuf specialDoc; +--------------------------------------------------------------------------- | Add support for the OpenPKG custom .spec file sections %track | (package build-time feature for performing vendor source tracking) | and %test (package install-time feature for performing package | run-time tests). +--------------------------------------------------------------------------- Index: build/spec.c --- build/spec.c 4 Mar 2003 15:25:51 -0000 1.1.1.21 +++ build/spec.c 30 Jan 2004 17:06:31 -0000 1.3 @@ -138,6 +138,9 @@ p->preUnFile = NULL; p->postUnFile = NULL; p->verifyFile = NULL; +#ifdef OPENPKG + p->testFile = NULL; +#endif p->specialDoc = NULL; @@ -444,6 +455,9 @@ spec->install = NULL; spec->check = NULL; spec->clean = NULL; +#ifdef OPENPKG + spec->track = NULL; +#endif spec->sources = NULL; spec->packages = NULL; @@ -491,6 +505,9 @@ spec->install = freeStringBuf(spec->install); spec->check = freeStringBuf(spec->check); spec->clean = freeStringBuf(spec->clean); +#ifdef OPENPKG + spec->track = freeStringBuf(spec->track); +#endif spec->buildRootURL = _free(spec->buildRootURL); spec->buildSubdir = _free(spec->buildSubdir); +--------------------------------------------------------------------------- | Add support for the OpenPKG custom .spec file sections %track | (package build-time feature for performing vendor source tracking) | and %test (package install-time feature for performing package | run-time tests). +--------------------------------------------------------------------------- Index: lib/rpmlib.h --- lib/rpmlib.h 19 Jun 2003 17:39:35 -0000 1.1.1.26 +++ lib/rpmlib.h 30 Jan 2004 17:06:31 -0000 1.2 @@ -414,6 +414,12 @@ RPMTAG_FILEDEPENDSN = 1144, RPMTAG_DEPENDSDICT = 1145, RPMTAG_SOURCEPKGID = 1146, +#ifdef OPENPKG + RPMTAG_TRACK = 1200, + RPMTAG_TEST = 1201, + RPMTAG_TESTPROG = 1202, + RPMTAG_CLASS = 1203, +#endif /*@-enummemuse@*/ RPMTAG_FIRSTFREE_TAG /*!< internal */ /*@=enummemuse@*/ @@ -488,6 +494,9 @@ RPMSENSE_SCRIPT_BUILD = (1 << 21), /*!< %build build dependency. */ RPMSENSE_SCRIPT_INSTALL = (1 << 22),/*!< %install build dependency. */ RPMSENSE_SCRIPT_CLEAN = (1 << 23), /*!< %clean build dependency. */ +#ifdef OPENPKG + RPMSENSE_SCRIPT_TEST = (1 << 29), /*!< %test build dependency. */ +#endif RPMSENSE_RPMLIB = ((1 << 24) | RPMSENSE_PREREQ), /*!< rpmlib(feature) dependency. */ /*@-enummemuse@*/ RPMSENSE_TRIGGERPREIN = (1 << 25), /*!< @todo Implement %triggerprein. */ +--------------------------------------------------------------------------- | Add support for the OpenPKG custom .spec file sections %track | (package build-time feature for performing vendor source tracking) | and %test (package install-time feature for performing package | run-time tests). | Additionally, add support for "Class" header. +--------------------------------------------------------------------------- Index: rpmdb/tagtbl.c --- rpmdb/tagtbl.c 2 Jul 2003 20:20:27 -0000 1.1.1.4 +++ rpmdb/tagtbl.c 30 Jan 2004 17:06:32 -0000 1.2 @@ -135,6 +135,12 @@ { "RPMTAG_FILEDEPENDSN", 1144, }, { "RPMTAG_DEPENDSDICT", 1145, }, { "RPMTAG_SOURCEPKGID", 1146, }, +#ifdef OPENPKG + { "RPMTAG_TRACK", 1200, }, + { "RPMTAG_TEST", 1201, }, + { "RPMTAG_TESTPROG", 1202, }, + { "RPMTAG_CLASS", 1203, }, +#endif { NULL, 0 } }; +--------------------------------------------------------------------------- | Add support for "Class" header. +--------------------------------------------------------------------------- Index: build/parsePreamble.c --- build/parsePreamble.c 3 Mar 2003 20:46:34 -0000 1.1.1.13 +++ build/parsePreamble.c 6 Feb 2004 15:37:58 -0000 1.3 @@ -21,6 +21,7 @@ RPMTAG_LICENSE, RPMTAG_PACKAGER, RPMTAG_DISTRIBUTION, + RPMTAG_CLASS, RPMTAG_DISTURL, RPMTAG_VENDOR, RPMTAG_ICON, @@ -327,6 +328,7 @@ { RPMTAG_VENDOR, "%{vendor}" }, { RPMTAG_PACKAGER, "%{packager}" }, { RPMTAG_DISTRIBUTION, "%{distribution}" }, + { RPMTAG_CLASS, "%{class}" }, { RPMTAG_DISTURL, "%{disturl}" }, { -1, NULL } }; @@ -537,6 +547,7 @@ (void) stashSt(spec, pkg->header, tag, lang); /*@fallthrough@*/ case RPMTAG_DISTRIBUTION: + case RPMTAG_CLASS: case RPMTAG_VENDOR: case RPMTAG_LICENSE: case RPMTAG_PACKAGER: @@ -743,6 +754,7 @@ {RPMTAG_LICENSE, 0, 0, "copyright"}, {RPMTAG_LICENSE, 0, 0, "license"}, {RPMTAG_DISTRIBUTION, 0, 0, "distribution"}, + {RPMTAG_CLASS, 0, 0, "class"}, {RPMTAG_DISTURL, 0, 0, "disturl"}, {RPMTAG_VENDOR, 0, 0, "vendor"}, {RPMTAG_GROUP, 0, 1, "group"},