<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/123179/">https://git.reviewboard.kde.org/r/123179/</a>
     </td>
    </tr>
   </table>
   <br />





<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
 <p style="margin-top: 0;">On April 11th, 2015, 7:03 a.m. UTC, <b>Dmitry Kazakov</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;">Hi, Yue!</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Do we need the same fix for krita/image/CMakeLists.txt? It also uses build_per_arch macro, so it might also be affected</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;">I think we'd best fork vc's cmake macros and fix it in there... Maybe also ask Vir on ##vc for what he thinks is the best solution.</p></pre>
<br />










<p>- Boudewijn</p>


<br />
<p>On March 30th, 2015, 7:54 a.m. UTC, Yue Liu 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 Calligra and Boudewijn Rempt.</div>
<div>By Yue Liu.</div>


<p style="color: grey;"><i>Updated March 30, 2015, 7:54 a.m.</i></p>









<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt;">Repository: </b>
calligra
</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;">Currently building pigment with vc 0.7.4 enabled would fail on systems not putting qt5 headers and kf5 headers in /usr/include. This is because of vc's cmake macro <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">ko_compile_for_all_implementations_no_scalar</code>, which I found resulted in this piece in CMake-generated ninja code:</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%">build libs/pigment/KoOptimizedCompositeOpFactoryPerArch_AVX.cpp.o: CUSTOM_COMMAND /home/yue/Dev/calligra/src/calligra/libs/pigment/compositeops/KoOptimizedCompositeOpFactoryPerArch.cpp /home/yue/Dev/calligra/src/calligra/libs/pigment/compositeops/KoOptimizedCompositeOpFactoryPerArch.cpp || libs/koplugin/libkoplugin.so libs/pigment/pigmentcms_automoc libs/version/libkoversion.so
  COMMAND = cd /home/yue/Dev/calligra/build/libs/pigment && /usr/bin/clang++ -std=c++0x -fno-exceptions -Wall -Wextra -Wcast-align -Wchar-subscripts -Wformat-security -Wno-long-long -Wpointer-arith -Wundef -Wnon-virtual-dtor -Woverloaded-virtual -Werror=return-type -O2 -g -DNDEBUG -Wno-local-type-template-args -Wno-unnamed-type-template-args -ffp-contract=fast -mtune=core2 -fPIC -I/home/yue/Dev/calligra/src/calligra/interfaces -I/home/yue/Dev/calligra/build -I/home/yue/Dev/calligra/src/calligra -I/home/yue/Dev/calligra/src/calligra/libs/version -I/home/yue/Dev/calligra/build/libs/version -I/home/yue/Dev/calligra/src/calligra/libs/koplugin -I/home/yue/Dev/calligra/src/calligra/libs/version -I/home/yue/Dev/calligra/build/libs/version -I/home/yue/Dev/calligra/src/calligra/libs/pigment -I/home/yue/Dev/calligra/src/calligra/libs/pigment/compositeops -I/home/yue/Dev/calligra/src/calligra/libs/pigment/resources -I/usr/include -I/usr/include -I/usr/include/OpenEXR -I/usr/include -mavx -DVC_IMPL=AVX -c -oKoOptimizedCompositeOpFactoryPerArch_AVX.cpp.o /home/yue/Dev/calligra/src/calligra/libs/pigment/compositeops/KoOptimizedCompositeOpFactoryPerArch.cpp
  DESC = Building CXX object KoOptimizedCompositeOpFactoryPerArch_AVX.cpp.o
