The following issue has been SUBMITTED.
======================================================================
http://public.kitware.com/Bug/view.php?id=15743
======================================================================
Reported By: Andreas Schuh
Assigned To:
======================================================================
Project: CMake
Issue ID: 15743
Category: CMake
Reproducibility: always
Severity: minor
Priority: normal
Status: new
======================================================================
Date Submitted: 2015-09-15 11:15 EDT
Last Modified: 2015-09-15 11:15 EDT
======================================================================
Summary: get_filename_component turns real path to ABSOLUTE
path
Description:
I encountered a very strange behaviour of the get_filename_component using the
ABSOLUTE subcommand. The given input path was before turned into a real path
with symbolic links resolved using the REALPATH subcommand. Calling
get_filename_component with ABSOLUTE on this real path I would have expected an
unchanged path. Instead, ABSOLUTE returns a path with symbolic links again! Note
that both the source and build directory are located in different symlinked
directory paths.
Looking at the C++ code of the get_filename_component command revealed some
strange call to SystemTools::CheckTranslationPath in
SystemTools::CollapseFullPath which implements the ABSOLUTE subcommand. There is
also a commented line beforehand with a comment expecting to break something by
doing so... the call to SystemTools::AddTranslationPath.
The issue affects also previous releases (tried 3.2.2 and 2.8.12.2).
IMHO I find it extremely strange that get_filename_component needs such
translation table (without having digged deeper to fully understand its
purpose). Cleaning a path or splitting it into parts should be a purely string
based operation without actual file system information.
Steps to Reproduce:
1. Create directory hierarchy with symlinks similar to my scenario:
Real source directory:
/vol/medic01/users/as12312/Code/CMakeGetFileNameComponentIssue
Real build directory:
/vol/biomedic/users/as12312/build/merapi/cmake-get_filename_component-issue
Symbolic links:
/homes/as12312/Code -> /vol/medic01/users/as12312/Code
/homes/as12312/opt -> /vol/biomedic/users/as12312
2. Copy attached CMakeLists.txt to the source directory
3. Change into the symlinked build directory and use the symbolic link to the
source directory as argument to CMake
cd /homes/as12312/opt/build/merapi/cmake-get_filename_component-issue
cmake /homes/as12321/Code/CMakeGetFileNameComponentIssue
The output is the following:
CMAKE_SOURCE_DIR:
REALPATH =
/vol/medic01/users/as12312/Code/CMakeGetFileNameComponentIssue
ABSOLUTE =
/vol/medic01/users/as12312/Code/CMakeGetFileNameComponentIssue
CMAKE_BINARY_DIR:
REALPATH =
/vol/biomedic/users/as12312/build/merapi/cmake-get_filename_component-issue
ABSOLUTE =
/homes/as12312/opt/build/merapi/cmake-get_filename_component-issue
-- Configuring done
-- Generating done
-- Build files have been written to:
/homes/as12312/opt/build/merapi/cmake-get_filename_component-issue
Note that the ABSOLUTE return value of get_filename_component of the real input
path contains symbolic links again!
======================================================================
Issue History
Date Modified Username Field Change
======================================================================
2015-09-15 11:15 Andreas Schuh New Issue
2015-09-15 11:15 Andreas Schuh File Added: CMakeLists.txt
======================================================================
--
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-developers