<div dir="ltr">On Sun, Sep 14, 2008 at 10:14 AM, Michael Wild <span dir="ltr">&lt;<a href="mailto:themiwi@gmail.com">themiwi@gmail.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d"><br>
On 13. Sep, 2008, at 10:57, Judicaël Bedouet wrote:<br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Thanks to both of you.<br>
<br>
I appreciate your example Michael but it can&#39;t work under Visual Studio. Command should be something like<br>
${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/hello${CMAKE_EXECUTABLE_SUFFIX}<br>
but apparently, at this stage, CMake has no way of knowing if build type is Debug or Release.<br>
Tell me if I&#39;m wrong.<br>
</blockquote>
<br>
<br></div>
I don&#39;t think you completely understood my code... I essentially replaced Bill&#39;s two lines by a single line which calls a CMake script.</blockquote><div>&nbsp;</div><div>I think I understood it. I tested it with Makefiles and there is no problem. But it doesn&#39;t work with Visual Studio. I try to update your code to make it work but I think it&#39;s not possible. Read this.<br>
<a href="http://www.cmake.org/cmake/help/cmake-2.6.html#variable:CMAKE_CFG_INTDIR">http://www.cmake.org/cmake/help/cmake-2.6.html#variable:CMAKE_CFG_INTDIR</a><br><br>&nbsp;<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
So if you manage to find out what configuration you are running in the calling script (probably a CMakeLists.txt), then you are able to pass that information on to my runTest.cmake script.</blockquote><div><br>This is exactly the problem. Under Visual Studio, it&#39;s impossible to know the configuration.<br>
<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">runTest.cmake is just a &quot;wrapper&quot; script which makes your test program behave as it should: output a &quot;pass/fail&quot; message and exit with either 0 or non-zero status by running the test program, redirecting the output into a file, and then comparing the contents of the output against a reference. The script is NOT run at configure-time or build-time, but when ctest is run.</blockquote>
<div><br>Fine.<br><br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d"><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
Moreover, I need at last a test whose command begins by the test program to be able to do coverage and dynamic analysis.<br>
<br>
</blockquote>
<br></div>
Huh? I don&#39;t understand that sentence, sorry...</blockquote><div><br>Oh, sorry. I use valgrind and gcov to perform coverage and memory checking tests. If ADD_TEST command begins by ${CMAKE_COMMAND}, I will perform memcheck tests on CMake and not on my test program. If I choose your method, I must therefore replace your line with two and execute each test twice.<br>
<br>add_test( hello_test_pass ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/hello${CMAKE_EXECUTABLE_SUFFIX} -D TEST_ARGS=1 -D TEST_OUTPUT=tmpfile.txt -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/testref.txt -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) # To compare output to reference file<br>
add_test( hello 1) # To perform memcheck tests<br><br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d"><br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
The minute I get back to work, I will try Bill&#39;s solution.<br>
<br>
ADD_TEST(MyTestCreateTest test --arg_test --output output)<br>
ADD_TEST(MyTestCreateCompare ${CMAKE_COMMAND} -E compare_files output outputTest)<br>
<br>
With first line, coverage and dynamic analysis will be done and there is no problem with Visual Studio.<br>
</blockquote>
<br></div>
As I said above, with my &quot;wrapper&quot; script, this is also the case.</blockquote><div><br>&quot;Coverage and dynamic analysis will be done and there is no problem with Visual Studio&quot;<br>I can&#39;t see how (Have a look at CTest documentation).<br>
<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d"><br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I must change source code of test programs to output a file but it&#39;s only two lines to redirect std::cout (and maybe std::cerr) to a file.<br>
</blockquote>
<br></div>
Whether you want to do this depends on how many test-programs you have to adapt... 2-3, OK, but if there are hundreds???<div class="Ih2E3d"></div></blockquote><div><br>Not so many.<br><br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d"><br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
With second line, I would be able to compare output of the test program to a reference file.<br>
</blockquote>
<br></div>
My script does that too.</blockquote><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
However, I have to concede that my solution (and also Bill&#39;s) is a bit of a quick hack. Actually your test program should be the one determining whether the test passed or failed, not cmake/ctest. But as I said, if you have hundreds of test-programs it might not be practical to adapt them all...<br>

<br>
HTH<br><font color="#888888">
<br>
Michael</font></blockquote></div><br>Thanks for your time,<br><br>J. Bedouet<br><br></div>