View Issue Details Jump to Notes ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0013388CMakeCMakepublic2012-07-10 04:252013-01-09 10:56
ReporterAndreas Mohr 
Assigned ToBrad King 
PrioritynormalSeveritymajorReproducibilityalways
StatusclosedResolutionfixed 
Platformx86OSLinuxOS VersionRHEL5
Product VersionCMake 2.8.8 
Target VersionCMake 2.8.9Fixed in VersionCMake 2.8.9 
Summary0013388: include("${NONEXISTENT_FILE_VARIABLE}" OPTIONAL) will add bogus dir dependency, causing frequent reconfigure runs
DescriptionA bogus include with an empty string (which may happen very frequently, namely whenever a user uses a variable-based include() and does not bother to set the variable)
will cause very wasteful CMake re-configure runs due to inserting a bogus directory dependency (empty file argument seems to get evaluated to the current source directory during module file lookup algorithms) for the build system to consider for CMake re-configuration evaluation.
Steps To ReproduceCMakeLists.txt:
#include("" OPTIONAL)

Enabling that bogus include() and generating a Ninja build tree will cause the following line in build.ninja:

# Re-run CMake if any of its inputs changed.
build build.ninja: RERUN_CMAKE | /home/amoh/Projects/cmake_tests/include_hook_bug_test /home/amoh/Projects/cmake_tests/include_hook_bug_test/CMakeLists.txt /home/amoh/Projects/cmake_tests/include_hook_bug_test/build/CMakeFiles/CMakeCCompiler.cmake /home/amoh/Projects/cmake_tests/include_hook_bug_test/build/CMakeFiles/CMakeCXXCompiler.cmake /home/amoh/Projects/cmake_tests/include_hook_bug_test/build/CMakeFiles/CMakeSystem.cmake /usr/local/share/cmake-2.8/Modules/CMakeCInformation.cmake /usr/local/share/cmake-2.8/Modules/CMakeCXXInformation.cmake /usr/local/share/cmake-2.8/Modules/CMakeCommonLanguageInclude.cmake /usr/local/share/cmake-2.8/Modules/CMakeGenericSystem.cmake /usr/local/share/cmake-2.8/Modules/CMakeSystemSpecificInformation.cmake /usr/local/share/cmake-2.8/Modules/Compiler/GNU-C.cmake /usr/local/share/cmake-2.8/Modules/Compiler/GNU-CXX.cmake /usr/local/share/cmake-2.8/Modules/Compiler/GNU.cmake /usr/local/share/cmake-2.8/Modules/Platform/Linux-GNU-C.cmake /usr/local/share/cmake-2.8/Modules/Platform/Linux-GNU-CXX.cmake /usr/local/share/cmake-2.8/Modules/Platform/Linux-GNU.cmake /usr/local/share/cmake-2.8/Modules/Platform/Linux.cmake /usr/local/share/cmake-2.8/Modules/Platform/UnixPaths.cmake CMakeCache.txt

Pay special attention to the mentioning of /home/amoh/Projects/cmake_tests/include_hook_bug_test

Now if you actually modify the "stat" status quo of this source directory (say, by editing a file in it via vim), then this will trigger - potentially VERY lengthy! - CMake re-configure runs once re-running the build (via "ninja").


Same effect with Makefile generator.

Thank you!
TagsNo tags attached.
Attached Files

 Relationships

  Notes
(0030012)
Peter Kuemmel (developer)
2012-07-10 10:15

Empty files names are ignored and cmake warns about it.

http://public.kitware.com/pipermail/cmake-commits/2012-July/013024.html [^]
(0030013)
Andreas Mohr (reporter)
2012-07-10 10:21

Sorry, I'm afraid due to having missed some important information in my report, the fix - while quite nice - does not fully cut it.

Problem is that the non-OPTIONAL include() case will _also_ work without erroring out, thereby adding the bogus directory dependency as well in that case.

IOW, this misbehaviour is not specific to OPTIONAL only.

Thank you very much for your lightning-fast handling of this issue!
(0030015)
Brad King (manager)
2012-07-10 10:34

Re 0013388:0030012: I assigned this to you Peter because it appears to be Ninja-specific. A fix up in include() is not appropriate unless discussed first.

