Re: [CMake] Finding Debug Versions of Qt4 Frameworks on OS X

2010-07-19 Thread Michael Jackson


On Jul 19, 2010, at 4:28 PM, Michael Wild wrote:



On 19. Jul, 2010, at 19:59 , Michael Jackson wrote:

Wonder why I have never seen this before but with CMake 2.8.x and a  
Qt4 based project on OS X when finding the Qt4 frameworks only the  
release version is found, ie, the Debug version that is located  
inside the framework is NOT found by default.
My question is: is this a bug, a feature or should I be using the  
DYLD_IMAGE_SUFFIX environment variable instead?


The offending code is in the FindQt4.cmake file around lines 772:

FIND_LIBRARY(QT_${_upper_qt_module}_LIBRARY_DEBUG
   NAMES ${QT_MODULE}${QT_LIBINFIX}_debug ${QT_MODULE}$ 
{QT_LIBINFIX}d ${QT_MODULE}${QT_LIBINFIX}d4

   PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH
  )

I would imagine that the cmake code above is going to try and find  
QtCore_debug.framework and NOT QtCore.framework/versions/current/ 
QtCore_debug


Thoughts?
___
Mike Jackson  www.bluequartz.net
Principal Software Engineer   mike.jack...@bluequartz.net
BlueQuartz Software   Dayton, Ohio


Reading http://doc.trolltech.com/4.6/mac-differences.html#qt-libraries-as-frameworks 
 seems to indicate that either setting DYLD_IMAGE_SUFFIX is one way  
to go, renaming the embedded library another. Not sure it would be  
all that desirable to explicitly link against the debug versions on  
Mac OS X...


Michael


Knowing how CMake was searching for the frameworks I ended up creating  
some symlinks to the QtCore.framework and QtGui.framework.
QtCore_debug.framework points to QtCore.framework and the same for the  
other frameworks. This actually allowed CMake to find the debug  
libraries. Once those libraries were found I could then actually link  
against the debug versions. Which allows me to debug down into Qt  
itself which is what I needed.
   I agree that if you trust Qt and have no need to debug down into  
Qt then linking against the Debug versions probably is not needed.  
Setting the DYLD_IMAGE_SUFFIX environment variable to _debug caused  
the launching of my app inside gdb to go from about 10 seconds to 2  
minutes as gdb was trying to load the debug version of every library  
that the app links against, plus all of their dependencies. By linking  
directly to the debug versions of the Qt libraries the launch times  
only increased a small amount.
  I don't think there is really any type of patch that I could  
submit. Merely creating the symlinks in the Qt/lib installation  
directory seems to have solved the issue, at least for me.


Thanks for the sanity check
Mike Jackson





___
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake


Re: [CMake] Finding Debug Versions of Qt4 Frameworks on OS X

2010-07-19 Thread Clinton Stimpson

On 07/19/2010 02:54 PM, Michael Jackson wrote:


On Jul 19, 2010, at 4:28 PM, Michael Wild wrote:



On 19. Jul, 2010, at 19:59 , Michael Jackson wrote:

Wonder why I have never seen this before but with CMake 2.8.x and a 
Qt4 based project on OS X when finding the Qt4 frameworks only the 
release version is found, ie, the Debug version that is located 
inside the framework is NOT found by default.
My question is: is this a bug, a feature or should I be using the 
DYLD_IMAGE_SUFFIX environment variable instead?


The offending code is in the FindQt4.cmake file around lines 772:

FIND_LIBRARY(QT_${_upper_qt_module}_LIBRARY_DEBUG
   NAMES ${QT_MODULE}${QT_LIBINFIX}_debug 
${QT_MODULE}${QT_LIBINFIX}d ${QT_MODULE}${QT_LIBINFIX}d4

   PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH
  )

I would imagine that the cmake code above is going to try and find 
QtCore_debug.framework and NOT 
QtCore.framework/versions/current/QtCore_debug


Thoughts?
___
Mike Jackson  www.bluequartz.net
Principal Software Engineer   mike.jack...@bluequartz.net
BlueQuartz Software   Dayton, Ohio


Reading 
http://doc.trolltech.com/4.6/mac-differences.html#qt-libraries-as-frameworks seems 
to indicate that either setting DYLD_IMAGE_SUFFIX is one way to go, 
renaming the embedded library another. Not sure it would be all that 
desirable to explicitly link against the debug versions on Mac OS X...


Michael


Knowing how CMake was searching for the frameworks I ended up creating 
some symlinks to the QtCore.framework and QtGui.framework.
QtCore_debug.framework points to QtCore.framework and the same for the 
other frameworks. This actually allowed CMake to find the debug 
libraries. Once those libraries were found I could then actually link 
against the debug versions. Which allows me to debug down into Qt 
itself which is what I needed.
   I agree that if you trust Qt and have no need to debug down into Qt 
then linking against the Debug versions probably is not needed. 
Setting the DYLD_IMAGE_SUFFIX environment variable to _debug caused 
the launching of my app inside gdb to go from about 10 seconds to 2 
minutes as gdb was trying to load the debug version of every library 
that the app links against, plus all of their dependencies. By linking 
directly to the debug versions of the Qt libraries the launch times 
only increased a small amount.
  I don't think there is really any type of patch that I could submit. 
Merely creating the symlinks in the Qt/lib installation directory 
seems to have solved the issue, at least for me.


Or you could rename the *_debug libs to _qtdebug then set 
DYLD_IMAGE_SUFFIX to _qtdebug.

That what I've done in the past to work around the debugging slowness.

Clint
___
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake