[CMake] BundleUtilities (was RPATH on Mac)

David Cole david.cole at kitware.com
Wed Apr 20 09:00:05 EDT 2011


The error message tells you what to do:

*  "Install or copy the item into the bundle before calling fixup_bundle"*

That means that libplugin.so must be underneath "/tmp/example/main.app"
before you call fixup_bundle. (Because it's a plugin, it will not appear in
any file's otool -L output, so it has to be installed first in the bundle
before it can be fixed up...)


On Wed, Apr 20, 2011 at 6:54 AM, tog <guillaume.alleon at gmail.com> wrote:

> Some small progress after using INSTALL(CODE ...) but still an error.
> (Small) code is still there https://github.com/galleon/CMakeOSX for
> those interested.
>
> Any idea what is going wrong ?
>
> Best Regards
> Guillaume
>
> ....
>
> -- 4/8: copying '/Users/alleon/PROJECTS/CMakeOSX_build/foo/libfoo.1.dylib'
> -- fixup_bundle: fixing...
> -- 5/8: fixing up
> '/Users/alleon/PROJECTS/CMakeOSX_build/plugin/libplugin.so'
>  exe_dotapp_dir/='/tmp/example/main.app/'
>  item_substring='/Users/alleon/PROJECTS'
>
>  resolved_embedded_item='/Users/alleon/PROJECTS/CMakeOSX_build/plugin/libplugin.so'
>
> Install or copy the item into the bundle before calling fixup_bundle
>
> CMake Error at /Applications/CMake
> 2.8-4.app/Contents/share/cmake-2.8/Modules/BundleUtilities.cmake:557
> (message):
>  cannot fixup an item that is not in the bundle...
> Call Stack (most recent call first):
>  /Applications/CMake
> 2.8-4.app/Contents/share/cmake-2.8/Modules/BundleUtilities.cmake:645
> (fixup_bundle_item)
>  example/cmake_install.cmake:44 (fixup_bundle)
>  cmake_install.cmake:35 (INCLUDE)
>
>
> make: *** [install] Error 1
>
>
>
> On Wed, Apr 20, 2011 at 12:03 PM, tog <guillaume.alleon at gmail.com> wrote:
> > Hi,
> >
> > Yes I have used the references you send me i.e. the link to the QtTest
> project.
> > This project is nevertheless simpler than mine since only an
> > executable is generated - no libraries (excepted those taken from Qt).
> >
> > If my understanding is correct - FIXUP_BUNDLE shall be used after the
> > bundle is created. Shall it be called for each artifacts i.e each
> > library and executable or only for the main executable.
> >
> > My problem is that I got an  "fixup_bundle: not a valid bundle" error
> > message when using FIXUP_BUNDLE.
> >
> > I have created a very simplified project here if one wants to have a
> > look to my problem: https://github.com/galleon/CMakeOSX
> >
> > Best Regards
> > Guillaume
> >
> >
> >
> > On Tue, Apr 19, 2011 at 9:10 PM, Michael Jackson
> > <mike.jackson at bluequartz.net> wrote:
> >> Use the "SHARED" library type for your shared library and "MODULE" for
> your plugin.
> >>
> >> Have you downloaded the Qt example from the Wiki? It shows what you need
> to do. The terse summary of how some of us do it is this:
> >>
> >> Write a configurable *.cmake.in file that gets configured at cmake
> time. An install rule is also added that executes the .cmake file at install
> time. inside this file is cmake code to over ride some CMake functions for
> your use and then include the BundleUtilities. And then call "fixup_bundle".
> The tail end of my own file looks like this:
> >>
> >> # -- Run the BundleUtilities cmake code
> >> include(BundleUtilities)
> >> fixup_bundle("${CMAKE_INSTALL_PREFIX}/IPHelperApp_debug.app"
> >>             # Plugins to Install
> >>
> "${CMAKE_INSTALL_PREFIX}/IPHelperApp_debug.app/Contents/plugins/imageformats/libqgif.dylib;${CMAKE_INSTALL_PREFIX}/IPHelperApp_debug.app/Contents/plugins/imageformats/libqjpeg.dylib;${CMAKE_INSTALL_PREFIX}/IPHelperApp_debug.app/Contents/plugins/imageformats/libqtiff.dylib;${CMAKE_INSTALL_PREFIX}/IPHelperApp_debug.app/Contents/plugins/libEMMPMPlugin_debug.plugin;${CMAKE_INSTALL_PREFIX}/IPHelperApp_debug.app/Contents/plugins/libCrossCorrelationPlugin_debug.plugin"
> >>             # Directories to Search for Libraries
> >>
> "/Users/mjackson/Workspace/IPHelper/Build/Bin;/Users/mjackson/Workspace/IPHelper/Build/Bin"
> >> )
> >>
> >> This is for a Qt based project where I need some of the Qt plugins for
> image loading and I have produced my own plugins that need to get copied
> into the application bundle. Note that this will get called at INSTALL time
> NOT at build time. You should have code in your main executable that looks
> for the plugins in a few locations so your executable will work from both
> the build directory and the installed location. Again, if you happen to be
> working with Qt I can share some code that I use.
> >>
> >> If you take a look at
> http://scm.bluequartz.net/support-libraries/cmp/trees/master there are
> some  Macros (cmpCMakeMacros.cmake) that I use in my project. There is also
> the example configured file in the OSX_Tools directory (
> CompleteBundle.cmake.in).
> >>
> >> The "cmp" project is just a collection of CMake code that I use over and
> over in all my projects so I just made a Git module out of it and I use it
> as a git submodule in all my projects.
> >> ___________________________________________________________
> >> Mike Jackson                      www.bluequartz.net
> >> Principal Software Engineer       mike.jackson at bluequartz.net
> >> BlueQuartz Software               Dayton, Ohio
> >>
> >> On Apr 19, 2011, at 11:21 AM, tog wrote:
> >>
> >>> Hi Mike
> >>>
> >>> Thanks for this very helpful answer.
> >>> I am nevertheless still facing few problems. My project contains:
> >>>  - a shared library
> >>>  - an executable using the shared lib
> >>>  - a plugin lib (loaded using dylib)
> >>>
> >>> I have modified my exec target to be
> >>> ADD_EXECUTABLE(main MACOSX_BUNDLE  main.cpp sub.cpp)
> >>> then I have something like
> >>> INSTALL(TARGETS main  BUNDLE    DESTINATION Applications  RUNTIME)
> >>>
> >>> the make install does create Application.app and add the main exec.
> >>>
> >>> Fir the lib I am facing 2 problems:
> >>>  1- I don't understand how to add them to the bundle. They are both
> >>> created using:
> >>>
> >>>      ADD_LIBRARY(foo ${EXAMPLE_LIBRARY_TYPE} foo.cpp)
> >>> EXAMPLE_LIBRARY_TYPE=SHARED
> >>>
> >>>      INSTALL(TARGETS foo
> >>>              RUNTIME DESTINATION ${EXAMPLE_INSTALL_LIB_DIR} COMPONENT
> >>> RuntimeLibraries
> >>>              LIBRARY DESTINATION ${EXAMPLE_INSTALL_LIB_DIR} COMPONENT
> >>> RuntimeLibraries
> >>>              ARCHIVE DESTINATION ${EXAMPLE_INSTALL_LIB_DIR} COMPONENT
> >>> Development
> >>>
> >>>      nothing is added to the app.
> >>>
> >>>  2- According to the doc. For a library loaded at runtime the doc
> >>> suggests to use MODULE but I end up having this error. Is that
> >>> supported on Mac
> >>>
> >>> Linking CXX shared module libplugin.so
> >>> cd /Users/alleon/PROJECTS/example_build/plugin && "/Applications/CMake
> >>> 2.8-4.app/Contents/bin/cmake" -E cmake_link_script
> >>> CMakeFiles/plugin.dir/link.txt --verbose=1
> >>> /usr/bin/c++   -bundle -Wl,-headerpad_max_install_names
> >>> -compatibility_version 1.0.0 -current_version 1.2.3 -o
> >>> libplugin.1.2.3.so CMakeFiles/plugin.dir/plugin.cpp.o
> >>> i686-apple-darwin10-g++-4.2.1: -compatibility_version only allowed
> >>> with -dynamiclib
> >>> make[2]: *** [plugin/libplugin.1.2.3.so] Error 1
> >>>
> >>>
> >>> Thanks
> >>> Guillaume
> >>>
> >>>
> >>> On Sat, Apr 16, 2011 at 6:51 PM, Michael Jackson
> >>> <mike.jackson at bluequartz.net> wrote:
> >>>> You need to process your executable with "install_name_tool" either
> manually or using the "BundleUtilities" functionality built into CMake. Note
> that there is a bug in the current CMake 2.8.4 that will NOT allow
> bundleUtilities to work on a command line type app. Your app MUST be in a
> .app bundle. If you search for BUndleUtilities on the Wiki there is a small
> Qt based project that shows a simple use of BundleUtilities.
> >>>>
> >>>> Hope that helps.
> >>>> ___________________________________________________________
> >>>> Mike Jackson                      www.bluequartz.net
> >>>> Principal Software Engineer       mike.jackson at bluequartz.net
> >>>> BlueQuartz Software               Dayton, Ohio
> >>>>
> >>>>
> >>>>
> >>>> On Apr 15, 2011, at 7:17 AM, tog wrote:
> >>>>
> >>>>> Dear all
> >>>>>
> >>>>> I have a project in which I would like to use rpath on Mac OS.
> >>>>> Everything is going fine if I am building everything manually (i.e.
> >>>>> without CMake)
> >>>>>
> >>>>> With CMake all is fine for the libs between the build and the
> >>>>> installation, all libs are processed with install_name_tool.
> >>>>> But nothing is done for the executable (checked from
> cmake_install.cmake)
> >>>>>
> >>>>> In the build phase, I don't see any -Wl,-rpath,... added on the
> command line.
> >>>>>
> >>>>> What do I miss there ?
> >>>>>
> >>>>> I have been using:
> >>>>>
> >>>>> SET(CMAKE_SKIP_BUILD_RPATH FALSE)
> >>>>> SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
> >>>>> SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
> >>>>> SET(CMAKE_INSTALL_RPATH "${EXAMPLE_INSTALL_LIB_DIR}")
> >>>>>
> >>>>> as indicated in the Wiki.
> >>>>>
> >>>>> Is there  tool on the Mac to get rpath from the executable ?
> >>>>>
> >>>>>
> >>>>> Thanks for your help
> >>>>> Guillaume
> >>>>>
> >>>>> --
> >>>>> 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
> >>>>
> >>>>
> >>>
> >>>
> >>>
> >>> --
> >>> 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
> >>
> >
> >
> >
> > --
> > 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20110420/785251c3/attachment.htm>


More information about the CMake mailing list