<div dir="ltr">I wanted to try Conda for normal day-to-day C++ development, while having all the dependencies isolated from other projects and the base system.<div><br></div><div>- Change the sources</div><div>- Build</div><div>- Run the tests</div><div>- Repeat</div><div><br></div><div>The most common workflow possible. I shouldn't go through conda-build for that. There is nothing special about $CONDA_PREFIX that requires handling by conda-build, I just need to point to the headers and the libraries (which by using Conda are conveniently under a single prefix).</div><div><br></div><div>Then when development is more or less ready I can use conda-build to create a package that can be installed and tested in other environments, and it works fine when building/installing a CMake project (I have being doing that without problems these last days and I happy with it, much better than Nix).</div><div><br></div><div>My main issue is that, as I explained, I cannot run the tests because $CONDA_PREFIX/lib is not in the build RPATH, and I wanted to understand why, and maybe get a workaround.</div><div>Passing -DCMAKE_BUILD_RPATH=$CONDA_PREFIX/lib allows the dependencies to be found, but it doesn't really do the same thing.</div><div><br></div><div><br></div><div>Another common thing that may be done is to develop a couple of projects in the same environment:</div><div><br></div><div>- Work on A</div><div>- Install A into $CONDA_PREFIX, so I can compile B against it and check their integration</div><div>- Back to more work on A</div><div>- Run the tests of A to check changes</div><div><br></div><div>I have being using CMake exclusively in the last 5+ years, and I got used to the way the RPATH are set in the build tree. I know that if I run the tests, they will run agains the modified version of A compiled in the build tree, and not the version installed previously in PREFIX.</div><div><br></div><div>(Somebody may say that A and B should be built at the same time [with build tree exports and add_directory, or going through the package registry], but that's not the point. B may not even use CMake).</div><div><br></div><div>CMake defaults plus Anaconda compilers break that by not having the RPATH in the expected order. And it is not easy to get them right.</div><div><br></div><div>But maybe it is just me too accustomed to the way CMake works by default. I don't really know how people using Autotools or Meson run their tests. Do they set the RPATH?</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">El mar., 14 de ago. de 2018 a la(s) 03:43, Ray Donnelly (<a href="mailto:mingw.android@gmail.com">mingw.android@gmail.com</a>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Why are you not using conda-build here? Anaconda Distro and<br>
conda-forge build countless CMake projects. It handles so much extra<br>
stuff on top of building (DSO verification, rpath rewriting, more). If<br>
your end goal is not conda packages then you can untar most sets of<br>
conda-packages to make working software installations (caveat for most<br>
being that some software requires what we call 'prefix replacament'<br>
and those aren't trivially relocatable).<br>
<br>
IMHO CMake's handling of RPATHs is broken, as per my "determine<br>
implicit linker directories" PR which there seems to be little to no<br>
interest in instead preferring toolchain cmake files for something<br>
that *clearly* should be queried from the link as it is imperative<br>
when building software that CMake and the toolchain agree on things as<br>
fundamental as this.<br>
<br>
RPATH is never set by a toolchain except through being passed to it<br>
(by CMake's logic, fixed by<br>
<a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__gitlab.kitware.com_cmake_cmake_merge-5Frequests_207&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=wviv_JywOo9sb5vTUw4ilTQ5JMOrMD9A_hxuf-rCcZA&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=https-3A__gitlab.kitware.com_cmake_cmake_merge-5Frequests_207&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=wviv_JywOo9sb5vTUw4ilTQ5JMOrMD9A_hxuf-rCcZA&e=</a> ).<br>
<br>
I would again request that this pretty trivial, obvious and important<br>
PR gets some consideration. Without it CMake asks anyone trying to<br>
build a software distro with more than simple system prefix-based<br>
compilation will run into needing this fix or needing to provide a<br>
toolchain just to tell CMake what it should figure out for itself.<br>
<br>
On Tue, Aug 14, 2018 at 2:12 AM, Sebastián Mancilla <<a href="mailto:smancill@jlab.org" target="_blank">smancill@jlab.org</a>> wrote:<br>
> Thanks for the links.<br>
><br>
> The problem of setting CMAKE_BUILD_RPATH to $CONDA_PREFIX/lib is that<br>
> for binaries and libraries in the build tree, the list of RPATH<br>
> locations will be in the wrong order: the dependencies library path<br>
> will be first, and then the build tree. This will break the unit tests<br>
> if the library was installed previously (for example, to check the<br>
> library by running other installed programs), and then modified as<br>
> part of normal development, because the installed version will be<br>
> loaded instead of the version in the build tree. CMake supports this<br>
> use case out of the box and it works great (when not using Anaconda).<br>
><br>
> Note that in Linux the $CONDA_PREFIX/lib seems to be added to the<br>
> RPATH by the Anaconda toolchain itself, and it will appear first, so<br>
> there is nothing that can be done about that with CMake.<br>
><br>
> It seems that the workarounds when using Anaconda compilers, and doing<br>
> development, are:<br>
><br>
> - Always install before unit testing changes to the library being<br>
> developed (and set CMAKE_BUILD_RPATH).<br>
> - Never install the library (so the build tree not being first in the<br>
> RPATH is not an issue, and set CMAKE_BUILD_RPATH), create a different<br>
> environment to test installation.<br>
> - Don't use the build RPATH and set the proper environment variables<br>
> ([DY]LD_LIBRARY_PATH) with the right path order when running from the<br>
> build tree.<br>
> - Manipulate the RPATH manually (with patchelf or similar).<br>
> - Don't use Anaconda compilers (will there be binary issues with<br>
> Anaconda dependencies?)<br>
><br>
> But they are not ideal.<br>
><br>
><br>
> If the Conda environment is not being used for development and someone<br>
> wants to just build and use some binary/library, setting<br>
> CMAKE_INSTALL_RPATH to $CONDA_PREFIX/lib and then installing will work<br>
> fine. And it looks that is not even necessary on Linux, because the<br>
> RPATH is already set by the toolchain.<br>
><br>
> El lun., 13 de ago. de 2018 a la(s) 13:35, Isaiah Norton<br>
> (<a href="mailto:isaiah.norton@gmail.com" target="_blank">isaiah.norton@gmail.com</a>) escribió:<br>
>><br>
>> See also:<br>
>><br>
>> <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__gitlab.kitware.com_cmake_cmake_merge-5Frequests_207&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=wviv_JywOo9sb5vTUw4ilTQ5JMOrMD9A_hxuf-rCcZA&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=https-3A__gitlab.kitware.com_cmake_cmake_merge-5Frequests_207&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=wviv_JywOo9sb5vTUw4ilTQ5JMOrMD9A_hxuf-rCcZA&e=</a> <br>
>><br>
>><br>
>> <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__gitlab.kitware.com_cmake_cmake_issues_17483&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=1HXSUEWs7xRLJp5YZX-GkAVK2XOSe8fuzCRIAvAfNcA&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=https-3A__gitlab.kitware.com_cmake_cmake_issues_17483&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=1HXSUEWs7xRLJp5YZX-GkAVK2XOSe8fuzCRIAvAfNcA&e=</a> (looks semi-related)<br>
>><br>
>> Ray Donnelly, who filed those issues, maintains the Anaconda compiler toolchain -- so you are in good company hitting this issue. It looks like some conda recipes explicitly define INSTALL_RPATH, likely for this reason:<br>
>><br>
>> <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_AnacondaRecipes_vtk-2Dfeedstock_blob_791a1db9026fa2c81d171c38835b512adf221794_recipe_build.sh-23L30&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=06Ed9Yo2DX991fx_H21n9HBNLLFLNa94vVxrGHTc75I&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_AnacondaRecipes_vtk-2Dfeedstock_blob_791a1db9026fa2c81d171c38835b512adf221794_recipe_build.sh-23L30&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=06Ed9Yo2DX991fx_H21n9HBNLLFLNa94vVxrGHTc75I&e=</a> <br>
>><br>
>><br>
>><br>
>> On Mon, Aug 13, 2018 at 11:54 AM Isaiah Norton <<a href="mailto:isaiah.norton@gmail.com" target="_blank">isaiah.norton@gmail.com</a>> wrote:<br>
>>><br>
>>> The RPATH is not included when using Anaconda because CMake considers the Anaconda lib path to be an implicit link directory (as reported by the compiler). Look at `$build_dir/CMakeFiles/CMakeOutput.log` in the section about "implicit link info".<br>
>>><br>
>>> The simplest work-around is to set BUILD_RPATH manually, and possibly also INSTALL_RPATH, depending on what conda-build's fixup routine expects.<br>
>>><br>
>>> For example, adding this line near the top of your example CMakeList fixed the resulting binary, at least in the build directory:<br>
>>><br>
>>> set(CMAKE_BUILD_RPATH "$ENV{CONDA_PREFIX}/lib")<br>
>>><br>
>>><br>
>>> On Fri, Aug 10, 2018 at 5:55 PM Sebastián Mancilla <<a href="mailto:smancill@jlab.org" target="_blank">smancill@jlab.org</a>> wrote:<br>
>>>><br>
>>>> I am trying to use Conda as a package manager for isolated C++ development<br>
>>>> environments. But unfortunately, when using CMake with the Anaconda-provided<br>
>>>> compilers [1] (which are used to compile the binary packages in the Anaconda<br>
>>>> repositories), things do not work as expected.<br>
>>>><br>
>>>> I have a small test case available here [2], with an executable calling a<br>
>>>> shared library and a third-party dependency installed with Conda.<br>
>>>><br>
>>>> [1]: <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__conda.io_docs_user-2Dguide_tasks_build-2Dpackages_compiler-2Dtools.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=jvTiH6i8c51MldDSbrw1AxiclEs1TKUMg-iQpLOoJqM&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=https-3A__conda.io_docs_user-2Dguide_tasks_build-2Dpackages_compiler-2Dtools.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=jvTiH6i8c51MldDSbrw1AxiclEs1TKUMg-iQpLOoJqM&e=</a> <br>
>>>> [2]: <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__gist.github.com_smancill_b28ca07ac11fdf285b4d559545a1630b&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=q3em0cZgykXNfXgRt7bdxCnVuz0FkuNVx462yPtpEbA&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=https-3A__gist.github.com_smancill_b28ca07ac11fdf285b4d559545a1630b&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=q3em0cZgykXNfXgRt7bdxCnVuz0FkuNVx462yPtpEbA&e=</a> <br>
>>>><br>
>>>> --------------------------------------------------<br>
>>>><br>
>>>> First, when using the system compiler, all works fine (but I am not sure of the<br>
>>>> binary compatibility with the Conda packages, that's why I want to use the<br>
>>>> Anaconda compilers):<br>
>>>><br>
>>>> # create the environment and install XercesC<br>
>>>> $ conda create -n test-system xerces-c<br>
>>>> ...<br>
>>>> environment location: /Users/smancill/.local/share/miniconda3/envs/test-system<br>
>>>> ...<br>
>>>> The following NEW packages will be INSTALLED:<br>
>>>><br>
>>>> icu: 58.2-h4b95b61_1<br>
>>>> libcxx: 4.0.1-h579ed51_0<br>
>>>> libcxxabi: 4.0.1-hebd6815_0<br>
>>>> xerces-c: 3.2.1-h44e365a_0<br>
>>>> ...<br>
>>>><br>
>>>> # activate the environment<br>
>>>> $ conda activate test-system<br>
>>>><br>
>>>> $ mkdir build-osx-system<br>
>>>> $ cd build-osx-system<br>
>>>> $ cmake -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX -DCMAKE_PREFIX_PATH=$CONDA_PREFIX ..<br>
>>>> -- The CXX compiler identification is AppleClang 9.0.0.9000039<br>
>>>> -- Check for working CXX compiler: /usr/bin/c++<br>
>>>> -- Check for working CXX compiler: /usr/bin/c++ -- works<br>
>>>> ...<br>
>>>> -- Found XercesC: /Users/smancill/.local/share/miniconda3/envs/test-system/lib/libxerces-c.dylib (found version "3.2.1")<br>
>>>> -- Configuring done<br>
>>>> -- Generating done<br>
>>>> -- Build files have been written to: /Users/smancill/src/conda-test/build-osx-system<br>
>>>><br>
>>>> $ make -j1 VERBOSE=1<br>
>>>> ...<br>
>>>> [100%] Linking CXX executable bar<br>
>>>> /usr/local/bin/cmake -E cmake_link_script CMakeFiles/bar.dir/link.txt --verbose=1<br>
>>>> /usr/bin/c++ -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.13.sdk -mmacosx-version-min=10.12 -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/bar.dir/bar.cpp.o -o bar -Wl,-rpath,/Users/smancill/src/conda-test/build-osx-system -Wl,-rpath,/Users/smancill/.local/share/miniconda3/envs/test-system/lib libfoo.dylib /Users/smancill/.local/share/miniconda3/envs/test-system/lib/libxerces-c.dylib<br>
>>>> ...<br>
>>>><br>
>>>> The build directory (~/src/conda-test/build-osx-system) and the conda<br>
>>>> environment lib directory (~/.local/share/miniconda3/envs/test-system/lib)<br>
>>>> are correctly added to the RPATH in the build tree by the link command:<br>
>>>><br>
>>>> $ ./bar<br>
>>>> Hello, world!<br>
>>>><br>
>>>> $ otool -L ./bar<br>
>>>> ./bar:<br>
>>>> @rpath/libfoo.dylib (compatibility version 1.0.0, current version 0.0.0)<br>
>>>> @rpath/libxerces-c-3.2.dylib (compatibility version 0.0.0, current version 0.0.0)<br>
>>>> /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0)<br>
>>>> /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0)<br>
>>>><br>
>>>> $ otool -l ./bar | grep -A2 LC_RPATH<br>
>>>> cmd LC_RPATH<br>
>>>> cmdsize 56<br>
>>>> path /Users/smancill/src/conda-test/build-osx-system (offset 12)<br>
>>>> --<br>
>>>> cmd LC_RPATH<br>
>>>> cmdsize 80<br>
>>>> path /Users/smancill/.local/share/miniconda3/envs/test-system/lib (offset 12)<br>
>>>><br>
>>>> If I install the binary, it fails because I haven't configured CMake to set the install RPATH:<br>
>>>><br>
>>>> $ make install<br>
>>>> ...<br>
>>>> Install the project...<br>
>>>> -- Install configuration: ""<br>
>>>> -- Installing: /Users/smancill/.local/share/miniconda3/envs/test-system/lib/libfoo.dylib<br>
>>>> -- Installing: /Users/smancill/.local/share/miniconda3/envs/test-system/include/foo.hpp<br>
>>>> -- Installing: /Users/smancill/.local/share/miniconda3/envs/test-system/bin/bar<br>
>>>><br>
>>>> $ bar<br>
>>>> dyld: Library not loaded: @rpath/libfoo.dylib<br>
>>>> Referenced from: /Users/smancill/.local/share/miniconda4/envs/test-system/bin/bar<br>
>>>> Reason: image not found<br>
>>>> [1] 84611 abort bar<br>
>>>><br>
>>>> $ otool -L $CONDA_PREFIX/bin/bar<br>
>>>> /Users/smancill/.local/share/miniconda3/envs/test-system/bin/bar:<br>
>>>> @rpath/libfoo.dylib (compatibility version 0.0.0, current version 0.0.0)<br>
>>>> @rpath/libxerces-c-3.2.dylib (compatibility version 0.0.0, current version 0.0.0)<br>
>>>> /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0)<br>
>>>> /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0)<br>
>>>><br>
>>>> $ otool -l $CONDA_PREFIX/bin/bar | grep -A2 LC_RPATH<br>
>>>> # empty<br>
>>>><br>
>>>> # deactivate the environment to start again<br>
>>>> $ conda deactivate<br>
>>>><br>
>>>> The same can be observed on Linux. Everything works as it should.<br>
>>>><br>
>>>> --------------------------------------------------<br>
>>>><br>
>>>> If I try to use Anaconda compilers on macOS, the build RPATH is not set<br>
>>>> properly anymore:<br>
>>>><br>
>>>> # create the environment and install the Anaconda compiler for macOS, and XercesC<br>
>>>> $ conda create -n test-conda clangxx_osx-64 xerces-c<br>
>>>> ...<br>
>>>> environment location: /Users/smancill/.local/share/miniconda3/envs/test-conda<br>
>>>> ...<br>
>>>> The following NEW packages will be INSTALLED:<br>
>>>><br>
>>>> cctools: 895-h7512d6f_0<br>
>>>> clang: 4.0.1-h662ec87_0<br>
>>>> clang_osx-64: 4.0.1-h1ce6c1d_11<br>
>>>> clangxx: 4.0.1-hc9b4283_0<br>
>>>> clangxx_osx-64: 4.0.1-h22b1bf0_11<br>
>>>> compiler-rt: 4.0.1-h5487866_0<br>
>>>> icu: 58.2-h4b95b61_1<br>
>>>> ld64: 274.2-h7c2db76_0<br>
>>>> libcxx: 4.0.1-h579ed51_0<br>
>>>> libcxxabi: 4.0.1-hebd6815_0<br>
>>>> llvm: 4.0.1-hc748206_0<br>
>>>> llvm-lto-tapi: 4.0.1-h6701bc3_0<br>
>>>> xerces-c: 3.2.1-h44e365a_0<br>
>>>> ...<br>
>>>><br>
>>>> # activate the environment (which sets the variables to use the Anaconda compiler)<br>
>>>> $ conda activate test-conda<br>
>>>><br>
>>>> $ mkdir build-osx-conda<br>
>>>> $ cd build-osx-conda<br>
>>>> $ cmake -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX -DCMAKE_PREFIX_PATH=$CONDA_PREFIX ..<br>
>>>> -- The CXX compiler identification is Clang 4.0.1<br>
>>>> -- Check for working CXX compiler: /Users/smancill/.local/share/miniconda3/envs/test-conda/bin/x86_64-apple-darwin13.4.0-clang++<br>
>>>> -- Check for working CXX compiler: /Users/smancill/.local/share/miniconda3/envs/test-conda/bin/x86_64-apple-darwin13.4.0-clang++ -- works<br>
>>>> ...<br>
>>>> -- Found XercesC: /Users/smancill/.local/share/miniconda3/envs/test-conda/lib/libxerces-c.dylib (found version "3.2.1")<br>
>>>> -- Configuring done<br>
>>>> -- Generating done<br>
>>>> -- Build files have been written to: /Users/smancill/src/conda-test/build-osx-conda<br>
>>>><br>
>>>> $ make -j1 VERBOSE=1<br>
>>>> ...<br>
>>>> [100%] Linking CXX executable bar<br>
>>>> /usr/local/bin/cmake -E cmake_link_script CMakeFiles/bar.dir/link.txt --verbose=1<br>
>>>> /Users/smancill/.local/share/miniconda3/envs/test-conda/bin/x86_64-apple-darwin13.4.0-clang++ -march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fPIE -fstack-protector-strong -O2 -pipe -stdlib=libc++ -fvisibility-inlines-hidden -std=c++14 -fmessage-length=0 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.13.sdk -mmacosx-version-min=10.12 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -Wl,-pie -Wl,-headerpad_max_install_names -Wl,-dead_strip_dylibs CMakeFiles/bar.dir/bar.cpp.o -o bar -Wl,-rpath,/Users/smancill/src/conda-test/build-osx-conda libfoo.dylib /Users/smancill/.local/share/miniconda3/envs/test-conda/lib/libxerces-c.dylib<br>
>>>> ...<br>
>>>><br>
>>>> You can see that the environment lib path is not added to the RPATH by the link command,<br>
>>>> which in turns result in the executable not running from the build tree anymore:<br>
>>>><br>
>>>> $ ./bar<br>
>>>> dyld: Library not loaded: @rpath/libxerces-c-3.2.dylib<br>
>>>> Referenced from: /Users/smancill/src/conda-test/build-osx-conda/./bar<br>
>>>> Reason: image not found<br>
>>>> [1] 89350 abort ./bar<br>
>>>><br>
>>>> $ otool -L ./bar<br>
>>>> ./bar:<br>
>>>> @rpath/libfoo.dylib (compatibility version 0.0.0, current version 0.0.0)<br>
>>>> @rpath/libxerces-c-3.2.dylib (compatibility version 0.0.0, current version 0.0.0)<br>
>>>> @rpath/libc++.1.dylib (compatibility version 1.0.0, current version 1.0.0)<br>
>>>> /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0)<br>
>>>><br>
>>>> $ otool -l ./bar | grep -A2 LC_RPATH<br>
>>>> cmd LC_RPATH<br>
>>>> cmdsize 56<br>
>>>> path /Users/smancill/src/conda-test/build-osx-conda (offset 12)<br>
>>>><br>
>>>> # deactivate the environment<br>
>>>> $ conda deactivate<br>
>>>><br>
>>>> --------------------------------------------------<br>
>>>><br>
>>>> If I try the Anaconda compilers on Linux, there are strange results too:<br>
>>>><br>
>>>> # create the environment and install the Anaconda compiler for Linux, and XercesC<br>
>>>> $ conda create -n test-conda gxx_linux-64 xerces-c<br>
>>>> ...<br>
>>>> environment location: /home/vagrant/miniconda3/envs/test-conda<br>
>>>> ...<br>
>>>> The following NEW packages will be INSTALLED:<br>
>>>><br>
>>>> binutils_impl_linux-64: 2.28.1-had2808c_3<br>
>>>> binutils_linux-64: 7.2.0-had2808c_27<br>
>>>> gcc_impl_linux-64: 7.2.0-habb00fd_3<br>
>>>> gcc_linux-64: 7.2.0-h550dcbe_27<br>
>>>> gxx_impl_linux-64: 7.2.0-hdf63c60_3<br>
>>>> gxx_linux-64: 7.2.0-h550dcbe_27<br>
>>>> icu: 58.2-h9c2bf20_1<br>
>>>> libgcc-ng: 7.2.0-hdf63c60_3<br>
>>>> libstdcxx-ng: 7.2.0-hdf63c60_3<br>
>>>> xerces-c: 3.2.1-hac72e42_0<br>
>>>><br>
>>>> # activate the environment (which sets the variables to use the Anaconda compiler)<br>
>>>> $ conda activate test-conda<br>
>>>><br>
>>>> $ mkdir build-linux-conda<br>
>>>> $ cd build-linux-conda<br>
>>>> $ cmake -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX -DCMAKE_PREFIX_PATH=$CONDA_PREFIX ..<br>
>>>> -- The CXX compiler identification is GNU 7.2.0<br>
>>>> -- Check for working CXX compiler: /home/vagrant/miniconda3/envs/test-conda/bin/x86_64-conda_cos6-linux-gnu-c++<br>
>>>> -- Check for working CXX compiler: /home/vagrant/miniconda3/envs/test-conda/bin/x86_64-conda_cos6-linux-gnu-c++ -- works<br>
>>>> ...<br>
>>>> -- Found XercesC: /home/vagrant/miniconda3/envs/test-conda/lib/libxerces-c.so (found version "3.2.1")<br>
>>>> -- Configuring done<br>
>>>> -- Generating done<br>
>>>> -- Build files have been written to: /vagrant/conda-test/build-linux-conda<br>
>>>><br>
>>>> $ make -j1 VERBOSE=1<br>
>>>> ...<br>
>>>> [100%] Linking CXX executable bar<br>
>>>> /usr/bin/cmake -E cmake_link_script CMakeFiles/bar.dir/link.txt --verbose=1<br>
>>>> /home/vagrant/miniconda3/envs/test-conda/bin/x86_64-conda_cos6-linux-gnu-c++ -fvisibility-inlines-hidden -std=c++17 -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -pipe -Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now CMakeFiles/bar.dir/bar.cpp.o -o bar libfoo.so /home/vagrant/miniconda3/envs/test-conda/lib/libxerces-c.so -Wl,-rpath,/vagrant/conda-test/build-linux-conda:/home/vagrant/miniconda3/envs/test-conda/lib:<br>
>>>> ...<br>
>>>><br>
>>>> You can see that the environment lib path is added to the RPATH by the link<br>
>>>> command (unlike macOS):<br>
>>>><br>
>>>> $ ./bar<br>
>>>> Hello World!<br>
>>>><br>
>>>> But when inspecting the dependencies, the environment lib path appears twice:<br>
>>>><br>
>>>> $ readelf -d ./bar<br>
>>>> ...<br>
>>>> 0x0000000000000001 (NEEDED) Shared library: [libfoo.so]<br>
>>>> 0x0000000000000001 (NEEDED) Shared library: [<a href="http://libxerces-c-3.2.so" rel="noreferrer" target="_blank">libxerces-c-3.2.so</a>]<br>
>>>> 0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6]<br>
>>>> 0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]<br>
>>>> 0x0000000000000001 (NEEDED) Shared library: [libc.so.6]<br>
>>>> 0x000000000000000f (RPATH) Library rpath: [/home/vagrant/miniconda3/envs/test-conda/lib:/vagrant/conda-test/build-linux-conda:/home/vagrant/miniconda3/envs/test-conda/lib:]<br>
>>>> ...<br>
>>>><br>
>>>> Which is wrong. Now the build tree binary will pick first any old version of<br>
>>>> the foo library installed in the environment instead of the version in the<br>
>>>> build tree.<br>
>>>><br>
>>>> It seems that the Anaconda toolchain is setting the environment lib path into<br>
>>>> the RPATH by its own. It is also set when installing the binaries, even when<br>
>>>> CMake is not configured to set the install RPATH:<br>
>>>><br>
>>>> $ make install<br>
>>>> ...<br>
>>>> Install the project...<br>
>>>> -- Install configuration: ""<br>
>>>> -- Installing: /home/vagrant/miniconda3/envs/test-conda/lib/libfoo.so<br>
>>>> -- Installing: /home/vagrant/miniconda3/envs/test-conda/include/foo.hpp<br>
>>>> -- Installing: /home/vagrant/miniconda3/envs/test-conda/bin/bar<br>
>>>> -- Set runtime path of "/home/vagrant/miniconda3/envs/test-conda/bin/bar" to ""<br>
>>>><br>
>>>> $ bar<br>
>>>> Hello World!<br>
>>>><br>
>>>> $ readelf -d $CONDA_PREFIX/bin/bar<br>
>>>> ...<br>
>>>> 0x0000000000000001 (NEEDED) Shared library: [libfoo.so]<br>
>>>> 0x0000000000000001 (NEEDED) Shared library: [<a href="http://libxerces-c-3.2.so" rel="noreferrer" target="_blank">libxerces-c-3.2.so</a>]<br>
>>>> 0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6]<br>
>>>> 0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]<br>
>>>> 0x0000000000000001 (NEEDED) Shared library: [libc.so.6]<br>
>>>> 0x000000000000000f (RPATH) Library rpath: [/home/vagrant/miniconda3/envs/test-conda/lib]<br>
>>>> ...<br>
>>>><br>
>>>> # deactivate the environment<br>
>>>> $ conda deactivate<br>
>>>><br>
>>>> --------------------------------------------------<br>
>>>><br>
>>>> TL;DR I cannot get CMake and the Anaconda compilers and packages working<br>
>>>> correctly.<br>
>>>><br>
>>>> - On macOS, the Conda environment library path is not added to the build RPATH.<br>
>>>> - On Linux, the Conda environment library path is always added to the RPATH<br>
>>>> (in both build and install) independently of CMake.<br>
>>>><br>
>>>> Any advice or workarounds?<br>
>>>><br>
>>>> --<br>
>>>> Sebastian Mancilla<br>
>>>> --<br>
>>>><br>
>>>> Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
>>>><br>
>>>> Please keep messages on-topic and check the CMake FAQ at: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__www.cmake.org_Wiki_CMake-5FFAQ&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=uBEF8GemaQb9eJ-UK_hEzA_YgX3pQ-boOIEG7uPkAyc&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__www.cmake.org_Wiki_CMake-5FFAQ&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=uBEF8GemaQb9eJ-UK_hEzA_YgX3pQ-boOIEG7uPkAyc&e=</a> <br>
>>>><br>
>>>> Kitware offers various services to support the CMake community. For more information on each offering, please visit:<br>
>>>><br>
>>>> CMake Support: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__cmake.org_cmake_help_support.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=svD5IJGKwoXnqAMeR130SGVF4UsybjdD3_6P3kozhAA&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__cmake.org_cmake_help_support.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=svD5IJGKwoXnqAMeR130SGVF4UsybjdD3_6P3kozhAA&e=</a> <br>
>>>> CMake Consulting: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__cmake.org_cmake_help_consulting.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=07p3Ic2lHKjWP1e65eN4md9oL_EaUWgnDc4fUQCx4oI&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__cmake.org_cmake_help_consulting.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=07p3Ic2lHKjWP1e65eN4md9oL_EaUWgnDc4fUQCx4oI&e=</a> <br>
>>>> CMake Training Courses: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__cmake.org_cmake_help_training.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=z4EmjaY7PSqPEwinemJnTXOI9drLVGgOGoIE1HRhk4o&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__cmake.org_cmake_help_training.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=z4EmjaY7PSqPEwinemJnTXOI9drLVGgOGoIE1HRhk4o&e=</a> <br>
>>>><br>
>>>> Visit other Kitware open-source projects at <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__www.kitware.com_opensource_opensource.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=QzHKjq3n_bPKgzhchCEiD0_KFJrVhaXBFSACVpxG5nU&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__www.kitware.com_opensource_opensource.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=QzHKjq3n_bPKgzhchCEiD0_KFJrVhaXBFSACVpxG5nU&e=</a> <br>
>>>><br>
>>>> Follow this link to subscribe/unsubscribe:<br>
>>>> <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__cmake.org_mailman_listinfo_cmake&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=fOiqJW-HpoDIaOBxq5-_9vu0GwxF4qjmchJS1C3GHjI&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=https-3A__cmake.org_mailman_listinfo_cmake&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=fOiqJW-HpoDIaOBxq5-_9vu0GwxF4qjmchJS1C3GHjI&e=</a> <br>
><br>
><br>
><br>
> --<br>
> Sebastian Mancilla Matta<br>
> CCTVal, UTFSM<br>
> Valparaíso, Chile<br>
> --<br>
><br>
> Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
><br>
> Please keep messages on-topic and check the CMake FAQ at: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__www.cmake.org_Wiki_CMake-5FFAQ&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=uBEF8GemaQb9eJ-UK_hEzA_YgX3pQ-boOIEG7uPkAyc&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__www.cmake.org_Wiki_CMake-5FFAQ&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=uBEF8GemaQb9eJ-UK_hEzA_YgX3pQ-boOIEG7uPkAyc&e=</a> <br>
><br>
> Kitware offers various services to support the CMake community. For more information on each offering, please visit:<br>
><br>
> CMake Support: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__cmake.org_cmake_help_support.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=svD5IJGKwoXnqAMeR130SGVF4UsybjdD3_6P3kozhAA&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__cmake.org_cmake_help_support.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=svD5IJGKwoXnqAMeR130SGVF4UsybjdD3_6P3kozhAA&e=</a> <br>
> CMake Consulting: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__cmake.org_cmake_help_consulting.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=07p3Ic2lHKjWP1e65eN4md9oL_EaUWgnDc4fUQCx4oI&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__cmake.org_cmake_help_consulting.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=07p3Ic2lHKjWP1e65eN4md9oL_EaUWgnDc4fUQCx4oI&e=</a> <br>
> CMake Training Courses: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__cmake.org_cmake_help_training.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=z4EmjaY7PSqPEwinemJnTXOI9drLVGgOGoIE1HRhk4o&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__cmake.org_cmake_help_training.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=z4EmjaY7PSqPEwinemJnTXOI9drLVGgOGoIE1HRhk4o&e=</a> <br>
><br>
> Visit other Kitware open-source projects at <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__www.kitware.com_opensource_opensource.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=QzHKjq3n_bPKgzhchCEiD0_KFJrVhaXBFSACVpxG5nU&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__www.kitware.com_opensource_opensource.html&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=QzHKjq3n_bPKgzhchCEiD0_KFJrVhaXBFSACVpxG5nU&e=</a> <br>
><br>
> Follow this link to subscribe/unsubscribe:<br>
> <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__cmake.org_mailman_listinfo_cmake&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=fOiqJW-HpoDIaOBxq5-_9vu0GwxF4qjmchJS1C3GHjI&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=https-3A__cmake.org_mailman_listinfo_cmake&d=DwIFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=Qi50uFIqz8VX30PtrlfRY6CGw0gYYbc3vo0gmgXQR9g&s=fOiqJW-HpoDIaOBxq5-_9vu0GwxF4qjmchJS1C3GHjI&e=</a> <br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div style="font-size:small;font-family:arial">Sebastian Mancilla Matta</div><div style="font-size:small;font-family:arial">CCTVal, UTFSM</div><div style="font-size:small;font-family:arial">Valparaíso, Chile</div></div></div>