<html>
 <body>
  <div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
   <table bgcolor="#f9f3c9" width="100%" cellpadding="12" style="border: 1px #c9c399 solid; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
    <tr>
     <td>
      This is an automatically generated e-mail. To reply, visit:
      <a href="https://git.reviewboard.kde.org/r/127822/">https://git.reviewboard.kde.org/r/127822/</a>
     </td>
    </tr>
   </table>
   <br />





<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
 <p style="margin-top: 0;">On May 3rd, 2016, 2:42 p.m. CEST, <b>Aleix Pol Gonzalez</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Is this specific to Attica or it will happen on other frameworks? I have a memory of having such an issue worked on at some point.</p></pre>
 </blockquote>







</blockquote>

<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Hah...</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">The principal applies universally of course, to all filesystems that will silently accept to replace an existing directory entry with another one of the same type that differs only in name case.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">I was going to reply that I'd only seen the issue express itself with attica (and in bug reports only; I use a case-sensitive HFS partition for development). But a quick check shows that Solid and Sonnet follow the same unreliable install layout, and they're not exactly alone:</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;"><code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">> find /opt/local/include/KF5/ -mindepth 2 -maxdepth 2 -a -type d
/opt/local/include/KF5/KDNSSD/dnssd
/opt/local/include/KF5/KDNSSD/DNSSD
/opt/local/include/KF5/BalooWidgets/baloo
/opt/local/include/KF5/BalooWidgets/Baloo
/opt/local/include/KF5/Attica/attica
/opt/local/include/KF5/Attica/Attica
/opt/local/include/KF5/KIOGui/KIO
/opt/local/include/KF5/KIOGui/kio
/opt/local/include/KF5/Solid/solid
/opt/local/include/KF5/Solid/Solid
/opt/local/include/KF5/KUnitConversion/KUnitConversion
/opt/local/include/KF5/KUnitConversion/kunitconversion
/opt/local/include/KF5/KIOWidgets/KIO
/opt/local/include/KF5/KIOWidgets/kio
/opt/local/include/KF5/KDeclarative/QuickAddons
/opt/local/include/KF5/KDeclarative/quickaddons
/opt/local/include/KF5/KDeclarative/kdeclarative
/opt/local/include/KF5/KDeclarative/calendarevents
/opt/local/include/KF5/KDeclarative/KQuickAddons
/opt/local/include/KF5/KDeclarative/KDeclarative
/opt/local/include/KF5/KDeclarative/CalendarEvents
/opt/local/include/KF5/KDeclarative/kquickaddons
/opt/local/include/KF5/KNewStuff3/KNS3
/opt/local/include/KF5/KNewStuff3/kns3
/opt/local/include/KF5/KPackage/KPackage
/opt/local/include/KF5/KPackage/kpackage
/opt/local/include/KF5/KXmlRpcClient/KXmlRpcClient
/opt/local/include/KF5/KXmlRpcClient/kxmlrpcclient
/opt/local/include/KF5/ThreadWeaver/ThreadWeaver
/opt/local/include/KF5/ThreadWeaver/threadweaver
/opt/local/include/KF5/KExiv2/kexiv2
/opt/local/include/KF5/KExiv2/KExiv2
/opt/local/include/KF5/SonnetUi/sonnet
/opt/local/include/KF5/SonnetUi/Sonnet
/opt/local/include/KF5/KActivities/KActivities
/opt/local/include/KF5/KActivities/kactivities
/opt/local/include/KF5/KIOCore/kio
/opt/local/include/KF5/KIOCore/KIO
/opt/local/include/KF5/SonnetCore/sonnet
/opt/local/include/KF5/SonnetCore/Sonnet
/opt/local/include/KF5/KParts/KParts
/opt/local/include/KF5/KParts/kparts
/opt/local/include/KF5/purpose/purpose
/opt/local/include/KF5/purpose/Purpose
/opt/local/include/KF5/Baloo/baloo
/opt/local/include/KF5/Baloo/Baloo
/opt/local/include/KF5/KRunner/KRunner
/opt/local/include/KF5/KRunner/krunner
/opt/local/include/KF5/KFileMetaData/kfilemetadata
/opt/local/include/KF5/KFileMetaData/KFileMetaData
/opt/local/include/KF5/KTextEditor/KTextEditor
/opt/local/include/KF5/KTextEditor/ktexteditor
/opt/local/include/KF5/KDESu/KDESu
/opt/local/include/KF5/KDESu/kdesu
/opt/local/include/KF5/KPeople/kpeoplebackend
/opt/local/include/KF5/KPeople/KPeople
/opt/local/include/KF5/KPeople/kpeople
/opt/local/include/KF5/KPeople/KPeopleBackend
/opt/local/include/KF5/purposewidgets/PurposeWidgets
/opt/local/include/KF5/purposewidgets/purposewidgets</code></p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">I started a topic on the KDE-Frameworks ML ("case in filenames"), this RR is a result of that.
Maybe a general solution should be discussed on there before I or anyone else starts patching all those frameworks, esp. if I'm not the only one who's run into it.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Maybe it'd be possible to wrap the "CamelCase" logic in ECM? Attica's build system was easy enough to patch; I doubt things will be so trivial in all cases.</p></pre>
<br />










