diff options
Diffstat (limited to 'import-layers/yocto-poky/meta/recipes-devtools/rpm/rpm/rpm-platform.patch')
-rw-r--r-- | import-layers/yocto-poky/meta/recipes-devtools/rpm/rpm/rpm-platform.patch | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/import-layers/yocto-poky/meta/recipes-devtools/rpm/rpm/rpm-platform.patch b/import-layers/yocto-poky/meta/recipes-devtools/rpm/rpm/rpm-platform.patch new file mode 100644 index 000000000..3b40fea0e --- /dev/null +++ b/import-layers/yocto-poky/meta/recipes-devtools/rpm/rpm/rpm-platform.patch @@ -0,0 +1,137 @@ +Fix up platform and related sysinfo file loading. + +Upstream-Status: Submitted [RPM5 maintainer] + +This ensures that RPM knows the compatible set of package types at all times. + +Signed-off-by: Mark Hatle <mark.hatle@windriver.com> + +Index: rpm-5.4.14/lib/depends.c +=================================================================== +--- rpm-5.4.14.orig/lib/depends.c ++++ rpm-5.4.14/lib/depends.c +@@ -250,7 +250,7 @@ static int rpmtsAddUpgrades(rpmts ts, rp + he->p.ptr = _free(he->p.ptr); + } + +-#if defined(RPM_VENDOR_WINDRIVER) ++#if defined(RPM_VENDOR_WINDRIVER) && !defined(RPM_VENDOR_OE) + /* + * If we're capable of installing multiple colors + * but at least one of the packages are white (0), we +@@ -507,7 +507,7 @@ assert(lastx >= 0 && lastx < ts->orderCo + return 0; + } + +-#if defined(RPM_VENDOR_WINDRIVER) ++#if defined(RPM_VENDOR_WINDRIVER) && !defined(RPM_VENDOR_OE) + /* Is "compat" compatible w/ arch? */ + int _isCompatibleArch(const char * arch, const char * compat) + { +@@ -663,7 +663,7 @@ assert(he->p.str != NULL); + + if (arch == NULL || (parch = rpmteA(p)) == NULL) + continue; +-#if defined(RPM_VENDOR_WINDRIVER) ++#if defined(RPM_VENDOR_WINDRIVER) && !defined(RPM_VENDOR_OE) + /* XXX hackery for alias matching. */ + if (!_isCompatibleArch(arch, parch)) + continue; +@@ -829,6 +829,12 @@ int rpmtsAddEraseElement(rpmts ts, Heade + return rc; + } + ++#if defined(RPM_VENDOR_WINDRIVER) || defined(RPM_VENDOR_OE) ++#define _ETC_RPM_SYSINFO "%{_etcrpm}/sysinfo" ++#else ++#define _ETC_RPM_SYSINFO SYSCONFIGDIR "/sysinfo" ++#endif ++ + /*@only@*/ /*@null@*/ /*@unchecked@*/ + static char *sysinfo_path = NULL; + +@@ -1311,7 +1317,7 @@ retry: + sysinfo_path = rpmExpand("%{?_rpmds_sysinfo_path}", NULL); + if (!(sysinfo_path != NULL && *sysinfo_path == '/')) { + sysinfo_path = _free(sysinfo_path); +- sysinfo_path = xstrdup(SYSCONFIGDIR "/sysinfo"); ++ sysinfo_path = rpmExpand(_ETC_RPM_SYSINFO, NULL); + } + } + +Index: rpm-5.4.14/lib/rpmds.c +=================================================================== +--- rpm-5.4.14.orig/lib/rpmds.c ++++ rpm-5.4.14/lib/rpmds.c +@@ -1759,7 +1759,7 @@ int rpmdsSysinfo(rpmPRCO PRCO, const cha + /*@-observertrans @*/ + _sysinfo_path = _free(_sysinfo_path); + /*@=observertrans @*/ +- _sysinfo_path = xstrdup(_ETC_RPM_SYSINFO); ++ _sysinfo_path = rpmExpand(_ETC_RPM_SYSINFO, NULL); + } + } + /*@=modobserver@*/ +Index: rpm-5.4.14/lib/rpmrc.c +=================================================================== +--- rpm-5.4.14.orig/lib/rpmrc.c ++++ rpm-5.4.14/lib/rpmrc.c +@@ -38,7 +38,13 @@ + static const char * configTarget = NULL; + + /*@observer@*/ /*@unchecked@*/ +-static const char * platform = SYSCONFIGDIR "/platform"; ++#if defined(RPM_VENDOR_WINDRIVER) ++#define _ETC_RPM_PLATFORM "%{_etcrpm}/platform" ++#else ++#define _ETC_RPM_PLATFORM SYSCONFIGDIR "/platform" ++#endif ++ ++static const char * _platform = NULL; + + /*@only@*/ /*@relnull@*/ /*@unchecked@*/ + void * platpat = NULL; +@@ -694,16 +700,17 @@ static void defaultMachine(/*@out@*/ con + int rc; + + while (!gotDefaults) { +-#if defined(RPM_VENDOR_WINDRIVER) +- const char * _platform = rpmGetPath(__etcrpm, "/platform", NULL); +-#else +- const char * _platform = platform; +-#endif ++ if (_platform == NULL) { ++ _platform = rpmExpand("%{?_rpmrc_platform_path}", NULL); ++ /* XXX may need to validate path existence somewhen. */ ++ if (!(_platform != NULL && *_platform == '/')) { ++ _platform = _free(_platform); ++ _platform = rpmExpand(_ETC_RPM_PLATFORM, NULL); ++ } ++ } + CVOG_t cvog = NULL; + #if defined(RPM_VENDOR_OPENPKG) /* larger-utsname */ + const char *cp; +-#endif +-#if defined(RPM_VENDOR_OPENPKG) /* larger-utsname */ + /* utsname fields on some platforms (like HP-UX) are very small + (just about 8 characters). This is too small for OpenPKG, so cheat! */ + rc = uname(&un_real); +@@ -780,9 +787,7 @@ static void defaultMachine(/*@out@*/ con + if (cp != NULL && cp != _platform) + cp = _free(cp); + #endif +-#if defined(RPM_VENDOR_WINDRIVER) + _platform = _free(_platform); +-#endif + + if (configTarget && !parseCVOG(configTarget, &cvog) && cvog != NULL) { + gotDefaults = 1; +@@ -1101,6 +1106,8 @@ int rpmReadConfigFiles(/*@unused@*/ cons + + #ifdef PREMACROFILES + if (rpmReadRC(PREMACROFILES)) return -1; ++#else ++ if (rpmReadRC(NULL)) return -1; + #endif + + /* Reset umask to its default umask(2) value. */ |