[CMake] Re: [Dart] CMake & Dart2 general design question

Anton Deguet anton at cs.jhu.edu
Tue Jun 14 11:51:18 EDT 2005


Hi Andy,

Sorry to bug you again with this issue but I ran into a new problem.  Is
it possible to add two or more INCLUDE() in a given DartTestfile.txt?  I
have a directory with a CMake loop and for each iteration I generate a
test list.  I can't figure out how to compile the list of files and use
it with SET_DIRECTORY_PROPERTIES.

I tried:
FOREACH()
  SET(MY_LIST ${MY_LIST} newFile.txt)
ENDFOREACH()

SET_DIRECTORY_PROPERTIES(PROPERTIES TEST_INCLUDE_FILE ${MY_LIST})

I tried different variations but without success.  Any clue?

Anton


On Tue, 2005-06-07 at 10:27, Andy Cedilnik wrote:
> Hi Anton,
> 
> Great. Thanks for testing it.
> 
>        Andy
> 
> Anton Deguet wrote:
> 
> >Hi Andy
> >
> >I tested it and it works.  The default DartTestfile.txt now has a
> >INCLUDE() for the file I generated.  The only difference with your
> >example is that I use a post-build command to generate the list of
> >tests.  We use CppUnit to write our test programs and the list of known
> >tests is embedded in the code.  The only simple way to know which tests
> >have been implemented is to run the test program itself with a "--list"
> >option.  We added "--dart [-d]" to generate a Dart compatible output.
> >
> >Since we do that for a many libraries, I created a CMake macro:
> >MACRO(CISST_ADD_TESTS testProgram)
> >  ADD_CUSTOM_COMMAND(TARGET ${testProgram}
> >                     POST_BUILD
> >                     COMMAND ${EXECUTABLE_OUTPUT_PATH}/${testProgram}
> >                     ARGS -d >
> >${CMAKE_CURRENT_BINARY_DIR}/DartTestfile-${testProgram}.txt
> >                     COMMENT "Generating
> >DartTestfile-${testProgram}.txt")
> >
> >  SET_DIRECTORY_PROPERTIES(PROPERTIES TEST_INCLUDE_FILE
> >                   
> >"${CMAKE_CURRENT_BINARY_DIR}/DartTestfile-${testProgram}.txt")
> >
> >ENDMACRO(CISST_ADD_TESTS)
> >
> >
> >I can now do:
> >make clean
> >make
> >make test
> >ctest -V -D Experimental
> >
> >And everything works as expected.  Thanks a lot.
> >
> >Anton
> >
> >
> >
> >On Tue, 2005-06-07 at 10:01, Andy Cedilnik wrote:
> >  
> >
> >>Hi Anton,
> >>
> >>The feature is in.
> >>
> >>There is example in kwsys (CTestTest).
> >>
> >>The idea is:
> >>
> >>Create a cmake file, let say ExtraTest.cmake.in and put in whatever code
> >>you want.
> >>Then use configure command to process any options that you need in that
> >>file.
> >>
> >>      CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/ExtraTest.cmake.in"
> >>         "${CMAKE_CURRENT_BINARY_DIR}/ExtraTest.cmake")
> >>
> >>Now, add the following command:
> >>
> >>      SET_DIRECTORY_PROPERTIES(PROPERTIES TEST_INCLUDE_FILE
> >>        "${CMAKE_CURRENT_BINARY_DIR}/ExtraTest.cmake")
> >>
> >>Please test if it works for your case.
> >>
> >>Thank you.
> >>
> >>       Andy
> >>
> >>Andy Cedilnik wrote:
> >>
> >>    
> >>
> >>>Hi Anton,
> >>>
> >>>I will add similar feature to CMake. The feature will be to include a
> >>>file in CTest input file. This way you will be able to generate this
> >>>file at any point in time.
> >>>
> >>>      Andy
> >>>
> >>>Anton Deguet wrote:
> >>>
> >>> 
> >>>
> >>>      
> >>>
> >>>>Hi Andy,
> >>>>
> >>>>I am pretty happy to report that my idea works ... somewhat.  I believe
> >>>>this is because our tree is pretty simple and I only overwrite the
> >>>>DartTestfile.txt in the leaves:
> >>>>
> >>>>main
> >>>>+- lib1
> >>>>+- lib2
> >>>>
> >>>>In the main directory, CMakeLists.txt contains:
> >>>>
> >>>>ENABLE_TESTING()
> >>>>INCLUDE(Dart)
> >>>>
> >>>>SET (DROP_METHOD "xmlrpc")
> >>>>SET (DROP_SITE "http://myserver.net:8081")
> >>>>SET (DROP_LOCATION "cisst")
> >>>>SET (COMPRESS_SUBMISSION ON)
> >>>>
> >>>>MACRO(CISST_ADD_TESTS testProgram)
> >>>>ADD_CUSTOM_COMMAND(TARGET ${testProgram}
> >>>>                   POST_BUILD
> >>>>                   COMMAND ${EXECUTABLE_OUTPUT_PATH}/${testProgram}
> >>>>                   ARGS -d
> >>>>${CMAKE_CURRENT_BINARY_DIR}/DartTestfile.txt
> >>>>                   COMMENT "Generating DartTestfile.txt")
> >>>>ENDMACRO(CISST_ADD_TESTS)
> >>>>
> >>>>Then, in each lib, I compile a single test program and use the macro
> >>>>defined above:
> >>>>
> >>>>ADD_EXECUTABLE(cisstCommonTests ${SOURCE_FILES} ${HEADER_FILES})
> >>>>
> >>>>CISST_ADD_TESTS(cisstCommonTests)
> >>>>
> >>>>This works very well with:
> >>>>
> >>>>
> >>>>   
> >>>>
> >>>>        
> >>>>
> >>>>>make clean (optional)
> >>>>>make
> >>>>>make test
> >>>>>  
> >>>>>
> >>>>>     
> >>>>>
> >>>>>          
> >>>>>
> >>>>The issue with ctest is that is will always "Configure"  and overwrite
> >>>>the my DartTestfile.txt generated by the post build command.  Then I get
> >>>>an empty list of tests.  I tried the option "--build-nocmake" but
> >>>>without any luck.  So, this works:
> >>>>
> >>>>
> >>>>   
> >>>>
> >>>>        
> >>>>
> >>>>>make clean
> >>>>>ctest -V -D Experimental
> >>>>>  
> >>>>>
> >>>>>     
> >>>>>
> >>>>>          
> >>>>>
> >>>>But this won't:
> >>>>
> >>>>
> >>>>   
> >>>>
> >>>>        
> >>>>
> >>>>>make clean
> >>>>>make
> >>>>>ctest --build-nocmake -V -D Experimental
> >>>>>  
> >>>>>
> >>>>>     
> >>>>>
> >>>>>          
> >>>>>
> >>>>It all make sense, but it would be nice to have an option for ctest to
> >>>>not regenerate the DartTestfile.txt or at least regenerate only when
> >>>>needed (based on changes in CMakeLists.txt or timestamps).  The second
> >>>>option would probably work for me since it would also trigger the
> >>>>rebuilt and my post build custom command.
> >>>>
> >>>>Anton
> >>>>
> >>>>
> >>>>On Thu, 2005-06-02 at 09:33, Andy Cedilnik wrote:
> >>>>
> >>>>
> >>>>   
> >>>>
> >>>>        
> >>>>
> >>>>>Hi Anton,
> >>>>>
> >>>>>If you are using CMake, then you will have to know the test names while
> >>>>>writing CMakeLists files.
> >>>>>
> >>>>>I am working on a feature where tests could be added dynamically while
> >>>>>running ctest.
> >>>>>
> >>>>>What you suggested might work, but there may be problems with the way
> >>>>>DartTestfile.txt files are traversed.
> >>>>>
> >>>>>     Andy
> >>>>>
> >>>>>Anton Deguet wrote:
> >>>>>
> >>>>>  
> >>>>>
> >>>>>     
> >>>>>
> >>>>>          
> >>>>>
> >>>>>>Hello,
> >>>>>>
> >>>>>>Now that I have the basics working, I am looking at a way to integrate
> >>>>>>our existing test programs with CMake and Dart2.
> >>>>>>
> >>>>>>We have been using CppUnit and PyUnit for a while to test our libraries
> >>>>>>and their SWIG Python wrappers counter-parts.  Our tests are aggregated
> >>>>>>in one single executable per library: testProgram.  Then we can use:
> >>>>>>
> >>>>>>-1- "testProgram -r" run all tests
> >>>>>>-2- "testProgram -l" list available tests
> >>>>>>-3- "testProgram -r -t oneSpecificTest" to run one test
> >>>>>>
> >>>>>>I would like to have an entry in the dashboard for each test.  To do so,
> >>>>>>I though that I could:
> >>>>>>
> >>>>>>-1- compile testProgram (ADD_EXECUTABLE() as I already do)
> >>>>>>-2- in a post build command, run "testProgram -d" which would produce
> >>>>>>its own "DartTestfile.txt" with an "ADD_TEST(testName testProgram -r -t
> >>>>>>testName)" for each available test.
> >>>>>>-3- Run the tests with ctests
> >>>>>>
> >>>>>>Is this the right way to go or is there a more orthodox approach?
> >>>>>>
> >>>>>>Anton
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>    
> >>>>>>
> >>>>>>       
> >>>>>>
> >>>>>>            
> >>>>>>
> >>> 
> >>>
> >>>      
> >>>
-- 
Anton Deguet                          Systems Engineer
NSF ERC CISST                    Johns Hopkins University
http://cisst.org                              410 516 5261



More information about the CMake mailing list