On Fri, Dec 12, 2008 at 9:34 AM, Martin Apel <span dir="ltr">&lt;<a href="mailto:martin.apel@simpack.de">martin.apel@simpack.de</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">Philip Lowman wrote:<br>
&gt; On Wed, Dec 10, 2008 at 4:04 AM, Martin Apel &lt;<a href="mailto:martin.apel@simpack.de">martin.apel@simpack.de</a><br>
</div><div><div></div><div class="Wj3C7c">&gt; &lt;mailto:<a href="mailto:martin.apel@simpack.de">martin.apel@simpack.de</a>&gt;&gt; wrote:<br>
&gt;<br>
&gt; &nbsp; &nbsp; Hi there,<br>
&gt;<br>
&gt; &nbsp; &nbsp; I am trying to install the boost libraries my software needs into the<br>
&gt; &nbsp; &nbsp; target installation directory as follows:<br>
&gt;<br>
&gt; &nbsp; &nbsp; Find_Package(Boost 1.34.1 COMPONENTS filesystem system signals<br>
&gt; &nbsp; &nbsp; program_options REQUIRED)<br>
&gt; &nbsp; &nbsp; FOREACH (Lib ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY}<br>
&gt; &nbsp; &nbsp; ${Boost_SIGNALS_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY})<br>
&gt; &nbsp; &nbsp; &nbsp;INSTALL(PROGRAMS ${Lib} DESTINATION run/bin)<br>
&gt; &nbsp; &nbsp; ENDFOREACH (Lib ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY}<br>
&gt; &nbsp; &nbsp; ${Boost_SIGNALS_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY})<br>
&gt;<br>
&gt; &nbsp; &nbsp; The variables returned from FindBoost contain symlinks to the real<br>
&gt; &nbsp; &nbsp; libraries, e.g.<br>
&gt; &nbsp; &nbsp; &nbsp;libboost_system-gcc43-mt-1_35.so -&gt;<br>
&gt; &nbsp; &nbsp; libboost_system-gcc43-mt-1_35.so.1.35.0<br>
&gt;<br>
&gt; &nbsp; &nbsp; When installing these the files in the destination directory are<br>
&gt; &nbsp; &nbsp; symlinks again, which is not what I want. I tried using<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;GET_FILENAME_COMPONENT(LibWithoutSymLink ${Lib} ABSOLUTE)<br>
&gt; &nbsp; &nbsp; in the above loop, but this does not help, the returned path still<br>
&gt; &nbsp; &nbsp; does<br>
&gt; &nbsp; &nbsp; not contain the resolved name. This looks to me like a bug in the<br>
&gt; &nbsp; &nbsp; implementation<br>
&gt; &nbsp; &nbsp; of GET_FILENAME_COMPONENT. Is there any recommended way to install<br>
&gt; &nbsp; &nbsp; referenced libraries including resolving any symlinks?<br>
&gt;<br>
&gt;<br>
&gt; You could file a feature request to have that implemented. &nbsp;Ultimately<br>
&gt; though that won&#39;t be portable because on Windows it would resolve to a<br>
&gt; &quot;.lib&quot; when you would want a &quot;.dll&quot;. &nbsp;And you probably want something<br>
&gt; that works now for this.<br>
&gt;<br>
&gt;<br>
&gt; Boost_INCLUDE_DIR in conjuction with FILE(GLOB...) and INSTALL() would<br>
&gt; probably work much better for you. &nbsp;Perhaps something like this?<br>
&gt;<br>
&gt; FILE(GLOB my_boost_system_libs<br>
&gt; ${Boost_INCLUDE_DIR}/lib/libboost_system*.so)<br>
&gt; IF(my_boost_system_libs)<br>
&gt; &nbsp; &nbsp; &nbsp;INSTALL(FILES ${my_boost_system_libs} DESTINATION lib)<br>
&gt; ENDIF()<br>
&gt;<br>
&gt; Obviously you would need two GLOB&#39;s for this to be portable to WIN32.<br>
</div></div>Hi Philip,<br>
<br>
I tried to avoid this, because the naming scheme for Boost libraries is<br>
complicated (compiler version, threading). Therefore I used the<br>
variables provided by FindBoost to get the names. Anyway I would have<br>
expected GET_FILENAME_COMPONENT to return the referenced file, which it<br>
doesn&#39;t. I&#39;m still not sure, if this is a bug or expected behaviour?</blockquote><div><br>This looks like a missing feature request and not a bug.&nbsp; I would request an option be added to GET_FILENAME_COMPONENT that follows symbolic links recursively back to their source (CANONICALIZE perhaps?).&nbsp; In the meantime you can use the &quot;readlink&quot; program to do this for you.<br>
</div></div><br>-- <br>Philip Lowman<br>