[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] build: cmake: Add input libraries to the rpath.
From: |
Eric Bavier |
Subject: |
Re: [PATCH] build: cmake: Add input libraries to the rpath. |
Date: |
Fri, 25 Apr 2014 12:44:32 -0500 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.3 (gnu/linux) |
Andreas Enge <address@hidden> writes:
> In a discussion we had yesterday, Ludovic mentioned the need to pass a
> special flag to the cmake configure phase to modify the rpath of installed
> libraries, as done for the package slim. I then noticed I needed the same
> flag for clucene. The attached patch applies it globally in the cmake build
> system.
We can't set CMAKE_SKIP_BUILD_RPATH=OFF as it prevents tests from
working, since the executables and libraries would not have references
to libraries in the build tree (I ran the lapack build e.g. with your
patch, and all the tests fail).
> This should also avoid the need for the add-libs-to-runpath phase
> in the gmsh package Eric Bavier posted yesterday.
>
> In slim, there is another flag:
> ;; Don't build libslim.so, because then the build
> ;; system is unable to set the right RUNPATH on the
> ;; 'slim' binary.
> "-DBUILD_SHARED_LIBS=OFF"
> I wonder if we should instead use another of the rpath setting variables
> given at
> http://www.cmake.org/Wiki/CMake_RPATH_handling
>
> Moreover, libclucene-core.so needs to be linked to libclucene-shared.so.1
> from the same package. Here we usually employ patchelf, but maybe yet again
> a cmake flag could solve the problem directly.
>
> Comments from cmake specialists are very welcome!
I wouldn't necessarily count myself as a cmake specialist, but I work
with it a bit in my day job.
Your post prompted me to look into this matter a bit more. I found for
the gmsh package I posted yesterday that I could add the following to
#:configuration-flags instead of using the add-libs-to-runpath phase::
"-DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=ON"
,(string-append "-DCMAKE_INSTALL_RPATH="
(assoc-ref %outputs "out")
"/lib")
I would defer to the cmake wiki page you linked above for a full
explanation, but briefly: The CMAKE_INSTALL_RPATH_USE_LINK_PATH tells
cmake to include in the installed rpath all of the directories of
libraries it has linked into the library or executable, and the
CMAKE_INSTALL_RPATH tells cmake that in addition there are libraries in
the current project whose directory also needs to be added to the rpath.
I tried substituting the above two flags in for the lapack, gmsh, and
slim builds, and the RUNPATHS seem to be at least as good as when using
the manual augment-rpath method.
--
`~Eric