</pre></div>
</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Which is very different from ninja code generated by CMake's add_library function:</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%">build libs/pigment/CMakeFiles/pigmentcms.dir/compositeops/KoOptimizedCompositeOpFactory.cpp.o: CXX_COMPILER /home/yue/Dev/calligra/src/calligra/libs/pigment/compositeops/KoOptimizedCompositeOpFactory.cpp || cmake_order_depends_target_pigmentcms
  DEFINES = -DBOOST_ALL_NO_LIB -DCAN_USE_QTWEBKIT -DKCOREADDONS_LIB -DKGUIADDONS_LIB -DQT_CORE_LIB -DQT_DBUS_LIB -DQT_DISABLE_DEPRECATED_BEFORE=0 -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_PRINTSUPPORT_LIB -DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS -DQT_WIDGETS_LIB -DQT_XML_LIB -DSHOULD_BUILD_FONT_CONVERSION -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -Dpigmentcms_EXPORTS
  DEP_FILE = libs/pigment/CMakeFiles/pigmentcms.dir/compositeops/KoOptimizedCompositeOpFactory.cpp.o.d
  FLAGS = -std=c++0x -fno-exceptions -Wall -Wextra -Wcast-align -Wchar-subscripts -Wformat-security -Wno-long-long -Wpointer-arith -Wundef -Wnon-virtual-dtor -Woverloaded-virtual -Werror=return-type -O2 -g -DNDEBUG -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Ilibs/pigment -I/home/yue/Dev/calligra/src/calligra/libs/pigment -I/home/yue/Dev/calligra/src/calligra/interfaces -I. -I/home/yue/Dev/calligra/src/calligra -I/home/yue/Dev/calligra/src/calligra/libs/version -Ilibs/version -I/home/yue/Dev/calligra/src/calligra/libs/koplugin -I/home/yue/Dev/calligra/src/calligra/libs/pigment/compositeops -I/home/yue/Dev/calligra/src/calligra/libs/pigment/resources -Ilibs/koplugin -I/usr/include/OpenEXR -isystem /usr/include/qt -isystem /usr/include/qt/QtCore -isystem /usr/lib/qt/mkspecs/linux-g++ -isystem /usr/include/KF5/KDELibs4Support -isystem /usr/include/KF5/KDELibs4Support/KDE -isystem /usr/include/KF5 -isystem /usr/include/qt/QtWidgets -isystem /usr/include/qt/QtGui -isystem /usr/include/qt/QtDBus -isystem /usr/include/qt/QtPrintSupport -isystem /usr/include/KF5/KCoreAddons -isystem /usr/include/KF5/KCrash -isystem /usr/include/KF5/KWidgetsAddons -isystem /usr/include/KF5/KConfigCore -isystem /usr/include/KF5/KConfigWidgets -isystem /usr/include/KF5/KCodecs -isystem /usr/include/KF5/KConfigGui -isystem /usr/include/qt/QtXml -isystem /usr/include/KF5/KAuth -isystem /usr/include/KF5/KIOCore -isystem /usr/include/KF5/KService -isystem /usr/include/KF5/KIOFileWidgets -isystem /usr/include/KF5/KIOWidgets -isystem /usr/include/KF5/KJobWidgets -isystem /usr/include/qt/QtNetwork -isystem /usr/include/KF5/KCompletion -isystem /usr/include/KF5/KBookmarks -isystem /usr/include/KF5/KItemViews -isystem /usr/include/KF5/KXmlGui -isystem /usr/include/KF5/Solid -isystem /usr/include/KF5/KI18n -isystem /usr/include/KF5/KNotifications -isystem /usr/include/KF5/KIconThemes -isystem /usr/include/KF5/KWindowSystem -isystem /usr/include/KF5/KGuiAddons -isystem /usr/include/KF5/KUnitConversion -isystem /usr/include/KF5/KTextWidgets -isystem /usr/include/KF5/SonnetUi -isystem /usr/include/KF5/KParts -isystem /usr/include/KF5/KItemModels -isystem /usr/include/KF5/KEmoticons
  OBJECT_DIR = libs/pigment/CMakeFiles/pigmentcms.dir
  OBJECT_FILE_DIR = libs/pigment/CMakeFiles/pigmentcms.dir/compositeops
  TARGET_COMPILE_PDB = libs/pigment/CMakeFiles/pigmentcms.dir/
  TARGET_PDB = libs/pigment/libpigmentcms.pdb
</pre></div>
</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">It seems vc's <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">ko_compile_for_all_implementations_no_scalar</code> macro used its own method to generate compiler command and arguments, which only has include directories defined in <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">add_directories</code>, but Qt5/KF5 include directories are added through <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">target_link_libraries</code>, which is described in <a href="https://community.kde.org/Frameworks/Porting_Notes#Build_System" style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: normal;">KF5 porting notes</a> and <a href="http://www.cmake.org/cmake/help/v3.2/prop_tgt/INTERFACE_SYSTEM_INCLUDE_DIRECTORIES.html" style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: normal;">CMake doc</a>.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">I think it's something should be fixed in Vc, for now we need to manually add Qt5/KF5 include directories in <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">add_directories</code>, and be careful about the order of those directories, if conflicting headers exists between <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">/usr/include</code> and other non-standard path, for example kdelibs4's <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">kdebug.h</code> is in <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">/usr/include</code>, KF5KDELibs4Support's <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">kdebug.h</code> is in <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">/usr/include/KF5/KDELibs4Support</code>, while a different non-cnflicting header is located in <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">/usr/include</code> and its include directory is added before KDELibs4Support include directory, then compiler will try <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">/usr/include</code> first when looking for KDELibs4Support's headers. That issue doesn't exist if compiler arguments are constructed by CMake's <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">add_library</code> because CMake will automatically remove any <code style="text-rendering: inherit;color: #4444cc;padding: 0;white-space: normal;margin: 0;line-height: inherit;">/usr/include</code> include directory, as shown in the second piece of ninja code.</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;">Build successful on arch linux</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>libs/pigment/CMakeLists.txt <span style="color: grey">(ae6651b82b8a26ed40d6f1ab4590ce13f753f8d9)</span></li>

</ul>

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






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







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