diff options
author | don bright <hugh.m.bright@gmail.com> | 2013-01-28 05:38:50 (GMT) |
---|---|---|
committer | don bright <hugh.m.bright@gmail.com> | 2013-01-28 05:38:50 (GMT) |
commit | d6f2cc1a1e6f7bc55d137d653242086c29a1bf32 (patch) | |
tree | 6f9612971383d26374bbcf75b389d311a56bf492 /tests/CTestCustom.template | |
parent | d0856efe6da545693f9c50a8a2514a9f999ab5ef (diff) |
if we are on linux/BSD and there's no X running, try Xvfb automatically.
also workaround some Gallium bugs and Imagemagick bugs
Diffstat (limited to 'tests/CTestCustom.template')
-rw-r--r-- | tests/CTestCustom.template | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/CTestCustom.template b/tests/CTestCustom.template new file mode 100644 index 0000000..72e6443 --- /dev/null +++ b/tests/CTestCustom.template @@ -0,0 +1,68 @@ +# __header__ +# +# This template enables ctest to do things before and after the test runs. +# In our case, 1. Setup a virtual framebuffer, 2. pretty-print results +# +# As a template, this file is read inside of CMakeList.txt and certain +# words (__word__) are replaced with the cmake build dir/etc, at the time that +# cmake itself is run. Typically these are signified by two underscores (__) +# before and after the word in smallcase. +# +# The file then becomes CTestCustom.cmake inside the cmake build +# directory. It is 'run' at the time that ctest is run. + + +# Part 0. X11 and Virtual Framebuffer, for Linux/BSD. This is not used by +# Windows or Mac because they have alternate means of accessing OpenGL. + +set(debug_openscad_template 0) + +if( __cmake_system_name__ MATCHES "Linux|BSD") + set(DISPLAY_ENV $ENV{DISPLAY}) + if(DISPLAY_ENV) + message("X11 DISPLAY environment variable found. Assuming framebuffer exists at DISPLAY=${DISPLAY_ENV}") + else() + message("X11 DISPLAY environment variable not found. Calling virtualfb.sh") + execute_process( + COMMAND __cmake_current_source_dir__/virtualfb.sh start + OUTPUT_VARIABLE SVFB_OUT) + string(REGEX MATCH "DISPLAY=:[0-9.]*" VFB_DISPLAY_STR "${SVFB_OUT}") + string(REGEX MATCH ":[0-9.]*" VFB_DISPLAY "${VFB_DISPLAY_STR}") + string(REGEX MATCH "PID=[0-9.]*" VFB_PID_STR "${SVFB_OUT}") + string(REPLACE "PID=" "" VFB_PID "${VFB_PID_STR}") + + if (debug_openscad_template) + message("Output from virtualfb.sh script: ${SVFB_OUT}") + message("Display: ${VFB_DISPLAY}") + message("Process ID of vfb: ${VFB_PID}") + endif() + if ("${VFB_DISPLAY}" STREQUAL "" OR "${VFB_PID}" STREQUAL "") + message("Virtual framebuffer had a problem starting.") + execute_process("cat virtualfblog") + else() + message("Virtual framebuffer started. DISPLAY=${VFB_DISPLAY}, PID=${VFB_PID}") + endif() + + + # This line is the heart of the mechanism by which ctest is able to take + # the DISPLAY env variable of the Virtual Framebuffer it just started, and + # pass it on to its child processes (the tests from CTestTestfile.cmake + # in the build directory). + set(ENV{DISPLAY} "${VFB_DISPLAY}") + + set(CTEST_CUSTOM_POST_TEST "kill ${VFB_PID}") + endif() +endif() + + +# Part 1. Pretty Printing + +message("running 'opencsgtest --info' to generate sysinfo.txt") +execute_process(COMMAND __wine__ __cmake_current_binary_dir__/opencsgtest --info OUTPUT_FILE sysinfo.txt) +set(CTEST_CUSTOM_POST_TEST ${CTEST_CUSTOM_POST_TEST} "__python__ __cmake_current_source_dir__/test_pretty_print.py --builddir=__cmake_current_binary_dir__") + +if ( ${debug_openscad_template} ) + foreach(post_test ${CTEST_CUSTOM_POST_TEST} ) + message("Post test:" ${post_test}) + endforeach() +endif() |