On Jul 23, 2008, at 3:20 PM, Shead, Timothy wrote:

On 7/23/08 11:14 AM, "Mike Arthur" <[EMAIL PROTECTED]> wrote:

On Wednesday 23 July 2008 16:06:21 Mike Jackson wrote:
What would probably be nice at this point would be an example OS X
centric project that uses all these ideas with code explanations for
each step.
I think what would be nice is if CMake did this for us! If this is fairly standard when packaging on OSX then it would be good if there were some integration for this, even if we had to specify the relocations manually.

That's definitely the long-term intent; in the meantime, an intermediate
solution would be to do the following:

INSTALL(CODE "EXECUTE_PROCESS(COMMAND install_name_tool -change
/path/to/external.dylib @executable/external.dylib
\${CMAKE_INSTALL_PREFIX}/bin/my_binary)")

 ... for each combination of binary / external dependency.  For a
reasonably-large project this list gets painfully long, but it does give a
sense of the scope of the problem ;)

One improvement on this approach might be a wrapper for install_name_tool
that would do regex replacements - many similar install names could be
altered in one-step, or one-at-a-time based on developer preference.

Cheers,
Tim



just to _really_ shine the light on the problem, suppose from the example above, that you do change that library. You then need to look at "external.dylib" and see exactly what it depends on and see if any of those entries need to be changed. For example, in the Qt Framworkes, QtGui depends on QtCore, so changing the "install_name" of the QtGui library isn't enough, you need to change the reference in the QtGui library to reference the QtCore library that is bundled with the application. So this gets _really_ interesting really quick.

Basically you start with the application, check its dependencies, change what needs to be changed (System libraries/frameworks do NOT need to be changed), then move on to each lirbrary, check its dependencies, change what needs to be changed.. you get the idea.

Just being thorough.

In the solution that I cooked up one of the problems that I had was that I depended on the external library to be where the path encoded in the executable said it was. If it had an install_name of "libexternal.dylib" then my script would not work for that library. I need a mechanism to be able to "look" for the library somewhere, maybe I could extract out all the -L arguments to the linker for that? Dunno. Anyway, it works for my projects currently.

And again, Xcode does not do this for you so it is not surprising that CMake does not do it.

mike

_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to