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

Ben Skelton ben.skelton at chestnut-tree-cafe.org
Sun Feb 20 06:48:55 UTC 2011


Hi Arno,

thanks for that.

The annoying "qt_mac_set_cursor" has reared its ugly head again in libsmokeqtdeclarative.dylib

Undefined symbols:
  "qt_mac_set_cursor(QCursor const*, QPoint const&)", referenced from:
      __smokeqtdeclarative::x_QGlobalSpace::x_475(Smoke::StackItem*)       in x_1.cpp.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

cheers,
--Ben


On 20 Feb 2011, at 09:05, Arno Rehn wrote:

> I pushed a fix to master. Can you try again? :)
> 
> On Friday 18 February 2011 23:59:15 Arno Rehn wrote:
>> 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