[CMake] fixup bundle vs Qy 5.5.1 and rpaths

Gregory Van Vooren gregoryvv at packz.com
Mon Jan 4 08:52:51 EST 2016


That solved my problem indeed. Thank you very much (and happy new year).

Kind regards,

Greg.

> On 18 Dec 2015, at 16:15, clinton at elemtech.com wrote:
> 
> 
> It appears you need to add the directory(ies) in the Qt installation containing the Qt libraries to your DIRS.
> 
> set( DIRS 
>  ${APP}/Contents/plugins/platforms
>  ${QT_BINARY_DIR}
>  ${QT_LIBRARY_DIR}
> )
> 
> I think it should have been that way, even with Qt 5.3.
> 
> Clint
> 
> ----- On Dec 18, 2015, at 6:12 AM, Gregory Van Vooren <gregoryvv at packz.com> wrote:
> 
> I have a project containing several applications (which are sub projects), each of which links against some Qt libraries which are built as dylibs, but are not part of the project. Qt libraries and headers are found using find-package which is working perfectly.
> 
> I’m currently trying to switch from Qt 5.3.1 to Qt 5.5.1, but am experiencing problems with fixup_bundle on OS X (everything else seems to work fine).
> As far as I’ve gathered Qt has introduced support for rpaths between those two version and this seems to be the cause of my problems.
> 
> Building a single application works and said application starts up correctly, but building the install target will give me the following output:
> 
> -- fixup_bundle: preparing...
> -- 
> warning: cannot resolve item 'libQt5Core_debug.5.dylib'
> 
>   possible problems:
>     need more directories?
>     need to use InstallRequiredSystemLibraries?
>     run in install tree instead of build tree?
> 
> -- warning: gp_resolved_file_type non-absolute file 'libQt5Core_debug.5.dylib' returning type 'other' -- possibly incorrect
> -- 
> warning: cannot resolve item 'libQt5Core_debug.5.dylib'
> 
>   possible problems:
>     need more directories?
>     need to use InstallRequiredSystemLibraries?
>     run in install tree instead of build tree?
> 
> warning: target 'libQt5Core_debug.5.dylib' is not absolute...
> warning: target 'libQt5Core_debug.5.dylib' does not exist...
> CMake Error at /Applications/CMake.app/Contents/share/cmake-3.4/Modules/GetPrerequisites.cmake:800 (message):
>   
>   /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool
>   failed: 1
> 
>   error:
>   /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool:
>   can't open file: libQt5Core_debug.5.dylib (No such file or directory)
> 
> Call Stack (most recent call first):
>   /Applications/CMake.app/Contents/share/cmake-3.4/Modules/GetPrerequisites.cmake:925 (get_prerequisites)
>   /Applications/CMake.app/Contents/share/cmake-3.4/Modules/BundleUtilities.cmake:555 (get_prerequisites)
>   /Applications/CMake.app/Contents/share/cmake-3.4/Modules/BundleUtilities.cmake:804 (get_bundle_keys)
>   someApplication/someApplication/cmake_install.cmake:115 (fixup_bundle)
> 
> 
> I’ll try to provide sufficient yet minimal information to pinpoint the root cause of the problem.
> In my top CMakeLists.txt I have the following:
> 
> set (
> 		QT_REQUIRED_PACKAGES
> 			Core
> 			Gui
> 			Widgets
> )
> 
> set( QT_ROOT_PATH "/usr/local/Qt-5.5.1" )
> set( QT_REQUIRED_PACKAGES ${QT_REQUIRED_PACKAGES} MacExtras )
> 
> set( 
> 	QT_PLUGINS_DIR
> 		"${QT_ROOT_PATH}/plugins"
> )
> 
> set ( CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "${QT_ROOT_PATH}/bin/" )
> 
> FOREACH(QT_PACKAGE ${QT_REQUIRED_PACKAGES})
> 	set( QT_PACKAGE_WITH_PREFIX "Qt5${QT_PACKAGE}" )
> 	set( "${QT_PACKAGE_WITH_PREFIX}_DIR" "${QT_ROOT_PATH}/lib/cmake/${QT_PACKAGE_WITH_PREFIX}" )
> 	find_package( "${QT_PACKAGE_WITH_PREFIX}" REQUIRED )
> 	include_directories( ${${QT_PACKAGE_WITH_PREFIX}_INCLUDE_DIRS} )
> 
> 	set_target_properties( "Qt5::${QT_PACKAGE}" PROPERTIES MAP_IMPORTED_CONFIG_DEBUG "DEBUG")
> 	set_target_properties( "Qt5::${QT_PACKAGE}" PROPERTIES MAP_IMPORTED_CONFIG_RELEASE "RELEASE")
> 	set_target_properties( "Qt5::${QT_PACKAGE}" PROPERTIES MAP_IMPORTED_CONFIG_RELWITHDEBINFO "RELEASE")
> ENDFOREACH(QT_PACKAGE)
> 
> add_definitions( ${QT_DEFINITIONS} )
> set( CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR} )
> 
> set( CMAKE_MACOSX_RPATH “" )
> 
> set_property( GLOBAL PROPERTY USE_FOLDERS ON )
> 
> add_subdirectory( someApplication )
> 
> 
> 
> 
> in the someApplication CMakeLists.txt I have the following:
> 
> set(
> 	someApplication_Qt_LIBRARIES
> 		${Qt5Core_LIBRARIES} 
> 		${Qt5Widgets_LIBRARIES} 
> )
> set_target_properties( someApplication PROPERTIES INSTALL_RPATH "${QT_ROOT_PATH}/lib" )
> foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
>     install( TARGETS someApplication DESTINATION bin/${OUTPUTCONFIG} CONFIGURATIONS ${OUTPUTCONFIG} )
> endforeach()
> 	
> add_custom_command( TARGET someApplication POST_BUILD COMMAND mkdir -p ${CMAKE_INSTALL_PREFIX}/LocalizationTools/someApplication/Debug/plugins/platforms/ )
> add_custom_command( TARGET someApplication POST_BUILD COMMAND cp -Rf "${QT_PLUGINS_DIR}/platforms/libqcocoa_debug.dylib" ${CMAKE_INSTALL_PREFIX}/LocalizationTools/someApplication/Debug/plugins/platforms/  )
> 	
> add_custom_command( TARGET someApplication POST_BUILD COMMAND mkdir -p ${CMAKE_INSTALL_PREFIX}/LocalizationTools/someApplication/Release/plugins/platforms/ )
> add_custom_command( TARGET someApplication POST_BUILD COMMAND cp -Rf "${QT_PLUGINS_DIR}/platforms/libqcocoa.dylib" ${CMAKE_INSTALL_PREFIX}/LocalizationTools/someApplication/Release/plugins/platforms/  )
> 		
> add_custom_command( TARGET someApplication POST_BUILD COMMAND mkdir -p `dirname $<TARGET_FILE: someApplication >`/../plugins )
> add_custom_command( TARGET someApplication POST_BUILD COMMAND cp -Rf ${CMAKE_INSTALL_PREFIX}/LocalizationTools/someApplication/$<$<CONFIG:Debug>:Debug>$<$<NOT:$<CONFIG:Debug>>:Release>/plugins/ `dirname $<TARGET_FILE: someApplication >`/../plugins/  )
> 
> add_custom_command( TARGET someApplication POST_BUILD COMMAND chmod -R +w `dirname $<TARGET_FILE: someApplication >` )
> 
> set( APP "${CMAKE_INSTALL_PREFIX}/bin/\${CMAKE_INSTALL_CONFIG_NAME}/someApplication.app" )
> 	
> set( DIRS 
> 	${APP}/Contents/plugins/platforms
> )
> 	
> install( CODE "
> 	file( WRITE \"${APP}/Contents/Resources/qt.conf\" \"[Paths]\\nPlugins <smb://nPlugins> = plugins\\n\" )
> 	" COMPONENT Runtime
> )
> 		
> foreach( DYNAMIC_LIBRARY ${someApplication_DYNAMIC_LIBRARIES} )
> 	add_custom_command( TARGET someApplication POST_BUILD COMMAND cp -Rf $<TARGET_FILE:${DYNAMIC_LIBRARY}> `dirname $<TARGET_FILE: someApplication >` )
> endforeach()
> 
> install( CODE "
> 	file( GLOB_RECURSE QT_PLATFORM_PLUGINS \"${APP}/Contents/plugins/platforms/*${CMAKE_SHARED_LIBRARY_SUFFIX}\" )
> 	include( BundleUtilities )
> 	fixup_bundle( \"${APP}\"   \"\${QT_PLATFORM_PLUGINS}\"   \"${DIRS}\" )
> 	" COMPONENT Runtime
> )
> 
> 
> Any help is greatly appreciated.
> 
> Kind regards,
> 
> Greg.
> 
> 
> -- 
> 
> Powered by www.kitware.com
> 
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
> 
> Kitware offers various services to support the CMake community. For more information on each offering, please visit:
> 
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
> 
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
> 
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/cmake

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20160104/cec70d70/attachment-0001.html>


More information about the CMake mailing list