E. Wing wrote:
Several questions/problems on FIND_* search behavior:

1) Somebody complained to me that FIND_FILE was not finding things in
the paths that the documentation say they should be in. I confirmed on
OS X. I don't know about other platforms.

I think it follows the docs....
So if I do:
FIND_FILE(FOO libm.dylib)
I'm expecting it to find it in /usr/lib, but it doesn't turn up a hit.
Among other paths, I'm expecting /usr/include and /usr/lib to be
searched. I'm also kind of expecting /usr to be searched. But copying
the file around didn't seem to produce any hits. So what's the real
story here? (FYI: I can explicitly add the PATHS and it will be found,
and FIND_LIBRARY does find it.)

FIND_FILE does not search in /usr/lib only FIND_LIBRARY search in
the library directories.  FIND_FILE only looks in PATH.


2) I'm trying to use CMAKE_LIBRARY_PATH and CMAKE_INCLUDE_PATH. I set
my environment like
export CMAKE_LIBRARY_PATH=/path/to/lib1:/path/to/lib2
export CMAKE_INCLUDE_PATH=/path/to/include

So far, these haven't turned up any hits for me. I tried on both Mac
and Linux, CMake versions 2.4.

That should work, please give a specific example, note that CMAKE_LIBRARY_PATH
is only searched by FIND_LIBRARY and CMAKE_INCLUDE_PATH is only searched
by FIND_PATH, as per the docs.
3) Is it possible to list multiple potential paths for an $ENV{FOO}
variable? So if I do:
export FOO=../Dir1:../Dir2
and my script has:
FIND_LIBRARY(FOO foo PATHS $ENV{FOO}),
will this work?
(So far my tests say no, but I would like to know if this can work.)

That is not what the docs say for FIND_*:

  FIND_FILE(
<VAR> name | NAMES name1 [name2 ...]
            PATHS path1 [path2 ... ENV var]
          .....
           )
....

if ENV var is found in the PATHS section the environment variable var will be read and converted from a system environment variable to a cmake style list of paths. For example ENV PATH would be a way to list the system path variable.
.....
To use and env var in a FIND_* command you do it like this:
PATHS ENV FOO

This is because path separators are OS specific ; on windows and : on unix, so $ENV{PATH} will only work on windows for cmake. But the ENV PATH syntax of FIND_* will let cmake do the correct conversion of the native path into cmake.

4) Finally, back to FIND_LIBRARY(FOO foo PATHS $ENV{FOO}),
how do I make CMake search my system paths last. I want my $ENV{FOO}
to be like an override, but my system installed stuff keeps getting
found first, before my $ENV{FOO} is checked.

Again, back to the docs....
...
If NO_DEFAULT_PATH is specified, then no additional paths are added to the search. If NO_DEFAULT_PATH is not specified, the search process is as follows:
....

So, you can do this:
FIND_*(.... PATHS mystuff NO_DEFAULT_PATH)  # first look with no extra paths
FIND_*(....)  # now look in all the default paths.


-Bill
_______________________________________________
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to