[cmake-developers] [CMake 0015918]: fixup_bundle issues with dependency @loader_path

Mantis Bug Tracker mantis at public.kitware.com
Wed Jan 13 23:08:00 EST 2016


The following issue has been SUBMITTED. 
====================================================================== 
https://cmake.org/Bug/view.php?id=15918 
====================================================================== 
Reported By:                xzcvczx
Assigned To:                
====================================================================== 
Project:                    CMake
Issue ID:                   15918
Category:                   Modules
Reproducibility:            always
Severity:                   minor
Priority:                   normal
Status:                     new
====================================================================== 
Date Submitted:             2016-01-13 23:08 EST
Last Modified:              2016-01-13 23:08 EST
====================================================================== 
Summary:                    fixup_bundle issues with dependency @loader_path
Description: 
If a cmake project target (1) depends on a library (2) which depends on another
library(3) using @loader_path then fixup_bundle won't be able to copy (3) as it
will not understand the path @loader_path, nor does it have enough information
to resolve the path.

Steps to Reproduce: 
I currently have an application which depends on

/usr/local/lib/libboost_context-mt.dylib
this in turn depends on
@loader_path/libboost_chrono-mt.dylib

libboost was installed using homebrew. I was having issues as @loader_path was
not being copied into the binaries directory as part of the fixup_bundle process
and so it would fail.

After a fair amount of work i found it was use get_prerequisites which would
give a list of files, but it never provides the resolved paths, I hacked this to
provide the resolved paths, and then when verify_app was occuring it would die
there as well due to everything having a resolved path

Attached is a patch that allows it to work but is just a hack which works by
adding a argument to add_reprequisites thats currently being used to say whether
a resolved path or a relative path is wanted.

Additional Information: 
otool -L for the cmake target (1)

build/eeschema/eeschema.app/Contents/MacOS/eeschema:
	/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility
version 1.0.0, current version 275.0.0)
	/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility
version 2.0.0, current version 157.0.0)
	/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility
version 1.0.0, current version 22.0.0)
	/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
(compatibility version 1.0.0, current version 492.0.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version
1226.10.1)
	/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility
version 1.0.0, current version 1.0.0)
	/Users/simon/Documents/stuff/kicad-mac-packaging/wx/wx-build/../wx-bin/lib/libwx_osx_cocoau_gl-3.0.0.dylib
(compatibility version 3.0.0, current version 3.0.0)
	/Users/simon/Documents/stuff/kicad-mac-packaging/wx/wx-build/../wx-bin/lib/libwx_osx_cocoau-3.0.0.dylib
(compatibility version 3.0.0, current version 3.0.0)
	/usr/local/opt/boost/lib/libboost_context-mt.dylib (compatibility version
0.0.0, current version 0.0.0)
	/usr/local/opt/boost/lib/libboost_system-mt.dylib (compatibility version 0.0.0,
current version 0.0.0)
	/usr/local/opt/boost/lib/libboost_thread-mt.dylib (compatibility version 0.0.0,
current version 0.0.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
	/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
(compatibility version 150.0.0, current version 1256.14.0)

otool -L for brew installed libboost_context-mt.dylib (2)
/usr/local/opt/boost/lib/libboost_context-mt.dylib:
	/usr/local/opt/boost/lib/libboost_context-mt.dylib (compatibility version
0.0.0, current version 0.0.0)
	@loader_path/libboost_chrono-mt.dylib (compatibility version 0.0.0, current
version 0.0.0)
	@loader_path/libboost_thread-mt.dylib (compatibility version 0.0.0, current
version 0.0.0)
	@loader_path/libboost_system-mt.dylib (compatibility version 0.0.0, current
version 0.0.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version
1225.1.1)

otool -L for brew installed libboost_chrono-mt.dylib
/usr/local/opt/boost/lib/libboost_chrono-mt.dylib:
	/usr/local/opt/boost/lib/libboost_chrono-mt.dylib (compatibility version 0.0.0,
current version 0.0.0)
	@loader_path/libboost_system-mt.dylib (compatibility version 0.0.0, current
version 0.0.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version
1225.1.1)
====================================================================== 

Issue History 
Date Modified    Username       Field                    Change               
====================================================================== 
2016-01-13 23:08 xzcvczx        New Issue                                    
2016-01-13 23:08 xzcvczx        File Added: Bundle.patch                     
======================================================================



More information about the cmake-developers mailing list