Hi Oto,

On Wed, Jun 17, 2015 at 11:18 AM, Oto Petřík <oto.pet...@gmail.com> wrote:
> Hi,
>
>> Let's say my project wants to depend on a library PKG1 (here PKG1 can
>> be MPFR, MPC, PTHREAD, GMP, BZIP2, you name it). Let's say the library
>> is installed in $PKG1/include, $PKG1/lib, alternatively, all my
>> dependencies are installed in $HASHSTACK/include and $HASHSTACK/lib,
>> or perhaps they are installed system wide.
>
>> Perhaps I am missing the official recommendation regarding the above,
>> so that's why I am asking here. But if there is none, then I think the
>> current state is unsatisfactory.
>
> you may be looking for CMAKE_PREFIX_PATH
> (http://www.cmake.org/cmake/help/v3.2/variable/CMAKE_PREFIX_PATH.html)
>
> cmake 
> -DCMAKE_PREFIX_PATH=$HOME/built-libs/gmp;$HOME/built-libs/arb;$HOME/built-libs/otherdependencies
> (or have a script that sets CMAKE_PREFIX_PATH environment variable)
>
> works with find_module, find_file, find_library,... expects
> directories to have standard structure (include,lib,...), see
> documentation of find_* commands for details.
> it is usually enough to set CMAKE_PREFIX_PATH to DESTDIRs used in
> dependencies' "make install DESTDIR=/foo"
>
> you may want to remove NO_DEFAULT_PATH as used in linked
> LibFindMacros.cmake, it disables this functionality.

Yes, indeed CMAKE_PREFIX_PATH is a replacement for our COMMON_DIR,
i.e. the case 3. above. So one can apply the following patch to our
macros:

--- a/cmake/LibFindMacros.cmake
+++ b/cmake/LibFindMacros.cmake
@@ -42,7 +42,6 @@ macro (libfind_library libname pkg)
             ${libname}
         PATHS
             ${${PKG}_DIR}
-            ${COMMON_DIR}
         PATH_SUFFIXES
             lib
             lib64
@@ -73,7 +72,6 @@ macro (libfind_include HEADER pkg)
             ${HEADER}
         PATHS
             ${${PKG}_DIR}
-            ${COMMON_DIR}
         PATH_SUFFIXES
             include
         NO_DEFAULT_PATH



and just use CMAKE_PREFIX_PATH instead of COMMON_DIR. I tried it in
our code and it works.

However, for 1. and 2. there is no solution in CMake. There is
CMAKE_INCLUDE_PATH and CMAKE_LIBRARY_PATH, but Isuru just tested it
and CMAKE_PREFIX_PATH takes precedence over CMAKE_INCLUDE_PATH, which
means that if you have a stack of packages installed in
CMAKE_PREFIX_PATH, you cannot specify PKG1 using CMAKE_INCLUDE_PATH.
And even if cmake changes the order, then if CMAKE_INCLUDE_PATH
besides PKG1 also contains PKG2, but you want PKG2 from
CMAKE_PREFIX_PATH, it won't work. The true solution is per package
include/lib paths, just like we implemented in our macros.

We tried many things, but we haven't figured out a solution other than
our macros. So it looks like CMake itself should have our macros (or
an equivalent functionality).

Ondrej
-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake

Reply via email to