Hi,

I am back on this topic.

I have rewritten my  example to load the library with a path relative
to the location of my executable.
Everything is working fine in my build directory specifying:
     ADD_EXECUTABLE(main main.cpp sub.cpp)  <- executable is created
as example/main
but is not working if I state:
     ADD_EXECUTABLE(main  MACOSX_BUNDLE main.cpp sub.cpp)  <-
executable is created as example/main.app/Contents/MacOS/main
This is due to the fact that the plugin lib cannot be located.
Is there a standard a convention for loading my libs that will work
for both my build and install dirs as well as for all my architecture
?

Then my remaining problems will be to be able to install the NON
plugin libs in a Frameworks (do we have something similar to
BundleUtilities for that)


Regards
Guillaume
On Sat, Apr 23, 2011 at 7:44 PM, tog <guillaume.all...@gmail.com> wrote:
>
> To mixup a framework. From my project I would like to create a framework with 
> the libs. Then with the framework I would like to create the .app.
> Nota: I would like to do that from a "neutral" location i.e. without 
> installing on my machine
>
> On Apr 23, 2011, at 6:37 PM, Michael Jackson <mike.jack...@bluequartz.net> 
> wrote:
>
>> To Copy in a framework into a .app bundle or to fixup a framework? In the 
>> first case things should "just work" as I copy in Qt Frameworks all the time.
>>
>> --
>> Mike Jackson <www.bluequartz.net>
>>
>> On Apr 22, 2011, at 10:31 PM, tog wrote:
>>
>>> Hi
>>>
>>> Do we have something similar to BundleUtilities for Frameworks ?
>>>
>>> Best Regards
>>> Guillaume
>>>
>>> On Wed, Apr 20, 2011 at 9:48 PM, David Cole <david.c...@kitware.com> wrote:
>>>> On Wed, Apr 20, 2011 at 11:38 AM, Michael Jackson
>>>> <mike.jack...@bluequartz.net> wrote:
>>>>>
>>>>> ___________________________________________________________
>>>>> Mike Jackson                      www.bluequartz.net
>>>>> Principal Software Engineer       mike.jack...@bluequartz.net
>>>>> BlueQuartz Software               Dayton, Ohio
>>>>>
>>>>> On Apr 20, 2011, at 11:25 AM, David Cole wrote:
>>>>>
>>>>>> On Wed, Apr 20, 2011 at 11:17 AM, Michael Jackson
>>>>>> <mike.jack...@bluequartz.net> wrote:
>>>>>> On Apr 20, 2011, at 10:55 AM, David Cole wrote:
>>>>>>
>>>>>>>
>>>>>>> What is wrong with that one ?
>>>>>>>
>>>>>>> Nothing is wrong with it, but there is no link from the app to the
>>>>>>> plugin, so fixup_bundle cannot determine that it's necessary and
>>>>>>> automatically pull it in. The plugin, from the app's point of view, is
>>>>>>> something that may or may not exist, and if it does, it's dynamically
>>>>>>> loaded. So you need to install it into the bundle first, and then you 
>>>>>>> need
>>>>>>> to tell fixup_bundle about it so that it gets included in the set of 
>>>>>>> fixed
>>>>>>> up libraries.
>>>>>>>
>>>>>>> Hope this helps,
>>>>>>> David
>>>>>>
>>>>>> Is that the part that changed from CMake 2.8.3 to 2.8.4? I am using
>>>>>> CMake 2.8.3 and all my code works fine but I don't think I explicitly
>>>>>> "install" the plugin but rather list it (the absolute path to the built
>>>>>> plugin) as an argument to the "fixup_bundle" function. Will that scheme
>>>>>> still work under CMake 2.8.4?
>>>>>>
>>>>>> There are some other issues with CMake 2.8.4 with BundleUtilities and
>>>>>> my code which is why I have not updated from 2.8.3
>>>>>>
>>>>>> Mike Jackson
>>>>>> www.bluequartz.net
>>>>>>
>>>>>>
>>>>>>
>>>>>> In CMake 2.8.3 and earlier, libs listed in the 2nd arg to fixup_bundle
>>>>>> were copied into the bundle. Half the people using it considered that
>>>>>> behavior a bug, half liked it just fine.
>>>>>>
>>>>>> In 2.8.4, we "fixed" the bug (really, transferred it to the other half
>>>>>> of the people)...
>>>>>>
>>>>>> In retrospect, I never should have allowed that change to go into CMake,
>>>>>> but there you have it: 2.8.3 and earlier copy the plugins, 2.8.4 and 
>>>>>> later
>>>>>> do not.
>>>>>>
>>>>>> So: if you want a plugin inside your bundle, with CMake 2.8.4 and later,
>>>>>> you have to copy/install the plugin into the bundle yourself before 
>>>>>> calling
>>>>>> fixup_bundle.
>>>>>>
>>>>>>
>>>>>> Sorry for the persisting confusion,
>>>>>> David
>>>>>>
>>>>>
>>>>> So I should probably put the copy step into my configured cmake file that
>>>>> runs the 'fixup_bundle'? I guess an install rule with the proper path 
>>>>> inside
>>>>> the app bundle should work. Isn't there an easier way? BUNDLE DESTINATION
>>>>> argument to the INSTALL(target.. ) should do it also correct?
>>>>>
>>>>> Thanks
>>>>> Mike Jackson
>>>>>
>>>>
>>>> I would recommend something like this (top of my head, not actually 
>>>> building
>>>> from this):
>>>>
>>>>  install( TARGETS myapp BUNDLE DESTINATION . )
>>>>
>>>> That should produce a directory structure in CMAKE_INSTALL_PREFIX like so:
>>>>
>>>>  ./myapp.app/Contents/MacOS/myapp
>>>>
>>>> Then for the plugin, something like:
>>>>
>>>>  install( TARGETS plugin DESTINATION myapp.app/Contents/plugins )
>>>>
>>>> Which should yield:
>>>>
>>>>  ./myapp.app/Contents/MacOS/myapp
>>>>  ./myapp.app/Contents/plugins/libplugin.dylib
>>>>
>>>> Something along those lines. And then pass the full path to libplugin.dylib
>>>> to fixup_bundle.
>>>>
>>> PGP KeyID: 2048R/EA31CFC9  subkeys.pgp.net
>>>
>>
>



-- 
PGP KeyID: 2048R/EA31CFC9  subkeys.pgp.net
_______________________________________________
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

Reply via email to