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 <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. */
