Merge pull request #5701 from maxGimeno/Ctest-Adapt_scripts_to_windows-maxGimeno

Testsuite: Adapt ctest scripts for use with cygwin
This commit is contained in:
Laurent Rineau 2021-06-02 17:20:49 +02:00
commit 5cbadbede6
14 changed files with 154 additions and 51 deletions

View File

@ -74,13 +74,35 @@ function(expand_list_with_globbing list_name)
endfunction()
function(cgal_add_compilation_test exe_name)
if(TEST compilation_of__${exe_name})
return()
endif()
add_test(NAME "compilation_of__${exe_name}"
COMMAND ${TIME_COMMAND} "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target "${exe_name}" --config "$<CONFIG>")
set_property(TEST "compilation_of__${exe_name}"
APPEND PROPERTY LABELS "${PROJECT_NAME}")
if(NOT CMAKE_VS_MSBUILD_COMMAND)
if(TEST compilation_of__${exe_name})
return()
endif()
add_test(NAME "compilation_of__${exe_name}"
COMMAND ${TIME_COMMAND} "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target "${exe_name}" --config "$<CONFIG>")
set_property(TEST "compilation_of__${exe_name}"
APPEND PROPERTY LABELS "${PROJECT_NAME}")
set_property(TEST "compilation_of__${exe_name}"
APPEND PROPERTY FIXTURES_REQUIRED "check_build_system_SetupFixture")
elseif(NOT TARGET compilation_of__${PROJECT_NAME})#CMAKE_VS_MSBUILD_COMMAND
#this target is just a flag, to deal with the scope problem with the tests
add_custom_target(compilation_of__${PROJECT_NAME})
add_test(NAME "compilation_of__${PROJECT_NAME}"
COMMAND ${TIME_COMMAND} "${CMAKE_VS_MSBUILD_COMMAND}" "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.sln" "-m:$ENV{NUMBER_OF_PROCESSORS}" "/t:Build" "/p:Configuration=$<CONFIG>")
set_property(TEST "compilation_of__${PROJECT_NAME}"
APPEND PROPERTY LABELS "${PROJECT_NAME}")
set_property(TEST "compilation_of__${PROJECT_NAME}"
APPEND PROPERTY FIXTURES_REQUIRED "check_build_system_SetupFixture")
set_tests_properties("compilation_of__${PROJECT_NAME}"
PROPERTIES RUN_SERIAL TRUE)
#because of the scope of the tests, this part cannot go in the relevant CMakeLists
if("${PROJECT_NAME}" STREQUAL "Polyhedron_Demo")
set_tests_properties(compilation_of__Polyhedron_Demo PROPERTIES TIMEOUT 2400)
elseif("${PROJECT_NAME}" STREQUAL "Mesh_3_Tests" OR "${PROJECT_NAME}" STREQUAL "Mesh_3_Examples")
set_tests_properties(compilation_of__${PROJECT_NAME} PROPERTIES TIMEOUT 1600)
endif()
endif()#CMAKE_VS_MSBUILD_COMMAND
if(NOT TARGET ALL_CGAL_TARGETS)
add_custom_target( ALL_CGAL_TARGETS )
endif()
@ -94,8 +116,6 @@ function(cgal_add_compilation_test exe_name)
set_property(TEST "check_build_system"
PROPERTY FIXTURES_SETUP "check_build_system_SetupFixture")
endif()
set_property(TEST "compilation_of__${exe_name}"
APPEND PROPERTY FIXTURES_REQUIRED "check_build_system_SetupFixture")
if(TARGET CGAL_Qt5_moc_and_resources) # if CGAL_Qt5 was searched, and is header-only
get_property(linked_libraries TARGET "${exe_name}" PROPERTY LINK_LIBRARIES)
# message(STATUS "${exe_name} depends on ${linked_libraries}")
@ -135,8 +155,13 @@ function(cgal_setup_test_properties test_name)
endif()
if(exe_name)
set_property(TEST "${test_name}"
APPEND PROPERTY DEPENDS "compilation_of__${exe_name}")
if(NOT CMAKE_VS_MSBUILD_COMMAND)
set_property(TEST "${test_name}"
APPEND PROPERTY DEPENDS "compilation_of__${exe_name}")
else()#CMAKE_VS_MSBUILD_COMMAND
set_property(TEST "${test_name}"
APPEND PROPERTY DEPENDS "compilation_of__${PROJECT_NAME}")
endif()#CMAKE_VS_MSBUILD_COMMAND
endif()
get_filename_component(_source_dir_abs ${CMAKE_CURRENT_SOURCE_DIR} ABSOLUTE)
@ -217,8 +242,13 @@ function(cgal_setup_test_properties test_name)
if(exe_name)
set_property(TEST ${test_name}
APPEND PROPERTY FIXTURES_REQUIRED "${exe_name}")
set_property(TEST "compilation_of__${exe_name}"
PROPERTY FIXTURES_SETUP "${exe_name}")
if(NOT CMAKE_VS_MSBUILD_COMMAND)
set_property(TEST "compilation_of__${exe_name}"
PROPERTY FIXTURES_SETUP "${exe_name}")
else()#CMAKE_VS_MSBUILD_COMMAND
set_property(TEST "compilation_of__${PROJECT_NAME}"
PROPERTY FIXTURES_SETUP "${exe_name}")
endif()#CMAKE_VS_MSBUILD_COMMAND
if((ANDROID OR CGAL_RUN_TESTS_THROUGH_SSH) AND NOT TEST push_of__${exe_name})
if(ANDROID)
add_test(NAME "push_of__${exe_name}"

View File

@ -48,8 +48,8 @@ include(${CGAL_USE_FILE})
find_package(
Qt5 QUIET
COMPONENTS OpenGL Script
OPTIONAL_COMPONENTS ScriptTools WebSockets)
COMPONENTS OpenGL Script Widgets
OPTIONAL_COMPONENTS ScriptTools WebSockets Network)
set_package_properties(
Qt5 PROPERTIES
@ -217,7 +217,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND)
STATUS "Qt5WebSockets was found. Using WebSockets is therefore possible.")
endif()
cgal_add_compilation_test(demo_framework)
#compilation_of__demo_framework is defined in polyhedron_demo_macros.cmake
# Let's define `three_EXPORT` during the compilation of `demo_framework`,
# in addition of `demo_framework_EXPORT` (defined automatically by
# CMake). That is to deal with the visibility of symbols of
@ -241,23 +241,11 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND)
target_link_libraries(point_dialog PUBLIC Qt5::OpenGL Qt5::Gui Qt5::Script
Qt5::Widgets)
add_custom_target(all_scene_items)
if(BUILD_TESTING)
cgal_add_compilation_test(all_scene_items)
set_property(
TEST compilation_of__all_scene_items
APPEND
PROPERTY DEPENDS compilation_of__demo_framework)
set_property(TEST compilation_of__all_scene_items APPEND PROPERTY TIMEOUT
1700)
endif(BUILD_TESTING)
macro(add_item item_name)
add_library(${item_name} SHARED ${ARGN})
target_link_libraries(
${item_name} PUBLIC demo_framework ${CGAL_LIBRARIES} Qt5::OpenGL Qt5::Gui
Qt5::Script Qt5::Widgets)
add_dependencies(all_scene_items ${item_name})
add_to_cached_list(CGAL_EXECUTABLE_TARGETS ${item_name})
endmacro(add_item)
@ -434,9 +422,9 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND)
add_to_cached_list(CGAL_EXECUTABLE_TARGETS CGAL_PMP)
#WS Server
if(TARGET Qt5::WebSockets)
if(TARGET Qt5::WebSockets AND TARGET Qt5::Network)
add_executable(WS_server Server_ws.cpp)
target_link_libraries(WS_server PUBLIC Qt5::WebSockets)
target_link_libraries(WS_server PUBLIC Qt5::WebSockets Qt5::Widgets Qt5::Network)
message(
STATUS "Qt5WebSockets was found. Using WebSockets is therefore possible.")
endif()