Andreas, I was not able to reproduce this with 2.8.9-rc1. Does it happen with the Makefile generator too?
(0030016)
Peter Kuemmel (developer)
2012-07-10 10:39

I think it is a bug that empty file names without OPTIONAL are accepted.
(0030017)
Andreas Mohr (reporter)
2012-07-10 10:40

"Same effect with Makefile generator." ;-)
[ok, my initial description probably was a wee bit long]
(0030018)
Brad King (manager)
2012-07-10 10:44

Re 0013388:0030016: Okay, it's not Ninja-specific. Sorry for the confusion. I'll take over the fix. Thanks.
(0030019)
Peter Kuemmel (developer)
2012-07-10 10:46
edited on: 2012-07-10 10:54

Only OPTIONAL would accept empty file names:

http://public.kitware.com/pipermail/cmake-commits/2012-July/013025.html [^]

Sorry, haven't noticed "appropriate unless discussed first."

(0030020)
Brad King (manager)
2012-07-10 10:56

Re 0013388:0030019: Note in 0013388:0030018 I said I would take over this fix. Please do not commit more changes.
(0030021)
Peter Kuemmel (developer)
2012-07-10 10:59

Then please also fix the line length in 39.
(0030023)
Brad King (manager)
2012-07-10 11:07

Okay, I rewrote the topic (effectively reverting the changes in 0013388:0030012 and 0013388:0030019). Here is the new fix:

 http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2e99949c [^]
(0032036)
Robert Maynard (manager)
2013-01-09 10:56

Closing resolved issues that have not been updated in more than 4 months.

 Issue History
Date Modified Username Field Change
2012-07-10 04:25 Andreas Mohr New Issue
2012-07-10 08:36 Brad King Assigned To => Peter Kuemmel
2012-07-10 08:36 Brad King Status new => assigned
2012-07-10 08:36 Brad King Summary include("${NONEXISTENT_FILE_VARIABLE}" OPTIONAL) will add bogus dir dependency, causing frequent reconfigure runs => Ninja: include("${NONEXISTENT_FILE_VARIABLE}" OPTIONAL) will add bogus dir dependency, causing frequent reconfigure runs
2012-07-10 10:15 Peter Kuemmel Note Added: 0030012
2012-07-10 10:15 Peter Kuemmel Status assigned => closed
2012-07-10 10:15 Peter Kuemmel Resolution open => fixed
2012-07-10 10:21 Andreas Mohr Note Added: 0030013
2012-07-10 10:21 Andreas Mohr Status closed => feedback
2012-07-10 10:21 Andreas Mohr Resolution fixed => reopened
2012-07-10 10:34 Brad King Note Added: 0030015
2012-07-10 10:39 Peter Kuemmel Note Added: 0030016
2012-07-10 10:40 Andreas Mohr Note Added: 0030017
2012-07-10 10:40 Andreas Mohr Status feedback => assigned
2012-07-10 10:41 Brad King Summary Ninja: include("${NONEXISTENT_FILE_VARIABLE}" OPTIONAL) will add bogus dir dependency, causing frequent reconfigure runs => include("${NONEXISTENT_FILE_VARIABLE}" OPTIONAL) will add bogus dir dependency, causing frequent reconfigure runs
2012-07-10 10:43 Brad King Assigned To Peter Kuemmel => Brad King
2012-07-10 10:44 Brad King Note Added: 0030018
2012-07-10 10:46 Peter Kuemmel Note Added: 0030019
2012-07-10 10:52 Peter Kuemmel Note Edited: 0030019
2012-07-10 10:54 Peter Kuemmel Note Edited: 0030019
2012-07-10 10:56 Brad King Note Added: 0030020
2012-07-10 10:59 Peter Kuemmel Note Added: 0030021
2012-07-10 11:07 Brad King Note Added: 0030023
2012-07-10 11:07 Brad King Status assigned => resolved
2012-07-10 11:07 Brad King Resolution reopened => fixed
2012-08-09 19:43 David Cole Fixed in Version => CMake 2.8.9
2012-08-09 19:43 David Cole Target Version => CMake 2.8.9
2013-01-09 10:56 Robert Maynard Note Added: 0032036
2013-01-09 10:56 Robert Maynard Status resolved => closed


Copyright © 2000 - 2018 MantisBT Team