Fix up platform and related sysinfo file loading. Upstream-Status: Pending This ensures that RPM knows the compatible set of package types at all times. Signed-off-by: Mark Hatle 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. */