View Issue Details Jump to Notes ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0008378CMakeCMakepublic2009-01-15 03:552009-02-09 08:26
ReporterMarkus Schwarzenberg 
Assigned ToBill Hoffman 
PrioritynormalSeveritymajorReproducibilityalways
StatusclosedResolutionfixed 
PlatformOSOS Version
Product VersionCMake-2-6 
Target VersionFixed in Version 
Summary0008378: UNC-path truncation in lists used in set and get_filename_component
DescriptionUsing cmake (2.6.2/WIN32) there is an issue with UNC-paths used
in the set variant

  set(<variable> <value> CACHE <type> <docstring> )

when <value> is a list (of paths) and <type> is FILEPATH. In this case,
the (essential) double slashes // at the beginning of UNC path list
components get truncated to single slashes, resulting in invalid UNC-paths.

The same problem exists with

  get_filename_component(<variable> <value> PATH)

Please consider the following test case:

  set (TESTRUN_VAR1 "//server/dir1/file1.txt" "//server/dir1/file2.txt" CACHE STRING "TESTRUN_VAR1")
  message("1: TESTRUN_VAR1 = ${TESTRUN_VAR1}" )
  set (TESTRUN_VAR2 "//server/dir1/file1.txt" "//server/dir1/file2.txt" CACHE FILEPATH "TESTRUN_VAR2")
  message("2: TESTRUN_VAR2 = ${TESTRUN_VAR2}" )
  set (TESTRUN_VAR3 "//server/dir1/file1.txt" "//server/dir1/file2.txt" )
  message("3: TESTRUN_VAR3 = ${TESTRUN_VAR3}" )
  set (TESTRUN_VAR4 "//server/dir1/file1.txt" CACHE FILEPATH "TESTRUN_VAR4")
  message("4: TESTRUN_VAR4 = ${TESTRUN_VAR4}" )
  get_filename_component(__OUT "${TESTRUN_VAR1}" PATH)
  message("5: get_filename_component (TESTRUN_VAR1 PATH) = ${__OUT}")
  get_filename_component(__OUT "${TESTRUN_VAR4}" PATH)
  message("6: get_filename_component (TESTRUN_VAR4 PATH) = ${__OUT}")
 

Output:

1: TESTRUN_VAR1 = //server/dir1/file1.txt;//server/dir1/file2.txt
2: TESTRUN_VAR2 = /server/dir1/file1.txt;/server/dir1/file2.txt
3: TESTRUN_VAR3 = //server/dir1/file1.txt;//server/dir1/file2.txt
4: TESTRUN_VAR4 = //server/dir1/file1.txt
5: get_filename_component (TESTRUN_VAR1 PATH) = /server/dir1/file1.txt;/server/dir1
6: get_filename_component (TESTRUN_VAR4 PATH) = //server/dir1


Conclusions:
 1: set works correctly when CACHE STRING is used instead of CACHE FILEPATH
 2: set is wrong when CACHE FILEPATH is used
 3: set works correctly whithout using CACHE ...
 4: set works correctly with CACHE FILEPATH when <value> is NOT a list
 5: get_filename_component( ... PATH) is wrong when <value> is a list
 6: get_filename_component( ... PATH) works correctly when <value> is a NOT list
 
These issues are of practical relevance for example in Find_Package(Boost).
resulting in illegal paths when Boost is located using an UNC-Path.

A temporary workaround can be found in
http://public.kitware.com/Bug/view.php?id=8099 [^]
TagsNo tags attached.
Attached Files

 Relationships
parent of 0008393closedPhilip Lowman Remove workarounds in FindBoost once UNC-Path bug is fixed 

  Notes
(0014840)
Bill Hoffman (manager)
2009-02-09 08:26

$ cvs commit -m "BUG: fix for 0008378, lists with FILEPATH and UNC //server/path fail" cmCacheManager.cxx
Committer: Bill Hoffman <bill.hoffman@kitware.com>
/cvsroot/CMake/CMake/Source/cmCacheManager.cxx,v <-- cmCacheManager.cxx
new revision: 1.102; previous revision: 1.101

 Issue History
Date Modified Username Field Change
2009-01-15 03:55 Markus Schwarzenberg New Issue
2009-01-18 14:45 Philip Lowman Relationship added parent of 0008393
2009-02-03 11:31 Bill Hoffman Status new => assigned
2009-02-03 11:31 Bill Hoffman Assigned To => Bill Hoffman
2009-02-09 08:26 Bill Hoffman Note Added: 0014840
2009-02-09 08:26 Bill Hoffman Status assigned => closed
2009-02-09 08:26 Bill Hoffman Resolution open => fixed


Copyright © 2000 - 2018 MantisBT Team