View File

@ -7,5 +7,5 @@ polyhedron_demo_plugin(camera_positions_plugin
${cameraUI_FILES}
KEYWORDS Viewer)
target_link_libraries( camera_positions_plugin PUBLIC demo_framework)
add_dependencies(camera_positions_plugin demo_framework)
target_link_libraries(camera_positions_plugin PUBLIC demo_framework)

View File

@ -47,6 +47,12 @@ if(TARGET CGAL::Eigen3_support)
scene_color_ramp
CGAL::Eigen3_support)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__classification_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()
if(TARGET CGAL::Boost_serialization_support AND TARGET CGAL::Boost_iostreams_support)
target_link_libraries(classification_plugin PUBLIC
CGAL::Boost_serialization_support

View File

@ -8,3 +8,10 @@ target_link_libraries(
polyhedron_demo_plugin(kernel_plugin Kernel_plugin)
target_link_libraries(kernel_plugin PUBLIC scene_surface_mesh_item)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__convex_hull_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()

View File

@ -37,3 +37,9 @@ target_link_libraries(
basic_generator_plugin
PUBLIC scene_surface_mesh_item scene_points_with_normal_item
scene_polylines_item)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__create_obb_mesh_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()

View File

@ -52,6 +52,17 @@ if(TARGET CGAL::Eigen3_support)
DESCRIPTION "A large scale non-linear optimization library."
PURPOSE "Can be used as a solver in the smoothing plugin.")
target_link_libraries(extrude_plugin PUBLIC CGAL::Eigen3_support)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__extrude_plugin
compilation_of__fairing_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
set_tests_properties(
compilation_of__hole_filling_plugin
compilation_of__smoothing_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()
else()
message(
STATUS
@ -153,3 +164,15 @@ polyhedron_demo_plugin(engrave_text_plugin Engrave_text_plugin
target_link_libraries(
engrave_text_plugin PUBLIC scene_surface_mesh_item scene_selection_item
scene_polylines_item)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__join_and_split_plugin
compilation_of__selection_plugin
compilation_of__triangulate_facets_plugin
compilation_of__isotropic_remeshing_plugin
compilation_of__random_perturbation_plugin
compilation_of__engrave_text_plugin
compilation_of__degenerated_faces_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()

View File

@ -15,6 +15,13 @@ if(NOT CGAL_DISABLE_GMP)
target_link_libraries(
parameterization_plugin PUBLIC scene_surface_mesh_item scene_textured_item
scene_selection_item CGAL::Eigen3_support)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__parameterization_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()
else()
message(
STATUS
@ -27,6 +34,11 @@ if(NOT CGAL_DISABLE_GMP)
${segmentationUI_FILES})
target_link_libraries(mesh_segmentation_plugin PUBLIC scene_surface_mesh_item)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__mesh_segmentation_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()
qt5_wrap_ui( mesh_simplificationUI_FILES Mesh_simplification_dialog.ui)
polyhedron_demo_plugin(mesh_simplification_plugin Mesh_simplification_plugin ${mesh_simplificationUI_FILES})

View File

@ -4,6 +4,13 @@ if(EIGEN3_FOUND AND "${EIGEN3_VERSION}" VERSION_GREATER "3.1.90")
polyhedron_demo_plugin(edit_plugin Edit_polyhedron_plugin Deform_mesh.ui)
target_link_libraries(edit_plugin PUBLIC scene_surface_mesh_item
scene_edit_item scene_selection_item)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
set_tests_properties(
compilation_of__edit_plugin
PROPERTIES RESOURCE_LOCK Selection_test_resources)
endif()
else()
message(
STATUS

View File

@ -28,18 +28,33 @@ include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake)
PROPERTY LIBRARY_OUTPUT_DIRECTORY
"${CGAL_POLYHEDRON_DEMO_PLUGINS_DIR}")
cgal_add_compilation_test(${plugin_name})
if(BUILD_TESTING)
set_property(TEST compilation_of__${plugin_name}
APPEND PROPERTY DEPENDS compilation_of__all_scene_items)
endif()
add_to_cached_list( CGAL_EXECUTABLE_TARGETS ${plugin_name} )
# Link with Qt
target_link_libraries( ${plugin_name} PUBLIC ${QT_LIBRARIES} )
# Link with the demo_framework
if(TARGET demo_framework)
target_link_libraries( ${plugin_name} PUBLIC demo_framework)
add_dependencies(${plugin_name} demo_framework)
if(BUILD_TESTING AND NOT CMAKE_VS_MSBUILD_COMMAND)
if(NOT TARGET compilation_of__demo_framework)
# This custom target is useless. It is used only as a flag to
# detect that the test has already been created.
add_custom_target(compilation_of__demo_framework)
add_dependencies( compilation_of__demo_framework demo_framework )
add_test(NAME "compilation_of__demo_framework"
COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target "demo_framework" --config "$<CONFIG>")
set_property(TEST "compilation_of__demo_framework"
APPEND PROPERTY LABELS "CGAL_build_system")
set_property(TEST "compilation_of__demo_framework"
PROPERTY FIXTURES_SETUP "check_build_system_SetupFixture")
set_property(TEST "compilation_of__demo_framework"
APPEND PROPERTY DEPENDS "compilation_of__CGAL_Qt5_moc_and_resources")
endif()
endif()
else()
target_link_libraries( ${plugin_name} PUBLIC Polyhedron_demo_framework)
add_dependencies(${plugin_name} Polyhedron_demo_framework)
endif()
# Link with CGAL
target_link_libraries( ${plugin_name} PUBLIC ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} )

View File

@ -1,5 +1,3 @@
#!/bin/bash
#!/bin/bash
#usage : script [-c -l -n -s -k] testsuite_dir
@ -23,7 +21,7 @@ export TAR="tar"
export GUNZIP="gunzip"
export COMPRESSOR="gzip"
export CONSOLE_OUTPUT="y"
export CGAL_HOME=`pwd`
export CGAL_HOME=$(pwd | sed -E 's/\/cygdrive\/([a-z])\//\U\1:\//')
export USE_TARGZ="y"
export USE_TARBZ="n"
export CGAL_RELEASE=""
@ -284,6 +282,8 @@ else
CGAL_DIR=`readlink "${CGAL_HOME}/CGAL-I"`
fi
CGAL_DIR=$(echo "$CGAL_DIR" | sed -E 's/\/cygdrive\/([a-z])\//\U\1:\//')
CGAL_RELEASE_ID=$(cat last_release_id)
for HOST in ${BUILD_HOSTS}; do
if [ "$HOST" != "localhost" ]; then

View File

@ -258,9 +258,9 @@ run_test_on_platform()
CGAL_BINARY_DIR=${CGAL_BINARY_DIR_BASE}/${PLATFORM}
cd "${CGAL_BINARY_DIR}"
log "${ACTUAL_LOGFILE}.test.${PLATFORM}" "Testing on host ${HOST} and platform ${PLATFORM}"
if [ -f "${REFERENCE_PLATFORMS_DIR}/${PLATFORM}/setup" ]; then
source "${REFERENCE_PLATFORMS_DIR}/${PLATFORM}/setup"
if [ -f "${CGAL_HOME}/${REFERENCE_PLATFORMS_DIR}/${PLATFORM}/setup" ]; then
source "${CGAL_HOME}/${REFERENCE_PLATFORMS_DIR}/${PLATFORM}/setup"
else
INIT_FILE="${CGAL_HOME}/${REFERENCE_PLATFORMS_DIR}/${PLATFORM}.cmake"
fi
@ -274,7 +274,7 @@ run_test_on_platform()
CMAKE_OPTS="${CMAKE_OPTS} -DWITH_examples=ON -DWITH_demos=ON"
fi
if [ -z "${SHOW_PROGRESS}" ]; then
cmake ${INIT_FILE:+"-C${INIT_FILE}"} -DBUILD_TESTING=ON ${CMAKE_OPTS} $CGAL_DIR >package_installation.log 2>&1
cmake ${INIT_FILE:+"-C${INIT_FILE}"} -DBUILD_TESTING=ON ${CMAKE_OPTS} $CGAL_DIR >package_installation.log 2>&1
else
cmake ${INIT_FILE:+"-C${INIT_FILE}"} -DBUILD_TESTING=ON ${CMAKE_OPTS} $CGAL_DIR 2>&1 |tee package_installation.log
fi
@ -294,14 +294,15 @@ run_test_on_platform()
#unsets the limit of 1024 bits for the logs through ssh
echo "SET(CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE 1000000000)" > CTestCustom.cmake
echo "SET(CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE 1000000000)" >> CTestCustom.cmake
CTEST_OPTS="-T Start -T Test --timeout 1200 -j${NUMBER_OF_PROCESSORS} ${DO_NOT_TEST:+-E execution___of__} "
CTEST_OPTS="-T Start -T Test --timeout 1200 ${DO_NOT_TEST:+-E execution___of__}"
if uname | grep -q "CYGWIN"; then
CTEST_OPTS="-C ${CONFIG_TYPE} ${CTEST_OPTS} -V"
CTEST_OPTS="-C ${CONFIG_TYPE} ${CTEST_OPTS}"
fi
if [ -z "${SHOW_PROGRESS}" ]; then
ctest ${TO_TEST:+-L ${TO_TEST} } ${CTEST_OPTS} ${KEEP_TESTS:+-FC .}> tmp.txt
ctest ${TO_TEST:+-L ${TO_TEST} } ${CTEST_OPTS} -j${NUMBER_OF_PROCESSORS} ${KEEP_TESTS:+-FC .}>tmp.txt
else
ctest ${TO_TEST:+-L ${TO_TEST} } ${CTEST_OPTS} ${KEEP_TESTS:+-FC .} |tee tmp.txt
ctest ${TO_TEST:+-L ${TO_TEST} } ${CTEST_OPTS} -j${NUMBER_OF_PROCESSORS} ${KEEP_TESTS:+-FC .}|tee tmp.txt
fi
#####################
## GET RESULTS ##
@ -321,7 +322,9 @@ run_test_on_platform()
echo "TESTER_NAME ${CGAL_TESTER}" >> "$RESULT_FILE"
echo "TESTER_ADDRESS ${TESTER_ADDRESS}" >> "$RESULT_FILE"
echo "CGAL_TEST_PLATFORM ${PLATFORM}" >> "$RESULT_FILE"
grep -e "^-- USING " "${CGAL_BINARY_DIR}/installation.log" >> $RESULT_FILE
grep -e "^-- USING " "${CGAL_BINARY_DIR}/installation.log"|sort -u >> $RESULT_FILE
#Use sed to get the content of DEBUG or RELEASE CXX FLAGS so that Multiconfiguration platforms do provide their CXXXFLAGS to the testsuite page (that greps USING CXXFLAGS to get info)
sed -i -E 's/(^-- USING )(DEBUG|RELEASE) (CXXFLAGS)/\1\3/' $RESULT_FILE
echo "------------" >> "$RESULT_FILE"
#if git branch, create empty scm file for python script
if [ -n "${SCRIPTS_DIR}" ]; then
@ -373,7 +376,7 @@ run_test_on_host()
setup_dirs
# Setup cmake
# Setup cmake
log "${ACTUAL_LOGFILE}" "running the testsuites"
if [ -n "${CONSOLE_OUTPUT}" ]; then
printf "\n-------------------------------------------------------\n"

View File

@ -19,7 +19,7 @@ function(add_Snap_rounding_tests name)
cgal_add_test(${name} TEST_NAME ${test_name} ARGUMENTS ${data_dir}/${file}
${data_dir}/output_${file})
add_test(NAME "${test_name}_compare_results"
COMMAND ${CMAKE_COMMAND} -E compare_files
COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol
${data_dir}/output_${file} ${data_dir}/gold_${file})
cgal_setup_test_properties("${test_name}_compare_results")
set_property(

View File

@ -86,8 +86,14 @@ with open_file_create_dir(result_file_name.format(dir=os.getcwd(),
print(" {result} {name} in {time} s : {value} ".format(result = "successful " if (t['Status'] == 'passed') else "ERROR: ", name = t['Name'], value = t['ExitValue'] if(t['ExitValue'] != "") else "SUCCESS" , time = t['ExecutionTime']), file=error)
if t['Status'] != 'passed':
result_for_label='n'
elif t['Output'] != None and re.search(r'(^|[^a-zA-Z_,:-])warning', t['Output'], flags=re.IGNORECASE):
result_for_label='w'
elif t['Output'] != None:
for m in re.finditer(r'(.*([^a-zA-Z_,:-])([^\d]\s)warning).*?(\[|\n)', t['Output'], flags=re.IGNORECASE):
n = re.search(r'cmake|cgal', m.group(0), flags=re.IGNORECASE)
if n:
result_for_label='w'
break;
else:
result_for_label='t'
with io.open("{}/ProgramOutput.{}".format(label, t['Name']), mode="w", encoding="utf-8") as f:
print("{}/ProgramOutput.{}".format(label, t['Name']))