xx = add(context, ds);
(void)rpmdsFree(ds);
ds = NULL;
+diff -ur rpm-5.4.15/build/parseSpec.c rpm-5.4.15-fixed/build/parseSpec.c
+--- rpm-5.4.15/build/parseSpec.c 2015-04-02 20:52:18.192956656 +0200
++++ rpm-5.4.15-fixed/build/parseSpec.c 2015-04-02 20:49:57.416291008 +0200
+@@ -707,10 +708,25 @@
+
+ /* Check for description in each package and add arch and os */
+ {
+- const char *platform = rpmExpand("%{_target_platform}", NULL);
+- const char *platformNoarch = NULL;
++ const char *platform = NULL;
+ const char *arch = rpmExpand("%{_target_cpu}", NULL);
+ const char *os = rpmExpand("%{_target_os}", NULL);
++#ifdef RPM_VENDOR_PLD
++/*
++ * This is a hack for x32 compatibility, on x32 _target_platform
++ * does not use _target_cpu, it must use hardcoded x86-64.
++ * This results in noarch packages using platform x86_64-pld-linux-gnux32
++ * and being unusable on ix86.
++ */
++ const char *platformNoarch = xstrdup("noarch-pld-linux");
++ if (strcmp(arch,"noarch"))
++ platform = rpmExpand("%{_target_platform}", NULL);
++ else
++ platform = xstrdup("noarch-pld-linux");
++#else
++ const char *platformNoarch = NULL;
++ platform = rpmExpand("%{_target_platform}", NULL);
++#endif
+
+ for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
+ he->tag = RPMTAG_OS;