[cmake-developers] [CMake 0011392]: find_package does not support relative paths
Mantis Bug Tracker
mantis at public.kitware.com
Tue Nov 2 11:48:27 EDT 2010
The following issue has been SUBMITTED.
======================================================================
http://www.cmake.org/Bug/view.php?id=11392
======================================================================
Reported By: Derek Bruening
Assigned To:
======================================================================
Project: CMake
Issue ID: 11392
Category: CMake
Reproducibility: always
Severity: minor
Priority: normal
Status: new
======================================================================
Date Submitted: 2010-11-02 11:48 EDT
Last Modified: 2010-11-02 11:48 EDT
======================================================================
Summary: find_package does not support relative paths
Description:
I have one CMake project ("drmemory") that uses another ("DynamoRIO") via
find_package, using a cache variable "DynamoRIO_DIR" to point at the
location of the DynamoRIO config file. It is very natural to use a
relative path from the build dir at configure time for DynamoRIO_DIR.
However, this does not always work.
Try this on Linux with any CMake version (I've tried 2.6.4 and 2.8.0) and
you'll get a find_package failure on the config for drmemory:
mkdir test-dotdot
cd test-dotdot
svn checkout -r 474 http://dynamorio.googlecode.com/svn/trunk/ dynamorio
mkdir -p build-dynamorio/sub
cd build-dynamorio/sub
CXXFLAGS=-m32 CFLAGS=-m32 cmake -DBUILD_DOCS=OFF
-DCMAKE_INSTALL_PREFIX=../../exports ../../dynamorio && make -j4 install
cd ../..
svn checkout -r 75 http://drmemory.googlecode.com/svn/trunk/ drmemory
mkdir -p build-drmemory/sub
cd build-drmemory/sub
ls ../../exports/cmake
CXXFLAGS=-m32 CFLAGS=-m32 cmake -DDynamoRIO_DIR=../../exports/cmake
-DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../../exports_drmemory
../../drmemory
I asked Brad King about this:
By the time find_package runs it has no clue what the base path was
for the relative path. The best guess it has is the *source* tree
containing the CMakeLists.txt that invoked it. This behavior is
meant for finding in-tree packages.
We've never supported relative paths here. The command line
parser has no way to know that DynamoRIO_DIR is a path and not
a string and therefore cannot do conversion to full path safely.
Someday we will have a way to map options like --prefix= to cache
definitions that have types. That mapping might be able to do this.
At the least, the find_package documentation should state that relative
paths are not supported, or what they are relative to. My intuition says
that a relative path would be from the build dir.
======================================================================
Issue History
Date Modified Username Field Change
======================================================================
2010-11-02 11:48 Derek Bruening New Issue
======================================================================
More information about the cmake-developers
mailing list