<p>I am attempting to use rpm with a tri-lib system, mips64.  (ELF 32, ELF64 and MIPS64 n32)</p>
<p>I have a small patch that adds MIPS64 n32 ABI support to RPM:  <a href="http://git.openembedded.org/openembedded-core/tree/meta/recipes-devtools/rpm/files/0001-Add-a-color-setting-for-mips64_n32-binaries.patch">http://git.openembedded.org/openembedded-core/tree/meta/recipes-devtools/rpm/files/0001-Add-a-color-setting-for-mips64_n32-binaries.patch</a></p>
<p>This introduces color value of '4', that indicates MIPS64 n32.</p>
<p>This works if the system is installing MIPS64 n32 vs MIPS64 (colors 4 vs 2) and I have the preferred color set to one or the other.  However, if I add the third library of '1', or MIPS(32) then it can't resolve a three way conflict properly.</p>
<p>I've identified that in the lib/transaction.c file, handleColorConflict function.  The issue is that the system needs a final 'else' clause to deal with the situation where neither is the preferred type.</p>
<p>I've been working on a patch to resolve this, but I can't figure out how to make it work properly:</p>
<pre><code>            rConflicts = 0;
</code></pre>
<ul>
<li>
<pre><code>      } else {
</code></pre>
</li>
<li>
<pre><code>          /*
</code></pre>
</li>
<li>
<pre><code>           * If neither is already skipped, we skip the old one, and
</code></pre>
</li>
<li>
<pre><code>           * install the new one (last in wins).
</code></pre>
</li>
<li>
<pre><code>           */
</code></pre>
</li>
<li>
<pre><code>          if (ofs && !XFA_SKIPPING(rpmfsGetAction(ofs, ofx)) &&
</code></pre>
</li>
<li>
<pre><code>               fs && !XFA_SKIPPING(rpmfsGetAction(fs, fx))) {
</code></pre>
</li>
<li>
<pre><code>              rpmfsSetAction(ofs, ofx, FA_SKIPCOLOR);
</code></pre>
</li>
<li>
<pre><code>              rpmfsSetAction(fs, fx, FA_CREATE);
</code></pre>
</li>
<li>
<pre><code>          }
</code></pre>
</li>
<li>
<pre><code>          rConflicts = 0;
      }
</code></pre>
</li>
</ul>
<p>When I have do an install with ELF32, ELF64 and MIPS64 n32 (specified in that order as the rpm transaction), setting the preferred color to '2' (ELF64), the system will still install the n32 version.  (If I change the order so MIPS64 n32 is not the last in the transaction order then it works fine.)</p>
<p>What I appear to be getting during processing is:</p>
<p>conflict -- MIPS64 n32 vs ELF32 -- resolved to ELF32 (via the else I added)<br>
conflict -- ELF32 vs ELF64 -- resolved to ELF64 (via existing mechanism)<br>
conflict -- ELF64 vs ELF32 -- resolved to ELF64 (via existing mechanism)<br>
conflict -- ELF32 vs MIPS64 n32 -- resolves to MIPS64 n32 (via the else I added)</p>
<p>So the conflict appears resolved, and both ELF64 and MIPS64n32 are installed, with the n32 version being 'last', so that is the version on the disk.</p>
<p>Any help would be appreciated on this three way resolution.</p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/rpm-software-management/rpm/issues/193">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/ANb808aPgdP1LozFg5ofsv4KQXNMd7azks5rtpAagaJpZM4M3Tar">mute the thread</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/ANb80_JBYXjBmxGKvuiCU5UIFTqgjOuaks5rtpAagaJpZM4M3Tar.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
  <link itemprop="url" href="https://github.com/rpm-software-management/rpm/issues/193"></link>
  <meta itemprop="name" content="View Issue"></meta>
</div>
<meta itemprop="description" content="View this Issue on GitHub"></meta>
</div>

<script type="application/json" data-scope="inboxmarkup">{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/rpm-software-management/rpm","title":"rpm-software-management/rpm","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/rpm-software-management/rpm"}},"updates":{"snippets":[{"icon":"DESCRIPTION","message":"ELF file conflict 'color' resolution for tri-lib systems (#193)"}],"action":{"name":"View Issue","url":"https://github.com/rpm-software-management/rpm/issues/193"}}}</script>