[CMake] CMake 2.8.1 + Qt/Cocoa + OS X Problem -- qt_menu.nib not getting copied

Michael Wild themiwi at gmail.com
Sat Apr 17 07:21:00 EDT 2010


On 17. Apr, 2010, at 12:59 , David Cole wrote:

> On Sat, Apr 17, 2010 at 1:02 AM, Clinton Stimpson <clinton at elemtech.com>wrote:
> 
>> 
>> On Apr 16, 2010, at 9:13 AM, David Cole wrote:
>> 
>> On Fri, Apr 16, 2010 at 11:03 AM, Michael Wild <themiwi at gmail.com> wrote:
>> 
>>> 
>>> The way BundleUtilities (that is, GetPrerequisites is actually doing the
>>> work here) is designed so far is to check for run-time dependencies using
>>> otool and similar utilities. However, CMake can't possibly detect that
>>> qt_menu.nib is required since this file is loaded dynamically at run-time,
>>> so someone has to put that information into GetPrerequisites. Since
>>> qt_menu.nib is a rather recent addition to Qt, and most people use their own
>>> scripts to accomplish this, it hasn't happened so far. Also, there's the
>>> issue of whether one actually wants to hard-code such specific information
>>> into a general tool like GetPrerequisites... The danger of creating a huge
>>> number of unmaintainable special cases is quite big there...
>>> 
>>> Perhaps one could devise a way for FindXXX/XXConfig modules to communicate
>>> such requirements to GetPrerequisites using properties. This approach would
>>> be much more modular and wouldn't require GetPrerequisites to be updated
>>> every time a module changes.
>>> 
>>> 
>> As the primary author of GetPrerequisites and BundleUtilities, I'm gonna
>> chime in here, even though I don't have time in the near term future to do
>> much useful work on the topic...
>> 
>> I think that the missing *.nib files should be accounted for by adding the
>> capability to BundleUtilities to copy *all* of the files in a copied
>> framework. Right now, it copies *only* the actual binary dylib files to
>> minimize the size of the resulting bundle. Clearly that does not work for
>> libraries that depend on embedded resources that are in other parts of the
>> framework. I would like, moving forward, to add the ability to say "copy
>> everything" or "copy this list of extra stuff" for any given framework that
>> gets pulled in because it is a prereq.
>> 
>> 
>> I'm looking at the simple example of a framework given here (Listing 1):
>> <
>> http://devworld.apple.com/mac/library/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnatomy.html
>>> 
>> What if we just add the Resources directory if it exist for the version of
>> the framework being used?  In other words, if Resources exists, assume its
>> needed to make the framework functional.  I've attached a patch that does
>> this.
>> 
>> This would fix the Qt/Cocoa problem.
>> 
>> Then what if it was a further extension to optionally include more parts of
>> the framework or the entire framework, like you are suggesting?
>> 
>> Clint
>> 
>> 
>> 
> Excellent idea. I will work with this patch next week some time and see if I
> can't get it applied.
> 
> Thx,
> David


Yeah, that sounds like a pretty reasonable approach/assumption which should cover a large number of cases.

BTW, does anyone know of a complete framework reference? The one given above is introductory at best, and I can't seem to find anything authoritative e.g. mentioning PrivateHeaders...

Michael


More information about the CMake mailing list