On 06/15/2011 01:58 PM, Dominik Szczerba wrote:
> I am trying to copy all libboost* stuff from /usr/lib to
> CMAKE_INSTALL_PREFIX just as most users would guess:
> 
> INSTALL(DIRECTORY ${BOOST_RUNTIME_DIR}/ DESTINATION
> ${CMAKE_INSTALL_PREFIX}/bin FILES_MATCHING .......)
> 
> Whatever I specify for matching I always get half of my system copied
> instead of the requested files. E.g.

The FILES_MATCHING option of INSTALL(DIRECTORY ...) applies to files
only, i.e. with the above-noted line and BOOST_RUNTIME_DIR==/usr/lib,
you'll get the *whole* directory structure under /usr/lib including
symlinks to directories, but only files and symlinks to files which
match PATTERN/REGEX, copied to DESTINATION. Supposedly, this is
what you denote "half of my system copied".

> PATTERN "libboost*.so" does absolutely nothing and REGEX
> "libboost.*\.so.*$" complains about the slash, when removed does
> nothing either. As a result all content is always copied.

The REGEX should read "libboost.*\\.so.*$" or "libboost.*\\.so.*\$",
and what do you mean exactly with "does absolutely nothing" and "does
nothing either"? Nothing copied at all or just directories but no files?

On my system,

INSTALL(DIRECTORY /usr/lib/ DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
FILES_MATCHING PATTERN "libboost*.so")

as well as

INSTALL(DIRECTORY /usr/lib/ DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
FILES_MATCHING REGEX "libboost.*\\.so.*\$")

yield the results expected from the documentation, i.e. the whole but
shallow directory structure under /usr/lib and the libboost*.so or
libboost.*\\.so.*\$ files and symlinks, respectively; check with
find <CMAKE_INSTALL_PREFIX>/bin -name "*.so" -o -name "*.so.*".

> Interestingly and confusingly, the same thing (only used PATTERN)
> works for e.g. "*.h". What is special here?
> 
> Are there any examples how to use this functionality? Both the
> documentation and the FAQ are not very comprehensive in this matter.

Obviously, your approach to copy the Boost libraries from /usr/lib
using INSTALL(DIRECTORY /usr/lib/ ... FILES_MATCHING ...) is not
appropriate. Instead, you might use a suitably configured CMake
script which runs FILE(GLOB ...) or FILE(GLOB_RECURSE ...) and
FILE(INSTALL|COPY ...) and is invoked by INSTALL(SCRIPT ...).
In this way, you'll have your project's Boost installation
done in one go during the project's installation.

'hope that helps.

Regards,

Michael
_______________________________________________
Powered by 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

Reply via email to