<p>- René J.V.</p>


<br />
<p>On May 3rd, 2016, 2 p.m. CEST, René J.V. Bertin wrote:</p>








<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="12" style="border: 1px #888a85 solid; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
 <tr>
  <td>

<div>Review request for KDE Software on Mac OS X and KDE Frameworks.</div>
<div>By René J.V. Bertin.</div>


<p style="color: grey;"><i>Updated May 3, 2016, 2 p.m.</i></p>









<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt;">Repository: </b>
attica
</div>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
 <table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Attica has long adhered to an install layout that relies on case to distinguish directories. For instance:</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;"><div class="codehilite" style="background: #f8f8f8"><pre style="line-height: 125%">include/KF5/Attica/Attica/AccountBalance
include/KF5/Attica/attica/accountbalance.h
</pre></div>
</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Depending on the order in which those files are installed on a FS like HFS+ (in case-insensitive-but-case-preserving mode), you will end up with <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">Attica/Attica</code> or <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">Attica/attica</code> directories; the directory name case changes to reflect the last write.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Basic calls like fopen() will succeed regardless of case because the filesystem ignores case in such operations. However, compilers (clang at least) do not simply try to open a requested include file in each element of the header directory search path. They use a search algorithm to locate the file first ... and that algorithm takes case into account. So <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">#include <Attica/AccountBalance></code> will fail if the file is installed as <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">include/KF5/Attica/attica/AccountBalance</code>.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">This issue is delicate to fix: the most trivial solution (installing all headers in a single directory) would still require changes in all dependent code.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">I'm just proposing a fix that builds on the assumption that the <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;"><Attica/Foo></code> style is part of C++ semantics (as opposed to a more traditional <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;"><attica/foo.h></code>). The fix installs headers in <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">KF5/Attica/attica</code> and <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">KF5/Attica/c++/Attica</code>, and adds the additional <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">Attica/c++</code> component to the header search path. It also corrects the pkg-config file.</p></pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">On OS X 10.9.5 with FWs. 5.20.0 installed under /opt/local . As a test-case I rebuilt <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">knewstuff</code> after changing its <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">src/uploaddialog_p.h</code> to include <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;"><Attica/ListJob></code> instead of <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;"><attica/listjob.h></code> and <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;"><Attica/Provider></code> instead of <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;"><attica/provider.h></code>.</p></pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">

 <li>src/CMakeLists.txt <span style="color: grey">(984f7ff)</span></li>

 <li>src/cmake/libKF5Attica.pc.cmake <span style="color: grey">(75387fa)</span></li>

</ul>

<p><a href="https://git.reviewboard.kde.org/r/127822/diff/" style="margin-left: 3em;">View Diff</a></p>






  </td>
 </tr>
</table>







  </div>
 </body>
</html>