Hey CMake and Co,

Here's a snippet from a log generated by ctest:

        <Error>
                <BuildLogLine>1042</BuildLogLine>
                <Text>/usr/bin/ld: cannot find -lboost_serialization-static
</Text>
                <PreContext>/usr/local/bin/cmake -E cmake_progress_report 
/.../Boost_1_35_0-build/CMakeFiles
[ 15%] Building CXX object 
libs/date_time/test/CMakeFiles/Date_time/testgreg_serialize.dir/gregorian/testgreg_serial
ize.cpp.o
cd /.../Boost_1_35_0-build/libs/date_time/test &amp;&amp; /usr/bin/c++   
-DBOOST_ALL_NO_LIB=1 -I/.../Boost_1_35_0
-DBOOST_DATE_TIME_STATIC_LINK -DBOOST_ALL_NO_LIB 
-DUSE_DATE_TIME_PRE_1_33_FACET_IO  -O3 -DNDEBUG         -o CMakeFil
es/Date_time/testgreg_serialize.dir/gregorian/testgreg_serialize.cpp.o -c 
/.../Boost_1_35_0/libs/date_time/test/greg
orian/testgreg_serialize.cpp
Linking CXX executable ../../../bin/tests/Date_time/testgreg_serialize
cd /.../Boost_1_35_0-build/libs/date_time/test &amp;&amp; /usr/local/bin/cmake 
-E cmake_link_script CMakeFiles/Date_
time/testgreg_serialize.dir/link.txt --verbose=1
/usr/bin/c++     -fPIC                 
CMakeFiles/Date_time/testgreg_serialize.dir/gregorian/testgreg_serialize.cpp.
o  -o ../../../bin/tests/Date_time/testgreg_serialize -rdynamic 
../../../lib/libboost_date_time.a -lboost_serializat
ion-static
</PreContext>
                <PostContext></PostContext>
                <RepeatCount>0</RepeatCount>
</Error>


        <Error>
                <BuildLogLine>1043</BuildLogLine>
                <Text>collect2: ld returned 1 exit status
</Text>
                <PreContext></PreContext>
                <PostContext>make[2]: Leaving directory 
`/.../Boost_1_35_0-build'
/usr/local/bin/cmake -E cmake_progress_report /.../Boost_1_35_0-build/CMakeFiles
make[2]: [bin/tests/Date_time/testgreg_serialize] Error 1 (ignored)
[ 15%] Built target Date_time/testgreg_serialize
/usr/bin/make -f 
libs/date_time/test/CMakeFiles/Date_time/testgreg_serialize_dll.dir/build.make 
libs/date_time/test/CMakeFiles/Date_time/testgreg_serialize_dll.dir/depend
make[2]: Entering directory `/.../Boost_1_35_0-build'</PostContext>
                <RepeatCount>0</RepeatCount>
</Error>

Here, a binary isn't linking due to the fact that one of its dependencies 
wasn't built (it was
turned off via cmake option).  But that isn't obvious from the structure of the 
data (you have to read
the context) and makes it impossible to categorize this error cleanly e.g. on a 
dashboard.  The best you
can do, it seems, is to report two different instances of 'filename unknown, 
line unknown',
even though the directory and the name of the failed target are reported by 
make.

By contrast here is a compiler error

        <Error>
                <BuildLogLine>3460</BuildLogLine>
                
<Text>/.../Boost_1_35_0/libs/smart_ptr/test/shared_ptr_test.cpp:3:2: error: 
#error TDS: playing with ctest. compiler error here.
</Text>
                <SourceFile>libs/smart_ptr/test/shared_ptr_test.cpp</SourceFile>
                <SourceLineNumber>3</SourceLineNumber>
                <PreContext>make[2]: Leaving directory `/.../Boost_1_35_0-build'
/usr/bin/make -f 
libs/smart_ptr/test/CMakeFiles/Smart_pointer/shared_ptr_test.dir/build.make 
libs/smart_ptr/test/CMakeFiles/Smart_pointer/shared_ptr_test.dir/build
make[2]: Entering directory `/.../Boost_1_35_0-build'
/usr/local/bin/cmake -E cmake_progress_report /.../Boost_1_35_0-build/CMakeFiles
[ 56%] Building CXX object 
libs/smart_ptr/test/CMakeFiles/Smart_pointer/shared_ptr_test.dir/shared_ptr_test.cpp.o
cd /.../Boost_1_35_0-build/libs/smart_ptr/test &amp;&amp; /usr/bin/c++   
-DBOOST_ALL_NO_LIB=1 -I/.../Boost_1_35_0     -O3 -DNDEBUG         -o 
CMakeFiles/Smart_pointer/shared_ptr_test.dir/shared_ptr_test.cpp.o -c 
/.../Boost_1_35_0/libs/smart_ptr/test/shared_ptr_test.cpp
</PreContext>
                <PostContext>make[2]: 
[libs/smart_ptr/test/CMakeFiles/Smart_pointer/shared_ptr_test.dir/shared_ptr_test.cpp.o]
 Error 1 (ignored)
Linking CXX executable ../../../bin/tests/Smart_pointer/shared_ptr_test
cd /.../Boost_1_35_0-build/libs/smart_ptr/test &amp;&amp; /usr/local/bin/cmake 
-E cmake_link_script CMakeFiles/Smart_pointer/shared_ptr_test.dir/link.txt --verbose=1
/usr/bin/c++     -fPIC                 
CMakeFiles/Smart_pointer/shared_ptr_test.dir/shared_ptr_test.cpp.o  -o 
../../../bin/tests/Smart_pointer/shared_ptr_test -rdynamic
make[2]: Leaving directory `/.../Boost_1_35_0-build'
/usr/local/bin/cmake -E cmake_progress_report /.../Boost_1_35_0-build/CMakeFiles 
</PostContext>
                <RepeatCount>0</RepeatCount>
</Error>

Where the source of the error is obvious.

I'd like to try to improve this.   At first glance you'd try to scrape the name 
of the failed target
out of the log and report it inside <Target> tags with each error/warning.
I've been picking through ctest's source code and am willing to give it a shot, 
but first....
Sanity check?  Has this been given any thought? Are there hidden showstoppers?  
 Would upstream take the changes?

Thanks,

-t


_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to