[CMake] installing dependents
David Cole
david.cole at kitware.com
Mon Jul 20 13:51:30 EDT 2009
On Mon, Jul 20, 2009 at 1:39 PM, Clinton Stimpson <clinton at elemtech.com>wrote:
>
> Thanks. Do you know if gp_resolve_item handles 64 and 32 bit binaries
> correctly on Windows?
Definitely not. On Windows, it uses find_program to find the dlls in the
PATH or in a list of directories provided by the caller... This is only
based on dll name, so it could potentially return improper results (with
respect to 32- and 64-bit dlls). You can either: fix gp_resolve_item to
consider the bit-ness of the result, or provide a cmake function named
"gp_resolve_item_override" in which you deliver the result in your own code.
Preferably, add code to gp_resolve_item to match the bit-ness of the result
with the bit-ness of the input...
(Personally, I would really like to see a general CMake solution to the
problem of matching library bit-ness for Win32 and Win64 uses of
find_library / find_program.... That may be a bit beyond the scope of what
you're hoping to achieve here though.)
Keep up the good work! Sounds like you are making progress on this stuff...
:-)
David
>
> "dumpbin /dependents" is used and it doesn't return full paths like ldd
> does on Linux, or otool on Mac.
> I put both in my PATH, so I can run both 32 and 64 bit programs. I just
> wanted to make sure I was getting the right .dll when I copy it into my
> installation directory.
>
> Clint
>
> David Cole wrote:
>
>> On Fri, Jul 17, 2009 at 6:48 PM, David Cole <david.cole at kitware.com<mailto:
>> david.cole at kitware.com>> wrote:
>>
>> No. It's supposed to return the actual string that is referenced
>> by the thing being analyzed. But you can call gp_resolve_item to
>> get the full path... (There is a reason for this, although I can't
>> remember what it is at the moment... If I think of it, I'll reply
>> again.)
>>
>>
>> I thought of/remembered the reason, so I'm replying again:
>>
>> The get_prerequisites function needs to return items exactly as they are
>> referenced in the executable being analyzed such that ...... later on, the
>> caller can use that string as an input to install_name_tool for replacing it
>> with something like "@executable_path/...." -- if the item were returned
>> resolved, then we would have to re-analyze the executable later to figure
>> out which string in the otool output corresponds to the resolved item... (Or
>> keep a map of them around, as is done in BundleUtilities...)
>>
>>
>>
>>
>> From commentary in the middle of the get_prerequisites function:
>>
>> # Use the raw_item as the list entries returned by this
>> function. Use the
>> # gp_resolve_item function to resolve it to an actual full
>> path file if
>> # necessary.
>> #
>> set(item "${raw_item}")
>>
>>
>> HTH,
>> David
>>
>>
>> On Fri, Jul 17, 2009 at 6:40 PM, Clinton Stimpson
>> <clinton at elemtech.com <mailto:clinton at elemtech.com>> wrote:
>>
>>
>> Is get_prerequisites() supposed to return absolute paths all
>> the time?
>> For example, on the Mac, I've got some frameworks in
>> /Library/Frameworks that I may want to copy if they might not
>> exist on other Macs. When I call get_prerequisites(), getting
>> "foo.framwork/" instead of "/Library/Frameworks/foo.framework/"
>>
>> Clint
>>
>> David Cole wrote:
>>
>> So I would love to see a corollary to
>> BundleUtilities.cmake for Mac on Windows and Linux, too.
>>
>> Using GetPrerequisites to gather the set of dependent
>> files is obviously the first step.
>>
>> Then, on Windows, a function that installs all the
>> dependent dlls to the same location as the executable
>> would be awesome.
>>
>> On Linux, I guess you would have to make sure everything
>> you depend on is either already installed in its install
>> path, or aware of your install path, or uses
>> LD_LIBRARY_PATH -- the issues here are the ones I am least
>> familiar with (compared to Windows and Mac anyhow).
>>
>> I don't think this should ever be fully automated because
>> of licensing and coyright issues. Technically, it is easy
>> to gather the set of required files to make something work
>> on a practical level. The issue will be: "hey, you're not
>> allowed to copy *that* dll" because of such and such
>> non-technical reason...
>>
>> Having said all this, and that I would love to see it, I
>> must admit: it is not presently on the radar for any CMake
>> developers as far as I know. So, as always: patches
>> welcome. :-)
>>
>>
>> HTH,
>> David
>>
>>
>> On Fri, Jul 17, 2009 at 3:05 PM, Clinton Stimpson
>> <clinton at elemtech.com <mailto:clinton at elemtech.com>
>> <mailto:clinton at elemtech.com
>>
>> <mailto:clinton at elemtech.com>>> wrote:
>>
>> So I'm using GetPrequisites.cmake to gather dependencies.
>> Are there any examples, tips, etc.. for using this?
>>
>> With the results I'm getting back, I do a
>> file(INSTALL ... ) because that's what I see in the
>> cmake_installcmake file. Should it be documented?
>> But these files I'm getting back are soft links to the real
>> library. And the file(INSTALL ... ) just puts a
>> softlink in my
>> installation directory instead of a real library.
>>
>> Is there some higher level cmake function I should be
>> calling to
>> install libraries on Unix/Linux, similar to how there is
>> BundleUtilties.cmake for Mac? Or ideally, is there one
>> function I
>> can use on all platforms to install some prerequisites?
>>
>> Thanks,
>> Clint
>>
>> _______________________________________________
>> Powered by www.kitware.com <http://www.kitware.com>
>> <http://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 <http://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
>>
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20090720/280aa06b/attachment.htm>
More information about the CMake
mailing list