[cmake-developers] [CMake 0012589]: add_test() BROKEN: docs say target allowed, yet fails to evaluate properties (e.g. custom CMAKE_RUNTIME_OUTPUT_DIRECTORY)
Mantis Bug Tracker
mantis at public.kitware.com
Wed Nov 23 05:15:37 EST 2011
The following issue has been SUBMITTED.
======================================================================
http://www.itk.org/Bug/view.php?id=12589
======================================================================
Reported By: Andreas Mohr
Assigned To:
======================================================================
Project: CMake
Issue ID: 12589
Category: CMake
Reproducibility: always
Severity: major
Priority: normal
Status: new
======================================================================
Date Submitted: 2011-11-23 05:15 EST
Last Modified: 2011-11-23 05:15 EST
======================================================================
Summary: add_test() BROKEN: docs say target allowed, yet
fails to evaluate properties (e.g. custom CMAKE_RUNTIME_OUTPUT_DIRECTORY)
Description:
[includes working/failing test case below]
At least my local CMake 2.8.5 SVN has a weird (IOW, "broken") add_test()
which will result in CTest not being able to locate the test's binary,
despite add_test() docs (even in 2.8.2, but not yet in 2.6.4) stating that it
_is_ ok to simply pass the target as the executable argument to add_test().
And since aggregated, complete CMake configuration environment knowledge is put
to use to create a CTest configuration,
generically spoken a "generator" _SHOULD_ always use _ALL_ its implicit
knowledge about its objects (targets) to fill in _ALL_ attributes
required within the "dumb" generated file (CTest script).
If this crucial target-based mechanism does not work, then we could just as well
give up all the built-in automatic configuration elegance that CMake is supposed
to offer and code everything by hand instead ;-P
I'm sufficiently puzzled that this is even failing at all, since from an
object-oriented POV, it should be obvious that when querying a "target" object
about its prospective location, this location should _always_ be correctly
returned (and this does include properly obeying CMAKE_RUNTIME_OUTPUT_DIRECTORY
within the target object implementation), completely irrespective of whether
this target location request is being made by add_test() implementation or
somewhere else.
I suspect that CMake upstream might even unit test this feature,
but since CTest automatically searches various output paths
(Debug, Release, etc.) in case the binary cannot be found, a test would have
false-negatively worked in all cases where there has been no custom output path
specified (we're using a custom bin/!).
Thanks a ton!
Steps to Reproduce:
cmake_minimum_required(VERSION 2.8)
project(bug_add_test)
file(WRITE main.cpp "
int main()
{
return 0;
}
")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
add_executable(bug_add_test main.cpp)
function(hookup_test _target)
set(testname_ "${_target}")
set(enable_workaround false) # <---- TOGGLE THIS LINE! ----
if(enable_workaround)
# Work around incapable add_test(), by using a property which
# is said to be ""deprecated""... (*** SIGH ***).
get_property(test_location_ TARGET "${_target}" PROPERTY LOCATION)
set(testexe_ "${test_location_}")
else(enable_workaround)
set(testexe_ "${_target}")
endif(enable_workaround)
add_test("${testname_}" "${testexe_}")
endfunction(hookup_test _target)
# enable_testing() cannot be called within function scope,
# _needs_ to be done in root (~ dir).
enable_testing()
hookup_test(bug_add_test)
======================================================================
Issue History
Date Modified Username Field Change
======================================================================
2011-11-23 05:15 Andreas Mohr New Issue
======================================================================
More information about the cmake-developers
mailing list