I think this has to be fixed before we make 2.8.3 final. The existing (2.8.2 and earlier) behavior here is crucial for anybody who has multiple Qt versions installed or available...<div><br></div><div>Clinton, do you have time to take a look at this in the next couple of days?<br>
<br></div><div><br></div><div>Thanks,</div><div>David Cole</div><div><br></div><div><br><div class="gmail_quote">On Thu, Sep 23, 2010 at 3:40 PM, Alexander Neundorf <span dir="ltr"><<a href="mailto:neundorf@kde.org">neundorf@kde.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">On Thursday 23 September 2010, Alexander Neundorf wrote:<br>
> On Wednesday 15 September 2010, David Cole wrote:<br>
> > I am happy to announce that CMake 2.8.3 has entered the release<br>
> > candidate stage! You can find the source and binaries here:<br>
> > <a href="http://www.cmake.org/files/v2.8/?C=M;O=D" target="_blank">http://www.cmake.org/files/v2.8/?C=M;O=D</a><br>
> ><br>
> > Following is the list of changes in this release. (If you notice<br>
> > something missing please let me know and I will add it to the official<br>
> > release when 2.8.3 is finalized.)<br>
> ><br>
> > Please try this version of CMake on your projects and report any<br>
> > issues to the list or the bug tracker.<br>
><br>
> Found two issues today (compared to 2.8.1, didn't check 2.8.2):<br>
><br>
> * cmake-gui doesn't remember whether "Advanced" checkbox was checked or not<br>
><br>
> * FindQt4.cmake: in all previous versions it was possible to force a<br>
> special Qt version by presetting QT_QMAKE_EXECUTABLE. This is also what I<br>
> recommended many times on mailing lists to different people. It seems this<br>
> is not possible anymore.<br>
<br>
<br>
</div>I just checked, with cmake 2.8.2 also the output from QT_QMAKE_EXECUTABLE was<br>
preferred, even over CMAKE_PREFIX_PATH.<br>
<br>
I checked what changed.<br>
In cmake <= 2.8.2 there is this code:<br>
<br>
SET(QT_MODULES QtCore QtGui Qt3Support QtSvg QtScript QtTest QtUiTools<br>
QtHelp QtWebKit QtXmlPatterns phonon QtNetwork QtMultimedia<br>
QtNsPlugin QtOpenGL QtSql QtXml QtDesigner QtDBus<br>
QtScriptTools QtDeclarative)<br>
<br>
...<br>
<br>
# find the libraries<br>
FOREACH(QT_MODULE ${QT_MODULES})<br>
STRING(TOUPPER ${QT_MODULE} _upper_qt_module)<br>
FIND_LIBRARY(QT_${_upper_qt_module}_LIBRARY_RELEASE<br>
NAMES ${QT_MODULE}${QT_LIBINFIX} ${QT_MODULE}${QT_LIBINFIX}4<br>
PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH<br>
)<br>
FIND_LIBRARY(QT_${_upper_qt_module}_LIBRARY_DEBUG<br>
NAMES ${QT_MODULE}${QT_LIBINFIX}_debug<br>
${QT_MODULE}${QT_LIBINFIX}d ${QT_MODULE}${QT_LIBINFIX}d4<br>
PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH<br>
)<br>
ENDFOREACH(QT_MODULE)<br>
<br>
I.e. find_library() was called with NO_DEFAULT_PATH, so *only* the output from<br>
qmake was used.<br>
<br>
Now in cmake 2.8.3 there is:<br>
<br>
FIND_LIBRARY(QT_QTCORE_LIBRARY_RELEASE<br>
NAMES QtCore${QT_LIBINFIX} QtCore${QT_LIBINFIX}4<br>
HINTS ${QT_LIBRARY_DIR_TMP}<br>
)<br>
FIND_LIBRARY(QT_QTCORE_LIBRARY_DEBUG<br>
NAMES QtCore${QT_LIBINFIX}_debug QtCore${QT_LIBINFIX}d<br>
QtCore${QT_LIBINFIX}d4<br>
HINTS ${QT_LIBRARY_DIR_TMP}<br>
)<br>
...<br>
IF(QT_QTCORE_LIBRARY_RELEASE)<br>
GET_FILENAME_COMPONENT(QT_LIBRARY_DIR_TMP "${QT_QTCORE_LIBRARY_RELEASE}"<br>
PATH)<br>
SET(QT_LIBRARY_DIR ${QT_LIBRARY_DIR_TMP} CACHE INTERNAL "Qt library dir"<br>
FORCE)<br>
SET(QT_QTCORE_FOUND 1)<br>
ELSEIF(QT_QTCORE_LIBRARY_DEBUG)<br>
...<br>
<br>
FOREACH(QT_MODULE ${QT_MODULES})<br>
STRING(TOUPPER ${QT_MODULE} _upper_qt_module)<br>
FIND_LIBRARY(QT_${_upper_qt_module}_LIBRARY_RELEASE<br>
NAMES ${QT_MODULE}${QT_LIBINFIX} ${QT_MODULE}${QT_LIBINFIX}4<br>
PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH<br>
)<br>
FIND_LIBRARY(QT_${_upper_qt_module}_LIBRARY_DEBUG<br>
NAMES ${QT_MODULE}${QT_LIBINFIX}_debug<br>
${QT_MODULE}${QT_LIBINFIX}d ${QT_MODULE}${QT_LIBINFIX}d4<br>
PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH<br>
)<br>
ENDFOREACH(QT_MODULE)<br>
<br>
<br>
I.e. now find_library() is called with HINTS, but not with NO_DEFAULT_PATH. In<br>
my case this has the effect that the Qt which is in CMAKE_PREFIX_PATH is<br>
preferred over the output from qmake, so I end up with LibQtCore.so from Qt<br>
4.5 while my qmake is Qt 4.7:<br>
b283$ grep QMAKE CMakeCache.txt<br>
QT_QMAKE_EXECUTABLE:FILEPATH=/opt/qt4.7/bin/qmake<br>
QT_QMAKE_EXECUTABLE_LAST:INTERNAL=/opt/qt4.7/bin/qmake<br>
b283$ grep QTCORE_LIBRARY: CMakeCache.txt<br>
QT_QTCORE_LIBRARY:STRING=/opt/qt-4.5/qt/lib/libQtCore.so<br>
b283$ grep QTXML_LIBRARY: CMakeCache.txt<br>
QT_QTXML_LIBRARY:STRING=/opt/qt-4.5/qt/lib/libQtXml.so<br>
<br>
<br>
This was committed here:<br>
<a href="http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b55da4c688bbf55b442908464e0f7e2e41c937a3" target="_blank">http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b55da4c688bbf55b442908464e0f7e2e41c937a3</a><br>
which has as commit message "Add cross-compiling support to FindQt4.cmake"<br>
<br>
What speaks against adding the NO_DEFAULT_PATH again ?<br>
<div><div></div><div class="h5"><br>
Alex<br>
_______________________________________________<br>
cmake-developers mailing list<br>
<a href="mailto:cmake-developers@cmake.org">cmake-developers@cmake.org</a><br>
<a href="http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers" target="_blank">http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers</a><br>
</div></div></blockquote></div><br></div>