[Kde-bindings] Re: Notes on building on Mac OS X

Arno Rehn arno at arnorehn.de
Fri Feb 18 22:59:15 UTC 2011


On Friday 18 February 2011 17:33:33 Ben Skelton wrote:
> My QAccessibleBridgePlugin problem seems taken care of with a change to 
qtcore/tests/test.cpp:
> > #ifdef TEST_QT_NO_ACCESSIBILITY
> > #include "QtGui/qaccessible.h"
> > #include "QtGui/qaccessiblebridge.h"
> > 
> > int main(int argc, char ** argv)
> > {
> > 
> >   QAccessibleEvent event(QEvent::AccessibilityHelp, 0);
> >   QAccessibleBridgePlugin plugin(0);
> > 
> > }
> > 
> > #endif
Hm, this will get rid of all accessibility stuff in OS X builds. But I guess 
it's an okay solution for now.

> > Kauri:~ benskelton$ otool -tV
> > /Users/benskelton/Desktop/build/lib/libQtGui.dylib | c++filt | grep
> > macMenu
> > 
> > 000000000001568a	callq	QMenu::macMenu(NSMenu*)
> > 0000000000017977	callq	0x006e849c	; symbol stub for:
> > QCoreApplicationPrivate::macMenuBarName()
> > QMenuPrivate::macMenu(NSMenu*):
> > QMenu::macMenu(NSMenu*):
> > 0000000000066359	jmp	QMenuPrivate::macMenu(NSMenu*)
> > 0000000000066c38	callq	QMenu::macMenu(NSMenu*)
> > 0000000000067796	callq	QMenu::macMenu(NSMenu*)
> > 0000000000067961	callq	QMenu::macMenu(NSMenu*)
> > QMenuBarPrivate::macMenu():
> > QMenuBar::macMenu():
> > 0000000000068159	jmp	QMenuBarPrivate::macMenu()
> > 000000000006842f	callq	QMenuBar::macMenu()
> > 00000000000686d2	callq	QMenuBar::macMenu()
> > 0000000000068a8b	callq	QMenuPrivate::macMenu(NSMenu*)
> 
> Looking at the comments in the Qt source for macMenu:
> >     If Qt is built against Carbon, the OSMenuRef is a MenuRef that can be
> >     used with Carbon's Menu Manager API.
> >     
> >     If Qt is built against Cocoa, the OSMenuRef is a NSMenu pointer.
> 
> otool shows an NSMenu* argument because my Qt is built for Cocoa. It
> appears that Qt sets QT_MAC_USE_COCOA for Cocoa builds and does not set
> this for Carbon builds. Qt documentation says that Cocoa builds are
> default for Qt/Mac.
That #define is somewhere defined in qfeatures.h and is picked up correctly by 
smokegen (otherwise it wouldn't make it a void*). However, __OBJC__ has to be 
defined as well for the NSMenu* typedef. I don't really know where the 
__OBJC__ define is coming from (we're compiling C++ after all), so I'll simply 
blacklist QMenu::macMenu() as well.

> > Kauri:~ benskelton$ otool -tV
> > /Users/benskelton/Desktop/build/lib/libQtGui.dylib | c++filt | grep
> > qt_mac_set_cursor
> 
> > qt_mac_set_cursor(QCursor const*, QPoint const&):
> which seems ok, right? Not sure if this is relevant in some way, but in the 
Qt source this function does nothing for the default case on the mac:
> > void qt_mac_set_cursor(const QCursor *c, const QPoint &)
> > {
> > #ifdef QT_MAC_USE_COCOA
> > 
> >     Q_UNUSED(c);
> >     return;
> > 
> > #else
This function is internal anyway, I guess. So we can safely blacklist it.

> Sorry for all the naive questions. I hope somebody with some knowledge can
> see something here.
No problem. The questions aren't naive at all. The smoke internals are a 
little complex :)

-- 
Arno Rehn
arno at arnorehn.de



More information about the Kde-bindings mailing list