View Issue Details [ Jump to Notes ] | [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0010994 | CMake | CMake | public | 2010-07-15 04:58 | 2013-10-07 10:09 | ||||
Reporter | Patrick Spendrin | ||||||||
Assigned To | Brad King | ||||||||
Priority | normal | Severity | major | Reproducibility | always | ||||
Status | closed | Resolution | fixed | ||||||
Platform | Windows | OS | OS Version | ||||||
Product Version | CMake-2-8 | ||||||||
Target Version | Fixed in Version | ||||||||
Summary | 0010994: Windows: find_* commands can find paths with no drive letter | ||||||||
Description | when using substituted drives on windows, cmake should treat them like real drives. this doesn't happen in the attached testcase. Our setup: - substitute any directory with the cmd command subst. - have a cmake file within that directory, but not within the root directory of that drive. This cmake file tries to find out its location using CMAKE_CURRENT_LIST_FILE and get_filename_component(PATH) to get the parent directory of a directory. When reaching the root directory, just a (back)slash is given instead of the complete drive letter + colon. To reproduce, please try out the attached zip archive and simply run the runtest.bat batch file. The cmake file in question is in the test subdirectory. | ||||||||
Additional Information | This happens on all windows systems. | ||||||||
Tags | No tags attached. | ||||||||
Attached Files | cmake_current_list_file-bug.zip [^] (1,240 bytes) 2010-07-15 04:58 cmake-bug.zip [^] (1,243 bytes) 2010-07-15 08:30 cmake-stat-drives.diff [^] (531 bytes) 2010-07-15 12:20 [Show Content] cmake-root-relative.diff [^] (601 bytes) 2010-07-15 15:37 [Show Content] | ||||||||
Relationships | |||||||||||
|
Relationships |
Notes | |
(0021396) Patrick Spendrin (reporter) 2010-07-15 08:33 |
ok, skip the first description, here comes the real issue: when including the file with include() there will not be any problems, when the file is included via find_package() (also see cmake-bug.zip) then the result will be a single slash instead of the correct Z:/. To reproduce, please unpack cmake-bug.zip and call runtest.bat in that directory (I hope you don't have Z: as a drive already given, in that case simply change the drive letter.) |
(0021403) Patrick Spendrin (reporter) 2010-07-15 15:43 |
ok, the two patches do the following: The cmake-stat-drives.diff enables stat on simple drive letters (e.g. C:, Z:, etc.) - this will fail otherwise and thus adding Z: to CMAKE_SYSTEM_PREFIX_PATH in share/cmake-2.8/Modules/Platform/WindowsPaths.cmake will not result in the expected result. The cmake-root-relative.diff will handle the case where / is given as the only path - in that case, the relative path base will be chosen. This part is restricted to non-cygwin windows, which should not result in any conflicts. |
(0032936) Chris (reporter) 2013-04-24 20:26 edited on: 2013-04-24 21:32 |
This problem is still occurring. Is there anything I can do to help find a fix. It is making it impossible for me to compile kde on windows EDIT: The test case supplied does not fail for me. I guess my problem is similar but not identical. I will update if any other information is found. |
(0032939) Chris (reporter) 2013-04-24 23:36 |
Update While the simple test case does not fail for me. it does show the error occurring the following is generated when running the script Z:\build>cmake ..\ -- Building for: Visual Studio 10 -- final import prefix is :- <<Z:/>> -- final import prefix is :- <</>> -- Configuring done -- Generating done -- Build files have been written to: Z:/build you can see the drive mysteriously changes from <<Z:/>> to <</>> the first import prefix is inside include(${CMAKE_CURRENT_SOURCE_DIR}/lib/strigitest/StrigitestConfig.cmake) the second import prefix is inside find_package(Strigitest REQUIRED) find_package appears to drop the drive when converting from \ to / This is also being discussed at http://permalink.gmane.org/gmane.comp.programming.tools.cmake.devel/6711 [^] |
(0032940) Brad King (manager) 2013-04-25 09:22 |
This commit should fix it: http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f9eee7f1 [^] See commit message for explanation. |
(0032941) Brad King (manager) 2013-04-25 09:27 |
For reference, here is the context of the discussion linked in 0010994:0032939: http://thread.gmane.org/gmane.comp.programming.tools.cmake.devel/4374/focus=6693 [^] |
(0032942) Brad King (manager) 2013-04-25 09:32 |
With the fix in 0010994:0032940 the cmake-bug.zip example is no longer expected to find the package because nothing tells find_package to look in prefix CMAKE_CURRENT_SOURCE_DIR. Adding list(APPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_SOURCE_DIR}) to the example should tell find_package to look there. However, it still fails due to SystemTools::FileIsDirectory failing drive root paths like "z:/". The patch cmake-stat-drives.diff proposed here fixes that so I'm sending it to KWSys upstream: http://review.source.kitware.com/#/c/11031/ [^] and will merge it back into CMake when ready. |
(0032957) Brad King (manager) 2013-04-29 10:20 |
Re 0010994:0032942: Fix for FileIsDirectory in KWSys imported to CMake here: http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=327c982f [^] |
(0034039) Robert Maynard (manager) 2013-10-07 10:09 |
Closing resolved issues that have not been updated in more than 4 months. |
Notes |
Issue History | |||
Date Modified | Username | Field | Change |
2010-07-15 04:58 | Patrick Spendrin | New Issue | |
2010-07-15 04:58 | Patrick Spendrin | File Added: cmake_current_list_file-bug.zip | |
2010-07-15 08:30 | Patrick Spendrin | File Added: cmake-bug.zip | |
2010-07-15 08:33 | Patrick Spendrin | Note Added: 0021396 | |
2010-07-15 12:20 | Patrick Spendrin | File Added: cmake-stat-drives.diff | |
2010-07-15 15:37 | Patrick Spendrin | File Added: cmake-root-relative.diff | |
2010-07-15 15:43 | Patrick Spendrin | Note Added: 0021403 | |
2011-01-05 19:25 | David Cole | Assigned To | => David Cole |
2011-01-05 19:25 | David Cole | Status | new => assigned |
2011-01-05 19:26 | David Cole | Relationship added | related to 0011153 |
2011-10-25 22:25 | David Cole | Status | assigned => backlog |
2011-10-25 22:26 | David Cole | Assigned To | David Cole => |
2013-03-08 08:04 | Brad King | Relationship added | related to 0010072 |
2013-04-24 20:26 | Chris | Note Added: 0032936 | |
2013-04-24 21:32 | Chris | Note Edited: 0032936 | |
2013-04-24 23:36 | Chris | Note Added: 0032939 | |
2013-04-25 09:22 | Brad King | Note Added: 0032940 | |
2013-04-25 09:22 | Brad King | Assigned To | => Brad King |
2013-04-25 09:22 | Brad King | Status | backlog => assigned |
2013-04-25 09:22 | Brad King | Platform | => Windows |
2013-04-25 09:22 | Brad King | Summary | get_filename_component ignores substituted drives => Windows: find_* commands can find paths with no drive letter |
2013-04-25 09:27 | Brad King | Note Added: 0032941 | |
2013-04-25 09:32 | Brad King | Note Added: 0032942 | |
2013-04-29 10:20 | Brad King | Note Added: 0032957 | |
2013-04-29 10:21 | Brad King | Status | assigned => resolved |
2013-04-29 10:21 | Brad King | Resolution | open => fixed |
2013-10-07 10:09 | Robert Maynard | Note Added: 0034039 | |
2013-10-07 10:09 | Robert Maynard | Status | resolved => closed |
Issue History |
Copyright © 2000 - 2018 MantisBT Team |