diff --git a/.cvsignore b/.cvsignore index 4f4463d..88a53a0 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -rpm-4.7.2.tar.bz2 +rpm-4.8.0-beta1.tar.bz2 diff --git a/desktop-file.prov b/desktop-file.prov deleted file mode 100755 index ead3c13..0000000 --- a/desktop-file.prov +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh -# -# Transform desktop mimetype info into RPM mimehandler(type) provides -# -# Author: Richard Hughes -# Based on other provides scripts from RPM - -OLD_IFS="$IFS" -while read instfile ; do - case "$instfile" in - *.desktop) - mime=`cat $instfile | grep MimeType= | cut -d'=' -f2` - IFS=';' - for type in $mime ; do - echo 'mimehandler('$type')' - done - ;; - esac -done -IFS=$OLD_IFS - diff --git a/fontconfig.prov b/fontconfig.prov deleted file mode 100755 index 8638680..0000000 --- a/fontconfig.prov +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -# -# Script to install in: -# /usr/lib/rpm/redhat/find-provides.d -# -# Transform font files into RPM provides -# Requires fontconfig >= 2.6.90 -# -# Author: Behdad Esfahbod -# Based on other provides scripts from RPM -# - -fcquery=/usr/bin/fc-query - -[ -x $fcquery ] || exit 0 - -# filter out anything outside main fontconfig path -grep /usr/share/fonts/ | -while read fn; do - $fcquery --format '%{=pkgkit}' "${fn}" 2> /dev/null -done diff --git a/rpm-4.6.0-fedora-specspo.patch b/rpm-4.6.0-fedora-specspo.patch deleted file mode 100644 index 7872041..0000000 --- a/rpm-4.6.0-fedora-specspo.patch +++ /dev/null @@ -1,96 +0,0 @@ -diff --git a/lib/tagexts.c b/lib/tagexts.c -index 501d8ac..cf71639 100644 ---- a/lib/tagexts.c -+++ b/lib/tagexts.c -@@ -460,12 +460,6 @@ static int filerequireTag(Header h, rpmtd td) - } - - /* I18N look aside diversions */ -- --#if defined(ENABLE_NLS) --extern int _nl_msg_cat_cntr; /* XXX GNU gettext voodoo */ --#endif --static const char * const language = "LANGUAGE"; -- - static const char * const _macro_i18ndomains = "%{?_i18ndomains}"; - - /** -@@ -477,63 +471,27 @@ static const char * const _macro_i18ndomains = "%{?_i18ndomains}"; - */ - static int i18nTag(Header h, rpmTag tag, rpmtd td) - { -- char * dstring = rpmExpand(_macro_i18ndomains, NULL); -- int rc; -+ int rc = headerGet(h, tag, td, HEADERGET_ALLOC); -+ if (rc) { -+ char *de, *dstring = rpmExpand(_macro_i18ndomains, NULL); -+ const char *domain; - -- td->type = RPM_STRING_TYPE; -- td->data = NULL; -- td->count = 0; -- -- if (dstring && *dstring) { -- char *domain, *de; -- const char * langval; -- char * msgkey; -- const char * msgid; -- const char * n; -- int xx; -- -- xx = headerNVR(h, &n, NULL, NULL); -- rasprintf(&msgkey, "%s(%s)", n, rpmTagGetName(tag)); -- -- /* change to en_US for msgkey -> msgid resolution */ -- langval = getenv(language); -- (void) setenv(language, "en_US", 1); --#if defined(ENABLE_NLS) -- ++_nl_msg_cat_cntr; --#endif -- -- msgid = NULL; - for (domain = dstring; domain != NULL; domain = de) { -+ const char *msgid = td->data; -+ const char *msg = NULL; -+ - de = strchr(domain, ':'); - if (de) *de++ = '\0'; -- msgid = dgettext(domain, msgkey); -- if (msgid != msgkey) break; -- } -- -- /* restore previous environment for msgid -> msgstr resolution */ -- if (langval) -- (void) setenv(language, langval, 1); -- else -- unsetenv(language); --#if defined(ENABLE_NLS) -- ++_nl_msg_cat_cntr; --#endif -- -- if (domain && msgid) { -- td->data = dgettext(domain, msgid); -- td->data = xstrdup(td->data); /* XXX xstrdup has side effects. */ -- td->count = 1; -- td->flags = RPMTD_ALLOCED; -+ msg = dgettext(domain, td->data); -+ if (msg != msgid) { -+ free(td->data); -+ td->data = xstrdup(msg); -+ break; -+ } - } -- dstring = _free(dstring); -- free(msgkey); -- if (td->data) -- return 1; -+ free(dstring); - } -- -- dstring = _free(dstring); -- -- rc = headerGet(h, tag, td, HEADERGET_DEFAULT); -+ - return rc; - } - diff --git a/rpm-4.7.0-devel-autodep.patch b/rpm-4.7.0-devel-autodep.patch deleted file mode 100644 index dc4fe1f..0000000 --- a/rpm-4.7.0-devel-autodep.patch +++ /dev/null @@ -1,157 +0,0 @@ -diff -up rpm-4.7.0.git9101/build/rpmfc.c.devel-autodep rpm-4.7.0.git9101/build/rpmfc.c ---- rpm-4.7.0.git9101/build/rpmfc.c.devel-autodep 2009-04-03 09:26:59.000000000 +0300 -+++ rpm-4.7.0.git9101/build/rpmfc.c 2009-04-03 11:34:44.000000000 +0300 -@@ -505,7 +505,7 @@ static const struct rpmfcTokens_s const - { "ASCII text", RPMFC_WHITE|RPMFC_INCLUDE }, - { "ISO-8859 text", RPMFC_WHITE|RPMFC_INCLUDE }, - -- { "symbolic link to", RPMFC_SYMLINK }, -+ { "symbolic link to", RPMFC_SYMLINK|RPMFC_INCLUDE }, - { "socket", RPMFC_DEVICE }, - { "special", RPMFC_DEVICE }, - { " text", RPMFC_TEXT }, -@@ -667,6 +667,105 @@ rpmds rpmfcRequires(rpmfc fc) - - - /** -+ * Ensure that symlinks for shared libs generate a dep on the shared lib -+ * @param fc file classifier -+ * @return 0 on success -+ */ -+static int rpmfcSYMLINK(rpmfc fc) -+{ -+ const char * fn = fc->fn[fc->ix]; -+ struct stat sb; -+ int fdno; -+ -+ if (fc->skipReq) -+ return 0; -+ -+ if (stat(fn, &sb) < 0) -+ return -1; -+ if (S_ISLNK(sb.st_mode)) -+ return -1; -+ -+ fdno = open(fn, O_RDONLY); -+ if (fdno < 0) { -+ return fdno; -+ } -+ -+#if HAVE_GELF_H && HAVE_LIBELF -+ Elf * elf = NULL; -+ GElf_Ehdr ehdr_mem, * ehdr; -+ int isElf64 = 0; -+ int i, cnt; -+ char * soname = NULL; -+ rpmds ds; -+ -+ (void) elf_version(EV_CURRENT); -+ elf = NULL; -+ if ((elf = elf_begin (fdno, ELF_C_READ_MMAP, NULL)) == NULL -+ || elf_kind(elf) != ELF_K_ELF -+ || (ehdr = gelf_getehdr(elf, &ehdr_mem)) == NULL -+ || ehdr->e_type != ET_DYN) -+ goto exit; -+ -+/* alpha uses /lib, not /lib64 so don't add (64bit) deps */ -+#if !defined(__alpha__) -+ isElf64 = ehdr->e_ident[EI_CLASS] == ELFCLASS64; -+#endif -+ -+ for (i = 0; i < ehdr->e_phnum; ++i) { -+ GElf_Phdr phdr_mem; -+ GElf_Phdr *phdr = gelf_getphdr (elf, i, &phdr_mem); -+ GElf_Shdr shdr_mem; -+ Elf_Data * data = NULL; -+ Elf_Scn * scn; -+ GElf_Shdr *shdr; -+ -+ if (phdr == NULL || phdr->p_type != PT_DYNAMIC) -+ continue; -+ -+ scn = gelf_offscn(elf, phdr->p_offset); -+ shdr = gelf_getshdr(scn, &shdr_mem); -+ -+ if (shdr != NULL && shdr->sh_type == SHT_DYNAMIC) -+ data = elf_getdata (scn, NULL); -+ if (data == NULL) -+ continue; -+ -+ for (cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) { -+ GElf_Dyn dynmem; -+ GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dynmem); -+ char *depname = NULL; -+ -+ if (dyn == NULL) -+ break; -+ if (dyn->d_tag != DT_SONAME) -+ continue; -+ -+ /* add the soname to package deps */ -+ soname = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val); -+ if (soname == NULL) -+ break; -+ -+ rasprintf(&depname, "%s%s", soname, isElf64 ? "()(64bit)" : ""); -+ /* Add to package dependencies. */ -+ ds = rpmdsSingle(RPMTAG_REQUIRENAME, depname, "", -+ RPMSENSE_FIND_REQUIRES); -+ free(depname); -+ -+ rpmdsMerge(&fc->requires, ds); -+ rpmfcAddFileDep(&fc->ddict, fc->ix, ds); -+ ds = rpmdsFree(ds); -+ break; -+ } -+ } -+exit: -+ if (elf) (void) elf_end(elf); -+ close(fdno); -+ return 0; -+#endif -+ return -1; -+} -+ -+/** - * Extract script dependencies. - * @param fc file classifier - * @return 0 on success -@@ -1097,6 +1196,7 @@ static const struct rpmfcApplyTbl_s cons - { rpmfcSCRIPT, (RPMFC_SCRIPT|RPMFC_BOURNE| - RPMFC_PERL|RPMFC_PYTHON|RPMFC_MONO| - RPMFC_PKGCONFIG|RPMFC_LIBTOOL) }, -+ { rpmfcSYMLINK, RPMFC_SYMLINK }, - { NULL, 0 } - }; - -@@ -1117,6 +1217,7 @@ rpmRC rpmfcApply(rpmfc fc) - int ix; - int i; - int xx; -+ int skipping = 0; - - /* Generate package and per-file dependencies. */ - for (fc->ix = 0; fc->fn[fc->ix] != NULL; fc->ix++) { -@@ -1171,11 +1272,13 @@ rpmRC rpmfcApply(rpmfc fc) - default: - break; - case 'P': -+ skipping = fc->skipProv; - ds = rpmdsSingle(RPMTAG_PROVIDENAME, N, EVR, Flags); - dix = rpmdsFind(fc->provides, ds); - ds = rpmdsFree(ds); - break; - case 'R': -+ skipping = fc->skipReq; - ds = rpmdsSingle(RPMTAG_REQUIRENAME, N, EVR, Flags); - dix = rpmdsFind(fc->requires, ds); - ds = rpmdsFree(ds); -@@ -1197,7 +1300,7 @@ assert(dix >= 0); - previx = ix; - xx = argiAdd(&fc->fddictx, ix, argiCount(fc->ddictx)-1); - } -- if (fc->fddictn && fc->fddictn->vals) -+ if (fc->fddictn && fc->fddictn->vals && !skipping) - fc->fddictn->vals[ix]++; - } - diff --git a/rpm-4.7.0-extra-provides.patch b/rpm-4.7.0-extra-provides.patch deleted file mode 100644 index b20a2a3..0000000 --- a/rpm-4.7.0-extra-provides.patch +++ /dev/null @@ -1,96 +0,0 @@ -diff --git a/build/rpmfc.c b/build/rpmfc.c -index 1bb1c3b..4e57869 100644 ---- a/build/rpmfc.c -+++ b/build/rpmfc.c -@@ -484,6 +484,7 @@ static const struct rpmfcTokens_s const rpmfcTokens[] = { - { "RPM v4", RPMFC_ARCHIVE|RPMFC_INCLUDE }, - - { " image", RPMFC_IMAGE|RPMFC_INCLUDE }, -+ { " font metrics", RPMFC_WHITE|RPMFC_INCLUDE }, - { " font", RPMFC_FONT|RPMFC_INCLUDE }, - { " Font", RPMFC_FONT|RPMFC_INCLUDE }, - -@@ -496,19 +497,14 @@ static const struct rpmfcTokens_s const rpmfcTokens[] = { - { "SGML", RPMFC_WHITE|RPMFC_INCLUDE }, - { "XML", RPMFC_WHITE|RPMFC_INCLUDE }, - -- { " program text", RPMFC_WHITE|RPMFC_INCLUDE }, - { " source", RPMFC_WHITE|RPMFC_INCLUDE }, - { "GLS_BINARY_LSB_FIRST", RPMFC_WHITE|RPMFC_INCLUDE }, - { " DB ", RPMFC_WHITE|RPMFC_INCLUDE }, - -- { "ASCII English text", RPMFC_WHITE|RPMFC_INCLUDE }, -- { "ASCII text", RPMFC_WHITE|RPMFC_INCLUDE }, -- { "ISO-8859 text", RPMFC_WHITE|RPMFC_INCLUDE }, -- - { "symbolic link to", RPMFC_SYMLINK|RPMFC_INCLUDE }, - { "socket", RPMFC_DEVICE }, - { "special", RPMFC_DEVICE }, -- { " text", RPMFC_TEXT }, -+ { " text", RPMFC_TEXT|RPMFC_INCLUDE }, - - { "ASCII", RPMFC_WHITE }, - { "ISO-8859", RPMFC_WHITE }, -@@ -1184,6 +1180,31 @@ exit: - #endif - } - -+static int rpmfcMISC(rpmfc fc) -+{ -+ struct stat st; -+ int rc = -1; -+ const char *what = NULL; -+ const char * fn = fc->fn[fc->ix]; -+ /* this part is enumerated, compare equality not bit flags */ -+ int ftype = fc->fcolor->vals[fc->ix] & 0x000F0000; -+ -+ if (ftype == RPMFC_FONT) { -+ what = "fontconfig"; -+ } else if (ftype == RPMFC_TEXT && rpmFileHasSuffix(fn, ".desktop")) { -+ what = "desktop"; -+ } -+ -+ if (what == NULL || stat(fn, &st) < 0 || !S_ISREG(st.st_mode)) { -+ goto exit; -+ } -+ -+ (void) rpmfcHelper(fc, 'P', what); -+ rc = 0; -+ -+exit: -+ return rc; -+} - typedef const struct rpmfcApplyTbl_s { - int (*func) (rpmfc fc); - int colormask; -@@ -1196,6 +1217,7 @@ static const struct rpmfcApplyTbl_s const rpmfcApplyTable[] = { - { rpmfcSCRIPT, (RPMFC_SCRIPT|RPMFC_BOURNE| - RPMFC_PERL|RPMFC_PYTHON|RPMFC_MONO| - RPMFC_PKGCONFIG|RPMFC_LIBTOOL) }, -+ { rpmfcMISC, RPMFC_FONT|RPMFC_TEXT }, - { rpmfcSYMLINK, RPMFC_SYMLINK }, - { NULL, 0 } - }; -@@ -1315,7 +1337,7 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode) - size_t slen; - int fcolor; - int xx; -- int msflags = MAGIC_CHECK; /* XXX MAGIC_COMPRESS flag? */ -+ int msflags = MAGIC_CHECK | MAGIC_COMPRESS | MAGIC_NO_CHECK_TOKENS; - magic_t ms = NULL; - - if (fc == NULL || argv == NULL) -diff --git a/macros.in b/macros.in -index c187f62..945e89b 100644 ---- a/macros.in -+++ b/macros.in -@@ -489,6 +489,9 @@ print (t)\ - %__pkgconfig_provides %{_rpmconfigdir}/pkgconfigdeps.sh --provides - %__pkgconfig_requires %{_rpmconfigdir}/pkgconfigdeps.sh --requires - -+%__fontconfig_provides %{_rpmconfigdir}/fontconfig.prov -+%__desktop_provides %{_rpmconfigdir}/desktop-file.prov -+ - #============================================================================== - # ---- Database configuration macros. - # Macros used to configure Berkley db parameters. diff --git a/rpm-4.7.1-bugurl.patch b/rpm-4.7.1-bugurl.patch deleted file mode 100644 index 6851070..0000000 --- a/rpm-4.7.1-bugurl.patch +++ /dev/null @@ -1,95 +0,0 @@ -diff -up rpm-4.7.1/build/files.c.bugurl rpm-4.7.1/build/files.c ---- rpm-4.7.1/build/files.c.bugurl 2009-07-21 09:42:51.000000000 +0300 -+++ rpm-4.7.1/build/files.c 2009-09-15 11:37:45.000000000 +0300 -@@ -1977,6 +1977,7 @@ static const rpmTag sourceTags[] = { - RPMTAG_CHANGELOGNAME, - RPMTAG_CHANGELOGTEXT, - RPMTAG_URL, -+ RPMTAG_BUGURL, - HEADER_I18NTABLE, - 0 - }; -diff -up rpm-4.7.1/build/parsePreamble.c.bugurl rpm-4.7.1/build/parsePreamble.c ---- rpm-4.7.1/build/parsePreamble.c.bugurl 2009-06-23 14:40:57.000000000 +0300 -+++ rpm-4.7.1/build/parsePreamble.c 2009-09-15 11:37:45.000000000 +0300 -@@ -32,6 +32,7 @@ static const rpmTag copyTagsDuringParse[ - RPMTAG_CHANGELOGTEXT, - RPMTAG_PREFIXES, - RPMTAG_DISTTAG, -+ RPMTAG_BUGURL, - 0 - }; - -@@ -307,6 +308,7 @@ static struct optionalTag { - { RPMTAG_PACKAGER, "%{packager}" }, - { RPMTAG_DISTRIBUTION, "%{distribution}" }, - { RPMTAG_DISTURL, "%{disturl}" }, -+ { RPMTAG_BUGURL, "%{bugurl}" }, - { -1, NULL } - }; - -@@ -501,6 +503,7 @@ static int handlePreambleTag(rpmSpec spe - } - case RPMTAG_URL: - case RPMTAG_DISTTAG: -+ case RPMTAG_BUGURL: - SINGLE_TOKEN_ONLY; - /* These macros are for backward compatibility */ - if (tag == RPMTAG_VERSION) { -@@ -734,6 +737,7 @@ static struct PreambleRec_s preambleList - {RPMTAG_AUTOPROV, 0, 0, 0, "autoprov"}, - {RPMTAG_DOCDIR, 0, 0, 0, "docdir"}, - {RPMTAG_DISTTAG, 0, 0, 0, "disttag"}, -+ {RPMTAG_BUGURL, 0, 0, 0, "bugurl"}, - /* LCL: can't add null annotation */ - {0, 0, 0, 0, 0} - }; -diff -up rpm-4.7.1/lib/rpmtag.h.bugurl rpm-4.7.1/lib/rpmtag.h ---- rpm-4.7.1/lib/rpmtag.h.bugurl 2009-06-23 14:40:57.000000000 +0300 -+++ rpm-4.7.1/lib/rpmtag.h 2009-09-15 11:37:45.000000000 +0300 -@@ -282,6 +282,7 @@ typedef enum rpmTag_e { - RPMTAG_LONGSIZE = 5009, /* l */ - RPMTAG_FILECAPS = 5010, /* s[] */ - RPMTAG_FILEDIGESTALGO = 5011, /* i file digest algorithm */ -+ RPMTAG_BUGURL = 5012, /* s */ - - RPMTAG_FIRSTFREE_TAG /*!< internal */ - } rpmTag; -diff -up rpm-4.7.1/macros.in.bugurl rpm-4.7.1/macros.in ---- rpm-4.7.1/macros.in.bugurl 2009-09-15 11:37:45.000000000 +0300 -+++ rpm-4.7.1/macros.in 2009-09-15 11:37:45.000000000 +0300 -@@ -264,6 +264,12 @@ package or when debugging this package.\ - # - #%disturl - -+# Configurable bug URL, same as BugURL: tag in a specfile. -+# The URL will be used to supply reliable information to where -+# to file bugs. -+# -+#%bugurl -+ - # Boolean (i.e. 1 == "yes", 0 == "no") that controls whether files - # marked as %doc should be installed. - #%_excludedocs -diff -up rpm-4.7.1/tests/rpmgeneral.at.bugurl rpm-4.7.1/tests/rpmgeneral.at ---- rpm-4.7.1/tests/rpmgeneral.at.bugurl 2009-06-23 14:40:59.000000000 +0300 -+++ rpm-4.7.1/tests/rpmgeneral.at 2009-09-15 11:37:45.000000000 +0300 -@@ -71,6 +71,7 @@ AT_CHECK([run rpm --querytags],[0], - [ARCH - ARCHIVESIZE - BASENAMES -+BUGURL - BUILDARCHS - BUILDHOST - BUILDTIME -diff -up rpm-4.7.1/tests/rpmtests.bugurl rpm-4.7.1/tests/rpmtests ---- rpm-4.7.1/tests/rpmtests.bugurl 2009-09-15 11:38:00.000000000 +0300 -+++ rpm-4.7.1/tests/rpmtests 2009-09-15 11:38:10.000000000 +0300 -@@ -2165,6 +2165,7 @@ at_func_diff_devnull "$at_stderr" || at_ - echo >>"$at_stdout"; $as_echo "ARCH - ARCHIVESIZE - BASENAMES -+BUGURL - BUILDARCHS - BUILDHOST - BUILDTIME diff --git a/rpm-4.7.1-python-bytecompile.patch b/rpm-4.7.1-python-bytecompile.patch deleted file mode 100644 index e25adc6..0000000 --- a/rpm-4.7.1-python-bytecompile.patch +++ /dev/null @@ -1,74 +0,0 @@ -commit 5463570061a7ca9ed947885b516c2551778b636f -Author: Panu Matilainen -Date: Tue Oct 27 16:07:43 2009 +0200 - - Support multiple python versions in brp-python-bytecompile (RhBug:53117) - - For *.py files in python library path, use matching python interpreter - version for compiling, this is especially needed for Python 3 which - is very different from Python 2 code. And even if the code compiled - with a wrong version, it would be recompiled at run-time when invoked - with the intended python version, causing verification errors etc. - - For *.py files outside the library path, use "system python" which - might not be always correct but we dont really know any better. - - Patch from David Malcolm - -diff --git a/scripts/brp-python-bytecompile b/scripts/brp-python-bytecompile -index 6405c5e..1faa6db 100644 ---- a/scripts/brp-python-bytecompile -+++ b/scripts/brp-python-bytecompile -@@ -6,8 +6,8 @@ if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then - fi - - # If we don't have a python interpreter, avoid changing anything. --python=${1:-/usr/bin/python} --if [ ! -x "$python" ]; then -+default_python=${1:-/usr/bin/python} -+if [ ! -x "$default_python" ]; then - exit 0 - fi - -@@ -19,8 +19,37 @@ if [ -z "$depth" -o "$depth" -le "1" ]; then - exit 0 - fi - -+# .pyc/.pyo files embed a "magic" value, identifying the ABI version of Python -+# bytecode that they are for. -+# -+# The files below RPM_BUILD_ROOT could be targetting multiple versions of -+# python (e.g. a single build that emits several subpackages e.g. a -+# python26-foo subpackage, a python31-foo subpackage etc) -+# -+# Support this by assuming that below each /usr/lib/python$VERSION/, all -+# .pyc/.pyo files are to be compiled for /usr/bin/python$VERSION. -+# -+# For example, below /usr/lib/python2.6/, we're targetting /usr/bin/python2.6 -+# and below /usr/lib/python3.1/, we're targetting /usr/bin/python3.1 -+ -+for python_libdir in $RPM_BUILD_ROOT/usr/lib*/python*/ ; -+do -+ python_binary=/usr/bin/$(basename $python_libdir) -+ echo "Bytecompiling .py files below $python_libdir using $python_binary" -+ -+ # Generate normal (.pyc) byte-compiled files. -+ $python_binary -c 'import compileall; compileall.compile_dir("'"$python_libdir"'", '"$depth"', "/", force=1, quiet=1)' -+ -+ # Generate optimized (.pyo) byte-compiled files. -+ $python_binary -O -c 'import compileall; compileall.compile_dir("'"$python_libdir"'", '"$depth"', "/", force=1, quiet=1)' -+done -+ -+ -+# Handle other locations in the filesystem using the default python -+# implementation: -+ - # Generate normal (.pyc) byte-compiled files. --$python -c 'import compileall, re, sys; sys.exit (not compileall.compile_dir("'"$RPM_BUILD_ROOT"'", '"$depth"', "/", 1, re.compile(r"'"/bin/|/sbin/"'"), quiet=1))' -+$default_python -c 'import compileall, re, sys; sys.exit (not compileall.compile_dir("'"$RPM_BUILD_ROOT"'", '"$depth"', "/", 1, re.compile(r"'"/bin/|/sbin/|/usr/lib.*/python.+/"'"), quiet=1))' - if [ $? != 0 ]; then - # One or more of the files had a syntax error - # XXX TODO: parametrize the exit code, only warn for now -@@ -28,4 +57,4 @@ if [ $? != 0 ]; then - fi - - # Generate optimized (.pyo) byte-compiled files. --$python -O -c 'import compileall, re; compileall.compile_dir("'"$RPM_BUILD_ROOT"'", '"$depth"', "/", 1, re.compile(r"'"/bin/|/sbin/"'"))' > /dev/null -+$default_python -O -c 'import compileall, re; compileall.compile_dir("'"$RPM_BUILD_ROOT"'", '"$depth"', "/", 1, re.compile(r"'"/bin/|/sbin/|/usr/lib.*/python.+/"'"))' > /dev/null diff --git a/rpm-4.7.2-chmod-selinux.patch b/rpm-4.7.2-chmod-selinux.patch deleted file mode 100644 index 34d47eb..0000000 --- a/rpm-4.7.2-chmod-selinux.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up rpm-4.7.2/configure.ac.chmod-test rpm-4.7.2/configure.ac ---- rpm-4.7.2/configure.ac.chmod-test 2009-11-25 09:19:30.000000000 +0200 -+++ rpm-4.7.2/configure.ac 2009-12-04 11:23:39.000000000 +0200 -@@ -61,7 +61,7 @@ AC_MSG_CHECKING(POSIX chmod) - touch foo.chmodtest - chmod 744 foo.chmodtest - chmod +X foo.chmodtest 2>/dev/null --a=`ls -l foo.chmodtest | awk '{print $1}'` -+a=`ls -l foo.chmodtest | awk '{print substr($1,1,10)}'` - rm -f foo.chmodtest - if test "$a" = "-rwxr-xr-x"; then - AC_MSG_RESULT(yes) diff --git a/rpm-4.7.2-pgp-subkey.patch b/rpm-4.7.2-pgp-subkey.patch deleted file mode 100644 index 568383c..0000000 --- a/rpm-4.7.2-pgp-subkey.patch +++ /dev/null @@ -1,37 +0,0 @@ -commit 6eeb0bb06466d9eb75eb55efd514d3ecfe089042 -Author: Panu Matilainen -Date: Wed Nov 25 15:07:17 2009 +0200 - - We can't handle OpenPGP subkeys or secret keys, so dont even try - - parsing subkeys ends up overwriting data in the main key, causing - bogus signature checking failures - - this is the final missing piece of RhBug:436812, short of adding - proper support for subkeys (maybe someday...) - (cherry picked from commit 98213fc4192c7af07037a0f3e9cce9e3b8509c02) - -diff --git a/rpmio/rpmpgp.c b/rpmio/rpmpgp.c -index d7bbb5e..f76fc2b 100644 ---- a/rpmio/rpmpgp.c -+++ b/rpmio/rpmpgp.c -@@ -1190,11 +1190,6 @@ static int pgpPrtPkt(const uint8_t *pkt, size_t pleft, - else - memset(_digp->signid, 0, sizeof(_digp->signid)); - } -- case PGPTAG_PUBLIC_SUBKEY: -- rc = pgpPrtKey(tag, h, hlen, _dig, _digp); -- break; -- case PGPTAG_SECRET_KEY: -- case PGPTAG_SECRET_SUBKEY: - rc = pgpPrtKey(tag, h, hlen, _dig, _digp); - break; - case PGPTAG_USER_ID: -@@ -1205,6 +1200,9 @@ static int pgpPrtPkt(const uint8_t *pkt, size_t pleft, - rc = pgpPrtComment(tag, h, hlen); - break; - -+ case PGPTAG_PUBLIC_SUBKEY: -+ case PGPTAG_SECRET_KEY: -+ case PGPTAG_SECRET_SUBKEY: - case PGPTAG_RESERVED: - case PGPTAG_PUBLIC_SESSION_KEY: - case PGPTAG_SYMMETRIC_SESSION_KEY: diff --git a/rpm-4.7.2-rpmfc-unknown.patch b/rpm-4.7.2-rpmfc-unknown.patch deleted file mode 100644 index 418b16b..0000000 --- a/rpm-4.7.2-rpmfc-unknown.patch +++ /dev/null @@ -1,43 +0,0 @@ -commit fa9fcc89146f08bce3b51d96d0ec9d4175db6978 -Author: Panu Matilainen -Date: Thu Nov 26 10:22:41 2009 +0200 - - Dont fail build on unrecognized non-executable files (ticket #105) - - Generally only executable files are critical for dependency extraction, - whereas oddball application data files can cause unnecessary build - failure due to libmagic misdetections etc, so just let non-executables - pass with a warning and mark them as unknown data - (cherry picked from commit cfcd1f9bd98d5d0fc46a84931984efec3b9d47e2) - -diff --git a/build/rpmfc.c b/build/rpmfc.c -index bcb5383..e4ba6b2 100644 ---- a/build/rpmfc.c -+++ b/build/rpmfc.c -@@ -1245,6 +1245,7 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode) - for (fc->ix = 0; fc->ix < fc->nfiles; fc->ix++) { - const char * ftype; - rpm_mode_t mode = (fmode ? fmode[fc->ix] : 0); -+ int is_executable = (mode & (S_IXUSR|S_IXGRP|S_IXOTH)); - - s = argv[fc->ix]; - slen = strlen(s); -@@ -1277,11 +1278,16 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode) - ftype = magic_file(ms, s); - - if (ftype == NULL) { -- rpmlog(RPMLOG_ERR, -+ rpmlog(is_executable ? RPMLOG_ERR : RPMLOG_WARNING, - _("Recognition of file \"%s\" failed: mode %06o %s\n"), - s, mode, magic_error(ms)); -- magic_close(ms); -- return RPMRC_FAIL; -+ /* only executable files are critical to dep extraction */ -+ if (is_executable) { -+ magic_close(ms); -+ return RPMRC_FAIL; -+ } -+ /* unrecognized non-executables get treated as "data" */ -+ ftype = "data"; - } - } - diff --git a/rpm-4.7.2-sign-passcheck.patch b/rpm-4.7.2-sign-passcheck.patch deleted file mode 100644 index 8369cef..0000000 --- a/rpm-4.7.2-sign-passcheck.patch +++ /dev/null @@ -1,34 +0,0 @@ -commit 31c5e0f9b7b09661611b50d84d26ba47ce97fffe -Author: Panu Matilainen -Date: Wed Nov 25 16:42:43 2009 +0200 - - Fix signature password checking result on abnormal conditions (RhBug:496754) - - Execve() failure wasn't returning an error code, causing rpm to - think the password was ok when we couldn't even try verifying - - Stricter return code checking from the password checking child: - the password can only be ok if the child exits with WIFEXITED() *and* - WIFEXITCODE() of 0. Also WIFEXITCODE() should only be called if - WIFEXITED() returns true. - (cherry picked from commit 2b41860984f0c4ebba5ebce93a18c9c0ca5e1065) - -diff --git a/lib/signature.c b/lib/signature.c -index a501f3e..a2eaf9b 100644 ---- a/lib/signature.c -+++ b/lib/signature.c -@@ -883,6 +883,7 @@ static int checkPassPhrase(const char * passPhrase, const rpmSigTag sigTag) - - rpmlog(RPMLOG_ERR, _("Could not exec %s: %s\n"), "gpg", - strerror(errno)); -+ _exit(EXIT_FAILURE); - } break; - case RPMSIGTAG_RSA: - case RPMSIGTAG_PGP5: /* XXX legacy */ -@@ -932,7 +933,7 @@ static int checkPassPhrase(const char * passPhrase, const rpmSigTag sigTag) - - (void) waitpid(pid, &status, 0); - -- return ((!WIFEXITED(status) || WEXITSTATUS(status)) ? 1 : 0); -+ return ((WIFEXITED(status) && WEXITSTATUS(status) == 0)) ? 0 : 1; - } - - char * rpmGetPassPhrase(const char * prompt, const rpmSigTag sigTag) diff --git a/rpm-4.7.90-devel-autodep.patch b/rpm-4.7.90-devel-autodep.patch new file mode 100644 index 0000000..84e5cee --- /dev/null +++ b/rpm-4.7.90-devel-autodep.patch @@ -0,0 +1,157 @@ +diff -up rpm-4.7.90.git9278/build/rpmfc.c.devel-autodep rpm-4.7.90.git9278/build/rpmfc.c +--- rpm-4.7.90.git9278/build/rpmfc.c.devel-autodep 2009-09-01 10:45:07.000000000 +0300 ++++ rpm-4.7.90.git9278/build/rpmfc.c 2009-09-01 11:00:15.000000000 +0300 +@@ -501,7 +501,7 @@ static const struct rpmfcTokens_s const + { "GLS_BINARY_LSB_FIRST", RPMFC_WHITE|RPMFC_INCLUDE }, + { " DB ", RPMFC_WHITE|RPMFC_INCLUDE }, + +- { "symbolic link to", RPMFC_SYMLINK }, ++ { "symbolic link to", RPMFC_SYMLINK|RPMFC_INCLUDE }, + { "socket", RPMFC_DEVICE }, + { "special", RPMFC_DEVICE }, + { " text", RPMFC_TEXT|RPMFC_INCLUDE }, +@@ -663,6 +663,105 @@ rpmds rpmfcRequires(rpmfc fc) + + + /** ++ * Ensure that symlinks for shared libs generate a dep on the shared lib ++ * @param fc file classifier ++ * @return 0 on success ++ */ ++static int rpmfcSYMLINK(rpmfc fc) ++{ ++ const char * fn = fc->fn[fc->ix]; ++ struct stat sb; ++ int fdno; ++ ++ if (fc->skipReq) ++ return 0; ++ ++ if (stat(fn, &sb) < 0) ++ return -1; ++ if (S_ISLNK(sb.st_mode)) ++ return -1; ++ ++ fdno = open(fn, O_RDONLY); ++ if (fdno < 0) { ++ return fdno; ++ } ++ ++#if HAVE_GELF_H && HAVE_LIBELF ++ Elf * elf = NULL; ++ GElf_Ehdr ehdr_mem, * ehdr; ++ int isElf64 = 0; ++ int i, cnt; ++ char * soname = NULL; ++ rpmds ds; ++ ++ (void) elf_version(EV_CURRENT); ++ elf = NULL; ++ if ((elf = elf_begin (fdno, ELF_C_READ_MMAP, NULL)) == NULL ++ || elf_kind(elf) != ELF_K_ELF ++ || (ehdr = gelf_getehdr(elf, &ehdr_mem)) == NULL ++ || ehdr->e_type != ET_DYN) ++ goto exit; ++ ++/* alpha uses /lib, not /lib64 so don't add (64bit) deps */ ++#if !defined(__alpha__) ++ isElf64 = ehdr->e_ident[EI_CLASS] == ELFCLASS64; ++#endif ++ ++ for (i = 0; i < ehdr->e_phnum; ++i) { ++ GElf_Phdr phdr_mem; ++ GElf_Phdr *phdr = gelf_getphdr (elf, i, &phdr_mem); ++ GElf_Shdr shdr_mem; ++ Elf_Data * data = NULL; ++ Elf_Scn * scn; ++ GElf_Shdr *shdr; ++ ++ if (phdr == NULL || phdr->p_type != PT_DYNAMIC) ++ continue; ++ ++ scn = gelf_offscn(elf, phdr->p_offset); ++ shdr = gelf_getshdr(scn, &shdr_mem); ++ ++ if (shdr != NULL && shdr->sh_type == SHT_DYNAMIC) ++ data = elf_getdata (scn, NULL); ++ if (data == NULL) ++ continue; ++ ++ for (cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) { ++ GElf_Dyn dynmem; ++ GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dynmem); ++ char *depname = NULL; ++ ++ if (dyn == NULL) ++ break; ++ if (dyn->d_tag != DT_SONAME) ++ continue; ++ ++ /* add the soname to package deps */ ++ soname = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val); ++ if (soname == NULL) ++ break; ++ ++ rasprintf(&depname, "%s%s", soname, isElf64 ? "()(64bit)" : ""); ++ /* Add to package dependencies. */ ++ ds = rpmdsSingle(RPMTAG_REQUIRENAME, depname, "", ++ RPMSENSE_FIND_REQUIRES); ++ free(depname); ++ ++ rpmdsMerge(&fc->requires, ds); ++ rpmfcAddFileDep(&fc->ddict, fc->ix, ds); ++ ds = rpmdsFree(ds); ++ break; ++ } ++ } ++exit: ++ if (elf) (void) elf_end(elf); ++ close(fdno); ++ return 0; ++#endif ++ return -1; ++} ++ ++/** + * Extract script dependencies. + * @param fc file classifier + * @return 0 on success +@@ -1118,6 +1217,7 @@ static const struct rpmfcApplyTbl_s cons + RPMFC_PERL|RPMFC_PYTHON|RPMFC_MONO|RPMFC_OCAML| + RPMFC_PKGCONFIG|RPMFC_LIBTOOL) }, + { rpmfcMISC, RPMFC_FONT|RPMFC_TEXT }, ++ { rpmfcSYMLINK, RPMFC_SYMLINK }, + { NULL, 0 } + }; + +@@ -1138,6 +1238,7 @@ rpmRC rpmfcApply(rpmfc fc) + int ix; + int i; + int xx; ++ int skipping = 0; + + /* Generate package and per-file dependencies. */ + for (fc->ix = 0; fc->fn[fc->ix] != NULL; fc->ix++) { +@@ -1192,11 +1293,13 @@ rpmRC rpmfcApply(rpmfc fc) + default: + break; + case 'P': ++ skipping = fc->skipProv; + ds = rpmdsSingle(RPMTAG_PROVIDENAME, N, EVR, Flags); + dix = rpmdsFind(fc->provides, ds); + ds = rpmdsFree(ds); + break; + case 'R': ++ skipping = fc->skipReq; + ds = rpmdsSingle(RPMTAG_REQUIRENAME, N, EVR, Flags); + dix = rpmdsFind(fc->requires, ds); + ds = rpmdsFree(ds); +@@ -1218,7 +1321,7 @@ assert(dix >= 0); + previx = ix; + xx = argiAdd(&fc->fddictx, ix, argiCount(fc->ddictx)-1); + } +- if (fc->fddictn && fc->fddictn->vals) ++ if (fc->fddictn && fc->fddictn->vals && !skipping) + fc->fddictn->vals[ix]++; + } + diff --git a/rpm-4.7.90-fedora-specspo.patch b/rpm-4.7.90-fedora-specspo.patch new file mode 100644 index 0000000..6f57d93 --- /dev/null +++ b/rpm-4.7.90-fedora-specspo.patch @@ -0,0 +1,92 @@ +diff -up rpm-4.7.90.git9301/lib/tagexts.c.fedora-specspo rpm-4.7.90.git9301/lib/tagexts.c +--- rpm-4.7.90.git9301/lib/tagexts.c.fedora-specspo 2009-09-02 13:59:38.000000000 +0300 ++++ rpm-4.7.90.git9301/lib/tagexts.c 2009-09-02 14:51:10.000000000 +0300 +@@ -460,12 +460,6 @@ static int filerequireTag(Header h, rpmt + } + + /* I18N look aside diversions */ +- +-#if defined(ENABLE_NLS) +-extern int _nl_msg_cat_cntr; /* XXX GNU gettext voodoo */ +-#endif +-static const char * const language = "LANGUAGE"; +- + static const char * const _macro_i18ndomains = "%{?_i18ndomains}"; + + /** +@@ -477,61 +471,27 @@ static const char * const _macro_i18ndom + */ + static int i18nTag(Header h, rpmTag tag, rpmtd td, headerGetFlags hgflags) + { +- char * dstring = rpmExpand(_macro_i18ndomains, NULL); +- int rc; +- +- td->type = RPM_STRING_TYPE; +- td->data = NULL; +- td->count = 0; +- +- if (dstring && *dstring) { +- char *domain, *de; +- const char * langval; +- char * msgkey; +- const char * msgid; +- +- rasprintf(&msgkey, "%s(%s)", headerGetString(h, RPMTAG_NAME), +- rpmTagGetName(tag)); +- +- /* change to en_US for msgkey -> msgid resolution */ +- langval = getenv(language); +- (void) setenv(language, "en_US", 1); +-#if defined(ENABLE_NLS) +- ++_nl_msg_cat_cntr; +-#endif ++ int rc = headerGet(h, tag, td, HEADERGET_ALLOC); ++ if (rc) { ++ char *de, *dstring = rpmExpand(_macro_i18ndomains, NULL); ++ const char *domain; + +- msgid = NULL; + for (domain = dstring; domain != NULL; domain = de) { ++ const char *msgid = td->data; ++ const char *msg = NULL; ++ + de = strchr(domain, ':'); + if (de) *de++ = '\0'; +- msgid = dgettext(domain, msgkey); +- if (msgid != msgkey) break; +- } +- +- /* restore previous environment for msgid -> msgstr resolution */ +- if (langval) +- (void) setenv(language, langval, 1); +- else +- unsetenv(language); +-#if defined(ENABLE_NLS) +- ++_nl_msg_cat_cntr; +-#endif +- +- if (domain && msgid) { +- td->data = dgettext(domain, msgid); +- td->data = xstrdup(td->data); /* XXX xstrdup has side effects. */ +- td->count = 1; +- td->flags = RPMTD_ALLOCED; ++ msg = dgettext(domain, td->data); ++ if (msg != msgid) { ++ free(td->data); ++ td->data = xstrdup(msg); ++ break; ++ } + } +- dstring = _free(dstring); +- free(msgkey); +- if (td->data) +- return 1; ++ free(dstring); + } + +- dstring = _free(dstring); +- +- rc = headerGet(h, tag, td, HEADERGET_ALLOC); + return rc; + } + diff --git a/rpm.spec b/rpm.spec index 1c012e9..357292c 100644 --- a/rpm.spec +++ b/rpm.spec @@ -11,9 +11,9 @@ %define rpmhome /usr/lib/rpm -%define rpmver 4.7.2 -%define snapver {nil} -%define srcver %{rpmver} +%define rpmver 4.8.0 +%define snapver beta1 +%define srcver %{rpmver}-%{snapver} %define bdbver 4.8.24 %define dbprefix db @@ -21,31 +21,22 @@ Summary: The RPM package management system Name: rpm Version: %{rpmver} -Release: 2%{?dist} +Release: 0.%{snapver}.1 Group: System Environment/Base Url: http://www.rpm.org/ -Source0: http://rpm.org/releases/rpm-4.7.x/%{name}-%{srcver}.tar.bz2 +Source0: http://rpm.org/releases/testing/%{name}-%{srcver}.tar.bz2 %if %{with int_bdb} Source1: db-%{bdbver}.tar.gz %endif -Source10: desktop-file.prov -Source11: fontconfig.prov -Patch0: rpm-4.7.0-devel-autodep.patch +Patch0: rpm-4.7.90-devel-autodep.patch Patch1: rpm-4.5.90-pkgconfig-path.patch Patch2: rpm-4.5.90-gstreamer-provides.patch # Fedora specspo is setup differently than what rpm expects, considering # this as Fedora-specific patch for now -Patch3: rpm-4.6.0-fedora-specspo.patch +Patch3: rpm-4.7.90-fedora-specspo.patch -# Patches already in upstream (but not in 4.7.x) -Patch200: rpm-4.7.1-bugurl.patch -Patch201: rpm-4.7.0-extra-provides.patch -Patch202: rpm-4.7.1-python-bytecompile.patch -Patch203: rpm-4.7.2-sign-passcheck.patch -Patch204: rpm-4.7.2-rpmfc-unknown.patch -Patch205: rpm-4.7.2-pgp-subkey.patch -Patch206: rpm-4.7.2-chmod-selinux.patch +# Patches already in upstream # These are not yet upstream Patch301: rpm-4.6.0-niagara.patch @@ -97,9 +88,6 @@ BuildRequires: xz-devel >= 4.999.8 BuildRequires: sqlite-devel %endif -# XXX temporarily for chmod-test patch -BuildRequires: autoconf - BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) %description @@ -157,6 +145,7 @@ Requires: elfutils >= 0.128 binutils Requires: findutils sed grep gawk diffutils file patch >= 2.5 Requires: unzip gzip bzip2 cpio lzma xz Requires: pkgconfig +Conflicts: ocaml-runtime < 3.11.1-7 %description build The rpm-build package contains the scripts and executable programs @@ -201,14 +190,6 @@ packages on a system. %patch2 -p1 -b .gstreamer-prov %patch3 -p1 -b .fedora-specspo -%patch200 -p1 -b .bugurl -%patch201 -p1 -b .extra-prov -%patch202 -p1 -b .python-bytecompile -%patch203 -p1 -b .sign-passcheck -%patch204 -p1 -b .rpmfc-unknown -%patch205 -p1 -b .pgp-subkey -%patch206 -p1 -b .chmod-test - %patch301 -p1 -b .niagara %patch302 -p1 -b .geode @@ -255,15 +236,13 @@ install -m 755 scripts/rpm.daily ${RPM_BUILD_ROOT}%{_sysconfdir}/cron.daily/rpm mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/logrotate.d install -m 644 scripts/rpm.log ${RPM_BUILD_ROOT}%{_sysconfdir}/logrotate.d/rpm -install -p -m 755 %{SOURCE10} %{SOURCE11} ${RPM_BUILD_ROOT}%{rpmhome}/ - mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/rpm mkdir -p $RPM_BUILD_ROOT/var/lib/rpm for dbi in \ Basenames Conflictname Dirnames Group Installtid Name Packages \ Providename Provideversion Requirename Requireversion Triggername \ - Filedigests Pubkeys Sha1header Sigmd5 \ + Filedigests Pubkeys Sha1header Sigmd5 Obsoletename \ __db.001 __db.002 __db.003 __db.004 __db.005 __db.006 __db.007 \ __db.008 __db.009 do @@ -377,6 +356,8 @@ exit 0 %{rpmhome}/javadeps %{rpmhome}/mono-find-provides %{rpmhome}/mono-find-requires +%{rpmhome}/ocaml-find-provides.sh +%{rpmhome}/ocaml-find-requires.sh %{rpmhome}/osgideps.pl %{rpmhome}/perldeps.pl %{rpmhome}/libtooldeps.sh @@ -422,6 +403,10 @@ exit 0 %doc doc/librpm/html/* %changelog +* Mon Dec 07 2009 Panu Matilainen - 4.8.0-0.beta1.1 +- update to 4.8.0-beta1 (http://rpm.org/wiki/Releases/4.8.0) +- rpm-build conflicts with current ocaml-runtime + * Fri Dec 04 2009 Panu Matilainen - 4.7.2-2 - missing error exit code from signing password checking (#496754) - dont fail build on unrecognized data files (#532489) diff --git a/sources b/sources index 3b72ee8..97cd915 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -224715646325df4cd3904e3ac9e16186 rpm-4.7.2.tar.bz2 +dfe8f6b28d85b85b66ddacf712904fc1 rpm-4.8.0-beta1.tar.bz2