[CMake] macosx fix bundle problems

Clinton Stimpson clinton at elemtech.com
Wed Sep 9 11:22:40 EDT 2009



To install Qt plugins you can do something like the following.  You can tweak 
the regex to pick which plugins you want.
# include Qt plugins
install(DIRECTORY ${QT_PLUGINS_DIR}
        DESTINATION ${CMAKE_INSTALL_BINARY_DIR}
        COMPONENT Runtime
        REGEX "(.debug|d4.dll|designer|.exp|.lib|.ilk|.pdb)" EXCLUDE )


I also specify the Qt plugins when calling fixup_bundle() so rerequisites 
needed for plugins get satisfied as well.  For example, an image plugin may 
need QtSvg while you application does not.

install(CODE "
   # glob for previously installed qt plugins to include in fixup_bundle
   file(GLOB_RECURSE QT_PLUGINS 
\"\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINARY_DIR}/plugins/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
   ...
   fixup_bundle(\"${app}\"  \"\${QT_PLUGINS}\" ....)

Clint

On Wednesday 09 September 2009 09:10:31 am Petr Vanek wrote:
> yup. The reaso was really in splitted CMakeListst.txt files. It looks
> like app is "fixed" now - from otool -L point of view.
>
> Of course it required more tweaking - add and empty qt.conf to prevent
> duplication of libs/frameworks etc. But it's much more clearer now.
>
> BTW is there any script/template for cmake to find and bundle all
> required (or specified) qt plugins? Something like macdeployqt. Or
> should I use this binary instead of scripting?
>
> thanks and cheers!
> Petr
>
> On Sep 8, 2009, at 11:22 PM, David Cole wrote:
> > These lines of output near the beginning:
> >
> > -- warning: *NOT* handled - .app directory case...
> > -- error: fixup_bundle: not a valid bundle
> >
> > ...indicate that fixup_bundle is not getting a .app bundle as its
> > input...
> >
> > The assumption made by fixup_bundle is that there is an executable
> > in the .app/Contents/MacOS folder to begin analyzing. Then, based on
> > what its prerequisites are, various libraries get copied into the
> > bundle as well. This output looks like that initial executable is
> > not there yet.
> >
> > Looks like your "INSTALL(SCRIPT" snippet occurs before the install
> > rule for the bundle executable. Make sure they both occur in the
> > same CMakeLists.txt file and that the script snippet comes after the
> > install rule for the executable. Then it should work like you
> > expect...
> >
> >
> > HTH,
> > David
> >
> >
> > On Sat, Sep 5, 2009 at 4:15 PM, Petr Vanek <petr at scribus.info> wrote:
> > hi all,
> >
> > I have a Qt4 application with bundle build support taken from cmake
> > wiki example.
> >
> > When I run "deploy" phase with make install, the correct structure
> > is created in CMAKE_INSTALL_PREFIX.
> >
> > But it looks like cmake's fixup_bundle function from BundleUtilities
> > does its job only partially.
> >
> > All Qt frameworks are fixed correctly to use @executable_path, but
> > the main binary still contains links to my development environment.
> >
> > What could be the issue?
> >
> > thanks,
> > Petr Vanek
> >
> >
> > code:
> > http://tora.svn.sourceforge.net/viewvc/tora/trunk/tora/
> >
> > 1st make install run:
> >
> > rimmer:build-bundle pvanek$ make install
> > [  1%] Built target tora_loki_lib
> > [100%] Built target tora
> > Install the project...
> > -- Install configuration: "RELEASE"
> > Removing Previous TOra.app bundle at /Users/pvanek/oss/tora/bundle/
> > Copying TOra.app from the build tree to /Users/pvanek/oss/tora/bundle/
> > -- fixup_bundle
> > --   app='/Users/pvanek/oss/tora/bundle/TOra.app'
> > --   libs=''
> > --   dirs='Plugins'
> > -- warning: *NOT* handled - .app directory case...
> > -- error: fixup_bundle: not a valid bundle
> > -- fixup_bundle: done
> > CMake Warning (dev) at cmake_install.cmake:31 (INCLUDE):
> > Policy CMP0011 is not set: Included scripts do automatic
> > cmake_policy PUSH
> > and POP.  Run "cmake --help-policy CMP0011" for policy details.  Use
> > the
> > cmake_policy command to set the policy and suppress this warning.
> >
> > The included script
> >
> >  /Users/pvanek/oss/tora/trunk/tora/build-bundle/
> > TOra_OSX_MakeStandAloneBundle.cmake
> >
> > affects policy settings.  CMake is implying the NO_POLICY_SCOPE
> > option for
> > compatibility, so the effects are applied to the including context.
> > This warning is for project developers.  Use -Wno-dev to suppress it.
> >
> > -- Installing: /Users/pvanek/oss/tora/bundle/tora.app
> > -- Installing: /Users/pvanek/oss/tora/bundle/tora.app/Contents
> > -- Installing: /Users/pvanek/oss/tora/bundle/tora.app/Contents/
> > Info.plist
> > -- Installing: /Users/pvanek/oss/tora/bundle/tora.app/Contents/MacOS
> > -- Installing: /Users/pvanek/oss/tora/bundle/tora.app/Contents/MacOS/
> > tora
> > -- Installing: /Users/pvanek/oss/tora/bundle/tora.app/Contents/
> > Resources
> > -- Installing: /Users/pvanek/oss/tora/bundle/tora.app/Contents/
> > Resources/tora.icns
> >
> > 2nd make install
> > rimmer:build-bundle pvanek$ make install
> > [  1%] Built target tora_loki_lib
> > [100%] Built target tora
> > Install the project...
> > -- Install configuration: "RELEASE"
> > Removing Previous TOra.app bundle at /Users/pvanek/oss/tora/bundle/
> > Copying TOra.app from the build tree to /Users/pvanek/oss/tora/bundle/
> > -- fixup_bundle
> > --   app='/Users/pvanek/oss/tora/bundle/TOra.app'
> > --   libs=''
> > --   dirs='Plugins'
> > -- fixup_bundle: preparing...
> > -- fixup_bundle: copying...
> > -- 1/28: *NOT* copying '/Users/pvanek/oss/tora/bundle/TOra.app/
> > Contents/MacOS/tora'
> > -- 2/28: copying '/opt/local/lib/libcrypto.0.9.8.dylib'
> > -- 3/28: copying '/opt/local/lib/libpng12.0.dylib'
> > -- 4/28: copying '/opt/local/lib/libssl.0.9.8.dylib'
> > -- 5/28: copying '/opt/local/lib/libz.1.dylib'
> > -- 6/28: copying '/opt/local/lib/oracle/libclntsh.dylib.10.1'
> > -- 7/28: copying '/opt/local/lib/oracle/libocci.dylib.10.1'
> > -- 8/28: copying '/opt/local/lib/postgresql83/libpq.5.dylib'
> > -- 9/28: copying '/opt/local/libexec/qt4-mac/lib/QtCore.framework/
> > Versions/4/QtCore'
> > -- 10/28: copying '/opt/local/libexec/qt4-mac/lib/QtGui.framework/
> > Versions/4/QtGui'
> > -- 11/28: copying '/opt/local/libexec/qt4-mac/lib/
> > QtNetwork.framework/Versions/4/QtNetwork'
> > -- 12/28: copying '/opt/local/libexec/qt4-mac/lib/QtSql.framework/
> > Versions/4/QtSql'
> > -- 13/28: copying '/opt/local/libexec/qt4-mac/lib/QtXml.framework/
> > Versions/4/QtXml'
> > -- 14/28: copying '/opt/local/libexec/qt4-mac/lib/
> > libqscintilla2.5.dylib'
> > -- fixup_bundle: fixing...
> > -- 15/28: fixing up '/Users/pvanek/oss/tora/bundle/TOra.app/Contents/
> > MacOS/tora'
> > -- 16/28: fixing up '/Users/pvanek/oss/tora/bundle/TOra.app/Contents/
> > Libraries/libcrypto.0.9.8.dylib'
> > -- 17/28: fixing up '/Users/pvanek/oss/tora/bundle/TOra.app/Contents/
> > Libraries/libpng12.0.dylib'
> > -- 18/28: fixing up '/Users/pvanek/oss/tora/bundle/TOra.app/Contents/
> > Libraries/libssl.0.9.8.dylib'
> > -- 19/28: fixing up '/Users/pvanek/oss/tora/bundle/TOra.app/Contents/
> > Libraries/libz.1.dylib'
> > -- 20/28: fixing up '/Users/pvanek/oss/tora/bundle/TOra.app/Contents/
> > MacOS/libclntsh.dylib.10.1'
> > -- 21/28: fixing up '/Users/pvanek/oss/tora/bundle/TOra.app/Contents/
> > MacOS/libocci.dylib.10.1'
> > -- 22/28: fixing up '/Users/pvanek/oss/tora/bundle/TOra.app/Contents/
> > Libraries/libpq.5.dylib'
> > -- 23/28: fixing up '/Users/pvanek/oss/tora/bundle/TOra.app/Contents/
> > Frameworks/QtCore.framework/Versions/4/QtCore'
> > -- 24/28: fixing up '/Users/pvanek/oss/tora/bundle/TOra.app/Contents/
> > Frameworks/QtGui.framework/Versions/4/QtGui'
> > -- 25/28: fixing up '/Users/pvanek/oss/tora/bundle/TOra.app/Contents/
> > Frameworks/QtNetwork.framework/Versions/4/QtNetwork'
> > -- 26/28: fixing up '/Users/pvanek/oss/tora/bundle/TOra.app/Contents/
> > Frameworks/QtSql.framework/Versions/4/QtSql'
> > -- 27/28: fixing up '/Users/pvanek/oss/tora/bundle/TOra.app/Contents/
> > Frameworks/QtXml.framework/Versions/4/QtXml'
> > -- 28/28: fixing up '/Users/pvanek/oss/tora/bundle/TOra.app/Contents/
> > Libraries/libqscintilla2.5.dylib'
> > -- fixup_bundle: cleaning up...
> > -- fixup_bundle: verifying...
> > --
> > =
> > =
> > =
> > =
> > =
> > ======================================================================
> > -- Analyzing app='/Users/pvanek/oss/tora/bundle/TOra.app'
> > -- bundle='/Users/pvanek/oss/tora/bundle/TOra.app'
> > -- executable='/Users/pvanek/oss/tora/bundle/TOra.app/Contents/MacOS/
> > tora'
> > -- valid='1'
> > -- executable file: /Users/pvanek/oss/tora/bundle/TOra.app/Contents/
> > MacOS/tora
> > -- verified='1'
> > -- info='Verified 1 executable files in '/Users/pvanek/oss/tora/
> > bundle/TOra.app''
> > --
> > -- verified='1'
> > -- info=''
> > --
> > -- fixup_bundle: done
> > CMake Warning (dev) at cmake_install.cmake:31 (INCLUDE):
> > Policy CMP0011 is not set: Included scripts do automatic
> > cmake_policy PUSH
> > and POP.  Run "cmake --help-policy CMP0011" for policy details.  Use
> > the
> > cmake_policy command to set the policy and suppress this warning.
> >
> > The included script
> >
> >  /Users/pvanek/oss/tora/trunk/tora/build-bundle/
> > TOra_OSX_MakeStandAloneBundle.cmake
> >
> > affects policy settings.  CMake is implying the NO_POLICY_SCOPE
> > option for
> > compatibility, so the effects are applied to the including context.
> > This warning is for project developers.  Use -Wno-dev to suppress it.
> >
> > -- Installing: /Users/pvanek/oss/tora/bundle/tora.app
> > -- Installing: /Users/pvanek/oss/tora/bundle/tora.app/Contents
> > -- Up-to-date: /Users/pvanek/oss/tora/bundle/tora.app/Contents/
> > Info.plist
> > -- Installing: /Users/pvanek/oss/tora/bundle/tora.app/Contents/MacOS
> > -- Installing: /Users/pvanek/oss/tora/bundle/tora.app/Contents/MacOS/
> > tora
> > -- Installing: /Users/pvanek/oss/tora/bundle/tora.app/Contents/
> > Resources
> > -- Up-to-date: /Users/pvanek/oss/tora/bundle/tora.app/Contents/
> > Resources/tora.icns
> >
> >
> >
> > rimmer:build-bundle pvanek$ otool -L ~/oss/tora/bundle/TOra.app/
> > Contents/MacOS/tora
> > /Users/pvanek/oss/tora/bundle/TOra.app/Contents/MacOS/tora:
> >      /opt/local/libexec/qt4-mac/lib/QtGui.framework/Versions/4/QtGui
> > (compatibility version 4.5.0, current version 4.5.1)
> >      /opt/local/lib/libpng12.0.dylib (compatibility version 39.0.0,
> > current version 39.0.0)
> >      /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
> > (compatibility version 2.0.0, current version 136.0.0)
> >      /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
> > (compatibility version 45.0.0, current version 949.54.0)
> >      /opt/local/libexec/qt4-mac/lib/QtXml.framework/Versions/4/QtXml
> > (compatibility version 4.5.0, current version 4.5.1)
> >      /opt/local/libexec/qt4-mac/lib/QtSql.framework/Versions/4/QtSql
> > (compatibility version 4.5.0, current version 4.5.1)
> >      /opt/local/libexec/qt4-mac/lib/QtNetwork.framework/Versions/4/
> > QtNetwork (compatibility version 4.5.0, current version 4.5.1)
> >      /usr/lib/libssl.0.9.7.dylib (compatibility version 0.9.7,
> > current version 0.9.7)
> >      /opt/local/libexec/qt4-mac/lib/QtCore.framework/Versions/4/
> > QtCore (compatibility version 4.5.0, current version 4.5.1)
> >      /usr/lib/libz.1.dylib (compatibility version 1.0.0, current
> > version 1.2.3)
> >      /opt/local/lib/oracle/libocci.dylib.10.1 (compatibility version
> > 0.0.0, current version 0.0.0)
> >      /opt/local/lib/oracle/libclntsh.dylib.10.1 (compatibility
> > version 0.0.0, current version 0.0.0)
> >      /opt/local/libexec/qt4-mac/lib/libqscintilla2.5.dylib
> > (compatibility version 5.1.0, current version 5.1.0)
> >      /opt/local/lib/postgresql83/libpq.5.dylib (compatibility
> > version 5.0.0, current version 5.1.0)
> >      /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0,
> > current version 7.4.0)
> >      /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current
> > version 1.0.0)
> >      /usr/lib/libSystem.B.dylib (compatibility version 1.0.0,
> > current version 111.1.4)
> > _______________________________________________
> > 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
>
> _______________________________________________
> 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



More information about the CMake mailing list