Jed Brown wrote:


Is my environment not `working' simply because I'm asking to link the
versions of libraries that are found at a path other than the system
defaults?  Using something else and asking the user to edit the cache is
like ignoring CC and requiring the user to edit CMAKE_C_COMPILER,
CMAKE_LINKER, CMAKE_AR, CMAKE_RANLIB, etc to support a different
toolchain.

OK, so you have version of libraries that are not in default locations, how is any build system supposed to find stuff like this? No I don't expect users to edit CMAKE_AR, CMAKE_C_COMPILER and the tool chain variables. I expect that the environment has the right PATH to the tool chain setup before CMake is run. Just like the correct CMAKE_LIBRARY_PATH needs to be set if you want CMake to find libraries not in a standard location.

...
See this:

  
http://github.com/jedbrown/cmake-modules/tree/master/ResolveCompilerPaths.cmake


There is some code inside CMake that does library path searching. It might make sense to have a command that parses link lines and finds the libraries. I am thinking a new command might be a good idea.
...

Also, if anyone knows of a build system that does any of this, we can
always copy what that system does.  Although, I don't think any of
them do much of this stuff...

Yes, the build system world is kind of a mess and resolving external
libs is hard.  BuildSystem (http://petsc.cs.iit.edu/petsc/BuildSystem)
...
hand-tuned automake scripts can deal as well.  CMake is definitely
...

So, what does BuildSystem do to handle this? Is there anything that can be learned? A hand-tuned cmake project could deal as well, you have some examples showing that.


BTW, all the modules in my repository

  http://github.com/jedbrown/cmake-modules

are public domain and I'm willing to maintain them if they are added to
CMake.
Thanks, lets figure out what parts of all this belong in the C++ part of CMake before adding lots of helper modules to CMake.

In summery, I see three things:

1. CMake needs a command to parse compiler link lines that may come from pkg-config, makefile fragments or some other config file. The parsing should act like a linker, and give the results in full paths to the libraries. This can be done ad-hoc and is done by some folks now using custom macros. We should be able to use some of the internal CMake library path resolution code to do this.

2. CMake needs a way to easily chain variables together so that you can clear stuff out if a dependent variable is changed by the user. So, if you have MY_PATH_TO_TOOL=/path/to/tool, and it changes to /new/path/to/tool, then all the libraries that where found using MY_PATH_TO_TOOL should be reset and rediscovered. Currently, this is done ad-hoc in CMake, for example Clinton just added something to the FindQt4 that will reset all the qt variables if the qmake one is changed. However, this issue has come up more than once and needs a more consistent API for dealing with the issue.

3. How to best find libraries and headers not is system locations. Currently, CMake uses environment variables like PATH, CMAKE_LIBRARY_PATH, etc to do this. I have not seen a new suggestion in this area. Do you have one?


-Bill

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

Reply via email to