Hi list,

I tried to create a portable application bundle for an application using 
wxWidgets with BundleUtilities (fixup_bundle).
It basically works, but I have two problems… any hints would be very helpful.

*** Problem 1: dylib symlinks
The application is built against shared wxWidgets libraries installed via 
MacPorts.
This is what wxWidgets creates as libraries:
<<<
-rwxr-xr-x   1 root        staff  5435032 20 Nov  2013 
libwx_osx_cocoau_core-3.0.0.0.0.dylib
lrwxr-xr-x   1 root        staff       37 24 Mai 21:06 
libwx_osx_cocoau_core-3.0.0.dylib -> libwx_osx_cocoau_core-3.0.0.0.0.dylib
lrwxr-xr-x   1 root        staff       33 24 Mai 21:06 
libwx_osx_cocoau_core-3.0.dylib -> libwx_osx_cocoau_core-3.0.0.dy
>>>
One “real” lib and a couple of symlinks with less detailed version numbers 
pointing to each other.
At least quite common in the Linux world…

The (cmake-built) application binaries now link against 
  libwx_osx_cocoau_core-3.0.dylib
whereas another used library of wxWidgets itself (e.g., 
libwx_osx_cocoau_gl.3.0.dylib) links against
  libwx_osx_cocoau_core-3.0.0.0.0.dylib
fixup_bundle now ends up copying each version to the app bundle, a …-3.0.dylib 
and a …-3.0.0.0.0.dylib. 
Unfortunately, it is not symlinking one to the other but copies them as 
identical instances.
So, executing the application binary fails because it loads separate instances 
of the dylib.
If I manually turn one of the copied links into a symlink to the other, 
everything works fine.

I googled around quite a bit, but I didn’t find any hints… since symlinking 
library versions is quite common AFAIK, what am I missing and/or is there a fix 
for this?
BTW: I also tried dylibbundler, which seems to have the same problem...


*** Problem 2: Framework handling
MacPorts installs wxWidgets dylibs to the path
  /opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.0/lib/…
The application is linked normally against a library in that path.
Because of the “.framework" folder BindUtilities think that this is about a 
framework, but then the regular expression
  string(REGEX REPLACE "^.*(${item_name}.framework/.*/?${item_name}).*$”
doesn’t match (because item_name is sth. like "libwx_osx_…dylib" instead of 
“wxWidgets") and the resulting embedded_name is just the full path/name of the 
library - and then it isn’t copied to the bundle later on.
I temporarily commented out the framework stuff and then it copies the library 
without any problem just like any other dylib.

Should the framework detection be extended such that it doesn’t think of a 
framework if a single library (ending with .dylib) contains .framework? Or, is 
the folder naming as done by MacPorts installation just wrong/illegal?


Best regards,
Bernhard



-- 

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://www.cmake.org/mailman/listinfo/cmake

Reply via email to